From 90d6578412b713ec00f31a9e5a1a1d865e484803 Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期三, 06 三月 2019 15:45:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into Auction

---
 Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs |  112 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 71 insertions(+), 41 deletions(-)

diff --git a/Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs b/Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs
index 8b1ede8..dde9857 100644
--- a/Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs
+++ b/Core/GameEngine/Model/Player/Skill/PlayerSkillDatas.cs
@@ -9,13 +9,15 @@
 
 public class PlayerSkillDatas
 {
-    private Dictionary<int, PlayerSkillData> _playerSkills = new Dictionary<int, PlayerSkillData>();
-    private Dictionary<int, PlayerSkillData> _quickSkills = new Dictionary<int, PlayerSkillData>();
-    public static event Action OnQuickSkillRefresh;
-    public static event Action OnRefreshSkill;
+    private Dictionary<int, PlayerSkillData> m_PlayerSkills = new Dictionary<int, PlayerSkillData>();
+    private Dictionary<int, PlayerSkillData> m_QuickSkills = new Dictionary<int, PlayerSkillData>();
     private Dictionary<int, List<int>> filterPlayerSkillDic = new Dictionary<int, List<int>>();
     private Dictionary<int, int> filterQuickSkillDic = new Dictionary<int, int>();
+
+    public static event Action OnQuickSkillRefresh;
+    public static event Action OnRefreshSkill;
     private bool hasInitQuickSkill = false;
+
     private bool isServerPrepare = false;
 
     SkillModel m_Model;
@@ -38,30 +40,32 @@
         }
 
         PlayerSkillData data = null;
-        _playerSkills.TryGetValue(vNetData.NewSkillID, out data);
+        m_PlayerSkills.TryGetValue(vNetData.NewSkillID, out data);
         if (data == null)
         {
             data = new PlayerSkillData(vNetData.NewSkillID, 1);
-            _playerSkills.Add(data.id, data);
+            m_PlayerSkills.Add(data.id, data);
         }
 
         model.CheckEquipPassSkill(data);
 
         bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
 
+        
+        if (hasInitQuickSkill)
+        {
+            int pos = ContainsQuickSkillType(data.id);
+            if (pos != -1)
+            {
+                SetQuickSkill(pos, data.id);
+            }
+        }
+
         PlayerSkillData olddata = null;
-        _playerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
+        m_PlayerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
         if (olddata != null)
         {
-            if (hasInitQuickSkill)
-            {
-                int pos = ContainsQuickSkill(olddata.id);
-                if (pos != -1 && !fitter)
-                {
-                    SetQuickSkill(pos, data.id);
-                }
-            }
-            _playerSkills.Remove(vNetData.OldSkillID);
+            m_PlayerSkills.Remove(vNetData.OldSkillID);
             olddata = null;
         }
 
@@ -85,10 +89,10 @@
 
     public void SetQuickSkills()
     {
-        _quickSkills.Clear();
+        m_QuickSkills.Clear();
         for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
         {
-            _quickSkills.Add(i, null);
+            m_QuickSkills.Add(i, null);
         }
         for (int i = 0; i <= SkillModel.QUICK_SKILL_COUNT; i++)
         {
@@ -100,6 +104,11 @@
                 {
                     continue;
                 }
+                var config = SkillConfig.Get(id);
+                if (config == null)
+                {
+                    continue;
+                }
                 PlayerSkillData data = GetSKillById(id);
                 if (data == null)
                 {
@@ -107,7 +116,7 @@
                 }
                 if (!GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id))
                 {
-                    _quickSkills[i] = data;
+                    m_QuickSkills[i] = data;
                 }
             }
         }
@@ -129,7 +138,10 @@
 
     public void UpdateQuickSkill(PlayerSkillData data)
     {
-        if (!hasInitQuickSkill) return;
+        if (!hasInitQuickSkill)
+        {
+            return;
+        }
         bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
         if (fitter || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
         {
@@ -169,20 +181,20 @@
     public PlayerSkillData GetQuickSkillByPos(int pos)
     {
         PlayerSkillData data = null;
-        _quickSkills.TryGetValue(pos, out data);
+        m_QuickSkills.TryGetValue(pos, out data);
         return data;
     }
 
     public PlayerSkillData GetSKillById(int id)
     {
         PlayerSkillData data = null;
-        _playerSkills.TryGetValue(id, out data);
+        m_PlayerSkills.TryGetValue(id, out data);
         return data;
     }
 
     public Dictionary<int, PlayerSkillData> GetQuickSkills()
     {
-        return _quickSkills;
+        return m_QuickSkills;
     }
 
     public void SetQuickSkill(int pos, int id)
@@ -201,17 +213,16 @@
         {
             return;
         }
-        if (data.skillCfg == null || PlayerDatas.Instance.baseData.LV < data.skillCfg.LearnLVReq
-            || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
+        if (data.skillCfg == null || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
         {
             ServerTipDetails.DisplayNormalTip(Language.Get("L1009"));
             return;
         }
         bool change = false;
-        for (int i = 0; i < _quickSkills.Count; i++)
+        for (int i = 0; i < m_QuickSkills.Count; i++)
         {
             PlayerSkillData skill = null;
-            _quickSkills.TryGetValue(i, out skill);
+            m_QuickSkills.TryGetValue(i, out skill);
             if (skill == null)
             {
                 continue;
@@ -223,21 +234,21 @@
             else if (skill.id == id)
             {
                 change = true;
-                PlayerSkillData temp = _quickSkills[pos];
-                _quickSkills[pos] = skill;
-                _quickSkills[i] = temp;
+                PlayerSkillData temp = m_QuickSkills[pos];
+                m_QuickSkills[pos] = skill;
+                m_QuickSkills[i] = temp;
                 break;
             }
         }
         if (!change)
         {
-            _quickSkills[pos] = data;
+            m_QuickSkills[pos] = data;
         }
 
-        for (int i = 0; i < _quickSkills.Count; i++)
+        for (int i = 0; i < m_QuickSkills.Count; i++)
         {
             PlayerSkillData skill = null;
-            _quickSkills.TryGetValue(i, out skill);
+            m_QuickSkills.TryGetValue(i, out skill);
             if (skill != null)
             {
                 string val = MathUtils.Convert10To64(skill.id);
@@ -257,15 +268,34 @@
 
     public Dictionary<int, PlayerSkillData> GetAllSkill()
     {
-        return _playerSkills;
+        return m_PlayerSkills;
     }
 
     public int ContainsQuickSkill(int id)
     {
-        foreach (int pos in _quickSkills.Keys)
+        foreach (int pos in m_QuickSkills.Keys)
         {
-            if (_quickSkills[pos] == null) continue;
-            if (_quickSkills[pos].id == id) return pos;
+            if (m_QuickSkills[pos] == null) continue;
+            if (m_QuickSkills[pos].id == id) return pos;
+        }
+        return -1;
+    }
+
+    public int ContainsQuickSkillType(int id)
+    {
+        foreach (int pos in m_QuickSkills.Keys)
+        {
+            if (m_QuickSkills[pos] == null)
+            {
+                continue;
+            }
+            var quickSkillConfig = SkillConfig.Get(m_QuickSkills[pos].id);
+            var skillConfig = SkillConfig.Get(id);
+            if (quickSkillConfig != null && skillConfig != null
+                && quickSkillConfig.SkillTypeID == skillConfig.SkillTypeID)
+            {
+                return pos;
+            }
         }
         return -1;
     }
@@ -296,7 +326,7 @@
 
     public PlayerSkillData GetSkillBySkillTypeID(int typeID)
     {
-        foreach (var skill in _playerSkills.Values)
+        foreach (var skill in m_PlayerSkills.Values)
         {
             if (skill.typeID == typeID)
                 return skill;
@@ -307,7 +337,7 @@
     public int GetSkillCountByType(int _type)
     {
         var count = 0;
-        foreach (var _skill in _playerSkills.Values)
+        foreach (var _skill in m_PlayerSkills.Values)
         {
             if (_skill.skillCfg.FuncType == _type)
             {
@@ -319,8 +349,8 @@
 
     public void ClearSkillData()
     {
-        _quickSkills.Clear();
-        _playerSkills.Clear();
+        m_QuickSkills.Clear();
+        m_PlayerSkills.Clear();
     }
 }
 

--
Gitblit v1.8.0