From 92192b6e318892cec3fce40188f9bc9ca8046e06 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 24 十二月 2025 16:09:49 +0800
Subject: [PATCH] 125 战斗 攻击类型被多次重新转换导致的bug问题 (焚血 免疫等)

---
 Main/Core/NetworkPackage/CustomServerPack/CustomHB427_tagSCUseSkill.cs     |    9 ++++
 Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB427_tagSCUseSkill.cs |    4 +-
 Main/System/Battle/UIComp/BattleHeroInfoBar.cs                             |    9 ----
 Main/System/Battle/Define/DamageType.cs                                    |   27 +++++++------
 Main/System/Battle/Define/BattleDmgInfo.cs                                 |   15 ++++++-
 5 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/Main/Core/NetworkPackage/CustomServerPack/CustomHB427_tagSCUseSkill.cs b/Main/Core/NetworkPackage/CustomServerPack/CustomHB427_tagSCUseSkill.cs
index 5e680c5..51300ec 100644
--- a/Main/Core/NetworkPackage/CustomServerPack/CustomHB427_tagSCUseSkill.cs
+++ b/Main/Core/NetworkPackage/CustomServerPack/CustomHB427_tagSCUseSkill.cs
@@ -41,4 +41,13 @@
             return parentSkill != null;
         }
     }
+
+    public partial class tagSCUseSkillHurt {
+        public bool isChangedRawAttackType = false;
+    }
+
+    public partial class tagSCUseSkillHurtEx
+    {
+        public bool isChangedRawAttackType = false;
+    }
 }
\ No newline at end of file
diff --git a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB427_tagSCUseSkill.cs b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB427_tagSCUseSkill.cs
index f5c4592..70660a4 100644
--- a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB427_tagSCUseSkill.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB427_tagSCUseSkill.cs
@@ -67,7 +67,7 @@
         }
     }
 
-    public class tagSCUseSkillHurt {
+    public partial class tagSCUseSkillHurt {
         public uint ObjID;        // 鎶�鑳借嚜韬洰鏍嘔D
         public uint AttackTypes;        // 椋樿绫诲瀷姹囨�伙紝鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�4-鍏嶇柅锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�8-鍑绘檿锛�9-闂伩
         public uint HurtHP;        // 椋樿鍊硷紝姹備綑浜块儴鍒�
@@ -80,7 +80,7 @@
         public  tagSCUseSkillHurtEx[] HurtListEx;        // 棰濆浼ゅ鐩爣鍒楄〃锛屼粎鍚庣澶氭浼ゅ鐨勬湁鏁堬紝濡傚脊灏勭殑骞虫憡浼ゅ
     }
 
-    public class tagSCUseSkillHurtEx {
+    public partial class tagSCUseSkillHurtEx {
         public uint ObjID;        // 棰濆鐩爣锛屽婧呭皠浼ゅ銆佸钩鎽婁激瀹崇洰鏍囷紝闈炴妧鑳借嚜韬殑涓昏鐩爣
         public uint AttackTypes;        // 椋樿绫诲瀷姹囨�伙紝鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�4-鍏嶇柅锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�8-鍑绘檿锛�9-闂伩
         public uint HurtHP;        // 椋樿鍊硷紝姹備綑浜块儴鍒�
diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index 59d35b8..c4428e3 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -97,7 +97,9 @@
 
     private void HandleDamageType()
     {
-        if (hurt == null) return;
+        if (hurt == null || hurt.isChangedRawAttackType) return;
+
+        hurt.isChangedRawAttackType = true;
 
         uint originalAttackTypes = hurt.AttackTypes;
         int convertedAttackTypes = 0;
@@ -301,13 +303,15 @@
         long suckHp = battleHurtParam.caster.suckHpList[segmentIndex];
         if (suckHp > 0)
         {
+            bool isSuckReverse = IsType(DamageType.SuckHpReverse);
             if (isCasterView)
             {
                 // 鏂芥硶鑰呰瑙掞細鍚歌鏄剧ず鍦ㄨ嚜宸辫韩涓婏紙targetDamageList锛�
+
                 targetDamageList.Add(new BattleDmg
                 {
                     damage = suckHp,
-                    attackType = IsType(DamageType.SuckHpReverse) ? (int)DamageType.Damage : (int)DamageType.SuckHP
+                    attackType = isSuckReverse ? (int)DamageType.Damage : (int)DamageType.SuckHP
                 });
             }
             else
@@ -316,7 +320,7 @@
                 casterDamageList.Add(new BattleDmg
                 {
                     damage = suckHp,
-                    attackType = IsType(DamageType.SuckHpReverse) ? (int)DamageType.Damage : (int)DamageType.SuckHP
+                    attackType = isSuckReverse ? (int)DamageType.Damage : (int)DamageType.SuckHP
                 });
             }
         }
@@ -415,6 +419,11 @@
             attackType &= ~(int)DamageType.Stunned;
         }
 
+        if (IsType(DamageType.SuckHpReverse))
+        {
+            attackType &= ~(int)DamageType.SuckHpReverse;
+        }
+
         if (DamageNumConfig.Get(attackType) != null)
             return attackType;
 
diff --git a/Main/System/Battle/Define/DamageType.cs b/Main/System/Battle/Define/DamageType.cs
index 8430b96..4b8f65c 100644
--- a/Main/System/Battle/Define/DamageType.cs
+++ b/Main/System/Battle/Define/DamageType.cs
@@ -12,26 +12,27 @@
 //	鏈嶅姟鍣ㄦ嫢鏈夌殑DamageType
 public enum ServerDamageType
 {
-	Damage = 2,//鏅�氫激瀹�
-	Recovery = 4,//娌荤枟
+	Damage = 2,//鏅�氫激瀹� (2^1 搴忓彿1)
+	Recovery = 4,//娌荤枟 (2^2 搴忓彿2)
 
-	Reborn = 8,//澶嶆椿
+	Reborn = 8,//澶嶆椿 (2^3 搴忓彿3)
 
-	Immune = 16,//鍏嶇柅
+	Immune = 16,//鍏嶇柅 (2^4 搴忓彿4)
 
-	Block = 32, //鏍兼尅
+	Block = 32, //鏍兼尅 (2^5 搴忓彿5)
 
-	Realdamage = 64, //鐪熶激
-	Crit = 128, //鏆村嚮
+	Realdamage = 64, //鐪熶激/鏃犺闃蹭激 (2^6 搴忓彿6)
+	Crit = 128, //鏆村嚮 (2^7 搴忓彿7)
 
-	Stunned = 256, //鍑绘檿
+	Stunned = 256, //鍑绘檿 (2^8 搴忓彿8)
 
-	Dodge = 512, //闂伩
+	Dodge = 512, //闂伩 (2^9 搴忓彿9)
 
-	DamageReverse = 1024,//娌荤枟鍙嶈浆鎴愪激瀹�
+	DamageReverse = 1024,//浼ゅ鍙樹负 (2^10 搴忓彿10)
 
-	SuckHpReverse = 2048,//鍚歌鍙嶈浆涓轰激瀹�
-	SelfHarm = 4096,//鑷畫
+	SuckHpReverse = 2048,//鍚歌姣掕嵂 (2^11 搴忓彿11)
+	SelfHarm = 4096,//鑷畫 (2^12 搴忓彿12)
+	Protected = 8192,//鏈浼ゅ鏈夊彈淇濇姢鏍囪 (2^13 搴忓彿13)
 }
 
 public enum DamageType
@@ -66,6 +67,6 @@
 
 	CritRealdamage = Crit + Realdamage, //鏆村嚮鐪熶激
 
-	SuckHpReverse, //鍚歌鍙嶈浆涓轰激瀹�
+	SuckHpReverse = 8192, //鍚歌鍙嶈浆涓轰激瀹�
 }
 
diff --git a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
index 83fbfa1..3782201 100644
--- a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
+++ b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -234,14 +234,7 @@
             xpTween = sliderXp.DOValue(targetValue, 0.2f).SetAutoKill(false);
             xpTween.OnComplete(() =>
             {
-                if (toXp >= maxXp)
-                {
-                    maxXpGO.SetActive(true);
-                }
-                else
-                {
-                    maxXpGO.SetActive(false);
-                }
+                maxXpGO.SetActive(toXp >= maxXp);
             });
             battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween);
         }

--
Gitblit v1.8.0