From 115e2385f77aee90c034d2d8d2d559b1b4cf58ad Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期六, 22 六月 2019 23:22:37 +0800
Subject: [PATCH] 382 控制状态下可使用技能

---
 Fight/Actor/AI/HeroAI_KillUntilDie.cs    |   11 ++++-
 Fight/Actor/HeroBehaviour.cs             |   19 +++++++++
 System/MainWin/MainWinSkillController.cs |   22 +++++++++++
 Fight/GameActor/GA_Hero.cs               |    1 
 Fight/Actor/Status/StatusMgr.cs          |   12 ------
 Fight/Actor/AI/HeroAI_Base.cs            |   35 ++++++++++++++---
 6 files changed, 77 insertions(+), 23 deletions(-)

diff --git a/Fight/Actor/AI/HeroAI_Base.cs b/Fight/Actor/AI/HeroAI_Base.cs
index 76eb8e4..b5b7d94 100644
--- a/Fight/Actor/AI/HeroAI_Base.cs
+++ b/Fight/Actor/AI/HeroAI_Base.cs
@@ -7,6 +7,15 @@
 
 public abstract class HeroAI_Base
 {
+    private TreasureSkillModel m_TreasureSkillModel;
+    private TreasureSkillModel treasureSkillModel
+    {
+        get
+        {
+            return m_TreasureSkillModel ?? (m_TreasureSkillModel = ModelCenter.Instance.GetModel<TreasureSkillModel>());
+        }
+    }
+
     public static byte stopReason = 0;
 
     private SkillModel m_SkillModel;
@@ -88,8 +97,26 @@
 
             if (_skill != null && _skill.skillInfo != null && _skill.skillInfo.config != null)
             {
+                int _expertSkill = 0;
+                bool _forceCast = false;
+
+                if (treasureSkillModel.TryGetExpertSkill(_skill.id, out _expertSkill))
+                {
+                    int _level = 0;
+                    if (treasureSkillModel.TryGetExpertActiveLevel(_expertSkill, out _level))
+                    {
+                        _expertSkill += (_level - 1);
+                    }
+                    SkillHelper.EffectValue _effectValue;
+                    var _skillInfo = SkillHelper.Instance.Get(_expertSkill);
+                    if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+                    {
+                        _forceCast = true;
+                    }
+                }
+
                 // 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
-                if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
+                if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config) && !_forceCast)
                 {
                     return _skill;
                 }
@@ -141,12 +168,6 @@
         }
 
         if (StatusMgr.Instance.IsExist(_hero.ServerInstID, skillID))
-        {
-            return false;
-        }
-
-        // 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
-        if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
         {
             return false;
         }
diff --git a/Fight/Actor/AI/HeroAI_KillUntilDie.cs b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
index dadf8a2..6e2774f 100644
--- a/Fight/Actor/AI/HeroAI_KillUntilDie.cs
+++ b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
@@ -102,8 +102,7 @@
         GA_Hero _hero = PlayerDatas.Instance.hero;
         if (_hero == null
          || _hero.ActorInfo.serverDie
-         || !_hero.CanCastSkill()
-         || !_hero.CanCommonAtk())
+         || !_hero.CanCastSkill())
         {
             return;
         }
@@ -175,6 +174,14 @@
             return;
         }
 
+        if (_skill.skillInfo.config.FuncType == 8)
+        {
+            if (!_hero.CanCommonAtk())
+            {
+                return;
+            }
+        }
+
         bool _forceMove = _skill.skillInfo.soFile != null && _skill.skillInfo.soFile.forceMove;
 
         if (_target == null ||
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index 5c8e7c4..fea9e36 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -114,7 +114,24 @@
 
         Skill _skill = m_Hero.SkillMgr.Get(skillID);
 
-        if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config))
+        int _expertSkill = 0;
+        bool _forceCast = false;
+        if (tsModel.TryGetExpertSkill(skillID, out _expertSkill))
+        {
+            int _level = 0;
+            if (tsModel.TryGetExpertActiveLevel(_expertSkill, out _level))
+            {
+                _expertSkill += (_level - 1);
+            }
+            SkillHelper.EffectValue _effectValue;
+            var _skillInfo = SkillHelper.Instance.Get(_expertSkill);
+            if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+            {
+                _forceCast = true;
+            }
+        }
+
+        if ((!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config) || m_Hero.IsStun()) && !_forceCast)
         {
             return;
         }
diff --git a/Fight/Actor/Status/StatusMgr.cs b/Fight/Actor/Status/StatusMgr.cs
index 8bed84f..cb893f0 100644
--- a/Fight/Actor/Status/StatusMgr.cs
+++ b/Fight/Actor/Status/StatusMgr.cs
@@ -652,18 +652,6 @@
 
     public bool CanAttack(uint sid, SkillConfig _config)
     {
-        var _actorFight = GAMgr.Instance.GetBySID(sid) as GActorFight;
-        SkillHelper.EffectValue _effectValue;
-        SkillHelper.SkillInfo _skillInfo;
-
-        if (_actorFight.SkillMgr.TryGetPassiveEffectValue(4093, out _effectValue, out _skillInfo))
-        {
-            if (_skillInfo.config.ExAttr1 == _config.SkillID)
-            {
-                return true;
-            }
-        }
-
         List<Status_Base> _list = null;
         if (m_StatusDict.TryGetValue(sid, out _list))
         {
diff --git a/Fight/GameActor/GA_Hero.cs b/Fight/GameActor/GA_Hero.cs
index 23fe13b..2f39830 100644
--- a/Fight/GameActor/GA_Hero.cs
+++ b/Fight/GameActor/GA_Hero.cs
@@ -811,7 +811,6 @@
     {
         return !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.Safe)
             && !MapArea.IsInMapArea(CurMapArea, MapArea.E_Type.RebornSafe)
-            && !IsStun()
             && !IsHurt()
             && !IsDaZuo()
             && State != E_ActorState.Roll
diff --git a/System/MainWin/MainWinSkillController.cs b/System/MainWin/MainWinSkillController.cs
index 7178a1b..5159172 100644
--- a/System/MainWin/MainWinSkillController.cs
+++ b/System/MainWin/MainWinSkillController.cs
@@ -228,6 +228,28 @@
             var forbid = !StatusMgr.Instance.CanCastSkill(PlayerDatas.Instance.baseData.PlayerID);
             for (int i = 0; i <= 8; i++)
             {
+                if (placeSkillMap.ContainsKey(i))
+                {
+                    int _skillId = placeSkillMap[i];
+                    var _tsModel = ModelCenter.Instance.GetModel<TreasureSkillModel>();
+                    if (_tsModel.TryGetExpertSkill(_skillId, out _skillId))
+                    {
+                        int _level = 0;
+                        if (_tsModel.TryGetExpertActiveLevel(_skillId, out _level))
+                        {
+                            _skillId += (_level - 1);
+                        }
+                        var _skillInfo = SkillHelper.Instance.Get(_skillId);
+                        SkillHelper.EffectValue _effectValue;
+                        if (_skillInfo.effectValue.TryGetValue(4093, out _effectValue))
+                        {
+                            if (forbid)
+                            {
+                                continue;
+                            }
+                        }
+                    }
+                }
                 var skillForbid = GetSkillForbid(i);
                 skillForbid.value = forbid;
             }

--
Gitblit v1.8.0