From 5bfd1103410659fbb523ad25f0e34413fe032ed2 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Sat, 05 Dec 2020 18:19:06 +0800
Subject: [PATCH] 水精灵概率触发冰冻

---
 Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs |   66 ++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
index 4a4c89c..bb293f6 100644
--- a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -1,9 +1,7 @@
 using ActionGameFramework.Health;
-using System;
 using TowerDefense.Agents;
 using TowerDefense.UI.HUD;
 using UnityEngine;
-using System.Collections.Generic;
 using KTGMGemClient;
 
 namespace TowerDefense.Towers.Projectiles
@@ -81,9 +79,9 @@
         /// 判断本次伤害是否暴击
         /// </summary>
         /// <returns></returns>
-        private bool IsCrit()
+        public static bool IsCrit(int elfId)
         {
-            elf_info info = ElfInfoData.GetDataById(TowerPtr.ElfId);
+            elf_info info = ElfInfoData.GetDataById(elfId);
             float crit = 0f;
 
             if (info != null)
@@ -92,7 +90,7 @@
             CritProbabilityAdd critProbabilityAdd = (CritProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritProbabilityAdd);
 
             if (critProbabilityAdd != null)
-                crit = critProbabilityAdd.GetCrit(TowerPtr.ElfId, crit);
+                crit = critProbabilityAdd.GetCrit(elfId, crit);
 
             float random = UnityEngine.Random.Range(0, 1f);
 
@@ -103,11 +101,11 @@
         /// 获取暴击伤害增加比率
         /// </summary>
         /// <returns></returns>
-        private float GetCritDamageRate()
+        public static float GetCritDamageRate(int elfId)
         {
             CritDamageAdd critDamageAdd = (CritDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritDamageAdd);
 
-            return critDamageAdd == null ? 0 : critDamageAdd.GetCritDamageRate(TowerPtr.ElfId);
+            return critDamageAdd == null ? 0 : critDamageAdd.GetCritDamageRate(elfId);
         }
 
         /// <summary>
@@ -124,17 +122,19 @@
             if (EndlessBuffManager.instanceExists)
                 basicDamage += EndlessBuffManager.instance.ProcessEndlessBuffAttack(basicDamage, TowerPtr.ElfId);
 
-            bool crit = IsCrit();
+            bool crit = IsCrit(TowerPtr.ElfId);
 
             if (crit)
             {
                 float basicCritDamageRate = info != null ? info.b_critdmg / 1000f : 0f;
-                basicDamage *= 1 + basicCritDamageRate + GetCritDamageRate();
+                basicDamage *= 1 + basicCritDamageRate + GetCritDamageRate(TowerPtr.ElfId);
             }
 
             // 玉米强化子弹10倍伤害
             if (isEnhancedBullet)
                 basicDamage *= 10f;
+
+            bool needFrost = HandleWaterFrost(TowerPtr.ElfId, (enemy as Agent), ref basicDamage);
 
             int deathCount = 0;
 
@@ -170,6 +170,16 @@
                 }
             }
 
+            if (!enemy.isDead && needFrost)
+            {
+                (enemy as Agent).IsFrost = true;
+                (enemy as Agent).FrostRemainTime = FrostTimeAdd.DefaultFrostTime;
+                FrostTimeAdd frostTimeAdd = (FrostTimeAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostTimeAdd);
+
+                if (frostTimeAdd != null)
+                    (enemy as Agent).FrostRemainTime = frostTimeAdd.GetFrostTime(TowerPtr.ElfId);
+            }
+
             // 播放受击动画:
             if (!enemy.isDead && enemy.liveID == tid)
             {
@@ -182,6 +192,44 @@
         }
 
         /// <summary>
+        /// 处理水精灵冰冻
+        /// </summary>
+        /// <param name="elfId"></param>
+        /// <param name="enemy"></param>
+        /// <param name="basicDamage"></param>
+        /// <returns>是否需要冰冻,如果直接被打死就无所谓了,也不要飘字</returns>
+        public static bool HandleWaterFrost(int elfId, Agent enemy, ref float basicDamage)
+        {
+            bool needFrost = false;
+
+            if (elfId != 201) return needFrost;
+
+            // 处理冰冻状态中的额外伤害
+            if (enemy.IsFrost)
+            {
+                FrostDamageAdd frostDamageAdd = (FrostDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostDamageAdd);
+
+                if (frostDamageAdd != null)
+                    basicDamage *= (1 + frostDamageAdd.GetFrostDamageAdd(elfId));
+            }
+            else
+            {
+                FrostProbabilityAdd frostProbabilityAdd = (FrostProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostProbabilityAdd);
+
+                if (frostProbabilityAdd != null)
+                {
+                    float probaility = frostProbabilityAdd.GetFrostProbaility(elfId);
+                    float random = UnityEngine.Random.Range(0, 1);
+
+                    if (random <= probaility)
+                        needFrost = true;
+                }
+            }
+
+            return needFrost;
+        }
+
+        /// <summary>
         /// 处理塔位的属性攻击
         /// </summary>
         /// <param name="enemy"></param>

--
Gitblit v1.9.1