T17反馈批收官: ①结算演播硬锁v3.1——锁期点击缓存+演播完边沿自动重放(玩家操作零丢失——实机卡死感根因=锁期点击被吞无反馈)②恢复被平反的两修复——血量口径(置满/回血封顶含pct)+选路呈现(干线偏移+非候选降透明)——probe卡死真因=probe未适配迭代10 BonusPickOverlay(假阳性扣压平反)③减动效按钮——文案不刷新bug修+语义命名「结算演出动画:完整/快速」+操作提示内联④出度≤2全套(用户拍板)——level_table第七检fanout_violation+L2L3十张模板重建(tools/t17_fanout2_rebuild.py五骨架出度≤2/层宽≤4/类型序列保持/自校验四检)+层宽上限5废止(数学不相容)改4+钉固断言5处随新图+文档两处(生成v0.6/地图v1.3)⑤probe适配BonusPick三态(替换/result继续/待选确认)+预算耗尽放弃收口+排播豁免;闸=冒烟628/0+run_all 15套+三探针+doc三闸零新增;连带义务=MC读数基线随图变漂移全旧锚作废只测不判,重锚归下一测量批

This commit is contained in:
DKChan committed 2026-10-02 08:11:06 +08:00
1 parent 16df50f93b
commit be772cfb2f
10 files changed
+220 -28

No files matched your search

+11 -2
View File
@@ -113,7 +113,7 @@ func start_adventure(seed_val: int, params: Dictionary = {}) -> bool:
_base_override = _normalize_override(params.get("hero_override", {}))
_first_script = bool(params.get("first_script", false)) # 缺省 = 非首次(抽签路径;真实侧由呈现层读存档布尔位传入)
_aux_unlocked = params.get("aux_unlocked", {}) if params.get("aux_unlocked", {}) is Dictionary else {} # additive(迭代 7 T5)
ledger["hero_hp"] = int(db.hero.max_hp) + int(_base_override["max_hp"]) # 生命账本置满(表值+永久强化 flat——加算区刚归零)
ledger["hero_hp"] = effective_max_hp() # 生命账本置满(生效上限口径——T17 修复:含 TunePanel pct,与战斗内同源)
state = "running"
return _start_current_level()
@@ -211,6 +211,15 @@ func set_hero_override(atk_pct: int, hp_pct: int) -> void:
_runner.set_hero_override(atk_pct, hp_pct)
# 冒险账本侧生效上限(T17 修复——账本置满/回血封顶与战斗内上限同式同源):
# (表值 + 永久强化 flat + 加算区 flat)后乘 TunePanel 百分比——叠加次序与 LevelRunner.effective_max_hp
# 逐字一致。旧口径两处只算 flat 不乘 pct:调生命上限 26→104 时开局血仍 26(账本 26 / 战斗内 104)、
# 通关 20% 回血封顶按 26 算。pct=0(模拟/冒烟默认)时乘法恒等——MC 锚零漂移。
func effective_max_hp() -> int:
var base: int = int(db.hero.max_hp) + int(_base_override.get("max_hp", 0)) + int(bonus.get("max_hp", 0))
return maxi(1, int(round(float(base) * (100.0 + float(_override[1])) / 100.0)))
# 断点承载注入(迭代 8 卡①——组合根冒险开始时调用;模拟/冒烟不注入 = 断点面整体静默)
func set_save_manager(sm) -> void:
_save_manager = sm
@@ -609,7 +618,7 @@ func _on_level_finished(payload: Dictionary) -> void:
# 通关兑付(非末关恰一次;迭代 10 三层奖励框架):部分回血先行 → 加权洗牌掷 3 → 三选一停点
#(顺序即契约——回血按当刻账本与上限结算,选择停点零自动推进)
var hp_before := int(ledger.get("hero_hp", 0))
var max_eff := int(db.hero.max_hp) + int(_base_override["max_hp"]) + int(bonus.get("max_hp", 0))
var max_eff := effective_max_hp() # T17 修复:回血封顶口径含 TunePanel pct(同战斗内上限)
var heal := mini(int(floor(float(max_eff) * float(int(db.adventure.clear_heal_pct)) / 100.0)), max_eff - hp_before)
ledger["hero_hp"] = hp_before + heal
# 置位先于 emit(信号同步派发——处理器内立即确认时 _pending_next_level 必须已就位)