| | |
| | | {
|
| | | 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
|
| | |
| | |
|
| | | public void OnBeforePlayerDataInitialize()
|
| | | {
|
| | | foreach (var talent in talentSkillDict.Values)
|
| | | foreach (var talent in talentSkills.Values)
|
| | | {
|
| | | talent.level = 0;
|
| | | }
|
| | |
| | | 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)
|
| | |
| | | TalentSkill talent;
|
| | | if (TryGetTalent(talentId, out talent))
|
| | | {
|
| | | if (talent.level >= talent.max)
|
| | | if (talent.level >= talent.maxLevel)
|
| | | {
|
| | | error = 1;
|
| | | return false;
|
| | |
| | | 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;
|
| | |
| | | {
|
| | | 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;
|
| | | }
|
| | | }
|
| | | } |