From 2d3a60767d0cd69c8dec97e39937bcd0c667be1c Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 12 十一月 2025 18:54:57 +0800
Subject: [PATCH] 125 战斗 血条&护盾1护盾2表现
---
Main/System/Battle/Skill/SkillBase.cs | 163 ++++++++++++++++++++++++-----------------------------
1 files changed, 74 insertions(+), 89 deletions(-)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 0caf1c4..7fb0d75 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -489,25 +489,6 @@
// 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
{
- // ============ 绗竴姝�:璁$畻浼ゅ鍒嗗竷 ============
- List<int> damageDivide = new List<int>();
- if (_hitIndex == 0 && skillConfig.DamageDivide.Length <= 0)
- {
- damageDivide.Add(10000);
- }
- else
- {
- if (skillConfig.DamageDivide.Length <= _hitIndex)
- {
- Debug.LogError("鎶�鑳戒激瀹冲垎甯冮厤缃敊璇� skillId: " + skillConfig.SkillID + " hitIndex: " + _hitIndex);
- damageDivide.Add(10000);
- }
- else
- {
- damageDivide = skillConfig.DamageDivide[_hitIndex].ToList();
- }
- }
-
// 璁$畻鎬讳激瀹冲拰鍒嗘浼ゅ鍒楄〃
long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
List<long> damageList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalDamage);
@@ -515,29 +496,21 @@
long totalSuckHp = suckHp;
List<long> suckHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalSuckHp);
+ long totalReflectHp = hurt.BounceHP;
+ List<long> reflectHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalReflectHp);
- // ============ 绗簩姝�:鍒锋柊瀹為檯琛�閲� ============
- long fromHp = target.teamHero.curHp;
-
-
-
- // ============澶勭悊鍙嶄激 ===============
- // 涔熻鎸夋瘡涓�鍑诲钩鍧囩畻 鏈�鍚庤琛ラ綈浼ゅ
-
- long reflectHp = hurt.BounceHP;
-
-
- List<long> reflectHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, reflectHp);
- // long currentSuckHp = suckHp / tagUseSkillAttack.HurtCount;
-
- // 璁$畻褰撳墠杩欎竴鍑荤殑瀹為檯浼ゅ(鎵�鏈夊垎娈典激瀹充箣鍜�)
+ // 璁$畻褰撳墠杩欎竴鍑荤殑鍚勯」鏁板��
long currentHitDamage = 0;
foreach (long dmg in damageList)
{
currentHitDamage += dmg;
}
-
+ long currentHitSuckHp = 0;
+ foreach (long suck in suckHpList)
+ {
+ currentHitSuckHp += suck;
+ }
long currentHitReflectHp = 0;
foreach (long reflect in reflectHpList)
@@ -545,54 +518,74 @@
currentHitReflectHp += reflect;
}
- long shieldValue = target.buffMgr.GetShieldValue();
-
- long remainSheild = shieldValue - currentHitDamage;
-
- long toShieldValue = Math.Max(0, shieldValue - currentHitDamage);
-
- long shieldRecieveDamage = shieldValue - toShieldValue;
-
- // if (shieldValue > 0 && remainSheild >= 0)
- // {
- // currentHitDamage = 0;
- // target.buffMgr.ReduceShieldValue(currentHitDamage);
- // }
- // else if (shieldValue > 0 && remainSheild < 0)
- // {
- // currentHitDamage = Math.Abs(remainSheild);
- // target.buffMgr.ClearShield();
- // }
-
- long toHp = fromHp; //Math.Max(0, fromHp - currentHitDamage);
-
+ // ============ 绗簩姝�:鑾峰彇鐩爣褰撳墠鐘舵�� ============
+ long fromHp = target.teamHero.curHp;
+ long maxHp = target.teamHero.maxHp;
+ long fromShieldValue = target.buffMgr.GetShieldValue();
// 鍒ゆ柇鏄不鐤楄繕鏄激瀹�
- bool isHealing = ((hurt.AttackTypes & (int)ServerDamageType.Recovery) != 0 ||
- (hurt.AttackTypes & (int)ServerDamageType.DamageReverse) != 0) &&
- (hurt.AttackTypes & (int)ServerDamageType.Damage) == 0 &&
- (hurt.AttackTypes & (int)ServerDamageType.Realdamage) == 0 &&
- (hurt.AttackTypes & (int)ServerDamageType.SuckHpReverse) == 0 &&
- (hurt.AttackTypes & (int)ServerDamageType.SelfHarm) == 0;
+ bool isHealing = BattleUtility.IsHealing(hurt);
+
+ // ============ 绗笁姝�:璁$畻鐩爣琛�閲忓拰鎶ょ浘鍙樺寲 ============
+ long toHp;
+ long toShieldValue;
if (isHealing)
{
- // 娌荤枟閫昏緫锛氱洿鎺ュ姞琛�锛屼笉鑰冭檻鎶ょ浘
- toHp = Math.Min(target.teamHero.maxHp, fromHp + currentHitDamage);
+ // 娌荤枟閫昏緫锛氱洿鎺ュ姞琛�锛屾姢鐩句笉鍙�
+ toHp = Math.Min(maxHp, fromHp + currentHitDamage);
+ toShieldValue = fromShieldValue;
}
else
{
- // 浼ゅ閫昏緫锛氬厛鎵f姢鐩撅紝鍐嶆墸琛�
- if (remainSheild < 0)
+ // 浼ゅ閫昏緫锛氬厛鎵f姢鐩撅紝鎶ょ浘涓嶈冻鍐嶆墸琛�
+ if (fromShieldValue >= currentHitDamage)
{
- // 鐩捐鎵撶牬
- toHp = Math.Max(0, fromHp + remainSheild);
+ // 鎶ょ浘瓒冲鎵垮彈鎵�鏈変激瀹�
+ toShieldValue = fromShieldValue - currentHitDamage;
+ toHp = fromHp;
+ }
+ else
+ {
+ // 鎶ょ浘涓嶈冻锛屽厛鎵e畬鎶ょ浘锛屽墿浣欎激瀹虫墸琛�
+ long remainingDamage = currentHitDamage - fromShieldValue;
+ toShieldValue = 0;
+ toHp = Math.Max(0, fromHp - remainingDamage);
}
}
-
- // 鏇存柊鐩爣琛�閲�
+ // ============ 绗洓姝�:鏇存柊鐩爣瀹為檯琛�閲� ============
target.teamHero.curHp = toHp;
+
+ // ============ 绗簲姝�:璁$畻骞舵洿鏂版柦娉曡�呰閲忓彉鍖� ============
+ long casterFromHp = caster.teamHero.curHp;
+ long casterMaxHp = caster.teamHero.maxHp;
+ long casterToHp = casterFromHp;
+
+ // 澶勭悊鍚歌
+ if (currentHitSuckHp > 0)
+ {
+ casterToHp = Math.Min(casterMaxHp, casterToHp + currentHitSuckHp);
+ }
+
+ // 澶勭悊鍙嶄激(鏂芥硶鑰呭彈鍒颁激瀹�)
+ if (currentHitReflectHp > 0)
+ {
+ long casterShieldValue = caster.buffMgr.GetShieldValue();
+ if (casterShieldValue >= currentHitReflectHp)
+ {
+ // 鏂芥硶鑰呮姢鐩捐冻澶�,琛�閲忎笉鍙�
+ }
+ else
+ {
+ // 鏂芥硶鑰呮姢鐩句笉瓒�,鎵h
+ long remainingReflect = currentHitReflectHp - casterShieldValue;
+ casterToHp = Math.Max(0, casterToHp - remainingReflect);
+ }
+ }
+
+ // 鏇存柊鏂芥硶鑰呰閲�
+ caster.teamHero.curHp = casterToHp;
#if UNITY_EDITOR
BattleDebug.LogError(
@@ -600,37 +593,32 @@
$"鏀诲嚮鑰�: {caster.teamHero.name}\n" +
$"鐩爣: {target.teamHero.name}\n" +
$"鎶�鑳�: {skillConfig.SkillName} (绗瑊_hitIndex}鍑�)\n" +
- $"浼ゅ: {currentHitDamage} 瀹為檯鍙楀埌浼ゅ: {fromHp-toHp} (鎬讳激瀹�: {totalDamage})\n" +
- $"鎵夸激鍓嶆姢鐩惧��: {shieldValue}\n" +
- $"鎵夸激鍚庢姢鐩惧��: {toShieldValue}\n" +
- $"鎶ょ浘鎵垮彈浼ゅ: {shieldRecieveDamage}\n" +
+ $"浼ゅ: {currentHitDamage} (鎬讳激瀹�: {totalDamage})\n" +
+ $"鍚歌: {currentHitSuckHp}\n" +
$"鍙嶄激: {currentHitReflectHp}\n" +
- $"琛�閲忓彉鍖�: {fromHp} -> {toHp}\n" +
- $"鎶�鑳藉寘閲岀殑琛�閲忔槸: {GeneralDefine.GetFactValue(hurt.CurHP, hurt.CurHPEx)}\n"
+ $"鐩爣鎶ょ浘鍙樺寲: {fromShieldValue} -> {toShieldValue}\n" +
+ $"鐩爣琛�閲忓彉鍖�: {fromHp} -> {toHp}\n" +
+ $"鏂芥硶鑰呰閲忓彉鍖�: {casterFromHp} -> {casterToHp}\n"
);
#endif
-
- bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1;
-
- // ============ 绗笁姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
+ // ============ 绗叚姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
int objID = (int)target.ObjID;
tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
-
- // 鍙傛暟鎵撳寘
+ // ============ 绗竷姝�:鍙傛暟鎵撳寘骞惰皟鐢ㄧ洰鏍嘓urt ============
BattleHurtParam hurtParam = new BattleHurtParam()
{
casterObj = caster,
hurtObj = target,
damageList = damageList,
- suckHpList = suckHpList, //suckHpList,
- reflectHpList = reflectHpList,
+ suckHpList = suckHpList, // 鐢ㄤ簬casterDamageList椋樺瓧
+ reflectHpList = reflectHpList, // 鐢ㄤ簬casterDamageList椋樺瓧
fromHp = fromHp,
toHp = toHp,
- maxHp = target.teamHero.maxHp,
- fromShieldValue = shieldValue,
+ maxHp = maxHp,
+ fromShieldValue = fromShieldValue,
toShieldValue = toShieldValue,
battleDrops = battleDrops,
hurt = hurt,
@@ -639,10 +627,7 @@
skillConfig = skillConfig
};
- // ============ 绗洓姝�:鎵ц琛ㄧ幇(椋樺瓧銆佸姩鐢荤瓑) ============
target.Hurt(hurtParam);
-
-
}
// 澶勭悊HP鍒锋柊鍖咃紙绠�鍖栭�昏緫锛�
--
Gitblit v1.8.0