From d16e7704e8c46b683bbaa05c033eeaf83c2ad162 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 19 十一月 2025 18:25:44 +0800
Subject: [PATCH] 125 战斗 免疫飘字

---
 Main/System/Battle/Define/BattleDmgInfo.cs |   96 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 83 insertions(+), 13 deletions(-)

diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index d709ae5..3764066 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -24,6 +24,7 @@
     public SkillConfig skillConfig { get { return battleHurtParam.skillConfig; } }
 
     public bool isBlocked = false;
+    public bool isImmune = false;
     public bool isLastHit = false;
 
     public List<BattleDmg> targetDamageList = new List<BattleDmg>();
@@ -48,17 +49,76 @@
     private void HandleDamageType()
     {
         if (hurt == null) return;
-        
-        int attackTypes = 0;
+    
+        uint originalAttackTypes = hurt.AttackTypes;
+        int convertedAttackTypes = 0;
+    
+        // 閬嶅巻鏈嶅姟鍣ㄥ彂鏉ョ殑鎵�鏈変激瀹崇被鍨嬫爣璁�
         foreach (ServerDamageType serverDamageType in System.Enum.GetValues(typeof(ServerDamageType)))
         {
-            int nsdt = (int)serverDamageType;
-            if ((hurt.AttackTypes & nsdt) == nsdt)
+            int serverValue = (int)serverDamageType;
+        
+            // 妫�鏌ユ湇鍔″櫒绫诲瀷鏄惁瀛樺湪
+            if ((originalAttackTypes & serverValue) != serverValue)
+                continue;
+        
+            // 杞崲鏄犲皠
+            switch (serverDamageType)
             {
-                attackTypes += nsdt;
+                case ServerDamageType.Damage:
+                    convertedAttackTypes |= (int)DamageType.Damage;
+                    break;
+                
+                case ServerDamageType.Recovery:
+                    convertedAttackTypes |= (int)DamageType.Recovery;
+                    break;
+                
+                case ServerDamageType.Immune:
+                    convertedAttackTypes |= (int)DamageType.Immune;
+                    break;
+                
+                case ServerDamageType.Block:
+                    convertedAttackTypes |= (int)DamageType.Block;
+                    break;
+                
+                case ServerDamageType.Realdamage:
+                    convertedAttackTypes |= (int)DamageType.Realdamage;
+                    break;
+                
+                case ServerDamageType.Crit:
+                    convertedAttackTypes |= (int)DamageType.Crit;
+                    break;
+                
+                case ServerDamageType.Dodge:
+                    convertedAttackTypes |= (int)DamageType.Dodge;
+                    break;
+                
+                case ServerDamageType.DamageReverse:
+                    Debug.LogWarning($"[BattleDmgInfo] 鏈嶅姟鍣ㄤ激瀹崇被鍨� DamageReverse({serverValue}) 鍦ㄥ鎴风娌℃湁瀵瑰簲鐨勬灇涓惧��");
+                    break;
+                
+                case ServerDamageType.SuckHpReverse:
+                    Debug.LogWarning($"[BattleDmgInfo] 鏈嶅姟鍣ㄤ激瀹崇被鍨� SuckHpReverse({serverValue}) 鍦ㄥ鎴风娌℃湁瀵瑰簲鐨勬灇涓惧��");
+                    break;
+                
+                case ServerDamageType.SelfHarm:
+                    Debug.LogWarning($"[BattleDmgInfo] 鏈嶅姟鍣ㄤ激瀹崇被鍨� SelfHarm({serverValue}) 鍦ㄥ鎴风娌℃湁瀵瑰簲鐨勬灇涓惧��");
+                    break;
+                
+                default:
+                    Debug.LogError($"[BattleDmgInfo] 鏈煡鐨勬湇鍔″櫒浼ゅ绫诲瀷: {serverDamageType}({serverValue})");
+                    break;
             }
         }
-        hurt.AttackTypes = (uint)attackTypes;
+    
+        // 妫�鏌ユ槸鍚﹀寘鍚崰浣嶇绫诲瀷
+        if ((convertedAttackTypes & (int)DamageType.TakePlace2) == (int)DamageType.TakePlace2)
+        {
+            Debug.LogWarning($"[BattleDmgInfo] 杞崲鍚庣殑浼ゅ绫诲瀷鍖呭惈鍗犱綅绗� TakePlace2(256)");
+        }
+    
+        hurt.AttackTypes = (uint)convertedAttackTypes;
+        Debug.Log($"[BattleDmgInfo] 浼ゅ绫诲瀷杞崲: {originalAttackTypes} -> {hurt.AttackTypes}");
     }
 
     #endregion
@@ -68,7 +128,19 @@
     private void HandleAttackTypeAndDamage()
     {
         isBlocked = HaveBlockDamage();
+        isImmune = IsImmune();
         int rawAttackType = hurt == null ? 0 : (int)hurt.AttackTypes;
+        
+        // 濡傛灉鏄厤鐤紝鐩存帴娣诲姞鍏嶇柅鏄剧ず锛屼笉澶勭悊鍏朵粬浼ゅ
+        if (isImmune)
+        {
+            targetDamageList.Add(new BattleDmg 
+            { 
+                damage = 0, 
+                attackType = (int)DamageType.Immune 
+            });
+            return;
+        }
         
         int maxCount = CalculateMaxDamageSegmentCount();
 
@@ -245,6 +317,11 @@
         return IsType(DamageType.Block);
     }
 
+    public bool IsImmune()
+    {
+        return IsType(DamageType.Immune);
+    }
+
     public bool IsRealdamage()
     {
         return skillConfig.HurtType / 10 == 1;
@@ -271,13 +348,6 @@
     public HB422_tagMCTurnFightObjDead deadPack;
     public SkillConfig skillConfig;
     public long maxHp;
-
-    //  鎶ょ浘鍊肩殑鍙樺寲搴旇浠庢姢鐩�2寮�濮嬪彉鍖� 涔熷氨鏄 濡傛灉鎶ょ浘2鏈夊�� 鍒欎粠鎶ょ浘2寮�濮嬪彉鍖� 鍚﹀垯浠庢姢鐩�1寮�濮嬪彉鍖�
-    //  鍐嶈�冭檻鎶ょ浘1 濡傛灉鎶ょ浘1鏈夊�� 鍒欎粠鎶ょ浘1寮�濮嬪彉鍖� 鍚﹀垯娌℃湁鎶ょ浘鍙樺寲
-    //  浣嗘槸鍏跺疄鍙互浠庢�昏閲忎笅鎵� 涔熷氨鏄 
-    //  from鎶ょ浘鍊� + from琛�閲� = 琛ㄧ幇鐨勫紑濮�
-    //  to鎶ょ浘鍊� + to琛�閲� = 琛ㄧ幇鐨勭粨鏉�
-    //  杩欐牱灏变笉闇�瑕佸尯鍒嗘姢鐩�1鍜屾姢鐩�2浜� 鍙鍦ㄨ〃鐜颁笂鍋氬ソ灏辫
 
     public long fromShieldValue;
     public long toShieldValue;

--
Gitblit v1.8.0