From ca85c0a70922aa219f6cad5e8af8ad004c3cb4b3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 05 十一月 2025 14:36:02 +0800
Subject: [PATCH] 125 战斗 天子血条刷新包
---
Main/System/Battle/BattleField/BattleField.cs | 16 ++
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs.meta | 11 +
Main/Common/EventName.cs | 2
Main/System/Battle/BattleUtility.cs | 43 ++++++
Main/System/Battle/BattleObject/BattleObject.cs | 29 +---
Main/System/Battle/Skill/SkillBase.cs | 62 +++++++++
Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs.meta | 11 +
Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs | 25 ++++
Main/System/Battle/Motion/MotionBase.cs | 95 +++++++++++++++
Main/System/Battle/UIComp/BattleHeroInfoBar.cs | 10 +
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs | 18 +++
11 files changed, 288 insertions(+), 34 deletions(-)
diff --git a/Main/Common/EventName.cs b/Main/Common/EventName.cs
index 4b7b3c2..6c9ab2d 100644
--- a/Main/Common/EventName.cs
+++ b/Main/Common/EventName.cs
@@ -16,4 +16,6 @@
public const string BATTLE_END = "BATTLE_END";//鎴樻枟缁撴潫
public const string RECORDPLAYER_END = "RECORDPLAYER_END"; //鎴樻枟灏忕墖娈电粨鏉�
+
+ public const string BATTLE_TIANZI_REFRESH_HP = "BATTLE_TIANZI_REFRESH_HP";//澶╁瓙鑰冮獙 鍒锋柊琛�閲�
}
\ No newline at end of file
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs
new file mode 100644
index 0000000..3a4b134
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// B4 19 瀵硅薄鏈�鏂扮敓鍛藉埛鏂� #tagSCObjHPRefresh
+
+public class DTCB419_tagSCObjHPRefresh : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HB419_tagSCObjHPRefresh vNetData = vNetPack as HB419_tagSCObjHPRefresh;
+
+ BattleField battleField = BattleManager.Instance.GetBattleField(vNetData.packUID);
+ if (null != battleField)
+ {
+ battleField.OnRefreshObjHP(vNetData);
+ battleField.DistributeNextPackage();
+ }
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs.meta
new file mode 100644
index 0000000..c6d9898
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB419_tagSCObjHPRefresh.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3d2361817f6a81a4ea0d05eaf7b8f59e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs
new file mode 100644
index 0000000..d8ded2d
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs
@@ -0,0 +1,25 @@
+using UnityEngine;
+using System.Collections;
+
+// B4 19 瀵硅薄鏈�鏂扮敓鍛藉埛鏂� #tagSCObjHPRefresh
+
+public class HB419_tagSCObjHPRefresh : GameNetPackBasic {
+ public uint ObjID;
+ public uint HP; // 褰撳墠琛�閲忥紝姹備綑20浜块儴鍒�
+ public uint HPEx; // 褰撳墠琛�閲忥紝鏁撮櫎20浜块儴鍒�
+ public uint MaxHP; // 鏈�澶ц閲忥紝姹備綑20浜块儴鍒�
+ public uint MaxHPEx; // 鏈�澶ц閲忥紝鏁撮櫎20浜块儴鍒�
+
+ public HB419_tagSCObjHPRefresh () {
+ _cmd = (ushort)0xB419;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out ObjID, vBytes, NetDataType.DWORD);
+ TransBytes (out HP, vBytes, NetDataType.DWORD);
+ TransBytes (out HPEx, vBytes, NetDataType.DWORD);
+ TransBytes (out MaxHP, vBytes, NetDataType.DWORD);
+ TransBytes (out MaxHPEx, vBytes, NetDataType.DWORD);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs.meta b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs.meta
new file mode 100644
index 0000000..29ebb11
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB4_FightDefine/HB419_tagSCObjHPRefresh.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4d172d7090e7f3b42958b6ce5bf20dc3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 34ed0ae..691ac3a 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -592,4 +592,20 @@
{
return null;
}
+
+ public void OnRefreshObjHP(HB419_tagSCObjHPRefresh vNetData)
+ {
+ BattleObject battleObj = battleObjMgr.GetBattleObject((int)vNetData.ObjID);
+ if (null != battleObj)
+ {
+ battleObj.teamHero.curHp = GeneralDefine.GetFactValue(vNetData.HP, vNetData.HPEx);
+ battleObj.teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.MaxHP, vNetData.MaxHPEx);
+ EventBroadcast.Instance.Broadcast<string, BattleObject>(
+ EventName.BATTLE_TIANZI_REFRESH_HP, guid, battleObj);
+
+ //battleObj.teamHero.curHp, battleObj.teamHero.maxHp
+ }
+
+
+ }
}
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index f868dee..24b2e63 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -293,11 +293,12 @@
public virtual void Hurt(List<long> damageValues, long _totalDamage,
HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, int hitIndex,
- BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack)
+ BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack,
+ long fromHp, long toHp)
{
bool isLastHit = hitIndex >= skillConfig.DamageDivide.Length - 1;
bool firstHit = hitIndex == 0;
- BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig, isLastHit);
+ BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig, isLastHit, fromHp, toHp);
// 杩欓噷
@@ -346,18 +347,16 @@
}
}
-
-
}
public void SuckHp(uint suckHP, SkillConfig skillConfig)
{
- teamHero.curHp = Math.Min(teamHero.maxHp, teamHero.curHp + (int)suckHP);
+ // teamHero.curHp = Math.Min(teamHero.maxHp, teamHero.curHp + (int)suckHP);
}
public void HurtByReflect(uint bounceHP, SkillConfig skillConfig)
{
- teamHero.curHp = Math.Max(0, teamHero.curHp - (int)bounceHP);
+ // teamHero.curHp = Math.Max(0, teamHero.curHp - (int)bounceHP);
}
@@ -422,22 +421,14 @@
}
// 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
- protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit)
+ protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage,
+ HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit,
+ long fromHp, long toHp)
{
BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig, isLastHit);
- int currentHurtHp = 0;
- for (int i = 0; i < damageValues.Count; i++)
- {
- currentHurtHp += (int)damageValues[i];
- }
-
- bool isRecovery = battleDmgInfo.IsType(DamageType.Recovery);
-
- long toHp = Math.Max(0, teamHero.curHp + (isRecovery ? currentHurtHp : -currentHurtHp));
-
- heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
- teamHero.curHp = toHp;
+ // 浣跨敤浼犲叆鐨� fromHp 鍜� toHp 鏇存柊琛�鏉℃樉绀�
+ heroInfoBar.UpdateHP(fromHp, toHp, teamHero.maxHp);
// YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 2f9276c..a315880 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -302,16 +302,53 @@
/// </summary>
public static List<long> DivideDamageToList(int[] damageDivide, long totalDamage)
{
+ if (damageDivide == null || damageDivide.Length == 0)
+ {
+ Debug.LogError("damageDivide 涓虹┖鎴栭暱搴︿负0");
+ return new List<long> { totalDamage };
+ }
+
List<long> fixedDamageList = new List<long>();
+ long accumulatedDamage = 0; // 绱宸插垎閰嶇殑浼ゅ
for (int i = 0; i < damageDivide.Length; i++)
{
- float fixedDamage = (float)totalDamage * (float)damageDivide[i] / 10000f;
- fixedDamageList.Add((int)fixedDamage);
+ long damage;
+
+ // 鏈�鍚庝竴娆″垎閰嶏細鐢ㄦ�讳激瀹冲噺鍘诲凡鍒嗛厤鐨勪激瀹筹紝纭繚鎬诲拰绮剧‘
+ if (i == damageDivide.Length - 1)
+ {
+ damage = totalDamage - accumulatedDamage;
+ }
+ else
+ {
+ // 璁$畻褰撳墠鍒嗘浼ゅ锛堝悜涓嬪彇鏁达級
+ damage = (long)((float)totalDamage * (float)damageDivide[i] / 10000f);
+ accumulatedDamage += damage;
+ }
+
+ fixedDamageList.Add(damage);
}
-
+
return fixedDamageList;
}
+
+ public static HB419_tagSCObjHPRefresh FindObjHPRefreshPack(List<GameNetPackBasic> packList)
+ {
+ for (int i = 0; i < packList.Count; i++)
+ {
+ var pack = packList[i];
+ if (pack is HB419_tagSCObjHPRefresh hpRefreshPack)
+ {
+ return hpRefreshPack;
+ }
+ else if (pack is CustomHB426CombinePack)
+ {
+ break;
+ }
+ }
+ return null;
+ }
public static List<HB422_tagMCTurnFightObjDead> FindDeadPack(List<GameNetPackBasic> packList)
{
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 5be8665..3a21f7c 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -23,7 +23,12 @@
protected Spine.Skeleton skeleton;
protected float defaultMixDuration = 0f;
private Spine.TrackEntry currentTrack;
- private Dictionary<int, Spine.TrackEntry> activeSkillTracks = new Dictionary<int, Spine.TrackEntry>(); // 鏀逛负瀛楀吀锛歵rackIndex -> TrackEntry
+ private Dictionary<int, Spine.TrackEntry> activeSkillTracks = new Dictionary<int, Spine.TrackEntry>();
+
+ // 瀛愭妧鑳借建閬撴睜绠$悊锛堝湪Init涓垵濮嬪寲锛屼笉瑕佸湪杩欓噷鍒濆鍖栵級
+ private Queue<int> availableSubTracks;
+ private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>();
+
private SkeletonIllusionShadow illusionShadow;
private bool playingSkillAnim = false;
@@ -52,6 +57,11 @@
if (animState != null)
animState.Data.DefaultMix = defaultMixDuration;
+ // 鍒濆鍖栧瓙鎶�鑳借建閬撴睜
+ availableSubTracks = new Queue<int>();
+ for (int i = 1; i <= 8; i++)
+ availableSubTracks.Enqueue(i);
+
PlayAnimation(MotionName.idle, true);
SetupAnimationHandlers();
@@ -63,6 +73,8 @@
{
trackEntryCallbacks.Clear();
activeSkillTracks.Clear();
+ availableSubTracks?.Clear();
+ subSkillTrackMap.Clear();
if (animState != null)
{
animState.Complete -= OnAnimationComplete;
@@ -109,8 +121,8 @@
return null;
}
- // 瀛愭妧鑳藉己鍒朵娇鐢ㄦ棤鍔ㄧ敾妯″紡锛屾垨鑰呭鏋滄病鏈夊姩鐢诲悕绉�
- if (isSubSkill || string.IsNullOrEmpty(skillConfig.SkillMotionName))
+ // 濡傛灉娌℃湁鍔ㄧ敾鍚嶇О锛屼娇鐢ㄦ棤鍔ㄧ敾妯″紡
+ if (string.IsNullOrEmpty(skillConfig.SkillMotionName))
{
PlaySkillNoAnim(skillConfig, skillBase, onComplete, isSubSkill);
return null;
@@ -136,13 +148,41 @@
int frameCount = activeFrames.Length;
float recoveryFrame = skillConfig.RecoveryFrames;
- // 涓绘妧鑳界敤 track 0锛屽瓙鎶�鑳界敤 track 1
- int trackIndex = isSubSkill ? 1 : 0;
+ // 杞ㄩ亾鍒嗛厤绛栫暐锛氫富鎶�鑳界敤 track 0锛屽瓙鎶�鑳戒粠杞ㄩ亾姹犲垎閰�
+ int trackIndex = 0;
+ if (isSubSkill)
+ {
+ if (availableSubTracks != null && availableSubTracks.Count > 0)
+ {
+ trackIndex = availableSubTracks.Dequeue();
+ subSkillTrackMap[skillBase] = trackIndex;
+ }
+ else
+ {
+ // 杞ㄩ亾姹犺�楀敖鎴栨湭鍒濆鍖栵紝鍥為��鍒版棤鍔ㄧ敾妯″紡
+ Debug.LogWarning($"瀛愭妧鑳借建閬撴睜宸叉弧鎴栨湭鍒濆鍖栵紝鎶�鑳絳skillConfig.SkillID}浣跨敤鏃犲姩鐢绘ā寮�");
+ PlaySkillNoAnim(skillConfig, skillBase, onComplete, isSubSkill);
+ return null;
+ }
+ }
+
Spine.TrackEntry skillTrack = null;
if (hasAnim)
{
skillTrack = animState.SetAnimation(trackIndex, targetAnim, false);
+ if (null == skillTrack)
+ {
+ Debug.LogError($"鎶�鑳� {skillConfig.SkillID} 鍔ㄧ敾璁剧疆澶辫触");
+ // 濡傛灉鏄瓙鎶�鑳戒笖鍒嗛厤浜嗚建閬擄紝闇�瑕佸洖鏀�
+ if (isSubSkill && subSkillTrackMap.ContainsKey(skillBase))
+ {
+ if (availableSubTracks != null)
+ availableSubTracks.Enqueue(subSkillTrackMap[skillBase]);
+ subSkillTrackMap.Remove(skillBase);
+ }
+ return null;
+ }
// 鍙湁涓绘妧鑳芥墠鏇存柊 currentTrack
if (!isSubSkill)
@@ -175,6 +215,14 @@
{
if (activeSkillTracks[trackIndex] == skillTrack)
activeSkillTracks.Remove(trackIndex);
+ }
+
+ // 鍥炴敹瀛愭妧鑳借建閬�
+ if (isSubSkill && subSkillTrackMap.ContainsKey(skillBase))
+ {
+ if (availableSubTracks != null)
+ availableSubTracks.Enqueue(subSkillTrackMap[skillBase]);
+ subSkillTrackMap.Remove(skillBase);
}
// 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
@@ -214,6 +262,15 @@
// 娓呯悊骞剁‘淇濈姸鎬佸浣�
RemoveAction(frameHandler);
+
+ // 鍥炴敹瀛愭妧鑳借建閬�
+ if (isSubSkill && subSkillTrackMap.ContainsKey(skillBase))
+ {
+ if (availableSubTracks != null)
+ availableSubTracks.Enqueue(subSkillTrackMap[skillBase]);
+ subSkillTrackMap.Remove(skillBase);
+ }
+
if (activeSkillTracks.Count == 0)
playingSkillAnim = false;
return;
@@ -227,6 +284,15 @@
RemoveAction(frameHandler);
if (activeSkillTracks.ContainsKey(trackIndex))
activeSkillTracks.Remove(trackIndex);
+
+ // 鍥炴敹瀛愭妧鑳借建閬�
+ if (isSubSkill && subSkillTrackMap.ContainsKey(skillBase))
+ {
+ if (availableSubTracks != null)
+ availableSubTracks.Enqueue(subSkillTrackMap[skillBase]);
+ subSkillTrackMap.Remove(skillBase);
+ }
+
if (activeSkillTracks.Count == 0)
playingSkillAnim = false;
return;
@@ -303,6 +369,14 @@
{
if (activeSkillTracks[trackIndex] == skillTrack)
activeSkillTracks.Remove(trackIndex);
+ }
+
+ // 鍥炴敹瀛愭妧鑳借建閬�
+ if (isSubSkill && subSkillTrackMap.ContainsKey(skillBase))
+ {
+ if (availableSubTracks != null)
+ availableSubTracks.Enqueue(subSkillTrackMap[skillBase]);
+ subSkillTrackMap.Remove(skillBase);
}
// 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
@@ -436,6 +510,17 @@
trackEntryCallbacks.Clear();
runningActions.Clear();
activeSkillTracks.Clear();
+
+ // 閲嶇疆瀛愭妧鑳借建閬撴睜
+ if (availableSubTracks == null)
+ availableSubTracks = new Queue<int>();
+ else
+ availableSubTracks.Clear();
+
+ subSkillTrackMap.Clear();
+ for (int i = 1; i <= 8; i++)
+ availableSubTracks.Enqueue(i);
+
playingSkillAnim = false;
PlayAnimation(MotionName.idle, true);
}
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 1bfa376..3a768c0 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -339,6 +339,7 @@
public void OnSkillStart()
{
HandleDead();
+
skillEffect = SkillEffectFactory.CreateSkillEffect(caster, skillConfig, tagUseSkillAttack);
skillEffect.Play(OnHitTargets);
foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
@@ -374,6 +375,7 @@
// 鎶�鑳藉悗鎽囩粨鏉熷洖璋冿細閫氱煡鎶�鑳芥晥鏋滃鐞嗗悗鎽囩粨鏉�
public virtual void OnFinalFrameEnd()
{
+
skillEffect?.OnFinalFrameEnd(); // 淇锛氭坊鍔犵┖鍊兼鏌�
}
@@ -432,9 +434,10 @@
}
}
- // 澶勭悊鍗曚釜鐩爣琚懡涓細搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
+ // 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
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)
{
@@ -453,21 +456,70 @@
}
}
- // 浼ゅ鍒嗗竷璁$畻鍜屽簲鐢�
+ // 璁$畻鎬讳激瀹冲拰鍒嗘浼ゅ鍒楄〃
long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
List<long> damageList = BattleUtility.DivideDamageToList(damageDivide.ToArray(), totalDamage);
- // 鑾峰彇涓存椂鏁版嵁骞跺簲鐢ㄤ激瀹�
+ // ============ 绗簩姝�:鍒锋柊瀹為檯琛�閲� ============
+ long fromHp = target.teamHero.curHp;
+
+ // 璁$畻褰撳墠杩欎竴鍑荤殑瀹為檯浼ゅ(鎵�鏈夊垎娈典激瀹充箣鍜�)
+ long currentHitDamage = 0;
+ foreach (long dmg in damageList)
+ {
+ currentHitDamage += dmg;
+ }
+
+ long toHp = Math.Max(0, fromHp - currentHitDamage);
+
+ // 鏇存柊鐩爣琛�閲�
+ target.teamHero.curHp = toHp;
+
+#if UNITY_EDITOR
+ BattleDebug.LogError(
+ (caster.Camp == BattleCamp.Red ? "銆愮孩鏂硅鍔ㄣ��" : "銆愯摑鏂硅鍔ㄣ��") + "\n" +
+ $"鏀诲嚮鑰�: {caster.teamHero.name}\n" +
+ $"鐩爣: {target.teamHero.name}\n" +
+ $"鎶�鑳�: {skillConfig.SkillName} (绗瑊_hitIndex}鍑�)\n" +
+ $"浼ゅ: {currentHitDamage} (鎬讳激瀹�: {totalDamage})\n" +
+ $"琛�閲忓彉鍖�: {fromHp} -> {toHp}"
+ );
+#endif
+
+ // 鍙湪鏈�鍚庝竴鍑绘椂鍚屾HP鍒锋柊鍖�
+ bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1;
+ if (isLastHit)
+ {
+ HandleRefreshHP(hurt);
+ }
+
+ // ============ 绗笁姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
int objID = (int)target.ObjID;
tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
- target.Hurt(damageList, totalDamage, hurt, skillConfig, _hitIndex, battleDrops, deadPack);
- // 澶勭悊鏂芥硶鑰呯浉鍏虫晥鏋�
+ // ============ 绗洓姝�:鎵ц琛ㄧ幇(椋樺瓧銆佸姩鐢荤瓑) ============
+ target.Hurt(damageList, totalDamage, hurt, skillConfig, _hitIndex, battleDrops, deadPack, fromHp, toHp);
+
+ // ============ 绗簲姝�:澶勭悊鏂芥硶鑰呯浉鍏虫晥鏋� ============
caster.SuckHp(hurt.SuckHP, skillConfig);
caster.HurtByReflect(hurt.BounceHP, skillConfig);
}
+ // 澶勭悊HP鍒锋柊鍖咃紙绠�鍖栭�昏緫锛�
+ private void HandleRefreshHP(HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
+ {
+ // 鏌ユ壘HP鍒锋柊鍖�
+ HB419_tagSCObjHPRefresh refreshPack = BattleUtility.FindObjHPRefreshPack(packList);
+
+ if (refreshPack != null)
+ {
+ // 鍒嗗彂HP鍒锋柊鍖�
+ PackageRegedit.Distribute(refreshPack);
+ packList.Remove(refreshPack);
+ }
+ }
+
// 澶勭悊姝讳骸鐩稿叧閫昏緫锛氬垎閰嶆帀钀藉拰缁忛獙
protected void HandleDead()
{
diff --git a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
index 859cb6b..afa14e0 100644
--- a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
+++ b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -150,11 +150,14 @@
{
KillTween(ref hpTween);
+ float fromValue = (float)fromHp / (float)maxHp;
float targetValue = (float)toHp / (float)maxHp;
if (tween)
{
- hpTween = sliderHp.DOValue(targetValue, 0.3f);
+ // 鍏抽敭淇:鍏堣缃捣濮嬪��,鍐嶆挱鏀惧姩鐢诲埌鐩爣鍊�
+ sliderHp.value = fromValue; // 鈫� 杩欒鏄叧閿�!
+ hpTween = sliderHp.DOValue(targetValue, 0.3f).SetAutoKill(false);
battleObject.battleField.battleTweenMgr.OnPlayTween(hpTween);
}
else
@@ -170,11 +173,14 @@
{
KillTween(ref xpTween);
+ float fromValue = (float)fromXp / (float)maxXp;
float targetValue = (float)toXp / (float)maxXp;
if (tween)
{
- xpTween = sliderXp.DOValue(targetValue, 0.2f);
+ // 鍚屾牱鐨勪慨澶�
+ sliderXp.value = fromValue; // 鈫� 杩欒鏄叧閿�!
+ xpTween = sliderXp.DOValue(targetValue, 0.2f).SetAutoKill(false);
battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween);
}
else
--
Gitblit v1.8.0