99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
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<SkillWrapper>
|
|
{
|
|
Dictionary<uint, PersistentData> map = new Dictionary<uint, PersistentData>();
|
|
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;
|
|
}
|
|
}
|
|
}
|