From b9ae79116a9e419b28c38f1c84016ec7938afefa Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 30 九月 2025 18:13:23 +0800
Subject: [PATCH] 125 战斗 1.快速结束战斗失效的问题 2.角色UI高过外部UI的问题 3.战斗伤害消失的问题

---
 Main/System/Battle/BattleField/BattleField.cs                       |   20 +++---
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                     |   41 ++++++++++---
 Main/System/Battle/BattleManager.cs                                 |    2 
 Main/System/Battle/BattleUtility.cs                                 |   44 ++++++++++++++
 Main/System/Battle/Skill/SkillBase.cs                               |    1 
 Main/Manager/UIManager.cs                                           |    2 
 Main/System/Battle/BattleHUDWin.cs                                  |   10 +--
 Main/System/Battle/UIComp/DamageLine.cs                             |    2 
 Main/System/Battle/Motion/MotionBase.cs                             |    7 ++
 Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs   |   22 +++++++
 Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs |    2 
 Main/System/Battle/Define/BattleDmgInfo.cs                          |    6 ++
 12 files changed, 126 insertions(+), 33 deletions(-)

diff --git a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
index 7d4214d..d02c2b9 100644
--- a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
+++ b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
@@ -63,7 +63,7 @@
                 temp += "  pack type is " + pack.GetType().Name + "\n";
             }
         }
-        BattleDebug.LogError(temp);
+        // BattleDebug.LogError(temp);
     }
 
     public void AddPack(GameNetPackBasic pack)
diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs
index e7cdb06..5be6bdd 100644
--- a/Main/Manager/UIManager.cs
+++ b/Main/Manager/UIManager.cs
@@ -586,7 +586,7 @@
             // 璁剧疆UI鐨勬帓搴忛『搴�
             ui.SetSortingOrder(sortingOrder);
             // 鏇存柊褰撳墠鏈�楂樻帓搴忛『搴�
-            currentHighestSortingOrder += ui.uiLayer == UILayer.Static ? 55/*杩欓噷鏄鑹�+鐗规晥涔嬩笂鐨勫眰绾�*/ : 10;
+            currentHighestSortingOrder += ui.uiLayer == UILayer.Static ? 155/*杩欓噷鏄鑹�+鐗规晥涔嬩笂鐨勫眰绾�*/ : 10;
 
             // Debug.Log(ui.uiName + " order is " + sortingOrder + " " + currentHighestSortingOrder);
         }
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 5a2ae2d..1111307 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -478,16 +478,16 @@
             int winFaction = (int)turnFightStateData["winFaction"];
             //鑾疯儨闃佃惀:   涓�鑸负1鎴栬��2锛屽綋鐜╁鍙戣捣鐨勬垬鏂楁椂锛屽鏋滆幏鑳滈樀钀ヤ笉绛変簬1浠h〃鐜╁澶辫触浜�
 
-            if (winFaction == 1)
-            {
-                Debug.LogError(guid + " : 鎴樻枟鑳滃埄");
-                //  鎴樻枟鑳滃埄
-            }
-            else
-            {
-                //  鎴樻枟澶辫触
-                Debug.LogError(guid + " : 鎴樻枟澶辫触");
-            }
+            // if (winFaction == 1)
+            // {
+            //     Debug.LogError(guid + " : 鎴樻枟鑳滃埄");
+            //     //  鎴樻枟鑳滃埄
+            // }
+            // else
+            // {
+            //     //  鎴樻枟澶辫触
+            //     Debug.LogError(guid + " : 鎴樻枟澶辫触");
+            // }
 
             IsBattleFinish = true;
 
diff --git a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
index fc04597..9cd762e 100644
--- a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -15,6 +15,11 @@
 
     public override void Run()
     {
+        if (isFinish)
+        {
+            return;
+        }
+
         base.Run();
 
         if (!isRunOnce)
@@ -63,6 +68,23 @@
         }
     }
 
+    public override void ForceFinish()
+    {
+        isFinish = true;
+
+        //  鐩存帴缁撴潫
+        foreach (var deadPack in deadPackList)
+        {
+            BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID);
+            if (null != deadObj)
+            {
+                OnDeathAnimationEnd(deadObj);
+            }
+        }
+
+        base.ForceFinish();
+    }
+
     private void OnDeathAnimationEnd(BattleObject deadObj)
     {
         //  鍙湁涓荤嚎鎺夎惤鐗╁搧
diff --git a/Main/System/Battle/BattleHUDWin.cs b/Main/System/Battle/BattleHUDWin.cs
index 6517345..ef233a2 100644
--- a/Main/System/Battle/BattleHUDWin.cs
+++ b/Main/System/Battle/BattleHUDWin.cs
@@ -54,9 +54,9 @@
         ClearContent(guid);
     }
 
-    private void ClearContent(string guid)
+    private void ClearContent(string guid, bool force = false)
     {
-        if (battleField.guid == guid)
+        if ((battleField != null && battleField.guid == guid) || force)
         {
             for (int i = damageContentList.Count - 1; i >= 0; i--)
             {
@@ -105,9 +105,6 @@
 
     private void OnDamageTaken(BattleDmgInfo damageInfo)
     {
-        if (battleField.IsBattleEnd())
-            return;
-
         GameObject damageContent = damagePrefabPool.Request();
         DamageContent content = damageContent.GetComponent<DamageContent>();
         damageContent.transform.SetParent(damageNode, false);
@@ -141,9 +138,8 @@
         if (battleField != null)
         {
             battleField.OnBattlePause -= OnBattlePause;
-            ClearContent(battleField.guid);
         }
-
+        ClearContent(string.Empty, true);
         battleField = _battleField;
         battleField.OnBattlePause += OnBattlePause;
     }
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 9e688d8..2d8d217 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -261,7 +261,7 @@
         {
             str += "  " + list[i].GetType().Name + "\n";
         }
-        BattleDebug.LogError(str);
+        // BattleDebug.LogError(str);
         return list;
 
     }
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 03d2cda..3a5e7ee 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -102,12 +102,54 @@
             var numChar = (char)GetDamageNumKey(config, basePowerStr[i]);
             if (numChar > 0)
             {
-                result += numChar; 
+                result += numChar;
             }
         }
         return result;
     }
 
+    public static string DisplayDamageNum(BattleDmg damage)
+    {
+        var config = DamageNumConfig.Get(damage.attackType);
+
+        string result = string.Empty;
+
+        //  濡傛灉鏄棯閬� 鍒欏彧鏄剧ず闂伩涓や釜瀛�
+        if (damage.IsType(DamageType.Dodge))
+        {
+            result += (char)config.prefix;
+        }
+        else
+        {
+            result = ConvertToArtFont(config, damage.damage);
+        }
+
+        return result;
+    }
+
+    static string ConvertToArtFont(DamageNumConfig config, float _num)
+    {
+        var stringBuild = new System.Text.StringBuilder();
+
+        if (0 != config.plus)
+            stringBuild.Append((char)config.plus);
+        if (0 != config.prefix)
+            stringBuild.Append((char)config.prefix);
+
+        var chars = UIHelper.ReplaceLargeArtNum(_num);
+        for (var i = 0; i < chars.Length; i++)
+        {
+            int numChar = GetDamageNumKey(config, (int)chars[i]);
+
+            if (numChar > 0)
+            {
+                stringBuild.Append((char)numChar);
+            }
+        }
+
+        return stringBuild.ToString();
+    }
+
     public static int GetMainTargetPositionNum(BattleObject caster, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> targetList, SkillConfig skillConfig)
     {
         int returnIndex = 0;
diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index a299f39..c68f1c1 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -4,8 +4,14 @@
 {
     public long damage;
     public int attackType;
+
+    public bool IsType(DamageType damageType)
+    {
+        return (attackType & (int)damageType) == (int)damageType;
+    }
 }
 
+
 public class BattleDmgInfo
 {
 
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 8bcad86..efaefc5 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -224,6 +224,13 @@
 
         updateLocalHandler = () =>
         {
+            if (skillBase.IsFinished())
+            {
+                isPlaySkillAnimation = false;
+                RemoveRunAction(updateLocalHandler);
+                return;
+            }
+
             float frame = (skillTrackEntry.TrackTime * skillTrackEntry.TimeScale * (float)BattleConst.skillMotionFps);
 
             if (currentTrackEntry != skillTrackEntry)
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 8d1ca4b..2d26c5f 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -17,6 +17,8 @@
 
     private float speedRatio = 1.5f;
 
+    private bool isForceFinish = false;
+
     public void Init(BattleField _battleField)
     {
         Release();
@@ -33,6 +35,11 @@
     public void PlayRecord(RecordAction recordAction)
     {
         BattleDebug.LogError("Enqueue record action " + recordAction.GetType());
+        if (isForceFinish)
+        {
+            recordAction.ForceFinish();
+            return;
+        }
         recordActionQueue.Enqueue(recordAction);
     }
 
@@ -46,6 +53,12 @@
 
     public void InsertRecord(RecordAction recordAction)
     {
+        if (isForceFinish)
+        {
+            recordAction.ForceFinish();
+            return;
+        }
+
         BattleDebug.LogError("Insert record action " + recordAction.GetType());
         if (currentRecordAction != null)
         {
@@ -65,6 +78,11 @@
 
     public void ImmediatelyPlay(RecordAction recordAction)
     {
+        if (isForceFinish)
+        {
+            recordAction.ForceFinish();
+            return;
+        }
         immediatelyActionList.Add(recordAction);
     }
 
@@ -159,28 +177,28 @@
 
     }
 
+
     public void HaveRest()
     {
-        while (IsPlaying())
-        {
-            ForceFinish();
-        }
+        ForceFinish();
     }
 
     public void ForceFinish()
     {
-        for (int i = 0; i < immediatelyActionList.Count; i++)
+        isForceFinish = true;
+        for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
         {
-            immediatelyActionList[i].ForceFinish();
+            var action = immediatelyActionList[i];
+            action.ForceFinish();
+            immediatelyActionList.Remove(action);
         }
 
-        immediatelyActionList.Clear();
-
-        if (currentRecordAction != null)
+        while (currentRecordAction != null)
         {
-            currentRecordAction.ForceFinish();
+            var temp = currentRecordAction;
+            currentRecordAction = null;
+            temp.ForceFinish();
         }
-        currentRecordAction = null;
 
         while (recordActionQueue.Count > 0)
         {
@@ -197,6 +215,7 @@
         currentRecordAction = null;
         recordActionQueue.Clear();
         immediatelyActionList.Clear();
+        isForceFinish = false;
     }
 
     public void SetSpeedRatio(float ratio)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 1d1ae26..829b7e8 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -686,6 +686,7 @@
 			otherSkillAction.ForceFinish();
 			otherSkillAction = null;
 		}
+		HandleDead();
 		isFinished = true;
 		moveFinished = true;
 		isPlay = true;
diff --git a/Main/System/Battle/UIComp/DamageLine.cs b/Main/System/Battle/UIComp/DamageLine.cs
index 5d231df..3f37cd5 100644
--- a/Main/System/Battle/UIComp/DamageLine.cs
+++ b/Main/System/Battle/UIComp/DamageLine.cs
@@ -24,6 +24,6 @@
     public void SetDamage(BattleDmg damage)
     {
         damageTypeLabel.SetActive(false);
-        damageValueLabel.text = BattleUtility.DisplayDamageNum(damage.damage, damage.attackType);
+        damageValueLabel.text = BattleUtility.DisplayDamageNum(damage);
     }
 }

--
Gitblit v1.8.0