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/UI/FreezeBreath.cs | 40 ++++++++++++++++++++++++++++++++++++++-- 1 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs b/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs index 28b05e4..e661dee 100644 --- a/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs +++ b/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs @@ -1,5 +1,4 @@ using UnityEngine.UI; -using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; @@ -8,6 +7,8 @@ using TowerDefense.Agents; using Core.Health; using TowerDefense.UI.HUD; +using TowerDefense.Towers; +using TowerDefense.Towers.Projectiles; /** * 水精灵技能-冷冻气息控制脚本 @@ -83,7 +84,7 @@ /// </summary> /// <param name="waveLineId">哪条兵线</param> /// <param name="damage">伤害值</param> - public void ReleaseFreeze(int waveLineId, float damage, IAlignmentProvider alignmentProvider) + public void ReleaseFreeze(int waveLineId, Tower tower, IAlignmentProvider alignmentProvider) { WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList(); WaveLineAgentInsMgr waveLineAgentInsMgr = agentInsMgrs[waveLineId]; @@ -110,6 +111,8 @@ if (agent.AgentType == SpawnAgentType.Normal) { + float damage = GetFinalDamage(tower, agent); + bool needFrost = BallisticAttack.HandleWaterFrost(201, agent, ref damage); agent.addSpeedSlowRate(0.15f); agent.PlayOnHitImmediately(); EndlessGameUI.instance.FloatSlowDownWord(agent.position); @@ -117,6 +120,15 @@ if (agent.isDead) ++deathCount; + else if (needFrost) + { + agent.IsFrost = true; + agent.FrostRemainTime = FrostTimeAdd.DefaultFrostTime; + FrostTimeAdd frostTimeAdd = (FrostTimeAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostTimeAdd); + + if (frostTimeAdd != null) + agent.FrostRemainTime = frostTimeAdd.GetFrostTime(201); + } } else if (agent.AgentType == SpawnAgentType.BubbleBomb) EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (agent as BubbleBombAgent).Id); @@ -126,6 +138,30 @@ EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); } + private float GetFinalDamage(Tower tower, Agent agent) + { + if (tower == null || agent == null) return 0; + + int elfId = 201; + // 基础伤害 = elf_info 基础攻击力 * elf_upgrade 攻击比率 / 1000f + float basicDamage = ElfInfoData.GetBasicDamage(elfId, tower.currentLevel); + elf_info info = ElfInfoData.GetDataById(elfId); + + // 处理PVE无尽模式,buff增加的伤害 + if (EndlessBuffManager.instanceExists) + basicDamage += EndlessBuffManager.instance.ProcessEndlessBuffAttack(basicDamage, elfId); + + bool crit = BallisticAttack.IsCrit(elfId); + + if (crit) + { + float basicCritDamageRate = info != null ? info.b_critdmg / 1000f : 0f; + basicDamage *= 1 + basicCritDamageRate + BallisticAttack.GetCritDamageRate(elfId); + } + + return basicDamage; + } + public void PlayFreezeEffect(int waveLineId) { WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList(); -- Gitblit v1.9.1