修复: 卡⓪①②——主菜单开新/续玩两入口补传同调三键(build_adventure_params 统一构造,取值与营地投影同源)+关卡开场行改传 runner.effective_* 当前生效值、含面板加成后缀改认局外加成

This commit is contained in:
DKChan committed 2026-10-08 05:03:59 +08:00
1 parent b0a73dfa30
commit 1d2894b555
1 file changed
+30 -4
+30 -4
View File
@@ -467,7 +467,9 @@ func _resume_from_menu() -> void:
log_view.clear()
logger.start_session(int(bp.get("master_seed", 0)))
adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct())
if not adventure.resume_adventure(bp, {"hero_override": meta.hero_override() if meta != null else {}, "treasure_unlocked": _treasure_ui.unlocked_set()}):
# 迭代 19 卡⓪①——同调三键随续玩下传(build_adventure_params 统一构造,与开新局同源同口径)
if not adventure.resume_adventure(bp, build_adventure_params(save_manager, meta,
{"treasure_unlocked": _treasure_ui.unlocked_set()})):
_fatal_screen("续玩恢复失败——见输出日志")
return
@@ -491,6 +493,23 @@ func _wire_adventure() -> void:
adventure.set_save_manager(save_manager) # 断点承载注入(迭代 8 卡①——停点快照写盘;调试/模拟不经过此路径)
# 冒险开局参数面构造(主菜单开新/续玩两入口共用——迭代 19 卡⓪①:同调三键随开局下传,真实局此前恒空。
# 取值口径与营地投影完全同源:装配集=save.attunement_equipped(save_manager.gd 访问器)、Y 刷新池=
# meta.attune_refresh_charges(当前等级行表值)、树 rule 键集=meta.tree_rule_keys(Fork 激活侧 effects);
# hero_override 沿用既有 meta 现算口径。static 形态=冒烟直呼单测本函数,免实例化整菜单场景)。
# 注:runner 侧 resume_adventure 受理面现收 attunement/attune_refresh_y 两键(tree_rules 暂不消费——
# 传参先行,受理缺口在册披露)。
static func build_adventure_params(save_manager_ref, meta_ref, extra: Dictionary = {}) -> Dictionary:
var params: Dictionary = {
"hero_override": meta_ref.hero_override() if meta_ref != null else {},
"attunement": save_manager_ref.attunement_equipped() if save_manager_ref != null else [],
"attune_refresh_y": meta_ref.attune_refresh_charges() if meta_ref != null else 0,
"tree_rules": meta_ref.tree_rule_keys() if meta_ref != null else [],
}
params.merge(extra, true)
return params
# 冒险模式(三关连探——AdventureRunner 编排;转发信号签名与 runner 一致,接线照原样对接;
# 信号连接只在组合根——ADR-0001)
func _start_adventure() -> void:
@@ -506,8 +525,10 @@ func _start_adventure() -> void:
adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct())
# 永久强化注入(元进度实现批):冒险开始参数面——meta 现算 override 显式传参(全零 = 白板)
# 首次冒险脚本(关卡节点图生成 v0.4):存档布尔位 false = 全关固定模板 0(教学重放);置位后逐关抽签
# 迭代 19 卡⓪①——同调三键随开局下传(build_adventure_params 统一构造,与营地投影同源)
var first_script: bool = not save_manager.is_first_adventure_done()
if not adventure.start_adventure(seed_val, {"hero_override": meta.hero_override() if meta != null else {}, "first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"}):
if not adventure.start_adventure(seed_val, build_adventure_params(save_manager, meta,
{"first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"})):
_fatal_screen("冒险启动失败——见输出日志")
return
@@ -516,9 +537,14 @@ func _start_adventure() -> void:
# 停点前移批 2026-09-23:本回调返回后才有 choices_presented 到达——入口选路层随即弹出)
func _on_adventure_level_started(level_index: int, display_name: String) -> void:
runner = adventure.runner()
# 迭代 19 卡⓪②——开场行改传当前生效值(runner.effective_atk/effective_max_hp 与战斗面板同源:
# 表值+永久强化 flat+加算区 flat 后乘调试浮窗 pct,本回调时点 runner 已带全部加成);「含面板加成」
# 后缀判断同步改认局外加成——永久强化 atk/max_hp flat 或调试浮窗 pct 任一存在才带,白板局不带
var ov: Dictionary = meta.hero_override() if meta != null else {}
log_view.append_bb(Narrator.level_open_line(display_name, int(adventure.master_seed),
int(db.hero.atk), int(db.hero.max_hp),
debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0))
runner.effective_atk(), runner.effective_max_hp(),
int(ov.get("atk", 0)) > 0 or int(ov.get("max_hp", 0)) > 0
or debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0))
func _reset_run_scope() -> void: