| Main/System/Battle/Buff/BattleObjectBuffMgr.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/Define/BattleDmgInfo.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/Motion/MotionBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/RecordPlayer/RecordPlayer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/Skill/SkillBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -147,7 +147,7 @@ OnBuffChanged(); }); battleObject.battleField.recordPlayer.PlayRecord(buffRemoveAction); battleObject.battleField.recordPlayer.ImmediatelyPlay(buffRemoveAction); } 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; } } } 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() 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(); 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)) { // 从找到第一个HB428开始 找出连续的HB428_tagSCBuffRefresh包 如果找到一个B428后 之后碰到非HB428包就停止 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 相关的包(HB428 或 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 }