少年修仙传客户端代码仓库
client_linchunjie
2018-09-25 3016d74e293b0ed97c32dc0775a70bab82678ccd
System/Skill/TalentModel.cs
@@ -8,8 +8,8 @@
{
    public class TalentModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
    {
        Dictionary<int, TalentSkill> talentSkillDict = new Dictionary<int, TalentSkill>();
        Dictionary<int, Dictionary<int, List<int>>> talentSkills = new Dictionary<int, Dictionary<int, List<int>>>();
        Dictionary<int, TalentSkill> talentSkills = new Dictionary<int, TalentSkill>();
        Dictionary<int, TalentTree> talentTreeDict = new Dictionary<int, TalentTree>();
        int m_SelectSeries;
        public int selectSeries
@@ -68,7 +68,7 @@
        public void OnBeforePlayerDataInitialize()
        {
            foreach (var talent in talentSkillDict.Values)
            foreach (var talent in talentSkills.Values)
            {
                talent.level = 0;
            }
@@ -96,49 +96,42 @@
            var configs = Config.Instance.GetAllValues<TalentConfig>();
            for (int i = 0; i < configs.Count; i++)
            {
                var skillId = configs[i].SkillId;
                var skillId = configs[i].skillId;
                var skillConfig = Config.Instance.Get<SkillConfig>(skillId);
                TalentSkill talent;
                if (!TryGetTalent(skillConfig.SkillTypeID, out talent))
                {
                    talent = new TalentSkill(skillConfig.SkillTypeID, skillConfig.SkillMaxLV);
                    talent.level = 0;
                    talentSkillDict.Add(skillConfig.SkillTypeID, talent);
                    talentSkills.Add(skillConfig.SkillTypeID, talent);
                    Dictionary<int, List<int>> dict = null;
                    if (!talentSkills.TryGetValue(skillConfig.UseType, out dict))
                    TalentTree talentTree;
                    if (!talentTreeDict.TryGetValue(skillConfig.UseType, out talentTree))
                    {
                        dict = new Dictionary<int, List<int>>();
                        talentSkills.Add(skillConfig.UseType, dict);
                        talentTree = new TalentTree();
                        talentTreeDict.Add(skillConfig.UseType, talentTree);
                    }
                    List<int> list = null;
                    var type = configs[i].series * 10 + configs[i].talentType;
                    if (!dict.TryGetValue(type, out list))
                    {
                        list = new List<int>();
                        dict.Add(type, list);
                    }
                    list.Add(skillConfig.SkillTypeID);
                    talentTree.Add(configs[i], skillConfig.SkillTypeID);
                }
            }
        }
        public bool TryGetTalents(int job, int series, int talentType, out List<int> talents)
        public bool TryGetTalents(int job, int talentType, int talentSeries, out List<int> talents)
        {
            talents = null;
            Dictionary<int, List<int>> dict = null;
            TalentTree talentTree = null;
            var _job = (int)Math.Pow(2, job);
            talentSkills.TryGetValue(_job, out dict);
            if (null != dict)
            talentTreeDict.TryGetValue(_job, out talentTree);
            if (null != talentTree)
            {
                return dict.TryGetValue(series * 10 + talentType, out talents);
                return talentTree.TryGetTalents(talentType, talentSeries, out talents);
            }
            return false;
        }
        public bool TryGetTalent(int talentId,out TalentSkill talent)
        public bool TryGetTalent(int talentId, out TalentSkill talent)
        {
            return talentSkillDict.TryGetValue(talentId, out talent);
            return talentSkills.TryGetValue(talentId, out talent);
        }
        public int GetTalentTypeTotalPoint(int series, int talentType)
@@ -166,7 +159,7 @@
            TalentSkill talent;
            if (TryGetTalent(talentId, out talent))
            {
                if (talent.level >= talent.max)
                if (talent.level >= talent.maxLevel)
                {
                    error = 1;
                    return false;
@@ -177,17 +170,9 @@
                    return false;
                }
                var talentConfig = Config.Instance.Get<TalentConfig>(talent.skillId + talent.level);
                if (talentConfig.property != 0)
                if (talentConfig.requireSeriesPoint != 0)
                {
                    if (UIHelper.GetPropertyMapPlayerData((AttrEnum)talentConfig.property) < talentConfig.propertyValue)
                    {
                        error = 3;
                        return false;
                    }
                }
                if (talentConfig.seriesCondition != 0)
                {
                    if (GetTalentTypeTotalPoint(talentConfig.series, talentConfig.seriesCondition) < talentConfig.point)
                    if (GetTalentTypeTotalPoint(talentConfig.requireSeries, talentConfig.type) < talentConfig.requireSeriesPoint)
                    {
                        error = 4;
                        return false;
@@ -246,12 +231,76 @@
    {
        public int skillId { get; private set; }
        public int level { get; set; }
        public int max { get; private set; }
        public int maxLevel { get; private set; }
        public TalentSkill(int id, int maxLevel)
        public TalentSkill(int skillId, int maxLevel)
        {
            skillId = id;
            max = maxLevel;
            this.skillId = skillId;
            this.maxLevel = maxLevel;
        }
    }
    public class TalentSeries
    {
        public int series { get; private set; }
        public List<int> talentSkills { get; private set; }
        public TalentSeries(int series)
        {
            this.series = series;
            talentSkills = new List<int>();
        }
        public void Add(int skillId)
        {
            if (talentSkills.Contains(skillId))
            {
                return;
            }
            talentSkills.Add(skillId);
        }
    }
    public class TalentTree
    {
        Dictionary<int, List<TalentSeries>> talentSeriesDict = new Dictionary<int, List<TalentSeries>>();
        public void Add(TalentConfig config, int skillId)
        {
            List<TalentSeries> list = null;
            if (!talentSeriesDict.TryGetValue(config.type, out list))
            {
                list = new List<TalentSeries>();
                talentSeriesDict.Add(config.type, list);
            }
            TalentSeries talentSeries = list.Find((x) =>
             {
                 return x.series == config.series;
             });
            if (talentSeries == null)
            {
                talentSeries = new TalentSeries(config.series);
                list.Add(talentSeries);
            }
            talentSeries.Add(skillId);
        }
        public bool TryGetTalents(int type, int series, out List<int> list)
        {
            list = null;
            if (talentSeriesDict.ContainsKey(type))
            {
                var talentSeries = talentSeriesDict[type].Find((x) =>
                 {
                     return x.series == series;
                 });
                if (talentSeries != null)
                {
                    list = talentSeries.talentSkills;
                    return true;
                }
            }
            return false;
        }
    }
}