From 0083101f1ac0bfae659d18ec7b8ad10e649d8db6 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Tue, 24 Nov 2020 11:34:14 +0800
Subject: [PATCH] 放置丢塔问题

---
 Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs             |    7 +++++--
 Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs                 |   16 ++++++++--------
 Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs |   22 ++++++++++++++--------
 Assets/StreamingAssets/Table/endless_buff.json                      |    2 +-
 Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs   |    8 ++++++--
 5 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
index 5161321..efd9efd 100644
--- a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
+++ b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
@@ -153,8 +153,10 @@
             get
             {
                 FireRateAdd fireRateAdd = (FireRateAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FireRateAdd);
-                float rateAdd = fireRateAdd.GetFireSpeedAdd(towerPtr.attributeId);
+                float rateAdd = 0;
 
+                if (fireRateAdd != null)
+                    rateAdd = fireRateAdd.GetFireSpeedAdd(towerPtr.attributeId);
                 return rateAdd > 1 ? rateAdd : fireSpeed;
             }
         }
@@ -473,7 +475,8 @@
         public float GetFireDuration()
         {
             DecreaseTowerAttackCD endlessBuff = (DecreaseTowerAttackCD)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.DecreaseTowerAttackCD);
-            return endlessBuff.GetDecreaseCD(towerPtr.attributeId, 1 / projectileFireRate);
+
+            return endlessBuff != null ? endlessBuff.GetDecreaseCD(towerPtr.attributeId, 1 / projectileFireRate) : 1 / projectileFireRate;
         }
 
         /// <summary>
diff --git a/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
index dfed43a..53fb7d7 100644
--- a/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
+++ b/Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
@@ -54,14 +54,17 @@
             BuffList.Add(buff);
             EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
 
-            endlessBuff.BuffList.Add(buff);
-            endlessBuff.Handle();
-
-            // 如果是一次性生效的buff,直接移除掉
-            if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
+            if (endlessBuff != null)
             {
-                endlessBuff.BuffList.Remove(buff);
-                RemoveBuff(buff);
+                endlessBuff.BuffList.Add(buff);
+                endlessBuff.Handle();
+
+                // 如果是一次性生效的buff,直接移除掉
+                if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
+                {
+                    endlessBuff.BuffList.Remove(buff);
+                    RemoveBuff(buff);
+                }
             }
         }
 
@@ -73,7 +76,7 @@
         {
             BuffList.Remove(buff);
             EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
-            endlessBuff.LoseEffect();
+            endlessBuff?.LoseEffect();
         }
 
         /// <summary>
@@ -148,6 +151,9 @@
         /// <returns></returns>
         public EndlessBuff GetBuffInstanceByType(EndlessBuffEffectType type)
         {
+            int tmp = (int)type - 1;
+            if ((int)type - 1 >= instanceList.Count) return null;
+
             return instanceList[(int)type - 1];
         }
     }
diff --git a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
index 66cf24d..44dc23c 100644
--- a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -96,6 +96,9 @@
         private bool IsCrit()
         {
             CritProbabilityAdd critProbabilityAdd = (CritProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritProbabilityAdd);
+
+            if (critProbabilityAdd == null) return false;
+
             float crit = critProbabilityAdd.GetCrit(TowerPtr.attributeId);
             float random = UnityEngine.Random.Range(0, 1f);
 
@@ -109,7 +112,8 @@
         private float GetCritDamageRate()
         {
             CritDamageAdd critDamageAdd = (CritDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritDamageAdd);
-            return critDamageAdd.GetCritDamageRate(TowerPtr.attributeId);
+
+            return critDamageAdd == null ? 0 : critDamageAdd.GetCritDamageRate(TowerPtr.attributeId);
         }
 
         /// <summary>
@@ -200,7 +204,7 @@
             {
                 case 2:  // 减速.
                     SlowDown slowDown = (SlowDown)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.SlowDown);
-                    enemy.addSpeedSlowRate(0.15f + slowDown.GetSlowDownAdd(TowerPtr.attributeId));
+                    enemy.addSpeedSlowRate(0.15f + (slowDown != null ? slowDown.GetSlowDownAdd(TowerPtr.attributeId) : 0));
                     enemy.SetTargetableMatColor(Color.blue);
                     break;
                 case 3:  // 中毒
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
index 750cf7b..75750c6 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
+++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -1363,9 +1363,7 @@
                 return false;
             }
 
-            BuyTower(pointer, force, zeroCost);
-
-            return true;
+            return BuyTower(pointer, force, zeroCost);
         }
 
         /// <summary>
@@ -1573,9 +1571,9 @@
         /// Throws exception when not in a build mode or when tower is not a valid position
         /// </exception>
         /// </summary>
-        public void BuyTower(UIPointer pointer, bool force = false, bool zeroCost = false)
+        public bool BuyTower(UIPointer pointer, bool force = false, bool zeroCost = false)
         {
-            if (!isBuilding) return;
+            if (!isBuilding) return false;
 
             // 判断是否格子上重复放置塔防
             if (!m_CurrentTower || !IsGhostAtValidPosition())
@@ -1607,11 +1605,11 @@
                     if (!pointer.raycast.HasValue || pointer.raycast.Value.collider == null)
                     {
                         CancelGhostPlacement();
-                        return;
+                        return false;
                     }
                     PlaceGhost(pointer);
                 }
-                return;
+                return true;
             }
 
             // 这是判断是否超出了格子
@@ -1619,7 +1617,7 @@
             if (!pointer.raycast.HasValue || pointer.raycast.Value.collider == null)
             {
                 CancelGhostPlacement();
-                return;
+                return false;
             }
 
             int cost = m_CurrentTower.controller.purchaseCost;
@@ -1630,6 +1628,8 @@
             {
                 PlaceGhost(pointer);
             }
+
+            return true;
         }
 
         /// <summary>
diff --git a/Assets/StreamingAssets/Table/endless_buff.json b/Assets/StreamingAssets/Table/endless_buff.json
index 2c177a8..578a22d 100644
--- a/Assets/StreamingAssets/Table/endless_buff.json
+++ b/Assets/StreamingAssets/Table/endless_buff.json
@@ -1 +1 @@
-[[1,"低级火灵之力",[2,1],[1,10,0],-1,"增加全体火精灵10%攻击力",0,"3",10001,1,"0"],[2,"低级水灵之力",[2,2],[1,10,0],-1,"增加全体水精灵10%攻击力",0,"3",10002,1,"0"],[3,"低级木灵之力",[2,3],[1,10,0],-1,"增加全体木精灵10%攻击力",0,"3",10003,1,"0"],[4,"火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力","4","7",10001,2,"0"],[5,"水灵之力",[2,2],[1,20,0],-1,"增加全体水精灵20%攻击力","4","7",10002,2,"0"],[6,"木灵之力",[2,3],[1,20,0],-1,"增加全体木精灵20%攻击力","4","7",10003,2,"0"],[7,"高级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力","8","10",10001,3,"0"],[8,"高级水灵之力",[2,2],[1,30,0],-1,"增加全体水精灵30%攻击力","8","10",10002,3,"0"],[9,"高级木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力","8","10",10003,3,"0"],[10,"特级火灵之力",[2,1],[1,40,0],-1,"增加全体火精灵40%攻击力","11","17",10001,3,"0"],[11,"特级水灵之力",[2,2],[1,40,0],-1,"增加全体水精灵40%攻击力","11","17",10002,3,"0"],[12,"特级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力","11","17",10003,3,"0"],[13,"精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,10004,2,1],[14,"狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],[15,"飞来横财",[0],[2,300,0],0,"增加300金币","0","4",10007,1,"0"],[16,"中大奖!",[0],[2,800,0],0,"增加800金币","5","99",10007,3,"0"],[17,"精灵魔盒",[0],[3,3,300],0,"随机获得一个3级精灵",99,99,10006,2,1],[18,"超级精灵魔盒",[0],[3,4,500],0,"随机获得一个4级精灵",99,99,10006,3,1],[19,"攻速增加_水",[2,2],[4,0.2,0.5],-1,"水精灵攻速+20%","2",99,"10013",3,"3"],[20,"攻速增加_火",[2,1],[4,0.3,0.5],-1,"火精灵攻速+30%","2",99,"10013",3,"2"],[21,"攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%","2",99,"10013",3,"3"],[22,"暴击_木",[3,109],[5,300,0],-1,"木系精灵暴击率+30%","3",99,"10012",3,"2"],[23,"暴怒_木",[3,109],[6,300,0],-1,"木系精灵暴击伤害+30%","5",99,"10011",3,"2"],[24,"弹夹扩容",[3,109],[7,2,0],-1,"玉米精灵高能子弹+1","3",99,10008,"2","1"],[25,"爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%","3",99,10009,"2","1"],[26,"暴击_火",[3,101],[5,200,0],-1,"火系精灵暴击率+20%","3",99,"10012",3,"2"],[27,"暴怒_火",[3,101],[6,300,0],-1,"火系精灵暴击伤害+30%","5",99,"10011",3,"2"],[28,"超级弹夹",[3,109],[7,3,0],-1,"玉米精灵高能子弹+2","7",99,10008,3,"1"],[29,"超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","7",99,10009,3,"1"],[30,"技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",0,99,10004,3,1]]
\ No newline at end of file
+[[1,"低级火灵之力",[2,1],[1,10,0],-1,"增加全体火精灵10%攻击力",0,"3",10001,1,"0"],[2,"低级水灵之力",[2,2],[1,10,0],-1,"增加全体水精灵10%攻击力",0,"3",10002,1,"0"],[3,"低级木灵之力",[2,3],[1,10,0],-1,"增加全体木精灵10%攻击力",0,"3",10003,1,"0"],[4,"火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力","4","7",10001,2,"0"],[5,"水灵之力",[2,2],[1,20,0],-1,"增加全体水精灵20%攻击力","4","7",10002,2,"0"],[6,"木灵之力",[2,3],[1,20,0],-1,"增加全体木精灵20%攻击力","4","7",10003,2,"0"],[7,"高级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力","8","10",10001,3,"0"],[8,"高级水灵之力",[2,2],[1,30,0],-1,"增加全体水精灵30%攻击力","8","10",10002,3,"0"],[9,"高级木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力","8","10",10003,3,"0"],[10,"特级火灵之力",[2,1],[1,40,0],-1,"增加全体火精灵40%攻击力","11","17",10001,3,"0"],[11,"特级水灵之力",[2,2],[1,40,0],-1,"增加全体水精灵40%攻击力","11","17",10002,3,"0"],[12,"特级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力","11","17",10003,3,"0"],[13,"精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,10004,2,1],[14,"狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],[15,"飞来横财",[0],[2,300,0],0,"增加300金币","0","4",10007,1,"0"],[16,"中大奖!",[0],[2,800,0],0,"增加800金币","5","99",10007,3,"0"],[17,"精灵魔盒",[0],[3,3,300],0,"随机获得一个3级精灵",99,99,10006,2,1],[18,"超级精灵魔盒",[0],[3,4,500],0,"随机获得一个4级精灵",99,99,10006,3,1],[19,"攻速增加_水",[2,2],[4,0.2,0.5],-1,"水精灵攻速+20%","2",99,"10013",3,"3"],[20,"攻速增加_火",[2,1],[4,0.3,0.5],-1,"火精灵攻速+30%","2",99,"10013",3,"2"],[21,"攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%","2",99,"10013",3,"3"],[22,"暴击_木",[3,109],[5,300,0],-1,"木系精灵暴击率+30%","3",99,"10012",3,"2"],[23,"暴怒_木",[3,109],[6,300,0],-1,"木系精灵暴击伤害+30%","5",99,"10011",3,"2"],[24,"弹夹扩容",[3,109],[7,2,0],-1,"玉米精灵高能子弹+1","3",99,10008,"2","1"],[25,"爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%","3",99,10009,"2","1"],[26,"暴击_火",[3,101],[5,200,0],-1,"火系精灵暴击率+20%","3",99,"10012",3,"2"],[27,"暴怒_火",[3,101],[6,300,0],-1,"火系精灵暴击伤害+30%","5",99,"10011",3,"2"],[28,"超级弹夹",[3,109],[7,3,0],-1,"玉米精灵高能子弹+2","7",99,10008,3,"1"],[29,"超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","7",99,10009,3,"1"],[30,"技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",0,99,10004,3,1],[31,"快速蓄能",[3,109],[11,0.5,0.5],-1,"玉米精灵蓄力时间-50%",0,99,10008,3,1]]
\ No newline at end of file

--
Gitblit v1.9.1