| Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleUtility.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/RecordPlayer/RecordAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/Skill/SkillBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
@@ -18,6 +18,8 @@ public List<GameNetPackBasic> packList = new List<GameNetPackBasic>(); private bool isCreated = false; public override void ReadFromBytes(byte[] vBytes) { base.ReadFromBytes(vBytes); @@ -216,14 +218,14 @@ } return false; } public void Distribute(RecordAction parentAction = null) public bool Distribute(RecordAction parentAction = null) { BattleField battleField = BattleManager.Instance.GetBattleField(guid); if (null == battleField) { Debug.LogError("BattleField not found for guid: " + guid); return; return false; } var skillAction = CreateSkillAction(); @@ -241,7 +243,10 @@ else { battleField.DistributeNextPackage(); return false; } return true; } @@ -306,6 +311,12 @@ return null; } if (isCreated) { Debug.LogError("create skill twice check the code"); return null; } // 服务器修改了 现在第一个不一定是B427 也有可能是B428 先放Buff while (packList.Count > 0) { @@ -352,7 +363,7 @@ BattleObject _caster = battleField.battleObjMgr.GetBattleObject((int)skill.ObjID); // BattleDebug.LogError("_caster == null : " + (_caster == null) + " skill.ObjID : " + skill.ObjID); isCreated = true; SkillRecordAction skillAction = new SkillRecordAction(battleField, _caster, skill, packList); return skillAction; } Main/System/Battle/BattleUtility.cs
@@ -711,6 +711,7 @@ if (null == hB427_TagSCUseSkill) { Debug.LogError("combine pack没找到主技能包"); break; } else @@ -718,7 +719,13 @@ var skillID = hB427_TagSCUseSkill.SkillID; var skillConfig = SkillConfig.Get((int)skillID); if (skillConfig != null && (SkillTriggerTiming)skillConfig.ClientTriggerTiming == SkillTriggerTiming.Death) if (null == skillConfig) { Debug.LogError("skill config 为空 无法判断是否为死亡触发技能 " + skillID); break; } if ((SkillTriggerTiming)skillConfig.ClientTriggerTiming == SkillTriggerTiming.Death) { for (int j = 0 ; j < deadPacks.Count; j ++) { @@ -742,6 +749,11 @@ break; } } else if (pack is HB427_tagSCUseSkill hB427_TagSCUseSkill1) { Debug.LogError("找到没包起来的技能: " + hB427_TagSCUseSkill1.SkillID); break; } } // Debug.LogError("find dead pack " + deadPacks.Count); return deadPacks; Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -5,6 +5,10 @@ public class RecordAction { public int actionID; private static int autoincreser = 0; protected BattleField battleField; // 本次Action的主角 @@ -47,6 +51,7 @@ public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj) { actionID = autoincreser++; actionType = _actionType; battleField = _battleField; battleObject = _battleObj; Main/System/Battle/Skill/SkillBase.cs
@@ -484,9 +484,11 @@ return; } ProcessSubSkill(); // 先把死亡包收集了 HandleDead(); // 再处理 内嵌技能 ProcessSubSkill(); skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack); skillEffect.Play(OnHitTargets); @@ -545,7 +547,11 @@ foreach (var (packUID, recordAction) in allSubSkills) { battleField.recordPlayer.ImmediatelyPlay(recordAction); currentWaitingSkill.Add(recordAction); if (recordAction.IsNeedWaiting()) { currentWaitingSkill.Add(recordAction); } } } @@ -914,27 +920,26 @@ List<BattleDeadPack> deadPackList = BattleUtility.FindDeadPack(packList); if (deadPackList.Count <= 0) return; // 找到最大的死亡包 packUID(包括死亡包和死亡触发技能) foreach (var deadPack in deadPackList) { packList.Remove(deadPack.deadPack); packList.Remove(deadPack.deadTriggerSkill); } // 找到最大的死亡包 packUID BattleDeadPack lastBattleDeadPack = null; ulong maxDeathPackUID = 0; foreach (var deadPack in deadPackList) { if (deadPack.deadPack != null && deadPack.deadPack.packUID > maxDeathPackUID) { maxDeathPackUID = deadPack.deadPack.packUID; } if (deadPack.deadTriggerSkill != null) { var skillPack = deadPack.deadTriggerSkill.GetMainHB427SkillPack(); if (skillPack != null && skillPack.packUID > maxDeathPackUID) { maxDeathPackUID = skillPack.packUID; } lastBattleDeadPack = deadPack; } } // 如果找到了死亡包,收集所有 packUID > maxDeathPackUID 的包 if (maxDeathPackUID > 0) if (maxDeathPackUID > 0 && lastBattleDeadPack != null) { BattleDebug.LogError($"SkillBase.HandleDead: 找到死亡包,maxDeathPackUID = {maxDeathPackUID},开始收集死亡后的包"); @@ -946,26 +951,19 @@ if (packUID > maxDeathPackUID) { // 排除经验包和掉落包,它们属于当前死亡事件的一部分,不是"死亡后"的包 if (pack is HB405_tagMCAddExp || if (pack is HB405_tagMCAddExp expPack && expPack.Source == 2 || (pack is H0704_tagRolePackRefresh h0704 && h0704.PackType == (byte)PackType.DropItem && h0704.IsBind == 1)) { continue; // 跳过经验包和掉落包,让 CheckAfterDeadhPack() 处理它们 } BattleDebug.LogError($"SkillBase.HandleDead: 从packList收集死亡后的包 - Type: {pack.GetType().Name}, UID: {packUID}"); foreach (var deadPack in deadPackList) { deadPack.packListAfterDeath.Add(pack); } lastBattleDeadPack.packListAfterDeath.Add(pack); packsToRemove.Add(pack); } } // 从 packList 中移除这些包 foreach (var pack in packsToRemove) { packList.Remove(pack); } packList.RemoveAll(p => packsToRemove.Contains(p)); } CheckAfterDeadhPack(); @@ -992,8 +990,8 @@ // 构造BattleDrops并缓存 for (int i = 0; i < deadPackList.Count; i++) { BattleDeadPack battleDeadPack = deadPackList[i]; int objID = (int)battleDeadPack.deadPack.ObjID; BattleDeadPack bdp = deadPackList[i]; int objID = (int)bdp.deadPack.ObjID; BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject(objID); // 修复:添加空值检查 @@ -1253,9 +1251,6 @@ return false; } // 检查最终完成状态 if (isFinished && moveFinished) { @@ -1280,7 +1275,8 @@ DeathRecordAction recordAction = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values)); if (null != recordAction) { parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction, parentRecordAction, true); parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction); tempDeadPackList.Clear(); return false; } }