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/Actor/Skill/AttackHandler.cs |  141 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 112 insertions(+), 29 deletions(-)

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;
 

--
Gitblit v1.8.0