diff --git a/game/core/adventure_runner.gd b/game/core/adventure_runner.gd index d77421c0..8b2e33af 100644 --- a/game/core/adventure_runner.gd +++ b/game/core/adventure_runner.gd @@ -159,6 +159,13 @@ func resume_adventure(bp: Dictionary, params: Dictionary = {}) -> bool: _bonus_aux_carry.append(String(v)) _keystone_drops = (bp.get("keystone_drops", []) as Array).duplicate(true) _base_override = _normalize_override(params.get("hero_override", {})) + # 生命账本越界钳制(T17——spawn 守卫 EC16 免疫):断点可能由旧口径版本写出(如调试上限 + # 调高期带出的账本值 > 新口径生效上限,实例:hero_hp=28 > 基础 26)——恢复后钳到生效上限, + # 否则首战 spawn「hero_hp 入参越界」拒收 → 「敌人系统 spawn 被拒」fatal。上限 = 表值+永久 + # 强化 flat+加算区 flat 后乘 TunePanel pct(effective_max_hp 同式——此刻加算区尚未恢复, + # 钳制用 flat 已含的保守口径即可,加算区恢复后其余战斗照常)。 + ledger["hero_hp"] = mini(int(ledger.get("hero_hp", 0)), maxi(1, + int(round(float(int(db.hero.max_hp) + int(_base_override.get("max_hp", 0))) * (100.0 + float(_override[1])) / 100.0)))) _first_script = false # 续玩模板已随快照强制(已抽模板零重抽)——脚本模式不重放 _aux_unlocked = params.get("aux_unlocked", {}) if params.get("aux_unlocked", {}) is Dictionary else {} # 三选一停点续玩分支(迭代 10——选择态/已兑付态不重跑关卡;奖励选择态不重抽、已兑付不重付)