From 2ef9a95def81f3f47f302c86a5709140a6f39ce6 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Wed, 18 Nov 2020 12:28:51 +0800
Subject: [PATCH] 新增buff验证测试

---
 Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs |  101 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 76 insertions(+), 25 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
index e7e3dca..6b86165 100644
--- a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -33,10 +33,18 @@
         public float attackRise { get; set; }
 
         /// <summary>
+        /// 基础增加暴击伤害率
+        /// </summary>
+        private float baseCritDamageRate = 0.5f;
+
+        public Tower TowerPtr;
+
+        /// <summary>
         /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理
         /// </summary>
         /// <param name="enemy"></param>
-        public void DealDamage(Targetable enemy)
+        /// <param name="attributeId">子弹的属性id</param>
+        public void DealDamage(Targetable enemy, int attributeId = -1)
         {
             switch ((enemy as Agent).AgentType)
             {
@@ -47,8 +55,28 @@
                     HandleBubbleBomb(enemy);
                     break;
                 case SpawnAgentType.WoodPile:
+                    HandleWoodPile(enemy, attributeId);
                     break;
             }
+        }
+
+        /// <summary>
+        /// 处理木桩墙壁收到的伤害
+        /// </summary>
+        /// <param name="enemy"></param>
+        private void HandleWoodPile(Targetable enemy, int id)
+        {
+            float finalDamage = damager.finalDamage;
+
+            if (id == 10101)
+                finalDamage *= (enemy as WoodPileAgent).FireHurtRate;
+
+            int tid = enemy.liveID;
+            Vector3 backPos = enemy.position;
+
+            // 这里也可以把碰撞点传进来
+            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider);
+            EndlessGameUI.instance.generateBloodText(backPos, finalDamage);
         }
 
         /// <summary>
@@ -62,40 +90,62 @@
         }
 
         /// <summary>
+        /// 判断本次伤害是否暴击
+        /// </summary>
+        /// <returns></returns>
+        private bool IsCrit()
+        {
+            CritProbabilityAdd critProbabilityAdd = (CritProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritProbabilityAdd);
+            float crit = critProbabilityAdd.GetCrit(TowerPtr.attributeId);
+            float random = UnityEngine.Random.Range(0, 1f);
+
+            return random <= crit;
+        }
+
+        /// <summary>
+        /// 获取暴击伤害增加比率
+        /// </summary>
+        /// <returns></returns>
+        private float GetCritDamageRate()
+        {
+            CritDamageAdd critDamageAdd = (CritDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritDamageAdd);
+            return critDamageAdd.GetCritDamageRate(TowerPtr.attributeId);
+        }
+
+        /// <summary>
         /// 处理普通小怪和boss收到的伤害
         /// </summary>
         /// <param name="enemy"></param>
         private void HandleNormal(Targetable enemy)
         {
             float finalDamage = damager.finalDamage;
-            bool crit = damager.isCrit;
-            if (crit)
-                finalDamage += finalDamage;
-
-            // 精英怪和Boss双倍攻击.
-            bool doubleHit = damager.doubleHit && enemy.bElit;
-            if (doubleHit)
-                finalDamage *= 2;
-
-            // 处理光塔对应的攻击增加:
-            if (attackRise > 0)
-                finalDamage += (finalDamage * attackRise);
-            // 破甲状态
-            if (enemy.bShieldBreak)
-                finalDamage += (finalDamage * 0.1f);
+            bool crit = IsCrit();
 
             // 处理PVE无尽模式,buff增加的伤害
             finalDamage += ProcessEndlessBuffAttack(finalDamage);
 
+            if (crit)
+                finalDamage *= 1 + baseCritDamageRate + GetCritDamageRate();
+
+            int deathCount = 0;
+
             // 提前处理非当前Enemy的爆炸攻击:
             if (chainAttackRate > 0)
-                AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage);
+                deathCount = AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage);
 
             int tid = enemy.liveID;
             Vector3 backPos = enemy.position;
 
             // 这里也可以把碰撞点传进来
-            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider);
+            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider, 0);
+
+            if (chainAttackRate > 0)
+            {
+                if (enemy.isDead)
+                    ++deathCount;
+                if (deathCount > 1)
+                    EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount);
+            }
 
             // 处理塔位的技能攻击:
             ProcessTowerAttributeAttack(enemy, finalDamage, attributeId);
@@ -103,9 +153,9 @@
             if (!enemy.opponentAgent)
             {
                 if (GameUI.instanceExists)
-                    GameUI.instance.generateBloodText(backPos, finalDamage, crit, doubleHit);
+                    GameUI.instance.generateBloodText(backPos, finalDamage, crit);
                 else if (EndlessGameUI.instanceExists)
-                    EndlessGameUI.instance.generateBloodText(backPos, finalDamage, crit, doubleHit);
+                    EndlessGameUI.instance.generateBloodText(backPos, finalDamage, crit);
             }
 
             // 播放受击动画:
@@ -122,7 +172,7 @@
             // 非无尽模式
             if (!EndlessBuffManager.instanceExists) return 0;
 
-            List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.Attack, attributeId);
+            List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.AttackAdd, attributeId);
 
             if (list.Count == 0) return 0;
 
@@ -135,7 +185,7 @@
                 add += list[i].Config.buff_effect[2];
             }
 
-            return finalDamage * (1 + ratio / 100f) + add;
+            return finalDamage * (ratio / 100f) + add;
         }
 
         /// <summary>
@@ -149,12 +199,13 @@
             switch (id)
             {
                 case 2:  // 减速.
-                    enemy.addSpeedSlowRate(0.25f);
+                    SlowDown slowDown = (SlowDown)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.SlowDown);
+                    enemy.addSpeedSlowRate(0.25f + slowDown.GetSlowDownAdd(TowerPtr.attributeId));
                     enemy.SetTargetableMatColor(Color.blue);
                     break;
                 case 3:  // 中毒
-                    enemy.poisonAgent(damage, attid);
-                    enemy.SetTargetableMatColor(Color.green);
+                    // enemy.poisonAgent(damage, attid);
+                    // enemy.SetTargetableMatColor(Color.green);
                     break;
                 case 5:  // 破甲
                     enemy.bShieldBreak = true;

--
Gitblit v1.9.1