| Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/Skill/SkillBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -62,10 +62,24 @@ public override void ForceFinish() { //正常开始之后到界面出现之前都点不了 所以这边不用强制完成 接口留着 if (!isRun) { isRun = true; UniTaskExtension.DelayTime((GameObject)null, 1f, () => { if (battleField ==null|| battleField.battleRootNode == null|| battleField.battleRootNode.battleStartNode == null) { return; } battleField.battleRootNode.battleStartNode.SetActive(false); StartBattleCallback(); }); } base.ForceFinish(); // 完成就开始显示UI if (isFinish) return; // 这里无法强制执行 必须等待isFinish = true } } Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -124,22 +124,30 @@ public override void ForceFinish() { if (isFinish) return; isFinish = true; // 强制结束所有死亡触发技能 foreach (var kv in deathActionDict) { kv.Value.ForceFinish(); } deathActionDict.Clear(); // 直接结束 // 清理状态字典,防止回调继续等待 deadActionStatesDict.Clear(); // 直接结束所有死亡对象 foreach (var deadPack in deadPackList) { BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.deadPack.ObjID); if (null != deadObj) { PerformDrop(deadObj); deadObj.SetDeath(); } deadObj.SetDeath(); } base.ForceFinish(); Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
@@ -31,10 +31,16 @@ public override void ForceFinish() { //正常开始之后到界面出现之前都点不了 所以这边不用强制完成 接口留着 if (isFinish) return; // 确保闪避状态正确结束 if (battleObject != null && !isRun) { battleObject.OnDodgeEnd(); } isRun = true; base.ForceFinish(); // 完成就开始显示UI } } Main/System/Battle/Skill/SkillBase.cs
@@ -1074,16 +1074,84 @@ if (isFinished) return; // 1. 强制结束技能效果 skillEffect?.ForceFinished(); skillEffect = null; // 2. 强制结束所有子技能动作 otherSkillActionList.ForEach(action => action.ForceFinish()); otherSkillActionList.Clear(); // 3. 清理 DOTween 动画(防止移动回调在战斗结束后执行) if (caster != null && caster.heroRectTrans != null) { DG.Tweening.DOTween.Kill(caster.heroRectTrans); } // 4. 重置施法者状态 if (caster != null) { // 重置位置到原点 if (caster.heroRectTrans != null) { caster.heroRectTrans.anchoredPosition = Vector2.zero; } // 重置朝向 if (caster.heroGo != null) { Vector3 scale = caster.heroGo.transform.localScale; scale.x = Mathf.Abs(scale.x); caster.heroGo.transform.localScale = scale; } // 取消幻影效果 caster.motionBase?.ShowIllusionShadow(false); // 播放待机动画(如果还活着) if (!caster.teamHero.isDead) { caster.motionBase?.ResetForReborn(false); } // 清理动画回调 caster.motionBase?.CancelControledAnimation(); } // 5. 恢复 UI 状态 if (battleField != null) { // 恢复所有角色的显示层级和血条 var allList = battleField.battleObjMgr?.allBattleObjDict?.Values; if (allList != null) { foreach (BattleObject bo in allList) { bo.layerMgr?.SetFront(); bo.heroInfoBar?.SetActive(true); } } // 关闭技能遮罩 if (battleField.battleRootNode != null && battleField.battleRootNode.skillMaskNode != null) { battleField.battleRootNode.skillMaskNode.SetActive(false); } } isFinished = true; moveFinished = true; isPlay = true; // 处理所有剩余包 // 6. 处理所有剩余包(包括 buff 包) // 先处理 buffCollections foreach (var buff in buffCollections) { PackageRegedit.Distribute(buff); } buffCollections.Clear(); // 处理剩余的 packList while (packList.Count > 0) { var pack = packList[0];