yyl
2026-01-29 83ff2cfc367d3227449fa8414a25541374929ecb
Main/System/Battle/BattleUtility.cs
@@ -180,7 +180,7 @@
                {
                    uint objId = targetList[0].ObjID;
                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
                    return target.teamHero.positionNum;
                    return target.GetPositionNum();
                }
                break;
            case 1:
@@ -191,7 +191,7 @@
                    BattleObject battleObject = caster.battleField.battleObjMgr.GetBattleObject((int)targetList[0].ObjID);
                    if (battleObject != null)
                    {
                        returnIndex = battleObject.teamHero.positionNum;
                        returnIndex = battleObject.GetPositionNum();
                    }
                    else
                    {
@@ -213,12 +213,12 @@
                {
                    uint objId = targetList[0].ObjID;
                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
                    returnIndex = target.teamHero.positionNum;
                    returnIndex = target.GetPositionNum();
                }
                else
                {
                    //  看看对面前排是否都活着
                    List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum < 3 select bo);
                    List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.GetPositionNum() < 3 select bo);
                    if (front.Count > 0)
                    {
                        returnIndex = 1;
@@ -234,12 +234,12 @@
                {
                    uint objId = targetList[0].ObjID;
                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
                    returnIndex = target.teamHero.positionNum;
                    returnIndex = target.GetPositionNum();
                }
                else
                {
                    //  看看对面后排是否都活着
                    List<BattleObject> back = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum >= 3 select bo);
                    List<BattleObject> back = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.GetPositionNum() >= 3 select bo);
                    if (back.Count > 0)
                    {
                        returnIndex = 4;
@@ -264,13 +264,13 @@
                    }
                    else
                    {
                        returnIndex = Mathf.Min(returnIndex, target.teamHero.positionNum);
                        returnIndex = Mathf.Min(returnIndex, target.GetPositionNum());
                    }
                }
                break;
            // 5    自己,默认只选自己
            case 5:
                returnIndex = caster.teamHero.positionNum;
                returnIndex = caster.GetPositionNum();
                break;
            case 6:
                //  跟随主技能的目标
@@ -359,7 +359,7 @@
            }
            battleField.recordPlayer.EnableForceFinish(false);
        }
        catch (System.Exception ex)
        catch (System.Exception)
        {
            battleField.recordPlayer.EnableForceFinish(false);
        }
@@ -411,8 +411,9 @@
        BattleHurtObj hurter = new BattleHurtObj();
        hurter.hurtObj = target;
        hurter.damageList = damageList;
        hurter.fromHp = target.teamHero.curHp;
        hurter.fromShieldValue = target.buffMgr.GetShieldValue();
        hurter.fromHp = target.GetCurHp();
        var buffMgr = target.GetBuffMgr();
        hurter.fromShieldValue = buffMgr != null ? buffMgr.GetShieldValue() : 0; // 命格没有护盾
        // 判断是否是最后一击
        bool isLastHit = hitIndex >= skillConfig.DamageDivide.Length - 1;
@@ -429,7 +430,7 @@
        else
        {
            // 非最后一击:客户端计算中间血量
            long maxHp = target.teamHero.maxHp;
            long maxHp = target.GetMaxHp();
            if (isHealing)
            {
@@ -442,13 +443,13 @@
                if (hurter.fromShieldValue >= currentHitDamage)
                {
                    hurter.toHp = hurter.fromHp;
                    target.teamHero.curHp = hurter.toHp; // 保持一致性
                    target.SetCurHp(hurter.toHp); // 保持一致性
                }
                else
                {
                    long remainingDamage = currentHitDamage - hurter.fromShieldValue;
                    hurter.toHp = Math.Max(0, hurter.fromHp - remainingDamage);
                    target.teamHero.curHp = hurter.toHp; // 保持一致性
                    target.SetCurHp(hurter.toHp); // 保持一致性
                }
            }
        }
@@ -481,9 +482,10 @@
        caster.reflectHpList = reflectHpList;
        // 获取施法者当前状态
        long casterFromHp = skillBase.caster.teamHero.curHp;
        long casterMaxHp = skillBase.caster.teamHero.maxHp;
        long casterFromShield = skillBase.caster.buffMgr.GetShieldValue();
        long casterFromHp = skillBase.caster.GetCurHp();
        long casterMaxHp = skillBase.caster.GetMaxHp();
        var buffMgr = skillBase.caster.GetBuffMgr();
        long casterFromShield = buffMgr != null ? buffMgr.GetShieldValue() : 0; // 命格没有护盾
        caster.fromHp = casterFromHp;
        caster.fromShieldValue = casterFromShield;
@@ -517,7 +519,7 @@
        caster.toHp = casterToHp;
        caster.toShieldValue = casterToShield;
        skillBase.caster.teamHero.curHp = caster.toHp; // 保持一致性
        skillBase.caster.SetCurHp(caster.toHp); // 保持一致性
        
        return caster;
    }
@@ -807,7 +809,7 @@
        
        BattleDebug.LogError(
            $"{logColor}========== 血量一致性验证 [{context}] {resultStr} ==========</color>\n" +
            $"目标: {hurter.hurtObj.teamHero.name} (ObjID:{hurter.hurtObj.ObjID})\n" +
            $"目标: {hurter.hurtObj.GetName()} (ObjID:{hurter.hurtObj.ObjID})\n" +
            $"击数: 第{hurtParam.hitIndex + 1}击 (最后一击)\n" +
            $"服务器最终血量: {serverFinalHp}\n" +
            $"客户端计算血量: {clientFinalHp}\n" +
@@ -817,7 +819,7 @@
            $"初始血量: {hurter.fromHp}\n" +
            $"本次伤害/治疗: {(hurter.damageList != null ? hurter.damageList.Sum() : 0)}\n" +
            $"最终血量: {clientFinalHp}\n" +
            $"最大血量: {hurter.hurtObj.teamHero.maxHp}\n" +
            $"最大血量: {hurter.hurtObj.GetMaxHp()}\n" +
            $"\n" +
            $"---- 护盾变化过程 ----\n" +
            $"初始护盾: {hurter.fromShieldValue}\n" +
@@ -829,7 +831,7 @@
        if (!isConsistent)
        {
            Debug.LogWarning(
                $"[血量验证失败] 目标:{hurter.hurtObj.teamHero.name} " +
                $"[血量验证失败] 目标:{hurter.hurtObj.GetName()} " +
                $"服务器:{serverFinalHp} vs 客户端:{clientFinalHp} " +
                $"差异:{clientFinalHp - serverFinalHp}"
            );
@@ -860,7 +862,7 @@
        // 应用吸血
        if (totalSuckHp > 0)
        {
            expectedHp = Math.Min(caster.casterObj.teamHero.maxHp, expectedHp + totalSuckHp);
            expectedHp = Math.Min(caster.casterObj.GetMaxHp(), expectedHp + totalSuckHp);
        }
        
        // 应用反伤
@@ -885,7 +887,7 @@
        
        BattleDebug.LogError(
            $"{logColor}========== 施法者血量验证 [{context}] {resultStr} ==========</color>\n" +
            $"施法者: {caster.casterObj.teamHero.name} (ObjID:{caster.casterObj.ObjID})\n" +
            $"施法者: {caster.casterObj.GetName()} (ObjID:{caster.casterObj.ObjID})\n" +
            $"击数: 第{hurtParam.hitIndex + 1}击 (最后一击)\n" +
            $"预期最终血量: {expectedHp}\n" +
            $"实际最终血量: {clientFinalHp}\n" +
@@ -896,7 +898,7 @@
            $"吸血总量: {totalSuckHp}\n" +
            $"反伤总量: {totalReflectHp}\n" +
            $"最终血量: {clientFinalHp}\n" +
            $"最大血量: {caster.casterObj.teamHero.maxHp}\n" +
            $"最大血量: {caster.casterObj.GetMaxHp()}\n" +
            $"\n" +
            $"---- 护盾变化过程 ----\n" +
            $"初始护盾: {caster.fromShieldValue}\n" +
@@ -909,7 +911,7 @@
        if (!isConsistent)
        {
            Debug.LogWarning(
                $"[施法者血量计算错误] {caster.casterObj.teamHero.name} " +
                $"[施法者血量计算错误] {caster.casterObj.GetName()} " +
                $"预期:{expectedHp} vs 实际:{clientFinalHp} " +
                $"差异:{clientFinalHp - expectedHp}"
            );