From 8c81100c8ff5d2e90dabcafbec59a5d45f9841c8 Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期三, 22 五月 2019 16:16:08 +0800
Subject: [PATCH] 382 战斗效果值实现

---
 Fight/GameActor/GActorNpcNoFight.cs                                              |    2 
 Fight/Actor/State/SMB/STM_BaseAttack.cs                                          |    9 +
 Fight/Actor/Skill/AttackHandler.cs                                               |  141 ++++++++++++++++++----
 Fight/GameActor/GA_Guard.cs                                                      |    2 
 Fight/Actor/Skill/SkillManager.cs                                                |    5 
 Fight/Actor/HeroBehaviour.cs                                                     |    4 
 Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs |    4 
 Fight/Stage/Dungeon/DungeonStage.cs                                              |    2 
 Lua/Gen/StatusMgrWrap.cs.meta                                                    |    2 
 Core/ResModule/AnimatorControllerLoader.cs                                       |   62 ++++------
 Fight/Actor/AI/HeroAI_Base.cs                                                    |    4 
 Fight/Actor/Skill/FlyObject/FlyObject.cs                                         |    7 
 Fight/GameActor/GActorNpcFight.cs                                                |    6 
 Core/ResModule/InstanceResourcesLoader.cs                                        |   25 ----
 Lua/Gen/StatusMgrWrap.cs                                                         |   52 ++++++++
 Fight/Actor/Status/StatusMgr.cs                                                  |   16 ++
 Fight/GameActor/GActorFight.cs                                                   |    4 
 Fight/GameActor/GActorPlayerBase.cs                                              |    2 
 18 files changed, 232 insertions(+), 117 deletions(-)

diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs b/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
index 1a73f84..003d4e4 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -283,7 +283,7 @@
                             ObjID = _sTarget.ObjID,
                             clientInstID = GAMgr.Instance.GetCIDBySID(_cTarget.ServerInstID),
                             ObjType = _sTarget.ObjType,
-                            HurtHP = (uint)(_cTarget.ActorInfo.RealHp - (_sTarget.CurHP + _sTarget.CurHPEx * GActorInfo.FullHp)),
+                            HurtHP = _sTarget.HurtHP,
                             CurHP = _sTarget.CurHP,
                             AttackType = _sTarget.AttackType
                         };
@@ -721,7 +721,7 @@
                     ObjID = _sTarget.ObjID,
                     clientInstID = GAMgr.Instance.GetCIDBySID(_cTarget.ServerInstID),
                     ObjType = _sTarget.ObjType,
-                    HurtHP = (uint)(_cTarget.ActorInfo.RealHp - (_sTarget.CurHP + _sTarget.CurHPEx * GActorInfo.FullHp)),
+                    HurtHP = _sTarget.HurtHP,
                     CurHP = _sTarget.CurHP,
                     AttackType = _sTarget.AttackType
                 };
diff --git a/Core/ResModule/AnimatorControllerLoader.cs b/Core/ResModule/AnimatorControllerLoader.cs
index c2602ea..2f06e1a 100644
--- a/Core/ResModule/AnimatorControllerLoader.cs
+++ b/Core/ResModule/AnimatorControllerLoader.cs
@@ -5,9 +5,9 @@
 using UnityEditor;
 #endif
 
+[XLua.LuaCallCSharp]
 public class AnimatorControllerLoader
 {
-
     public static readonly string controllerSuffix = "AnimatorController_";
     public static readonly string controllerUISuffix = "AnimatorController_UI_";
     public static readonly string controllerShowSuffix = "AnimatorController_Show_";
@@ -51,9 +51,32 @@
         return _animationClip;
     }
 
+    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Fight()
+    {
+        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
+                                                          GeneralDefine.ModeDefaultConfig[1][1].Replace("Prefab_Race_", ""));
+    }
+
+    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Func()
+    {
+        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
+                                                          GeneralDefine.ModeDefaultConfig[0][1].Replace("Prefab_Race_", ""));
+    }
+
+    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Horse()
+    {
+        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
+                                                          GeneralDefine.ModeDefaultConfig[3][1].Replace("Prefab_Horse_", ""));
+    }
+
+    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Pet()
+    {
+        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
+                                                          GeneralDefine.ModeDefaultConfig[2][1].Replace("Prefab_Race_", ""));
+    }
+
     public static RuntimeAnimatorController Load(string suffix, int id)
     {
-        RuntimeAnimatorController _controller = null;
         ModelResConfig _modelRes = ModelResConfig.Get(id);
         string _name = _modelRes.ResourcesName;
         if (_name.IndexOf('/') != -1)
@@ -61,40 +84,7 @@
             _name = _name.Substring(0, _modelRes.ResourcesName.IndexOf('/'));
         }
 
-        if (AssetSource.mobFromEditor)
-        {
-#if UNITY_EDITOR
-
-            string _resourcesPath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
-                                                          "mob/",
-                                                          _name,
-                                                          "/",
-                                                          suffix,
-                                                          _name,
-                                                          ".controller");
-
-            _controller = AssetDatabase.LoadAssetAtPath<RuntimeAnimatorController>(_resourcesPath);
-
-#endif
-        }
-        else
-        {
-            string _bundleName = StringUtility.Contact(ResourcesPath.MOB_FOLDER_NAME,
-                                                       ResourcesPath.MOB_SUFFIX,
-                                                       _name);
-
-            string _assetName = StringUtility.Contact(suffix, _name);
-            AssetInfo _assetInfo = new AssetInfo(_bundleName, _assetName);
-
-            _controller = AssetBundleUtility.Instance.Sync_LoadAsset(_assetInfo) as RuntimeAnimatorController;
-        }
-
-        if (_controller == null)
-        {
-            DebugEx.LogErrorFormat("AnimatorControllerLoader.Load() => 鍔犺浇涓嶅埌璧勬簮: {0}_{1}.", suffix, _name);
-        }
-
-        return _controller;
+        return LoadMobController(suffix, _name);
     }
 
     public static RuntimeAnimatorController LoadMobController(string suffix, string _name)
diff --git a/Core/ResModule/InstanceResourcesLoader.cs b/Core/ResModule/InstanceResourcesLoader.cs
index 657d8f3..086b21a 100644
--- a/Core/ResModule/InstanceResourcesLoader.cs
+++ b/Core/ResModule/InstanceResourcesLoader.cs
@@ -5,6 +5,7 @@
 using UnityEditor;
 #endif
 
+[XLua.LuaCallCSharp]
 public class InstanceResourcesLoader
 {
     public static readonly string raceSuffix = "Prefab_Race_";
@@ -53,30 +54,6 @@
         }
 
         return LoadModelPrefab(raceSuffix, _m.MODE);
-    }
-
-    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Fight()
-    {
-        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[1][1].Replace("Prefab_Race_", ""));
-    }
-
-    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Func()
-    {
-        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[0][1].Replace("Prefab_Race_", ""));
-    }
-
-    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Horse()
-    {
-        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[3][1].Replace("Prefab_Horse_", ""));
-    }
-
-    public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Pet()
-    {
-        return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[2][1].Replace("Prefab_Race_", ""));
     }
 
     public static GameObject LoadDefaultFightNPC()
diff --git a/Fight/Actor/AI/HeroAI_Base.cs b/Fight/Actor/AI/HeroAI_Base.cs
index ea00474..76eb8e4 100644
--- a/Fight/Actor/AI/HeroAI_Base.cs
+++ b/Fight/Actor/AI/HeroAI_Base.cs
@@ -89,7 +89,7 @@
             if (_skill != null && _skill.skillInfo != null && _skill.skillInfo.config != null)
             {
                 // 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
-                if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config.SkillOfSeries))
+                if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
                 {
                     return _skill;
                 }
@@ -146,7 +146,7 @@
         }
 
         // 鍒ゆ柇鏄惁鏄灏佺鐨勬妧鑳�
-        if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config.SkillOfSeries))
+        if (!StatusMgr.Instance.CanAttack(_hero.ServerInstID, _skill.skillInfo.config))
         {
             return false;
         }
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index 6ca20d8..460e654 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -104,7 +104,7 @@
 
         Skill _skill = m_Hero.SkillMgr.Get(skillID);
 
-        if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config.SkillOfSeries))
+        if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config))
         {
             return;
         }
@@ -299,7 +299,7 @@
         skillId = m_Hero.GetCommonSkillID(curComAtkIndex);
         _skill = m_Hero.SkillMgr.Get(skillId);
 
-        if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config.SkillOfSeries))
+        if (!StatusMgr.Instance.CanAttack(m_Hero.ServerInstID, _skill.skillInfo.config))
         {
             return -1;
         }
diff --git a/Fight/Actor/Skill/AttackHandler.cs b/Fight/Actor/Skill/AttackHandler.cs
index 27ea169..446de46 100644
--- a/Fight/Actor/Skill/AttackHandler.cs
+++ b/Fight/Actor/Skill/AttackHandler.cs
@@ -11,6 +11,7 @@
     public static void HandlerAttackTarget(GActorFight attacker,
                                            GActorFight target,
                                            int hurtValue,
+                                           int realHurtValue,
                                            byte attackType,
                                            int skillID,
                                            int soConfigID,
@@ -132,7 +133,13 @@
 
             if (CheckPull(attacker, target, soConfig.bodyControlId))
             {
-                target.StartBeatBack(attacker.ServerInstID, soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos), (HurtAttackType)attackType);
+                float _extDis = 0;
+                SkillHelper.EffectValue _effectValue;
+                if (_skill.skillInfo.effectValue.TryGetValue(4015, out _effectValue))
+                {
+                    _extDis += _effectValue.value1 * .5f;
+                }
+                target.StartBeatBack(attacker.ServerInstID, soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos), (HurtAttackType)attackType, _extDis);
             }
         }
 
@@ -234,7 +241,7 @@
 
                     if (_doReduceHp)
                     {
-                        target.ActorInfo.ReduceHp((uint)hurtValue);
+                        target.ActorInfo.ReduceHp((uint)realHurtValue);
                     }
 
                     if (target.ServerInstID == PlayerDatas.Instance.baseData.PlayerID)
@@ -348,6 +355,7 @@
         bool _isZhuxianHit = false;
 
         SkillHelper.EffectValue _effectValue;
+        SkillHelper.SkillInfo _skillInfo;
 
         float _aAtkSkillPer = 0;
         int _atkSkillValue = 0;
@@ -550,7 +558,7 @@
         }
 
         #region 4094,4507 澧炲姞鏆村嚮姒傜巼
-        if (skill.skillInfo.effectValue.TryGetValue(4094, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4094, out _effectValue, out _skillInfo))
         {
             bool _vaild = true;
             if (_effectValue.value2 != 0)
@@ -566,7 +574,7 @@
             }
         }
 
-        if (skill.skillInfo.effectValue.TryGetValue(4507, out _effectValue))
+        if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4507, out _effectValue))
         {
             bool _vaild = true;
             if (_effectValue.value2 == 1)
@@ -586,12 +594,35 @@
             }
             if (_vaild)
             {
-                if (_vaild)
-                {
-                    _aSuperHitRate += _effectValue.value1;
-                }
+                _aSuperHitRate += _effectValue.value1;
             }
         }
+
+        if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4526, out _effectValue))
+        {
+            bool _vaild = true;
+            if (_effectValue.value2 == 1)
+            {
+                if (attacker.SelectTarget == null
+                 || attacker.SelectTarget.ServerInstID != target.ServerInstID)
+                {
+                    _vaild = false;
+                }
+            }
+            if (_effectValue.value3 == 1)
+            {
+                if (skill.skillInfo.config.FuncType != (int)E_SkillFuncType.NormalAttack
+                 && skill.skillInfo.config.FuncType != (int)E_SkillFuncType.FaBaoActiveSkill)
+                {
+                    _vaild = false;
+                }
+            }
+            if (_vaild)
+            {
+                _aZhuXianHitRate += _effectValue.value1;
+            }
+        }
+
         #endregion
 
         _isMiss = IsMiss(_hitRate, _missRate);
@@ -685,7 +716,13 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4083, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4075, out _effectValue, out _skillInfo))
+            {
+                float _val = (PlayerDatas.Instance.extersion.battleValEx1 - 10000) * _effectValue.value1;
+                _superHitAdd += _val;
+            }
+
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4083, out _effectValue, out _skillInfo))
             {
                 bool _vaild = true;
                 if (_effectValue.value2 == 1)
@@ -717,7 +754,7 @@
          || skill.skillInfo.config.HurtType == 0)
         {
             // 澶勭悊鏈韩鐨勬妧鑳�
-            CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
+            CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, ref _aDamagePVE, _isCrit);
 
             // 澶勭悊sp鎶�鑳�
             List<SkillHelper.SkillInfo> _spSkillList = SkillHelper.Instance.GetSpSkill(skill.id);
@@ -726,7 +763,7 @@
             {
                 for (int i = 0; i < _spSkillList.Count; ++i)
                 {
-                    CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
+                    CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, ref _aDamagePVE, _isCrit);
                 }
             }
         }
@@ -852,7 +889,8 @@
         }
 
         SkillHelper.EffectValue _effectValue;
-        if (_hero.SkillMgr.TryGetPassiveEffectValue(4081, out _effectValue))
+        SkillHelper.SkillInfo _skillInfo;
+        if (_hero.SkillMgr.TryGetPassiveEffectValue(4081, out _effectValue, out _skillInfo))
         {
             if (_effectValue.value2 == 1)
             {
@@ -897,16 +935,20 @@
         return actor.ActorInfo.RealHp * 1f / actor.ActorInfo.RealMaxHp;
     }
 
-    private static void CalculateSkillEffect(GActorFight attacker, GActorFight target, SkillHelper.SkillInfo skillInfo,
+    private static void CalculateSkillEffect(GActorFight attacker,
+                                             GActorFight target,
+                                             SkillHelper.SkillInfo skillInfo,
                                              ref int _aDamagePer,
                                              ref float _aAtkSkillPer,
                                              ref int _atkSkillValue,
                                              ref int _aIceAtk,
                                              ref int _aFinalHurt,
                                              ref float _aSuperHitAdd,
+                                             ref int _aDamagePVE,
                                              bool _isCrit)
     {
         SkillHelper.EffectValue _effectValue;
+        SkillHelper.SkillInfo _skillInfo;
         #region 浼ゅ澧炲姞
 
         if (skillInfo.effectValue.TryGetValue(1062, out _effectValue))
@@ -931,7 +973,39 @@
 
         if (attacker is GA_Hero)
         {
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4086, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4102, out _effectValue, out _skillInfo))
+            {
+                int _val = _effectValue.value1;
+                int _needCount = _effectValue.value2;
+                bool _valid = true;
+                if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue, out _skillInfo))
+                {
+                    if (_effectValue.value2 == 0)
+                    {
+                        if (PlayerDatas.Instance.baseData.yinjiCount != _needCount)
+                        {
+                            _valid = false;
+                        }
+                    }
+                    else if (_effectValue.value2 == 1)
+                    {
+                        if (PlayerDatas.Instance.baseData.yinjiCount == 0
+                         || PlayerDatas.Instance.baseData.yinjiCount < _effectValue.value1)
+                        {
+                            _valid = false;
+                        }
+                    }
+                }
+                if (_valid)
+                {
+                    if (PlayerDatas.Instance.baseData.yinjiCount > _needCount)
+                    {
+                        _aDamagePVE += _val;
+                    }
+                }
+            }
+
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4086, out _effectValue, out _skillInfo))
             {
                 bool _vaild = true;
                 if (_effectValue.value3 == 1)
@@ -951,7 +1025,7 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4087, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4087, out _effectValue, out _skillInfo))
             {
                 if (PlayerDatas.Instance.baseData.yinjiCount > _effectValue.value2)
                 {
@@ -959,12 +1033,12 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4088, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4088, out _effectValue, out _skillInfo))
             {
                 int _per = _effectValue.value1;
                 int _needCount = _effectValue.value2;
                 bool _valid = true;
-                if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue))
+                if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue, out _skillInfo))
                 {
                     if (_effectValue.value2 == 0)
                     {
@@ -990,7 +1064,7 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue, out _skillInfo))
             {
                 if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2))
                 {
@@ -998,6 +1072,15 @@
                     if (StatusMgr.Instance.IsBurning(target.ServerInstID, _selfSID))
                     {
                         _aAtkSkillPer += _effectValue.value1;
+
+                        if (attacker.SkillMgr.TryGetPassiveEffectValue(4538, out _effectValue, out _skillInfo))
+                        {
+                            _aDamagePVE += _effectValue.value1;
+                        }
+                        if (attacker.SkillMgr.TryGetPassiveEffectValue(4002, out _effectValue, out _skillInfo))
+                        {
+                            _aDamagePVE += _effectValue.value1;
+                        }
                     }
                 }
             }
@@ -1014,13 +1097,13 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4098, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4098, out _effectValue, out _skillInfo))
             {
-                var _skillInfo = SkillHelper.Instance.Get(_effectValue.value2);
-                if (_skillInfo != null)
+                var _skillInfo1 = SkillHelper.Instance.Get(_effectValue.value2);
+                if (_skillInfo1 != null)
                 {
                     SkillHelper.EffectValue _tmpEffectValue;
-                    if (_skillInfo.effectValue.TryGetValue(4012, out _tmpEffectValue))
+                    if (_skillInfo1.effectValue.TryGetValue(4012, out _tmpEffectValue))
                     {
                         if (target.ActorInfo.status4012.ContainsKey((byte)_tmpEffectValue.value1))
                         {
@@ -1033,7 +1116,7 @@
                 }
             }
 
-            if (attacker.SkillMgr.TryGetPassiveEffectValue(4096, out _effectValue))
+            if (attacker.SkillMgr.TryGetPassiveEffectValue(4096, out _effectValue, out _skillInfo))
             {
                 if (StatusMgr.Instance.IsExist(target.ServerInstID, _effectValue.value3))
                 {
@@ -1044,7 +1127,7 @@
         }
 
         // 4005 姒傜巼澧炲姞鏀诲嚮(鎶�鑳�)浼ゅ涓囧垎鐜�
-        if (skillInfo.effectValue.TryGetValue(4005, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4005, out _effectValue, out _skillInfo))
         {
             if (Random.Range(0, 10000) < _effectValue.value2)
             {
@@ -1059,7 +1142,7 @@
         }
 
         // 4035 澧炲姞鎶�鑳戒激瀹充竾鍒嗙巼
-        if (skillInfo.effectValue.TryGetValue(4035, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4035, out _effectValue, out _skillInfo))
         {
             bool _isValid = true;
             var _mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID);
@@ -1085,7 +1168,7 @@
         }
 
         // 4011 鏆村嚮鏃跺鍔犳妧鑳戒激瀹�
-        if (skillInfo.effectValue.TryGetValue(4011, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4011, out _effectValue, out _skillInfo))
         {
             if (_isCrit)
             {
@@ -1101,7 +1184,7 @@
         }
 
         // 4015 鐩爣澶勪簬XX鐘舵�佹彁楂樻妧鑳戒激瀹�
-        if (skillInfo.effectValue.TryGetValue(4015, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue, out _skillInfo))
         {
             if (target.ActorInfo.GetStatusCount((byte)_effectValue.value2, attacker.ServerInstID) > 0)
             {
@@ -1117,7 +1200,7 @@
         }
 
         // 4025 鏀诲嚮闄勫姞鐪熷疄浼ゅ
-        if (skillInfo.effectValue.TryGetValue(4025, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4025, out _effectValue, out _skillInfo))
         {
             _aIceAtk += _effectValue.value1;
 
@@ -1192,7 +1275,7 @@
         #region 鏆村嚮浼ゅ澧炲姞
 
         // 4007 鏆村嚮鏃跺鍔犳毚鍑诲��, 澧炲姞鏆村嚮鍊间竾鍒嗙巼, 铏氳鍒ゆ柇鑷繁韬笂鏄惁鏈夐厤缃殑buff
-        if (skillInfo.effectValue.TryGetValue(4007, out _effectValue))
+        if (attacker.SkillMgr.TryGetPassiveEffectValue(4007, out _effectValue, out _skillInfo))
         {
             bool _condition = true;
 
diff --git a/Fight/Actor/Skill/FlyObject/FlyObject.cs b/Fight/Actor/Skill/FlyObject/FlyObject.cs
index 47cadb2..0650f79 100644
--- a/Fight/Actor/Skill/FlyObject/FlyObject.cs
+++ b/Fight/Actor/Skill/FlyObject/FlyObject.cs
@@ -149,8 +149,8 @@
             if (_chkDistSqrt < _chkRange * _chkRange)
             {
                 int _hurtValue = (int)(m_Config.floodPercent * Constants.F_DELTA * m_HurtClientList[i].HurtHP);
-
-                AttackHandler.HandlerAttackTarget(m_Owner, _target, _hurtValue, m_HurtClientList[i].AttackType, m_InitInfo.skillId, m_InitInfo.configId, m_Config, _target.ActorInfo.serverDie);
+                int _realHurtValue = (int)((_target.ActorInfo.RealHp - m_HurtClientList[i].CurHP) * (m_Config.floodPercent * Constants.F_DELTA));
+                AttackHandler.HandlerAttackTarget(m_Owner, _target, _hurtValue, _realHurtValue, m_HurtClientList[i].AttackType, m_InitInfo.skillId, m_InitInfo.configId, m_Config, _target.ActorInfo.serverDie);
 
                 m_HasHitTargetIDList.Add(m_HurtClientList[i].clientInstID);
                 m_IdToLastHitTime[_target.ClientInstID] = Time.time;
@@ -190,8 +190,9 @@
             if (_chkDistSqrt < _chkRange * _chkRange)
             {
                 int _hurtValue = (int)(m_Config.floodPercent * Constants.F_DELTA * m_HurtServerList[i].HurtHP);
+                int _realHurtValue = (int)((_target.ActorInfo.RealHp - m_HurtClientList[i].CurHP) * (m_Config.floodPercent * Constants.F_DELTA));
 
-                AttackHandler.HandlerAttackTarget(m_Owner, _target, _hurtValue, m_HurtServerList[i].AttackType, m_InitInfo.skillId, m_InitInfo.configId, m_Config, _target.ActorInfo.serverDie);
+                AttackHandler.HandlerAttackTarget(m_Owner, _target, _hurtValue, _realHurtValue, m_HurtServerList[i].AttackType, m_InitInfo.skillId, m_InitInfo.configId, m_Config, _target.ActorInfo.serverDie);
 
                 m_HasHitTargetIDList.Add(m_HurtServerList[i].clientInstID);
                 m_IdToLastHitTime[_target.ClientInstID] = Time.time;
diff --git a/Fight/Actor/Skill/SkillManager.cs b/Fight/Actor/Skill/SkillManager.cs
index 83761b2..9145b40 100644
--- a/Fight/Actor/Skill/SkillManager.cs
+++ b/Fight/Actor/Skill/SkillManager.cs
@@ -43,7 +43,8 @@
         m_PassiveSkill = new List<int>();
     }
 
-    public bool TryGetPassiveEffectValue(int id, out SkillHelper.EffectValue effectValue)
+    public bool TryGetPassiveEffectValue(int id, out SkillHelper.EffectValue effectValue,
+                                                 out SkillHelper.SkillInfo skill)
     {
         SkillHelper.SkillInfo _skill;
         foreach (var _id in m_PassiveSkill)
@@ -51,10 +52,12 @@
             _skill = SkillHelper.Instance.Get(_id);
             if (_skill.effectValue.TryGetValue(id, out effectValue))
             {
+                skill = _skill;
                 return true;
             }
         }
         effectValue = default(SkillHelper.EffectValue);
+        skill = null;
         return false;
     }
 
diff --git a/Fight/Actor/State/SMB/STM_BaseAttack.cs b/Fight/Actor/State/SMB/STM_BaseAttack.cs
index 5f185a5..c418afd 100644
--- a/Fight/Actor/State/SMB/STM_BaseAttack.cs
+++ b/Fight/Actor/State/SMB/STM_BaseAttack.cs
@@ -624,6 +624,7 @@
 
         GActorFight _target = null;
         int _hurtTotalValue = 0;
+        int _realHurtValue = 0;
 
         m_NpcPosList.Clear();
 
@@ -650,10 +651,11 @@
                 }
 
                 _hurtTotalValue = (int)(m_CacheSkill.hurtServerList[i].HurtHP * _floodPercent);
-
+                _realHurtValue = (int)((_target.ActorInfo.RealHp - m_CacheSkill.hurtServerList[i].CurHP) * _floodPercent);
                 AttackHandler.HandlerAttackTarget(_fight,
                                                   _target,
                                                   _hurtTotalValue,
+                                                  _realHurtValue,
                                                   m_CacheSkill.hurtServerList[i].AttackType,
                                                   m_CacheSkill.id,
                                                   id,
@@ -687,10 +689,12 @@
                 }
 
                 _hurtTotalValue = Mathf.CeilToInt(m_CacheSkill.hurtClientList[i].HurtHP * _floodPercent);
+                _realHurtValue = (int)((_target.ActorInfo.RealHp - m_CacheSkill.hurtClientList[i].CurHP) * _floodPercent);
 
                 AttackHandler.HandlerAttackTarget(_fight,
                                                   _target,
                                                   _hurtTotalValue,
+                                                  _realHurtValue,
                                                   m_CacheSkill.hurtClientList[i].AttackType,
                                                   m_CacheSkill.id,
                                                   id,
@@ -719,8 +723,9 @@
                 }
 
                 _hurtTotalValue = (int)(m_CacheSkill.hurtClntFightNpcList[i].HurtHP * _floodPercent);
+                _realHurtValue = (int)((_target.ActorInfo.RealHp - m_CacheSkill.hurtClientList[i].CurHP) * _floodPercent);
 
-                AttackHandler.HandlerAttackTarget(_fight, _target, _hurtTotalValue,
+                AttackHandler.HandlerAttackTarget(_fight, _target, _hurtTotalValue, _realHurtValue,
                                                   m_CacheSkill.hurtClntFightNpcList[i].AttackType,
                                                   m_CacheSkill.id, id, _sweepHit,
                                                   _target.ActorInfo.serverDie && m_IsLastHitFrame);
diff --git a/Fight/Actor/Status/StatusMgr.cs b/Fight/Actor/Status/StatusMgr.cs
index 2c6b6ae..bd0f4b0 100644
--- a/Fight/Actor/Status/StatusMgr.cs
+++ b/Fight/Actor/Status/StatusMgr.cs
@@ -583,14 +583,26 @@
         return true;
     }
 
-    public bool CanAttack(uint sid, int skillSeries)
+    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))
         {
             for (int i = 0; i < _list.Count; ++i)
             {
-                if (!_list[i].CanAttack(skillSeries))
+                if (!_list[i].CanAttack(_config.SkillOfSeries))
                 {
                     return false;
                 }
diff --git a/Fight/GameActor/GA_Guard.cs b/Fight/GameActor/GA_Guard.cs
index 15ac7be..a3f4a88 100644
--- a/Fight/GameActor/GA_Guard.cs
+++ b/Fight/GameActor/GA_Guard.cs
@@ -331,7 +331,7 @@
                 RuntimeAnimatorController _controller = null;
                 if (m_LoadDefaultRes)
                 {
-                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
+                    _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Func();
                 }
                 else
                 {
diff --git a/Fight/GameActor/GActorFight.cs b/Fight/GameActor/GActorFight.cs
index 6ec4096..1eb6b84 100644
--- a/Fight/GameActor/GActorFight.cs
+++ b/Fight/GameActor/GActorFight.cs
@@ -203,7 +203,7 @@
     private float m_LimitDistance;
     private float m_AddPer;
 
-    public void StartBeatBack(uint attacker, int configID, Vector3 direction, HurtAttackType atkType = HurtAttackType.Normal)
+    public void StartBeatBack(uint attacker, int configID, Vector3 direction, HurtAttackType atkType = HurtAttackType.Normal, float ExtDis = 0f)
     {
         SoBodyControl _config = ScriptableObjectLoader.LoadSoBodyControl(configID);
 
@@ -213,7 +213,7 @@
         }
 
         m_AttackerSID = attacker;
-        m_LimitDistance = _config.limitDistance;
+        m_LimitDistance = _config.limitDistance + ExtDis;
         m_PushOrPull = _config.pushOrPull;
 
         if (!m_PushOrPull)
diff --git a/Fight/GameActor/GActorNpcFight.cs b/Fight/GameActor/GActorNpcFight.cs
index 9cd8c51..42d72a5 100644
--- a/Fight/GameActor/GActorNpcFight.cs
+++ b/Fight/GameActor/GActorNpcFight.cs
@@ -551,11 +551,11 @@
             {
                 if (this is GA_Pet)
                 {
-                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Pet();
+                    _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Pet();
                 }
                 else
                 {
-                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Fight();
+                    _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Fight();
                 }
             }
             else
@@ -817,7 +817,7 @@
                 RuntimeAnimatorController _controller = null;
                 if (m_SheepIsDefaultNpc)
                 {
-                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Fight();
+                    _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Fight();
                 }
                 else
                 {
diff --git a/Fight/GameActor/GActorNpcNoFight.cs b/Fight/GameActor/GActorNpcNoFight.cs
index 5f83da4..1261aeb 100644
--- a/Fight/GameActor/GActorNpcNoFight.cs
+++ b/Fight/GameActor/GActorNpcNoFight.cs
@@ -218,7 +218,7 @@
                 RuntimeAnimatorController _controller = null;
                 if (m_LoadDefaultRes)
                 {
-                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
+                    _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Func();
                 }
                 else
                 {
diff --git a/Fight/GameActor/GActorPlayerBase.cs b/Fight/GameActor/GActorPlayerBase.cs
index acbf2e9..f05b804 100644
--- a/Fight/GameActor/GActorPlayerBase.cs
+++ b/Fight/GameActor/GActorPlayerBase.cs
@@ -1665,7 +1665,7 @@
             RuntimeAnimatorController _controller = null;
             if (m_LoadDefaultHorse)
             {
-                _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Horse();
+                _controller = AnimatorControllerLoader.LoadDefaultMobAnimatorController_Horse();
             }
             else
             {
diff --git a/Fight/Stage/Dungeon/DungeonStage.cs b/Fight/Stage/Dungeon/DungeonStage.cs
index 88ea215..d634874 100644
--- a/Fight/Stage/Dungeon/DungeonStage.cs
+++ b/Fight/Stage/Dungeon/DungeonStage.cs
@@ -298,8 +298,6 @@
         }
     }
 
-
-
     private void HandleAutoFight()
     {
         DungeonModel _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
diff --git a/Lua/Gen/StatusMgrWrap.cs b/Lua/Gen/StatusMgrWrap.cs
index fcb352a..276e9f8 100644
--- a/Lua/Gen/StatusMgrWrap.cs
+++ b/Lua/Gen/StatusMgrWrap.cs
@@ -21,7 +21,7 @@
         {
 			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
 			System.Type type = typeof(StatusMgr);
-			Utils.BeginObjectRegister(type, L, translator, 0, 23, 5, 5);
+			Utils.BeginObjectRegister(type, L, translator, 0, 24, 5, 5);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Init", _m_Init);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Request", _m_Request);
@@ -46,6 +46,7 @@
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsInvincible", _m_IsInvincible);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsInvisible", _m_IsInvisible);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetSkillEffectValue", _m_TryGetSkillEffectValue);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsBurning", _m_IsBurning);
 			
 			
 			Utils.RegisterFunc(L, Utils.GETTER_IDX, "ZhongJiDict", _g_get_ZhongJiDict);
@@ -685,9 +686,9 @@
                 
                 {
                     uint _sid = LuaAPI.xlua_touint(L, 2);
-                    int _skillSeries = LuaAPI.xlua_tointeger(L, 3);
+                    SkillConfig __config = (SkillConfig)translator.GetObject(L, 3, typeof(SkillConfig));
                     
-                        bool gen_ret = gen_to_be_invoked.CanAttack( _sid, _skillSeries );
+                        bool gen_ret = gen_to_be_invoked.CanAttack( _sid, __config );
                         LuaAPI.lua_pushboolean(L, gen_ret);
                     
                     
@@ -792,6 +793,51 @@
             
         }
         
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_IsBurning(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                StatusMgr gen_to_be_invoked = (StatusMgr)translator.FastGetCSObj(L, 1);
+            
+            
+			    int gen_param_count = LuaAPI.lua_gettop(L);
+            
+                if(gen_param_count == 3&& LuaTypes.LUA_TNUMBER == LuaAPI.lua_type(L, 2)&& LuaTypes.LUA_TNUMBER == LuaAPI.lua_type(L, 3)) 
+                {
+                    uint _targetSID = LuaAPI.xlua_touint(L, 2);
+                    uint _attackSID = LuaAPI.xlua_touint(L, 3);
+                    
+                        bool gen_ret = gen_to_be_invoked.IsBurning( _targetSID, _attackSID );
+                        LuaAPI.lua_pushboolean(L, gen_ret);
+                    
+                    
+                    
+                    return 1;
+                }
+                if(gen_param_count == 2&& LuaTypes.LUA_TNUMBER == LuaAPI.lua_type(L, 2)) 
+                {
+                    uint _targetSID = LuaAPI.xlua_touint(L, 2);
+                    
+                        bool gen_ret = gen_to_be_invoked.IsBurning( _targetSID );
+                        LuaAPI.lua_pushboolean(L, gen_ret);
+                    
+                    
+                    
+                    return 1;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+            return LuaAPI.luaL_error(L, "invalid arguments to StatusMgr.IsBurning!");
+            
+        }
+        
         
         
         
diff --git a/Lua/Gen/StatusMgrWrap.cs.meta b/Lua/Gen/StatusMgrWrap.cs.meta
index 2d7d461..5ce08a1 100644
--- a/Lua/Gen/StatusMgrWrap.cs.meta
+++ b/Lua/Gen/StatusMgrWrap.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 453eacef8d1aca54d94a552482bebc20
-timeCreated: 1557818434
+timeCreated: 1558494859
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2

--
Gitblit v1.8.0