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