From e0ec52ef7cd8aaa9687b8f8b9b68aec1d372a2ca Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期三, 08 五月 2019 10:56:33 +0800
Subject: [PATCH] 6680 子 【2.0】【开发】五行专精激活方式变更 / 【2.0】【前端】五行专精激活方式变更

---
 System/Skill/TreasureSkillModel.cs |  133 +++++++++++++++++++++++++++----------------
 1 files changed, 83 insertions(+), 50 deletions(-)

diff --git a/System/Skill/TreasureSkillModel.cs b/System/Skill/TreasureSkillModel.cs
index 8dc92cc..478cc0f 100644
--- a/System/Skill/TreasureSkillModel.cs
+++ b/System/Skill/TreasureSkillModel.cs
@@ -11,6 +11,7 @@
         Dictionary<int, TreasureSkill> treasureSkills = new Dictionary<int, TreasureSkill>();
         Dictionary<int, List<int>> jobTreasureSkills = new Dictionary<int, List<int>>();
         Dictionary<int, int> m_ExpertSkills = new Dictionary<int, int>();
+        Dictionary<int, int> m_ExpertActiveLevels = new Dictionary<int, int>();
 
         public List<int> skillLevelUpItems = new List<int>();
 
@@ -46,6 +47,7 @@
         public event Action<int> skillLevelUpRefresh;
         public event Action<int, int> potentialLevelRefresh;
         public event Action expertSkillRefresh;
+        public event Action<int> expertActiveRefresh;
         public override void Init()
         {
             ParseConfig();
@@ -62,6 +64,7 @@
                 skill.Reset();
             }
             m_ExpertSkills.Clear();
+            m_ExpertActiveLevels.Clear();
             serverInited = false;
         }
 
@@ -81,7 +84,16 @@
 
         private void PlayerDataRefreshEvent(PlayerDataType dataType)
         {
-            if (dataType == PlayerDataType.LV)
+            if (!serverInited)
+            {
+                return;
+            }
+            if (dataType == PlayerDataType.LV
+                || dataType == PlayerDataType.CDBPlayerRefresh_Mater
+                || dataType == PlayerDataType.CDBPlayerRefresh_Wood
+                || dataType == PlayerDataType.CDBPlayerRefresh_Water
+                || dataType == PlayerDataType.CDBPlayerRefresh_Fire
+                || dataType == PlayerDataType.CDBPlayerRefresh_Earth)
             {
                 UpdateRedpoint();
             }
@@ -110,17 +122,15 @@
         void ParseConfig()
         {
             var configs = TreasureSkillConfig.GetValues();
-            var index = 0;
             foreach (var config in configs)
             {
                 TreasureSkill treasureSkill;
                 if (!treasureSkills.TryGetValue(config.limitSkillId, out treasureSkill))
                 {
-                    treasureSkill = new TreasureSkill(config.limitSkillId, index);
+                    treasureSkill = new TreasureSkill(config.limitSkillId);
                     treasureSkills.Add(config.limitSkillId, treasureSkill);
-                    index++;
                 }
-                treasureSkill.potentials.Add(new TreasurePotential(config.id, 0, config.limitLevel, treasureSkill.redpoint.id));
+                treasureSkill.potentials.Add(new TreasurePotential(config.id, 0, config.limitLevel, treasureSkill.expertRedpoint.id));
                 var skillConfig = SkillConfig.Get(config.limitSkillId);
 
                 List<int> skills;
@@ -172,9 +182,9 @@
             return treasureSkills.TryGetValue(skillId, out treasureSkill);
         }
 
-        public bool TryGetExpertSkill(int skillId,out int _skill)
+        public bool TryGetExpertSkill(int skillId, out int _skill)
         {
-            return m_ExpertSkills.TryGetValue(skillId, out _skill);
+            return m_ExpertSkills.TryGetValue(skillId, out _skill) && _skill != 0;
         }
 
         public bool TryGetPotential(int skillId, out TreasurePotential potential)
@@ -191,6 +201,11 @@
                 return potential != null;
             }
             return false;
+        }
+
+        public bool TryGetExpertActiveLevel(int skillId, out int level)
+        {
+            return m_ExpertActiveLevels.TryGetValue(skillId, out level);
         }
 
         public void OnReceivePackage(int oldSkillID, int newSkillID)
@@ -260,6 +275,18 @@
             {
                 var data = package.InfoList[i];
                 m_ExpertSkills[(int)data.MainSkillID] = (int)data.ElementSkillID;
+
+                for (int j = 0; j < data.SkillCnt; j++)
+                {
+                    m_ExpertActiveLevels[(int)data.ActiveSkill[j].SkillID] = data.ActiveSkill[j].ActiveLV;
+                    if (serverInited)
+                    {
+                        if (expertActiveRefresh != null)
+                        {
+                            expertActiveRefresh((int)data.ActiveSkill[j].SkillID);
+                        }
+                    }
+                }
             }
             if (expertSkillRefresh != null)
             {
@@ -309,39 +336,6 @@
             return true;
         }
 
-        public bool TryLevelUpPotential(int skillId, out int error)
-        {
-            error = 0;
-            TreasurePotential potential;
-            if (TryGetPotential(skillId, out potential))
-            {
-                if (potential.level >= potential.maxLevel)
-                {
-                    error = 11;
-                    return false;
-                }
-                var config = potential.GetSkillConfig(potential.level);
-                if (config.LearnSkillReq != 0 && config.LearnSkillLV > 0)
-                {
-                    TreasurePotential requirePotential;
-                    if (!TryGetPotential(config.LearnSkillReq, out requirePotential)
-                        || requirePotential.level < config.LearnSkillLV)
-                    {
-                        error = 12;
-                        return false;
-                    }
-                }
-                var upConfig = potential.GetSkillConfig(potential.level + 1);
-                var count = packModel.GetItemCountByID(PackType.Item, upConfig.ExAttr4);
-                if (count < upConfig.ExAttr5)
-                {
-                    error = 13;
-                    return false;
-                }
-            }
-            return true;
-        }
-
         public void DisplayLevelUpError(int error)
         {
             switch (error)
@@ -382,20 +376,41 @@
             return false;
         }
 
-        public bool ExistAnyUnlockPotential(int skillId)
+        public bool ExistAnyActiveExpert(int skillId)
         {
             TreasureSkill treasureSkill;
             if (TryGetSkill(skillId, out treasureSkill))
             {
                 for (int i = 0; i < treasureSkill.potentials.Count; i++)
                 {
-                    if (PlayerDatas.Instance.baseData.LV >= treasureSkill.potentials[i].limitLevel)
+                    var level = 0;
+                    if (TryGetExpertActiveLevel(treasureSkill.potentials[i].id, out level)
+                        && level > 0)
                     {
                         return true;
                     }
                 }
             }
             return false;
+        }
+
+        public bool SatisfyActiveExpert(int skillId)
+        {
+            TreasurePotential expert;
+            if (!TryGetPotential(skillId, out expert))
+            {
+                return false;
+            }
+            if (PlayerDatas.Instance.baseData.LV < expert.limitLevel)
+            {
+                return false;
+            }
+            var level = 0;
+            TryGetExpertActiveLevel(skillId, out level);
+            var skillConfig = SkillConfig.Get(skillId + level);
+            var requireProperty = skillConfig.RequireProperty();
+            var requireValue = skillConfig.RequirePropertyValue();
+            return UIHelper.GetPropertyValue((PropertyType)requireProperty) >= requireValue;
         }
 
         public void SetAlreadyRemind()
@@ -422,15 +437,26 @@
                 }
 
                 var expertSkill = 0;
-                if (funcOpen && skill.level > 0
-                    && !TryGetExpertSkill(skill.skillId, out expertSkill)
-                    && ExistAnyUnlockPotential(skill.skillId))
+                if (funcOpen && !TryGetExpertSkill(skill.skillId, out expertSkill)
+                    && ExistAnyActiveExpert(skill.skillId))
                 {
-                    skill.expertRedpoint.state = RedPointState.Simple;
+                    skill.expertSelectRedpoint.state = RedPointState.Simple;
                 }
                 else
                 {
-                    skill.expertRedpoint.state = RedPointState.None;
+                    skill.expertSelectRedpoint.state = RedPointState.None;
+                }
+
+                foreach (var expert in skill.potentials)
+                {
+                    if (funcOpen && skill.level > 0 && SatisfyActiveExpert(expert.id))
+                    {
+                        expert.activeRedpoint.state = RedPointState.Simple;
+                    }
+                    else
+                    {
+                        expert.activeRedpoint.state = RedPointState.None;
+                    }
                 }
             }
         }
@@ -445,9 +471,10 @@
         public Redpoint redpoint { get; private set; }
         public Redpoint levelUpRedpoint { get; private set; }
         public Redpoint expertRedpoint { get; private set; }
+        public Redpoint expertSelectRedpoint { get; private set; }
         public List<TreasurePotential> potentials { get; private set; }
 
-        public TreasureSkill(int skillId, int redpointIndex)
+        public TreasureSkill(int skillId)
         {
             this.skillId = skillId;
             potentials = new List<TreasurePotential>();
@@ -456,10 +483,12 @@
             maxLevel = config.SkillMaxLV;
 
             redpoint = new Redpoint(10304,
-                TreasureSkillModel.REDPOINTID_BASE + redpointIndex);
+                TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
             levelUpRedpoint = new Redpoint(redpoint.id,
                 TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
             expertRedpoint = new Redpoint(redpoint.id,
+                TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
+            expertSelectRedpoint = new Redpoint(expertRedpoint.id,
                 TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
         }
 
@@ -510,9 +539,10 @@
         public readonly int id;
         public readonly int maxLevel;
         public readonly int limitLevel;
+        public readonly Redpoint activeRedpoint;
         public int level { get; private set; }
 
-        public TreasurePotential(int id, int level,int limitLevel, int redpointBase)
+        public TreasurePotential(int id, int level, int limitLevel, int redpointBase)
         {
             this.id = id;
             this.level = level;
@@ -520,6 +550,9 @@
 
             var config = SkillConfig.Get(id);
             maxLevel = config.SkillMaxLV;
+
+            activeRedpoint = new Redpoint(redpointBase,
+                TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
         }
 
         public SkillConfig GetSkillConfig(int level)

--
Gitblit v1.8.0