yyl
2025-11-28 8d57a9bf9f4bef8e701e668dc5ee47905988b0df
125 战斗 复活技能
9个文件已修改
98 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB423_tagMCTurnFightObjReborn.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleConst.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattleDmgInfo.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Motion/MotionBase.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/RebornSkill.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/SkillFactory.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/StoryBossBattleWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB423_tagMCTurnFightObjReborn.cs
@@ -11,6 +11,5 @@
        HB423_tagMCTurnFightObjReborn vNetData = vNetPack as HB423_tagMCTurnFightObjReborn;
        BattleField battleField = BattleManager.Instance.GetBattleField(vNetPack.packUID);
        battleField?.OnObjReborn(vNetData);
    }
}
Main/System/Battle/BattleConst.cs
@@ -1,9 +1,10 @@
using System;
using System.Collections.Generic;
public static class BattleConst
{
    #region 战斗窗口配置
    public static List<Type> BattleWindows = new List<Type>()
    {
        typeof(BattleWin),
@@ -29,13 +30,21 @@
        { "BoneBattleField", 3},
        { "TianziBillboradBattleField", 4 },
    };
    #endregion
    #region 战斗基础配置
    public const int BattleStartEffectID = 1001; // Example effect ID for battle start
    public const int skillMotionFps = 30;
    public const int BattlePointItemID = 3;//战锤ID
    #endregion
    #region 战斗统计类型
    public const int BattleTotalDamageType = 100001; // 总伤害类型ID
    public const int BattleTotalRecoverType = 100002; // 总治疗类型ID
@@ -47,7 +56,11 @@
    public const int BattleChaseAttack = 100005; // 追击
    public const int BattleStun = 100006; // 击晕
    #endregion
    #region 战斗层级排序
    //  1000~10000之间的战斗层级
    //  需要考虑根据UI 特效 战斗角色三方的层级关系
    //  确立基本的层级范围 后往上累加
@@ -189,8 +202,11 @@
            return ActiveHeroActionSortingOrder + 1;
        }
    }
    #endregion
    #region Buff限制组
    public const int HardControlGroup = 1;
    public const int SoftControlGroup = 2;
@@ -211,4 +227,14 @@
    };
    public const int ShieldBuffAttackType = 1003;//护盾吸收伤害类型ID
    #endregion
    #region 特效ID
    public const int BlockEffectID = 19999; // 格挡特效ID
    public const int RebornEffectID = 20000;    // 复活特效ID
    #endregion
}
Main/System/Battle/BattleField/BattleField.cs
@@ -561,27 +561,6 @@
        };
    }
    public void OnObjReborn(HB423_tagMCTurnFightObjReborn vNetData)
    {
        // 处理复活逻辑
        BattleObject battleObj = battleObjMgr.GetBattleObject((int)vNetData.ObjID);
        if (battleObj != null)
        {
            battleObj.OnReborn(vNetData);
            // 从死亡处理列表中移除该角色
            if (processingDeathObjIds.Remove(vNetData.ObjID))
            {
                Debug.Log($"OnObjReborn: 角色复活,从死亡处理列表移除 ObjID={vNetData.ObjID}");
            }
        }
        else
        {
            Debug.LogError($"BattleObject with ID {vNetData.ObjID} not found for reborn.");
        }
    }
    //各个战场没有场景概念,且可以共存,同时存在战场和结算的情况
    //内部结算需要处理的逻辑,不含UI
    protected virtual void OnSettlement(JsonData turnFightStateData)
Main/System/Battle/BattleObject/BattleObject.cs
@@ -350,7 +350,7 @@
        {
            if (dmgInfo.IsType(DamageType.Block))
            {
                battleField.battleEffectMgr.PlayEffect(this, 19999, heroRectTrans, Camp);
                battleField.battleEffectMgr.PlayEffect(this, BattleConst.BlockEffectID, heroRectTrans, Camp);
            }
            // else
            // {
@@ -450,13 +450,13 @@
        buffMgr.RemoveAllBuff();
    }
    public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData)
    public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData)
    {
        // 处理复活逻辑
        teamHero.curHp = GeneralDefine.GetFactValue(vNetData.HP, vNetData.HPEx);
        teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx);
        teamHero.isDead = false;
        heroGo.SetActive(true);
        motionBase.PlayAnimation(MotionName.idle, true);
        motionBase.ResetToIdleAnimation();
    }
    // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给
Main/System/Battle/Define/BattleDmgInfo.cs
@@ -396,6 +396,13 @@
    /// </summary>
    private int ValidateAndFixAttackType(int attackType)
    {
        if (IsType(DamageType.Stunned))
        {
            // 特殊处理击晕类型
            //  去掉击晕类型
            attackType &= ~(int)DamageType.Stunned;
        }
        if (DamageNumConfig.Get(attackType) != null)
            return attackType;
Main/System/Battle/Motion/MotionBase.cs
@@ -542,6 +542,8 @@
    public void HaveRest()
    {
        animState?.ClearTracks();
        trackEntryCallbacks.Clear();
        runningActions.Clear();
        activeSkillTracks.Clear();
@@ -555,6 +557,8 @@
        subSkillTrackMap.Clear();
        for (int i = 1; i <= 8; i++)
            availableSubTracks.Enqueue(i);
        currentTrack = null;
        
        playingSkillAnim = false;
        PlayAnimation(MotionName.idle, true);
@@ -574,4 +578,10 @@
            illusionShadow.Show(isVisible, color);
        }
    }
    internal void ResetToIdleAnimation()
    {
        // 清空之前的状态
        HaveRest();
    }
}
Main/System/Battle/Skill/RebornSkill.cs
@@ -14,7 +14,21 @@
    }
    protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
    {
        for (int i = 0; i < hitList.Count; i++)
        {
            var hitInfo = hitList[i];
            BattleObject targetObj = battleField.battleObjMgr.GetBattleObject((int)hitInfo.ObjID);
            if (targetObj != null)
            {
                targetObj.battleField.battleEffectMgr.PlayEffect(targetObj, BattleConst.RebornEffectID, targetObj.heroRectTrans, targetObj.Camp);
                // B427中 tagSCUseSkillHurt 为复活的目标,  HurtHP、HurtHPEx - 复活回血, CurHP、CurHPEx - 复活后的血量
                targetObj.OnReborn(hitInfo);
            }
        }
    }
}
Main/System/Battle/Skill/SkillFactory.cs
@@ -68,6 +68,9 @@
            case 4:
                skill = new DotSkill(_caster, skillConfig, vNetData, packList, battleField);
                break;
            case 8:
                skill = new RebornSkill(_caster, skillConfig, vNetData, packList, battleField);
                break;
            case 5:
            case 6:
            case 14:
Main/System/Battle/StoryBossBattleWin.cs
@@ -124,11 +124,11 @@
        if (null == bossBattleObject)
            return;
        if (bossBattleObject.teamHero.ObjID == info.battleHurtParam.hurter.hurtObj.teamHero.ObjID)
        if (info.battleHurtParam.hurter.hurtObj != null && bossBattleObject.teamHero.ObjID == info.battleHurtParam.hurter.hurtObj.teamHero.ObjID)
        {
            bossLifeBar.Show((ulong)info.battleHurtParam.hurter.toHp, (ulong)bossBattleObject.teamHero.maxHp);
        }
        else if (bossBattleObject.teamHero.ObjID == info.battleHurtParam.caster.casterObj.teamHero.ObjID)
        else if (info.battleHurtParam.caster.casterObj != null && bossBattleObject.teamHero.ObjID == info.battleHurtParam.caster.casterObj.teamHero.ObjID)
        {
            bossLifeBar.Show((ulong)info.battleHurtParam.caster.toHp, (ulong)bossBattleObject.teamHero.maxHp);
        }