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