From ffd55c202987fb7122e6ce19b5e6f738e33fdf01 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 20 十一月 2025 15:29:10 +0800
Subject: [PATCH] 125 战斗 技能施法容错

---
 Main/System/Battle/BattleObject/BattleObject.cs |  196 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 138 insertions(+), 58 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 7040934..cc5192c 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -48,7 +48,7 @@
         private set;
     }
 
-    protected BattleDrops battleDrops;
+    protected BattleDrops m_battleDrops;
 
     private RectTransform m_heroRectTrans;
 
@@ -101,8 +101,15 @@
         var heroInfoBarScale = heroInfoBar.transform.localScale;
         heroInfoBarScale.x *= Camp == BattleCamp.Red ? 1 : -1;
         heroInfoBar.transform.localScale = heroInfoBarScale;
-
-        heroInfoBar.SetActive(true);
+        if (battleField is StoryBattleField && (battleField as StoryBattleField).battleState == StoryBattleState.Break)
+        {
+            //涓荤嚎鍏冲崱浼戞伅涓殑涓嶆樉绀鸿鏉�
+            heroInfoBar.SetActive(false);
+        }
+        else
+        {
+            heroInfoBar.SetActive(true);
+        }
         SetFront();
     }
 
@@ -162,16 +169,20 @@
 
     public void OnObjInfoRefresh(H0418_tagObjInfoRefresh _refreshInfo)
     {
+        // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
+        BattleObject boss = battleField.FindBoss();
+        if (boss != null && battleField.MapID == 30020 && boss.ObjID == _refreshInfo.ObjID && _refreshInfo.RefreshType != (ushort)PlayerDataType.XP)
+            return;
         switch ((PlayerDataType)_refreshInfo.RefreshType)
         {
             case PlayerDataType.HP:
                 long toHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
-                heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
+                heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
                 teamHero.curHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
                 break;
             case PlayerDataType.MaxHP:
                 teamHero.maxHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
-                heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
+                heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
                 break;
             case PlayerDataType.XP:
                 long toXp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
@@ -184,29 +195,33 @@
         }
     }
 
-    public void ObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
-    {
-        switch ((PlayerDataType)vNetData.RefreshType)
-        {
-            case PlayerDataType.HP:
-                long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
-                heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
-                teamHero.curHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
-                break;
-            case PlayerDataType.MaxHP:
-                teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
-                heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
-                break;
-            case PlayerDataType.XP:
-                long toXp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
-                heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
-                teamHero.rage = (int)GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
-                break;
-            default:
-                Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
-                break;
-        }
-    }
+    // public void ObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
+    // {
+    //     // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
+    //     BattleObject boss = battleField.FindBoss();
+    //     if (boss != null && battleField.MapID == 30020 && boss.ObjID == vNetData.ObjID && vNetData.RefreshType != (ushort)PlayerDataType.XP)
+    //         return;
+    //     switch ((PlayerDataType)vNetData.RefreshType)
+    //     {
+    //         case PlayerDataType.HP:
+    //             long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+    //             heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
+    //             teamHero.curHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+    //             break;
+    //         case PlayerDataType.MaxHP:
+    //             teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+    //             heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
+    //             break;
+    //         case PlayerDataType.XP:
+    //             long toXp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+    //             heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
+    //             teamHero.rage = (int)GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+    //             break;
+    //         default:
+    //             Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
+    //             break;
+    //     }
+    // }
 
     //  鐪╂檿
     public bool IsStunned()
@@ -299,7 +314,7 @@
 
 
         //  杩欓噷
-        if (dmgInfo.IsType(DamageType.Dodge) && !buffMgr.isControled[BattleConst.HardControlGroup])
+        if (dmgInfo.IsType(DamageType.Dodge) /*&& !buffMgr.isControled[BattleConst.HardControlGroup]*/)//濡傛灉琚帶鍒朵簡杩橀棯閬夸簡 瑕佺湅鐪嬫湇鍔″櫒鎬庝箞澶勭悊浜�
         {
             if (isLastHit)
             {
@@ -319,12 +334,12 @@
 
         if (isFatalAttack)
         {
-            if (null != battleDrops)
+            if (null != battleHurtParam.battleDrops)
             {
-                PushDropItems(battleDrops);
+                PushDropItems(battleHurtParam.battleDrops);
             }
             battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { battleHurtParam.deadPack });
-            
+
         }
         else
         {
@@ -332,28 +347,18 @@
             {
                 battleField.battleEffectMgr.PlayEffect(this, 19999, heroRectTrans, Camp);
             }
-            else
+            // else
+            // {
+            if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
             {
-                if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
+                if (!buffMgr.isControled[BattleConst.HardControlGroup])
                 {
-                    if (!buffMgr.isControled[BattleConst.HardControlGroup])
-                    {
-                        motionBase.PlayAnimation(MotionName.hit, false);
-                    }
+                    motionBase.PlayAnimation(MotionName.hit, false);
                 }
             }
+            // }
 
         }
-    }
-
-    public void SuckHp(uint suckHP, SkillConfig skillConfig)
-    {
-        // teamHero.curHp = Math.Min(teamHero.maxHp, teamHero.curHp + (int)suckHP);
-    }
-
-    public void HurtByReflect(uint bounceHP, SkillConfig skillConfig)
-    {
-        // teamHero.curHp = Math.Max(0, teamHero.curHp - (int)bounceHP);
     }
 
 
@@ -366,6 +371,12 @@
             .SetEase(Ease.OutCubic);
 
         motionBase.ShowIllusionShadow(true);
+
+        DamageNumConfig damageNumConfig = DamageNumConfig.Get((int)DamageType.Dodge);
+
+        string dodgeStr = ((char)damageNumConfig.prefix).ToString();
+
+        heroInfoBar.ShowTips(dodgeStr, true, false);
 
         tween.onComplete += () =>
         {
@@ -393,7 +404,8 @@
 
     public virtual void OnDeath(Action _onDeathAnimationComplete)
     {
-        motionBase.PlayAnimation(MotionName.dead, false, () =>
+        buffMgr.RemoveAllBuff();
+        motionBase.PlayDeadAnimation(() =>
         {
             teamHero.isDead = true;
             OnDeadAnimationComplete();
@@ -406,6 +418,7 @@
         //  鎴栬鐪嬬湅婧惰В鐗规晥锛� YYL TODO
         heroGo.SetActive(false);
 
+        //  闃叉缁欐浜″璞″張涓奲uff
         buffMgr.RemoveAllBuff();
     }
 
@@ -413,6 +426,7 @@
     {
         // 澶勭悊澶嶆椿閫昏緫
         teamHero.curHp = GeneralDefine.GetFactValue(vNetData.HP, vNetData.HPEx);
+        teamHero.isDead = false;
         heroGo.SetActive(true);
         motionBase.PlayAnimation(MotionName.idle, true);
     }
@@ -421,13 +435,22 @@
     protected virtual BattleDmgInfo PopDamage(BattleHurtParam battleHurtParam)
     {
         BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, battleHurtParam);
+        // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉¢�昏緫
+        BattleObject boss = battleField.FindBoss();
+        if (boss != null && battleField.MapID == 30020 && boss.ObjID == battleHurtParam.hurtObj.ObjID)
+        {
+            EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+            return battleDmgInfo;
+        }
+        else
+        {
+            heroInfoBar.UpdateDamage(battleDmgInfo);
 
-        // 浣跨敤浼犲叆鐨� fromHp 鍜� toHp 鏇存柊琛�鏉℃樉绀�
-        heroInfoBar.UpdateHP(battleHurtParam.fromHp, battleHurtParam.toHp, teamHero.maxHp);
+            // YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
+            EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+            return battleDmgInfo;
+        }
 
-        // YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
-        EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
-        return battleDmgInfo;
     }
 
     public RectTransform GetAliasTeamNode()
@@ -460,21 +483,21 @@
 
     public void PushDropItems(BattleDrops _battleDrops)
     {
-        battleDrops = _battleDrops;
+        m_battleDrops = _battleDrops;
     }
 
     public void PerformDrop()
     {
-        if (null == battleDrops || battleDrops.dropItemPackIndex.Count == 0)
+        if (null == m_battleDrops)
             return;
 
         EventBroadcast.Instance.Broadcast<string, BattleDrops, Action>(
-            EventName.BATTLE_DROP_ITEMS, battleField.guid, battleDrops, OnPerformDropFinish);
+            EventName.BATTLE_DROP_ITEMS, battleField.guid, m_battleDrops, OnPerformDropFinish);
     }
 
     protected void OnPerformDropFinish()
     {
-        battleDrops = null;
+        m_battleDrops = null;
     }
 
     public void SetBack()
@@ -493,6 +516,63 @@
         heroInfoBar.SetSpeedRatio(ratio);
     }
 
+    public void OnObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
+    {
+        // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
+        BattleObject boss = battleField.FindBoss();
+        if (boss != null && battleField.MapID == 30020 && boss.ObjID == vNetData.ObjID && vNetData.RefreshType != (ushort)PlayerDataType.XP)
+            return;
+
+        // public uint ObjID;
+        // public ushort RefreshType;    // 鍚�0418鍒锋柊绫诲瀷锛屽琛�閲忋�佹�掓皵
+        // public uint AttackTypes;    // 椋樺瓧绫诲瀷姹囨�伙紝鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�9-闂伩
+        // public uint Value;    // 鏇存柊鍊�
+        // public uint ValueEx;    // 鏇存柊鍊硷紝濡傛灉鏄ぇ鏁板�肩殑姝ゅ�间负鏁撮櫎浜块儴鍒�
+        // public byte DiffType;    // 鍙樺寲绫诲瀷锛�0-鍑忓皯锛�1-澧炲姞
+        // public uint DiffValue;    // 鍙樺寲鍊�
+        // public uint DiffValueEx;    // 鍙樺寲鍊硷紝濡傛灉鏄ぇ鏁板�肩殑姝ゅ�间负鏁撮櫎浜块儴鍒�
+        // public uint SkillID;    // 浣跨敤鐨勬妧鑳借〃ID
+        // public uint RelatedSkillID;    // 鍏宠仈鐨勬妧鑳絀D锛屼竴鑸槸涓绘妧鑳絀D锛岄潪涓绘妧鑳介澶栬Е鍙戠殑涓�0
+
+        long diffValue = GeneralDefine.GetFactValue(vNetData.DiffValue, vNetData.DiffValueEx);
+        diffValue *= vNetData.DiffType == 0 ? -1 : 1;
+
+        long newValue = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+
+
+        switch ((PlayerDataType)vNetData.RefreshType)
+        {
+            case PlayerDataType.HP:
+                long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+                heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, true);
+                teamHero.curHp = newValue;
+                break;
+            case PlayerDataType.MaxHP:
+                teamHero.maxHp = newValue;
+                heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, true);
+                break;
+            case PlayerDataType.XP:
+                long toXp = newValue;
+                heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
+                teamHero.rage = (int)newValue;
+
+                DamageNumConfig damageNumConfig = DamageNumConfig.Get((int)DamageType.RageUp);
+                string message = BattleUtility.ConvertToArtFont(damageNumConfig, diffValue);
+                heroInfoBar.ShowTips(new BattleHeroInfoBar.TipsInfo()
+                {
+                    message = message,
+                    useArtText = true,
+                    followCharacter = true,
+                    scaleRatio = 1f,
+                    isRage = true
+                });
+                break;
+            default:
+                Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
+                break;
+        }
+    }
+
 
 #if UNITY_EDITOR_STOP_USING
     public void EditorRevive()

--
Gitblit v1.8.0