using BrewMonster.Scripts.Skills; using CSNetwork.GPDataType; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BrewMonster.Assets.PerfectWorld.Scripts.Skills { public struct PersistentData { public int ability; // ÊìÁ·¶È public int level; // ¼¶±ð public PersistentData(int _t = 0, int _l = 1) { ability = (_t); level = (_l); } }; public class SkillWrapper : Singleton { Dictionary map = new Dictionary(); public void LoadData(cmd_skill_data pdata) { map.Clear(); PersistentData skill; for (int i = 0; i < (int)pdata.skill_count; i++) { cmd_skill_data.SKILL item = pdata.skill_list[i]; skill.level = item.level; skill.ability = item.ability; map[(uint)item.id_skill] = skill; } } public bool IsOverridden(uint id) { foreach (var kvp in map) { // giả sử bạn cũng có overload IsOverridden(uint id, uint otherId) if (IsOverridden(id, kvp.Key)) return true; } return false; } public bool IsOverridden(uint id, uint senior_id) { SkillStub stub = SkillStub.GetStub(senior_id); if (stub == null || stub.is_senior == 0) return false; foreach (var pre_id in stub.pre_skills.Keys) { if (pre_id <= 0) continue; if (id == pre_id) return true; if (IsOverridden(id, pre_id)) return true; } return false; } public int GetLevel(uint id) { if (map.TryGetValue(id, out PersistentData data)) return data.level; return 0; } public int GetAbility(uint id) { if (map.TryGetValue(id, out PersistentData data)) return data.ability; return 0; } public int SetAbility(uint id, int ability) { if (map.TryGetValue(id, out PersistentData data)) { int old = data.ability; data.ability = ability; map[id] = data; return old; } return 0; } public int SetLevel(uint id, int level) { if (map.TryGetValue(id, out PersistentData data)) { int old = data.level; data.level = level; map[id] = data; return old; } return 0; } } }