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