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/BattleUtility.cs | 4 +-
Main/System/Battle/Define/DamageType.cs | 2
Main/System/Battle/Define/BattleDmgInfo.cs | 96 +++++++++++++++++++++++++++++++++++++++++------
3 files changed, 86 insertions(+), 16 deletions(-)
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 1305c3e..ca43d82 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -114,8 +114,8 @@
string result = string.Empty;
- // 濡傛灉鏄棯閬� 鍒欏彧鏄剧ず闂伩涓や釜瀛�
- if (damage.IsType(DamageType.Dodge))
+ // 濡傛灉鏄棯閬挎垨鍏嶇柅 鍒欏彧鏄剧ず瀵瑰簲鏂囧瓧锛屼笉鏄剧ず鏁板瓧
+ if (damage.IsType(DamageType.Dodge) || damage.IsType(DamageType.Immune))
{
result += (char)config.prefix;
}
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;
diff --git a/Main/System/Battle/Define/DamageType.cs b/Main/System/Battle/Define/DamageType.cs
index 84ea0be..7cf255d 100644
--- a/Main/System/Battle/Define/DamageType.cs
+++ b/Main/System/Battle/Define/DamageType.cs
@@ -43,7 +43,7 @@
Block = 32, //鏍兼尅 (2^5)
- TakePlace1 = 64, //鍗犱綅1 (鏆傛棤鐢�) (2^6)
+ Immune = 64, //鍏嶇柅 (2^6)
Crit = 128, //鏆村嚮 (2^7)
--
Gitblit v1.8.0