From 7124d5404ae57ed56548ec8186ea038a0cb85e2e Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 22 十二月 2025 19:07:21 +0800
Subject: [PATCH] 125 战斗 修复吕玲绮动作卡死的问题 带着特效控制特效攻击的问题
---
Main/System/Battle/RecordPlayer/RecordPlayer.cs | 8 ++
Main/System/Battle/Skill/SkillBase.cs | 94 ++++++++++++++++++++++--------
Main/System/Battle/Motion/MotionBase.cs | 31 +++++++++-
Main/System/Battle/Buff/BattleObjectBuffMgr.cs | 2
Main/System/Battle/Define/BattleDmgInfo.cs | 11 +++
5 files changed, 113 insertions(+), 33 deletions(-)
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index b86db9b..778f281 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -147,7 +147,7 @@
OnBuffChanged();
});
- battleObject.battleField.recordPlayer.PlayRecord(buffRemoveAction);
+ battleObject.battleField.recordPlayer.ImmediatelyPlay(buffRemoveAction);
}
diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index abc3128..2803b1d 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -521,13 +521,20 @@
{
get
{
- return casterObj != null ? casterObj.teamHero.maxHp : 0;
+ if (null == casterObj)
+ return 0;
+
+ if (null == casterObj.teamHero)
+ return 0;
+
+ return casterObj.teamHero.maxHp;
}
set
{
if (casterObj != null)
{
- casterObj.teamHero.maxHp = value;
+ if (casterObj.teamHero != null)
+ casterObj.teamHero.maxHp = value;
}
}
}
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 301e75a..4f60ec5 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -108,8 +108,6 @@
public virtual Spine.TrackEntry PlayDeadAnimation(Action onComplete = null)
{
if (animState == null) return null;
-
- CancelControledAnimation();
// 浣跨敤杞ㄩ亾9浣滀负姝讳骸鍔ㄧ敾涓撶敤杞ㄩ亾锛堢嫭绔嬩簬涓昏建閬�0鍜屽瓙鎶�鑳借建閬�1-8锛�
const int deathTrackIndex = 9;
@@ -401,11 +399,17 @@
{
finalEnded = true;
- // 娓呯悊鎶�鑳借建閬�
+ // 娓呯悊鎶�鑳借建閬� - 浠庡瓧鍏镐腑绉婚櫎
if (skillTrack != null && activeSkillTracks.ContainsKey(trackIndex))
{
if (activeSkillTracks[trackIndex] == skillTrack)
activeSkillTracks.Remove(trackIndex);
+ }
+
+ // 銆愬叧閿慨澶嶃�戞竻闄� animState 涓殑杞ㄩ亾锛岄槻姝㈤珮缂栧彿杞ㄩ亾鐨勬渶鍚庝竴甯ц鐩栦綆缂栧彿杞ㄩ亾
+ if (trackIndex > 0)
+ {
+ animState?.ClearTrack(trackIndex);
}
// 鍥炴敹瀛愭妧鑳借建閬�
@@ -494,6 +498,14 @@
// 杩欓噷鏄彈鍒扮‖鎺ф椂鍊� 闇�瑕佽〃鐜扮殑鍔ㄧ敾
var entry = PlayAnimation(MotionName.hit, false);
+
+ if (entry == null)
+ {
+ // playingSkillAnim || animState == null
+ Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkillAnim ? "playingSkillAnim" : "animState == null"));
+ return;
+ }
+
float threeFrameTrackTime = 3f / BattleConst.skillMotionFps;
entry.TrackTime = threeFrameTrackTime;
entry.TimeScale = 0;
@@ -506,7 +518,18 @@
{
// 纭帶缁撴潫锛屾仮澶嶅姩鐢绘挱鏀�
isUnderControl = false;
- PlayAnimation(MotionName.idle, true);
+
+ // 鎭㈠鎵�鏈夎建閬撶殑鏃堕棿缂╂斁
+ foreach (var key in animState.Tracks)
+ {
+ if (key != null)
+ key.TimeScale = 1f;
+ }
+
+ // 閲嶇疆楠ㄩ鍒板垵濮嬪Э鎬侊紝闃叉 hit 鍔ㄧ敾鐨勫Э鎬佹畫鐣�
+ skeleton?.SetToSetupPose();
+
+ var entry = PlayAnimation(MotionName.idle, true);
}
public virtual void Run()
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 1281256..1ae492b 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -34,6 +34,7 @@
public void PlayRecord(RecordAction recordAction)
{
+ if (recordAction == null) return;
BattleDebug.LogError("Enqueue record action " + recordAction.GetType());
if (isForceFinish)
{
@@ -53,6 +54,7 @@
public void InsertRecord(RecordAction recordAction)
{
+ if (recordAction == null) return;
if (isForceFinish)
{
recordAction.ForceFinish();
@@ -78,6 +80,7 @@
public void ImmediatelyPlay(RecordAction recordAction)
{
+ if (recordAction == null) return;
if (isForceFinish)
{
recordAction.ForceFinish();
@@ -95,6 +98,11 @@
for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
{
var action = immediatelyActionList[i];
+ if (action == null)
+ {
+ removeIndexList.Add(i);
+ continue;
+ }
if (!action.IsFinished())
{
action.Run();
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 072fbf4..ab7da14 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -36,7 +36,8 @@
private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
private Dictionary<int, BattleDeadPack> tempDeadPackList = new Dictionary<int, BattleDeadPack>();
- protected List<HB428_tagSCBuffRefresh> buffCollections = new List<HB428_tagSCBuffRefresh>();
+ // Buff鐩稿叧鍖呴泦鍚堬紝鏀寔 HB428(鍒锋柊) 鍜� HB429(鍒犻櫎)
+ protected List<GameNetPackBasic> buffPackCollections = new List<GameNetPackBasic>();
// 鏋勯�犲嚱鏁帮細鍒濆鍖栨妧鑳藉熀纭�鏁版嵁
@@ -1113,9 +1114,6 @@
{
caster.motionBase?.ResetForReborn(false);
}
-
- // 娓呯悊鍔ㄧ敾鍥炶皟
- caster.motionBase?.CancelControledAnimation();
}
// 5. 鎭㈠ UI 鐘舵��
@@ -1144,12 +1142,9 @@
isPlay = true;
// 6. 澶勭悊鎵�鏈夊墿浣欏寘锛堝寘鎷� buff 鍖咃級
- // 鍏堝鐞� buffCollections
- foreach (var buff in buffCollections)
- {
- PackageRegedit.Distribute(buff);
- }
- buffCollections.Clear();
+ // 鍏堝鐞� buffPackCollections
+ DistributeBuffPacks(buffPackCollections);
+ buffPackCollections.Clear();
// 澶勭悊鍓╀綑鐨� packList
while (packList.Count > 0)
@@ -1245,16 +1240,16 @@
otherSkillActionList.Add(otherSkillAction);
return false;
}
- else if (pack is HB428_tagSCBuffRefresh buffRefresh)
+ else if (IsBuffPack(pack))
{
- // 浠庢壘鍒扮涓�涓狧B428寮�濮� 鎵惧嚭杩炵画鐨凥B428_tagSCBuffRefresh鍖� 濡傛灉鎵惧埌涓�涓狟428鍚� 涔嬪悗纰板埌闈濰B428鍖呭氨鍋滄
- buffCollections.Add(buffRefresh);
+ // 浠庢壘鍒扮涓�涓� Buff 鍖呭紑濮嬶紝鏀堕泦杩炵画鐨� HB428/HB429 鍖�
+ buffPackCollections.Add(pack);
while (packList.Count > 0)
{
var nextPack = packList[0];
- if (nextPack is HB428_tagSCBuffRefresh nextBuffRefresh)
+ if (IsBuffPack(nextPack))
{
- buffCollections.Add(nextBuffRefresh);
+ buffPackCollections.Add(nextPack);
packList.RemoveAt(0);
}
else
@@ -1263,18 +1258,11 @@
}
}
- // 鍚屾椂鍒锋柊鎵�鏈夊璞$殑buff锛屼笉鍒嗙粍
- foreach (var buff in buffCollections)
- {
- BattleObject battleObj = battleField.battleObjMgr.GetBattleObject((int)buff.ObjID);
- if (battleObj != null)
- {
- battleObj.buffMgr.RefreshBuff(buff, true);
- }
- }
+ // 澶勭悊鎵�鏈夋敹闆嗗埌鐨� buff 鍖�
+ ProcessBuffPacks(buffPackCollections);
- // 娓呯┖宸插鐞嗙殑buff闆嗗悎
- buffCollections.Clear();
+ // 娓呯┖宸插鐞嗙殑 buff 闆嗗悎
+ buffPackCollections.Clear();
continue;
}
@@ -1299,9 +1287,63 @@
otherSkillActionList?.Clear();
dropPackList?.Clear();
expPackList?.Clear();
+ buffPackCollections?.Clear();
skillEffect = null;
packList = null;
}
+ #region Buff鍖呭鐞�
+
+ /// <summary>
+ /// 鍒ゆ柇鏄惁涓� Buff 鐩稿叧鐨勫寘锛圚B428 鎴� HB429锛�
+ /// </summary>
+ protected bool IsBuffPack(GameNetPackBasic pack)
+ {
+ return pack is HB428_tagSCBuffRefresh || pack is HB429_tagSCBuffDel;
+ }
+
+ /// <summary>
+ /// 澶勭悊鏀堕泦鍒扮殑 Buff 鍖呭垪琛紙HB428 鍒锋柊 鍜� HB429 鍒犻櫎锛�
+ /// </summary>
+ protected void ProcessBuffPacks(List<GameNetPackBasic> buffPacks)
+ {
+ if (buffPacks == null || buffPacks.Count == 0) return;
+
+ foreach (var pack in buffPacks)
+ {
+ if (pack is HB428_tagSCBuffRefresh buffRefresh)
+ {
+ BattleObject battleObj = battleField.battleObjMgr.GetBattleObject((int)buffRefresh.ObjID);
+ if (battleObj != null)
+ {
+ battleObj.buffMgr.RefreshBuff(buffRefresh, true);
+ }
+ }
+ else if (pack is HB429_tagSCBuffDel buffDel)
+ {
+ BattleObject battleObj = battleField.battleObjMgr.GetBattleObject((int)buffDel.ObjID);
+ if (battleObj != null)
+ {
+ battleObj.buffMgr.RemoveBuff(buffDel);
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// 寮哄埗鍒嗗彂 Buff 鍖咃紙鐢ㄤ簬 ForceFinished 鍦烘櫙锛�
+ /// </summary>
+ protected void DistributeBuffPacks(List<GameNetPackBasic> buffPacks)
+ {
+ if (buffPacks == null || buffPacks.Count == 0) return;
+
+ foreach (var pack in buffPacks)
+ {
+ PackageRegedit.Distribute(pack);
+ }
+ }
+
+ #endregion
+
}
\ No newline at end of file
--
Gitblit v1.8.0