From aa84cb62bebb9c8a4e586bcc1ec28eb7a16a8860 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 一月 2026 18:10:34 +0800
Subject: [PATCH] 422 子 【内政】命格系统 / 【内政】命格系统-客户端
---
Main/System/Battle/BattleObject/BattleObject.cs | 368 ++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 309 insertions(+), 59 deletions(-)
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 266ee05..7e84f50 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -72,6 +72,8 @@
private List<HB405_tagMCAddExp> hB405_tagMCAddExps = new List<HB405_tagMCAddExp>();
public BattleHeroInfoBar heroInfoBar;
+ public bool isReborning = false;
+
public BattleObject(BattleField _battleField)
{
battleField = _battleField;
@@ -101,8 +103,15 @@
var heroInfoBarScale = heroInfoBar.transform.localScale;
heroInfoBarScale.x *= Camp == BattleCamp.Red ? 1 : -1;
heroInfoBar.transform.localScale = heroInfoBarScale;
-
- heroInfoBar.SetActive(true);
+ if (battleField is StoryBattleField && (battleField as StoryBattleField).battleState == StoryBattleState.Break)
+ {
+ //涓荤嚎鍏冲崱浼戞伅涓殑涓嶆樉绀鸿鏉�
+ heroInfoBar.SetActive(false);
+ }
+ else
+ {
+ heroInfoBar.SetActive(true);
+ }
SetFront();
}
@@ -162,20 +171,27 @@
public void OnObjInfoRefresh(H0418_tagObjInfoRefresh _refreshInfo)
{
- // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉¢�昏緫
+ // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
BattleObject boss = battleField.FindBoss();
- if (boss != null && battleField.MapID == 30020 && boss.ObjID == _refreshInfo.ObjID)
+ if (boss != null && battleField.MapID == 30020 && boss.ObjID == _refreshInfo.ObjID && _refreshInfo.RefreshType != (ushort)PlayerDataType.XP)
return;
switch ((PlayerDataType)_refreshInfo.RefreshType)
{
case PlayerDataType.HP:
long toHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
- heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
+ if (!IsTianziBoss())
+ {
+ heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
+ }
teamHero.curHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
+ // Debug.LogError("OnObjInfoRefresh " + teamHero.curHp);
break;
case PlayerDataType.MaxHP:
teamHero.maxHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
- heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
+ if (!IsTianziBoss())
+ {
+ heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
+ }
break;
case PlayerDataType.XP:
long toXp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
@@ -188,33 +204,33 @@
}
}
- public void ObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
- {
- // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉¢�昏緫
- BattleObject boss = battleField.FindBoss();
- if (boss != null && battleField.MapID == 30020 && boss.ObjID == vNetData.ObjID)
- return;
- switch ((PlayerDataType)vNetData.RefreshType)
- {
- case PlayerDataType.HP:
- long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
- heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
- teamHero.curHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
- break;
- case PlayerDataType.MaxHP:
- teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
- heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
- break;
- case PlayerDataType.XP:
- long toXp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
- heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
- teamHero.rage = (int)GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
- break;
- default:
- Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
- break;
- }
- }
+ // public void ObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
+ // {
+ // // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
+ // BattleObject boss = battleField.FindBoss();
+ // if (boss != null && battleField.MapID == 30020 && boss.ObjID == vNetData.ObjID && vNetData.RefreshType != (ushort)PlayerDataType.XP)
+ // return;
+ // switch ((PlayerDataType)vNetData.RefreshType)
+ // {
+ // case PlayerDataType.HP:
+ // long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ // heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
+ // teamHero.curHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ // break;
+ // case PlayerDataType.MaxHP:
+ // teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ // heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
+ // break;
+ // case PlayerDataType.XP:
+ // long toXp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ // heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
+ // teamHero.rage = (int)GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ // break;
+ // default:
+ // Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
+ // break;
+ // }
+ // }
// 鐪╂檿
public bool IsStunned()
@@ -299,19 +315,31 @@
return true;
}
- public virtual void Hurt(BattleHurtParam battleHurtParam)
+ public virtual DeathRecordAction Hurt(BattleHurtParam battleHurtParam, RecordAction _causingRecordAction = null)
{
+ DeathRecordAction recordAction = null;
bool isLastHit = battleHurtParam.hitIndex >= battleHurtParam.skillConfig.DamageDivide.Length - 1;
bool firstHit = battleHurtParam.hitIndex == 0;
+
+ // 娣诲姞璋冭瘯鏃ュ織
+ bool isHealing = BattleUtility.IsHealing(battleHurtParam.hurt);
+
BattleDmgInfo dmgInfo = PopDamage(battleHurtParam);
+ // ============ 搴旂敤鐩爣鐨勮閲忓拰鎶ょ浘鍙樺寲 ============
+ ApplyHurtToTarget(battleHurtParam, isLastHit);
+
// 杩欓噷
- if (dmgInfo.IsType(DamageType.Dodge) && !buffMgr.isControled[BattleConst.HardControlGroup])
+ if (dmgInfo.IsType(DamageType.Dodge) /*&& !buffMgr.isControled[BattleConst.HardControlGroup]*/)//濡傛灉琚帶鍒朵簡杩橀棯閬夸簡 瑕佺湅鐪嬫湇鍔″櫒鎬庝箞澶勭悊浜�
{
if (isLastHit)
{
DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
+ // 銆愪娇鐢� BattleField.recordPlayer銆�
+ // 鍘熷洜锛氶棯閬垮畬鎴愬姩浣滄槸鐩爣瑙掕壊鐨勭嫭绔嬭涓猴紝涓嶆槸鎶�鑳藉唴閮ㄤ骇鐢熺殑
+ // 铏界劧鏄湪Hurt杩囩▼涓Е鍙戯紝浣嗘槸闂伩鍔ㄤ綔鏈韩鏄洰鏍囩殑鍙嶅簲锛屽簲璇ョ敱涓籖ecordPlayer绠$悊
+ // 浣跨敤InsertRecord鍙互鎻掑埌闃熷垪鏈�鍓嶉潰锛屼繚璇侀棯閬胯〃鐜扮殑浼樺厛绾�
battleField.recordPlayer.InsertRecord(dodgeFinish);
}
@@ -321,8 +349,6 @@
}
}
-
-
bool isFatalAttack = (null != battleHurtParam.deadPack) && isLastHit;
if (isFatalAttack)
@@ -331,29 +357,56 @@
{
PushDropItems(battleHurtParam.battleDrops);
}
- battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { battleHurtParam.deadPack });
+ recordAction = battleField.OnObjsDead(new List<BattleDeadPack>() { battleHurtParam.deadPack }, _causingRecordAction);
}
else
{
if (dmgInfo.IsType(DamageType.Block))
{
- battleField.battleEffectMgr.PlayEffect(this, 19999, heroRectTrans, Camp);
+ battleField.battleEffectMgr.PlayEffect(this, BattleConst.BlockEffectID, heroRectTrans, Camp, teamHero.modelScale);
}
- else
+ // else
+ // {
+ if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
{
- if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
+ if (!buffMgr.isControled[BattleConst.HardControlGroup])
{
- if (!buffMgr.isControled[BattleConst.HardControlGroup])
- {
- motionBase.PlayAnimation(MotionName.hit, false);
- }
+ battleField.soundManager.PlayEffectSound(teamHero.heroConfig.HitSFX, false);
+ motionBase.PlayAnimation(MotionName.hit, false);
}
}
+ // }
}
+
+ return recordAction;
}
+ /// <summary>
+ /// 搴旂敤鐩爣鐨勮閲忓拰鎶ょ浘鍙樺寲
+ /// </summary>
+ private void ApplyHurtToTarget(BattleHurtParam battleHurtParam, bool isLastHit)
+ {
+ BattleHurtObj hurter = battleHurtParam.hurter;
+
+ // 搴旂敤琛�閲忓彉鍖�
+ teamHero.curHp = hurter.toHp;
+
+ // foreach (var obj in battleField.battleObjMgr.allBattleObjDict.Values)
+ // {
+ // Debug.LogError($"[ApplyHurtToTarget] ObjID: {obj.ObjID}, Name: {obj.teamHero.heroConfig.Name}, CurHp: {obj.teamHero.curHp}, MaxHp: {obj.teamHero.maxHp} Skill {battleHurtParam.hB427_TagSCUseSkill.packUID} ");
+ // }
+
+
+#if UNITY_EDITOR
+ // 鏈�鍚庝竴鍑绘椂楠岃瘉琛�閲忔槸鍚︿笌鏈嶅姟鍣ㄤ竴鑷�
+ if (isLastHit)
+ {
+ BattleUtility.ValidateHpConsistency(battleHurtParam, "鐩爣鍙椾激");
+ }
+#endif
+ }
const float pingpongTime = 0.4f;
// 闂伩寮�濮�
@@ -365,10 +418,19 @@
motionBase.ShowIllusionShadow(true);
+ DamageNumConfig damageNumConfig = DamageNumConfig.Get((int)DamageType.Dodge);
+
+ string dodgeStr = ((char)damageNumConfig.prefix).ToString();
+
+ heroInfoBar.ShowTips(dodgeStr, true, false);
+
tween.onComplete += () =>
{
motionBase.ShowIllusionShadow(false);
};
+
+
+ battleField.soundManager.PlayEffectSound(BattleConst.DodgeSoundID);
battleField.battleTweenMgr.OnPlayTween(tween);
}
@@ -389,14 +451,29 @@
battleField.battleTweenMgr.OnPlayTween(tween);
}
- public virtual void OnDeath(Action _onDeathAnimationComplete)
+ public virtual void OnDeath(Action _onDeathAnimationComplete, bool withoutAnime = false)
{
- motionBase.PlayAnimation(MotionName.dead, false, () =>
+ buffMgr.RemoveAllBuff();
+ battleField.soundManager.PlayEffectSound(teamHero.heroConfig.DeathSFX, false);
+ if (withoutAnime)
{
- teamHero.isDead = true;
- OnDeadAnimationComplete();
+ SetDeath();
_onDeathAnimationComplete?.Invoke();
- });
+ }
+ else
+ {
+ motionBase.PlayDeadAnimation(() =>
+ {
+ SetDeath();
+ _onDeathAnimationComplete?.Invoke();
+ });
+ }
+ }
+
+ public void SetDeath()
+ {
+ teamHero.isDead = true;
+ OnDeadAnimationComplete();
}
protected virtual void OnDeadAnimationComplete()
@@ -404,16 +481,39 @@
// 鎴栬鐪嬬湅婧惰В鐗规晥锛� YYL TODO
heroGo.SetActive(false);
+ // 闃叉缁欐浜″璞″張涓奲uff
buffMgr.RemoveAllBuff();
}
- public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData)
+ // 閲婃斁鑰呭氨鏄娲昏�呮椂璋冪敤
+ public void PreReborn(bool reviveSelf = false)
{
- // 澶勭悊澶嶆椿閫昏緫
- teamHero.curHp = GeneralDefine.GetFactValue(vNetData.HP, vNetData.HPEx);
heroGo.SetActive(true);
- motionBase.PlayAnimation(MotionName.idle, true);
+ motionBase.skeletonAnim.skeleton.A = 0f;
+ motionBase.skeletonAnim.LateUpdate();
+ heroRectTrans.anchoredPosition = Vector2.zero;
+ motionBase.ResetForReborn(reviveSelf);
}
+
+ // 澶嶆椿action
+ public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData, bool reviveSelf = false, RecordAction parentAction = null)
+ {
+ isReborning = true;
+ heroGo.SetActive(true);
+ motionBase.ResetForReborn(reviveSelf);
+ heroRectTrans.anchoredPosition = Vector2.zero;
+ motionBase.skeletonAnim.skeleton.A = 0f;
+ motionBase.skeletonAnim.LateUpdate();
+
+ }
+
+ public void AfterReborn()
+ {
+ // 娓呯┖鎵�鏈�
+ motionBase.ResetForReborn(false);
+ isReborning = false;
+ }
+
// 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
protected virtual BattleDmgInfo PopDamage(BattleHurtParam battleHurtParam)
@@ -421,21 +521,43 @@
BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, battleHurtParam);
// 澶╁瓙鐨勬寫鎴樻嫤鎴鏉¢�昏緫
BattleObject boss = battleField.FindBoss();
- if (boss != null && battleField.MapID == 30020 && boss.ObjID == battleHurtParam.hurtObj.ObjID)
+ // 淇锛歜attleHurtParam.hurtObj.ObjID -> battleHurtParam.hurter.hurtObj.ObjID
+ if (boss != null && battleField.MapID == 30020 && boss.ObjID == battleHurtParam.hurter.hurtObj.ObjID)
{
EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
return battleDmgInfo;
}
else
{
- // 浣跨敤浼犲叆鐨� fromHp 鍜� toHp 鏇存柊琛�鏉℃樉绀�
- heroInfoBar.UpdateHP(battleHurtParam.fromHp, battleHurtParam.toHp, teamHero.maxHp);
+ heroInfoBar.UpdateDamage(battleDmgInfo);
// YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
return battleDmgInfo;
}
+ }
+
+ /// <summary>
+ /// 涓烘柦娉曡�呭垱寤轰激瀹充俊鎭紙鍚歌/鍙嶄激锛�
+ /// </summary>
+ protected virtual BattleDmgInfo PopDamageForCaster(BattleHurtParam battleHurtParam)
+ {
+ // 浼犲叆 isCasterView=true 琛ㄧず杩欐槸鏂芥硶鑰呰瑙�
+ BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, battleHurtParam, _isCasterView: true);
+
+ BattleObject boss = battleField.FindBoss();
+ if (boss != null && battleField.MapID == 30020 && boss.ObjID == this.ObjID)
+ {
+ EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+ return battleDmgInfo;
+ }
+ else
+ {
+ heroInfoBar.UpdateDamage(battleDmgInfo);
+ EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+ return battleDmgInfo;
+ }
}
public RectTransform GetAliasTeamNode()
@@ -461,8 +583,9 @@
heroGo.SetActive(true);
motionBase.HaveRest();
heroRectTrans.anchoredPosition = Vector2.zero;
+ heroInfoBar.HaveRest();
+ isReborning = false;
- heroInfoBar.SetActive(false);
SetFront();
}
@@ -473,7 +596,7 @@
public void PerformDrop()
{
- if (null == m_battleDrops || m_battleDrops.dropItemPackIndex.Count == 0)
+ if (null == m_battleDrops)
return;
EventBroadcast.Instance.Broadcast<string, BattleDrops, Action>(
@@ -499,6 +622,71 @@
{
motionBase.SetSpeedRatio(ratio);
heroInfoBar.SetSpeedRatio(ratio);
+ }
+
+ public void OnObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
+ {
+ // 澶╁瓙鐨勬寫鎴樻嫤鎴鏉�,涓嶆嫤鎴�掓皵
+ BattleObject boss = battleField.FindBoss();
+ if (boss != null && battleField.MapID == 30020 && boss.ObjID == vNetData.ObjID && vNetData.RefreshType != (ushort)PlayerDataType.XP)
+ return;
+
+ // public uint ObjID;
+ // public ushort RefreshType; // 鍚�0418鍒锋柊绫诲瀷锛屽琛�閲忋�佹�掓皵
+ // public uint AttackTypes; // 椋樺瓧绫诲瀷姹囨�伙紝鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�9-闂伩
+ // public uint Value; // 鏇存柊鍊�
+ // public uint ValueEx; // 鏇存柊鍊硷紝濡傛灉鏄ぇ鏁板�肩殑姝ゅ�间负鏁撮櫎浜块儴鍒�
+ // public byte DiffType; // 鍙樺寲绫诲瀷锛�0-鍑忓皯锛�1-澧炲姞
+ // public uint DiffValue; // 鍙樺寲鍊�
+ // public uint DiffValueEx; // 鍙樺寲鍊硷紝濡傛灉鏄ぇ鏁板�肩殑姝ゅ�间负鏁撮櫎浜块儴鍒�
+ // public uint SkillID; // 浣跨敤鐨勬妧鑳借〃ID
+ // public uint RelatedSkillID; // 鍏宠仈鐨勬妧鑳絀D锛屼竴鑸槸涓绘妧鑳絀D锛岄潪涓绘妧鑳介澶栬Е鍙戠殑涓�0
+
+ long diffValue = GeneralDefine.GetFactValue(vNetData.DiffValue, vNetData.DiffValueEx);
+ diffValue *= vNetData.DiffType == 0 ? -1 : 1;
+
+ long newValue = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+
+
+ switch ((PlayerDataType)vNetData.RefreshType)
+ {
+ case PlayerDataType.HP:
+ long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ bool isMinus = teamHero.curHp > toHp;
+ if (!IsTianziBoss())
+ {
+ heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
+ }
+ teamHero.curHp = newValue;
+ // Debug.LogError("OnObjPropertyRefreshView " + teamHero.curHp);
+ break;
+ case PlayerDataType.MaxHP:
+ teamHero.maxHp = newValue;
+ if (!IsTianziBoss())
+ {
+ heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
+ }
+ break;
+ case PlayerDataType.XP:
+ long toXp = newValue;
+ heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
+ teamHero.rage = (int)newValue;
+
+ DamageNumConfig damageNumConfig = DamageNumConfig.Get((int)DamageType.RageUp);
+ string message = BattleUtility.ConvertToArtFont(damageNumConfig, diffValue);
+ heroInfoBar.ShowTips(new BattleHeroInfoBar.TipsInfo()
+ {
+ message = message,
+ useArtText = true,
+ followCharacter = true,
+ scaleRatio = 1f,
+ isRage = true
+ });
+ break;
+ default:
+ Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
+ break;
+ }
}
@@ -530,4 +718,66 @@
}
#endif
+ // BattleObject.cs
+
+ public virtual void OnHurtTarget(BattleHurtParam battleHurtParam)
+ {
+ // 妫�鏌ユ槸鍚︽湁鍚歌鎴栧弽浼�
+ bool hasSuckHp = battleHurtParam.caster.suckHpList != null && battleHurtParam.caster.suckHpList.Count > 0;
+ bool hasReflectHp = battleHurtParam.caster.reflectHpList != null && battleHurtParam.caster.reflectHpList.Count > 0;
+
+ if (!hasSuckHp && !hasReflectHp)
+ {
+ return;
+ }
+
+ // ============ 搴旂敤鏂芥硶鑰呯殑琛�閲忓拰鎶ょ浘鍙樺寲 ============
+ bool isLastHit = battleHurtParam.hitIndex >= battleHurtParam.skillConfig.DamageDivide.Length - 1;
+ ApplyHurtToCaster(battleHurtParam, isLastHit);
+
+ // 鍜孒urt涓�鏍凤紝璋冪敤PopDamage澶勭悊鍚歌/鍙嶄激鐨勬樉绀�
+ BattleDmgInfo casterDmgInfo = PopDamageForCaster(battleHurtParam);
+
+ // 濡傛灉鏈夊弽浼わ紝鏂芥硶鑰呮挱鏀惧彈鍑诲姩鐢�
+ if (hasReflectHp && casterDmgInfo.casterDamageList != null && casterDmgInfo.casterDamageList.Count > 0)
+ {
+ long totalReflect = casterDmgInfo.casterDamageList.Sum(d => d.damage);
+ if (totalReflect > 0 && !buffMgr.isControled[BattleConst.HardControlGroup])
+ {
+ motionBase.PlayAnimation(MotionName.hit, false);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 搴旂敤鏂芥硶鑰呯殑琛�閲忓拰鎶ょ浘鍙樺寲锛堝惛琛�鍜屽弽浼わ級
+ /// </summary>
+ private void ApplyHurtToCaster(BattleHurtParam battleHurtParam, bool isLastHit)
+ {
+ BattleCastObj caster = battleHurtParam.caster;
+
+ // 搴旂敤琛�閲忓彉鍖�
+ teamHero.curHp = caster.toHp;
+
+ // 鎵撳嵃鎵�鏈夎鑹茬殑鍚嶅瓧鍜屽綋鍓嶈閲忚窡鎬昏閲�
+ // foreach (var obj in battleField.battleObjMgr.allBattleObjDict.Values)
+ // {
+ // Debug.LogError($"[ApplyHurtToCaster] ObjID: {obj.ObjID}, Name: {obj.teamHero.heroConfig.Name}, CurHp: {obj.teamHero.curHp}, MaxHp: {obj.teamHero.maxHp} Skill {battleHurtParam.hB427_TagSCUseSkill.packUID} " );
+ // }
+
+ // 鎶ょ浘鍊肩敱buff绯荤粺鑷姩绠$悊锛屼笉闇�瑕佹墜鍔ㄨ缃�
+
+#if UNITY_EDITOR
+ // 鏈�鍚庝竴鍑绘椂楠岃瘉琛�閲忔槸鍚︿笌鏈嶅姟鍣ㄤ竴鑷�
+ if (isLastHit)
+ {
+ BattleUtility.ValidateHpConsistencyForCaster(battleHurtParam, "鏂芥硶鑰呭惛琛�/鍙嶄激");
+ }
+#endif
+ }
+
+ public bool IsTianziBoss()
+ {
+ return battleField.MapID == 30020 && battleField.FindBoss() == this;
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0