From 8ebdcb8980b7a630beb6a1ff82381baa0ab2ddb5 Mon Sep 17 00:00:00 2001
From: client_Lhy <995049470@qq.com>
Date: 星期四, 04 七月 2019 13:58:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into LuaOrgan

---
 System/Skill/SkillModel.cs |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/System/Skill/SkillModel.cs b/System/Skill/SkillModel.cs
index 8de9ba2..400b259 100644
--- a/System/Skill/SkillModel.cs
+++ b/System/Skill/SkillModel.cs
@@ -57,7 +57,18 @@
         public int minTaskHole { get; private set; }
         public int maxTaskHole { get; private set; }
 
+        public bool skillMatchRedpointable
+        {
+            get { return LocalSave.GetBool("SkillMatchRedpointable_" + PlayerDatas.Instance.baseData.PlayerID); }
+            set
+            {
+                LocalSave.SetBool("SkillMatchRedpointable_" + PlayerDatas.Instance.baseData.PlayerID, value);
+                UpdateSkillMatchRedpoint();
+            }
+        }
+
         public readonly Redpoint redpoint = new Redpoint(103, 10301);
+        public readonly Redpoint skillMatchRedpoint = new Redpoint(10301, 1030101);
 
         void ParseConfig()
         {
@@ -193,6 +204,92 @@
                 return skill.GetSkillConfig(skill.level).SkillID;
             }
             return skillID;
+        }
+
+        public bool IsXpSkill(int skillId)
+        {
+            var config = SkillConfig.Get(skillId);
+            if (config != null)
+            {
+                var job = PlayerDatas.Instance.baseData.Job;
+                if (xpSkillsDic.ContainsKey(job))
+                {
+                    return xpSkillsDic[job] == config.SkillTypeID;
+                } 
+            }
+            return false;
+        }
+
+        void VerifyQuickSkillExistXp()
+        {
+            var quickSkills = PlayerDatas.Instance.skill.GetQuickSkills();
+            var existXp = false;
+            var lastIndex = 0;
+            foreach (var index in quickSkills.Keys)
+            {
+                if (quickSkills[index] != null)
+                {
+                    if (IsXpSkill(quickSkills[index].id))
+                    {
+                        existXp = true;
+                        QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, "***", index);
+                        continue;
+                    }
+                    if (existXp)
+                    {
+                        var temp = QuickSetting.Instance.GetQuickSetting(QuickSetting.QuickSettingType.Skill, index);
+                        QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, temp, index - 1);
+                        QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, "***", index);
+                    }
+                    lastIndex = index;
+                }
+            }
+            if (existXp)
+            {
+                if (lastIndex == QUICK_SKILL_COUNT - 1)
+                {
+                    var skills = GetActSkills();
+                    for (int i = 0; i < skills.Count; i++)
+                    {
+                        if (PlayerDatas.Instance.skill.GetSKillById(skills[i]) != null
+                            && !IsXpSkill(skills[i]) && PlayerDatas.Instance.skill.ContainsQuickSkill(skills[i]) == -1)
+                        {
+                            string value = MathUtils.Convert10To64(skills[i]);
+                            QuickSetting.Instance.SetQuickSetting(QuickSetting.QuickSettingType.Skill, value, lastIndex);
+                            break;
+                        }
+                    }
+                }
+
+                QuickSetting.Instance.SendPackage();
+                PlayerDatas.Instance.skill.SetQuickSkills();
+            }
+        }
+
+        List<int> GetActSkills()
+        {
+            List<int> skills = new List<int>();
+            var skillType = (int)Math.Pow(2, PlayerDatas.Instance.baseData.Job);
+            Dictionary<int, List<int>> dict = skillActDict[skillType];
+            foreach (int key in dict.Keys)
+            {
+                List<int> list = dict[key];
+                var skillId = list[0];
+                foreach (var id in list)
+                {
+                    if (PlayerDatas.Instance.skill.GetSKillById(id) != null)
+                    {
+                        skillId = id;
+                        break;
+                    }
+                }
+                if (PlayerDatas.Instance.skill.GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(skillId))
+                {
+                    continue;
+                }
+                skills.Add(skillId);
+            }
+            return skills;
         }
         #endregion
 
@@ -545,6 +642,8 @@
             }
             playerLoginOk = true;
             UpdateRedpoint();
+            VerifyQuickSkillExistXp();
+            UpdateSkillMatchRedpoint();
             //UpdateTaskHoleRedpoint();
         }
 
@@ -659,6 +758,11 @@
             }
         }
 
+        void UpdateSkillMatchRedpoint()
+        {
+            skillMatchRedpoint.state = skillMatchRedpointable ? RedPointState.Simple : RedPointState.None;
+        }
+
         public void SetDayRemind()
         {
             DayRemind.Instance.SetDayRemind(DayRemind.PASS_SKILL_REDPOINT, true);

--
Gitblit v1.8.0