From 32fdf957fd32cadd481670507c083a8dbf57cc7d Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 19 Oct 2026 02:52:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E4=BB=A3=E7=A0=81=E6=9C=AF=E8=AF=AD):?= =?UTF-8?q?=20=E5=8D=A1=E2=91=A0=20flag=E2=86=92seal=20=E5=85=A8=E6=97=8F?= =?UTF-8?q?=E6=8D=A2=E4=BB=A3=EF=BC=8Bgame/=20=E7=A6=81=E7=94=A8=E8=AF=8D?= =?UTF-8?q?=E6=B8=85=E6=89=AB=EF=BC=88=E8=BF=AD=E4=BB=A3=2031=20=E5=8D=A1?= =?UTF-8?q?=E2=91=A0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 标识符面:flag_*→seal_ 族(含 Godot 信号 flag_judged→seal_judged 与连接/回调同名、 FACTS 两键 flags_count→seals_count/dug_under_flag→dug_under_seal 全链、 .tres 键名与 schema .gd 同批同步);显式豁免零改动=size_flags_*(Godot 布局属性)+_fatal_flag。 中文面:金币→GP(金币袋→GP 袋)/插旗→封印/雷格→危险格/惩罚格→危险格/旗→封印·封印印记族, game/ 内 *.gd/.tres/.md/.json 四类禁用词与 flag 双双零命中(V1/V4)。 守卫字面量不动(被检查的禁字不是使用):smoke_all V21 零「雷/旗」检查面、 ui_font_asset_test 字形集攻/雷/旗/封 保持原断言逻辑。 代拍板:板面单字槽 glyph「旗」→「封」(禁字纪律+单字位宽,消费面四处同名随动)。 素材换代(2026-10-18 用户裁案甲):assets/art/board/flag_seal.png→seal_mark.png(素材不入 git, 盘上改名+导入重刷),代码两处 res:// 字符串+COL_FLAG/CURSOR_FLAG 常量同步, 闸件四处随批(run_all_gates.sh/render_gate.sh/golden_baseline_refresh.sh/path_check.py)。 anchor.json 键名手改,重锚与改前改后 diff 随本卡收口(同裁案甲)。 基线读数(改前,主区 ed2dfaf6):冒烟 1151 检查 0 失败/单元 34 套全绿/探针 --click 存量红仅 screen_flow_probe(user:// 断点污染在册已知项)。 改后同批读数(本 worktree):冒烟 1151 检查 0 失败/探针 --click 同一存量红、其余全绿。 --- game/README.md | 56 +-- game/core/action_economy.gd | 12 +- game/core/battle_orchestrator.gd | 88 ++-- game/core/board_data.gd | 2 +- game/core/board_generator.gd | 2 +- game/core/config_db.gd | 4 +- game/core/config_db_cross_validator.gd | 6 +- game/core/damage_controller.gd | 4 +- game/core/effect_engine.gd | 30 +- game/core/level_runner.gd | 4 +- game/core/minesweeper_rules.gd | 142 +++--- game/core/reward_economy.gd | 2 +- game/core/settlement/grant_segment.gd | 104 ++--- game/core/status_container.gd | 2 +- game/core/treasure_items.gd | 2 +- game/core/unit_container.gd | 2 +- game/data/schemas/action_economy_table.gd | 10 +- game/data/schemas/adventure_table.gd | 4 +- game/data/schemas/reward_table.gd | 2 +- game/data/schemas/settlement_table.gd | 8 +- game/data/schemas/treasure_item_table.gd | 6 +- game/data/schemas/variation_table.gd | 2 +- game/data/tables/action_economy.tres | 12 +- game/data/tables/feats.tres | 34 +- game/data/tables/reward.tres | 8 +- game/data/tables/settlement.tres | 8 +- game/data/tables/status_effects.tres | 2 +- game/data/tables/treasure_items.tres | 6 +- game/presentation/battle_narrator.gd | 4 +- game/presentation/camp_shop_presenter.gd | 6 +- .../presentation/curio_interact_controller.gd | 2 +- game/presentation/hud_presenter.gd | 4 +- game/presentation/main.gd | 10 +- game/presentation/row_pacer.gd | 6 +- game/presentation/ui_assembler.gd | 2 +- game/presentation/views/ap_bar_view.gd | 6 +- game/presentation/views/battle_end_overlay.gd | 22 +- game/presentation/views/battle_log_view.gd | 6 +- game/presentation/views/board_cell_unit.gd | 34 +- game/presentation/views/board_fx_view.gd | 10 +- game/presentation/views/board_view.gd | 64 +-- .../views/cell_type_glow_layer.gd | 4 +- game/presentation/views/curio_pick_overlay.gd | 4 +- game/presentation/views/legend_overlay.gd | 10 +- game/presentation/views/level_map_screen.gd | 4 +- game/presentation/views/shop_overlay_view.gd | 10 +- game/presentation/views/standee_body.gd | 2 +- game/presentation/views/status_slot_row.gd | 2 +- game/presentation/views/toast_stack.gd | 2 +- game/presentation/views/ui_kit.gd | 10 +- game/smoke/adventure_monte_carlo.gd | 12 +- game/smoke/auto_player.gd | 42 +- game/smoke/board_shot_probe.gd | 6 +- game/smoke/fx_probe.gd | 10 +- game/smoke/fx_shot_probe.gd | 2 +- game/smoke/level_autoplay.gd | 58 +-- game/smoke/screen_flow_probe.gd | 16 +- game/smoke/smoke_all.gd | 408 +++++++++--------- game/smoke/type_glow_shot_probe.gd | 6 +- game/smoke/ui_click_probe.gd | 68 +-- game/smoke/ui_contrast_probe.gd | 2 +- game/smoke/ui_input_probe.gd | 68 +-- game/smoke/ui_probe.gd | 4 +- game/tests/evidence/parity/anchor.json | 240 +++++------ game/tests/run_all.gd | 2 +- game/tests/smoke/critical-paths.md | 4 +- game/tests/unit/core/board_generator_test.gd | 2 +- game/tests/unit/core/effect_words_t1_test.gd | 4 +- game/tests/unit/core/feat_vouchers_test.gd | 2 +- .../tests/unit/core/minesweeper_rules_test.gd | 18 +- game/tests/unit/core/treasure_effects_test.gd | 16 +- game/tests/unit/core/treasure_items_test.gd | 2 +- game/tests/unit/core/tree_rules_v11_test.gd | 4 +- .../unit/presentation/hud_presenter_test.gd | 2 +- .../unit/presentation/reward_overlay_test.gd | 4 +- tools/golden_baseline_refresh.sh | 2 +- tools/path_check.py | 2 +- tools/render_gate.sh | 2 +- tools/run_all_gates.sh | 2 +- 79 files changed, 899 insertions(+), 899 deletions(-) diff --git a/game/README.md b/game/README.md index 7c1bda05..0e5cdc3e 100644 --- a/game/README.md +++ b/game/README.md @@ -56,7 +56,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a - **v1 在范围内**:D2(10 表 + ConfigDB + RngService)· A1(single_subset 求解器 + 双判据验收)· A2 · A3(AP8/RAP)· A4(迷雾,L2)· B1(七段结算 + 13 类行协议 + 高光双落)· B2(grub/ambusher/伏击池 cap4)· B3(四行状态容器)· B4(install 预分配/F5 保底/道具窗口)· D1-lite 程序化呈现 - **v2 追加**:LevelTable(线性节点链数据表)· C1-lite 关卡推进器 `level_runner.gd`(原 c1_level_runner,2026-09-11 领域命名批更名)(关卡域生命周期:共享 B4 关内延续 + HP 跨战斗携带 + 奖励/恢复节点兑付 + 关卡末清库)· Boss 遭遇行(Dmax=4)· 节点奖励 API(B4 `grant_node_active`)· **测试用角色数值调整板**(atk%/hp% 覆盖 + 批量模拟,模拟天赋树——正式侧归 C4) -- **裁剪不变**:A5 / C1 路径分支选择(用户拍板线性)· C2–C4 / B5 战斗动画 / D3–D6 / A1 黄金向量与 F4 批量工具 / gdUnit · 注:标错惩罚(原 A2 OQ1)已于 2026-09-12 批上线(标空旗三选一确定性反噬:暴走 / 伏击 +2 层 / 失衡,坐标×板序号派生、不走随机流),本批(2026-09-15)已收编进现行文档,不再属裁剪项 +- **裁剪不变**:A5 / C1 路径分支选择(用户拍板线性)· C2–C4 / B5 战斗动画 / D3–D6 / A1 黄金向量与 F4 批量工具 / gdUnit · 注:标错惩罚(原 A2 OQ1)已于 2026-09-12 批上线(标空封印三选一确定性反噬:暴走 / 伏击 +2 层 / 失衡,坐标×板序号派生、不走随机流),本批(2026-09-15)已收编进现行文档,不再属裁剪项 ## 2026-09-11 可选类供给控制器(用户拍板批——修改记录) @@ -110,7 +110,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a 5. **属性覆盖 = 测试专用**:调整板直接写运行时 HeroTable(atk 域 [1,999] 内 clamp ≥1);关卡结束/回菜单恢复基线。正式天赋树归 C4,禁止生产代码引用本机制。 6. **UI 复用 b1 引用**:关卡模式下呈现层 `b1 = runner.b1`(与调试模式共用 HUD/棋盘路径);runner 在关卡结束置 `b1 = null`。 7. **runner 信号时序(playtest 缺陷①修复登记)**:`node_entered` 必须先于 `begin_battle` 发出——后发时首板安装的 `board_changed` 到达呈现层时 `b1` 尚未接手,首战棋盘不渲染。场景级探针 `smoke/ui_probe.tscn` 为该缺陷的回归断言载体。 -8. **A2 旗动作末点 AP 软锁(playtest 缺陷②修复登记——A2 核心 bug,v1 即存在)**:`_do_flag_place/_do_flag_pull` 花完末点 AP 后 A3 相位翻 Waiting 但不发 round_end——B1 的 Waiting 结算点依赖 round_end 到达,事件缺席 = 整局软锁(Boss 图插旗多,末点 AP 花在旗上即触发)。修复 = 旗动作检查相位翻转并补发 `_emit_round_end_flags_and_payload()`(与 `_do_dig` 同款)。v1 冒烟盲区根源:自动玩家不用旗。回归断言入 smoke_all(旗动作耗尽 AP 必须进入第 2 轮)+ 行为探针 `smoke/ui_click_probe.tscn`(合成鼠标事件走真实 UI 路径,随机混合插旗/拔旗/停手/窗口刷新/无效点击,4 种子全关通扫)。**正式侧义务**:A2 GDD F4 事件序契约须补"旗动作路径的 round_end 发射"措辞(接口漂移)。 +8. **A2 封印动作末点 AP 软锁(playtest 缺陷②修复登记——A2 核心 bug,v1 即存在)**:`_do_seal_place/_do_seal_pull` 花完末点 AP 后 A3 相位翻 Waiting 但不发 round_end——B1 的 Waiting 结算点依赖 round_end 到达,事件缺席 = 整局软锁(Boss 图封印多,末点 AP 花在封印上即触发)。修复 = 封印动作检查相位翻转并补发 `_emit_round_end_seals_and_payload()`(与 `_do_dig` 同款)。v1 冒烟盲区根源:自动玩家不用封印。回归断言入 smoke_all(封印动作耗尽 AP 必须进入第 2 轮)+ 行为探针 `smoke/ui_click_probe.tscn`(合成鼠标事件走真实 UI 路径,随机混合封印/撤封印/停手/窗口刷新/无效点击,4 种子全关通扫)。**正式侧义务**:A2 GDD F4 事件序契约须补"封印动作路径的 round_end 发射"措辞(接口漂移)。 9. **呈现层固定分区(playtest 缺陷③修复登记)**:侧栏全部动态区(RAP/敌人/增益/库存/悬停状态)固定槽高 + `clip_contents`——悬停文案切换与库存增长不再推挤整体布局(此前"第 N 轮"库存行被挤出视口 + 全 UI 抖动)。区域独立,超长裁剪不回流。 10. **L1 12×12 板生成余量**:D2–D4(及 L2)`max_gen_attempts` 16→24(F2c 24×144=3456 ≤ 16384 合法)——16 次尝试下偶发"重试耗尽接受最优"(best≈0.85–0.87 < target 0.88);24 次后仍偶发(best 0.866),密度×推理率的根本解归 C3。 11. **道具使用后不消失(playtest 缺陷④修复登记——UI 层契约违例)**:B1 窗口选择契约 = `_window_items` **位置**(义务④"选定序"),UI 选用按钮却传 `item.index`(库存数组句柄)——未消耗过时二者巧合相等;一旦消耗过一件,已耗条目仍占库存数组位,后续窗口条目"句柄 = 位置 + 已耗数"错位 → 选中件不消耗、邻件被误耗(可用次数语义本身存在且正确:`use()` 一次性标记 Used 不可逆)。修复 = UI/行为探针一律传窗口位置;探针加"选用必生效"断言(选用件库存态变 Used,失效即退出码非零)。 @@ -216,11 +216,11 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a **试玩反馈(v2 数值)**:满血全通关(三策略均通)/ Boss 血量 OK 或可上调 / 刷新零使用 / 零弃图倾向 / 治疗包零使用 / DND 命名指令(地精/熊地精/食人魔酋长)。 -**v3 数值批**:atk 4/4/6/4/7 → **7/5/9/6/9**(承伤主杠杆);D0 goblin 24 保持(20 会被首轮粉尘秒杀——冒烟旗回归断言抓获)、D1 群 13×2、D2 bugbear 40/9、D3 群 26×2、**Boss ogre_chief 150/9**(用户拍板可上调);L2 锚行同步。**DND 命名**:goblin 地精 → bugbear 熊地精(DND 原型即伏击手)→ ogre_chief 食人魔酋长;enemy_id 同步更名。 +**v3 数值批**:atk 4/4/6/4/7 → **7/5/9/6/9**(承伤主杠杆);D0 goblin 24 保持(20 会被首轮粉尘秒杀——冒烟封印回归断言抓获)、D1 群 13×2、D2 bugbear 40/9、D3 群 26×2、**Boss ogre_chief 150/9**(用户拍板可上调);L2 锚行同步。**DND 命名**:goblin 地精 → bugbear 熊地精(DND 原型即伏击手)→ ogre_chief 食人魔酋长;enemy_id 同步更名。 **v3 扫描对照 F5**:基线 **60%**(带 40–60% 上沿 ✓,v2 80%)· 败北 4/6 集中 Boss(压迫预期兑现)· +50%→87% / +100%→93% / +200%→100%(天赋曲线成立)· 承伤 90(v2 80)。C3 GDD 回写:F3 带 [0.5,1.1](OQ2 裁决)、OQ2/3/4/6 试玩读数、试玩批次记录。 -**冒烟 103/103**(旗回归断言改用 Boss 行——D0 20HP 级被盲挖粉尘秒杀无法承载场景;DifficultyTable 断言对齐 v3 行值)。**下一批 = v3 真人试玩**(OQ3 定量/OQ2 终裁)。 +**冒烟 103/103**(封印回归断言改用 Boss 行——D0 20HP 级被盲挖粉尘秒杀无法承载场景;DifficultyTable 断言对齐 v3 行值)。**下一批 = v3 真人试玩**(OQ3 定量/OQ2 终裁)。 ## 2026-09-12 遭遇随机化(Roguelike 局感引入批——Peglin 对比报告落地项) @@ -238,7 +238,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a ## 2026-09-12 攻击类型 × 护甲克制批(用户拍板——三段伤害 + 标错惩罚落地) -**触发**:设计会话(本日)定稿"怪物护甲类型(轻甲/魔法护甲/重甲)× 角色伤害三段构成(普通/穿刺/魔法)"的克制对策系统(穿甲弹/高爆弹式三角)+ 标错旗随机惩罚。(本段写于 2026-09-12,原文使用位置名 无甲/护甲A/护甲B 与 基础/伤害A/伤害B——2026-09-15 命名统一批已全仓改为语义名,映射见下方该批小节。)设定表经用户多轮审阅确认"没有问题"后落程序(GDD 正式修订另批进行——本批以表格结论为实现依据)。 +**触发**:设计会话(本日)定稿"怪物护甲类型(轻甲/魔法护甲/重甲)× 角色伤害三段构成(普通/穿刺/魔法)"的克制对策系统(穿甲弹/高爆弹式三角)+ 标错封印随机惩罚。(本段写于 2026-09-12,原文使用位置名 无甲/护甲A/护甲B 与 基础/伤害A/伤害B——2026-09-15 命名统一批已全仓改为语义名,映射见下方该批小节。)设定表经用户多轮审阅确认"没有问题"后落程序(GDD 正式修订另批进行——本批以表格结论为实现依据)。 **拍板结构 → 落点**: @@ -248,15 +248,15 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a | 伤害单分量(2026-09-19 充能退役) | ~~B1 三分量~~ 主角攻击 = 单一基础分量:量 = atk(表值)、类型 = hero.attack_type(营地换型 = 改字段);hero_attack 行携带实际攻击类型键 + roll/ac/tier 掷点读数(P2 归因)。**攻击类型是伤害的属性轴,与来源无关**(2026-09-15 抽象分离批纪律保留) | | ~~充能供给~~(2026-09-19 退役) | SettlementTable 字段 `charge_grants` 已删除——挖掘攒弹药的第二伤害供给取消,克制应对 = 冒险前配型(hero.attack_type)+ 棋盘火力(穿刺弹/魔法矢直伤道具) | | 克制矩阵:克制 ×150 / 中性 ×100 / 被克 ×50 | SettlementTable 新字段 `armor_effectiveness`({normal,pierce,magic}×{light,ward,heavy} percent,缺项回退 100)——刀/AOE/清图奖励**恒定表值不吃克制**(道具=万能稳定伤害,暂定待拍板) | -| 标错旗 → 随机轻惩罚三选一(时效 1 结算) | `_apply_miss_backlash()`:① `enrage` 暴走(敌 +25% 进 enemy_output 池)② 敌方伏击 +2 层(复用 ambush 行)③ `off_guard` 失衡(我方 +25% 进 hero_defense 池 = 多挨打);新 B3 行 ×2(dur=1 与 weaken/ambush 同款先兑付后衰减);沿用 `_flag_miss_seen` 每雷格实例一次去重 | +| 标错封印 → 随机轻惩罚三选一(时效 1 结算) | `_apply_miss_backlash()`:① `enrage` 暴走(敌 +25% 进 enemy_output 池)② 敌方伏击 +2 层(复用 ambush 行)③ `off_guard` 失衡(我方 +25% 进 hero_defense 池 = 多挨打);新 B3 行 ×2(dur=1 与 weaken/ambush 同款先兑付后衰减);沿用 `_seal_miss_seen` 每危险格实例一次去重 | | 随机载体 | **零新流确定性派生**:(x×7 + y×13 + 板序号×5) mod 3——同种子可回放、不扰动既有三条封闭流取号序;正式侧候选 = RngService 新增封闭流(待拍板) | | 呈现 | 敌人卡环点行常驻护甲标签(轻甲/魔法护甲/重甲——克制对策可读前提)· 结算明细主角攻击行拆"(普通 X + 穿刺 Y + 魔法 Z)" · 反噬效果行入明细流 · settlement_snapshot 增 armor/charge 字段(JSONL 数值分析面) | **数值全部 provisional 待拍板/调参**(登记于 enemy.tres / settlement.tres 注释):~~charge_grants~~(2026-09-19 退役)· ~~矩阵 150/100/50~~(加法核 +1/0/−1 换装)· enrage/off_guard 25% · 伏击 +2 层 · 护甲映射 goblin/bugbear/ogre——C3 调参时按 F6 供给平衡式复算(三段充能是新增伤害供给,裸装败北/基线通关率两条冒烟路径已复验仍成立)。 -**正式侧义务(GDD/registry 修订清单,待文档批)**:B2 GDD(EnemyTable armor_type 字段 + schema)、B1 GDD(F3 主角攻击三分量构成 + flag_miss 反噬编排 + 克制矩阵载体)、B3 GDD(六行 MVP 状态表 + source_class flag_miss 授予)、A2 OQ1(标错惩罚候选升级为三选一随机池 + 重复性口径=每雷格实例一次)、registry(enemy/settlement_table/status_effect 条目 + A3 条款②锚与条款③不等式重推导——标中旗收益从纯 weaken 变"weaken+魔法 充能")、C3(数值 provisional 接管)。lore 侧:`design/research/lore-nest-metaphor-2026-09-12.md`(穿刺=地利/魔法=封印暴露、反噬=封印失败——待新会话拍板后写回 game-concept)。 +**正式侧义务(GDD/registry 修订清单,待文档批)**:B2 GDD(EnemyTable armor_type 字段 + schema)、B1 GDD(F3 主角攻击三分量构成 + seal_miss 反噬编排 + 克制矩阵载体)、B3 GDD(六行 MVP 状态表 + source_class seal_miss 授予)、A2 OQ1(标错惩罚候选升级为三选一随机池 + 重复性口径=每危险格实例一次)、registry(enemy/settlement_table/status_effect 条目 + A3 条款②锚与条款③不等式重推导——封印命中收益从纯 weaken 变"weaken+魔法 充能")、C3(数值 provisional 接管)。lore 侧:`design/research/lore-nest-metaphor-2026-09-12.md`(穿刺=地利/魔法=封印暴露、反噬=封印失败——待新会话拍板后写回 game-concept)。 -**验证**:冒烟 **161/161**(+12:护甲快照三档传播 / 克制矩阵三行表值 / hero_attack 行三分量字段〔全战斗回放 ×2〕/ 标错旗 flag_miss+反噬效果行 / 标中雷充能进主角攻击 / 反噬派生同种子回放)· ui_probe PASS · ui_tune_probe PASS · ui_click_probe(done=true、选用失效=0、问题=0)。 +**验证**:冒烟 **161/161**(+12:护甲快照三档传播 / 克制矩阵三行表值 / hero_attack 行三分量字段〔全战斗回放 ×2〕/ 标错封印 seal_miss+反噬效果行 / 标中雷充能进主角攻击 / 反噬派生同种子回放)· ui_probe PASS · ui_tune_probe PASS · ui_click_probe(done=true、选用失效=0、问题=0)。 ## 2026-09-12 战斗屏五区改造批(battle.md 落地——ui-programmer 批) @@ -264,7 +264,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a **五区布局**(1280×800 基座):A 区 28px 顶栏关卡进度条(`level_strip_view.gd` 改造:暗金已过/奖励金当前高亮);B 区 252px 战斗画面(`battle_stage_view.gd` 新建 = `hero_card_view.gd` + 轮次·阶段指示 + 兑现演出区 + `enemy_card_view.gd` ×1–3〔顺位徽标/意图徽标常驻/环点拍数/伏击共享池/死亡灰化+碎裂残位禁瞬消〕+ 底部结算明细带);C 区 240px `hero_info_panel_view.gd`(直角细线数据框 + 修正来源角标 + RAP 点阵 + `status_slot_row.gd` ×4〔形状+色相双通道/层数角标/剩余结算点/悬停 tooltip 来源+语义+剩余/空态槽隐藏〕);D 区 `board_zone_view.gd`(`ap_bar_view.gd` 44px〔AP 点阵+停手居左;图例+弃图刷新居右——确认 chips 异位 pattern 7〕+ `board_view.gd` 改造〔悬停三语义自绘光标/目标格边框/BFS 路径蓝点预览/可挖域 8 向呼吸微光/奖励徽章 R₀ 域外/去饱和 shader〕+ `toast_stack.gd` 2.5s 消退 + `board_fx_view.gd` 演出层)+ `desaturation.gdshader`(去饱和+金橙偏移、明度不变);E 区 280px `inventory_panel_view.gd`(常读列表固定槽高 + 原位窗口态 pattern 2/8:描边金光/标题切换/时机指示/usable_now 禁选+原因/跳过/政策注记;属性简述投影、来源不呈现)。**旧 `hud_view.gd` 删除**(HUDView 职责由 B/C/D 三区视图承接)。 -**全屏 States 与模态**:`legend_overlay.gd`(图例,状态槽空态说明)/ `settlement_review_overlay.gd`(明细回看)/ `battle_end_overlay.gd`(胜=金蜡封落于棋盘中央+判定行+回看入口;败=暮蓝 #5A6C8C+旗化光点收回)——统一模态登记序管理(`_open_modal` 打开时显式隐藏上方遮挡层,缺陷⑤纪律)。清图金粒喷泉+彩纸 / 完美排雷金光带+横幅 / 标中旗加重弹道 / Boss 紫赤影子爬棋盘 / 零合法板诚实 toast / chord·非相邻一次性提示(每 run 去重,`ux_hint_shown` 遥测)。**发现并修复历史 quirk**:TunePanel 默认 `visible=true` 靠被不透明开始层遮蔽的树序巧合——已显式初始化 false(缺陷⑤家族)。 +**全屏 States 与模态**:`legend_overlay.gd`(图例,状态槽空态说明)/ `settlement_review_overlay.gd`(明细回看)/ `battle_end_overlay.gd`(胜=金蜡封落于棋盘中央+判定行+回看入口;败=暮蓝 #5A6C8C+封印化光点收回)——统一模态登记序管理(`_open_modal` 打开时显式隐藏上方遮挡层,缺陷⑤纪律)。清图金粒喷泉+彩纸 / 完美排雷金光带+横幅 / 封印命中加重弹道 / Boss 紫赤影子爬棋盘 / 零合法板诚实 toast / chord·非相邻一次性提示(每 run 去重,`ux_hint_shown` 遥测)。**发现并修复历史 quirk**:TunePanel 默认 `visible=true` 靠被不透明开始层遮蔽的树序巧合——已显式初始化 false(缺陷⑤家族)。 **遥测**(playtest_logger 增 ux 行族,呈现层观测不改 core):`ux_round_input_ratio`(原始输入:AP 消耗,快照驱动)/ `ux_round_exit{path_tag}`(快照 round_facts.path——呈现层只订 B1 的接线纪律下唯一合法源)/ `ux_refresh_attempt{result, round_refresh_index}` / `ux_window_choice` / `ux_reject{source, sub_reason}` / `ux_hint_shown{hint_id}`。 @@ -312,7 +312,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a | # | 项 | 修复 | |---|---|---| | E1 | **B1 协作对象全公开 → 呈现层链式穿透**(`b1.b2.hero`、`b1.a3.phase` 式层层下钻 main×18 / presenter×15 处) | a1/b2/b3/b4 私有化(a2/a3 保留公有 = 架构文档 API Boundaries 的 D1 契约面);新增 `presentation_snapshot()`(载荷 schema 头注成文)/`is_battle_live()`/`stock_count()`/`query_reward_identity()` 四个成文只读出口——diagnostic_snapshot 同款模式 | -| E2 | **A2 状态字典公开且被视图绕过查询面直读**(board_view:278/303 直读 `.revealed`,头注自称"只读查询面"自相矛盾) | `board/revealed/flags` 私有化;新增 `current_board()`/`reveal_record()` 查询面;B1/组合根/探针全部改走命名面 | +| E2 | **A2 状态字典公开且被视图绕过查询面直读**(board_view:278/303 直读 `.revealed`,头注自称"只读查询面"自相矛盾) | `board/revealed/seals` 私有化;新增 `current_board()`/`reveal_record()` 查询面;B1/组合根/探针全部改走命名面 | | E3 | **B2 裸字典容器公开**(`hero/enemies` 可被任意写;presenter 为死亡残位直读原始数组) | 私有化 + `hero_unit()`/`all_enemies()`(含死亡残位,句柄语义与 query_alive 同构)投影面;presenter 残位渲染需求收进 API | | E5 | **"只读"字段仅靠纪律**(phase/ap/rap/last_round_end/master_seed 架构文档定只读,实际公开可变) | getter-only 属性 + 下划线后备字段(外部读法 `a3.phase` 不变,写入仅剩方法通道——GDScript 层面机制化) | @@ -392,12 +392,12 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a ## 2026-09-14 完美策略档测量批(OQ7 技能轴上界仪——用户拍板"增加完美策略档测试验证",零玩法数值变更) -**背景**:用户(扫雷强玩家)指出"完全正确开图/标雷、零踩雷 ⇒ 存活无压力"——现行扫描只有弱策略基线档(不标旗/邻格盲挖/朴素选道具),技能轴不可测;registry `calibration_gap`(真人显著强于模拟者)此前只有方向无机制。本批 = 测量工具批。 +**背景**:用户(扫雷强玩家)指出"完全正确开图/标雷、零踩雷 ⇒ 存活无压力"——现行扫描只有弱策略基线档(不封印/邻格盲挖/朴素选道具),技能轴不可测;registry `calibration_gap`(真人显著强于模拟者)此前只有方向无机制。本批 = 测量工具批。 **落地变更**: -- `auto_player.gd` 增完美策略求解器(`perfect_action`/`_deduce`):single + subset 推理不动点(A1 F1 `measure_inferability` 同族规则集,**去 safe_set oracle**——约束未知邻格含雷格,比生成期闸保守);**零盲挖**(只挖已证安全格 = 构造保证零踩雷,扫描末断言兜底违例 quit(1))· **已证雷格全标旗**(旗先于挖——轮末 weaken + 魔法 首次充能,雷上旗不阻连锁)· 卡死且资源可 → `b1.player_request_refresh()` 轮内刷新 · 否则停手(残 AP 1:1 入 RAP)。输入只经 A2 查询面(reveal_record/is_revealed/has_flag),**禁读棋盘雷区真值**——测推理上界,非全知作弊。core 层零改动; +- `auto_player.gd` 增完美策略求解器(`perfect_action`/`_deduce`):single + subset 推理不动点(A1 F1 `measure_inferability` 同族规则集,**去 safe_set oracle**——约束未知邻格含危险格,比生成期闸保守);**零盲挖**(只挖已证安全格 = 构造保证零踩雷,扫描末断言兜底违例 quit(1))· **已证危险格全封印**(封印先于挖——轮末 weaken + 魔法 首次充能,雷上封印不阻连锁)· 卡死且资源可 → `b1.player_request_refresh()` 轮内刷新 · 否则停手(残 AP 1:1 入 RAP)。输入只经 A2 查询面(reveal_record/is_revealed/has_seal),**禁读棋盘雷区真值**——测推理上界,非全知作弊。core 层零改动; - `window_selection` 增 `heal_no_waste` 选项(缺口 < 治疗量不用;完美档启用)+ 完美档轮次门解除(round_gate=0); -- `level_autoplay.gd` 增 `policy` 参数(默认 "normal"——tune_sim_controller/defense_scan/level_debug 既有调用零改动);完美档经 `policy="perfect"` 由 `_decide_act` 分派承载(原专职驱动 `_autoplay_battle_perfect` 已随样板收口并入分派——move/dig/flag 走 A2 settle_batch、refresh 走 B1 编排、连续拒绝 ≥3 停手防死循环);st 增 `mine_hits`/`refreshes` 计数(mine_hit 证据行埋点); +- `level_autoplay.gd` 增 `policy` 参数(默认 "normal"——tune_sim_controller/defense_scan/level_debug 既有调用零改动);完美档经 `policy="perfect"` 由 `_decide_act` 分派承载(原专职驱动 `_autoplay_battle_perfect` 已随样板收口并入分派——move/dig/seal 走 A2 settle_batch、refresh 走 B1 编排、连续拒绝 ≥3 停手防死循环);st 增 `mine_hits`/`refreshes` 计数(mine_hit 证据行埋点); - `level_monte_carlo.gd` 增第 3 CLI 参 `[policy]`(normal/perfect/both,缺省 normal 兼容既有文档命令)+ 策略/踩雷/刷新列;脚注 F5 带文案同步 [30,50] 带锚定稿。 **完美档基线(N=30 · 种子 4200–4229 · 耗时 597.6s)**:**0 加成通关率 100%**(弱策略基线档 60%)、通关剩余 HP 均 **47.4/50**、整关承伤均 3.5(p90 18.0)、普通场承伤 0.5%(带 ≤20%)、Boss 场 5.3%(带 ≤50%)、踩雷 0.00/局(断言 ✓)、刷新 0.23/局、跳战率 20%。+50%~+200% 全档位恒 100% 满血通关(+200% 承伤均 0.4)——**技能轴上界完全碾压现行曲线:F5 带与 F6 S/K 区间对完美档零分辨力**(区间模型无策略水平轴的结构性证实;calibration_gap 获得机制解释与定量上界)。 @@ -418,7 +418,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a **实测(N=30,种子 4200–4229)**: - 奖励侧单独:完美档 0 加成 **100%**(承伤 3.5——与区间前逐值一致);基线档 17%(不变); - 敌方侧叠加:完美档 0 加成仍 **100%**(承伤 3.5→3.9 / p90 18→19——方差真实流动但被血缓冲全吞);剩余 HP 均 47.4 不变; -- **验收结论:≤40% 线用数值区间杠杆族到不了**——完美玩家结构性优势(零踩雷 = 零直伤 + 全标旗 = weaken −65% 顶格 + 快杀 = 敌出手次数最少)不受值域方差影响。三选待裁决:①承伤硬地板(每结算不可减免平伤——S_min 压缩,B1/B2 域);②weaken 饱和/递减语义(拆"全标旗顶格"基石,B3/B1 域);③极端宽度(数值可用但毁基线档与可读性锚——建议否决)。**本批区间机制保留**(对普通玩家方差体验有效,中点锚不伤当量)。 +- **验收结论:≤40% 线用数值区间杠杆族到不了**——完美玩家结构性优势(零踩雷 = 零直伤 + 全封印 = weaken −65% 顶格 + 快杀 = 敌出手次数最少)不受值域方差影响。三选待裁决:①承伤硬地板(每结算不可减免平伤——S_min 压缩,B1/B2 域);②weaken 饱和/递减语义(拆"全封印顶格"基石,B3/B1 域);③极端宽度(数值可用但毁基线档与可读性锚——建议否决)。**本批区间机制保留**(对普通玩家方差体验有效,中点锚不伤当量)。 **验证**:冒烟 **154/149+5 全绿**(区间批 5 新断言 + 既有全部回归含遭遇骰分布/回放)。 @@ -432,49 +432,49 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a |---|---|---| | 攻击类型(结算表矩阵行键 / hero_attack 行分量) | `normal` / `pierce` / `magic` = 普通 / 穿刺 / 魔法 | `base` / `dmg_a` / `dmg_b` = 基础 / 伤害A / 伤害B | | 护甲类型(`armor_type` / 矩阵列键) | `light` / `ward` / `heavy` = 轻甲 / 魔法护甲 / 重甲 | `none` / `a` / `b` = 无甲 / 护甲A / 护甲B | -| 结算表字段 | `charge_grants`(触发源→{attack_type, per_unit, cap},同日第二批抽象分离后定型) | `damage_a_per_cell` / `damage_a_cap` / `damage_b_per_flag`("类型×来源"焊死命名;同名批曾短暂改 `pierce_per_cell` / `pierce_cap` / `magic_per_flag`,随即作废) | +| 结算表字段 | `charge_grants`(触发源→{attack_type, per_unit, cap},同日第二批抽象分离后定型) | `damage_a_per_cell` / `damage_a_cap` / `damage_b_per_seal`("类型×来源"焊死命名;同名批曾短暂改 `pierce_per_cell` / `pierce_cap` / `magic_per_seal`,随即作废) | | 结算快照 round_facts | `charge_counts`(各触发源计数)+ `charge_points`(按攻击类型分桶点数) | `charge_dmg_a` / `charge_dmg_b`(既有 JSONL 留存文件仍用旧键) | 映射沿教学梯度:goblin `none`→`light`、bugbear `a`→`ward`、ogre_chief `b`→`heavy`;**矩阵数值逐格不动**(pierce→ward 150 / pierce→heavy 50 / magic→heavy 150 / magic→ward 50 / normal 全 100)。 -**同日第二批 · 攻击类型与奖励抽象分离**(用户裁定"攻击类型的定义和格子奖励要分离开;开格|标雷 → 奖励;奖励如何定义是可以修改的;不要将两者绑定"):攻击类型 = 伤害的属性轴(普通 / 穿刺 / 魔法,只决定查甲效矩阵哪一行,定义里不含任何棋盘来源);充能 = 按攻击类型分桶的附加伤害储备,**谁能充、充哪个桶 = 奖励定义**(`charge_grants`;开格 / 标中旗 / 踩雷 / 清图一律只作奖励触发源)。原 `pierce_per_cell` / `magic_per_flag` 式命名(类型与来源焊在一根名字里)作废。冒烟新增三条断言:奖励定义在位 ×2 + 行为断言(把"标中旗"奖励改投穿刺桶 → 同一战斗魔法分量归零;还原后步骤流逐行相同——证明改道唯一入口是奖励定义)。 +**同日第二批 · 攻击类型与奖励抽象分离**(用户裁定"攻击类型的定义和格子奖励要分离开;开格|标雷 → 奖励;奖励如何定义是可以修改的;不要将两者绑定"):攻击类型 = 伤害的属性轴(普通 / 穿刺 / 魔法,只决定查甲效矩阵哪一行,定义里不含任何棋盘来源);充能 = 按攻击类型分桶的附加伤害储备,**谁能充、充哪个桶 = 奖励定义**(`charge_grants`;开格 / 封印命中 / 踩雷 / 清图一律只作奖励触发源)。原 `pierce_per_cell` / `magic_per_seal` 式命名(类型与来源焊在一根名字里)作废。冒烟新增三条断言:奖励定义在位 ×2 + 行为断言(把"封印命中"奖励改投穿刺桶 → 同一战斗魔法分量归零;还原后步骤流逐行相同——证明改道唯一入口是奖励定义)。 **落点**:GDD(战斗结算 v0.5 / 敌人系统 / 难度曲线与Boss / 03-内容规模)+ registry(`enemy.armor_type`、`settlement_table.armor_effectiveness` 与三字段 + 批次注记)+ 切片(`enemy_table.gd` `ARMOR_TYPES`、`settlement_table.gd` `ARMOR_KEYS` / `ATTACK_TYPE_KEYS`〔原 `COMPONENT_KEYS`〕、`enemy.tres`、`settlement.tres`、`damage_math.gd`、`unit_container.gd`、`battle_orchestrator.gd`、`enemy_card_view.gd`〔敌卡常驻标签改 轻甲 / 魔法护甲 / 重甲〕、`battle_log_view.gd`〔拆行文案改"(普通 X + 穿刺 Y + 魔法 Z)"〕、`smoke_all.gd` / `damage_probe.gd` / `auto_player.gd`);playtest 观测记录保留当时键名并附现名。 -**验证(本批实跑)**:冒烟 **201 项检查 0 失败**(含分离批三条新断言:奖励定义在位 ×2 + 行为断言"标中旗奖励改投穿刺桶 → 魔法分量归零、还原后步骤流逐行相同")· `ui_probe` PASS · `ui_tune_probe` PASS · `ui_click_probe`(done=true、选用失效=0、问题=0)· `ui_layout_probe` PASS——四探针 exit=0、FAIL 行 0。命名批纯改名零行为变更;分离批为结构重构,数值链路等价(旧"计数×每单位×克制"与现行"计数→按奖励定义折算点数→×克制"结果相同,冒烟全量回归含回放断言未动)。 +**验证(本批实跑)**:冒烟 **201 项检查 0 失败**(含分离批三条新断言:奖励定义在位 ×2 + 行为断言"封印命中奖励改投穿刺桶 → 魔法分量归零、还原后步骤流逐行相同")· `ui_probe` PASS · `ui_tune_probe` PASS · `ui_click_probe`(done=true、选用失效=0、问题=0)· `ui_layout_probe` PASS——四探针 exit=0、FAIL 行 0。命名批纯改名零行为变更;分离批为结构重构,数值链路等价(旧"计数×每单位×克制"与现行"计数→按奖励定义折算点数→×克制"结果相同,冒烟全量回归含回放断言未动)。 ## 2026-09-15 验收 + 收口批(两批改动闭合核对;零数值零机制改动;不碰 v0.7 文件) **背景**:2026-09-15 两批(攻击/护甲命名统一 v0.5 + 攻击类型/奖励抽象分离 v0.6)已完成;本批只读核对"文档口径 ↔ 切片实现"是否闭合,并收口遗留开口。**范围纪律**:`战斗结算.md` / `地图战斗资源.md` 属 v0.7 格面资源批所有者文件、口径仍在移动——本批不改;③ 收口项落在 `registry` + 本 README + `active.md`,GDD 侧只报告、待 v0.7 批整体收口后回填。 -**核对结论(两批核心语义 9 项全闭合)**:`charge_grants` 键与值(safe_cell→pierce 1/格 cap 8 · flag_hit→magic 2/雷 cap 0)· 甲效矩阵 9 格(normal 全 100 / pierce→ward 150、heavy 50 / magic→heavy 150、ward 50)· `armor_type` 三值(light/ward/heavy)· `hero_attack` 行分量字段(normal/pierce/magic)· round_facts 键(`charge_counts`/`charge_points`)· 敌卡标签文案(轻甲/魔法护甲/重甲)· 明细行拆行文案"(普通 X + 穿刺 Y + 魔法 Z)"· 攻击类型定义不含来源 · 矩阵数值逐格不动——GDD/registry/tres/代码逐项一致。残留旧名扫描仅命中批次注记"原名"与历史观测记录;来源-类型硬绑扫描确认代码只剩两处计数埋点(`_charge_counts["safe_cell"]` / `["flag_hit"]`)+ `charge_grants` 键 + 行 `source_class` 归因。 +**核对结论(两批核心语义 9 项全闭合)**:`charge_grants` 键与值(safe_cell→pierce 1/格 cap 8 · seal_hit→magic 2/雷 cap 0)· 甲效矩阵 9 格(normal 全 100 / pierce→ward 150、heavy 50 / magic→heavy 150、ward 50)· `armor_type` 三值(light/ward/heavy)· `hero_attack` 行分量字段(normal/pierce/magic)· round_facts 键(`charge_counts`/`charge_points`)· 敌卡标签文案(轻甲/魔法护甲/重甲)· 明细行拆行文案"(普通 X + 穿刺 Y + 魔法 Z)"· 攻击类型定义不含来源 · 矩阵数值逐格不动——GDD/registry/tres/代码逐项一致。残留旧名扫描仅命中批次注记"原名"与历史观测记录;来源-类型硬绑扫描确认代码只剩两处计数埋点(`_charge_counts["safe_cell"]` / `["seal_hit"]`)+ `charge_grants` 键 + 行 `source_class` 归因。 **实跑(本批)**:冒烟 **201 项检查 0 失败**;四场景探针 `ui_probe` / `ui_tune_probe` / `ui_click_probe` / `ui_layout_probe` 全部 **exit=0、无 FAIL 行**。 **收口(③,落在非 GDD 文件)**: - ① **收益对照表充能当量覆盖缺口**:登记于本 README + registry + `active.md`(GDD 收益对照表回填待 v0.7 批收口后)。候选口径 = 充能当量 = Σ各桶点数 × 当轮目标护甲平均甲效倍率 ÷ 100(与直伤同类 1 伤害 = 1 当量,守 行动经济 条款①单一当量);补式 / 登记待拍板二选一待回填批裁定。 -- ② **两处已知落差登记**:a) `charge_grants` 触发源可扩展 vs 切片仅两个触发源计数埋点(新增源须加埋点);b) `safe_cell`/`flag_hit` 来源标识跨命名空间同名(明细行 `source_class` / `charge_grants` 键;RewardTable.pool_tag 已随格面资源批改 `cell`)。 +- ② **两处已知落差登记**:a) `charge_grants` 触发源可扩展 vs 切片仅两个触发源计数埋点(新增源须加埋点);b) `safe_cell`/`seal_hit` 来源标识跨命名空间同名(明细行 `source_class` / `charge_grants` 键;RewardTable.pool_tag 已随格面资源批改 `cell`)。 - ③ playtest 观测记录的快照键"现名"注记由中间名订正为现行名 `charge_counts`/`charge_points`。 **注意(口径移动)**:本批运行期间 **v0.7 格面资源批**已在 GDD(战斗结算 v0.7 / 地图战斗资源 v0.4)与 registry 落地——段序七→五、行型 15→10、极性路由取代三套固定兑付、可选类道具删除。切片代码尚未同步(registry 注明"切片代码修改随新会话执行、指导已产出"),故本文以上各历史批次条目保留当时陈述。 -**两轴分离措辞不变**:攻击类型 = 伤害属性轴(定义不含来源);充能 = 按攻击类型分桶的附加伤害储备,投桶归奖励定义 `charge_grants`;开格/标中旗/踩雷/清图只作奖励触发源。 +**两轴分离措辞不变**:攻击类型 = 伤害属性轴(定义不含来源);充能 = 按攻击类型分桶的附加伤害储备,投桶归奖励定义 `charge_grants`;开格/封印命中/踩雷/清图只作奖励触发源。 ## 2026-09-15 格面资源批 · 批 1(数据面 + 极性路由——设计权威 = 地图战斗资源 v0.4 / 战斗结算 v0.7 / 排雷玩法 v0.3 / registry 2026-09-15 条目) -**模型一句话**:格子分 安全|雷|封锁格 三型;每个非封锁格(安全格 + 雷格,雷安同池同分布)装板期一次摇定格面资源类型(五型 attack/defense/heal/blast/weaken);极性不在资源内,由「动作 × 格型」矩阵决定——开安全格/标中雷 = 正向(奖励),开雷格/标错安全格 = 负向(惩罚),标旗后撤旗零兑付;全部兑付在轮末授予段。可选类道具(刀/治疗包)与库存/供给控制器/道具窗口整体删除。 +**模型一句话**:格子分 安全|雷|封锁格 三型;每个非封锁格(安全格 + 危险格,雷安同池同分布)装板期一次摇定格面资源类型(五型 attack/defense/heal/blast/weaken);极性不在资源内,由「动作 × 格型」矩阵决定——开安全格/标中雷 = 正向(奖励),开危险格/标错安全格 = 负向(惩罚),封印后撤封印零兑付;全部兑付在轮末授予段。可选类道具(刀/治疗包)与库存/供给控制器/道具窗口整体删除。 **数据面**: - `reward.tres` 结构性重写(`reward_table.gd` 同批):删 `category`/`use_timing` 字段与 CATEGORIES/USE_TIMINGS 常量;新增 `cell_type`(五型封闭枚举,清单外加载拒绝)× `polarity`(positive/negative)+ `stacks`(可省,缺省 1);`pool_tag` 收窄 {cell, clear_default}。行集 = 十一行:格面池正向五行 attack_up(w20,t2)/defense_up(w16,t2)/spark_aoe(flat 4,w16,t1)/heal_minor(flat [2,6],w15,t1)/weaken(w12,t1) + 负向五行 enrage(attack,t2)/off_guard(defense,t2)/heal_backlash(heal 直伤 flat 4,t1,无 effect_id)/ambush_double(blast 加层 stacks=2,t1,无 effect_id)/sapped(weaken,t1)——负向行 weight=0 纯兑付字典不参与摇号;clear_blast 保留(flat [25,55],w1,t2,clear_default)。加载校验族重写:五型 × 正负两行齐备(缺任一致命)/ cell 池 ≥1 正向行 weight>0 / percent 行 effect_id 必填(悬空校验在 ConfigDB)/ flat 行 power≥1(**例外 = blast 负向加层行,消费 stacks 不消费 power**——战斗结算 兑付形态表"伏击加层"独立形态的行级兑现)/ 区间配对 + 中点锚不变。 - **删除三件**:`core/reward_supply_controller.gd`(可选类供给控制器——首件保证/指数递减整体下线)、`data/schemas/reward_config_table.gd`、`data/tables/reward_config.tres`(RewardConfigTable 随可选类删除废止——注入概率/按板保底参数失义)。 - `status_effects.tres` 六行→七行:新增 **sapped(乏力——weaken 型负向:hero · −25 percent · dur 1 · max_stack 16 · stack**,hero_offense 池,attack_up 镜像;值 provisional 归 难度曲线与Boss)。 -- `settlement.tres`:`segment_order` 七段→五段 [grant, buff_debuff, combat, decay, verdict](schema 冻结常量同步);`effect_pool_map` 增 sapped→hero_offense;`source_label_map` 删 item 键(ConfigDB 必需键清单同步)。`charge_grants` 路径不动(开格→穿刺 1/格 cap8 · 标中旗→魔法 2/雷)。 +- `settlement.tres`:`segment_order` 七段→五段 [grant, buff_debuff, combat, decay, verdict](schema 冻结常量同步);`effect_pool_map` 增 sapped→hero_offense;`source_label_map` 删 item 键(ConfigDB 必需键清单同步)。`charge_grants` 路径不动(开格→穿刺 1/格 cap8 · 封印命中→魔法 2/雷)。 - `config_db.gd`:reward_config 出表清单;跨表校验族重写——旧 ②池空/③clear正当量并入 RewardTable.validate,旧 ④⑤⑨(k_dmg 保底/零伤害后闸/注入池护栏)随 reward_config 删除退役,保留 ①effect_id 悬空 / poolmap 悬空 / source_label_map 键集 / level 节点悬空。 **路由面(core)**: -- `minesweeper_rules.gd`:cell_revealed 事件字段 `reward_eligible` → **`resource`**——initial 恒 false(封锁格),chain/dig 恒 true **含雷格**(雷安同池——旧"mine 恒 false"作废)。 -- `reward_economy.gd` 重写为纯格面资源身份面:roll_board 对全部非封锁格逐一摇定类型(摇号只用正向行权重 = 类型频次,合计 79)+ 清图批尾摇 clear_blast + 区间行 power 追加取号;query_identity 返回 {reward_id, cell_type, tier},未开格恒可查(雷格同权);grant/grant_clear 幂等保持;新增 `polarity_row(cell_type, polarity)`(类型化字典行查询面,拷贝出口)与静默 `is_mapped`/`phase` 只读出口;**删库存轴整族**(stock/use/query_inventory/in_stock_count/clear_inventory/grant_node_active/supply_granted_count/notify_battle_start);equivalence_supply 投影保留(tier_min_buff = 我侧 percent 正向行最低档 = 2)。 -- `battle_orchestrator.gd` 授予段改**极性路由**:结算队列(开格/旗判定/清图三批)逐格兑付——开安全格→该格 cell_type 正向行(charge_grants 计数埋点不变)、开雷格→负向行、标中→该雷格正向行(_flag_consumed 每雷实例一次去重不变,高光 flag_hit 保持)、标空→标旗未中归因行 + 该安全格负向行(_flag_miss_seen 同键去重不变);**删旧三套固定兑付**(`_convert_ambush` 踩雷固定伏击 / `_judge_flag` 标中固定 weaken / `_apply_miss_backlash` 标错三选一哈希派生——整段删除)。负向兑付:percent 走 apply_effect(enrage/off_guard/sapped);heal 负向 = 主角直伤 4(apply_damage,不经增益状态;战斗段增 hero 存活守卫 = 致死短路;同轮后到 heal 正向遇已倒下主角记"奖励未生效"行);blast 负向 = ambush +stacks 层(`_apply_ambush_grant` 逐层经 ambush_grant_plan 对 cap=4 守恒,溢出逐层"溢出未生效"行——协议不变)。正向兑付:percent 挂状态、flat 当场(满层/满血/无敌/主角已倒下记"奖励未生效"行)。抵消过滤既有语义保持(旗判定批以轮末在场旗为基线——发射面过滤,勿改)。区间行快照 power 只在正向路由覆盖表值(负向字典行自带定值 power)。**行型协议 15→10**(删 item/consumed_ineffective/use_rejected/window_open/window_skip),SOURCE_EXEMPT 两层豁免集合同步收窄。 +- `minesweeper_rules.gd`:cell_revealed 事件字段 `reward_eligible` → **`resource`**——initial 恒 false(封锁格),chain/dig 恒 true **含危险格**(雷安同池——旧"mine 恒 false"作废)。 +- `reward_economy.gd` 重写为纯格面资源身份面:roll_board 对全部非封锁格逐一摇定类型(摇号只用正向行权重 = 类型频次,合计 79)+ 清图批尾摇 clear_blast + 区间行 power 追加取号;query_identity 返回 {reward_id, cell_type, tier},未开格恒可查(危险格同权);grant/grant_clear 幂等保持;新增 `polarity_row(cell_type, polarity)`(类型化字典行查询面,拷贝出口)与静默 `is_mapped`/`phase` 只读出口;**删库存轴整族**(stock/use/query_inventory/in_stock_count/clear_inventory/grant_node_active/supply_granted_count/notify_battle_start);equivalence_supply 投影保留(tier_min_buff = 我侧 percent 正向行最低档 = 2)。 +- `battle_orchestrator.gd` 授予段改**极性路由**:结算队列(开格/封印判定/清图三批)逐格兑付——开安全格→该格 cell_type 正向行(charge_grants 计数埋点不变)、开危险格→负向行、标中→该危险格正向行(_seal_consumed 每雷实例一次去重不变,高光 seal_hit 保持)、标空→封印未中归因行 + 该安全格负向行(_seal_miss_seen 同键去重不变);**删旧三套固定兑付**(`_convert_ambush` 踩雷固定伏击 / `_judge_seal` 标中固定 weaken / `_apply_miss_backlash` 标错三选一哈希派生——整段删除)。负向兑付:percent 走 apply_effect(enrage/off_guard/sapped);heal 负向 = 主角直伤 4(apply_damage,不经增益状态;战斗段增 hero 存活守卫 = 致死短路;同轮后到 heal 正向遇已倒下主角记"奖励未生效"行);blast 负向 = ambush +stacks 层(`_apply_ambush_grant` 逐层经 ambush_grant_plan 对 cap=4 守恒,溢出逐层"溢出未生效"行——协议不变)。正向兑付:percent 挂状态、flat 当场(满层/满血/无敌/主角已倒下记"奖励未生效"行)。抵消过滤既有语义保持(封印判定批以轮末在场封印为基线——发射面过滤,勿改)。区间行快照 power 只在正向路由覆盖表值(负向字典行自带定值 power)。**行型协议 15→10**(删 item/consumed_ineffective/use_rejected/window_open/window_skip),SOURCE_EXEMPT 两层豁免集合同步收窄。 - `level_runner.gd`/`debug_session.gd`:共享 地图战斗资源 容器与库存延续语义随库存删除收窄——战斗各自持容器(映射随战斗退役,零跨战斗状态),runner 删 window 转发/inventory()/level_clear 清库/submit_window_selection;奖励点节点内容随功能道具渠道(P1 未定)**悬置为直通节点**(零兑付,node_entered 零载荷——内容归 关卡节点地图 定稿批,**待拍板**);battle_finished 载荷删 remaining_items。 **呈现面**: @@ -483,7 +483,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a **smoke/tools**: - 删 `supply_scan.gd`(可选类供给跨种子扫描——对象已不存在);`_smoke_supply` 整段删除。 -- `smoke_all.gd` 大改(201→211 项):删窗口接线族与窗口锚行段、等待期刷新探针改挂衰减行(结算段内 Waiting 相位刷新必拒);`_smoke_power_interval` 收窄两区间行;`_smoke_damage_types` 标错断言改类型化负向兑付。**新增五段**:`_smoke_reward_identity_unit`(roll 恰一次/query_identity 投影/同格重复 grant 幂等/grant_clear 幂等/退役拒绝)、`_smoke_polarity_routing`(真实流多轮:挖安全格只出正向 + 每格 ≥1 行、挖雷格只出负向、标中正向 origin 指回雷格、标空归因 + 负向同格同批、旗兑付零泄漏)、`_smoke_negative_dictionary`(sapped 数据面在位 + effect_pool_map 收编 + 逐型负向直验:enrage/off_guard/sapped 效果行、heal 直伤 4、blast +2 层与 cap 溢出守恒)、`_smoke_resource_surface`(chain/dig resource 恒 true 含雷格、initial 恒 false、封锁格查询 null、未开雷格可查)、`_smoke_settlement_segments`(segment_order 五段冻结 + 行型封闭零残留 + 逐轮行相位单调 + 衰减/判定恰一段)。 +- `smoke_all.gd` 大改(201→211 项):删窗口接线族与窗口锚行段、等待期刷新探针改挂衰减行(结算段内 Waiting 相位刷新必拒);`_smoke_power_interval` 收窄两区间行;`_smoke_damage_types` 标错断言改类型化负向兑付。**新增五段**:`_smoke_reward_identity_unit`(roll 恰一次/query_identity 投影/同格重复 grant 幂等/grant_clear 幂等/退役拒绝)、`_smoke_polarity_routing`(真实流多轮:挖安全格只出正向 + 每格 ≥1 行、挖危险格只出负向、标中正向 origin 指回危险格、标空归因 + 负向同格同批、封印兑付零泄漏)、`_smoke_negative_dictionary`(sapped 数据面在位 + effect_pool_map 收编 + 逐型负向直验:enrage/off_guard/sapped 效果行、heal 直伤 4、blast +2 层与 cap 溢出守恒)、`_smoke_resource_surface`(chain/dig resource 恒 true 含危险格、initial 恒 false、封锁格查询 null、未开危险格可查)、`_smoke_settlement_segments`(segment_order 五段冻结 + 行型封闭零残留 + 逐轮行相位单调 + 衰减/判定恰一段)。 - `reward_expectation.gd` 重写为类型频次测量(实测收敛权重涌现值 attack 25.3/defense 20.3/blast 20.3/heal 19.0/weaken 15.2%,封锁格泄漏 0);`level_autoplay`/`monte_carlo`/`dump_battle`/`damage_probe`/`level_debug`/`level_monte_carlo`/`ui_probe`/`ui_click_probe`/`ui_layout_probe` 去窗口/库存面。**顺手修**:`monte_carlo.gd` 缺 AutoPlayer preload(HEAD 起即解析失败)已补。 **验证(本批实跑)**:冒烟 **211 项检查 0 失败**(回放断言全量保持——同 master_seed 同意图序列结算步骤流逐行相同);四场景探针 ui_probe / ui_tune_probe / ui_click_probe(PROBE_SEED=7 与 91 双种子)/ ui_layout_probe 全 PASS;工具回归 reward_expectation / monte_carlo / dump_battle / damage_probe(boss) / level_debug / level_monte_carlo(N=5) 零脚本错误。 @@ -551,7 +551,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a ## 2026-10-06 地图伤害账殿后批(案C,用户裁——「主角先手」歧义质询触发;设计权威 = 战斗结算.md v0.26) -**裁决**:每轮结算内三者顺序定死 = ①授予段兑非伤害账(资源/增益/治疗/行动点/GP/警觉)→ ③战斗段「主角先基础攻击 → 敌人按生成序逐个还手 → 地图伤害账殿后」→ ④衰减 → ⑤判定。授予段不再当场兑付任何伤害——全部伤害形态单据(爆裂/直伤/反噬/地形变异/战旗军规/熔火反噬/惊巢反制/魔能共鸣/清障炸药等)暂存,战斗段怪物还手后按授予段事件序补提交统一结账;主角死于敌方还手 → 暂存单整体不兑,逐单留「未生效(主角已倒下)」行(载荷 forfeit=hero_down)。 +**裁决**:每轮结算内三者顺序定死 = ①授予段兑非伤害账(资源/增益/治疗/行动点/GP/警觉)→ ③战斗段「主角先基础攻击 → 敌人按生成序逐个还手 → 地图伤害账殿后」→ ④衰减 → ⑤判定。授予段不再当场兑付任何伤害——全部伤害形态单据(爆裂/直伤/反噬/地形变异/战封印军规/熔火反噬/惊巢反制/魔能共鸣/清障炸药等)暂存,战斗段怪物还手后按授予段事件序补提交统一结账;主角死于敌方还手 → 暂存单整体不兑,逐单留「未生效(主角已倒下)」行(载荷 forfeit=hero_down)。 **切片落点**:`battle_orchestrator.gd` 暂存闸 `_defer_board_damage`/`_deferred_board` + `_submit` 案C 分流(sync 同闸——清图批一致延后)+ `_outcome_of`(暂存单按「将兑付」回报——完美第二份/高光份数依据开单时点事实)+ 授予段四处直提改走闸 + 战斗段末补提交块(死亡守卫+留痕);授予段界 flush 保留(对空队 no-op 防御位);`smoke_all.gd` 行相位分类器换代(damage 恒战斗段/reward_ineffective 按 forfeit 分流)+ 先手断言收紧(「存在或授予段终局」→「必存在」)+ 新增案C 段内序断言(地图账不得先于主角先手或插入敌方还手中间)。 @@ -570,7 +570,7 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/a **结构换代 33→12 节点**:脊柱 2(生命/命中淬炼一线一节点 cap4——攻/护淬炼线随攻防所有权切分砍除,攻唯一入口=锻造工坊武器路线、AC 唯一入口=甲路线)+ 锻造脉 2(forge_workshop 钥匙 free 无前置 + easter_ley 彩蛋〔effects 摘攻/护分量〕)+ 钥石脉 2(秘宝匣/刷新升级)+ 同调脉 6(同调位 1/2/3——socket1 改根节点无前置 + Fork 3 单行双态)。schema 换代:FORK_GROUPS 4→3(fg_mastery 退役)/ RULE_KEYS 2→6 / row 字段退役(行门槛主语=节点第 N 级需全树总投入 ≥4×(N−1))/ requires 只留点亮前置(R1 裁撤案执行)。 -**六键真效果**:开局姿态窗=每关首战首轮(FACTS 扩签 battle_index=关卡域战斗序);危险直觉锋=踩雷减半·守=标错返还 AP(EVENTS 扩签 flag_missed、契约 12 去重闸语义)——两组每关限次(adventure_counters domain=adventure、按关重置);财富之道聚=战斗掉落 GP 入账前×1.5、散=商品购买价×80%(双计价单点,刷新价不折)。数值全 provisional 归 M4。 +**六键真效果**:开局姿态窗=每关首战首轮(FACTS 扩签 battle_index=关卡域战斗序);危险直觉锋=踩雷减半·守=标错返还 AP(EVENTS 扩签 seal_missed、契约 12 去重闸语义)——两组每关限次(adventure_counters domain=adventure、按关重置);财富之道聚=战斗掉落 GP 入账前×1.5、散=商品购买价×80%(双计价单点,刷新价不折)。数值全 provisional 归 M4。 **退役删除**:属性锻造柜台全家(buy_forge/forge_flat/meta_forge_row/forge_products 行族/forge_levels 存档域/营地·暂停层·生涯三投影);migrate_tree 三体系迁移(旧档=tree_struct 标记检测破坏性废弃重置,禁迁移折算);attunement_growth 谓词表(同调位槽位判定源切树点亮数——Q2 裁甲)。 diff --git a/game/core/action_economy.gd b/game/core/action_economy.gd index eef01f4e..f94b90b5 100644 --- a/game/core/action_economy.gd +++ b/game/core/action_economy.gd @@ -34,7 +34,7 @@ var last_round_end: Dictionary[Variant, Variant]: var _settlement_consumed := false # AC-14 门:notify_settlement_done 消费后才受理 round_start var _next_round_mode := "" # 调试观测量(同板续轮 / 换新图) var _pending_ap_delta := 0 # 下轮行动点修正排队(格面资源八型批 2026-09-20——action 型 ±1 排队,轮开始兑现后清零) -# 蓄力流运行态(迭代 12 T5 → 内容数据驱动扩展批 T3 换代:旧 feat_ap_carry/feat_dig_extra 注入旗 +# 蓄力流运行态(迭代 12 T5 → 内容数据驱动扩展批 T3 换代:旧 feat_ap_carry/feat_dig_extra 注入封印 # 退役——转蓄力=round_end grant_ap(mode:transfer) 订阅(finish_round_stop 定夺)、深挖对价=dig_paid # counter_spend 订阅(request_dig 施加面);charge_layers=蓄力层账本) var _charge_layers := 0 @@ -43,7 +43,7 @@ var charge_layers: int: # 效果引擎(内容数据驱动扩展批 T1——dig_paid/charge_full 发射面;round_end 转存决策面) var _fx: EffectEngine = null var _last_stop_ap := 0 # 停手侧剩余 AP 记账(转存决策移至 round_end 发射点——grant_ap(transfer) 订阅定夺) -var _ap_exhausted_last := false # 上轮 AP 耗尽旗(迭代 20 T1——一滴不剩 round_start when 面) +var _ap_exhausted_last := false # 上轮 AP 耗尽封印(迭代 20 T1——一滴不剩 round_start when 面) func set_fx(fx: EffectEngine) -> void: @@ -68,8 +68,8 @@ func _cost(kind: String) -> int: match kind: "dig": return ae.dig_ap_cost # 基础挖格成本恒表值(钻头对价挂付费开掘侧——2026-10-04 缺陷修复) - "flag_place": - return ae.flag_place_ap_cost + "seal_place": + return ae.seal_place_ap_cost "move": return ae.move_ap_cost "chain": @@ -78,7 +78,7 @@ func _cost(kind: String) -> int: return 0 -# 通用扣减(排雷玩法 用于旗动作;挖握走 request_dig——cleared 仲裁需要 clears_map 参数) +# 通用扣减(排雷玩法 用于封印动作;挖握走 request_dig——cleared 仲裁需要 clears_map 参数) func try_spend(action_kind: String) -> bool: if _phase != Phase.ACTIVE: _reject("phase") @@ -156,7 +156,7 @@ func _spend_and_arbitrate(action_kind: String, clears_map: bool) -> bool: # 整备军备改写(迭代 12 T5——feat_ap_carry=true 时剩余 AP 转蓄力层〔上限 3〕替代 RAP 转存: # 「不动也是行动」——cleared 作废口径改写的停手侧承载;cleared 分支 AP 恒清零维持既有作废语义)。 # 内容数据驱动扩展批 T1:本方法改记账制——剩余 AP 存 _last_stop_ap 后清零,转存决策移至 -# round_end 发射点 finish_round_stop(grant_ap(mode:transfer) 订阅定夺;双轨期旧旗 feat_ap_carry +# round_end 发射点 finish_round_stop(grant_ap(mode:transfer) 订阅定夺;双轨期旧封印 feat_ap_carry # 并行生效,行为与迁移前逐位一致)。 func request_stop() -> bool: if _phase != Phase.ACTIVE: diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index ec79d000..c85aecb9 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -15,7 +15,7 @@ signal settlement_snapshot(snap: Dictionary) # 每结算末尾的全量状态 # 明细流水行型协议(战斗结算 Core Rule;9 类——2026-09-20 伏击单轮上限退役,溢出未生效行 overflow 随之下线; # 2026-09-15 格面资源批由 15 类收拢,清单改动须同步 battle_log_view 的 _format_row 与本文档头注): # 效果行 effect · 伤害行 damage · 治疗行 heal · -# 奖励未生效行 reward_ineffective · 标旗未中行 flag_miss · 施放行 cast(敌人技能池批由蓄力行 charge 改型)· 衰减行 decay · +# 奖励未生效行 reward_ineffective · 封印未中行 seal_miss · 施放行 cast(敌人技能池批由蓄力行 charge 改型)· 衰减行 decay · # 判定行 verdict · 高光行 highlight # 行来源断言豁免集合(行型层)——判定段 / 衰减段本就无棋盘来源,勿一刀切误炸 const SOURCE_EXEMPT_TYPES := ["decay", "verdict"] @@ -48,7 +48,7 @@ var battle_result := "" # "" / "victory" / "defeat" / "fatal_ var escrow := 0 # 战斗内 GP 缓冲(战斗域中间态——begin_battle 清零;gp_gain/gp_loss 兑付累记;随 gp_dropped 上抛即弃,不入钱包) var _facts_reveals: Array[Dictionary] = [] -var _facts_flags: Array[Dictionary] = [] +var _facts_seals: Array[Dictionary] = [] var _facts_path := "" var _settling := false var _defer_board_damage := false # 案C 暂存闸(2026-10-06 用户裁:地图奖励伤害兑付迁战斗段末——怪物还手后) @@ -56,7 +56,7 @@ var _deferred_board: Array[Dictionary] = [] # 授予段暂存伤害单据( # 结算五段 Segment(迭代 27 T2——P1-1 拆段;段边界=审计五段〔裁点③甲〕,段序骨架冻结于 # SettlementTable.segment_order 语义:授予→增益/减益→战斗→衰减→判定。本类退为段序编排+ # 行发射/开单原语单点——段体逻辑归 game/core/settlement/ 五类) -var _grant_seg = null # GrantSegment(①授予段——含旗判与 counter/grant 助手单点) +var _grant_seg = null # GrantSegment(①授予段——含封印判与 counter/grant 助手单点) var _aura_seg = null # AuraSegment(②增益/减益段) var _combat_seg = null # CombatSegment(③战斗段——原 _combat_segment 体) var _decay_seg = null # DecaySegment(④衰减段) @@ -64,7 +64,7 @@ var _verdict_seg = null # VerdictSegment(⑤判定段——返回裁定, var _refresh_used_this_round := 0 # 每轮刷新计数(Active 相位合计,兜底上限 = ActionEconomyTable.refresh_cap_per_round) var _board_seq := 0 # 板序号(本战斗第几张板——快照归因用) var _board_from_midround_refresh := false # 装板 provenance:轮内刷新换来的图 = true(清图奖励守卫——刷新图不发清图奖励) -var _flag_consumed := {} # 兑付资格以雷格实例为键(板级;换图重置) +var _seal_consumed := {} # 兑付资格以危险格实例为键(板级;换图重置) # 同调装配运行态(迭代 11 第①批 T5——begin_battle 经 enc.attunement 注入;off=空集全部效果零扰动) var attunement: Array[Variant] = [] # 装备中同调件 item_id 集 var _ledger: RunLedger = null # 共享四本账(迭代 27 T3——begin_battle 经 enc["ledger"] 持引用;缺省新账=调试面) @@ -78,12 +78,12 @@ var _fx_bonus_delta := {"atk": 0, "max_hp": 0, "armor_class": 0, "ap": 0} # var _fx_new_resource_types := {} # 本战已见资源类型集(地质学家 fact new_resource_type 判定——battle 域) var _fx_pending_reveals: Array[Dictionary] = [] # 揭示效果待兑队列(见血开窍/斩首学者/地质学家/跳格采掘——授予段末统一兑付,防轮 facts 迭代中追加重入) var _fx_revealing := false # fx 揭示兑付中标记(_on_cell_revealed 缓冲旁路——fx 揭示的奖励由兑付点直接入账,防二次缓冲二次兑付) -var _fx_insurance := 0 # 完美保险余量(迭代 20 T4——本战标错豁免次数;消费于 flag_miss 首见判定) +var _fx_insurance := 0 # 完美保险余量(迭代 20 T4——本战标错豁免次数;消费于 seal_miss 首见判定) # 特性运行态(内容数据驱动扩展批 T3——relic 持有集经 enc.feats 注入:效果行为=数据行 triggers 经 # 效果引擎分发;魔矢每战首次计数 battle 域。空集=零扰动) var _feat_first_dig_used := false # 效果引擎(内容数据驱动扩展批 T1——发布订阅解释器;begin_battle 从持有集/装备集重建订阅。 -# T3 起施加面全量切换:发射点 dispatch 返回命中,发射点按组合规则施加——旧 feat_flags 旗注入消亡) +# T3 起施加面全量切换:发射点 dispatch 返回命中,发射点按组合规则施加——旧 feat_seals 封印注入消亡) var _fx: EffectEngine @@ -133,7 +133,7 @@ func _fx_enqueue_reveal() -> void: # 揭示效果兑付(授予段末统一——fx_reveal 封闭流从未揭示安全格掷 1 格全揭示; -# 信息红线=只揭真格〔雷格不入候选〕;空候选=零兑付留归因行;揭示奖励经 _grant_routed +# 信息红线=只揭真格〔危险格不入候选〕;空候选=零兑付留归因行;揭示奖励经 _grant_routed # 正向路由直接入账——_fx_revealing 旁路 _on_cell_revealed 缓冲防二次兑付) func _flush_pending_reveals(ri: int) -> void: if _fx_pending_reveals.is_empty(): @@ -177,9 +177,9 @@ func _fx_fact(fact: String): return round_index "battle_index": return int(encounter.get("battle_index", 1)) # 关卡域战斗序(1 基——level_runner enc 携带;开局姿态窗条件面) - "flags_count": + "seals_count": var hits_n := 0 - for fevt in _facts_flags: + for fevt in _facts_seals: if bool(fevt.get("hit", false)): hits_n += 1 return hits_n @@ -259,10 +259,10 @@ func attune_convert_state() -> Dictionary: "display_name": String(row.get("display_name", "")), "item_id": String(row.get("item_id", ""))} -# 特性求值(内容数据驱动扩展批 T3——_feat_flags_for 挂点求值退役:效果行为=数据行 triggers 订阅, -# 效果引擎 dispatch 分发;旧 23 hook 枚举与旗注入消亡。流派档位质变=FeatsEngine 纯函数求值 +# 特性求值(内容数据驱动扩展批 T3——_feat_seals_for 挂点求值退役:效果行为=数据行 triggers 订阅, +# 效果引擎 dispatch 分发;旧 23 hook 枚举与封印注入消亡。流派档位质变=FeatsEngine 纯函数求值 # (档位机制本身系引擎基建非内容效果),两运行态注伤害控制器:档一 rider+1 / 档二 rider 可暴击) -var _flag_miss_seen := {} # 标旗未中行去重(每安全格实例一次) +var _seal_miss_seen := {} # 封印未中行去重(每安全格实例一次) var _perfect_hit_true := 0 # 板级完美排雷计数(install 重置) var _perfect_hit_false := 0 var _hero_atk := 0 # 主角攻击基值快照(encounter.hero_atk;E4 收口——表值运行期不可变) @@ -284,7 +284,7 @@ func _init(db_ref: ConfigDb, rng_ref: RngServiceCore) -> void: action_economy.set_fx(_fx) # dig_paid/charge_full 发射面 _reward_economy.set_fx(_fx) # reward_roll 发射面 minesweeper.cell_revealed.connect(_on_cell_revealed) - minesweeper.flag_judged.connect(_on_flag_judged) + minesweeper.seal_judged.connect(_on_seal_judged) minesweeper.round_end_board.connect(_on_round_end) action_economy.round_end_stopped.connect(_on_round_end) # 结算五段接线(迭代 27 T2——段持宿主引用;信号连接纪律不涉段〔段零信号连接〕) @@ -391,11 +391,11 @@ func begin_battle(enc: Dictionary) -> bool: # 迭代 20 T6——adventure 域计数器从共享引用回灌〔跨战持久〕) _fx.rebuild(feat_ids, attunement, tree_rules) _fx.counters_seed(_ledger.counters_seed_snapshot()) - # 秘宝常时参数注入(迭代 22 秘宝批 T3——装配集 kind 分发:远程镐挖距放宽/信标网络旗可达豁免; + # 秘宝常时参数注入(迭代 22 秘宝批 T3——装配集 kind 分发:远程镐挖距放宽/信标网络封印可达豁免; # 缺省 0/false=零装配零扰动。注入先于首板 install 已不成立〔板在早段〕——本批板生成不读两参数, # 参数只影响挖掘/插棋动作判据,时序安全) minesweeper.dig_range_bonus = attune_param_sum("dig_range_bonus") - minesweeper.flag_range_free = attune_param_sum("flag_range_free") > 0 + minesweeper.seal_range_free = attune_param_sum("seal_range_free") > 0 # 充能重置周期(迭代 22 秘宝批 T3——battle=每战回满/level=每关首战回满〔battle_index==1〕; # adventure 周期维持冒险开始 _seed_attune_charges 单次) _reseed_attune_charges("battle") @@ -449,7 +449,7 @@ func _install_new_board(during_round := false) -> bool: if not res.accepted: _fatal("排雷玩法 install 拒绝(不变式违例): %s" % str(res)) return false - # 地图战斗资源 义务⑥:roll_board 恰一次(install 后、挖掘前);资格格 = 全部非封锁格(安全格 + 雷格,雷安同池) + # 地图战斗资源 义务⑥:roll_board 恰一次(install 后、挖掘前);资格格 = 全部非封锁格(安全格 + 危险格,雷安同池) var r0 := {} for c in board.compute_r0(): r0[c] = true @@ -466,8 +466,8 @@ func _install_new_board(during_round := false) -> bool: # 地形变异 布置段(2026-09-19 用户拍板棋盘设置顺序第 4 步:生成棋盘 → 打开状态初始化 → # 战斗资源格设置 → 变异格设置)——布置在初始展开与资源格之后,变异天然不落已开区 _place_variants(board) - _flag_consumed.clear() # 换图新雷 = 新实例,资格自然重置(行动经济 Rule 8) - _flag_miss_seen.clear() + _seal_consumed.clear() # 换图新雷 = 新实例,资格自然重置(行动经济 Rule 8) + _seal_miss_seen.clear() _perfect_hit_true = 0 # 板级完美计数随 install 重置 _perfect_hit_false = 0 _board_from_midround_refresh = during_round # 轮内刷新装板 = 刷新图(清图奖励不发);常规换图/开战装板 = false @@ -498,7 +498,7 @@ func _resolve_global_variant(board: BoardData) -> void: # 候选池门控(unlock_level ≤ 关卡序号 + board_types 与本地形交集,∅ 通配)经 config_db.variant_pool; # 池空 = 合法态,静默零布置(框架 P0 口径不变)。零特判:本段只写格子变异数据快照,不改扫雷规则本体。 # 候选格域 = 安全格 − 初始展开区(伤害型 placement=closed_only 的结构保障——布置发生在初始展开之后, -# 已开格天然排除);雷格不吃变异(挖雷一层惩罚 + 变异伤害双层叠罚污染逐行归因,首版排除——provisional)。 +# 已开格天然排除);危险格不吃变异(挖雷一层惩罚 + 变异伤害双层叠罚污染逐行归因,首版排除——provisional)。 # 每图至多一种类型(候选池内均匀选一,混型布置归因复杂留待后续批);数量 = round(候选池格数×percent) + # (关卡序号−1)×per_level_bonus——基数为候选池而非总格数(2026-09-21 用户拍板基数修正批:初始展开 # 占全板 56–67%,总格数基数使有效密度膨胀 4–6 倍、L1 小板极端全池覆盖;percent 语义 = 占可挖格比例, @@ -570,7 +570,7 @@ func _adjacent_to_packs(board: BoardData, placed: Dictionary, c: Vector2i, own_p func _on_cell_revealed(evt: Dictionary) -> void: # 轮 facts 缓冲不设相位守卫——轮末最后一挖的揭示事件在 request_dig 翻相之后才到(事件序: - # cell_revealed 批 → flag_judged 批 → round_end),phase==Active 守卫会丢最后一挖的事实; + # cell_revealed 批 → seal_judged 批 → round_end),phase==Active 守卫会丢最后一挖的事实; # initial 通道事件(install 初始展开——封锁格)resource=false,进入授予段被资格检查自然跳过。 # fx_reveal 通道事件旁路缓冲(迭代 20 T1——专长揭示的奖励由 _flush_pending_reveals 兑付点 # 直接入账,此处缓冲会导致二次兑付)。 @@ -589,7 +589,7 @@ func _on_cell_revealed(evt: Dictionary) -> void: action_economy.grant_ap(int(cs_row.get("magnitude", 1))) if bool(evt.get("resource", false)): # 身份快照随缓冲捕获(批次隔离——轮内刷新后 mapping 已换批,授予必须用缓冲期身份, - # 防旧图已挖格在轮末错拿新图同坐标身份)。雷格同样携带(雷安同池——负向兑付的来源格) + # 防旧图已挖格在轮末错拿新图同坐标身份)。危险格同样携带(雷安同池——负向兑付的来源格) var snap = _reward_economy.query_full_snapshot(evt.cell) if snap != null: evt = evt.duplicate() @@ -597,8 +597,8 @@ func _on_cell_revealed(evt: Dictionary) -> void: _facts_reveals.append(evt) -func _on_flag_judged(evt: Dictionary) -> void: - _facts_flags.append(evt) +func _on_seal_judged(evt: Dictionary) -> void: + _facts_seals.append(evt) func _on_round_end(_payload: Dictionary) -> void: @@ -664,7 +664,7 @@ func _harmful_variants(vids: Array) -> Array: return out -# 邻接伤害型变异收集(terrain_kind fact 取数面——flag_hit 发射点用:标中旗相邻八格的伤害型变异集; +# 邻接伤害型变异收集(terrain_kind fact 取数面——seal_hit 发射点用:封印命中相邻八格的伤害型变异集; # 🔴 R4 甲永不对冲边界=仅限伤害型,信息型〔hide_number 族〕不入集) func _harmful_adjacent(cell: Vector2i) -> Array: var out: Array[Variant] = [] @@ -685,7 +685,7 @@ func _hits_of(hits: Array, kind: String) -> Array: return out # 「动作 × 格型」矩阵的执行面:snap = 缓冲期冻结身份快照(cell_type = 该格装板期摇定的类型身份), -# polarity 由动作决定(开安全格/标中旗 = positive,开雷格/标错旗 = negative), +# polarity 由动作决定(开安全格/封印命中 = positive,开危险格/标错封印 = negative), # 兑付行 = 奖励字典(类型, 极性)行。返回 true = percent 行实际生效(flat 行恒 false——兑付结果由行协议承载)。 # ---- 秘宝(use_treasure 四步受理编排保留给同调主动件复用——迭代 11 第①批 T7:过渡授予路由 # _grant_treasure 随掉落/停点渠道退役拆除;能力件注入归 LevelRunner.set_attune_charges 骑库存面)---- @@ -730,23 +730,23 @@ func use_treasure(handle: int, target: Vector2i) -> Dictionary: return {"ok": false, "reason": "行动点加量被拒(相位防御)"} if kinds.has("safe_dig"): # 天眼安全格直开(迭代 22 秘宝批 T3——C5 裁全额兑付:fx_reveal 通道复用=免 AP 零相位、 - # 连锁与格面资源与普通挖格同链;危险格仅真视显示不移除=契约 3;有旗格跳过=旗=玩家承诺不代开) + # 连锁与格面资源与普通挖格同链;危险格仅真视显示不移除=契约 3;有封印格跳过=封印=玩家承诺不代开) var opened_any := false for c_v in v.resolved: var c := Vector2i(c_v) - if board.has_flag(c): + if board.has_seal(c): continue if board.fx_reveal(c): opened_any = true if not opened_any: return {"ok": false, "reason": "天眼:窗口内安全格均已开(无可开格)"} if kinds.has("cell_removal"): - # 爆破工兵包兑付(迭代 13 T8/D6——中立移除雷格:未揭示/无旗/是雷过滤归排雷玩法; - # P1 甲邻接数字冻结零重算、清图分母零涉(雷格不入分母);空集拒绝零消耗—— + # 爆破工兵包兑付(迭代 13 T8/D6——中立移除危险格:未揭示/无封印/是雷过滤归排雷玩法; + # P1 甲邻接数字冻结零重算、清图分母零涉(危险格不入分母);空集拒绝零消耗—— # consume 之前 return(拒绝面注记扩「③内零消耗分支」),拒绝 reason 可呈现) var blasted: Array[Variant] = board.remove_mines_in(v.resolved) if blasted.is_empty(): - return {"ok": false, "reason": "爆破工兵包:3×3 区域内无可移除雷格(须未揭示且未插旗)"} + return {"ok": false, "reason": "爆破工兵包:3×3 区域内无可移除危险格(须未揭示且未封印)"} var rec: Dictionary[Variant, Variant] = treasure_inventory.consume(handle) # 同调主动件充能扣减(迭代 11 第①批 T6——共享账本直改:adventure/level/settlement 同一字典引用) if not rec.is_empty() and String(rec.get("source_class", "")) == "attunement": @@ -773,14 +773,14 @@ func _grant_routed(snap: Dictionary, polarity: String, source_class: String, cel return false if polarity == "positive": row["power"] = int(snap.get("power", int(row.power))) # 区间行快照 power(身份批 roll 值)覆盖表值——授予期零随机口径(E14) - # 标中兑付溢价(迭代14②判式换代批 T4——条款3 条件二旗溢价形态 a,2026-10-04 用户裁 P3): - # δ 读 settlement.flag_hit_premium(percent 域 125=×1.25 provisional);100=无溢价直通零扰动。 - # 兑付公式一处=本块:只乘标中旗正向(flat power 乘后入单据/治疗/排队;percent 幅度经 + # 标中兑付溢价(迭代14②判式换代批 T4——条款3 条件二封印溢价形态 a,2026-10-04 用户裁 P3): + # δ 读 settlement.seal_hit_premium(percent 域 125=×1.25 provisional);100=无溢价直通零扰动。 + # 兑付公式一处=本块:只乘封印命中正向(flat power 乘后入单据/治疗/排队;percent 幅度经 # premium_pct 贯穿 _apply_percent_row 应用与呈现同乘)——标空/挖格/清图不乘,雷安同池冻结不动。 # 取整=四舍五入(与伤害管线 round_direction=floor 分域——registry clause3_inequality 随批登记; # 1 点量纲行 ac_up/action 取整后不变=整数粒度地板)。 - if source_class == "flag_hit" and int(db.settlement.flag_hit_premium) != 100: - var prem_pct: int = int(db.settlement.flag_hit_premium) + if source_class == "seal_hit" and int(db.settlement.seal_hit_premium) != 100: + var prem_pct: int = int(db.settlement.seal_hit_premium) row = row.duplicate() row["power"] = int(round(int(row.power) * prem_pct / 100.0)) row["premium_pct"] = prem_pct @@ -811,7 +811,7 @@ func _apply_percent_row(row: Dictionary, source_class: String, cell: Vector2i, r if eff == "gp_gain" or eff == "gp_loss": return _apply_gp_row(row, source_class, cell, ri, highlight, label_suffix) var srow: Dictionary[Variant, Variant] = db.status_effect_row(eff) - # 旗溢价贯穿(迭代14② T4——仅标中旗正向行携带 premium_pct;其余授予路径缺省 100 零扰动): + # 封印溢价贯穿(迭代14② T4——仅封印命中正向行携带 premium_pct;其余授予路径缺省 100 零扰动): # 应用幅度与呈现行值同乘,容器经 magnitude_override 拿同一快照(抗表重载口径保持)。 var prem_pct: int = int(row.get("premium_pct", 100)) var eff_mag: int = int(srow.magnitude) @@ -828,7 +828,7 @@ func _apply_percent_row(row: Dictionary, source_class: String, cell: Vector2i, r # GP 型行兑付(GP+商店房实施批 2026-09-21):战斗内缓冲 escrow 记账——不入钱包不入增益容器。 -# 正向(gp_gain)= 挖开金币安全格/标中旗;负向(gp_loss)= 挖雷格/标错旗。兑付行经既有 effect 行 +# 正向(gp_gain)= 挖开GP安全格/封印命中;负向(gp_loss)= 挖危险格/标错封印。兑付行经既有 effect 行 # 通道外发(escrow 随行——归因可读),战斗结束随 gp_dropped 一次上抛后即弃。 func _apply_gp_row(row: Dictionary, source_class: String, cell: Vector2i, ri: int, highlight: String = "", label_suffix: String = "") -> bool: var eff := String(row.effect_id) @@ -906,8 +906,8 @@ func _submit_flat_hero(source_class: String, display: String, power: int, cell: return _outcome_of(_submit(t, sync)) -# 旗判定批:标中 = 该雷格资源的正向兑付(每雷实例一次;高光 = 强制检查点); -# 标空 = "标旗未中"归因行 + 该安全格资源的负向兑付(同键去重——每格实例一次)。 +# 封印判定批:标中 = 该危险格资源的正向兑付(每雷实例一次;高光 = 强制检查点); +# 标空 = "封印未中"归因行 + 该安全格资源的负向兑付(同键去重——每格实例一次)。 # 清图批:清图奖励对象恰好发一次;完美排雷追加第二份同身份兑付(grant_clear 本身恰一次)。 # 高光行 value = 实际有效兑付份数(禁记名义值;首份零兑付 → 降级不发)。 func _grant_clear_reward(ri: int) -> void: @@ -1044,7 +1044,7 @@ func _emit_settlement_snapshot(verdict: String) -> void: board_stats["w"] = minesweeper.current_board().width board_stats["h"] = minesweeper.current_board().height board_stats["revealed"] = minesweeper.revealed_cells().size() - board_stats["flags"] = minesweeper.flag_count() + board_stats["seals"] = minesweeper.seal_count() settlement_snapshot.emit({ "kind": "settlement", "level": int(encounter.get("level_index", 0)), @@ -1058,7 +1058,7 @@ func _emit_settlement_snapshot(verdict: String) -> void: "board": board_stats, "enemies": enemies, "buffs": buffs, - "round_facts": {"path": _facts_path, "safe": safe_n, "mines": mines_hit, "flag_events": _facts_flags.size(), }, + "round_facts": {"path": _facts_path, "safe": safe_n, "mines": mines_hit, "seal_events": _facts_seals.size(), }, }) @@ -1238,11 +1238,11 @@ func diagnostic_snapshot() -> Dictionary: "board_seq": _board_seq, "facts_path": _facts_path, "facts_reveals": _facts_reveals.size(), - "facts_flags": _facts_flags.size(), + "facts_seals": _facts_seals.size(), "action_economy": {"phase": String(action_economy.phase), "ap": action_economy.ap, "rap": action_economy.rap}, "minesweeper_board_installed": minesweeper.current_board() != null, "minesweeper_revealed": minesweeper.revealed_cells().size() if minesweeper.current_board() != null else 0, - "minesweeper_flags": minesweeper.flag_count() if minesweeper.current_board() != null else 0, + "minesweeper_seals": minesweeper.seal_count() if minesweeper.current_board() != null else 0, "reward_economy_phase": _reward_economy.phase(), "enemies_alive": _enemy_system.query_alive("enemy").size(), "hero_hp": int(_enemy_system.hero_unit().get("hp", -1)) if not _enemy_system.hero_unit().is_empty() else -1, @@ -1251,7 +1251,7 @@ func diagnostic_snapshot() -> Dictionary: func _reset_round_facts() -> void: _facts_reveals.clear() - _facts_flags.clear() + _facts_seals.clear() _facts_path = "" diff --git a/game/core/board_data.gd b/game/core/board_data.gd index 2cf0f1b4..677ced68 100644 --- a/game/core/board_data.gd +++ b/game/core/board_data.gd @@ -28,7 +28,7 @@ func in_bounds(c: Vector2i) -> bool: return c.x >= 0 and c.y >= 0 and c.x < width and c.y < height -# 行主序排序键(2026-10-02 修复批——排雷玩法 旗判定批与 地图战斗资源 资格规范化两处手抄收口单点): +# 行主序排序键(2026-10-02 修复批——排雷玩法 封印判定批与 地图战斗资源 资格规范化两处手抄收口单点): # y×1000+x 字典序 = 行主序;板宽域 [8,64] 远小于 1000,x 不跨行、键值不碰撞。 static func row_major_key(c: Vector2i) -> int: return c.y * 1000 + c.x diff --git a/game/core/board_generator.gd b/game/core/board_generator.gd index 229fca04..290e9352 100644 --- a/game/core/board_generator.gd +++ b/game/core/board_generator.gd @@ -220,7 +220,7 @@ func _build_constraints(b: BoardData, r: Dictionary, known_mines: Dictionary, sa if known_mines.has(n): known_here += 1 elif not r.has(n): - unknown[n] = true # 未揭示格一律计入未知(含雷格)——求解器禁读 safe_set 真值(棋盘生成:雷位不许偷看) + unknown[n] = true # 未揭示格一律计入未知(含危险格)——求解器禁读 safe_set 真值(棋盘生成:雷位不许偷看) var d_eff := d - known_here if d_eff < 0 or (d_eff > 0 and unknown.is_empty()): continue # 矛盾态(非法板)——不产约束,验收由 legality 闸承担 diff --git a/game/core/config_db.gd b/game/core/config_db.gd index 5cffb1b3..cf90f617 100644 --- a/game/core/config_db.gd +++ b/game/core/config_db.gd @@ -1,7 +1,7 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION ## 数值表单点访问入口:全部 .tres 表的加载、校验诊断与类型化访问器(垂直切片验证:改表即改玩法,数值零硬编码)。 ## 玩法代码禁止绕过本单点自建 load();消费面一律走访问器,禁直读行集。 -## headless --script 模式无 autoload——冒烟脚本显式实例化本类;加载失败 is_ready=false 加 fatal 旗,调用方须查。 +## headless --script 模式无 autoload——冒烟脚本显式实例化本类;加载失败 is_ready=false 加 fatal 封印,调用方须查。 class_name ConfigDb extends Node @@ -79,7 +79,7 @@ func _fatal(category: String, message: String) -> void: _fatal_flag = true -var _fatal_flag := false # 运行期致命旗(迭代 27 T6——退出归根承载;组合根/闸读面) +var _fatal_flag := false # 运行期致命封印(迭代 27 T6——退出归根承载;组合根/闸读面) func is_fatal() -> bool: diff --git a/game/core/config_db_cross_validator.gd b/game/core/config_db_cross_validator.gd index 5401e880..891e3dfa 100644 --- a/game/core/config_db_cross_validator.gd +++ b/game/core/config_db_cross_validator.gd @@ -35,7 +35,7 @@ func cross_validate(loaded: Dictionary, push_diag: Callable) -> void: if String(row.get("cell_type", "")) != RewardTable.TREASURE_ITEM_TYPE: continue var treasure_eff: String = String(row.get("effect_id", "")) - if treasure_eff == "": # 负占位行(雷格极性字典兜底,零兑付)——不入投放词表校验 + if treasure_eff == "": # 负占位行(危险格极性字典兜底,零兑付)——不入投放词表校验 continue if not treasure_live.has(treasure_eff): push_diag.call("error", "reward_dangling_treasure", "RewardTable %s aux 行引用无效道具 %s(retired/deferred/不存在): %s" % [row.get("reward_id"), treasure_eff, "双表校验"]) @@ -49,8 +49,8 @@ func cross_validate(loaded: Dictionary, push_diag: Callable) -> void: for eff in st_tab.effect_pool_map.keys(): if not effect_ids.has(eff): push_diag.call("error", "poolmap_dangling", "SettlementTable.effect_pool_map 悬空 effect_id: %s" % eff) - # ③ source_label_map 键集封闭性(键 = 增益状态 source_class ∪ {enemy_action, hero_attack, flag_miss}——2026-09-15 格面资源批删 item 键) - var required_sources := ["safe_cell", "flag_hit", "mine_hit", "clear_reward", "hero_attack", "enemy_action", "flag_miss"] + # ③ source_label_map 键集封闭性(键 = 增益状态 source_class ∪ {enemy_action, hero_attack, seal_miss}——2026-09-15 格面资源批删 item 键) + var required_sources := ["safe_cell", "seal_hit", "mine_hit", "clear_reward", "hero_attack", "enemy_action", "seal_miss"] for s in required_sources: if not st_tab.source_label_map.has(s): push_diag.call("error", "segorder_violation", "source_label_map 缺必需键: %s" % s) diff --git a/game/core/damage_controller.gd b/game/core/damage_controller.gd index aa686682..b7d7f1c2 100644 --- a/game/core/damage_controller.gd +++ b/game/core/damage_controller.gd @@ -39,10 +39,10 @@ var policy := POLICY_SEGMENT # 结账时机开关(2026-09-24 用户拍板 var _queue: Array[Dictionary] = [] # 未结单据(B 模式攒批;A 模式恒空) var _outcomes := {} # ticket_id → "redeemed"/"zero"/"voided"(结账后可查——清图高光份数消费) var _seq := 0 # 流水号 -var _halted := false # 主角倒下终止旗(死亡事件置位——flush 余单作废) +var _halted := false # 主角倒下终止封印(死亡事件置位——flush 余单作废) var _hero_ac_override := -1 # 主角护甲等级合流入参(begin_battle 显式设定——-1 = 表值兜底,口径同战斗编排器) # 效果引擎(内容数据驱动扩展批 T1/T3——attack_commit/clamp_check/armor_roll/kill/damage_taken -# 发射+施加面:dispatch 返回命中,本类按组合规则施加——T3 起旧 feat_flags 旗消费点全部拆除) +# 发射+施加面:dispatch 返回命中,本类按组合规则施加——T3 起旧 feat_seals 封印消费点全部拆除) var _fx: EffectEngine = null # 战斗段运行态事实(编排器每轮刷新——fact 取数面:attack_commit 载荷 dig_streak / # charge_layers facts〔猎巢人 per/整备 attack_bonus per/厚积薄发 when/铁壁 shield per〕; diff --git a/game/core/effect_engine.gd b/game/core/effect_engine.gd index 22b0a38d..b83038a8 100644 --- a/game/core/effect_engine.gd +++ b/game/core/effect_engine.gd @@ -6,18 +6,18 @@ class_name EffectEngine extends RefCounted ## 事件词汇(迭代 20 专长实装批 T1 扩签——16→18:+dig_stop 停手挂点〔弃图兑换〕 -## +battle_won 战斗胜利〔战地包扎〕;迭代 21 天赋树批 T3 扩签 18→19:+flag_missed 标错判定 -## 〔危险直觉·守挂点——_judge_flag 去重闸后发射,契约 12 触发主语=当回合标错动作; -## 命名避让 _emit_row 在册 source_class 名 flag_miss〕;迭代 22 秘宝实装批 T3 扩签 19→20: +## +battle_won 战斗胜利〔战地包扎〕;迭代 21 天赋树批 T3 扩签 18→19:+seal_missed 标错判定 +## 〔危险直觉·守挂点——_judge_seal 去重闸后发射,契约 12 触发主语=当回合标错动作; +## 命名避让 _emit_row 在册 source_class 名 seal_miss〕;迭代 22 秘宝实装批 T3 扩签 19→20: ## +board_installed 装板完成〔巢穴预告——每板恰一次,战斗板生成/重建发射点〕;原发射点不动) -const EVENTS := ["dig_reveal", "dig_paid", "flag_hit", "mine_hit", "attack_commit", "clamp_check", - "armor_roll", "kill", "damage_taken", "enemy_hp_threshold", "round_start", "flag_settle", - "round_end", "reward_roll", "treasure_used", "charge_full", "dig_stop", "battle_won", "flag_missed", +const EVENTS := ["dig_reveal", "dig_paid", "seal_hit", "mine_hit", "attack_commit", "clamp_check", + "armor_roll", "kill", "damage_taken", "enemy_hp_threshold", "round_start", "seal_settle", + "round_end", "reward_roll", "treasure_used", "charge_full", "dig_stop", "battle_won", "seal_missed", "board_installed"] ## 扫雷侧事件集(🔴 流派扫雷触发铁律新形态:每流派 ≥1 行订阅本集事件——schema 加载校验。 -## 原 MINE_HOOKS 的同义迁移:挖掘/标旗/轮末结算面事件) -const MINE_EVENTS := ["dig_reveal", "dig_paid", "flag_hit", "mine_hit", "flag_settle", "round_end", "reward_roll"] +## 原 MINE_HOOKS 的同义迁移:挖掘/封印/轮末结算面事件) +const MINE_EVENTS := ["dig_reveal", "dig_paid", "seal_hit", "mine_hit", "seal_settle", "round_end", "reward_roll"] ## 效果类型词汇(解释器 switch 闭集——需求卡片 §3.3 定稿 19 行;类型实数 24,含共享行拆型: ## grant_gp/bias_wallet、counter_add/counter_spend、reveal_tiles/remove_mines/refresh_pick、 @@ -44,12 +44,12 @@ const EFFECT_KINDS := ["add_ticket_rider", "modify_ticket", "damage_mult", "open ## fact 条件词汇(封闭枚举——迭代 20 T1 扩签 9→17:payload 同名键直读面〔fact 取值序 payload ## 优先——effect_engine._fact_value 既有机制〕。new_resource_type=首开资源类型〔地质学家〕; -## is_edge_cell=边缘格〔边陲矿工〕;is_blank_zero=空白连锁〔跳格采掘〕;dug_under_flag=被挖格 -## 当时有旗〔破封一击〕;ap_exhausted_last=上轮 AP 耗尽〔一滴不剩〕;hp_ratio=生命比例〔背水 +## is_edge_cell=边缘格〔边陲矿工〕;is_blank_zero=空白连锁〔跳格采掘〕;dug_under_seal=被挖格 +## 当时有封印〔破封一击〕;ap_exhausted_last=上轮 AP 耗尽〔一滴不剩〕;hp_ratio=生命比例〔背水 ## 06 前置条兑付〕;amount=单次伤害量〔保险丝〕;ap_left=停手剩余 AP〔弃图兑换〕) const FACTS := ["matchup", "is_first_dig_of_battle", "terrain_kind", "target_armor_class", - "flags_count", "charge_layers", "nest_count", "round_index", "counter", - "new_resource_type", "is_edge_cell", "is_blank_zero", "dug_under_flag", + "seals_count", "charge_layers", "nest_count", "round_index", "counter", + "new_resource_type", "is_edge_cell", "is_blank_zero", "dug_under_seal", "ap_exhausted_last", "hp_ratio", "amount", "ap_left", "pct", "battle_index"] # 迭代 21 T3 扩签——关卡域战斗序(1 基,enc 携带;开局姿态组「每关首轮窗」条件面) @@ -144,12 +144,12 @@ func rebuild(feat_ids: Array, item_ids: Array, tree_rules: Array = []) -> void: "do": {"kind": "counter_add", "counter_id": "tree_sense_sharp_used", "value": 1, "domain": "adventure"}}, {}) "sense_guard": - # 守=标错返还行动点·每关限次(契约 12 失误补偿——flag_missed 由 _judge_flag 去重闸后 + # 守=标错返还行动点·每关限次(契约 12 失误补偿——seal_missed 由 _judge_seal 去重闸后 # 发射;queue=下一轮开轮兑现,末轮判出无下一轮=合法作废自动成立) - _push_trigger("tree", rk, {"on": "flag_missed", + _push_trigger("tree", rk, {"on": "seal_missed", "when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}], "do": {"kind": "grant_ap", "mode": "queue", "value": 1}}, {}) - _push_trigger("tree", rk, {"on": "flag_missed", + _push_trigger("tree", rk, {"on": "seal_missed", "when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}], "do": {"kind": "counter_add", "counter_id": "tree_sense_guard_used", "value": 1, "domain": "adventure"}}, {}) diff --git a/game/core/level_runner.gd b/game/core/level_runner.gd index 1f3471e8..3f563d8f 100644 --- a/game/core/level_runner.gd +++ b/game/core/level_runner.gd @@ -45,7 +45,7 @@ var _attunement: Array[Variant] = [] # 同调装配集(迭 var _hero_attack_type := "" var _hero_armor_type := "" # ---- 商店共享池模式态(迭代 11 第②批 T3——缺省 legacy=固定三件加定价 off 对照承载,零 RNG 零池消费;TP0 令牌池换代)---- -var _shop_pool_mode := false # pool 模式旗(set_shop_pool 注入时置位——AdventureRunner 按 params.shop_mode 下传) +var _shop_pool_mode := false # pool 模式封印(set_shop_pool 注入时置位——AdventureRunner 按 params.shop_mode 下传) var _pool_deck: Array[Variant] = [] # 共享池令牌库共享引用(AdventureRunner._curio_deck——库存=剩余令牌数单点) var _pool_consume := Callable() # 池消费 handler(AdventureRunner._consume_pool_purchase——_apply_curio_pick 同口写加算区+账本+摘牌) var _pool_ticket := Callable() # 门票展示判定 handler(T5——AdventureRunner._feat_ticket_consider;节点与商店共享计数) @@ -56,7 +56,7 @@ var _shop_paid_refreshes := 0 # 本次进店已付费刷新次数 var hero_atk_pct := 0 # 测试面板覆盖值(切片专用) var hero_hp_pct := 0 -# ---- 关卡相位轴(2026-10-02 修复批——布尔旗收拢:_running/_awaiting_choice 两旗 → 显式 Phase enum; +# ---- 关卡相位轴(2026-10-02 修复批——布尔封印收拢:_running/_awaiting_choice 两封印 → 显式 Phase enum; # 对齐 行动经济 Phase 先例(action_economy.gd:内部 enum + 守卫换算,外部读面契约零变化)—— # level_result:String 与 awaiting_choice() 被 AdventureRunner/呈现层消费的语义逐字不变)---- enum Phase { IDLE, RUNNING, AWAITING_CHOICE, ENDED } diff --git a/game/core/minesweeper_rules.gd b/game/core/minesweeper_rules.gd index 234b0b6a..2ccdc074 100644 --- a/game/core/minesweeper_rules.gd +++ b/game/core/minesweeper_rules.gd @@ -1,28 +1,28 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION -## 排雷规则引擎:棋盘产物+玩家意图批次 → 揭示/旗判定/轮末事件流,install 四不变式守门(垂直切片验证:挖掘逐行归因)。 +## 排雷规则引擎:棋盘产物+玩家意图批次 → 揭示/封印判定/轮末事件流,install 四不变式守门(垂直切片验证:挖掘逐行归因)。 ## 零随机、零表读取、零 UI——判定只依赖棋盘事实与动作序列。 ## 板态对外只经 current_board()/reveal_record() 等查询面,禁跨模块直读写内部字典;轮末双发射源之棋盘路径由 round_end_board 外发。 class_name MinesweeperRules extends RefCounted signal cell_revealed(evt: Dictionary) -signal flag_judged(evt: Dictionary) +signal seal_judged(evt: Dictionary) signal round_end_board(payload: Dictionary) # 双发射源之棋盘路径(排雷玩法 外发;stopped 由 行动经济 直发) var db: ConfigDb var action_economy: ActionEconomy # 秘宝常时参数注入面(迭代 22 秘宝批 T3——编排器 begin_battle 按装配集 kind 分发注入: -# dig_range_bonus=挖掘切比雪夫距离放宽〔远程镐 dig_range_bonus magnitude〕/flag_range_free= -# 插旗不限相邻〔信标网络〕;缺省 0/false=零装配零扰动,棋盘事实不可变契约不受影响—— +# dig_range_bonus=挖掘切比雪夫距离放宽〔远程镐 dig_range_bonus magnitude〕/seal_range_free= +# 封印不限相邻〔信标网络〕;缺省 0/false=零装配零扰动,棋盘事实不可变契约不受影响—— # 两参数只放宽「动作可达性」判据,禁碰危险格/安全格分布) var dig_range_bonus := 0 -var flag_range_free := false +var seal_range_free := false # 棋盘状态私有(E2 封装收口 2026-09-13):对外只暴露 current_board()/reveal_record() 等查询面, # 禁止跨模块直读/直写原始字典——先例教训 = board_view 绕过查询面直读 revealed。 var _board: BoardData = null var _revealed := {} # Vector2i → {"kind": "safe"/"mine", "digit": int} -var _flags := {} # Vector2i → true(棋盘单态;跨轮保留随图存续) -var _removed := {} # Vector2i → true(迭代 13 T8/D6——中立移除雷格集;随 install/retire 清空) +var _seals := {} # Vector2i → true(棋盘单态;跨轮保留随图存续) +var _removed := {} # Vector2i → true(迭代 13 T8/D6——中立移除危险格集;随 install/retire 清空) var _hero := Vector2i.ZERO var _spawn: Dictionary[Vector2i, bool] = {} @@ -52,8 +52,8 @@ func is_revealed(c: Vector2i) -> bool: return _revealed.has(c) -func has_flag(c: Vector2i) -> bool: - return _flags.has(c) +func has_seal(c: Vector2i) -> bool: + return _seals.has(c) func revealed_cells() -> Array: @@ -73,13 +73,13 @@ func clear_map_cleared() -> bool: # ---- 中立移除(迭代 13 T8/D6——P1 甲:邻接数字=原始雷数冻结零重算;P2 甲:移除格呈现退色降档; -# 移除集=未揭示、无旗、是雷——旗判定基线零回溯;雷格不入清图分母/连锁/C_dig 模拟,判定逻辑零改动) ---- +# 移除集=未揭示、无封印、是雷——封印判定基线零回溯;危险格不入清图分母/连锁/C_dig 模拟,判定逻辑零改动) ---- func remove_mines_in(cells: Array) -> Array: var out: Array[Variant] = [] for c in cells: var cell: Vector2i = c - if not _board.in_bounds(cell) or is_revealed(cell) or has_flag(cell) or not _board.is_mine(cell): + if not _board.in_bounds(cell) or is_revealed(cell) or has_seal(cell) or not _board.is_mine(cell): continue if _removed.has(cell): continue @@ -104,7 +104,7 @@ func has_unrevealed() -> bool: # ---- install(编排边界相位 = 行动经济 Idle/Waiting;Active 拒绝——防轮内换板)---- # during_round = 轮内刷新编排路径(2026-09-12 方案 A,战斗结算 唯一调用方):Active 相位合法—— -# 玩家挖掘中立即换图,棋盘状态(revealed/flags)随 install 重置,初始展开事件照发(initial 通道) +# 玩家挖掘中立即换图,棋盘状态(revealed/seals)随 install 重置,初始展开事件照发(initial 通道) func install_board(b: BoardData, during_round := false) -> Dictionary: if action_economy.phase == action_economy.PHASE_ACTIVE and not during_round: return _outcome(false, "rejected", "phase", "") @@ -118,7 +118,7 @@ func install_board(b: BoardData, during_round := false) -> Dictionary: return _outcome(false, "rejected", "board_invalid", inv[0]) _board = b _revealed.clear() - _flags.clear() + _seals.clear() _removed.clear() _spawn = {} for c in b.spawn_cells(): @@ -134,8 +134,8 @@ func install_board(b: BoardData, during_round := false) -> Dictionary: return _outcome(true, "executed", "", "") -func flag_count() -> int: - return _flags.size() +func seal_count() -> int: + return _seals.size() # during_round = 轮内刷新编排路径(2026-09-12 方案 A):Active 相位合法——换图前退役旧板 @@ -146,7 +146,7 @@ func retire_board(during_round := false) -> Dictionary: return _outcome(false, "rejected", "phase", "") _board = null _revealed.clear() - _flags.clear() + _seals.clear() _removed.clear() return _outcome(true, "executed", "", "") @@ -231,10 +231,10 @@ func _classify(intent: Dictionary) -> int: if intent.get("action", "") == "dig": var c: Vector2i = intent.get("cell", Vector2i(-9, -9)) if _board_face_dig(c) == "" and not _board.is_mine(c): - # 模拟 Chain(O, c) 后清图判定——挖旗格同口径:本格旗视为已隐式退役(其余旗照挡) - var sim_flags: Dictionary[Variant, Variant] = _flags.duplicate() - sim_flags.erase(c) - var chain := _chain_closure(c, sim_flags) # 与真实执行同口径——空旗集捷径会在旗挡连锁时误判 C_dig(排雷玩法:真模拟) + # 模拟 Chain(O, c) 后清图判定——挖封印格同口径:本格封印视为已隐式退役(其余封印照挡) + var sim_seals: Dictionary[Variant, Variant] = _seals.duplicate() + sim_seals.erase(c) + var chain := _chain_closure(c, sim_seals) # 与真实执行同口径——空封印集捷径会在封印挡连锁时误判 C_dig(排雷玩法:真模拟) var remaining := 0 for sc in _board.safe_cells(): if not _revealed.has(sc) and not chain.has(sc): @@ -251,8 +251,8 @@ func _execute(intent: Dictionary) -> Dictionary: match intent.get("action", ""): "dig": return _do_dig(intent.get("cell", Vector2i(-9, -9))) - "flag_place": - return _do_flag_place(intent.get("cell", Vector2i(-9, -9))) + "seal_place": + return _do_seal_place(intent.get("cell", Vector2i(-9, -9))) "move": return _do_move(intent.get("cell", Vector2i(-9, -9))) "stop": @@ -267,16 +267,16 @@ func _do_dig(c: Vector2i) -> Dictionary: var sub := _board_face_dig(c) if sub != "": return _outcome(false, "rejected", "board_face", sub) - # 挖旗格(插旗不可逆批 2026-09-19):本格旗事务内隐式退役——链闭包按「本格无旗、其余旗照挡」 - # 计算(旗格为 0 时连锁照常外扩);request_dig 被拒则旗原地保留(事务性),受理后该旗轮末不判 - # (发射面基线 = 在场旗——标中/标空兑付让位于挖掘本体结局,四情况②④)。 - var was_flagged := has_flag(c) - var eff_flags: Dictionary[Variant, Variant] = _flags - if was_flagged: - eff_flags = _flags.duplicate() - eff_flags.erase(c) + # 挖封印格(封印不可逆批 2026-09-19):本格封印事务内隐式退役——链闭包按「本格无封印、其余封印照挡」 + # 计算(封印格为 0 时连锁照常外扩);request_dig 被拒则封印原地保留(事务性),受理后该封印轮末不判 + # (发射面基线 = 在场封印——标中/标空兑付让位于挖掘本体结局,四情况②④)。 + var was_sealed := has_seal(c) + var eff_seals: Dictionary[Variant, Variant] = _seals + if was_sealed: + eff_seals = _seals.duplicate() + eff_seals.erase(c) # 真模拟连锁与清图(F2/F1——单一实现两名字) - var chain := _chain_closure(c, eff_flags) + var chain := _chain_closure(c, eff_seals) var clears: bool = _cleared_after(chain) # F2 口径:chain_size = |O′ ∖ (O ∪ {c})|——闭包含已开集 O,只数新开格(不含首格) var chain_size := 0 @@ -287,33 +287,33 @@ func _do_dig(c: Vector2i) -> Dictionary: if not action_economy.request_dig(chain_size, clears): return _outcome(false, "rejected", "resource_face", "") # 事务内执行:首格 + 连锁新格揭示(BFS 规范序,零特判);事件 = O′ ∖ O - if was_flagged: - _flags.erase(c) - var reveal_order: Array[Variant] = _chain_reveal_order(c, eff_flags) + if was_sealed: + _seals.erase(c) + var reveal_order: Array[Variant] = _chain_reveal_order(c, eff_seals) for rc in reveal_order: if _revealed.has(rc): continue # 闭包可穿过已开区——已开格零事件(cell_revealed × |O′ ∖ O|) var is_mine := _board.is_mine(rc) var channel := "dig" if rc == c else "chain" - # 格面资源资格(2026-09-15 格面资源批):chain/dig 恒 true——安全格与雷格一视同仁(雷格亦携带, + # 格面资源资格(2026-09-15 格面资源批):chain/dig 恒 true——安全格与危险格一视同仁(危险格亦携带, # 负向兑付归 战斗结算 极性路由);initial(封锁格)恒 false。资源本体与极性不在本系统。 - # dug_under_flag = 首格带旗直挖标记(战斗结算 情况④兑付改判消费;连锁格恒 false——连锁不越旗) + # dug_under_seal = 首格带封印直挖标记(战斗结算 情况④兑付改判消费;连锁格恒 false——连锁不越封印) if is_mine: _revealed[rc] = {"kind": "mine", "digit": -1} cell_revealed.emit({ "cell": rc, "kind": "mine", "digit": -1, "variant_ids": [], "channel": channel, "resource": true, - "dug_under_flag": was_flagged and rc == c, + "dug_under_seal": was_sealed and rc == c, }) else: _revealed[rc] = {"kind": "safe", "digit": _board.digit_of(rc)} cell_revealed.emit({ "cell": rc, "kind": "safe", "digit": _board.digit_of(rc), "variant_ids": _board.variant_ids(rc), "channel": channel, "resource": true, - "dug_under_flag": was_flagged and rc == c, + "dug_under_seal": was_sealed and rc == c, }) if action_economy.phase != action_economy.PHASE_ACTIVE: - _emit_round_end_flags_and_payload() + _emit_round_end_seals_and_payload() return _outcome(true, "executed", "", "") @@ -326,54 +326,54 @@ func _board_face_dig(c: Vector2i) -> String: return "target_revealed" if _removed.has(c): return "target_removed" # 迭代 13 T8/D6——中立移除格不可交互(拒绝先于消耗,pattern 1 board_face 腿) - # 旗不拦挖掘(插旗不可逆批 2026-09-19):有旗格直接挖 = 对承诺的兑现,兑付改判归 战斗结算。 + # 封印不拦挖掘(封印不可逆批 2026-09-19):有封印格直接挖 = 对承诺的兑现,兑付改判归 战斗结算。 return "" # fx_reveal 效果通道揭示(迭代 20 专长实装批 T1——订阅类「揭示 1 格」效果的棋盘面执行口: # 不经行动经济〔零 AP 消耗零相位要求〕、不要求邻接〔任意揭示〕、只受理安全格〔信息红线=只揭真格, -# 雷格/已开/出界/移除格=拒绝零副作用〕。连锁与揭示事件与 _do_dig 同构(chain 通道复用),资源兑付归 +# 危险格/已开/出界/移除格=拒绝零副作用〕。连锁与揭示事件与 _do_dig 同构(chain 通道复用),资源兑付归 # 战斗结算 _flush_pending_reveals 直接入账——channel=fx_reveal 供归因) func fx_reveal(c: Vector2i) -> bool: if _board == null or not _board.in_bounds(c) or is_revealed(c) or _board.is_mine(c) or _removed.has(c): return false - var chain := _chain_closure(c, _flags) - for rc in _chain_reveal_order(c, _flags): + var chain := _chain_closure(c, _seals) + for rc in _chain_reveal_order(c, _seals): if _revealed.has(rc): continue _revealed[rc] = {"kind": "safe", "digit": _board.digit_of(rc)} cell_revealed.emit({ "cell": rc, "kind": "safe", "digit": _board.digit_of(rc), "variant_ids": _board.variant_ids(rc), "channel": "fx_reveal", "resource": true, - "dug_under_flag": false, + "dug_under_seal": false, }) return true -# 连锁闭包:μX.[O∪{c} ⊆ X ∧ ∀x∈X:(x∈S ∧ num(x)=0 ⇒ N₈(x)∩S∖G ⊆ X)]——连锁不越旗 -func _chain_closure(start: Vector2i, flag_set: Dictionary) -> Dictionary: +# 连锁闭包:μX.[O∪{c} ⊆ X ∧ ∀x∈X:(x∈S ∧ num(x)=0 ⇒ N₈(x)∩S∖G ⊆ X)]——连锁不越封印 +func _chain_closure(start: Vector2i, seal_set: Dictionary) -> Dictionary: var chain := {start: true} var queue: Array[Variant] = [start] while not queue.is_empty(): var c: Vector2i = queue.pop_front() - if _board.is_safe(c) and not flag_set.has(c) and _board.digit_of(c) == 0: + if _board.is_safe(c) and not seal_set.has(c) and _board.digit_of(c) == 0: for n in _board.neighbors8(c): - if _board.is_safe(n) and not flag_set.has(n) and not chain.has(n): + if _board.is_safe(n) and not seal_set.has(n) and not chain.has(n): chain[n] = true queue.append(n) return chain # 揭示规范序:首格 + 触发格 BFS、8 邻行主序 -func _chain_reveal_order(start: Vector2i, flag_set: Dictionary) -> Array: +func _chain_reveal_order(start: Vector2i, seal_set: Dictionary) -> Array: var order: Array[Variant] = [start] var seen := {start: true} var queue: Array[Variant] = [start] while not queue.is_empty(): var c: Vector2i = queue.pop_front() - if _board.is_safe(c) and not flag_set.has(c) and _board.digit_of(c) == 0: + if _board.is_safe(c) and not seal_set.has(c) and _board.digit_of(c) == 0: for n in _board.neighbors8(c): - if _board.is_safe(n) and not flag_set.has(n) and not seen.has(n): + if _board.is_safe(n) and not seal_set.has(n) and not seen.has(n): seen[n] = true order.append(n) queue.append(n) @@ -387,33 +387,33 @@ func _cleared_after(chain: Dictionary) -> bool: return true -# ---- 旗 ---- +# ---- 封印 ---- -func _do_flag_place(c: Vector2i) -> Dictionary: +func _do_seal_place(c: Vector2i) -> Dictionary: var sub := "" if not _board.in_bounds(c): sub = "out_of_catalog" - elif not (flag_range_free or _adjacent_to_hero(c)): - sub = "not_adjacent" # 信标网络装配时豁免(插旗不限相邻——旗动作仍按标准价计费,规则放宽仅可达性) + elif not (seal_range_free or _adjacent_to_hero(c)): + sub = "not_adjacent" # 信标网络装配时豁免(封印不限相邻——封印动作仍按标准价计费,规则放宽仅可达性) elif is_revealed(c): sub = "target_revealed" - elif has_flag(c): - sub = "flag_present" + elif has_seal(c): + sub = "seal_present" elif _removed.has(c): sub = "target_removed" # 迭代 13 T8/D6——中立移除格不可交互 if sub != "": return _outcome(false, "rejected", "board_face", sub) - if not action_economy.try_spend("flag_place"): + if not action_economy.try_spend("seal_place"): return _outcome(false, "rejected", "resource_face", "") - _flags[c] = true # 旗动作零格子事件外发(发射面封闭;反馈经调用返回值命令式驱动) + _seals[c] = true # 封印动作零格子事件外发(发射面封闭;反馈经调用返回值命令式驱动) if action_economy.phase != action_economy.PHASE_ACTIVE: - # 旗动作花完末点 AP 同样终结轮次(行动经济 三出口——AP 用完与动作种类无关;缺漏使 round_end + # 封印动作花完末点 AP 同样终结轮次(行动经济 三出口——AP 用完与动作种类无关;缺漏使 round_end # 永不发出、战斗结算 的 Waiting 结算点永不到达 = 整局软锁。playtest 缺陷②,行为探针复现) - _emit_round_end_flags_and_payload() + _emit_round_end_seals_and_payload() return _outcome(true, "executed", "", "") -# ---- 移动(瞬移;免费不经账本;BFS 限已探明区含已引爆雷格)---- +# ---- 移动(瞬移;免费不经账本;BFS 限已探明区含已引爆危险格)---- func _do_move(c: Vector2i) -> Dictionary: var sub := "" @@ -455,29 +455,29 @@ func compute_move_path(target: Vector2i) -> Array: return path -# ---- 停手(经批次入口委托 行动经济;先发旗判定批再委托——事件序契约 flag_judged < round_end 全路径统一)---- +# ---- 停手(经批次入口委托 行动经济;先发封印判定批再委托——事件序契约 seal_judged < round_end 全路径统一)---- func _do_stop() -> Dictionary: - _emit_flags_batch() # 基线 = 事务开始旗位(停手不改旗位) + _emit_seals_batch() # 基线 = 事务开始封印位(停手不改封印位) if not action_economy.request_stop(): return _outcome(false, "rejected", "phase", "") # 行动经济 直发 stopped 路径 round_end;排雷玩法 禁双发(双发射源纪律) return _outcome(true, "executed", "", "") -# ---- 轮末旗判定 + 棋盘路径 round_end 外发 ---- +# ---- 轮末封印判定 + 棋盘路径 round_end 外发 ---- -func _emit_flags_batch() -> void: - # 判定基线 = 轮次结束事务开始时旗位;行主序枚举(确定性——排序键单点 BoardData.row_major_key, +func _emit_seals_batch() -> void: + # 判定基线 = 轮次结束事务开始时封印位;行主序枚举(确定性——排序键单点 BoardData.row_major_key, # 2026-10-02 修复批);被拔的不判;诚实重复上报(去重归 战斗结算) - var cells: Array[Variant] = _flags.keys() + var cells: Array[Variant] = _seals.keys() cells.sort_custom(func(a, b): return BoardData.row_major_key(a) < BoardData.row_major_key(b)) for c in cells: - flag_judged.emit({"cell": c, "hit": _board.is_mine(c)}) + seal_judged.emit({"cell": c, "hit": _board.is_mine(c)}) -func _emit_round_end_flags_and_payload() -> void: - _emit_flags_batch() +func _emit_round_end_seals_and_payload() -> void: + _emit_seals_batch() var payload: Dictionary[Variant, Variant] = action_economy.last_round_end # 逐字段取自 行动经济(读取权 = 接口契约) round_end_board.emit({"path_tag": payload.get("path_tag", ""), "continuation_hint": payload.get("continuation_hint", "")}) diff --git a/game/core/reward_economy.gd b/game/core/reward_economy.gd index 253294ff..259cef0f 100644 --- a/game/core/reward_economy.gd +++ b/game/core/reward_economy.gd @@ -31,7 +31,7 @@ func _init(db_ref: ConfigDb, rng_ref: RngServiceCore) -> void: # ---- install 期 roll(恰一次;Ready 相位再调拒绝)---- -# eligible = 全部非封锁格(安全格 + 雷格,战斗结算 install 编排供给;封锁格不入清单) +# eligible = 全部非封锁格(安全格 + 危险格,战斗结算 install 编排供给;封锁格不入清单) func roll_board(eligible: Array) -> bool: # 相位守卫:Ready 再调 = double-roll 拒绝(E5);Retired(换图后)= 合法新批重置(E6 roll 半) if _phase == "ready": diff --git a/game/core/settlement/grant_segment.gd b/game/core/settlement/grant_segment.gd index c5cfda5a..3569546d 100644 --- a/game/core/settlement/grant_segment.gd +++ b/game/core/settlement/grant_segment.gd @@ -1,7 +1,7 @@ class_name GrantSegment extends RefCounted # ① 授予段 Segment(迭代 27 T2——P1-1 结算巨函数拆段;段边界=审计五段〔裁点③甲〕)。 -# 职责:结算队列(开格/旗判定/清图)→ 极性路由逐批兑付 + 旗判/军规开单 + round_end 施加 + +# 职责:结算队列(开格/封印判定/清图)→ 极性路由逐批兑付 + 封印判/军规开单 + round_end 施加 + # 转存收口 + 揭示兑付 + 段界结账。行发射/开单/兑付原语仍归宿主编排器(oc)—— # 本段只搬运时序,零算法改动(🔴 零行为变更契约:同种子完整局输出逐位一致)。 # kind 分派单点化(P1-1 同批):counter_add 五位三行组 / grant_material 三位兑付块 @@ -16,8 +16,8 @@ func _init(host) -> void: func run(ri: int) -> void: - # ① 授予段:结算队列(开格/旗判定/清图)→ 极性路由逐批兑付(伤害形态单据暂存——见 _submit 案C 闸)。 - # 判定基线 = 轮末在场旗(发射面已过滤——被挖开的旗已随挖掘擦除零兑付,插旗不可逆批 2026-09-19; + # ① 授予段:结算队列(开格/封印判定/清图)→ 极性路由逐批兑付(伤害形态单据暂存——见 _submit 案C 闸)。 + # 判定基线 = 轮末在场封印(发射面已过滤——被挖开的封印已随挖掘擦除零兑付,封印不可逆批 2026-09-19; # 开格事实不可撤)。 oc._defer_board_damage = true # 案C:授予段伤害单据只暂存不结账(2026-10-06 用户裁——兑付时点=战斗段末) for evt in oc._facts_reveals: @@ -27,10 +27,10 @@ func run(ri: int) -> void: if not (snap is Dictionary): continue if evt.kind == "safe": - if bool(evt.get("dug_under_flag", false)): - # 插旗不可逆四情况④(2026-09-19 用户拍板):插安全格再挖开 = 零惩罚零奖励——正向兑付 - # 作废(归因行在案);标空判定已随旗擦除自然缺席(被挖的旗不在轮末在场基线)。 - oc._emit_row("reward_ineffective", "safe_cell", evt.cell, ri, "奖励作废(插旗格直接挖开——零惩罚零奖励)", 0, {}, "") + if bool(evt.get("dug_under_seal", false)): + # 封印不可逆四情况④(2026-09-19 用户拍板):插安全格再挖开 = 零惩罚零奖励——正向兑付 + # 作废(归因行在案);标空判定已随封印擦除自然缺席(被挖的封印不在轮末在场基线)。 + oc._emit_row("reward_ineffective", "safe_cell", evt.cell, ri, "奖励作废(封印格直接挖开——零惩罚零奖励)", 0, {}, "") continue # dig_reveal 发射+施加(内容数据驱动扩展批 T3——桶序固定承载等价: # 乘区收集 → 正向兑付 → 计数器 → 追加产出(深挖)→ 奥术矢。 @@ -81,16 +81,16 @@ func run(ri: int) -> void: DamageController.TARGET_FRONT_ALIVE, ri, evt.cell, "magic") oc._submit(spell_t, false) elif evt.kind == "mine": - # 插旗不可逆四情况②:插雷格再挖开 = 只受挖雷一层惩罚(mine_hit 照常兑付——惊动巢穴), - # 标中不发(旗已随挖掘擦除、不入轮末判定基线)。 + # 封印不可逆四情况②:插危险格再挖开 = 只受挖雷一层惩罚(mine_hit 照常兑付——惊动巢穴), + # 标中不发(封印已随挖掘擦除、不入轮末判定基线)。 # mine_hit 发射+施加(内容数据驱动扩展批 T3——桶序固定承载等价: # 减半收集 → 负向兑付〔带减半系数〕→ 反打开单 → 连击清零计数器。 - # 迭代 20 T1——发射前移+payload 扩 dug_under_flag〔破封一击〕;新增施加面: + # 迭代 20 T1——发射前移+payload 扩 dug_under_seal〔破封一击〕;新增施加面: # damage_reduce〔安全帽耗层减伤——value_counter 层值,一次清零〕/ heal〔血蜜〕/ # blast_scaled〔陷阱爆发——雷伤×倍率全体敌〕/ bonus_delta〔血税〕/ reveal_tiles〔见血开窍〕) var mine_power := int((snap as Dictionary).get("power", 0)) var mh_hits := oc._fx_emit("mine_hit", {"cell": evt.cell, "round": ri, - "damage": mine_power, "dug_under_flag": bool(evt.get("dug_under_flag", false)), + "damage": mine_power, "dug_under_seal": bool(evt.get("dug_under_seal", false)), "hp_ratio": int(round(100.0 * float(int(oc._enemy_system.hero_unit().get("hp", 0))) / float(maxi(1, int(oc._enemy_system.hero_unit().get("max_hp", 1))))))}) var halve_pct := 0 var mine_reduce := 0 @@ -130,7 +130,7 @@ func run(ri: int) -> void: oc._submit(nct, false) # 地形变异 兑付段(授予段尾——触发枚举 on_open:挖开即伤、chain 通道同口径;伤害单据案C 暂存到 # 战斗段末兑付〔2026-10-06 用户裁〕;信息型 hide_number 不进结算——呈现层读取,见 board_view 数字遮蔽; - # 雷格恒无变异——布置段排除,双层叠罚不存在;插旗格直挖照吃变异伤害——地形后果同 mine_hit 口径, + # 危险格恒无变异——布置段排除,双层叠罚不存在;封印格直挖照吃变异伤害——地形后果同 mine_hit 口径, # 非奖励不作废;吞噬流资源兑付〔荆棘编织/地脉补偿〕中伤害形态行同样经案C闸暂存,非伤害形态照常当场) for evt in oc._facts_reveals: var vids: Array[Variant] = evt.get("variant_ids", []) @@ -160,40 +160,40 @@ func run(ri: int) -> void: for h in dt_hits: if String(h.get("kind", "")) == "grant_material": _apply_material_hit(h, evt.cell, ri) - for evt in oc._facts_flags: - _judge_flag(evt, ri) - # 战旗军规开单段(迭代 12 T3 标旗流——flag_judged 批后统一开单:轮末每面标中旗对最前存活敌 - # 结算 board_typed 必中伤害〔复用零新配方;「旗所在巢穴敌」简化为 default_target 最前存活敌—— - # 台账披露待追认〕;完美布防=本轮旗批全中(hit>0 且 miss==0)时旗伤 ×mult——全对推理奖励)。 + for evt in oc._facts_seals: + _judge_seal(evt, ri) + # 战封印军规开单段(迭代 12 T3 封印流——seal_judged 批后统一开单:轮末每面封印命中对最前存活敌 + # 结算 board_typed 必中伤害〔复用零新配方;「封印所在巢穴敌」简化为 default_target 最前存活敌—— + # 台账披露待追认〕;完美布防=本轮封印批全中(hit>0 且 miss==0)时封印伤 ×mult——全对推理奖励)。 # 伤害单据案C 暂存战斗段末兑付。 - # flag_settle 发射+施加(内容数据驱动扩展批 T3——战旗 open_ticket + 完美布防 modify_ticket - # 改写窗口:旗伤基值×完美倍率后逐旗开单,与迁移前算序一致) + # seal_settle 发射+施加(内容数据驱动扩展批 T3——战封印 open_ticket + 完美布防 modify_ticket + # 改写窗口:封印伤基值×完美倍率后逐封印开单,与迁移前算序一致) var fs_hits := 0 var fs_misses := 0 - for fevt in oc._facts_flags: + for fevt in oc._facts_seals: if bool(fevt.get("hit", false)): fs_hits += 1 else: fs_misses += 1 - var fs_fx := oc._fx_emit("flag_settle", {"flags_hit_all": fs_hits > 0 and fs_misses == 0, - "flags_count": fs_hits, "round": ri}) + var fs_fx := oc._fx_emit("seal_settle", {"seals_hit_all": fs_hits > 0 and fs_misses == 0, + "seals_count": fs_hits, "round": ri}) var banner_hits: Array[Variant] = [] for h in fs_fx: if String(h.get("kind", "")) == "open_ticket" and String(h.get("channel", "")) == "attack": banner_hits.append(h) if not banner_hits.is_empty(): var strike_value := int((banner_hits[0] as Dictionary).get("value", 0)) - var flag_mult := 1 + var seal_mult := 1 for h in fs_fx: - if String(h.get("kind", "")) == "modify_ticket" and String(h.get("mode", "")) == "flag_mult": - flag_mult *= maxi(1, int(h.get("value", 1))) - if fs_misses == 0 and fs_hits > 0 and flag_mult > 1: - strike_value *= flag_mult # 完美布防:同轮全中旗伤倍增(全对推理奖励) - for fevt in oc._facts_flags: + if String(h.get("kind", "")) == "modify_ticket" and String(h.get("mode", "")) == "seal_mult": + seal_mult *= maxi(1, int(h.get("value", 1))) + if fs_misses == 0 and fs_hits > 0 and seal_mult > 1: + strike_value *= seal_mult # 完美布防:同轮全中封印伤倍增(全对推理奖励) + for fevt in oc._facts_seals: if not bool(fevt.get("hit", false)): continue - var st_t := oc._damage.open_ticket(DamageController.KIND_BOARD_TYPED, "feat_flag_strike", - "战旗军规", "board", strike_value, DamageController.TARGET_FRONT_ALIVE, ri, + var st_t := oc._damage.open_ticket(DamageController.KIND_BOARD_TYPED, "feat_seal_strike", + "战封印军规", "board", strike_value, DamageController.TARGET_FRONT_ALIVE, ri, fevt.cell, "normal") oc._submit(st_t, false) # round_end 发射+施加(内容数据驱动扩展批 T3——每轮结算收口:熔火之躯反打单开立〔open_ticket @@ -232,26 +232,26 @@ func run(ri: int) -> void: oc._damage.flush() # 授予段界结账(案C 后本段伤害单据全数暂存,此处对空队 no-op——保留作防御性段界) -# 旗判定(迭代 12 T3 标旗流本体随段迁入——原编排器 _judge_flag 逐字搬运,仅宿主引用加前缀; -# 唯一调用面=本段 run 的 facts_flags 循环)。 -func _judge_flag(evt: Dictionary, ri: int) -> void: +# 封印判定(迭代 12 T3 封印流本体随段迁入——原编排器 _judge_seal 逐字搬运,仅宿主引用加前缀; +# 唯一调用面=本段 run 的 facts_seals 循环)。 +func _judge_seal(evt: Dictionary, ri: int) -> void: var cell: Vector2i = evt.cell if evt.hit: - if oc._flag_consumed.has(cell): - return # 去重跳过(资格以雷格实例为键——排雷玩法 诚实重复上报的对侧);零明细行 - oc._flag_consumed[cell] = true + if oc._seal_consumed.has(cell): + return # 去重跳过(资格以危险格实例为键——排雷玩法 诚实重复上报的对侧);零明细行 + oc._seal_consumed[cell] = true oc._perfect_hit_true += 1 - # flag_hit 发射+施加(内容数据驱动扩展批 T3——桶序固定承载等价:殉爆〔T4 秘宝面〕→ + # seal_hit 发射+施加(内容数据驱动扩展批 T3——桶序固定承载等价:殉爆〔T4 秘宝面〕→ # 净化改写 → 图谱额外资源 → 基线兑付) - var fh_hits := oc._fx_emit("flag_hit", {"cell": cell, "round": ri, + var fh_hits := oc._fx_emit("seal_hit", {"cell": cell, "round": ri, "terrain_kind": oc._harmful_adjacent(cell)}) # 标中殉爆(迭代 11 同调批 T5 → 内容数据驱动扩展批 T4:订阅施加——行 triggers open_ticket - # channel blast value_from magnitude;每标中一面旗全体存活敌吃 N 群伤,无类型走 blast 通道。 + # channel blast value_from magnitude;每标中一面封印全体存活敌吃 N 群伤,无类型走 blast 通道。 # 迭代 20 T1——封印爆裂〔迁入专长〕同面消费:行 triggers open_ticket channel blast) for h in oc._hits_of(fh_hits, "open_ticket"): if String(h.get("channel", "")) != "blast": continue - var fbt := oc._damage.open_ticket(DamageController.KIND_BOARD_BLAST, "feat_flag_burst", "封印爆裂", "board", + var fbt := oc._damage.open_ticket(DamageController.KIND_BOARD_BLAST, "feat_seal_burst", "封印爆裂", "board", int(h.get("value", 0)), DamageController.TARGET_ALL_ALIVE, ri, cell, "", 0, "highlight", {}) oc._submit(fbt, false) # 迭代 20 T1——标中新施加面:counter_add〔血税 标中+1 攻——bonus_delta atk 轴〕/ @@ -282,20 +282,20 @@ func _judge_flag(evt: Dictionary, ri: int) -> void: if oc.treasure_inventory != null and not types.is_empty(): oc.treasure_inventory.apply_overlay("reward_preview", board_p.neighbors8(cell)) oc._emit_row("fx_preview_area", "", cell, ri, "示警烟火·周围资源类型", 0, {"types": types}, "") - # 雷区图谱(迭代 12 T3 标旗流——标中雷额外获得一份格面资源:插旗开始产出对标开格; + # 雷区图谱(迭代 12 T3 封印流——标中雷额外获得一份格面资源:封印开始产出对标开格; # 复用 grant 单点,额外兑付走同一 _grant_routed 正向路由) for h in fh_hits: if String(h.get("kind", "")) == "grant_material": - _apply_material_hit(h, cell, ri, "flag_hit") + _apply_material_hit(h, cell, ri, "seal_hit") var snap = oc._reward_economy.grant(cell) if not (snap is Dictionary): return - oc._grant_routed(snap, "positive", "flag_hit", cell, ri, "flag_hit") + oc._grant_routed(snap, "positive", "seal_hit", cell, ri, "seal_hit") else: oc._perfect_hit_false += 1 - if oc._flag_miss_seen.has(cell): + if oc._seal_miss_seen.has(cell): return # 每格实例一次去重(归因行与负向兑付同键——防逐轮惩罚轰炸) - oc._flag_miss_seen[cell] = true + oc._seal_miss_seen[cell] = true # 完美保险(迭代 20 T4——本战下一次标错不破坏完美资格:_perfect_hit_false 回退=本次标错 # 对完美谓词无痕;只保一次/件,节点级用完即止) if oc._fx_insurance > 0: @@ -305,19 +305,19 @@ func _judge_flag(evt: Dictionary, ri: int) -> void: var hl := "" if oc._perfect_hit_false == 1: hl = "perfect_broken" # 本板完美谓词已破的归因锚 - oc._emit_row("flag_miss", "flag_miss", cell, ri, "标旗未中", 0, {}, hl) - # 危险直觉·守挂点(迭代 21 T3——flag_missed 发射:契约 12 触发主语=「当回合发生的标错 - # 动作」——去重闸=新旧标错判别器〔后续轮重判旧旗被闸挡回零触发〕;双条件②「结算时旗仍在 - # 场」由发射面既有过滤承载〔被挖开的旗已随挖掘擦除零兑付〕;grant_ap mode:queue 下一轮 + oc._emit_row("seal_miss", "seal_miss", cell, ri, "封印未中", 0, {}, hl) + # 危险直觉·守挂点(迭代 21 T3——seal_missed 发射:契约 12 触发主语=「当回合发生的标错 + # 动作」——去重闸=新旧标错判别器〔后续轮重判旧封印被闸挡回零触发〕;双条件②「结算时封印仍在 + # 场」由发射面既有过滤承载〔被挖开的封印已随挖掘擦除零兑付〕;grant_ap mode:queue 下一轮 # 开轮兑现——末轮判出无下一轮=合法作废自动成立〔编排器每战新建,队列不跨战〕;限次=合成行 # adventure 域计数器闸) - for h in oc._fx_emit("flag_missed", {"cell": cell, "round": ri}): + for h in oc._fx_emit("seal_missed", {"cell": cell, "round": ri}): if String(h.get("kind", "")) == "grant_ap" and String(h.get("mode", "")) == "queue": oc.action_economy.queue_ap_delta(int(h.get("value", 0))) var snap = oc._reward_economy.grant(cell) if not (snap is Dictionary): return - oc._grant_routed(snap, "negative", "flag_miss", cell, ri, "") + oc._grant_routed(snap, "negative", "seal_miss", cell, ri, "") # counter_add 三行组单点(原五位分支本体逐字收拢——kind 分派随段归位 P1-1) @@ -326,7 +326,7 @@ func _apply_counter_hit(h: Dictionary) -> void: oc._fx.counter_add(String(h.get("counter_id", "")), int(h.get("value", 0)) if set_v == null else int(set_v), set_v != null) -# grant_material 兑付块单点(原三位分支本体逐字收拢——source_class 两态 safe_cell/flag_hit 由参承载) +# grant_material 兑付块单点(原三位分支本体逐字收拢——source_class 两态 safe_cell/seal_hit 由参承载) func _apply_material_hit(h: Dictionary, cell: Vector2i, ri: int, source_class: String = "safe_cell") -> void: var g_snap = oc._reward_economy.grant(cell) if g_snap is Dictionary: diff --git a/game/core/status_container.gd b/game/core/status_container.gd index 5e9b8d4f..813b5a18 100644 --- a/game/core/status_container.gd +++ b/game/core/status_container.gd @@ -39,7 +39,7 @@ func apply_effect(effect_id: String, source: Dictionary, duration_override: int # 授予时快照(抗表重载——EC9) var snap_m: int = int(row.magnitude) if source.has("magnitude_override"): - snap_m = int(source["magnitude_override"]) # 旗溢价贯穿(迭代14② T4——标中旗 percent 形态同乘快照;缺省路径零扰动) + snap_m = int(source["magnitude_override"]) # 封印溢价贯穿(迭代14② T4——封印命中 percent 形态同乘快照;缺省路径零扰动) var snap_unit: String = String(row.unit) var snap_display: String = String(row.display_name) match policy: diff --git a/game/core/treasure_items.gd b/game/core/treasure_items.gd index cc02857c..fc458718 100644 --- a/game/core/treasure_items.gd +++ b/game/core/treasure_items.gd @@ -7,7 +7,7 @@ extends RefCounted var _items: Array[Variant] = [] # [{handle, item_id, used}]——受理序;Used 保留只读 var _handle_seq := 0 # 受理序句柄(单调递增——零随机) -var _reveal_cells := {} # 真视集:Vector2i → true(惩罚格标记——插旗仍走既有 flag 路径) +var _reveal_cells := {} # 真视集:Vector2i → true(危险格标记——封印仍走既有 seal 路径) var _preview_cells := {} # 预读集:Vector2i → true(奖励身份徽章呈现挂点) var _last_reject := "" # 诊断面(最近一次拒绝原因——呈现反馈取数) diff --git a/game/core/unit_container.gd b/game/core/unit_container.gd index 6ab6bf7e..47e41ad7 100644 --- a/game/core/unit_container.gd +++ b/game/core/unit_container.gd @@ -7,7 +7,7 @@ extends RefCounted # 死亡事件(伤害管线单据化批 2026-09-24 用户裁决③——单位自行宣布死亡):apply_damage 扣血归零、 # alive 翻 false 的同一时点发出;载荷 = 单位句柄(Dictionary 引用,is_hero 区分主角/敌)。 -# 消费方 = 伤害控制器(怪死 → 其未结单据作废〔死亡即不动手〕;主角死 → 兑付终止旗)。 +# 消费方 = 伤害控制器(怪死 → 其未结单据作废〔死亡即不动手〕;主角死 → 兑付终止封印)。 signal unit_died(u: Dictionary) var db: ConfigDb diff --git a/game/data/schemas/action_economy_table.gd b/game/data/schemas/action_economy_table.gd index a52df7fb..58dfc8cb 100644 --- a/game/data/schemas/action_economy_table.gd +++ b/game/data/schemas/action_economy_table.gd @@ -6,7 +6,7 @@ extends Resource @export var ap_per_round: int = 6 # [1,32] knob(默认值 = 现行表值基线,2026-09-16 AP 压速批 8→6 随动) @export var dig_ap_cost: int = 1 # [1,8] knob(域下限 1 = 零预算系统失效拒绝) -@export var flag_place_ap_cost: int = 1 # [0,8] knob(flag_pull_ap_cost 随拔旗退役批 2026-09-19 删除) +@export var seal_place_ap_cost: int = 1 # [0,8] knob(seal_pull_ap_cost 随撤封印退役批 2026-09-19 删除) @export var rap_refresh_cost: int = 6 # [1,64] knob(默认值随 AP 压速批 8→6 随动) @export var refresh_cap_per_round: int = 2 # [1,8] knob(2026-09-12 轮内刷新批——每轮刷新兜底上限,Active/Waiting 合计) @export var move_ap_cost: int = 0 # 冻结 0(P4 氛围承载) @@ -19,8 +19,8 @@ func validate() -> Array: errs.append({"category": "domain", "message": "ap_per_round 越域 [1,32]: %d" % ap_per_round}) if dig_ap_cost < 1 or dig_ap_cost > 8: errs.append({"category": "domain", "message": "dig_ap_cost 越域 [1,8]: %d" % dig_ap_cost}) - if flag_place_ap_cost < 0 or flag_place_ap_cost > 8: - errs.append({"category": "domain", "message": "flag_place_ap_cost 越域 [0,8]: %d" % flag_place_ap_cost}) + if seal_place_ap_cost < 0 or seal_place_ap_cost > 8: + errs.append({"category": "domain", "message": "seal_place_ap_cost 越域 [0,8]: %d" % seal_place_ap_cost}) if rap_refresh_cost < 1 or rap_refresh_cost > 64: errs.append({"category": "domain", "message": "rap_refresh_cost 越域 [1,64]: %d" % rap_refresh_cost}) if refresh_cap_per_round < 1 or refresh_cap_per_round > 8: @@ -30,7 +30,7 @@ func validate() -> Array: if chain_ap_cost != 0: errs.append({"category": "frozen", "message": "chain_ap_cost 结构冻结为 0: %d" % chain_ap_cost}) # 跨字段(行动经济 三轮评审增补):任一动作成本 ≤ ap_per_round,违规加载期致命 - for pair in [["dig_ap_cost", dig_ap_cost], ["flag_place_ap_cost", flag_place_ap_cost]]: + for pair in [["dig_ap_cost", dig_ap_cost], ["seal_place_ap_cost", seal_place_ap_cost]]: if pair[1] > ap_per_round: - errs.append({"category": "cross_field", "message": "%s(%d) > ap_per_round(%d)——挖掘/旗动作永久不可用软锁" % [pair[0], pair[1], ap_per_round]}) + errs.append({"category": "cross_field", "message": "%s(%d) > ap_per_round(%d)——挖掘/封印动作永久不可用软锁" % [pair[0], pair[1], ap_per_round]}) return errs diff --git a/game/data/schemas/adventure_table.gd b/game/data/schemas/adventure_table.gd index 001b2f5f..996c0593 100644 --- a/game/data/schemas/adventure_table.gd +++ b/game/data/schemas/adventure_table.gd @@ -12,8 +12,8 @@ extends Resource ## (2026-10-05 命名统一 + v2.0 改名:旧称「数值件」→ 属性提升;顶层「特性」→「奖励」→「奇物」。 ## 常量与字段随之前缀 curio_*,**尚未**随顶层改名换到 reward_*——见 06-待办清单。 ## 分类轴三个枚举:属性值提升〔生命上限 / AC / 攻击〕;资源〔行动点上限 / -## 刷新次数 / 金币 / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 -## 类内异质性:金币与回复是即时兑付,不进持有集、不持续生效。) +## 刷新次数 / GP / 回复,命名待定〕——本表两类混编;刷新次数与专长获取两项尚未入表。 +## 类内异质性:GP与回复是即时兑付,不进持有集、不持续生效。) ## 三选一提升池 kind 词表(封闭——断点附随件与牌库剔除态依赖它;扩件走本表+registry 修订)。 ## treasure_item 池种退役(迭代 11 第①批 T7——同调批出池);heal 恢复件新入池(v2.2 令牌池追认 b)。 ## 迭代 20 T4——资源凭证五件入池:rap 储备金袋/attune_battery 同调电池/time_sand 时沙/ diff --git a/game/data/schemas/reward_table.gd b/game/data/schemas/reward_table.gd index b1c4f5d2..8e259f90 100644 --- a/game/data/schemas/reward_table.gd +++ b/game/data/schemas/reward_table.gd @@ -42,7 +42,7 @@ func validate() -> Array: # aux 投放行专属校验(迭代 7 T1):极性恒正/加权入池/effect_id=item_id 非空(悬空在 config_db 跨表层 # 对秘宝词表校验——reward_dangling_treasure)/无 power 无区间(数值语义不复用,道具效果读 TreasureItemTable) if ctype == TREASURE_ITEM_TYPE: - # 负向行 = 雷格极性字典占位(雷安同池摇号下雷格可摇中 aux 身份——负路由零兑付兜底, + # 负向行 = 危险格极性字典占位(雷安同池摇号下危险格可摇中 aux 身份——负路由零兑付兜底, # effect_id 空/power 0/weight 0 不入池;2026-09-29 T1) if pol == "negative": if String(row.get("effect_id", "")) != "" or int(row.get("power", 0)) != 0 or int(row.get("weight", 0)) != 0: diff --git a/game/data/schemas/settlement_table.gd b/game/data/schemas/settlement_table.gd index 3881d003..22fc984e 100644 --- a/game/data/schemas/settlement_table.gd +++ b/game/data/schemas/settlement_table.gd @@ -6,7 +6,7 @@ extends Resource @export var equivalence_ref_damage: int = 12 # [1,999] knob——当量参考敞口 D_ref @export var p_perfect: int = 200 # {100,200} percent——完美排雷第二份兑付触发(载体域) -@export var flag_hit_premium: int = 100 # [100,999] percent knob——标中旗兑付溢价 ×(1+(n−100)/100):125=×1.25(条款3 条件二旗溢价形态 a,2026-10-05 判式换代批 provisional);100=无溢价直通零扰动。只乘标中旗正向兑付(flat power/percent 幅度/gp 缓冲三形态),标空/挖格/清图不乘;雷安同池冻结不动 +@export var seal_hit_premium: int = 100 # [100,999] percent knob——封印命中兑付溢价 ×(1+(n−100)/100):125=×1.25(条款3 条件二封印溢价形态 a,2026-10-05 判式换代批 provisional);100=无溢价直通零扰动。只乘封印命中正向兑付(flat power/percent 幅度/gp 缓冲三形态),标空/挖格/清图不乘;雷安同池冻结不动 @export var segment_order: PackedStringArray = [] # 结构冻结——恒等拍板段序校验违例致命 @export var source_label_map: Dictionary[String, Variant] = {} # 结构冻结——source_class→文案键 @export var effect_pool_map: Dictionary[String, Variant] = {} # 结构冻结——effect_id→pool(悬空加载致命) @@ -17,7 +17,7 @@ extends Resource # 主角攻击 = 普通(atk×(1+attack_up),不吃克制)+ 穿刺 + 魔法(后两者由充能供给),三分量各自 floor 后相加。 # 【两条抽象分离,勿焊死】攻击类型 = 伤害的属性轴,只决定查 armor_effectiveness 哪一行,定义里不含任何棋盘来源; # 充能 = 按攻击类型分桶的附加伤害储备,"谁往桶里放东西"属**奖励的定义**(开格/标雷只是奖励触发源,奖励内容可改)。 -# 原 damage_a_per_cell / damage_a_cap / damage_b_per_flag 与 charge_grants 充能奖励定义均退役(2026-09-19 充能退役批——攻击模型回归单分量)。 +# 原 damage_a_per_cell / damage_a_cap / damage_b_per_seal 与 charge_grants 充能奖励定义均退役(2026-09-19 充能退役批——攻击模型回归单分量)。 @export var armor_effectiveness: Dictionary[String, Variant] = {} # 克制修正矩阵(加法点数 delta):{攻击类型 {normal|pierce|magic}: {护甲 {light|ward|heavy}: 点数 [-3,+3]}} # ---- 护甲等级掷点批(2026-09-16 用户拍板,数字即规范——registry settlement_table.ac_roll/ac_discount_tiers 同批定稿)---- # 判定式:掷 1d20,掷点 ≥ 防守方 AC + 攻击加成 → 全额;低掷按缺口(AC−掷点)查档打折,无 miss、无零收益档; @@ -47,8 +47,8 @@ func validate() -> Array: errs.append({"category": "domain", "message": "equivalence_ref_damage 越域 [1,999]: %d" % equivalence_ref_damage}) if not P_PERFECT_DOMAIN.has(p_perfect): errs.append({"category": "pperfect_oob", "message": "p_perfect 载体域 {100,200}: %d" % p_perfect}) - if flag_hit_premium < 100 or flag_hit_premium > 999: - errs.append({"category": "domain", "message": "flag_hit_premium 越域 [100,999](100=无溢价): %d" % flag_hit_premium}) + if seal_hit_premium < 100 or seal_hit_premium > 999: + errs.append({"category": "domain", "message": "seal_hit_premium 越域 [100,999](100=无溢价): %d" % seal_hit_premium}) var seg := Array(segment_order) if seg != FROZEN_SEGMENT_ORDER: errs.append({"category": "segorder_violation", "message": "segment_order 违例——恒等拍板段序校验失败: %s" % str(seg)}) diff --git a/game/data/schemas/treasure_item_table.gd b/game/data/schemas/treasure_item_table.gd index e2fe4ed3..6b12d03c 100644 --- a/game/data/schemas/treasure_item_table.gd +++ b/game/data/schemas/treasure_item_table.gd @@ -29,10 +29,10 @@ const EFFECT_KINDS := ["mine_reveal", "reward_preview", "ap_grant", # 迭代 22 秘宝实装批 T1 扩签八型: # 常时参数面六型(无事件订阅——开局/装板参数注入,注入面按装配集 kind 分发读取): # light_radius_bonus=微光半径加值〔阔视野带〕/rap_transfer_mult=停手转存率千分比〔储备罐 125=1.25〕/ - # dig_range_bonus=挖掘距离加值〔远程镐〕/flag_range_free=插旗不限相邻〔信标网络〕/ + # dig_range_bonus=挖掘距离加值〔远程镐〕/seal_range_free=封印不限相邻〔信标网络〕/ # refresh_stock_grant=三选一刷新存量一次性加仓〔刷新练习〕/shop_refresh_bonus=商店免费刷新加值〔刷新执照〕; # 主动分发两型:safe_dig=安全格直开(天眼——走普通挖格规则全额兑付,C5 裁)/mine_count_preview=危险格数量预告(巢穴预告) - "light_radius_bonus", "rap_transfer_mult", "dig_range_bonus", "flag_range_free", + "light_radius_bonus", "rap_transfer_mult", "dig_range_bonus", "seal_range_free", "refresh_stock_grant", "shop_refresh_bonus", "safe_dig", "mine_count_preview"] const TARGETS := ["none", "area_3x3", "board_wide", "cell"] # 迭代 22 T1 扩 cell=单格真视(线香——≤3×3 窄域契约内) const USE_PHASES := ["active_dig"] @@ -47,7 +47,7 @@ const CHARGE_RESETS := ["adventure", "battle", "level"] # magnitude 消费面(≥1 校验):grant_ap 与同调 N 值 kind;其余 kind 活行 magnitude 恒 0 const MAGNITUDE_KINDS := ["ap_grant", "reflect_damage", "ap_rounds_front", "ap_charge_safe", "reward_weight_bias", "bonus_refresh", "grant_ap", - "light_radius_bonus", "rap_transfer_mult", "dig_range_bonus", "flag_range_free", + "light_radius_bonus", "rap_transfer_mult", "dig_range_bonus", "seal_range_free", "refresh_stock_grant", "shop_refresh_bonus"] # 真视类 kind(迭代 22 T1 护栏扩面——活行 target 必须 ∈ {area_3x3, cell}:真视窄域 ≤3×3 契约) const REVEAL_KINDS := ["mine_reveal", "reveal_tiles"] diff --git a/game/data/schemas/variation_table.gd b/game/data/schemas/variation_table.gd index eb4ff940..1ab435b0 100644 --- a/game/data/schemas/variation_table.gd +++ b/game/data/schemas/variation_table.gd @@ -59,7 +59,7 @@ func validate() -> Array: # 信息型 = 被打开且显示数字时起作用 ⇒ 触发 on_number_shown if row.get("effect", "") == "hide_number" and row.get("trigger", "") != "on_number_shown": errs.append({"category": "cross_field", "message": "%s hide_number ⇒ trigger 必为 on_number_shown" % vid}) - # 信息遮蔽型只允许落安全格(遮蔽对象是数字;雷格无数字可遮)——placement=any 时由读取方 + # 信息遮蔽型只允许落安全格(遮蔽对象是数字;危险格无数字可遮)——placement=any 时由读取方 # 呈现面按 kind=safe 自然短路,此处不设布置约束 # 全局作用域型互锁(2026-10-04 首发批——resource_face ⟺ scope=global 三条 + 新值域; # 判定键=effect/scope 词值,既有六 region 行(flat_damage/hide_number)不入本组——零误伤) diff --git a/game/data/tables/action_economy.tres b/game/data/tables/action_economy.tres index 98be40eb..90192701 100644 --- a/game/data/tables/action_economy.tres +++ b/game/data/tables/action_economy.tres @@ -6,16 +6,16 @@ script = ExtResource("1") ap_per_round = 8 dig_ap_cost = 1 -flag_place_ap_cost = 1 +seal_place_ap_cost = 1 rap_refresh_cost = 8 refresh_cap_per_round = 2 move_ap_cost = 0 chain_ap_cost = 0 ; AP 压速批(2026-09-16 用户拍板):ap_per_round 8→6——无伤通关根因诊断(playtest_5678/1234 实录: -; 第 1 轮 8 AP 全标旗 = 8 份正向兑付 + 16 魔法充能,减伤/削弱单轮堆满 → "被减伤归零"零承伤通关) -; 的主阀门:削每轮兑付吞吐(标旗 rush 墙/归零轮覆盖率 ~50%→~35%)。单格兑付语义零改动(保留标中旗 -; 正向兑付——雷格/安全格概率差异化设计的前提)。rap_refresh_cost 8→6 随动 = 保持 registry 登记 +; 第 1 轮 8 AP 全封印 = 8 份正向兑付 + 16 魔法充能,减伤/削弱单轮堆满 → "被减伤归零"零承伤通关) +; 的主阀门:削每轮兑付吞吐(封印 rush 墙/归零轮覆盖率 ~50%→~35%)。单格兑付语义零改动(保留封印命中 +; 正向兑付——危险格/安全格概率差异化设计的前提)。rap_refresh_cost 8→6 随动 = 保持 registry 登记 ; "默认 = ap_per_round,满停一轮 = 恰好一刷基线节拍"耦合不变式;若有意解耦(刷新相对变贵推清图) ; 须单独立批。减伤幅度下调(-30 → 下调)为同根因配套项,待用户拍板数值后另行落表; ; 终局方案 = 减伤换装护甲等级 AC+1(随 AC 掷点定稿批 EV 中性换装)。 @@ -23,6 +23,6 @@ chain_ap_cost = 0 ; ; Package B 数值优化批·首版(2026-09-22——qa-data/实现计划书_PackageB.md §4.2):ap_per_round 6→8、 ; rap_refresh_cost 6→8 随动(维持 registry 登记"刷新成本 = 每轮 AP,满停一轮恰一刷"不变式;schema -; 非硬约束,系设计不变式)。上批 8→6 所杀"首轮全标旗→减伤削弱堆满→零承伤通关"退化,在 B1 敌人 HP +; 非硬约束,系设计不变式)。上批 8→6 所杀"首轮全封印→减伤削弱堆满→零承伤通关"退化,在 B1 敌人 HP ; 大幅抬升后单轮堆满已无法零承伤通关多轮整场,风险缓解;复测须盯 analyze.py 零承伤轮指标,明显回升 -; 则按计划书 §6.5 AP 8→7 回调。dig/flag/move/chain cost 与 refresh_cap 未动(move/chain 结构冻结 0)。 +; 则按计划书 §6.5 AP 8→7 回调。dig/seal/move/chain cost 与 refresh_cap 未动(move/chain 结构冻结 0)。 diff --git a/game/data/tables/feats.tres b/game/data/tables/feats.tres index b324cf6a..67e6538c 100644 --- a/game/data/tables/feats.tres +++ b/game/data/tables/feats.tres @@ -7,8 +7,8 @@ script = ExtResource("1") ; 迭代 20 专长实装批 T3——专长重设计 27+2 件换代(奇物.md 基础件表 27 件+迁入登记 2 件=29 行; ; 件数口径=卡文 §10.4 推荐案:29 行=基础 27+迁入 2,V2/V3 断言按落表实数)。旧 27 件随本批整体 ; 退役(素材库表二);订阅行 on/when/do 词表=效果引擎封闭集;rarity 四级直映射令牌档;cap=已拿 -; 上限(案②解耦——拿了才计刷出不计);数值全 provisional 归调参批;desc 禁「雷/插旗」字面 -; (契约 6 命名纪律:插旗=封印、危险格=陷阱/巢穴风味层)。dispatch 预评估口径注记:「每第 N 次/积 +; 上限(案②解耦——拿了才计刷出不计);数值全 provisional 归调参批;desc 禁「雷/封印」字面 +; (契约 6 命名纪律:封印=封印、危险格=陷阱/巢穴风味层)。dispatch 预评估口径注记:「每第 N 次/积 ; 满触发」系 when 于命中前读计数器现值——行 when 按 N-1 落值(双管镐 mod_eq ref 1/地质学家 eq 3/ ; 跳格 eq 2/封印匠 mod_eq ref 2/保险丝 eq 1——effect_words_t1_test mod_eq 断言钉住该口径)。 rows = [ @@ -254,10 +254,10 @@ rows = [ "desc": "封印命中计数;轮末计数≥2 → 返 1 AP(下轮)", "triggers": [ { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "counter_add", - "counter_id": "echo_flags", + "counter_id": "echo_seals", "value": 1 } }, @@ -266,7 +266,7 @@ rows = [ "when": [ { "fact": "counter", - "id": "echo_flags", + "id": "echo_seals", "op": "gte", "value": 2 } @@ -282,14 +282,14 @@ rows = [ "when": [ { "fact": "counter", - "id": "echo_flags", + "id": "echo_seals", "op": "gte", "value": 2 } ], "do": { "kind": "counter_add", - "counter_id": "echo_flags", + "counter_id": "echo_seals", "set": 0 } } @@ -302,7 +302,7 @@ rows = [ "desc": "封印命中:揭示周围 3×3 的资源类型(不揭安危)", "triggers": [ { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "preview_area", "value": 1 @@ -317,19 +317,19 @@ rows = [ "desc": "封印命中每第 3 次 → 该危险格中立移除", "triggers": [ { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "counter_add", - "counter_id": "smith_flags", + "counter_id": "smith_seals", "value": 1 } }, { - "on": "flag_hit", + "on": "seal_hit", "when": [ { "fact": "counter", - "id": "smith_flags", + "id": "smith_seals", "op": "mod_eq", "value": 3, "ref": 2 @@ -349,7 +349,7 @@ rows = [ "desc": "封印命中:本轮 AC +1", "triggers": [ { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "ac_bonus", "value": 1, @@ -612,7 +612,7 @@ rows = [ "on": "mine_hit", "when": [ { - "fact": "dug_under_flag", + "fact": "dug_under_seal", "op": "eq", "value": true } @@ -803,7 +803,7 @@ rows = [ } }, { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "bonus_delta", "axis": "atk", @@ -835,13 +835,13 @@ rows = [ ] }, { - "feat_id": "flag_burst", + "feat_id": "seal_burst", "display_name": "封印爆裂", "rarity": "rare", "desc": "封印命中:全体存活敌 3 点群伤", "triggers": [ { - "on": "flag_hit", + "on": "seal_hit", "do": { "kind": "open_ticket", "channel": "blast", diff --git a/game/data/tables/reward.tres b/game/data/tables/reward.tres index cef630fc..9a5982ca 100644 --- a/game/data/tables/reward.tres +++ b/game/data/tables/reward.tres @@ -185,7 +185,7 @@ rows = [{ "cell_type": "gp", "polarity": "positive", "effect_id": "gp_gain", -"display_name": "金币袋", +"display_name": "GP 袋", "power": 3, "weight": 2, "pool_tag": "cell", @@ -203,7 +203,7 @@ rows = [{ }] ; 格面资源批(2026-09-15 用户拍板——registry reward_table 条目为现行 schema 事实源): -; 十行格面池(五型 × 正负各一行)+ 清图槽一行。安全格与雷格同池同分布(雷安同池), +; 十行格面池(五型 × 正负各一行)+ 清图槽一行。安全格与危险格同池同分布(雷安同池), ; 装板期一次摇定;摇号只消费正向行权重(类型频次 = attack 20 / defense 16 / blast 16 / heal 3 / weaken 12,合计 67; ; 头段"heal 15 / weaken 12,合计 79"为历史注记——数值压缩批后 heal 3、合计 67,见本文件尾部 2026-09-17 批注); ; 负向行 weight=0 不参与摇号,纯(类型, 极性)兑付字典——heal 负向 = 主角直伤 4(不经增益状态), @@ -237,8 +237,8 @@ rows = [{ ; 类型频次合计仍 67:attack 14 / defense 11 / blast 16 / heal 2 / weaken 8 / pierce 8 / magic 8。 ; ; 九型批(2026-09-20 用户拍板——GP 进第九型,获取来源=战斗结束掉落+雷图低概率惊喜获取〔量与战斗掉落相当〕; -; 金币袋=挖开安全格入战斗内缓冲、战斗完成统一入账;破财=雷格摇到 gp 面的字典负向行〔weight 0 不入池, -; 挖雷格兑付=缓冲 -2 钱包侧 clamp ≥0〕;正向权重合计 74→76);行值 provisional 归 难度曲线与Boss。 +; GP 袋=挖开安全格入战斗内缓冲、战斗完成统一入账;破财=危险格摇到 gp 面的字典负向行〔weight 0 不入池, +; 挖危险格兑付=缓冲 -2 钱包侧 clamp ≥0〕;正向权重合计 74→76);行值 provisional 归 难度曲线与Boss。 ; gp 两行 tier=1(provisional 占位);effect_id gp_gain/gp_loss = 战斗内缓冲(escrow)通道路由键 ;(战斗结算 _apply_percent_row 分流,不入增益容器——ConfigDB ① status_effects 悬空豁免归 core 面)。 ; diff --git a/game/data/tables/settlement.tres b/game/data/tables/settlement.tres index 14d39587..8bf9a0c9 100644 --- a/game/data/tables/settlement.tres +++ b/game/data/tables/settlement.tres @@ -6,16 +6,16 @@ script = ExtResource("1") equivalence_ref_damage = 4 p_perfect = 200 -flag_hit_premium = 125 +seal_hit_premium = 125 segment_order = PackedStringArray("grant", "buff_debuff", "combat", "decay", "verdict") source_label_map = { "safe_cell": "安全格", -"flag_hit": "标中旗", +"seal_hit": "封印命中", "mine_hit": "踩雷", "clear_reward": "清图奖励", "enemy_action": "敌方行动", "hero_attack": "主角攻击", -"flag_miss": "标旗未中" +"seal_miss": "封印未中" } effect_pool_map = { "attack_up": "hero_offense", @@ -63,7 +63,7 @@ armor_roll_stream = "armor_roll" ; source_label_map 删 item 键;effect_pool_map 增 sapped→hero_offense(weaken 型负向——乏力)。 ; enrage(敌方暴走 +25%,enemy_output 池)/ off_guard(我方失衡 +25%,hero_defense 池)/ ; sapped(我方乏力 -25%,hero_offense 池)= attack/defense/weaken 三型负向字典行 -; (极性路由兑付:挖雷格 / 标错安全格按该格 cell_type 取负向行;heal 负向 = 主角直伤不经状态、blast 负向 = 警觉(敌方 AC +1,2026-09-20 八型批换装))。 +; (极性路由兑付:挖危险格 / 标错安全格按该格 cell_type 取负向行;heal 负向 = 主角直伤不经状态、blast 负向 = 警觉(敌方 AC +1,2026-09-20 八型批换装))。 ; 减伤墙调参批(2026-09-13):pool_clamp 域 [-100,+100] 结构冻结不动;减伤杠杆走 status_effects.tres(批注在该表)。 ; 护甲等级掷点批(2026-09-16 用户拍板,数字即规范——战斗结算 GDD 护甲等级掷点节定稿同批): ; roll_faces=20 / roll_tier_bounds=[3,7] / roll_tier_discounts=[75,50,25] / crit_roll=20 / crit_multiplier=200 / diff --git a/game/data/tables/status_effects.tres b/game/data/tables/status_effects.tres index 6f6801a2..2e612be9 100644 --- a/game/data/tables/status_effects.tres +++ b/game/data/tables/status_effects.tres @@ -93,7 +93,7 @@ rows = [{ ; 承伤带对 C3 F4(≤20%/普通场、≤50%/Boss 场)复验责任随批;B3 GDD "-50" 文字同步随下次 B3 修订批。 ; 格面资源批(2026-09-15):新增 sapped(乏力——weaken 型负向,hero_offense 池,attack_up 镜像; ; 进 effect_pool_map 同批登记)——状态表六行→七行;enrage/off_guard 语义 = attack/defense 型负向 -; (标错安全格 / 踩到雷格经极性路由兑付,不再绑"标错反噬"单一来源)。 +; (标错安全格 / 踩到危险格经极性路由兑付,不再绑"标错反噬"单一来源)。 ; 护甲等级掷点批(2026-09-16 用户拍板——百分比减伤增益整体换装为 AC,无双轨): ; defense_up(减伤 −30 percent ×2 层)整行退役(上方 2026-09-13 减伤墙批注随之留档)—— ; "叠满池触底 ×0"免伤墙的结构面随 AC 掷点从根杜绝;新增 ac_up(盾牌加护 +1 ac ×2 层——2026-10-12 由"护甲强化"改名)—— diff --git a/game/data/tables/treasure_items.tres b/game/data/tables/treasure_items.tres index 5c451922..9ef98550 100644 --- a/game/data/tables/treasure_items.tres +++ b/game/data/tables/treasure_items.tres @@ -5,7 +5,7 @@ [resource] script = ExtResource("1") ; 迭代 22 秘宝体系实现重构落地批 T1(2026-10-12):新目录 12 行全量换代(设计权威=秘宝.md「目录(重设计 v1)」; -; 旧 12 行删除——venom_edge/flag_burst 已随迭代 20 专长批迁出删除,本批实删 12 行)。三档=普通 7/优秀 3/稀有 2 +; 旧 12 行删除——venom_edge/seal_burst 已随迭代 20 专长批迁出删除,本批实删 12 行)。三档=普通 7/优秀 3/稀有 2 ; (传说留空=空集合法,迭代 20 追认③先例)。解锁混合制(契约 8 逐件分配锁定表,2026-10-11 用户裁 C1): ; 钥石购买件 unlock_keystone_cost(provisional 占位);条件件 unlock_requires 谓词行——计数键 ; adventure_cleared=生涯通关局数(C6 裁:通关=打通整局冒险)/boss_kill_count=生涯 Boss 击杀/vision_used= @@ -209,7 +209,7 @@ rows = [{ "item_id": "beacon_network", "display_name": "信标网络", "dimension_tags": ["risk"], -"desc": "插旗不限相邻(可对任何未开格插旗)", +"desc": "封印不限相邻(可对任何未开格封印)", "tier": "rare", "target": "none", "magnitude": 1, @@ -220,5 +220,5 @@ rows = [{ "key": "vision_used", "threshold": 10 }], -"effect_kinds": ["flag_range_free"] +"effect_kinds": ["seal_range_free"] }] diff --git a/game/presentation/battle_narrator.gd b/game/presentation/battle_narrator.gd index 3704c7ca..c53abb92 100644 --- a/game/presentation/battle_narrator.gd +++ b/game/presentation/battle_narrator.gd @@ -21,7 +21,7 @@ static func rest_line(healed: int, hp: int, max_hp: int) -> String: # 商店房行(GP+商店房实施批——到达即开店;购买/离开归玩家意图) static func shop_line(gp: int) -> String: - return "[color=#%s]商店房:金币 %d——购买即时生效,离开后选下一跳[/color]" % [UiKit.HEX_LOG_GAIN, gp] + return "[color=#%s]商店房:GP %d——购买即时生效,离开后选下一跳[/color]" % [UiKit.HEX_LOG_GAIN, gp] # 选路口行(零自动推进停点——战斗胜利/兑付确认后出现) @@ -111,7 +111,7 @@ static func bonus_card_text(id: String, tier: String, value: int, treasure_line: "armor": return "护甲等级提升%s\n护甲 +%d" % [ts, value] "gp": - return "金币袋%s\n金币 +%d" % [ts, value] + return "GP 袋%s\nGP +%d" % [ts, value] "heal": return "恢复药剂\n生命 +%d(当即回复)" % value "treasure_item": diff --git a/game/presentation/camp_shop_presenter.gd b/game/presentation/camp_shop_presenter.gd index b1b2c533..bb2001f8 100644 --- a/game/presentation/camp_shop_presenter.gd +++ b/game/presentation/camp_shop_presenter.gd @@ -177,7 +177,7 @@ func on_shop_buy(product_id: String) -> void: # pool 面:买 1 → 核心全重抽——货架整架重投喂(重抽反馈;余额不足核心拒绝零副作用) if not runner.buy_pool_item(product_id): logger.log_ux("ux_reject", {"source": "wallet", "sub_reason": "insufficient_gp"}) - toast.show_toast("金币不足——买不起这件商品", "warn") + toast.show_toast("GP不足——买不起这件商品", "warn") return shop_overlay.open_shelf(runner.shop_shelf(), int(runner.gp)) shop_overlay.set_visit_info(int(runner.shop_bp_visit_buys()), float(db.shop_price_a())) # T6 爬价规则行 @@ -187,7 +187,7 @@ func on_shop_buy(product_id: String) -> void: if not runner.buy_product(product_id): # 余额不足(按钮禁用为常态防线——兜底拒绝可见,pattern 1) logger.log_ux("ux_reject", {"source": "wallet", "sub_reason": "insufficient_gp"}) - toast.show_toast("金币不足——买不起这件商品", "warn") + toast.show_toast("GP不足——买不起这件商品", "warn") return shop_overlay.refresh_state(runner.shop_products(), int(runner.gp)) _refresh_presentations.call() @@ -199,7 +199,7 @@ func on_shop_refresh() -> void: if runner == null or not runner.is_shop_pool(): return if not runner.shop_refresh(): - toast.show_toast("金币不足——刷新失败", "warn") + toast.show_toast("GP不足——刷新失败", "warn") return shop_overlay.open_shelf(runner.shop_shelf(), int(runner.gp)) shop_overlay.set_visit_info(int(runner.shop_bp_visit_buys()), float(db.shop_price_a())) # T6 爬价规则行 diff --git a/game/presentation/curio_interact_controller.gd b/game/presentation/curio_interact_controller.gd index 604958fe..967a2eb3 100644 --- a/game/presentation/curio_interact_controller.gd +++ b/game/presentation/curio_interact_controller.gd @@ -189,7 +189,7 @@ func on_refresh() -> void: # 免费位(X/Y)已穷——GP 付费档(先扣钱包后重抽,余额不足拒绝零副作用) var cost: int = adventure.curio_refresh_gp_cost() if runner == null or not runner.spend_gp(cost): - toast.show_toast("金币不足——刷新失败", "warn") + toast.show_toast("GP不足——刷新失败", "warn") return refreshed = adventure.refresh_curio_paid() _refresh_presentations.call() # 钱包变化上屏(对齐商店购买后刷新面) diff --git a/game/presentation/hud_presenter.gd b/game/presentation/hud_presenter.gd index 79686b2c..f6caefcf 100644 --- a/game/presentation/hud_presenter.gd +++ b/game/presentation/hud_presenter.gd @@ -1,7 +1,7 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION ## 呈现装配器:核心状态 → 呈现文案的全部翻译集中于此(战斗屏 B/C/D 区文案与投影),静态无状态。 ## 核心读取只走 settlement.presentation_snapshot() 成文快照面——禁链式穿透 settlement.enemy_system.* / status_effects 一类内部路径。 -## 旗/拔/移动反馈与 AP/RAP 无推送信号——组合根每次动作/结算返回后必须重查 refresh,漏调即陈旧呈现。 +## 封印/拔/移动反馈与 AP/RAP 无推送信号——组合根每次动作/结算返回后必须重查 refresh,漏调即陈旧呈现。 class_name HudPresenter extends RefCounted @@ -166,7 +166,7 @@ static func outcome_text(outcome: Dictionary) -> String: "not_adjacent": "不能执行:目标与小人不相邻", "target_revealed": "不能执行:目标已开", "target_concealed": "不能移动:目标未开", - "flag_present": "不能插旗:此格已有旗(旗为一次性承诺——相邻时左键直接挖开)", + "seal_present": "不能封印:此格已有封印印记(封印为一次性承诺——相邻时左键直接挖开)", "no_path": "不能移动:已探明区不连通", "out_of_catalog": "无效目标", } diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 15ffe719..33021374 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -696,7 +696,7 @@ func _on_battle_end_continue() -> void: _refresh_presentations() return # 会话收束(迭代 27 T1 物化):旧手工置空清单(runner/settlement/adventure/_adventure_mode + - # _reset_run_scope 三项)整节点 queue_free() 消亡——新闲时会话即建,局态旗/账本/模态挂起全复位 + # _reset_run_scope 三项)整节点 queue_free() 消亡——新闲时会话即建,局态封印/账本/模态挂起全复位 _debug.reset() _begin_session(false) debug_overlay.reset_sliders() @@ -964,7 +964,7 @@ func _on_hover_forbidden(_cell: Vector2i) -> void: func _on_chord_attempted(_cell: Vector2i) -> void: if not run_scope.hints_shown.has("chord"): - _show_hint("本作无双击快开——插旗后轮末自动判定标中;点数字格可移动小人", "chord") + _show_hint("本作无双击快开——封印后轮末自动判定标中;点数字格可移动小人", "chord") func _show_hint(text: String, hint_id: String) -> void: @@ -1199,7 +1199,7 @@ func _on_board_action(cell: Vector2i, kind: String) -> void: run_scope.locked_click = {"cell": cell, "kind": kind} return # 秘宝选中态劫持(迭代 7 T4——两步交互第二步):点格=使用目标拾取,不落挖格; - # 只劫持挖掘点击(move/flag 语义不冲突——选中期玩家仍可移动/插旗) + # 只劫持挖掘点击(move/seal 语义不冲突——选中期玩家仍可移动/封印) var treasure_sel: int = _treasure_ui.active_selection() if treasure_sel != 0 and kind == "dig": _treasure_ui.attempt_use(treasure_sel, cell) @@ -1242,7 +1242,7 @@ func _on_stop_pressed() -> void: func _on_refresh_confirmed() -> void: - # 弃图刷新(挖掘期 Active 当场换图继续挖——D4;RAP 按门槛扣费 · 旧板旗作废,每轮上限读表) + # 弃图刷新(挖掘期 Active 当场换图继续挖——D4;RAP 按门槛扣费 · 旧板封印作废,每轮上限读表) if _input_locked(): return var ok: bool = false @@ -1253,7 +1253,7 @@ func _on_refresh_confirmed() -> void: logger.log_action("refresh", Vector2i(-1, -1), ok) if ok: logger.log_ux("ux_refresh_attempt", {"result": "accepted", "round_refresh_index": _refresh_used_snapshot()}) - board_zone.toast.show_toast("RAP−%d · 旧板旗作废——新图已就位,AP 保留继续挖" % int(db.action_economy.rap_refresh_cost), "gold") + board_zone.toast.show_toast("RAP−%d · 旧板封印作废——新图已就位,AP 保留继续挖" % int(db.action_economy.rap_refresh_cost), "gold") else: # 资源面/上限拒绝(EC13 合法拒绝可见;行动经济 无载荷——客户端按上下文推断) var rap: int = int(run_scope.settlement.presentation_snapshot().get("rap", 0)) if run_scope.settlement != null else 0 diff --git a/game/presentation/row_pacer.gd b/game/presentation/row_pacer.gd index 8a1ba50b..c734b9f9 100644 --- a/game/presentation/row_pacer.gd +++ b/game/presentation/row_pacer.gd @@ -89,11 +89,11 @@ func _consume_row(row: Dictionary) -> void: stage.on_step_row_fx(row) _play_cross_zone_fx(row) # 跨区因果演出(结算演出链批):开格之因 → 站桩之果 _play_settlement_mark(row) # 三轮 #3——逐条标出:Buff/Debuff 色环脉冲 → 伤害/治疗数字浮现 - # 高光演出(战斗结算×3①② 占位):完美排雷横幅 / 标中旗加重弹道 + # 高光演出(战斗结算×3①② 占位):完美排雷横幅 / 封印命中加重弹道 if String(row.get("type", "")) == "highlight" and String(row.get("highlight", "")) != "skill_unlock": board_zone.fx.play_perfect_sweep() - elif String(row.get("highlight", "")) == "flag_hit": - board_zone.fx.play_flag_hit_projectile(true) + elif String(row.get("highlight", "")) == "seal_hit": + board_zone.fx.play_seal_hit_projectile(true) # Boss 半血解锁技提示(迭代14④ T4——D8 呈现面:skill_unlock 行弹一次性技能名 toast, # 轻量非演出零动画资产;行文本 =「XX 解锁了 YY」,只报技能名不报数值——规格=敌人系统 意图呈现节) if String(row.get("highlight", "")) == "skill_unlock": diff --git a/game/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd index 411f9ee2..eeb30884 100644 --- a/game/presentation/ui_assembler.gd +++ b/game/presentation/ui_assembler.gd @@ -200,7 +200,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: # 故永不被隐藏);右下角 16px(拇指区惯例,与旧三屏角标同域);可见性归组合根(_debug_entry # 门控落定后赋值);地图屏底栏 85px 常驻,offset 抬升本函数不处理(组合根 _sync_status_entry)。 static func build_debug_badge(host: Control) -> Button: - var badge := UiKit.button("调试", 0.0) # 角落小件豁免宽度基准(0=不设 min/flags——同状态角标) + var badge := UiKit.button("调试", 0.0) # 角落小件豁免宽度基准(0=不设 min/seals——同状态角标) badge.add_theme_font_size_override("font_size", UiKit.FS_HINT) badge.tooltip_text = "打开调试浮窗(当局数据/种子/数值调整)" badge.grow_horizontal = Control.GROW_DIRECTION_BEGIN # 向左上生长——尺寸变化向屏内 diff --git a/game/presentation/views/ap_bar_view.gd b/game/presentation/views/ap_bar_view.gd index 7cf1625a..12b8f2ea 100644 --- a/game/presentation/views/ap_bar_view.gd +++ b/game/presentation/views/ap_bar_view.gd @@ -1,5 +1,5 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION -## D 区 AP 条:AP/RAP 点阵读数与停手、图例、弃图刷新入口(弃图刷新为二段确认——RAP 扣费·旧板旗作废显式代价)。 +## D 区 AP 条:AP/RAP 点阵读数与停手、图例、弃图刷新入口(弃图刷新为二段确认——RAP 扣费·旧板封印作废显式代价)。 ## RAP 读数贴弃图刷新消费口(RAP 唯一消费口=弃图刷新);无推送信号——组合根每次核心调用返回后经 setter 重查注入。 class_name ApBarView extends PanelContainer @@ -77,7 +77,7 @@ func _init() -> void: _confirm_row.add_theme_constant_override("separation", 4) _confirm_row.visible = false row.add_child(_confirm_row) - _confirm_lab = UiKit.label("RAP−%d · 旧板旗作废" % refresh_cost,UiKit.FS_HINT, true, COL_INK) + _confirm_lab = UiKit.label("RAP−%d · 旧板封印作废" % refresh_cost,UiKit.FS_HINT, true, COL_INK) _confirm_row.add_child(_confirm_lab) var confirm_btn := UiKit.button("确认弃图", 0.0) # HUD 顶条紧凑钮豁免宽度基准 confirm_btn.pressed.connect(_disarm_and_fire) @@ -119,7 +119,7 @@ func set_ap(ap: int, ap_max: int) -> void: func set_refresh_cost(cost: int) -> void: refresh_cost = cost - _confirm_lab.text = "RAP−%d · 旧板旗作废" % cost + _confirm_lab.text = "RAP−%d · 旧板封印作废" % cost func set_refresh_state(remaining: int, ready: bool) -> void: diff --git a/game/presentation/views/battle_end_overlay.gd b/game/presentation/views/battle_end_overlay.gd index 902160c5..9d7405c7 100644 --- a/game/presentation/views/battle_end_overlay.gd +++ b/game/presentation/views/battle_end_overlay.gd @@ -49,9 +49,9 @@ func _init() -> void: _seal.size_flags_vertical = Control.SIZE_SHRINK_CENTER header.add_child(_seal) var seal_img := TextureRect.new() - var flag_tex := UiKit.load_tex("res://assets/art/board/flag_seal.png") - if flag_tex != null: - seal_img.texture = flag_tex + var seal_tex := UiKit.load_tex("res://assets/art/board/seal_mark.png") + if seal_tex != null: + seal_img.texture = seal_tex seal_img.custom_minimum_size = Vector2(32, 32) seal_img.expand_mode = TextureRect.EXPAND_IGNORE_SIZE seal_img.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED @@ -134,7 +134,7 @@ func open_victory(verdict_line: String, continue_label: String, board_rect: Rect _play_victory_dust() # 尘金粒子(P-C5 两套并存——开关=调试浮窗,会话级) else: _play_crest_assemble() # 碎砖拼纹章(§2.4——样张 v2 冻结批 T3 终稿;默认) - _play_flag_recall(0) # 胜利不放旗收回 + _play_seal_recall(0) # 胜利不放封印收回 if gp_gain >= 0: _roll_gp(gp_gain, gp_total) @@ -150,7 +150,7 @@ func open_defeat(verdict_line: String, continue_label: String, board_rect: Rect2 _cele.visible = false _rows_box.visible = false # P-C4 维持 OQ14:失败侧不呈现账行 _play_dust_sadle() # 坐砖掸灰(§2.5——终稿) - _play_flag_recall(8) + _play_seal_recall(8) func close() -> void: @@ -211,9 +211,9 @@ func _fx_center() -> Vector2: return get_viewport_rect().size * 0.5 -# 旗化光点收回(失败——插过的旗逐面化光点收回占位,§2.5) -func _play_flag_recall(count: int) -> void: - _fx_flag_dots = count +# 封印化光点收回(失败——插过的封印逐面化光点收回占位,§2.5) +func _play_seal_recall(count: int) -> void: + _fx_seal_dots = count for i in count: var dot := ColorRect.new() dot.color = COL_GOLD @@ -235,7 +235,7 @@ func _play_flag_recall(count: int) -> void: var _crest_bricks: Array[ColorRect] = [] # 纹章碎砖驻留面(close 时回收) var _fx_crest_shards := 0 var _fx_dust_motes := 0 -var _fx_flag_dots := 0 +var _fx_seal_dots := 0 # 碎砖拼纹章(胜利 §2.4——蜡封落定后十枚碎砖自四周向蜡封外环收拢拼成纹章环,驻留至 close) @@ -323,9 +323,9 @@ func _clear_crest_bricks() -> void: _crest_bricks.clear() -# 演出探针出口(fx_probe——胜利纹章/失败掸灰/旗光收回三断言面) +# 演出探针出口(fx_probe——胜利纹章/失败掸灰/封印光收回三断言面) func fx_probe() -> Dictionary: - return {"crest_shards": _fx_crest_shards, "dust_motes": _fx_dust_motes, "flag_dots": _fx_flag_dots} + return {"crest_shards": _fx_crest_shards, "dust_motes": _fx_dust_motes, "seal_dots": _fx_seal_dots} func _emit_continue_pressed() -> void: diff --git a/game/presentation/views/battle_log_view.gd b/game/presentation/views/battle_log_view.gd index 1c340da7..202ff36e 100644 --- a/game/presentation/views/battle_log_view.gd +++ b/game/presentation/views/battle_log_view.gd @@ -153,7 +153,7 @@ func _format_row(row: Dictionary, agg_count := -1) -> String: var suffix := "(%s)" % src if src != "" else "" match String(row.get("type", "")): "effect": - # GP 型效果行(GP+商店房实施批 2026-09-21):「金币袋 +3」兑付反馈——value = 本行 ±power, + # GP 型效果行(GP+商店房实施批 2026-09-21):「GP 袋 +3」兑付反馈——value = 本行 ±power, # escrow = 战斗内缓冲现值(入钱包在战斗末一次上抛——呈现语义与增益池分账) if String(row.get("effect_id", "")) in ["gp_gain", "gp_loss"]: var gp_col := UiKit.HEX_LOG_GAIN if v > 0 else UiKit.HEX_LOG_LOSS @@ -190,8 +190,8 @@ func _format_row(row: Dictionary, agg_count := -1) -> String: # 未生效类行:⚠ icon + 划线形状冗余(非色相独载)+ 聚合计数 var n := (" ×%d" % agg_count) if agg_count > 1 else "" return prefix + "[s][color=#%s]⚠ %s%s[/color][/s]%s" % [UiKit.HEX_LOG_VOIDED, name_, n, suffix] - "flag_miss": - var body := "✗ %s%s" % [name_, "(本板完美排雷已破——归因此旗)" if hl == "perfect_broken" else ""] + "seal_miss": + var body := "✗ %s%s" % [name_, "(本板完美排雷已破——归因此封印)" if hl == "perfect_broken" else ""] return prefix + (_gold_frame(body) if hl == "perfect_broken" else "[color=#%s]%s[/color]" % [UiKit.HEX_LOG_ROUND, body]) "cast": # 施放行(敌人技能池批——蓄力行 charge 改型):增益技 0 伤害施放,具名技能 diff --git a/game/presentation/views/board_cell_unit.gd b/game/presentation/views/board_cell_unit.gd index d4b2e011..8046ffae 100644 --- a/game/presentation/views/board_cell_unit.gd +++ b/game/presentation/views/board_cell_unit.gd @@ -32,15 +32,15 @@ var proj_band := 0.0: # 地面投影带宽(像素,0 = 不画 set(v): proj_band = v queue_redraw() -var glyph := "": # 文字位——数字/雷/旗/人/?(现行视觉旗与数字互斥,同位承载) +var glyph := "": # 文字位——数字/雷/封印/人/?(现行视觉封印与数字互斥,同位承载) set(v): glyph = v queue_redraw() -var glyph_color := UiKit.INK: # 文字色(墨族/雷朱/旗朱/小人蓝) +var glyph_color := UiKit.INK: # 文字色(墨族/雷朱/封印朱/小人蓝) set(v): glyph_color = v queue_redraw() -var badge_glyph := "": # 奖励徽章文字(右下角金——旗之下、变异纹之上、不进数字区) +var badge_glyph := "": # 奖励徽章文字(右下角金——封印之下、变异纹之上、不进数字区) set(v): badge_glyph = v if _glow_layer != null and is_instance_valid(_glow_layer): @@ -54,7 +54,7 @@ var hl_visible := false: # 焦点高亮(悬停态边框覆盖层) set(v): hl_visible = v queue_redraw() -var hl_color := UiKit.GOLD: # 高亮色(金目标/旗朱/禁入灰禁红) +var hl_color := UiKit.GOLD: # 高亮色(金目标/封印朱/禁入灰禁红) set(v): hl_color = v queue_redraw() @@ -81,10 +81,10 @@ var tex_base: Texture2D = null # ① 砖面底 var tex_mutation: Texture2D = null # ② 变异纹带 var tex_glyph: Texture2D = null # ③ 数字 var tex_badge: Texture2D = null # ③' 徽章 -var tex_flag: Texture2D = null: # ④ 旗(T17 修复:槽位可运行时换装〔插旗〕——同族 facade/treasure_mark - set(v): # 均 setter 触发重绘;旧普通 var 赋值不重绘=旗插上不显示) - if tex_flag != v: - tex_flag = v +var tex_seal: Texture2D = null: # ④ 封印(T17 修复:槽位可运行时换装〔封印〕——同族 facade/treasure_mark + set(v): # 均 setter 触发重绘;旧普通 var 赋值不重绘=封印插上不显示) + if tex_seal != v: + tex_seal = v queue_redraw() var tex_facade: Texture2D = null # ⑥ E 格墙面材质(v3.5——南邻墙顶 center 瓦片同源,BoardView 注入) var facade_strip := false: # E 格开关(BoardView paint 按「已开格且南邻未开墙」写入——瓦片态专用) @@ -95,7 +95,7 @@ var facade_strip := false: # E 格开关(BoardView paint 按「已开 # 变异角标(迭代 6 T6——程序化,tex_mutation 纹带槽留给变异纹带六型自产批): # "flat_damage" = 未开格伤害型变异,左下角危险红三角(开格有代价的策略纹理标记) # 叠加层标记(迭代 7 T4——秘宝板级叠加层的格面呈现;派生信息层零回写): -# "mine_reveal" = 真视格(危险红内缩框——「这格是雷」的确定决策标记,插旗照常计费); +# "mine_reveal" = 真视格(危险红内缩框——「这格是雷」的确定决策标记,封印照常计费); # "reward_preview" 格不复用本字段——预读徽章走 badge_glyph 注入(board_view refresh 注入 REWARD_BADGE 字形) var treasure_mark := "": set(v): @@ -157,7 +157,7 @@ func _draw() -> void: _draw_e_facade() # 瓦片态描边覆盖层(高墙瓦片接线批 2026-09-26):tex_base 在位时 BoardView 传入的 bg_sb # 已降级为「透明底 + 描边」载体——呼吸微光/主角蓝框画在瓦片之上(art-bible §1.2 叠层序 - # 不变:底 < 纹带 < 数字 < 旗 < 焦点高亮);素材缺位回退走 elif 程序化原样,零观感变化 + # 不变:底 < 纹带 < 数字 < 封印 < 焦点高亮);素材缺位回退走 elif 程序化原样,零观感变化 if bg_sb != null: draw_style_box(bg_sb, rect) @@ -233,7 +233,7 @@ func _draw() -> void: if glyph != "": # 数字色牌后备路径(圣经 v3.5 冻结④ 批 B2 2026-09-30:数字亮墨直画已开格底**退役必垫牌**; # 牌=后备件——雷/「?」维持牌载保读性(牌上深墨族 12:1),复杂格底〔物件纹样/装饰变体格〕 - # 判定随装饰瓦片自产批扩。牌尺寸 0.60/0.62 格边居中 = 样张 v2 冻结值;旗=未开格不垫牌) + # 判定随装饰瓦片自产批扩。牌尺寸 0.60/0.62 格边居中 = 样张 v2 冻结值;封印=未开格不垫牌) if plate: var pw := edge * 0.60 var ph := edge * 0.62 @@ -249,9 +249,9 @@ func _draw() -> void: draw_texture_rect(tex_badge, rect, false) else: _draw_badge(badge_glyph) - # ④ 旗(现行视觉旗文字在 ③ 文字位承载——独立槽位留给终稿旗图) - if tex_flag != null: - draw_texture_rect(tex_flag, rect, false) + # ④ 封印(现行视觉封印文字在 ③ 文字位承载——独立槽位留给终稿封印图) + if tex_seal != null: + draw_texture_rect(tex_seal, rect, false) # ⑤ 路径点迹 + 焦点高亮(悬停态覆盖层,不参与命中) if dot_visible: var ds := 6.0 @@ -260,8 +260,8 @@ func _draw() -> void: # 悬停高亮减淡(2026-09-26 用户反馈:金框太明显——绘制时 55% alpha,hl_color 属性与探针断言面不动) draw_rect(Rect2(1, 1, edge - 2.0, edge - 2.0), Color(hl_color, 0.55), false, 2.0) # 2px 内描边(旧 hl Panel 等价) # ⑥ 视野迷雾层(迭代 11 第④批 T2/T3——最顶遮罩,§6.5 落文): - # 全黑=不透明纯黑盖全部叠层(含旗印/徽章/高亮——旗印记随格隐没,§6.5 显式推论); - # 记忆态=记忆板素色压平(纹理免疫——色牌/旗印/徽章随板隐没)+数字记忆墨重画(数字可读硬指标 ≥4.5:1) + # 全黑=不透明纯黑盖全部叠层(含封印印/徽章/高亮——封印印记随格隐没,§6.5 显式推论); + # 记忆态=记忆板素色压平(纹理免疫——色牌/封印印/徽章随板隐没)+数字记忆墨重画(数字可读硬指标 ≥4.5:1) if fog_state == 1: draw_rect(Rect2(Vector2.ZERO, Vector2(edge, edge)), Color(0, 0, 0, 1.0), true) elif fog_state == 2: @@ -274,7 +274,7 @@ func _draw() -> void: if glyph != "": _draw_glyph(glyph, UiKit.FOG_MEMORY_INK, maxi(18, int(ceil(edge * 0.5)))) # 字号下限 18(§7.4 冻结公式同源) # ⑦ 中立移除退色层(迭代 13 T8/D6——P2 甲退色降档:暗幕压顶全层覆盖,暗淡记忆态同族呈现语义; - # 顶层于迷雾之上——移除格不再参与迷雾语义。本实现移除集=未揭示雷格(无数字无旗印)) + # 顶层于迷雾之上——移除格不再参与迷雾语义。本实现移除集=未揭示危险格(无数字无封印印)) if removed_dim: draw_rect(Rect2(Vector2.ZERO, Vector2(edge, edge)), Color(0.12, 0.10, 0.09, 0.62), true) diff --git a/game/presentation/views/board_fx_view.gd b/game/presentation/views/board_fx_view.gd index eb255f21..f9ac8644 100644 --- a/game/presentation/views/board_fx_view.gd +++ b/game/presentation/views/board_fx_view.gd @@ -1,12 +1,12 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION -## D 区演出层:清图喷泉/Boss 影子/完美排雷光带/标中旗弹道/挥铲三帧等一次性占位演出。 +## D 区演出层:清图喷泉/Boss 影子/完美排雷光带/封印命中弹道/挥铲三帧等一次性占位演出。 ## 组合根按核心信号直调 play_*;素材缺位静默回退(演出层不设断言面)。 class_name BoardFxView extends Control const COL_GOLD := UiKit.GOLD const COL_BOSS := UiKit.BOSS_PURPLE # 紫赤 #8F2F6A -const COL_FLAG := UiKit.SEAL_BLACK # 封印黑(旗化暴击弹道——旗朱→封印紫→封印黑 2026-09-28) +const COL_SEAL := UiKit.SEAL_BLACK # 封印黑(封印化暴击弹道——封印朱→封印紫→封印黑 2026-09-28) const CONFETTI_COLS := [UiKit.GOLD, UiKit.GOLD_LIT, UiKit.HERO_BLUE, UiKit.WARM] # 装饰彩带不涉封印语义——原紫位改亮金(紫赤系 Boss 独占不入装饰) var _banner: Label @@ -102,11 +102,11 @@ func play_perfect_sweep() -> void: _show_banner("完美排雷 ×2") -# 标中旗:旗化暴击弹道加重占位(自棋盘上缘飞向 B 区敌人卡方向——越界即收) -func play_flag_hit_projectile(heavy: bool) -> void: +# 封印命中:封印化暴击弹道加重占位(自棋盘上缘飞向 B 区敌人卡方向——越界即收) +func play_seal_hit_projectile(heavy: bool) -> void: var shot := ColorRect.new() var w := 8.0 if heavy else 4.0 - shot.color = COL_FLAG + shot.color = COL_SEAL shot.size = Vector2(w, w * 2.2) shot.position = Vector2(size.x * 0.5, size.y * 0.7) shot.mouse_filter = Control.MOUSE_FILTER_IGNORE diff --git a/game/presentation/views/board_view.gd b/game/presentation/views/board_view.gd index 255970b3..303bb742 100644 --- a/game/presentation/views/board_view.gd +++ b/game/presentation/views/board_view.gd @@ -4,7 +4,7 @@ class_name BoardView extends Control -signal action_requested(cell: Vector2i, kind: String) # kind ∈ {dig, move, flag_place, flag_pull} +signal action_requested(cell: Vector2i, kind: String) # kind ∈ {dig, move, seal_place, seal_pull} signal hover_forbidden(cell: Vector2i) # 非相邻未开格悬停(首遇 toast 归组合根去重) signal chord_attempted(cell: Vector2i) # 双击快开尝试(chord 肌肉记忆提示锚) @@ -15,7 +15,7 @@ const COL_BRICK := UiKit.BRICK # 未开——掩尘完整地砖 const COL_FLOOR := UiKit.FLOOR # 已开——裸土 #B39A78(碎裂裸露地面) const COL_DIGIT := UiKit.INK # 数字——墨族 #33261B(对格底 ≥4.5:1 硬指标) const COL_HERO := UiKit.HERO_BLUE # 小人边框——小人蓝 #2E6E8E -const COL_FLAG := UiKit.SEAL_BLACK # 封印黑 #000000(旗朱→封印紫→封印黑,2026-09-28 用户拍板) +const COL_SEAL := UiKit.SEAL_BLACK # 封印黑 #000000(封印朱→封印紫→封印黑,2026-09-28 用户拍板) const COL_GOLD := UiKit.GOLD # 奖励金 #F0A828 const COL_CONTACT := UiKit.CONTACT_GLOW # 接触带微光基色(蓝族浅一档·近白蓝——§3.2 v2.8;旧绿相退役 2026-09-26) const COL_HL_TARGET := UiKit.GOLD # 悬停目标格边框(金) @@ -26,7 +26,7 @@ const REWARD_BADGE := { # 已开格格面资源身份 icon } const BADGE_PLACEHOLDER := "?" # 未知图标键占位纹样(HUD框架:禁静默空图标) const CURSOR_DIG := Input.CURSOR_CROSS # 挖——镐形自绘纹理载体 -const CURSOR_FLAG := Input.CURSOR_POINTING_HAND # 旗——旗形自绘纹理载体 +const CURSOR_SEAL := Input.CURSOR_POINTING_HAND # 封印——封印形自绘纹理载体 const CURSOR_MOVE_SEM := Input.CURSOR_ARROW # 移动——箭头(命名避开 Control.CURSOR_MOVE 原生成员遮蔽) const CHORD_WINDOW_MS := 350 const SEP := 2 # 格间距(旧 GridContainer v/h_separation 同值——格尺寸公式与命中换算共用) @@ -66,7 +66,7 @@ const HERO_SHADOW_PX := Vector2(32, 12) # 脚下椭圆影屏幕尺寸(Godot # dungeon 套(禁同板混渲染);dungeon 套亦缺位 → 程序化平色回退(fresh checkout 冒烟不炸)。 const TILE_WALL_NAMES := ["wall_center", "wall_center_crack", "wall_center_speckle", "wall_n", "wall_s", "wall_w", "wall_nw", "wall_sw", "wall_hrun", "wall_vrun", "wall_end_n", "wall_end_s", "wall_end_w", "wall_lone", "wall_in_nw", "wall_in_sw"] const TILE_WALL_FMT := "res://assets/art/board/terrain_%s_%s.png" # %s=件名 %s=board_type -const TILE_FLAG_SEAL := "res://assets/art/board/flag_seal.png" # 封印旗纹理(迭代 9 卡⑬——独立可选件) +const TILE_SEAL_MARK := "res://assets/art/board/seal_mark.png" # 封印印记纹理(迭代 9 卡⑬——独立可选件) const TILE_FLOOR_FMT := "res://assets/art/board/terrain_floor_%s_%d.png" # %s=board_type 1..%d 变体 const TILE_FLOOR_VARIANTS := 5 # 地面瓦片变体数(词表 §一 floor_1..5) @@ -112,7 +112,7 @@ var _hero_dig_tw: Tween var _tiles := {} # 词表键 → Texture2D(镜像件已预翻转;装载见 _load_board_tiles) var _floor_tiles: Array[Texture2D] = [] # 地面瓦片五变体(下标 0..4 = floor_1..5) var _tiles_ok := false # false = 素材缺位/未装载——bg_sb 程序化平色原路径 -var _flag_tex: Texture2D = null # 封印旗纹理(缺盘=null=字形「旗」回退——独立可选件不连瓦片整批) +var _seal_tex: Texture2D = null # 封印印记纹理(缺盘=null=字形「封印」回退——独立可选件不连瓦片整批) var _tiles_board_type := "dungeon" # 当前装载瓦片套的 board_type(rebuild 按板切换——T6 换色批) var _digit_dark_ink := true # 数字墨族按板自适应(true=深墨三档)。缺盘平色回退态 #B39A78 裸土 # 为中明度底——深墨族 CR 4.96 达标、亮墨族仅 2.2,故缺盘默认深墨;瓦片装载后按实测分位数覆写 @@ -452,7 +452,7 @@ func _hero_frame_flash() -> void: # 受理移动指令回执(组合根 settle 受理后、refresh 前调用)——原地移动经此触发帧闪; -# 目标异格时本旗标被 diff 位移路径自然吞掉(置位即清) +# 目标异格时本封印标被 diff 位移路径自然吞掉(置位即清) func notify_hero_move() -> void: _hero_bump_pending = true @@ -579,10 +579,10 @@ func _on_cell_input(c: Vector2i, ev: InputEvent) -> void: action_requested.emit(c, "dig") _detect_chord(c) elif ev.button_index == MOUSE_BUTTON_RIGHT: - if not _minesweeper.has_flag(c): - action_requested.emit(c, "flag_place") - # 旗 = 一次性承诺(插旗不可逆批 2026-09-19):拔旗退役——旗格右键零动作; - # 左键相邻旗格直接挖(四情况②④兑付改判,规则引擎放行)。 + if not _minesweeper.has_seal(c): + action_requested.emit(c, "seal_place") + # 封印 = 一次性承诺(封印不可逆批 2026-09-19):撤封印退役——封印格右键零动作; + # 左键相邻封印格直接挖(四情况②④兑付改判,规则引擎放行)。 # chord 肌肉记忆首遇锚:同格双左击快开尝试(350ms 窗)——每 run 一次提示由组合根去重 @@ -620,7 +620,7 @@ func _apply_hover_visuals(c: Vector2i) -> void: _clear_hover_visuals(c) var u: Node2D = _cells[c] var revealed: bool = _minesweeper.is_revealed(c) - var flag: bool = _minesweeper.has_flag(c) + var seal: bool = _minesweeper.has_seal(c) var adjacent: bool = _diggable.has(c) if revealed: u.hl_visible = true @@ -629,11 +629,11 @@ func _apply_hover_visuals(c: Vector2i) -> void: _show_path_preview(c) elif adjacent: u.hl_visible = true - u.hl_color = COL_HL_TARGET # 挖掘目标格边框(相邻旗格同此——左键直接挖,插旗不可逆批) + u.hl_color = COL_HL_TARGET # 挖掘目标格边框(相邻封印格同此——左键直接挖,封印不可逆批) _set_cursor_shape(c, CURSOR_DIG) - elif flag: + elif seal: u.hl_visible = true - u.hl_color = COL_FLAG # 已承诺封印标记(封印黑;无交互可供——拔旗已退役) + u.hl_color = COL_SEAL # 已承诺封印标记(封印黑;无交互可供——撤封印已退役) _set_cursor_shape(c, Input.CURSOR_FORBIDDEN) else: u.hl_visible = true @@ -668,7 +668,7 @@ func _hide_path_preview() -> void: _cells[c].dot_visible = false -# ---- 奖励徽章(已开格身份 icon——旗之下、纹带之上、不进数字区) ---- +# ---- 奖励徽章(已开格身份 icon——封印之下、纹带之上、不进数字区) ---- func _update_badge(c: Vector2i) -> String: if _minesweeper == null or not _minesweeper.is_revealed(c) or not _identity_cb.is_valid(): @@ -717,19 +717,19 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void: if u == null: return var revealed: bool = _minesweeper.is_revealed(c) - var flag: bool = _minesweeper.has_flag(c) + var seal: bool = _minesweeper.has_seal(c) var removed: bool = _minesweeper.is_removed(c) # 迭代 13 T8/D6——中立移除格(P2 甲退色降档) var is_hero: bool = c == hero var glyph := "" var bg: Color var digit_col := COL_DIGIT - # 旗槽统一维护(T17 修复):旗格=封印旗纹理;其余格清 null(插旗格挖开后残留在 tex_flag - # 会让 _draw 无条件把旗印画在已开格上——tex_flag 绘制无 revealed 条件)。缺盘走字形回退。 - u.tex_flag = _flag_tex if (flag and not revealed and _flag_tex != null) else null + # 封印槽统一维护(T17 修复):封印格=封印印记纹理;其余格清 null(封印格挖开后残留在 tex_seal + # 会让 _draw 无条件把封印印画在已开格上——tex_seal 绘制无 revealed 条件)。缺盘走字形回退。 + u.tex_seal = _seal_tex if (seal and not revealed and _seal_tex != null) else null if removed: - revealed = false # 移除格固定未开呈现基座(退色暗幕层承载;雷格本无数字——P1 甲周边数字冻结) - flag = false - u.tex_flag = null + revealed = false # 移除格固定未开呈现基座(退色暗幕层承载;危险格本无数字——P1 甲周边数字冻结) + seal = false + u.tex_seal = null if revealed: var rec: Dictionary[Variant, Variant] = _minesweeper.reveal_record(c) # E2 收口:已开记录经查询面 if rec.get("kind", "") == "mine": @@ -746,11 +746,11 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void: glyph = str(d) digit_col = _digit_ink(d) # 数字墨三档色温(样张 v2 冻结批 T4——§4.1) else: - if flag: + if seal: bg = COL_BRICK - if _flag_tex == null: - glyph = "旗" - digit_col = COL_FLAG + if _seal_tex == null: + glyph = "封" + digit_col = COL_SEAL else: bg = COL_BRICK # 瓦片模式(高墙接线批 2026-09-26):tex_base = 查表瓦片(未开=墙瓦片/已开=地面瓦片), @@ -782,7 +782,7 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void: u.glyph_color = digit_col # 色牌后备(v3.5 批 B2——数字直画退牌;雷/「?」维持牌载保读性)+ 2026-10-01 v3.4:双峰纹理板 #(_digit_plate——underdark 系亮白筋+近黑斑并存的直画不可救纹理)数字落牌,牌上深墨 12:1 - var plate_digit := _digit_plate and glyph != "" and glyph != "雷" and glyph != "?" and glyph != "旗" and glyph != "人" + var plate_digit := _digit_plate and glyph != "" and glyph != "雷" and glyph != "?" and glyph != "封" and glyph != "人" if plate_digit: digit_col = COL_DIGIT # 牌上深墨族(素牌 12:1——双峰纹理免疫) u.glyph_color = digit_col @@ -792,8 +792,8 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void: u.proj_band = 0.0 u.tex_facade = null u.facade_strip = false - # 旗槽不在此重置(2026-10-02 修复批——T13 批的 paint 尾部 `u.tex_flag = null` 与 L683 的条件 - # 赋值构成双写踩踏:执行序 683→此处把旗纹理恒清 null=素材在位时插旗不可见;L683 的 else 分支 + # 封印槽不在此重置(2026-10-02 修复批——T13 批的 paint 尾部 `u.tex_seal = null` 与 L683 的条件 + # 赋值构成双写踩踏:执行序 683→此处把封印纹理恒清 null=素材在位时封印不可见;L683 的 else 分支 # 已是全路径清残留,尾部重置系冗余且有害,删除) var south_n: Vector2i = c + Vector2i(0, 1) var north_n: Vector2i = c + Vector2i(0, -1) @@ -979,8 +979,8 @@ func _load_board_tiles(board_type: String = "dungeon") -> void: _floor_tiles = floors _tiles_board_type = board_type _tiles_ok = true - # 封印旗纹理(迭代 9 卡⑬——独立可选件:缺盘=字形回退,不触发瓦片整批回落语义) - _flag_tex = UiKit.load_tex(TILE_FLAG_SEAL) + # 封印印记纹理(迭代 9 卡⑬——独立可选件:缺盘=字形回退,不触发瓦片整批回落语义) + _seal_tex = UiKit.load_tex(TILE_SEAL_MARK) # 整批回落(T6 换色批):请求套缺位 → 回落 dungeon 套(禁同板混渲染);dungeon 本身缺位 = @@ -1164,7 +1164,7 @@ func _floor_tile_for(c: Vector2i) -> Texture2D: return _floor_tiles[posmod(_cell_hash(c), _floor_tiles.size())] -# ---- 自绘光标纹理(镐/旗——引擎内置光标无此语义;程序化占位,headless 跳过) ---- +# ---- 自绘光标纹理(镐/封印——引擎内置光标无此语义;程序化占位,headless 跳过) ---- func _apply_custom_cursors() -> void: if DisplayServer.get_name() == "headless": diff --git a/game/presentation/views/cell_type_glow_layer.gd b/game/presentation/views/cell_type_glow_layer.gd index 45bdce61..ac4624f9 100644 --- a/game/presentation/views/cell_type_glow_layer.gd +++ b/game/presentation/views/cell_type_glow_layer.gd @@ -1,7 +1,7 @@ ## VERTICAL SLICE - NOT FOR PRODUCTION ## CellTypeGlowLayer——未开格类型微光的独占承载件(挂在 CellUnit 之下、1:1 贴格、不入遮挡栈)。 ## 为什么单独一件而不画进 CellUnit._draw(): -## ① 父件 _draw() 命令序列由瓦片/数字/旗/焦点高亮多方共用,插进该序列会随叠层口径错位; +## ① 父件 _draw() 命令序列由瓦片/数字/封印/焦点高亮多方共用,插进该序列会随叠层口径错位; ## ② 独立子件只在「有组」的格上建(作用集 ≤8),静止态零逐帧成本,且不占父件重绘预算; ## ③ 材质归子件独占 ⇒ 不抢世界根去饱和材质挂点(结算相位本层隐藏,无叠加冲突)。 ## 路线:Q1 丙案主路径 = 每格 canvas_item shader 距离场柔光,兜底 = 程序化渐变底图; @@ -30,7 +30,7 @@ func setup(edge: float, group: int) -> void: queue_redraw() -# 预读徽章位豁免(既有元素——微光不染色其上;叠层序 §1.2:徽章在数字之后、旗之前) +# 预读徽章位豁免(既有元素——微光不染色其上;叠层序 §1.2:徽章在数字之后、封印之前) func set_badge_mask(enabled: bool) -> void: if _mat == null: return diff --git a/game/presentation/views/curio_pick_overlay.gd b/game/presentation/views/curio_pick_overlay.gd index 2a27ee9e..526853d3 100644 --- a/game/presentation/views/curio_pick_overlay.gd +++ b/game/presentation/views/curio_pick_overlay.gd @@ -119,9 +119,9 @@ func set_refresh_display(free_left: int, gp_cost: int, can_afford: bool) -> void _refresh_gp_cost = maxi(0, int(gp_cost)) _refresh_btn.visible = _refresh_allowance > 0 or _refresh_gp_cost > 0 _refresh_badge.text = str(_refresh_allowance) - _refresh_l.text = "免费 · 不消耗 AP" if _refresh_allowance > 0 else ("刷新 %d 金币" % _refresh_gp_cost if _refresh_gp_cost > 0 else "") + _refresh_l.text = "免费 · 不消耗 AP" if _refresh_allowance > 0 else ("刷新 %d GP" % _refresh_gp_cost if _refresh_gp_cost > 0 else "") _refresh_l.visible = _refresh_l.text != "" - _refresh_btn.tooltip_text = "刷新候选——换一批战利品\n免费 %d 次(刷新件 X 优先 + 冒险池 Y)\nGP 刷新 %d 金币\n池源=共享池,与商店货架同源" % [_refresh_allowance, _refresh_gp_cost] + _refresh_btn.tooltip_text = "刷新候选——换一批战利品\n免费 %d 次(刷新件 X 优先 + 冒险池 Y)\nGP 刷新 %d GP\n池源=共享池,与商店货架同源" % [_refresh_allowance, _refresh_gp_cost] _refresh_btn.disabled = _refresh_allowance <= 0 and not can_afford diff --git a/game/presentation/views/legend_overlay.gd b/game/presentation/views/legend_overlay.gd index bef302d1..b0618da9 100644 --- a/game/presentation/views/legend_overlay.gd +++ b/game/presentation/views/legend_overlay.gd @@ -6,12 +6,12 @@ extends Control signal closed const ENTRIES := [ - ["#C9AF83", "完整覆尘地砖", "未开格——左键挖开(1AP,须相邻)· 右键插旗(1AP)"], + ["#C9AF83", "完整覆尘地砖", "未开格——左键挖开(1AP,须相邻)· 右键封印(1AP)"], ["#B39A78", "碎裂裸土", "已开 0 格——可通行,左键移动(免费)"], - ["#000000", "旗", "封印印记(呈现名·不能拔)——轮末自动判定标中;插错可左键直接挖开(安全格零奖励、雷格吃挖雷惩罚)"], + ["#000000", "封印", "封印印记(呈现名·不能拔)——轮末自动判定标中;插错可左键直接挖开(安全格零奖励、危险格吃挖雷惩罚)"], ["#2e86de", "小人", "探险者——8 向相邻未开格常驻微光 = 可挖域"], - ["#F0A828", "金徽章", "已开格奖励身份 icon(旗之下、数值之上,不进数字区)"], - ["#F0A828", "九徽章解码", "攻=攻击 · 守=护甲 · 爆=爆裂 · 医=回复 · 弱=削弱 · 穿=穿刺 · 魔=魔法 · 行=行动点 · 金=金币(打磨包 2026-09-29 入列)"], + ["#F0A828", "金徽章", "已开格奖励身份 icon(封印之下、数值之上,不进数字区)"], + ["#F0A828", "九徽章解码", "攻=攻击 · 守=护甲 · 爆=爆裂 · 医=回复 · 弱=削弱 · 穿=穿刺 · 魔=魔法 · 行=行动点 · 金=GP(打磨包 2026-09-29 入列)"], ["#33261B", "状态槽空态", "无状态效果时槽位隐藏,数据框上移补位——非异常"], ] @@ -52,7 +52,7 @@ func _init(rap_cost: int = -1) -> void: rap_chip.custom_minimum_size = Vector2(18, 18) rap_chip.color = UiKit.GOLD # 同 #F0A828——金徽章同源单点(T4 裸色收口) rap_row.add_child(rap_chip) - var rap_lab := UiKit.label("RAP 储备行动点 —— 停手时剩余 AP 转存;弃图刷新消耗 RAP−%d(旧板旗作废,AP 保留继续挖)" % _rap_cost,UiKit.FS_HINT, false, UiKit.INK_LABEL) + var rap_lab := UiKit.label("RAP 储备行动点 —— 停手时剩余 AP 转存;弃图刷新消耗 RAP−%d(旧板封印作废,AP 保留继续挖)" % _rap_cost,UiKit.FS_HINT, false, UiKit.INK_LABEL) rap_lab.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART rap_lab.custom_minimum_size = Vector2(440, 0) rap_row.add_child(rap_lab) diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd index bdfb7ab2..f6f0952e 100644 --- a/game/presentation/views/level_map_screen.gd +++ b/game/presentation/views/level_map_screen.gd @@ -12,7 +12,7 @@ const COL_ROOM_CURRENT := UiKit.GOLD # 当前——奖励金 const COL_ROOM_FUTURE := UiKit.DARK_UPCOMING # 未达——暗 const COL_PASSAGE := UiKit.STONE # 通道——石灰 const COL_PASSAGE_LIT := UiKit.CANDLE # 候选通道/候选描边——烛光黄(M5:金色定岗只留当前位,G4;旧 GOLD_LIT 退役出本屏) -const COL_BOSS_BORDER := UiKit.BOSS_PURPLE # Boss 边框——紫赤(色相独占本色;旗朱退役 2026-09-26) +const COL_BOSS_BORDER := UiKit.BOSS_PURPLE # Boss 边框——紫赤(色相独占本色;封印朱退役 2026-09-26) const COL_ABANDON := UiKit.RED_MINE # 破坏性动作红(危险红族) const NODE_LABELS := {"battle": "战", "reward": "赏", "rest": "疗", "boss": "王", "shop": "商"} # 商 = GP+商店房实施批 2026-09-21(贴图缺位字形回退用——贴图在位=字形退役惯例) const NODE_TYPE_NAMES := {"battle": "战斗", "reward": "奖励", "rest": "休息", "boss": "Boss", "shop": "商店"} # M5 节点下方类型字(demo ④——三通道可读性;当前位显示「当前位置」) @@ -74,7 +74,7 @@ func _init() -> void: box.add_theme_constant_override("separation", 10) center.add_child(box) # 顶栏语境(spec Layout:左关卡名 / 右 GP 常驻徽章——直角细线数据框; - # T5 判官 checkpoint 对齐 demo ④:关卡名入框板(裸文本退役)+GP 徽章=烛光胶囊(同商店金币框)+ + # T5 判官 checkpoint 对齐 demo ④:关卡名入框板(裸文本退役)+GP 徽章=烛光胶囊(同商店GP框)+ # 左右两极排布(原居中悬置)) var top := HBoxContainer.new() top.add_theme_constant_override("separation", 12) diff --git a/game/presentation/views/shop_overlay_view.gd b/game/presentation/views/shop_overlay_view.gd index 3e71ea77..25ce0941 100644 --- a/game/presentation/views/shop_overlay_view.gd +++ b/game/presentation/views/shop_overlay_view.gd @@ -48,7 +48,7 @@ func _init() -> void: gp_chip.add_theme_stylebox_override("panel", UiKit.panel_flat(UiKit.CANDLE, UiKit.CAMP_HEADER_BAND,UiKit.RADIUS_OBJECT, 1, Vector4(12, 4, 12, 4))) top.add_child(gp_chip) - _gp_label = UiKit.label("金币 0",UiKit.FS_BODY, true, UiKit.INK_ON_GOLD) + _gp_label = UiKit.label("GP 0",UiKit.FS_BODY, true, UiKit.INK_ON_GOLD) gp_chip.add_child(_gp_label) var box: VBoxContainer = page.box _visit_label = UiKit.label("",UiKit.FS_BODY, false, UiKit.WARM_SOFT) @@ -98,7 +98,7 @@ func open_shop(products: Array, gp: int) -> void: # 状态重刷(购买/钱包变化后调用——就地改文案与按钮禁用态,零重建) func refresh_state(products: Array, gp: int) -> void: - _gp_label.text = "金币 %d" % gp + _gp_label.text = "GP %d" % gp var by_id := {} for p in products: by_id[String(p.product_id)] = p @@ -106,7 +106,7 @@ func refresh_state(products: Array, gp: int) -> void: var p: Dictionary[Variant, Variant] = by_id.get(String(card.product_id), {}) if p.is_empty(): continue - card.price.text = "现价 %d 金币" % int(p.price) + card.price.text = "现价 %d GP" % int(p.price) card.bought.text = "已购 %d 档" % int(p.purchased) card.btn.disabled = gp < int(p.price) # 余额不足禁用置灰 @@ -171,7 +171,7 @@ func open_shelf(cards: Array, gp: int) -> void: # 货架余额重刷(就地改禁用态——买后重建路径经 open_shelf 覆盖,本口供 wallet 变化联动) func refresh_shelf_state(gp: int) -> void: - _gp_label.text = "金币 %d" % gp + _gp_label.text = "GP %d" % gp for card in _shelf_rows: card.btn.disabled = gp < int(card.price) card.card.modulate = Color(1, 1, 1, 1) if gp >= int(card.price) else Color(1, 1, 1, 0.55) @@ -188,7 +188,7 @@ func set_refresh_display(free_left: int, gp_cost: int, can_afford: bool) -> void for lab in _refresh_btn.get_children(): if lab is Label: (lab as Label).text = str(free_left) - _refresh_btn.tooltip_text = "刷新货架——换一批商品\n免费 %d 次(天赋增益位,基础 0)\nGP 刷新 %d 金币(provisional)\n池源=共享池,与奖励三选一同源" % [free_left, gp_cost] + _refresh_btn.tooltip_text = "刷新货架——换一批商品\n免费 %d 次(天赋增益位,基础 0)\nGP 刷新 %d GP(provisional)\n池源=共享池,与奖励三选一同源" % [free_left, gp_cost] _refresh_btn.disabled = not can_afford and free_left <= 0 diff --git a/game/presentation/views/standee_body.gd b/game/presentation/views/standee_body.gd index 7c1367b0..fff7b407 100644 --- a/game/presentation/views/standee_body.gd +++ b/game/presentation/views/standee_body.gd @@ -161,7 +161,7 @@ func set_pending(ptype: String, pid: String) -> void: queue_redraw() return var glyph := "⚔" # 攻击系(damage) - var col: Color = UiKit.RED_MINE # 攻击预告红(危险红族——旗朱退役 2026-09-26,预告语义归封印色独占〔现行封印黑〕) + var col: Color = UiKit.RED_MINE # 攻击预告红(危险红族——封印朱退役 2026-09-26,预告语义归封印色独占〔现行封印黑〕) if ptype == "buff": glyph = "✦" # 增益系 col = UiKit.HERO_BLUE_DEEP # 深档墨(N1-4——浅垫牌上 ≥4.5:1;原 HERO_BLUE 亮档对垫牌 2.5:1) diff --git a/game/presentation/views/status_slot_row.gd b/game/presentation/views/status_slot_row.gd index 6c9cc994..51a39400 100644 --- a/game/presentation/views/status_slot_row.gd +++ b/game/presentation/views/status_slot_row.gd @@ -39,7 +39,7 @@ const EFFECT_SEMANTIC := { "empower": "敌方输出 ×2(enemy_output 池加算——蓄力技施放;持续 1 个有效结算)", "fortify": "敌方防御 −50(enemy_defense 池——硬化技施放,主角攻击 ×0.5;持续 1 个有效结算)", } -const SOURCE_NAMES := {"safe_cell": "安全格", "flag_hit": "标中旗", "mine_hit": "踩雷", "clear_reward": "清图奖励"} +const SOURCE_NAMES := {"safe_cell": "安全格", "seal_hit": "封印命中", "mine_hit": "踩雷", "clear_reward": "清图奖励"} # 未知图标键的占位(HUD框架:占位也要可见,禁静默空图标——debug 断言先行,release 回退槽内 ? 文本) const ICON_PLACEHOLDER := "?" diff --git a/game/presentation/views/toast_stack.gd b/game/presentation/views/toast_stack.gd index 0f8e9fd3..4328ed73 100644 --- a/game/presentation/views/toast_stack.gd +++ b/game/presentation/views/toast_stack.gd @@ -7,7 +7,7 @@ extends Control const LIFE_SEC := 2.5 const MAX_SLOTS := 3 const COL_INFO := UiKit.INK -const COL_WARN := UiKit.RED_MINE # 危险红族——拒绝/作废(旗朱退役 2026-09-26) +const COL_WARN := UiKit.RED_MINE # 危险红族——拒绝/作废(封印朱退役 2026-09-26) const COL_GOLD := UiKit.GOLD_DEEP # 奖励金族——提示/达成(深金档) var _slot_box: VBoxContainer diff --git a/game/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd index 8005f9e4..cc10f5a4 100644 --- a/game/presentation/views/ui_kit.gd +++ b/game/presentation/views/ui_kit.gd @@ -30,11 +30,11 @@ const GOLD_LIT := Color8(230, 190, 90) # 亮金(候选高亮) const GOLD_DIM := Color8(140, 116, 60) # 暗金(已过节点) const GOLD_DONE := Color8(104, 86, 44) # 已过节点暗金·关卡画面呈现态(关卡画面样张 v1 冻结新值 #68562C——旧 GOLD_DIM #8C743C 对双色墨均 <4.5:1 对比硬指标逼守;GOLD_DIM 他用不动) -const SEAL_BLACK := Color8(0, 0, 0) # 封印黑 #000000——封印(插旗)宣告色(2026-09-28 - # 用户拍板旗朱→封印紫→封印黑:紫色与微光蓝族色相冲突,黑色无色相天然避开禁入带 - # 妨害紫 281° 各留 12-14° 间距;候选值样张批冻结;旗朱 #C63D22 退役) +const SEAL_BLACK := Color8(0, 0, 0) # 封印黑 #000000——封印(封印)宣告色(2026-09-28 + # 用户拍板封印朱→封印紫→封印黑:紫色与微光蓝族色相冲突,黑色无色相天然避开禁入带 + # 妨害紫 281° 各留 12-14° 间距;候选值样张批冻结;封印朱 #C63D22 退役) const RED_DEEP := Color8(150, 60, 48) # 深朱(敌卡框/敌像) -const RED_MINE := Color8(150, 44, 36) # 引爆雷字朱(已开雷格"雷"字) +const RED_MINE := Color8(150, 44, 36) # 引爆雷字朱(已开危险格"雷"字) const RED_FORBID := Color8(120, 60, 50) # 禁止框朱 const RED_ALERT := Color8(200, 60, 48) # 报错朱 @@ -275,7 +275,7 @@ const TEX_ICON_SHOVEL := "res://assets/art/ui/icon_shovel.png" # const TEX_ICON_MEDKIT := "res://assets/art/ui/icon_medkit.png" # 图标·医疗包 const TEX_ICON_POUCH := "res://assets/art/ui/icon_pouch.png" # 图标·弹药袋/行动点 const TEX_ICON_BLAST := "res://assets/art/ui/icon_blast.png" # 图标·工兵爆破(秘宝) -const TEX_ICON_COINBAG := "res://assets/art/ui/icon_coinbag.png" # 图标·金币袋 +const TEX_ICON_COINBAG := "res://assets/art/ui/icon_coinbag.png" # 图标·GP 袋 const TEX_ICON_KEYSHARD := "res://assets/art/ui/icon_keyshard.png" # 图标·钥石残片 const TEX_ICON_REFRESH := "res://assets/art/ui/icon_refresh.png" # 图标·刷新(货架/候选) diff --git a/game/smoke/adventure_monte_carlo.gd b/game/smoke/adventure_monte_carlo.gd index 3ead8a98..d36c32ac 100644 --- a/game/smoke/adventure_monte_carlo.gd +++ b/game/smoke/adventure_monte_carlo.gd @@ -51,7 +51,7 @@ func _initialize() -> void: var feat_profile := {} if feat_mode == "formed": # 迭代 20 T8 画像换代——旧 14 件随老 27 件退役;新画像=五事件族覆盖 14 件 - # (开格 4/插旗 3/踩雷 4/节奏 2/战斗 1——每族含跨事件账本件,账本件=攒层/计数面 MC 读数承载) + # (开格 4/封印 3/踩雷 4/节奏 2/战斗 1——每族含跨事件账本件,账本件=攒层/计数面 MC 读数承载) feat_profile = {"mode": "on", "seed_ids": [ "twin_pick", "geologist", "hard_hat", "frontier_miner", "seal_echo", "seal_smith", "seal_stake", @@ -126,12 +126,12 @@ func _initialize() -> void: "mine_dmg": int(st.get("mine_dmg", 0)), "taken": int(st["hero_dmg"]) + int(st.get("mine_dmg", 0)), "refreshes": int(st["refreshes"]), "choices": int(st["choices"]), - # 旗经济五字段(迭代14②判式换代批 T1——η=flag_hit÷flag_placed、标空率=flag_miss÷flag_placed + # 封印经济五字段(迭代14②判式换代批 T1——η=seal_hit÷seal_placed、标空率=seal_miss÷seal_placed # 派生归分析侧;gain/penalty=结算流水行值合计(原始行值口径,等价换算归判读侧——登记)) - "flag_placed": int(st.get("flag_placed", 0)), "flag_hit": int(st.get("flag_hit", 0)), - "flag_miss": int(st.get("flag_miss", 0)), - "flag_hit_gain": int(st.get("flag_hit_gain", 0)), - "flag_miss_penalty": int(st.get("flag_miss_penalty", 0)), + "seal_placed": int(st.get("seal_placed", 0)), "seal_hit": int(st.get("seal_hit", 0)), + "seal_miss": int(st.get("seal_miss", 0)), + "seal_hit_gain": int(st.get("seal_hit_gain", 0)), + "seal_miss_penalty": int(st.get("seal_miss_penalty", 0)), "relics": st.get("relics", []), "visited_count": (st["visited_ids"] as Array).size(), "encounter_max_hp_seq": st["encounter_max_hp_seq"], diff --git a/game/smoke/auto_player.gd b/game/smoke/auto_player.gd index 3f003ab5..5adb5d68 100644 --- a/game/smoke/auto_player.gd +++ b/game/smoke/auto_player.gd @@ -18,7 +18,7 @@ static func choose_dig(minesweeper) -> Dictionary: for y in board.height: for x in board.width: var c := Vector2i(x, y) - if minesweeper.is_revealed(c) or minesweeper.has_flag(c): + if minesweeper.is_revealed(c) or minesweeper.has_seal(c): continue for n in board.neighbors8(c): if revealed_set.has(n): @@ -30,20 +30,20 @@ static func choose_dig(minesweeper) -> Dictionary: # ==================== 普通策略档 v2·基础定式画像(2026-09-19 用户拍板——替代旧"无推理最近格"口径) ==================== # 扫雷推理分级(经典定式文献口径):新手级 = 单数字满足规则——「数字 = 邻雷未开数 ⇒ 全是雷(满足即标)」 -# 「数字 = 已标旗数 ⇒ 余邻全安全(满足即开)」,教学一眼会、正常玩家两局即会的最低门槛判断; +# 「数字 = 已封印数 ⇒ 余邻全安全(满足即开)」,教学一眼会、正常玩家两局即会的最低门槛判断; # 进阶级 = 联动定式(1-1 / 1-2 / 1-2-1 / 1-2-2-1 / 子集缩减)与概率分析——本切片归完美档 subset 推理承载, # 不入普通画像(新手不可靠掌握)。本档语义 = 只做新手级推理 + 无处可推时按既有口径盲挖边界格(新手冲动)+ # 不主动刷新(新手无刷新策略意识)。测量定位:教会基础规则后的真实玩家下限近似(旧"乱点/最近格"口径测的是 # 无认知玩家下限,对通关率带判读失真——2026-09-18/19 普通画像 0%/5% 越带下界与真人方向性结论矛盾)。 -# 普通画像单步决策入口(每动作一查——挖掘揭示新数字后重推理):move/dig/flag/stop 四值(无 refresh)。 +# 普通画像单步决策入口(每动作一查——挖掘揭示新数字后重推理):move/dig/seal/stop 四值(无 refresh)。 static func novice_action(minesweeper) -> Dictionary: var ded := _deduce_single(minesweeper) for c in ded["mines"]: - if not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): - return _plan_on(minesweeper, c, "flag") + if not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): + return _plan_on(minesweeper, c, "seal") for c in ded["safe"]: - if not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): + if not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): return _plan_on(minesweeper, c, "dig") var plan := choose_dig(minesweeper) if plan.is_empty(): @@ -75,23 +75,23 @@ static func _deduce_single(minesweeper) -> Dictionary: # ==================== 完美策略档(2026-09-14 用户拍板:OQ7 技能轴上界测量仪——只作测量,非玩法数值) ==================== -# 策略语义:零盲挖(只挖已证安全格 ⇒ 构造保证零踩雷)· 已证雷格全标旗(旗先于挖——旗 = 纯收益 -# 〔轮末 weaken + 魔法 首次充能〕且雷上旗不阻连锁)· 卡死且刷新资源可用 → 轮内刷新 +# 策略语义:零盲挖(只挖已证安全格 ⇒ 构造保证零踩雷)· 已证危险格全封印(封印先于挖——封印 = 纯收益 +# 〔轮末 weaken + 魔法 首次充能〕且雷上封印不阻连锁)· 卡死且刷新资源可用 → 轮内刷新 # (经 settlement.player_request_refresh 核心编排)· 否则停手(残 AP 1:1 转存 RAP——下轮刷新资源)。 # 推理规则集 = 棋盘生成 F1 measure_inferability 同族(single + subset——solver_rules=single_subset 冻结域); -# 口径差异 = unknown 集不含 棋盘生成 生成期 safe_set oracle(真实玩家约束的未知邻格含雷格)——比生成期闸 -# 保守,卡死率略高属口径诚实。输入只经 排雷玩法 查询面(reveal_record/is_revealed/has_flag/current_board +# 口径差异 = unknown 集不含 棋盘生成 生成期 safe_set oracle(真实玩家约束的未知邻格含危险格)——比生成期闸 +# 保守,卡死率略高属口径诚实。输入只经 排雷玩法 查询面(reveal_record/is_revealed/has_seal/current_board # 的邻居与可达面),禁读棋盘雷区真值(测推理上界,非全知作弊)。 # 待拍板(未实现):非卡死主动刷新、囤刀倾泻 vs 即用即耗、完美板目标加权。 -# 单步决策入口(每动作一查——挖掘揭示新数字后重推理):move/dig/flag/refresh/stop 五值。 +# 单步决策入口(每动作一查——挖掘揭示新数字后重推理):move/dig/seal/refresh/stop 五值。 static func perfect_action(minesweeper, settlement) -> Dictionary: var ded := _deduce(minesweeper) for c in ded["mines"]: - if not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): - return _plan_on(minesweeper, c, "flag") + if not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): + return _plan_on(minesweeper, c, "seal") for c in ded["safe"]: - if not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): + if not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): return _plan_on(minesweeper, c, "dig") if settlement != null and bool(settlement.can_refresh()): return {"kind": "refresh"} @@ -111,7 +111,7 @@ static func _plan_on(minesweeper, c: Vector2i, kind: String) -> Dictionary: # 推理不动点:single(约束余雷=0⇒未知全安全 / 余雷=未知数⇒全雷)+ subset(U_a ⊂ U_b ⇒ 差集约束)。 -# 约束只依赖 revealed/flags/mines 推断集——mines 集增长才需重建约束(safe 标记不改正约约束)。 +# 约束只依赖 revealed/seals/mines 推断集——mines 集增长才需重建约束(safe 标记不改正约约束)。 static func _deduce(minesweeper) -> Dictionary: var board = minesweeper.current_board() var safe := {} @@ -150,8 +150,8 @@ static func _deduce(minesweeper) -> Dictionary: return {"safe": _row_major(safe), "mines": _row_major(mines)} -# 约束集 = 已开数字格:mines_left = digit − 已知雷旗(旗位 + 已证雷格),unknown = 未开无旗 8 邻。 -# 已爆雷格(kind=mine)不带数字约束——其贡献已含在邻格 digit 内(数字恒真不变式 inv3)。 +# 约束集 = 已开数字格:mines_left = digit − 已知雷封印(封印位 + 已证危险格),unknown = 未开无封印 8 邻。 +# 已爆危险格(kind=mine)不带数字约束——其贡献已含在邻格 digit 内(数字恒真不变式 inv3)。 static func _constraints(minesweeper, board, mines: Dictionary) -> Array: var out: Array = [] for c in minesweeper.revealed_cells(): @@ -164,7 +164,7 @@ static func _constraints(minesweeper, board, mines: Dictionary) -> Array: var unknown := {} var known := 0 for n in board.neighbors8(c): - if minesweeper.has_flag(n): + if minesweeper.has_seal(n): known += 1 elif not minesweeper.is_revealed(n): if mines.has(n): @@ -173,7 +173,7 @@ static func _constraints(minesweeper, board, mines: Dictionary) -> Array: unknown[n] = true var d_eff := d - known if unknown.is_empty() or d_eff < 0: - continue # 零未知 = 无信息;负余雷 = 矛盾态(非法板/误旗)——不产约束 + continue # 零未知 = 无信息;负余雷 = 矛盾态(非法板/误封印)——不产约束 out.append({"mines": d_eff, "unknown": unknown}) return out @@ -200,7 +200,7 @@ static func _subset_one_way(ca: Dictionary, cb: Dictionary) -> Dictionary: diff[k] = true var dm := int(cb["mines"]) - int(ca["mines"]) if dm < 0: - return {} # 矛盾态防御(完美档无误旗——理论不可达) + return {} # 矛盾态防御(完美档无误封印——理论不可达) return {"unknown": diff, "mines": dm} @@ -227,7 +227,7 @@ static func gamble_pick(minesweeper) -> Dictionary: for y in board.height: for x in board.width: var c := Vector2i(x, y) - if minesweeper.is_revealed(c) or minesweeper.has_flag(c): + if minesweeper.is_revealed(c) or minesweeper.has_seal(c): continue var adj := false for n in board.neighbors8(c): diff --git a/game/smoke/board_shot_probe.gd b/game/smoke/board_shot_probe.gd index 37662985..6a367141 100644 --- a/game/smoke/board_shot_probe.gd +++ b/game/smoke/board_shot_probe.gd @@ -2,7 +2,7 @@ # 棋盘渲染帧取证探针(目视验证面:机检≠看得清)。 # 必须**窗口化**运行(headless 无渲染面): # Godot_console.exe --path . res://smoke/board_shot_probe.tscn -- <输出目录> -# 流程:L1/L2/L3 各起一板(真实 LevelRunner+settle_batch 驱动 ~18 步 novice——自然揭示数字/旗), +# 流程:L1/L2/L3 各起一板(真实 LevelRunner+settle_batch 驱动 ~18 步 novice——自然揭示数字/封印), # BoardView 真渲染,frame_post_draw 同步后抓视口 PNG。零存档触碰(无 save_manager 引用)。 # 护栏:headless fail-fast(shot_probe 同款);空纹理取证 fail——取证段失败=闸红, # 零字节/空纹理不允许静默落盘;board_meta.json 取样坐标落盘(棋盘视图全局矩形—— @@ -66,8 +66,8 @@ func _ready() -> void: if kind == "stop": break var op := kind - if kind == "flag": - op = "flag_place" + if kind == "seal": + op = "seal_place" settlement.minesweeper.settle_batch([{"action": op, "cell": act.get("cell")}]) var view = load("res://presentation/views/board_view.gd").new() view.size = Vector2(900, 900) diff --git a/game/smoke/fx_probe.gd b/game/smoke/fx_probe.gd index 3c44f129..69d38bf1 100644 --- a/game/smoke/fx_probe.gd +++ b/game/smoke/fx_probe.gd @@ -1,7 +1,7 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # 演出密度探针(样张 v2 冻结批 T3——演出四项可触发+探针断言覆盖): # ①死亡碎裂(standee mark_dead → 碎块计数)②意图三档动画(damage/buff/debuff/charge 摇定不炸+徽标可见) -# ③胜利纹章+失败掸灰+旗光收回(battle_end open_victory/open_defeat → fx_probe 计数) +# ③胜利纹章+失败掸灰+封印光收回(battle_end open_victory/open_defeat → fx_probe 计数) # ④结算轮光带(settlement_fx play_round_sweep → 子节点落位)。 # 运行:Godot_console.exe --headless --path . res://smoke/fx_probe.tscn extends Node @@ -46,7 +46,7 @@ func _ready() -> void: if int(hp2.get("hit_sparks", 0)) != 6: problems.append("命中火花应 6 枚(迭代 6 T4),实得 %s" % [hp2.get("hit_sparks")]) - # ---- ③ 终局侧:胜利纹章 / 失败掸灰+旗光 ---- + # ---- ③ 终局侧:胜利纹章 / 失败掸灰+封印光 ---- var end_ov := BattleEndOverlay.new() add_child(end_ov) var br := Rect2(300, 300, 400, 300) @@ -61,8 +61,8 @@ func _ready() -> void: var fp: Dictionary = end_ov.fx_probe() if int(fp.get("dust_motes", 0)) != 8: problems.append("失败掸灰尘絮应 8 枚(§2.5),实得 %s" % [fp.get("dust_motes")]) - if int(fp.get("flag_dots", 0)) != 8: - problems.append("旗光收回应 8 点,实得 %s" % [fp.get("flag_dots")]) + if int(fp.get("seal_dots", 0)) != 8: + problems.append("封印光收回应 8 点,实得 %s" % [fp.get("seal_dots")]) end_ov.close() # ---- ④ 结算轮光带(含前导亮缘) ---- @@ -156,7 +156,7 @@ func _ready() -> void: # ---- 汇总 ---- if problems.is_empty(): - print("[fx_probe] PASS — 死亡碎裂5块/命中火花6/意图三档+零表示/胜利纹章10/失败掸灰8+旗光8/结算光带+缘线/轮横幅双态/逐条结算标出/主角三态切换 全链路通过") + print("[fx_probe] PASS — 死亡碎裂5块/命中火花6/意图三档+零表示/胜利纹章10/失败掸灰8+封印光8/结算光带+缘线/轮横幅双态/逐条结算标出/主角三态切换 全链路通过") get_tree().quit(0) else: for p in problems: diff --git a/game/smoke/fx_shot_probe.gd b/game/smoke/fx_shot_probe.gd index 02c4503c..9ca77525 100644 --- a/game/smoke/fx_shot_probe.gd +++ b/game/smoke/fx_shot_probe.gd @@ -57,7 +57,7 @@ func _ready() -> void: return var rules = main.run_scope.settlement.minesweeper var board = rules.current_board() - # 自有驱动(只挖/走——测试驱动可用板面数据挑安全格;新手策略档的插旗拒绝会耗尽预算):挖到 3 格停 + # 自有驱动(只挖/走——测试驱动可用板面数据挑安全格;新手策略档的封印拒绝会耗尽预算):挖到 3 格停 var dug := 0 var guard := 40 while dug < 3 and guard > 0: diff --git a/game/smoke/level_autoplay.gd b/game/smoke/level_autoplay.gd index 129bb841..b9579868 100644 --- a/game/smoke/level_autoplay.gd +++ b/game/smoke/level_autoplay.gd @@ -7,7 +7,7 @@ # 挖最近可挖格 / 无可挖停手 / 奖励恢复点立即确认。 # run_level = 机制夹具/单战锚点专用(smoke_all 机制断言、rhythm/defense/damage 单战扫描)—— # 通关率/难度类测量禁用本入口(满血零上下文进关,与真实冒险条件通关率脱节),一律走 run_adventure。 -# 策略档 policy:"normal"(默认)/ "perfect"(零盲挖/全标旗/卡死刷新——上界测量仪,求解器与 +# 策略档 policy:"normal"(默认)/ "perfect"(零盲挖/全封印/卡死刷新——上界测量仪,求解器与 # 动作语义见 auto_player.gd 完美策略档节)。 # 选路驱动(零自动推进):兑付确认/战斗胜利后 runner 进选路态,驱动循环按 route 策略显式 # pick_next_node;route = "min"/"max"(候选节点编号最小/最大——确定性路径轴,零随机流自开;默认 "min")。 @@ -25,8 +25,8 @@ extends RefCounted const AutoPlayer := preload("res://smoke/auto_player.gd") # O4 收口:自动玩家策略单一实现 # ── 普通档 v3 失误注入参数(2026-10-01 用户规格:踩雷期望=完美+2/板、每板少挖几个正确格)── -# 标雷→误挖转化率:v3.2 实证 0.22 时普通档 0/100 全灭(首轮大量已证旗=保底命中,非真人失误 -# 形态——真人几乎不挖自己插旗的格);降 0.10 = 偶发真手滑,主踩雷源=卡死赌挖(不确定性概率命中) +# 标雷→误挖转化率:v3.2 实证 0.22 时普通档 0/100 全灭(首轮大量已证封印=保底命中,非真人失误 +# 形态——真人几乎不挖自己封印的格);降 0.10 = 偶发真手滑,主踩雷源=卡死赌挖(不确定性概率命中) const NORMAL_MINE_SLIP_P := 0.10 # 安全挖跳过率:每板安全格 ~70-90 × p ≈ 3-5 次漏挖(信息与推进双损失) const NORMAL_SKIP_DIG_P := 0.05 @@ -52,9 +52,9 @@ static func run_level(db, seed_val: int, level_index: int, atk_pct: int, hp_pct: "boss_depth": -1, "hp_at_boss": -1, "rows": [], "timeout": false, "log_path": "", "policy": policy, "refreshes": 0, "mine_hits": 0, "mine_dmg": 0, "visited_ids": [], "choices": 0, "last_battle_enemies": [], - # 旗经济五字段(迭代14②判式换代批 T1——runsum 读数面;聚合自结算流水 source_class, - # 零新随机源零核心改动;η=flag_hit÷flag_placed 与标空率派生归分析侧) - "flag_placed": 0, "flag_hit": 0, "flag_miss": 0, "flag_hit_gain": 0, "flag_miss_penalty": 0, + # 封印经济五字段(迭代14②判式换代批 T1——runsum 读数面;聚合自结算流水 source_class, + # 零新随机源零核心改动;η=seal_hit÷seal_placed 与标空率派生归分析侧) + "seal_placed": 0, "seal_hit": 0, "seal_miss": 0, "seal_hit_gain": 0, "seal_miss_penalty": 0, "prng": _policy_rng(seed_val), "mine_slips": 0, "skip_digs": 0, "shop_buys": 0, } runner.step_row.connect(_on_step_row.bind(runner, st, collect_rows)) @@ -134,8 +134,8 @@ static func run_adventure(db, seed_val: int, atk_pct: int, hp_pct: int, collect_ "summary": {}, "wallet_events": [], "encounter_max_hp_seq": [], "reward_events": [], "feat_mode": String(relic.get("mode", "off")), # 特性分层开关(迭代 12 T7——off=316-f 通用竞争/on=成型画像优先捕捞 relic) "shop_gp_seq": [], # 商店房到达余额序(逐关 1 次——GP 跨关延续验收取数面) - # 旗经济五字段(迭代14②判式换代批 T1——与 run_level 同口径,见彼处注释) - "flag_placed": 0, "flag_hit": 0, "flag_miss": 0, "flag_hit_gain": 0, "flag_miss_penalty": 0, + # 封印经济五字段(迭代14②判式换代批 T1——与 run_level 同口径,见彼处注释) + "seal_placed": 0, "seal_hit": 0, "seal_miss": 0, "seal_hit_gain": 0, "seal_miss_penalty": 0, "prng": _policy_rng(seed_val), "mine_slips": 0, "skip_digs": 0, "shop_buys": 0, "adv": true, # v3 档位行为开关(选路评分/失误注入/商店购买只挂冒险测量面——单关夹具保持旧语义零扰动) @@ -434,24 +434,24 @@ static func _on_step_row(row: Dictionary, _runner, st: Dictionary, collect_rows: _note_enemy(String(row.get("text", "")), st) # 施放行(毒爆挂毒等——伤害行可能缺席的死亡遭遇仍可归因) if row.source_class == "mine_hit": st.mine_hits += 1 # 踩雷证据行(负向兑付——完美档断言恒 0;盲挖惩罚链埋点) - # 旗经济聚合(迭代14②判式换代批 T1——自结算流水聚合,零新随机源): + # 封印经济聚合(迭代14②判式换代批 T1——自结算流水聚合,零新随机源): # ⚠ 行侧判据考证实录:结算段对存续增益实例每轮复发行 effect 行且复用实例 source_class - #(battle_orchestrator 状态列举行)——source_class=flag_hit 的行 ≠ 标中事件。事件行唯一判据 - # = 授予行专带 highlight="flag_hit"(实测 87 行 == 受理插旗 87 动作,1:1 精确); - # 雷区图谱追加分grant 无高光,以 display_name 后缀补捕(计入事件与合计——同旗第二份兑付)。 - # 满层拒收行(reward_ineffective)零兑付不入。标空事件=归因行(type=flag_miss 每格恰一次); + #(battle_orchestrator 状态列举行)——source_class=seal_hit 的行 ≠ 标中事件。事件行唯一判据 + # = 授予行专带 highlight="seal_hit"(实测 87 行 == 受理封印 87 动作,1:1 精确); + # 雷区图谱追加分grant 无高光,以 display_name 后缀补捕(计入事件与合计——同封印第二份兑付)。 + # 满层拒收行(reward_ineffective)零兑付不入。标空事件=归因行(type=seal_miss 每格恰一次); # 标空惩罚合计只入一次性兑付行(flat 直伤 damage/heal + gp_loss escrow 行)——sapped 授予行 # 与其状态复发行行侧不可区分不入合计(登记注记,判读侧按事件数补算)。 - if row.source_class == "flag_hit" and row.type != "reward_ineffective": - if String(row.get("highlight", "")) == "flag_hit" \ + if row.source_class == "seal_hit" and row.type != "reward_ineffective": + if String(row.get("highlight", "")) == "seal_hit" \ or String(row.get("display_name", "")).contains("雷区图谱"): - st.flag_hit += 1 - st.flag_hit_gain += int(row.value) - if row.type == "flag_miss": - st.flag_miss += 1 - elif row.source_class == "flag_miss" and (row.type == "damage" or row.type == "heal" \ + st.seal_hit += 1 + st.seal_hit_gain += int(row.value) + if row.type == "seal_miss": + st.seal_miss += 1 + elif row.source_class == "seal_miss" and (row.type == "damage" or row.type == "heal" \ or String(row.get("effect_id", "")) == "gp_loss"): - st.flag_miss_penalty += int(row.value) + st.seal_miss_penalty += int(row.value) if collect_rows: st.rows.append(row) @@ -507,9 +507,9 @@ static func _autoplay_battle(runner, settlement, st: Dictionary, logger) -> void # 双循环逐行相同仅差 act 来源行,合并单循环;三档决策语义逐位不变,见 _decide_act)。 # 普通策略档 v3(2026-10-01 用户重定义):完美策略 + 受控失误注入——v2「新手级单步推理+盲挖 # 兜底」画像被真人实证推翻(零加成真人首通三关踩 23 雷 vs v2 普通档 L2 条件通关率 10.6%)。 - # v3 语义 = 会玩的普通玩家:推理与完美档同源(subset 解算/标旗/卡死刷新),失误只注入两手—— + # v3 语义 = 会玩的普通玩家:推理与完美档同源(subset 解算/封印/卡死刷新),失误只注入两手—— # 标雷误挖(NORMAL_MINE_SLIP_P)+ 安全挖跳过(NORMAL_SKIP_DIG_P)。连续拒绝 ≥3 = 编排违约防御。 - # 完美策略档(2026-09-14):单步决策循环——move/dig/flag 经 排雷玩法 settle_batch 提交, + # 完美策略档(2026-09-14):单步决策循环——move/dig/seal 经 排雷玩法 settle_batch 提交, # refresh 经 settlement.player_request_refresh(战斗结算 核心编排:行动经济 扣 RAP + 退役 + 当场换新板), # stop 出内环走统一停手提交。连续拒绝 ≥3 = 编排违约防御(fail-fast 语义,停手防死循环)。 # 2026-10-01 上界修正:选路改目标价值评分(_route_pick)+ 商店贪心买齐(_autoplay_shop)—— @@ -533,8 +533,8 @@ static func _autoplay_battle(runner, settlement, st: Dictionary, logger) -> void ok = _submit_intent(settlement, "move", act.get("cell"), logger, start_round) elif kind == "dig": ok = _submit_intent(settlement, "dig", act.get("cell"), logger, start_round) - elif kind == "flag": - ok = _submit_intent(settlement, "flag_place", act.get("cell"), logger, start_round) + elif kind == "seal": + ok = _submit_intent(settlement, "seal_place", act.get("cell"), logger, start_round) elif kind == "refresh": ok = bool(settlement.player_request_refresh()) if logger != null: @@ -542,8 +542,8 @@ static func _autoplay_battle(runner, settlement, st: Dictionary, logger) -> void if ok: if kind == "refresh": st.refreshes = int(st.refreshes) + 1 - elif kind == "flag": - st.flag_placed = int(st.get("flag_placed", 0)) + 1 # 插旗数(η 分母=全部插旗数——迭代14② Q5 裁决;失误注入转化旗不计数=转化后实为挖) + elif kind == "seal": + st.seal_placed = int(st.get("seal_placed", 0)) + 1 # 封印数(η 分母=全部封印数——迭代14② Q5 裁决;失误注入转化封印不计数=转化后实为挖) rejects = 0 else: rejects += 1 @@ -554,7 +554,7 @@ static func _autoplay_battle(runner, settlement, st: Dictionary, logger) -> void # 普通档 v3 失误注入(2026-10-01 用户规格):三类—— -# ①标雷误挖:把「标旗已证雷」动作直接转成「挖该格」(真人手滑原型:知道是雷、位置点错, +# ①标雷误挖:把「封印已证雷」动作直接转成「挖该格」(真人手滑原型:知道是雷、位置点错, # 踩雷吃伤且该雷奖励报废);期望踩雷增量 ≈ 每板已证雷数 × NORMAL_MINE_SLIP_P(目标完美+2/板) # ②安全挖跳过:把「挖已证安全格」动作转成本轮停手(少挖几个正确的雷——信息与推进双损失) # ③卡死赌挖:完美档无已证动作时刷新/停手拖轮次吃敌方垫刀(实证=完美档 41% 通关全败于慢玩 @@ -566,7 +566,7 @@ static func _apply_normal_slips(act: Dictionary, settlement, st: Dictionary) -> if prng == null: return act var kind := String(act.get("kind", "stop")) - if kind == "flag" and prng.randf() < NORMAL_MINE_SLIP_P: + if kind == "seal" and prng.randf() < NORMAL_MINE_SLIP_P: st.mine_slips = int(st.get("mine_slips", 0)) + 1 return {"kind": "dig", "cell": act.get("cell")} if kind == "dig": diff --git a/game/smoke/screen_flow_probe.gd b/game/smoke/screen_flow_probe.gd index b633a9c0..7dd788d1 100644 --- a/game/smoke/screen_flow_probe.gd +++ b/game/smoke/screen_flow_probe.gd @@ -47,7 +47,7 @@ func _ready() -> void: #(战斗容器 battle_root 在局外也 visible——裸看 visible 会把 boot 态误判成「菜单与冒险同时在场」)。 # **合法叠加只有一对**:终局覆盖层盖在冒险内容之上(终局态 is_adventure 尚未收束,是设计如此)。 # 其余任意两屏同时为真=互斥失守。 -func _screen_flags() -> Dictionary: +func _screen_seals() -> Dictionary: return { "菜单": main._start_overlay != null and main._start_overlay.visible, "营地": main.camp_overlay != null and main.camp_overlay.visible, @@ -56,7 +56,7 @@ func _screen_flags() -> Dictionary: } -func _flags_text(f: Dictionary) -> String: +func _seals_text(f: Dictionary) -> String: var on: Array[String] = [] for k in ["菜单", "营地", "冒险", "终局"]: if bool(f[k]): @@ -65,14 +65,14 @@ func _flags_text(f: Dictionary) -> String: # ---- 流程状态位(与可见性是两回事,逐步单独判)---- -func _expect_adventure_flag(step: String, expect: bool) -> void: +func _expect_adventure_seal(step: String, expect: bool) -> void: var got: bool = main.run_scope != null and main.run_scope.is_adventure if got != expect: _problems.append("%s:流程状态位 is_adventure 应为 %s,实测 %s" % [step, str(expect), str(got)]) func _expect_exclusive(step: String, expect: String) -> void: - var f: Dictionary = _screen_flags() + var f: Dictionary = _screen_seals() var pairs := [["菜单", "营地"], ["菜单", "冒险"], ["营地", "冒险"], ["终局", "营地"], ["终局", "菜单"]] for pair in pairs: var a: String = pair[0] @@ -80,7 +80,7 @@ func _expect_exclusive(step: String, expect: String) -> void: if bool(f[a]) and bool(f[b]): _problems.append("%s:屏级互斥失守(%s 与 %s 同时在场)" % [step, a, b]) if not bool(f[expect]): - _problems.append("%s:期望屏「%s」不在场(实测 %s)" % [step, expect, _flags_text(f)]) + _problems.append("%s:期望屏「%s」不在场(实测 %s)" % [step, expect, _seals_text(f)]) return for k in ["菜单", "营地", "冒险", "终局"]: if k == expect: @@ -88,7 +88,7 @@ func _expect_exclusive(step: String, expect: String) -> void: if k == "冒险" and expect == "终局": continue # 合法叠加:终局覆盖在冒险内容之上 if bool(f[k]): - _problems.append("%s:屏「%s」不该在场(实测 %s)" % [step, k, _flags_text(f)]) + _problems.append("%s:屏「%s」不该在场(实测 %s)" % [step, k, _seals_text(f)]) func _frames(n: int = 2) -> void: @@ -99,7 +99,7 @@ func _frames(n: int = 2) -> void: # ---- ① boot:菜单独占 ---- func _step_boot_menu() -> void: _expect_exclusive("①boot", "菜单") - _expect_adventure_flag("①boot", false) + _expect_adventure_seal("①boot", false) if main.debug_overlay != null and main.debug_overlay.visible: _problems.append("①boot:调试浮窗 boot 自动开(菜单优先失守)") @@ -136,7 +136,7 @@ func _step_menu_to_adventure() -> void: lvbtn.pressed.emit() await _frames(3) _expect_exclusive("④菜单→冒险", "冒险") - _expect_adventure_flag("④菜单→冒险", true) + _expect_adventure_seal("④菜单→冒险", true) if main.run_scope != null and main.run_scope.adventure == null: _problems.append("④菜单→冒险:冒险实例未建立(入口停点未达)") if main.level_screen != null and not main.level_screen.visible: diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 826bd31f..ede68830 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -620,7 +620,7 @@ func _smoke_run_lifecycle() -> void: check(not main.run_scope.is_adventure and main.run_scope.adventure == null and main.run_scope.runner == null, "V3 会话收束(新闲时会话零冒险/关卡对象)") check(main.run_scope.hints_shown.is_empty() and not main.run_scope.boss_active and main.run_scope.last_gain_amount == 0, - "V3 局态旗/账本全复位(queue_free 物化——注入脏状态零残留)") + "V3 局态封印/账本全复位(queue_free 物化——注入脏状态零残留)") check(main._start_overlay.visible, "V3 回开始菜单(终局出口路径)") # ---- 第二局:放弃终局无断点残留→直进开局→全新会话 ---- check(not sm.has_breakpoint(), "V3 放弃终局清断点(无残留断点——续玩按钮态联动)") @@ -659,7 +659,7 @@ func _run_core_smoke(db, rng) -> void: _smoke_full_battle(1, 0, "L1 · 地精") _smoke_full_battle(2, 0, "L2 · 熊地精") _smoke_level() - _smoke_flag_ap_exhausted() + _smoke_seal_ap_exhausted() _smoke_reward_identity_unit() _smoke_power_interval() _smoke_active_refresh() @@ -678,7 +678,7 @@ func _run_core_smoke(db, rng) -> void: _smoke_clear_reward_chain() _smoke_refresh_provenance_guard() _smoke_polarity_routing() - _smoke_flag_irreversible_quadrants() + _smoke_seal_irreversible_quadrants() _smoke_negative_dictionary() _smoke_resource_surface() _smoke_settlement_segments() @@ -1297,8 +1297,8 @@ func _smoke_feats() -> void: # ② 旧 27 件退役钉面(V2——arcane_ember 系旧件表首行;全仓 grep 零残留归批末静态核查) check(_db.feats.row_by_id("arcane_ember").is_empty() and _db.feats.row_by_id("magma_body").is_empty(), "旧 27 件已退役:arcane_ember/magma_body 表内零残留〔专长批 V2〕") - check(_db.treasure_items.row_by_id("venom_edge").is_empty() and _db.treasure_items.row_by_id("flag_burst").is_empty(), - "迁出收尾:treasure_items 无 venom_edge/flag_burst 行(同调目录自然收窄)〔专长批 V13〕") + check(_db.treasure_items.row_by_id("venom_edge").is_empty() and _db.treasure_items.row_by_id("seal_burst").is_empty(), + "迁出收尾:treasure_items 无 venom_edge/seal_burst 行(同调目录自然收窄)〔专长批 V13〕") # ③ 契约面静态钉扎(V18/V19/V21/V22——人工核对 V20/V21 裁决面以外的可机检半) var kinds_ok := true for t in a_r0._curio_deck: @@ -1316,9 +1316,9 @@ func _smoke_feats() -> void: for row_v in (_db.feats.rows as Array): var r_d: Dictionary = row_v as Dictionary for txt_v in [String(r_d.get("display_name", "")), String(r_d.get("desc", ""))]: - if String(txt_v).contains("雷") or String(txt_v).contains("插旗"): + if String(txt_v).contains("雷") or String(txt_v).contains("旗"): bad_words += 1 - check(bad_words == 0, "对外命名纪律:29 行 display_name/desc 零「雷/插旗」字面(封印/陷阱风味系)〔专长批 V21 初筛〕") + check(bad_words == 0, "对外命名纪律:29 行 display_name/desc 零「雷/旗」字面(封印/陷阱风味系)〔专长批 V21 初筛〕") check(float((_db.feats.row_by_id("trap_burst").get("triggers", [{}])[0] as Dictionary).get("do", {}).get("mult", 0)) > 1.0 and int((_db.feats.row_by_id("blood_honey").get("triggers", [{}])[0] as Dictionary).get("do", {}).get("value", 99)) < 5 and int((_db.feats.row_by_id("stone_skin").get("triggers", [{}])[0] as Dictionary).get("do", {}).get("cap", 0)) == 3, @@ -1331,11 +1331,11 @@ func _smoke_feats() -> void: {"feat_id": "x2", "display_name": "试二", "rarity": "excellent", "desc": "测试回复", "cap": 1, "triggers": [{"on": "mine_hit", "do": {"kind": "heal", "value": 2}}]}, {"feat_id": "x3", "display_name": "试三", "rarity": "rare", "desc": "测试群伤", "cap": 1, - "triggers": [{"on": "flag_hit", "do": {"kind": "open_ticket", "channel": "blast", "value": 3}}]}, + "triggers": [{"on": "seal_hit", "do": {"kind": "open_ticket", "channel": "blast", "value": 3}}]}, {"feat_id": "x4", "display_name": "试四", "rarity": "rare", "desc": "测试减伤", "cap": 2, "triggers": [{"on": "damage_taken", "when": [{"fact": "hp_ratio", "op": "lte", "value": 50}], "do": {"kind": "damage_reduce", "value": 2}}]}, {"feat_id": "x5", "display_name": "试五", "rarity": "legendary", "desc": "测试AC", "cap": 1, - "triggers": [{"on": "flag_hit", "do": {"kind": "ac_bonus", "value": 1, "mode": "round"}}]}, + "triggers": [{"on": "seal_hit", "do": {"kind": "ac_bonus", "value": 1, "mode": "round"}}]}, ] check(rt.validate().is_empty(), "新 schema 构造表 validate 零违例(四级 rarity/cap 字段/词表全过——流派标签已退役零 archetype)") var live_rows: FeatTable = _db.feats @@ -1481,28 +1481,28 @@ func _smoke_feats() -> void: check(orch._hits_of(fx.dispatch("dig_reveal", {"is_edge_cell": true}), "grant_material").size() == 1 and orch._hits_of(fx.dispatch("dig_reveal", {"is_edge_cell": false}), "grant_material").is_empty(), "边陲矿工:边缘格产出 +1·中心格反例零产出〔专长批 V3〕") - # 插旗系 + # 封印系 fx.rebuild(["seal_echo"], [], []) - apply_fx.call(fx.dispatch("flag_hit", {})) - apply_fx.call(fx.dispatch("flag_hit", {})) + apply_fx.call(fx.dispatch("seal_hit", {})) + apply_fx.call(fx.dispatch("seal_hit", {})) var se_hits: Array = fx.dispatch("round_end", {}) check(orch._hits_of(se_hits, "grant_ap").size() == 1 and String((orch._hits_of(se_hits, "grant_ap")[0] as Dictionary).get("mode", "")) == "queue", "封印回响:标中计数≥2→轮末返 1 AP(下轮 queue)〔专长批 V3〕") fx.rebuild(["seal_smith"], [], []) var sm_remove := 0 for i in 3: - var sm_dispatch: Array = fx.dispatch("flag_hit", {}) + var sm_dispatch: Array = fx.dispatch("seal_hit", {}) apply_fx.call(sm_dispatch) for h in sm_dispatch: if String(h.get("kind", "")) == "remove_mines": sm_remove += 1 check(sm_remove == 1, "封印匠:标中每第 3 次→中立移除恰一次(频率闸死)〔专长批 V3〕") fx.rebuild(["seal_stake"], [], []) - check(orch._hits_of(fx.dispatch("flag_hit", {}), "ac_bonus").size() == 1 - and String((orch._hits_of(fx.dispatch("flag_hit", {}), "ac_bonus")[0] as Dictionary).get("mode", "")) == "round", + check(orch._hits_of(fx.dispatch("seal_hit", {}), "ac_bonus").size() == 1 + and String((orch._hits_of(fx.dispatch("seal_hit", {}), "ac_bonus")[0] as Dictionary).get("mode", "")) == "round", "封印桩:标中本轮 AC +N(round 域——round_start 清零)〔专长批 V3〕") fx.rebuild(["warning_beacon"], [], []) - check(orch._hits_of(fx.dispatch("flag_hit", {}), "preview_area").size() == 1, "示警烟火:标中揭示 3×3 资源类型(不揭安危位置)〔专长批 V3〕") + check(orch._hits_of(fx.dispatch("seal_hit", {}), "preview_area").size() == 1, "示警烟火:标中揭示 3×3 资源类型(不揭安危位置)〔专长批 V3〕") # 踩雷/受伤系 fx.rebuild(["pain_memory"], [], []) apply_fx.call(fx.dispatch("mine_hit", {})) @@ -1556,9 +1556,9 @@ func _smoke_feats() -> void: "背水:生命≤50% 减伤·过半血反例零减伤〔专长批 V3〕") # 跨族桥 fx.rebuild(["breaker_strike"], [], []) - check(orch._hits_of(fx.dispatch("mine_hit", {"dug_under_flag": true}), "counter_add").size() == 1 - and orch._hits_of(fx.dispatch("mine_hit", {"dug_under_flag": false}), "counter_add").is_empty(), - "破封一击:挖开带封印危险格 +1 层·无旗反例零触发〔专长批 V3〕") + check(orch._hits_of(fx.dispatch("mine_hit", {"dug_under_seal": true}), "counter_add").size() == 1 + and orch._hits_of(fx.dispatch("mine_hit", {"dug_under_seal": false}), "counter_add").is_empty(), + "破封一击:挖开带封印危险格 +1 层·无封印反例零触发〔专长批 V3〕") # 节奏系 fx.rebuild(["map_exchange"], [], []) var me_hits: Array = fx.dispatch("dig_stop", {"ap_left": 4}) @@ -1597,15 +1597,15 @@ func _smoke_feats() -> void: # 契约尖点 fx.rebuild(["blood_tax"], [], []) check(orch._hits_of(fx.dispatch("mine_hit", {}), "bonus_delta").size() == 1 - and String((orch._hits_of(fx.dispatch("flag_hit", {}), "bonus_delta")[0] as Dictionary).get("axis", "")) == "atk", + and String((orch._hits_of(fx.dispatch("seal_hit", {}), "bonus_delta")[0] as Dictionary).get("axis", "")) == "atk", "血税:双向同局账本(踩陷阱−2max_hp/封印命中+1atk——bonus_delta 战末汇入)〔专长批 V3〕") # 迁入 2 件 fx.rebuild(["venom_edge"], [], []) check(orch._hits_of(fx.dispatch("clamp_check", {"matchup": "magic_vs_heavy"}), "modify_ticket").size() == 1 and orch._hits_of(fx.dispatch("clamp_check", {"matchup": "normal_vs_light"}), "modify_ticket").is_empty(), "淬毒刃纹(迁入):克制正面(magic_vs_heavy 矩阵值>0)追加·中性面反例零触发〔专长批 V3〕") - fx.rebuild(["flag_burst"], [], []) - check(orch._hits_of(fx.dispatch("flag_hit", {}), "open_ticket").size() == 1, + fx.rebuild(["seal_burst"], [], []) + check(orch._hits_of(fx.dispatch("seal_hit", {}), "open_ticket").size() == 1, "封印爆裂(迁入):标中全体敌群伤〔专长批 V3〕") # 零持有 var orch0 = load("res://core/battle_orchestrator.gd").new(_db, _fresh_rng(74)) @@ -1769,8 +1769,8 @@ func _smoke_type_glow() -> void: if String(act.get("kind", "stop")) == "stop": break var op := String(act.get("kind", "")) - if op == "flag": - op = "flag_place" + if op == "seal": + op = "seal_place" ms.settle_batch([{"action": op, "cell": act.get("cell")}]) steps += 1 var view = load("res://presentation/views/board_view.gd").new() @@ -1782,7 +1782,7 @@ func _smoke_type_glow() -> void: var revealed_before: Array = ms.revealed_cells() revealed_before.sort() var hero_before: Vector2i = ms.hero_pos() - var flags_before: int = ms.flag_count() + var seals_before: int = ms.seal_count() # ---- 相 0:夹具全集合法九型 ⇒ 作用集 == 独立重算期望集(V1)---- var snap: Dictionary = view.type_glow_probe() check(bool(snap.get("enabled", false)), "V1 微光默认开(Q4 丙案——呈现态布尔缺省 true,生产写入面零显式开)") @@ -1881,8 +1881,8 @@ func _smoke_type_glow() -> void: "V7 off→on 作用集与独立重算期望集恒等(%d 格)" % (snap_on.get("cells", {}) as Dictionary).size()) var revealed_after: Array = ms.revealed_cells() revealed_after.sort() - check(revealed_before == revealed_after and hero_before == ms.hero_pos() and flags_before == ms.flag_count(), - "V7 微光开关零玩法写入(已开集/英雄位/旗数三面对照逐位一致)") + check(revealed_before == revealed_after and hero_before == ms.hero_pos() and seals_before == ms.seal_count(), + "V7 微光开关零玩法写入(已开集/英雄位/封印数三面对照逐位一致)") # ---- 相 6:换图随 rebuild 重算(V3——旧板坐标零残留)---- _glow_type_overrides.clear() _glow_blocked.clear() @@ -1926,8 +1926,8 @@ func _smoke_type_glow() -> void: if String(act7.get("kind", "stop")) == "stop": break var op7 := String(act7.get("kind", "")) - if op7 == "flag": - op7 = "flag_place" + if op7 == "seal": + op7 = "seal_place" var batch7 := [{"action": op7, "cell": act7.get("cell")}] msA.settle_batch(batch7) msB.settle_batch(batch7) @@ -1944,7 +1944,7 @@ func _smoke_type_glow() -> void: viewB.free() -# 排雷 core 态摘要(同板同序列对照面——已开记录含 kind/digit、旗集、英雄位、AP、相位) +# 排雷 core 态摘要(同板同序列对照面——已开记录含 kind/digit、封印集、英雄位、AP、相位) func _ms_digest(ms, ae) -> Array: var b: Variant = ms.current_board() var rev: Array = [] @@ -1952,13 +1952,13 @@ func _ms_digest(ms, ae) -> Array: var rec: Dictionary = ms.reveal_record(c) rev.append([int(c.x), int(c.y), String(rec.get("kind", "")), int(rec.get("digit", -1))]) rev.sort() - var flags: Array = [] + var seals: Array = [] for y in b.height: for x in b.width: var c := Vector2i(x, y) - if ms.has_flag(c): - flags.append([int(c.x), int(c.y)]) - return [[int(ms.hero_pos().x), int(ms.hero_pos().y)], rev, flags, ae.ap, ae.phase, ms.flag_count()] + if ms.has_seal(c): + seals.append([int(c.x), int(c.y)]) + return [[int(ms.hero_pos().x), int(ms.hero_pos().y)], rev, seals, ae.ap, ae.phase, ms.seal_count()] # ---- 地图战斗资源·身份面单元冒烟(格面资源批:roll 恰一次 / 雷安同池 / 幂等 / 清图批尾)---- @@ -2011,18 +2011,18 @@ func _smoke_reward_identity_unit() -> void: # ---- 地图战斗资源·伤害量值区间批冒烟(2026-09-14:身份批 roll 域内 + 中点锚 + 变异实际流动 + 定值行不受扰)---- -# ---- 排雷玩法 旗动作耗尽末点 AP 回归(playtest 缺陷②——v1 冒烟盲区:自动玩家不用旗)---- +# ---- 排雷玩法 封印动作耗尽末点 AP 回归(playtest 缺陷②——v1 冒烟盲区:自动玩家不用封印)---- -func _smoke_flag_ap_exhausted() -> void: - print("--- 排雷玩法·旗动作耗尽末点 AP 回归 ---") +func _smoke_seal_ap_exhausted() -> void: + print("--- 排雷玩法·封印动作耗尽末点 AP 回归 ---") var rng = load("res://core/rng_service.gd").new() rng.set_master_seed(20260911) var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng) var rounds: Array = [] settlement.round_started.connect(func(ri): rounds.append(ri)) - check(settlement.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "回归战斗启动(Boss 行——D0 20HP 级会被盲挖粉尘秒杀,无法承载旗回归场景)") + check(settlement.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "回归战斗启动(Boss 行——D0 20HP 级会被盲挖粉尘秒杀,无法承载封印回归场景)") var minesweeper = settlement.minesweeper - # 恰花 (AP-1) 点挖掘,留末点给旗(表驱动——2026-09-16 AP 压速批 8→6 不再写死) + # 恰花 (AP-1) 点挖掘,留末点给封印(表驱动——2026-09-16 AP 压速批 8→6 不再写死) var ap_total: int = int(_db.action_economy.ap_per_round) for i in range(ap_total - 1): if settlement.action_economy.phase != "Active" or settlement.action_economy.ap == 0: @@ -2034,17 +2034,17 @@ func _smoke_flag_ap_exhausted() -> void: minesweeper.settle_batch([{"action": "move", "cell": plan.hero_cell}]) minesweeper.settle_batch([{"action": "dig", "cell": plan.dig_cell}]) check(settlement.action_economy.phase == "Active" and settlement.action_economy.ap == 1, "%d 次挖掘后恰剩 1 AP(phase=%s ap=%d)" % [ap_total - 1, str(settlement.action_economy.phase), settlement.action_economy.ap]) - # 末点 AP 花在插旗——轮次必须终结并结算进入第 2 轮 - # 旗目标 = 挖掘策略的下一目标格(构造保证:未开、与小人邻接——先把小人移到其邻接已开格) + # 末点 AP 花在封印——轮次必须终结并结算进入第 2 轮 + # 封印目标 = 挖掘策略的下一目标格(构造保证:未开、与小人邻接——先把小人移到其邻接已开格) var plan2 = AutoPlayer.choose_dig(minesweeper) - check(not plan2.is_empty(), "仍存在可挖目标(旗目标来源)") + check(not plan2.is_empty(), "仍存在可挖目标(封印目标来源)") var out: Array = [] if not plan2.is_empty(): if plan2.hero_cell != minesweeper.hero_pos(): minesweeper.settle_batch([{"action": "move", "cell": plan2.hero_cell}]) - out = minesweeper.settle_batch([{"action": "flag_place", "cell": plan2.dig_cell}]) - check(not out.is_empty() and bool(out[0].accepted), "末点 AP 插旗被受理") - check(rounds.size() >= 2, "旗动作耗尽 AP 触发轮末结算并进入第 2 轮(rounds=%s)" % str(rounds)) + out = minesweeper.settle_batch([{"action": "seal_place", "cell": plan2.dig_cell}]) + check(not out.is_empty() and bool(out[0].accepted), "末点 AP 封印被受理") + check(rounds.size() >= 2, "封印动作耗尽 AP 触发轮末结算并进入第 2 轮(rounds=%s)" % str(rounds)) # ---- 关卡节点地图·线性推进冒烟(2026-09-11 关卡扩展批)---- @@ -2485,13 +2485,13 @@ func _smoke_board_generator() -> void: check(_board_dump(b2) != _board_dump(b4), "L%d 异种子产物不同(退化护栏)" % L) # ---- 初始展开收窄批断言(迭代14① T4)---- # ① 结构断言:R₀ ≤ cap(正式表行投值,合法性闸承载——出图必过);② r0_cap_rejected 尝试事实在位; - # ③ ring_removed 量级:剃雷域收窄后 ≤ 域内候选雷格数(5×5−出生 9=16——全域剃雷退役); + # ③ ring_removed 量级:剃雷域收窄后 ≤ 域内候选危险格数(5×5−出生 9=16——全域剃雷退役); # ④ 闸压线行为:cap=9(出生保障面下限)时出图必 r0≤9 或 accept_worst 非法标记(三分出口诚实降级,玩家永不卡死) var cap_val: int = int(row.get("r0_max_cap", 0)) check(cap_val >= BoardData.SPAWN_AREA_CELLS, "L%d r0_max_cap 正式行投值在位(%d ≥ 出生保障面 9——板面 30%% 锚)" % [L, cap_val]) check(int(b1.metrics.r0_count) <= cap_val, "L%d 结构断言 R₀=%d ≤ cap=%d(R₀≤cap 重掷闸承载)" % [L, int(b1.metrics.r0_count), cap_val]) check(int(b1.metrics.get("r0_cap_rejected", -1)) >= 0, "L%d r0_cap_rejected 尝试事实指标在位(本图 %d 次触发)" % [L, int(b1.metrics.get("r0_cap_rejected", -1))]) - check(int(b1.metrics.get("ring_removed", 99)) <= (2 + int(row.get("shave_ring_radius", 1))) * (2 + int(row.get("shave_ring_radius", 1))) * 4 - 5, "L%d ring_removed=%d ≤ 剃雷域候选雷格数((3+2r)²−9——全域剃雷退役)" % [L, int(b1.metrics.get("ring_removed", 99))]) + check(int(b1.metrics.get("ring_removed", 99)) <= (2 + int(row.get("shave_ring_radius", 1))) * (2 + int(row.get("shave_ring_radius", 1))) * 4 - 5, "L%d ring_removed=%d ≤ 剃雷域候选危险格数((3+2r)²−9——全域剃雷退役)" % [L, int(b1.metrics.get("ring_removed", 99))]) var row9: Dictionary = row.duplicate() row9["r0_max_cap"] = BoardData.SPAWN_AREA_CELLS row9["max_gen_attempts"] = 4 @@ -2770,7 +2770,7 @@ func _smoke_variant_placement(L: int) -> void: for c in vcells: if r0.has(c) or b.is_mine(c): domain_ok = false - check(domain_ok, "L%d 变异格全在初始展开区外且不吃雷格(布置域结构保障——closed_only)" % L) + check(domain_ok, "L%d 变异格全在初始展开区外且不吃危险格(布置域结构保障——closed_only)" % L) var cand_count := 0 for c in b.safe_cells(): if not r0.has(c): @@ -2876,7 +2876,7 @@ func _run_battle(L: int, D: int, axes: Dictionary = {}) -> Dictionary: settlement.step_row.connect(func(row): out.stream.append(row)) settlement.battle_finished.connect(func(payload): out.result = payload.get("result", "")) settlement.minesweeper.cell_revealed.connect(func(evt): out.events.append(evt)) - settlement.minesweeper.flag_judged.connect(func(evt): out.events.append(evt)) + settlement.minesweeper.seal_judged.connect(func(evt): out.events.append(evt)) settlement.minesweeper.round_end_board.connect(func(p): out.events.append({"ev": "round_end_board", "path_tag": p.path_tag})) settlement.action_economy.round_end_stopped.connect(func(p): out.events.append({"ev": "round_end_stopped", "path_tag": p.path_tag})) var minesweeper = settlement.minesweeper @@ -3148,29 +3148,29 @@ func _smoke_damage_types() -> void: check(int(am.normal.light) == 0 and int(am.normal.ward) == 1 and int(am.normal.heavy) == -1, "普通行:轻甲 0 / 魔法护甲 +1 / 重甲 −1(加法核)") check(int(am.pierce.light) == -1 and int(am.pierce.ward) == 1 and int(am.pierce.heavy) == 0, "穿刺行:轻甲 −1 / 魔法护甲 +1 / 重甲 0 中性(用户拍板)") check(int(am.magic.light) == 0 and int(am.magic.ward) == -1 and int(am.magic.heavy) == 1, "魔法行:轻甲 0 / 魔法护甲 −1 / 重甲 +1(加法核)") - # ③ 标错(类型化负向兑付)+ 标中正向兑付(2026-09-19 充能退役后标中旗只兑格面资源正向;Boss 行多轮样本;板真相直读保证 hit/miss 确定性) - var run1 = _run_flag_backlash_round(20260912) + # ③ 标错(类型化负向兑付)+ 标中正向兑付(2026-09-19 充能退役后封印命中只兑格面资源正向;Boss 行多轮样本;板真相直读保证 hit/miss 确定性) + var run1 = _run_seal_backlash_round(20260912) var miss_rows := 0 var negative_rows := 0 var hit_rows := 0 for row in run1.rows: - if row.get("type", "") == "flag_miss": + if row.get("type", "") == "seal_miss": miss_rows += 1 - if String(row.get("source_class", "")) == "flag_miss" and String(row.get("type", "")) in ["effect", "damage"]: + if String(row.get("source_class", "")) == "seal_miss" and String(row.get("type", "")) in ["effect", "damage"]: negative_rows += 1 # 标错的负向兑付行(该安全格资源的负向字典行——effect/直伤) - if String(row.get("source_class", "")) == "flag_hit": - hit_rows += 1 # 标中的正向兑付行(该雷格资源的正向字典行——2026-09-19 充能退役后标中只走格面资源正向) - check(miss_rows >= 1, "标错旗产生 flag_miss 归因行(×%d)" % miss_rows) - check(negative_rows >= 1, "标错旗兑付该安全格资源的负向字典行(×%d——attack/defense/weaken 效果行或 heal 直伤行)" % negative_rows) - check(hit_rows >= 1, "标中旗兑付该雷格资源的正向字典行(×%d——充能退役后无魔法分量,正向=格面资源)" % hit_rows) + if String(row.get("source_class", "")) == "seal_hit": + hit_rows += 1 # 标中的正向兑付行(该危险格资源的正向字典行——2026-09-19 充能退役后标中只走格面资源正向) + check(miss_rows >= 1, "标错封印产生 seal_miss 归因行(×%d)" % miss_rows) + check(negative_rows >= 1, "标错封印兑付该安全格资源的负向字典行(×%d——attack/defense/weaken 效果行或 heal 直伤行)" % negative_rows) + check(hit_rows >= 1, "封印命中兑付该危险格资源的正向字典行(×%d——充能退役后无魔法分量,正向=格面资源)" % hit_rows) # ④ 同种子回放(极性路由零随机——同种子逐行相同) - var run2 = _run_flag_backlash_round(20260912) + var run2 = _run_seal_backlash_round(20260912) check(JSON.stringify(run1.rows) == JSON.stringify(run2.rows), "标错惩罚轮回放断言:同种子步骤流逐行相同(类型化负向兑付确定性)") -# 构造轮:标 1 面"安全格旗"(必 miss → 该格资源负向兑付)+ 标 1 面"雷旗"(必 hit → 正向兑付 + 充能)后停手收轮。 -# 返回 flagged safe 格与其 cell_type(Ready 域内查询——类型化断言的数据面)。 -func _run_flag_backlash_round(seed_val: int) -> Dictionary: +# 构造轮:标 1 面"安全格封印"(必 miss → 该格资源负向兑付)+ 标 1 面"雷封印"(必 hit → 正向兑付 + 充能)后停手收轮。 +# 返回 sealed safe 格与其 cell_type(Ready 域内查询——类型化断言的数据面)。 +func _run_seal_backlash_round(seed_val: int) -> Dictionary: var rng = load("res://core/rng_service.gd").new() rng.set_master_seed(seed_val) var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng) @@ -3179,25 +3179,25 @@ func _run_flag_backlash_round(seed_val: int) -> Dictionary: if not settlement.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}): return {"rows": rows, "safe_cell": Vector2i(-1, -1), "safe_type": ""} var minesweeper = settlement.minesweeper - var safe_t := _find_flag_target(minesweeper, false) - var mine_t := _find_flag_target(minesweeper, true) + var safe_t := _find_seal_target(minesweeper, false) + var mine_t := _find_seal_target(minesweeper, true) var safe_type := "" if not safe_t.is_empty(): - var ident = settlement.query_reward_identity(safe_t.flag_cell) + var ident = settlement.query_reward_identity(safe_t.seal_cell) safe_type = String(ident.get("cell_type", "")) if ident != null else "" if safe_t.hero_cell != minesweeper.hero_pos(): minesweeper.settle_batch([{"action": "move", "cell": safe_t.hero_cell}]) - minesweeper.settle_batch([{"action": "flag_place", "cell": safe_t.flag_cell}]) + minesweeper.settle_batch([{"action": "seal_place", "cell": safe_t.seal_cell}]) if not mine_t.is_empty(): if mine_t.hero_cell != minesweeper.hero_pos(): minesweeper.settle_batch([{"action": "move", "cell": mine_t.hero_cell}]) - minesweeper.settle_batch([{"action": "flag_place", "cell": mine_t.flag_cell}]) + minesweeper.settle_batch([{"action": "seal_place", "cell": mine_t.seal_cell}]) minesweeper.settle_batch([{"action": "stop"}]) - return {"rows": rows, "safe_cell": safe_t.get("flag_cell", Vector2i(-1, -1)), "safe_type": safe_type} + return {"rows": rows, "safe_cell": safe_t.get("seal_cell", Vector2i(-1, -1)), "safe_type": safe_type} -# 板真相直读找旗目标:未开 + 指定雷/安全属性 + 存在可达已开邻格(测试允许读板真相——排雷玩法 冒烟同口径) -func _find_flag_target(minesweeper, want_mine: bool) -> Dictionary: +# 板真相直读找封印目标:未开 + 指定雷/安全属性 + 存在可达已开邻格(测试允许读板真相——排雷玩法 冒烟同口径) +func _find_seal_target(minesweeper, want_mine: bool) -> Dictionary: var revealed: Array = minesweeper.revealed_cells() var revealed_set := {} for c in revealed: @@ -3205,26 +3205,26 @@ func _find_flag_target(minesweeper, want_mine: bool) -> Dictionary: for y in minesweeper.current_board().height: for x in minesweeper.current_board().width: var c := Vector2i(x, y) - if minesweeper.is_revealed(c) or minesweeper.has_flag(c): + if minesweeper.is_revealed(c) or minesweeper.has_seal(c): continue if minesweeper.current_board().is_mine(c) != want_mine: continue for n in minesweeper.current_board().neighbors8(c): if revealed_set.has(n) and (minesweeper.compute_move_path(n).size() > 0 or n == minesweeper.hero_pos()): - return {"flag_cell": c, "hero_cell": n} + return {"seal_cell": c, "hero_cell": n} return {} -# ---- 插旗不可逆四情况冒烟(2026-09-19 用户拍板全套落地:禁拔旗 + 挖旗格兑付改判)---- -# 四情况:① 插雷格不动 = 标中奖励照常;② 插雷格再挖开 = 只受挖雷一层惩罚(mine_hit 照常)标中不发; +# ---- 封印不可逆四情况冒烟(2026-09-19 用户拍板全套落地:禁撤封印 + 挖封印格兑付改判)---- +# 四情况:① 插危险格不动 = 标中奖励照常;② 插危险格再挖开 = 只受挖雷一层惩罚(mine_hit 照常)标中不发; # ③ 插安全格不动 = 标空惩罚照常;④ 插安全格再挖开 = 零惩罚零奖励(正向兑付作废、标空不判)。 -# 退役面:flag_pull 出目录(out_of_catalog);重复插旗仍 flag_present 拒绝。 -# 场景 A(④ + 退役面):标安全格 → flag_pull 拒绝 → 重复插旗拒绝 → 直接挖开 → 收轮。 -# 场景 B(②):标雷格 → 直接挖开 → 收轮。 -# 场景 C(①③):标安全格 + 标雷格 → 不挖收轮 → 标空/标中判定照常。 -func _smoke_flag_irreversible_quadrants() -> void: - print("--- 插旗不可逆四情况(禁拔旗 + 挖旗格兑付改判)---") - # 场景 A:安全格直挖(情况④)+ flag_pull/重复插旗退役面 +# 退役面:seal_pull 出目录(out_of_catalog);重复封印仍 seal_present 拒绝。 +# 场景 A(④ + 退役面):标安全格 → seal_pull 拒绝 → 重复封印拒绝 → 直接挖开 → 收轮。 +# 场景 B(②):标危险格 → 直接挖开 → 收轮。 +# 场景 C(①③):标安全格 + 标危险格 → 不挖收轮 → 标空/标中判定照常。 +func _smoke_seal_irreversible_quadrants() -> void: + print("--- 封印不可逆四情况(禁撤封印 + 挖封印格兑付改判)---") + # 场景 A:安全格直挖(情况④)+ seal_pull/重复封印退役面 var rng_a = load("res://core/rng_service.gd").new() rng_a.set_master_seed(20260919) var settle_a = load("res://core/battle_orchestrator.gd").new(_db, rng_a) @@ -3232,39 +3232,39 @@ func _smoke_flag_irreversible_quadrants() -> void: settle_a.step_row.connect(func(row): rows_a.append(row)) check(settle_a.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "四情况 A:开局受理") var ms_a = settle_a.minesweeper - var t_a := _find_flag_target(ms_a, false) - check(not t_a.is_empty(), "四情况 A:找到安全格旗目标") + var t_a := _find_seal_target(ms_a, false) + check(not t_a.is_empty(), "四情况 A:找到安全格封印目标") if not t_a.is_empty(): if t_a.hero_cell != ms_a.hero_pos(): ms_a.settle_batch([{"action": "move", "cell": t_a.hero_cell}]) - check(ms_a.settle_batch([{"action": "flag_place", "cell": t_a.flag_cell}])[0].accepted, "四情况 A:插旗受理") - var pull_out: Array = ms_a.settle_batch([{"action": "flag_pull", "cell": t_a.flag_cell}]) + check(ms_a.settle_batch([{"action": "seal_place", "cell": t_a.seal_cell}])[0].accepted, "四情况 A:封印受理") + var pull_out: Array = ms_a.settle_batch([{"action": "seal_pull", "cell": t_a.seal_cell}]) check(not pull_out.is_empty() and not bool(pull_out[0].get("accepted", true)) and String(pull_out[0].get("sub_reason", "")) == "out_of_catalog", - "四情况 A:flag_pull 出目录拒绝(拔旗退役)") - var dup_place: Array = ms_a.settle_batch([{"action": "flag_place", "cell": t_a.flag_cell}]) - check(not dup_place.is_empty() and not bool(dup_place[0].get("accepted", true)) and String(dup_place[0].get("sub_reason", "")) == "flag_present", - "四情况 A:重复插旗仍被拒(flag_present)") - var dig_a: Array = ms_a.settle_batch([{"action": "dig", "cell": t_a.flag_cell}]) - check(not dig_a.is_empty() and bool(dig_a[0].get("accepted", false)), "四情况 A:旗格直接挖开被受理(不再须先拔旗)") - check(not ms_a.has_flag(t_a.flag_cell), "四情况 A:旗随挖掘隐式退役(has_flag = false)") + "四情况 A:seal_pull 出目录拒绝(撤封印退役)") + var dup_place: Array = ms_a.settle_batch([{"action": "seal_place", "cell": t_a.seal_cell}]) + check(not dup_place.is_empty() and not bool(dup_place[0].get("accepted", true)) and String(dup_place[0].get("sub_reason", "")) == "seal_present", + "四情况 A:重复封印仍被拒(seal_present)") + var dig_a: Array = ms_a.settle_batch([{"action": "dig", "cell": t_a.seal_cell}]) + check(not dig_a.is_empty() and bool(dig_a[0].get("accepted", false)), "四情况 A:封印格直接挖开被受理(不再须先撤封印)") + check(not ms_a.has_seal(t_a.seal_cell), "四情况 A:封印随挖掘隐式退役(has_seal = false)") ms_a.settle_batch([{"action": "stop"}]) - var target_a: Array = [t_a.flag_cell.x, t_a.flag_cell.y] + var target_a: Array = [t_a.seal_cell.x, t_a.seal_cell.y] var miss_a := 0 var grant_a := 0 var void_a := 0 for row in rows_a: if row.get("origin_cell", [0, 0]) != target_a: continue - if row.get("type", "") == "flag_miss" or String(row.get("source_class", "")) == "flag_miss": + if row.get("type", "") == "seal_miss" or String(row.get("source_class", "")) == "seal_miss": miss_a += 1 if String(row.get("source_class", "")) == "safe_cell" and row.get("type", "") != "reward_ineffective": grant_a += 1 if row.get("type", "") == "reward_ineffective": void_a += 1 - check(miss_a == 0, "四情况 A:标空判定零兑付(×%d——旗已擦除不入轮末基线)" % miss_a) + check(miss_a == 0, "四情况 A:标空判定零兑付(×%d——封印已擦除不入轮末基线)" % miss_a) check(grant_a == 0, "四情况 A:安全格正向兑付作废(×%d——零奖励)" % grant_a) check(void_a == 1, "四情况 A:兑付作废归因行恰一次(×%d——零惩罚零奖励留痕)" % void_a) - # 场景 B:雷格直挖(情况②) + # 场景 B:危险格直挖(情况②) var rng_b = load("res://core/rng_service.gd").new() rng_b.set_master_seed(20260919) var settle_b = load("res://core/battle_orchestrator.gd").new(_db, rng_b) @@ -3272,17 +3272,17 @@ func _smoke_flag_irreversible_quadrants() -> void: settle_b.step_row.connect(func(row): rows_b.append(row)) check(settle_b.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "四情况 B:开局受理") var ms_b = settle_b.minesweeper - var t_b := _find_flag_target(ms_b, true) - check(not t_b.is_empty(), "四情况 B:找到雷格旗目标") + var t_b := _find_seal_target(ms_b, true) + check(not t_b.is_empty(), "四情况 B:找到危险格封印目标") if not t_b.is_empty(): if t_b.hero_cell != ms_b.hero_pos(): ms_b.settle_batch([{"action": "move", "cell": t_b.hero_cell}]) - check(ms_b.settle_batch([{"action": "flag_place", "cell": t_b.flag_cell}])[0].accepted, "四情况 B:插旗受理") - var dig_b: Array = ms_b.settle_batch([{"action": "dig", "cell": t_b.flag_cell}]) - check(not dig_b.is_empty() and bool(dig_b[0].get("accepted", false)), "四情况 B:旗雷格直接挖开被受理") - check(ms_b.is_revealed(t_b.flag_cell) and ms_b.current_board().is_mine(t_b.flag_cell), "四情况 B:雷格已揭示(挖雷本体照常)") + check(ms_b.settle_batch([{"action": "seal_place", "cell": t_b.seal_cell}])[0].accepted, "四情况 B:封印受理") + var dig_b: Array = ms_b.settle_batch([{"action": "dig", "cell": t_b.seal_cell}]) + check(not dig_b.is_empty() and bool(dig_b[0].get("accepted", false)), "四情况 B:封印危险格直接挖开被受理") + check(ms_b.is_revealed(t_b.seal_cell) and ms_b.current_board().is_mine(t_b.seal_cell), "四情况 B:危险格已揭示(挖雷本体照常)") ms_b.settle_batch([{"action": "stop"}]) - var target_b: Array = [t_b.flag_cell.x, t_b.flag_cell.y] + var target_b: Array = [t_b.seal_cell.x, t_b.seal_cell.y] var mine_hit_b := 0 var hit_b := 0 for row in rows_b: @@ -3290,10 +3290,10 @@ func _smoke_flag_irreversible_quadrants() -> void: continue if String(row.get("source_class", "")) == "mine_hit": mine_hit_b += 1 - if row.get("type", "") == "flag_hit" or String(row.get("source_class", "")) == "flag_hit": + if row.get("type", "") == "seal_hit" or String(row.get("source_class", "")) == "seal_hit": hit_b += 1 check(mine_hit_b >= 1, "四情况 B:挖雷惩罚照常兑付(×%d——只受挖雷一层惩罚)" % mine_hit_b) - check(hit_b == 0, "四情况 B:标中不发(×%d——旗已擦除不判)" % hit_b) + check(hit_b == 0, "四情况 B:标中不发(×%d——封印已擦除不判)" % hit_b) # 场景 C:不挖收轮(①③判定照常) var rng_c = load("res://core/rng_service.gd").new() rng_c.set_master_seed(20260919) @@ -3302,26 +3302,26 @@ func _smoke_flag_irreversible_quadrants() -> void: settle_c.step_row.connect(func(row): rows_c.append(row)) check(settle_c.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "四情况 C:开局受理") var ms_c = settle_c.minesweeper - var t_safe := _find_flag_target(ms_c, false) - var t_mine := _find_flag_target(ms_c, true) - check(not t_safe.is_empty() and not t_mine.is_empty(), "四情况 C:安全格+雷格旗目标齐备") + var t_safe := _find_seal_target(ms_c, false) + var t_mine := _find_seal_target(ms_c, true) + check(not t_safe.is_empty() and not t_mine.is_empty(), "四情况 C:安全格+危险格封印目标齐备") if not t_safe.is_empty() and not t_mine.is_empty(): for t in [t_safe, t_mine]: if t.hero_cell != ms_c.hero_pos(): ms_c.settle_batch([{"action": "move", "cell": t.hero_cell}]) - ms_c.settle_batch([{"action": "flag_place", "cell": t.flag_cell}]) - ms_c.settle_batch([{"action": "stop"}]) # 不挖收轮——两旗均在场基线 - var safe_c: Array = [t_safe.flag_cell.x, t_safe.flag_cell.y] - var mine_c: Array = [t_mine.flag_cell.x, t_mine.flag_cell.y] + ms_c.settle_batch([{"action": "seal_place", "cell": t.seal_cell}]) + ms_c.settle_batch([{"action": "stop"}]) # 不挖收轮——两封印均在场基线 + var safe_c: Array = [t_safe.seal_cell.x, t_safe.seal_cell.y] + var mine_c: Array = [t_mine.seal_cell.x, t_mine.seal_cell.y] var miss_c := 0 var miss_neg_c := 0 var hit_c := 0 for row in rows_c: - if row.get("origin_cell", [0, 0]) == safe_c and row.get("type", "") == "flag_miss": + if row.get("origin_cell", [0, 0]) == safe_c and row.get("type", "") == "seal_miss": miss_c += 1 - if row.get("origin_cell", [0, 0]) == safe_c and String(row.get("source_class", "")) == "flag_miss" and row.get("type", "") != "flag_miss": + if row.get("origin_cell", [0, 0]) == safe_c and String(row.get("source_class", "")) == "seal_miss" and row.get("type", "") != "seal_miss": miss_neg_c += 1 - if row.get("origin_cell", [0, 0]) == mine_c and (row.get("type", "") == "flag_hit" or String(row.get("source_class", "")) == "flag_hit"): + if row.get("origin_cell", [0, 0]) == mine_c and (row.get("type", "") == "seal_hit" or String(row.get("source_class", "")) == "seal_hit"): hit_c += 1 check(miss_c >= 1 and miss_neg_c >= 1, "四情况 C:标空惩罚照常(归因×%d 负向兑付×%d)" % [miss_c, miss_neg_c]) check(hit_c >= 1, "四情况 C:标中奖励照常(×%d)" % hit_c) @@ -3474,7 +3474,7 @@ func _smoke_attack_chain_fresh_pool() -> void: ticks.append({"baseline": int(row.baseline), "attach": int(row.get("attach", 0)), "roll": int(row.roll), "tier": int(row.tier), "crit": bool(row.get("crit", false)), "tick": int(row.value)})) check(settlement.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "fresh 池回归战斗启动(Boss 行)") - # 停手轮:零挖掘零旗 → 零授予 → 池恒空;Boss 拍 = 开轮摇号结果(伤害技/普攻兑付伤害行、硬化施放行不计) + # 停手轮:零挖掘零封印 → 零授予 → 池恒空;Boss 拍 = 开轮摇号结果(伤害技/普攻兑付伤害行、硬化施放行不计) for i in range(6): if settlement.battle_result != "": break @@ -3500,7 +3500,7 @@ func _encounter_replay(seed_val: int) -> Array: # ==================== 清图奖励双份兑付链 / 轮内刷新 provenance 守卫 / 窗口锚行(2026-09-15 补覆盖批) ==================== -# 清图 = 全安全格开完。清图测试用"真雷旗(零误标→完美排雷)+ AutoPlayer 逐轮清图"真实流驱动; +# 清图 = 全安全格开完。清图测试用"真雷封印(零误标→完美排雷)+ AutoPlayer 逐轮清图"真实流驱动; # DifficultyTable 注入 hp_mult=10 把 Boss 血量抬到 1500,保证清图批次发生在战斗结束之前(测试台账,跑完即还原)。 const CLEAR_SMOKE_DEPTH := 4 @@ -3510,7 +3510,7 @@ var _regular_clear_reward_rows := 0 # 常规(非刷新图)清图的 clear_ func _smoke_clear_reward_chain() -> void: print("--- 清图奖励·双份兑付链(完美排雷 / 零兑付 / 第二份被拒 / 高光记实)---") - # ① 真实流完美排雷:标中一面真雷旗 + 零误标 + 清全图 → grant_clear 身份(clear_blast)双份真实兑付 + # ① 真实流完美排雷:标中一面真雷封印 + 零误标 + 清全图 → grant_clear 身份(clear_blast)双份真实兑付 var rows: Array = [] var run := _run_full_clear(20260915, false, rows) check(bool(run.cleared), "① 完美排雷清图达成(%d 轮)" % int(run.rounds)) @@ -3562,7 +3562,7 @@ func _smoke_clear_reward_zero_paths() -> void: "高光守卫构造战斗启动") for u in s_b._enemy_system.all_enemies(): s_b._enemy_system.apply_damage(u, int(u.hp)) - s_b._perfect_hit_true = 1 # 测试通道:构造完美谓词成立(真值在正常流由旗判定累加) + s_b._perfect_hit_true = 1 # 测试通道:构造完美谓词成立(真值在正常流由封印判定累加) s_b._perfect_hit_false = 0 rows_b.clear() s_b._grant_clear_reward(1) @@ -3610,26 +3610,26 @@ func _smoke_refresh_provenance_guard() -> void: # ==================== 格面资源批新增覆盖(极性路由 / 负向字典 / 资源面 / 五段全序) ==================== -# 极性路由断言(战斗结算 验收):挖安全格/标中旗只出正向、挖雷格/标错旗只出负向、兑付行指回来源格。 +# 极性路由断言(战斗结算 验收):挖安全格/封印命中只出正向、挖危险格/标错封印只出负向、兑付行指回来源格。 # 正向字典效果集 = {attack_up, ac_up, weaken}(ac_up = 2026-09-16 护甲等级掷点批换装,原 defense_up) -# + spark_aoe/heal_minor(flat)+ gp_gain(九型批 2026-09-20——金币袋,escrow 缓冲路由键非增益容器行); +# + spark_aoe/heal_minor(flat)+ gp_gain(九型批 2026-09-20——GP 袋,escrow 缓冲路由键非增益容器行); # 负向字典效果集 = {enrage, off_guard, sapped}(percent)+ 直伤(heal flat)/ alert 警觉(blast percent——2026-09-20 换装) # + gp_loss(九型批——破财,escrow 缓冲路由键)。 const POSITIVE_EFFECTS := ["attack_up", "ac_up", "weaken", "gp_gain"] const NEGATIVE_EFFECTS := ["enrage", "off_guard", "sapped", "alert", "gp_loss"] -# 构造验收谓词(hunt 用——并流批后种子按行为面扫描:四触达 + 标空旗负向兑付行在案) +# 构造验收谓词(hunt 用——并流批后种子按行为面扫描:四触达 + 标空封印负向兑付行在案) func _polarity_probe_accepts(probe: Dictionary) -> bool: - if not (bool(probe["flag_hit_done"]) and bool(probe["flag_miss_done"])): + if not (bool(probe["seal_hit_done"]) and bool(probe["seal_miss_done"])): return false if int(probe["mine_events"]) < 1 or int(probe["safe_events"]) < 1: return false - var miss_rows := _rows_at(probe["rows"], "flag_miss", probe["miss_cell"]) + var miss_rows := _rows_at(probe["rows"], "seal_miss", probe["miss_cell"]) if miss_rows.is_empty(): return false for r in miss_rows: - if String(r.get("type", "")) == "flag_miss": + if String(r.get("type", "")) == "seal_miss": continue var eff := String(r.get("effect_id", "")) if eff != "" and not NEGATIVE_EFFECTS.has(eff): @@ -3638,7 +3638,7 @@ func _polarity_probe_accepts(probe: Dictionary) -> bool: func _smoke_polarity_routing() -> void: - print("--- 极性路由(挖安全格正向 / 挖雷格负向 / 标中正向 / 标空负向)---") + print("--- 极性路由(挖安全格正向 / 挖危险格负向 / 标中正向 / 标空负向)---") # 并流批(2026-09-27 统一流裁决)后战斗随机值面漂移——构造种子改行为面扫描(谓词见 _polarity_probe_accepts) var probe := {} var polarity_seed := -1 @@ -3648,8 +3648,8 @@ func _smoke_polarity_routing() -> void: polarity_seed = s break check(polarity_seed > 0, "极性路由构造种子可达(seed=%d——并流后行为面重锚)" % polarity_seed) - check(bool(probe["flag_hit_done"]) and bool(probe["flag_miss_done"]), "构造触达:标中真雷 + 标空安全格均入队") - check(int(probe["mine_events"]) >= 1, "构造触达:挖到雷格 ≥1(%d)" % int(probe["mine_events"])) + check(bool(probe["seal_hit_done"]) and bool(probe["seal_miss_done"]), "构造触达:标中真雷 + 标空安全格均入队") + check(int(probe["mine_events"]) >= 1, "构造触达:挖到危险格 ≥1(%d)" % int(probe["mine_events"])) check(int(probe["safe_events"]) >= 1, "构造触达:挖到安全格 ≥1(%d)" % int(probe["safe_events"])) # 挖到的安全格:只出正向——其全部来源行必存在且 effect 行 ∈ 正向集 # (action 型排队行 effect_id=ap_delta 正负两极共用路由键——按行值符号辨极性:正向格恒 +power) @@ -3668,8 +3668,8 @@ func _smoke_polarity_routing() -> void: if eff != "" and not POSITIVE_EFFECTS.has(eff): safe_all_pos = false check(safe_all_pos, "挖安全格 → 只出正向兑付(效果行 ∈ 正向字典 + 每格 ≥1 行——%d 格)" % probe["safe_cells"].size()) - # 挖到的雷格:只出负向——来源行必存在且 effect 行 ∈ 负向集(alert = blast 负向;heal 负向 = damage 行; - # action 型排队行同按行值符号辨极性:雷格恒 −power) + # 挖到的危险格:只出负向——来源行必存在且 effect 行 ∈ 负向集(alert = blast 负向;heal 负向 = damage 行; + # action 型排队行同按行值符号辨极性:危险格恒 −power) var mine_all_neg := true for e in probe["mine_cells"].keys(): var cell_arr: Array = [e.x, e.y] @@ -3684,26 +3684,26 @@ func _smoke_polarity_routing() -> void: continue if eff != "" and not NEGATIVE_EFFECTS.has(eff): mine_all_neg = false - check(mine_all_neg, "挖雷格 → 只出负向兑付(效果行 ∈ 负向字典 + 每格 ≥1 行——%d 格)" % probe["mine_cells"].size()) - # 标中旗:该雷格正向兑付行(flag_hit 来源)+ 效果 ∈ 正向字典 + check(mine_all_neg, "挖危险格 → 只出负向兑付(效果行 ∈ 负向字典 + 每格 ≥1 行——%d 格)" % probe["mine_cells"].size()) + # 封印命中:该危险格正向兑付行(seal_hit 来源)+ 效果 ∈ 正向字典 var hit_ok := false for r in probe["rows"]: - if String(r.get("source_class", "")) == "flag_hit" and r.get("origin_cell", [0, 0]) == probe["hit_cell"]: + if String(r.get("source_class", "")) == "seal_hit" and r.get("origin_cell", [0, 0]) == probe["hit_cell"]: hit_ok = true var eff := String(r.get("effect_id", "")) if eff != "" and not POSITIVE_EFFECTS.has(eff): hit_ok = false - check(hit_ok, "标中旗 → 该雷格资源的正向兑付行(origin 指回雷格,效果 ∈ 正向字典)") - # 条款3 条件二旗溢价断言(迭代14② T4——标中兑付行数值 = 同型正向 ×(1+δ)): - # δ 读 settlement.flag_hit_premium(125 provisional);九型正向行值全固定(唯一区间行 clear_blast + check(hit_ok, "封印命中 → 该危险格资源的正向兑付行(origin 指回危险格,效果 ∈ 正向字典)") + # 条款3 条件二封印溢价断言(迭代14② T4——标中兑付行数值 = 同型正向 ×(1+δ)): + # δ 读 settlement.seal_hit_premium(125 provisional);九型正向行值全固定(唯一区间行 clear_blast # 系清图槽不入格池)⇒ 逐型期望全确定。整数量级四舍五入域注记:ac_up/action 1 点量纲取整后不变 # =整数粒度地板——等号压线判读在当量聚合面(audit 工具/registry clause3_inequality),非断言面。 - var prem_pct: int = int(_db.settlement.flag_hit_premium) - check(prem_pct == 125, "旗溢价配置在位(flag_hit_premium=125 provisional——形态 a 兑付溢价)") + var prem_pct: int = int(_db.settlement.seal_hit_premium) + check(prem_pct == 125, "封印溢价配置在位(seal_hit_premium=125 provisional——形态 a 兑付溢价)") var prem_rows := 0 var prem_ok := true for r in probe["rows"]: - if String(r.get("source_class", "")) != "flag_hit" or String(r.get("highlight", "")) != "flag_hit": + if String(r.get("source_class", "")) != "seal_hit" or String(r.get("highlight", "")) != "seal_hit": continue prem_rows += 1 var rtype := String(r.get("type", "")) @@ -3711,7 +3711,7 @@ func _smoke_polarity_routing() -> void: var eff := String(r.get("effect_id", "")) if rtype == "effect": if eff == "gp_gain": - prem_ok = prem_ok and v == int(round(3 * prem_pct / 100.0)) # 金币袋 3→4 + prem_ok = prem_ok and v == int(round(3 * prem_pct / 100.0)) # GP 袋 3→4 elif eff == "ap_delta": prem_ok = prem_ok and v == 1 # +1AP:1 点量纲(round(1.25)=1——整数粒度地板) else: @@ -3730,38 +3730,38 @@ func _smoke_polarity_routing() -> void: check(prem_rows >= 1 and prem_ok, "标中兑付溢价(×%d 行逐型=同型正向 ×%d/100——等号压线注记:δ=1.25 时条件二 E[标中]=1.25·E_dig 恰等成立)" % [prem_rows, prem_pct]) # 标空不乘溢价:负向直伤行(反噬6/陷阱8/魔法反噬8 固定表值)零溢价污染——溢价值挂标中正向单点 var miss_flat_ok := true - for r in _rows_at(probe["rows"], "flag_miss", probe["miss_cell"]): + for r in _rows_at(probe["rows"], "seal_miss", probe["miss_cell"]): if String(r.get("type", "")) == "damage": miss_flat_ok = miss_flat_ok and int(r.get("value", 0)) in [6, 8] check(miss_flat_ok, "标空惩罚零溢价(负向直伤行=固定表值原值——溢价只挂标中正向)") - # 标空旗:归因行 + 该安全格负向兑付行(flag_miss 来源) - var miss_rows := _rows_at(probe["rows"], "flag_miss", probe["miss_cell"]) + # 标空封印:归因行 + 该安全格负向兑付行(seal_miss 来源) + var miss_rows := _rows_at(probe["rows"], "seal_miss", probe["miss_cell"]) var miss_neg_ok := false for r in miss_rows: - if String(r.get("type", "")) == "flag_miss": + if String(r.get("type", "")) == "seal_miss": miss_neg_ok = true else: var eff := String(r.get("effect_id", "")) if eff != "" and not NEGATIVE_EFFECTS.has(eff): miss_neg_ok = false - check(not miss_rows.is_empty() and miss_neg_ok, "标空旗 → 标旗未中归因行 + 该安全格资源负向兑付(同格同批)") - # 抵消过滤既有语义:标旗后被撤旗不判(发射面基线过滤)——由排雷玩法 冒烟与旗判定基线覆盖,此处核兑付行零泄漏 - var flag_srcs := {} + check(not miss_rows.is_empty() and miss_neg_ok, "标空封印 → 封印未中归因行 + 该安全格资源负向兑付(同格同批)") + # 抵消过滤既有语义:封印后被撤封印不判(发射面基线过滤)——由排雷玩法 冒烟与封印判定基线覆盖,此处核兑付行零泄漏 + var seal_srcs := {} for r in probe["rows"]: - if String(r.get("source_class", "")) in ["flag_hit", "flag_miss"]: - flag_srcs[r.get("origin_cell")] = true - check(int(flag_srcs.size()) <= 2, "旗判定兑付仅旗判定批两旗在案(撤旗抵消过滤零泄漏——%d 格)" % flag_srcs.size()) + if String(r.get("source_class", "")) in ["seal_hit", "seal_miss"]: + seal_srcs[r.get("origin_cell")] = true + check(int(seal_srcs.size()) <= 2, "封印判定兑付仅封印判定批两封印在案(撤封印抵消过滤零泄漏——%d 格)" % seal_srcs.size()) -# 极性路由探针驱动:标 1 面真雷旗(标中)+ 1 面安全格旗(标空)→ AutoPlayer 挖到战斗终局(多轮样本)。 -# 收集全部 cell_revealed / flag_judged 事件与结算行;返回格子集合与旗格坐标。 +# 极性路由探针驱动:标 1 面真雷封印(标中)+ 1 面安全格封印(标空)→ AutoPlayer 挖到战斗终局(多轮样本)。 +# 收集全部 cell_revealed / seal_judged 事件与结算行;返回格子集合与封印格坐标。 func _run_polarity_probe(seed_val: int) -> Dictionary: _db.difficulty.rows.append({"level_index": 1, "node_depth": 0, "hp_mult": 10.0, "atk_mult": 0.5}) # 抬敌血压低敌攻——多轮挖掘样本不被终局截断 var rng = load("res://core/rng_service.gd").new() rng.set_master_seed(seed_val) var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng) var probe := {"rows": [], "safe_cells": {}, "mine_cells": {}, "hit_cell": [], "miss_cell": [], - "mine_events": 0, "safe_events": 0, "flag_hit_done": false, "flag_miss_done": false} + "mine_events": 0, "safe_events": 0, "seal_hit_done": false, "seal_miss_done": false} settlement.step_row.connect(func(row): probe["rows"].append(row)) settlement.minesweeper.cell_revealed.connect(func(evt): if String(evt.get("channel", "")) == "initial": @@ -3774,22 +3774,22 @@ func _run_polarity_probe(seed_val: int) -> Dictionary: probe["safe_events"] = int(probe["safe_events"]) + 1) settlement.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": 300, "hero_max_hp": 300}) var ms = settlement.minesweeper - # 旗 1:真雷(标中 → 正向);旗 2:安全格(标空 → 负向) - var mine_t := _find_flag_target(ms, true) - var safe_t := _find_flag_target(ms, false) + # 封印 1:真雷(标中 → 正向);封印 2:安全格(标空 → 负向) + var mine_t := _find_seal_target(ms, true) + var safe_t := _find_seal_target(ms, false) if not mine_t.is_empty(): if mine_t.hero_cell != ms.hero_pos(): ms.settle_batch([{"action": "move", "cell": mine_t.hero_cell}]) - ms.settle_batch([{"action": "flag_place", "cell": mine_t.flag_cell}]) - probe["hit_cell"] = [mine_t.flag_cell.x, mine_t.flag_cell.y] - probe["flag_hit_done"] = true + ms.settle_batch([{"action": "seal_place", "cell": mine_t.seal_cell}]) + probe["hit_cell"] = [mine_t.seal_cell.x, mine_t.seal_cell.y] + probe["seal_hit_done"] = true if not safe_t.is_empty(): if safe_t.hero_cell != ms.hero_pos(): ms.settle_batch([{"action": "move", "cell": safe_t.hero_cell}]) - ms.settle_batch([{"action": "flag_place", "cell": safe_t.flag_cell}]) - probe["miss_cell"] = [safe_t.flag_cell.x, safe_t.flag_cell.y] - probe["flag_miss_done"] = true - # 挖到终局(旗挡链不影响 AutoPlayer——choose_dig 跳过旗格) + ms.settle_batch([{"action": "seal_place", "cell": safe_t.seal_cell}]) + probe["miss_cell"] = [safe_t.seal_cell.x, safe_t.seal_cell.y] + probe["seal_miss_done"] = true + # 挖到终局(封印挡链不影响 AutoPlayer——choose_dig 跳过封印格) var out := {"result": "", "rounds": 0, "terminated": false, "stream": []} var guard := 40 while settlement.battle_result == "" and guard > 0: @@ -3824,7 +3824,7 @@ func _smoke_negative_dictionary() -> void: # 改多板扫描,取第一块五型齐备的板做行为断言。 var settlement = null var board = null - var by_type := {} # cell_type → 首个非封锁格(query_identity 雷安同池——雷格可查) + var by_type := {} # cell_type → 首个非封锁格(query_identity 雷安同池——危险格可查) var rows: Array = [] for seed_i in range(6): # 每板独立 rng 实例(迭代 7 T1 修正——复用实例重播种触发 set_master_seed 的 _counter==0 守卫; @@ -3898,10 +3898,10 @@ func _smoke_negative_dictionary() -> void: check(settlement.action_economy.pending_ap_delta() == d0, "action 型正负抵消 → 排队净值归零") -# 资源面断言:chain/dig 事件恒携带 resource=true(雷格同权);initial 恒 false(封锁格); -# 封锁格查询 = null、雷格未开恒可查。 +# 资源面断言:chain/dig 事件恒携带 resource=true(危险格同权);initial 恒 false(封锁格); +# 封锁格查询 = null、危险格未开恒可查。 func _smoke_resource_surface() -> void: - print("--- 格面资源资格面(雷格携带 / 封锁格无资源)---") + print("--- 格面资源资格面(危险格携带 / 封锁格无资源)---") var run1 = _run_battle(1, 0) var run2 = _run_battle(2, 0) var all_events: Array = run1.events + run2.events @@ -3923,8 +3923,8 @@ func _smoke_resource_surface() -> void: mine_with_resource += 1 check(digchain_bad == 0, "chain/dig 揭示事件 resource 恒 true(雷安同池——违例 %d)" % digchain_bad) check(initial_bad == 0 and initial_count >= 1, "initial 揭示事件(封锁格)resource 恒 false(×%d 事件)" % initial_count) - check(mine_with_resource >= 1, "雷格揭示携带资源(mine ×resource=true %d——雷格不再恒无)" % mine_with_resource) - # 封锁格无身份 / 雷格未开恒可查(未开格恒可查——秘宝 桥接结构前提) + check(mine_with_resource >= 1, "危险格揭示携带资源(mine ×resource=true %d——危险格不再恒无)" % mine_with_resource) + # 封锁格无身份 / 危险格未开恒可查(未开格恒可查——秘宝 桥接结构前提) var rng3 = load("res://core/rng_service.gd").new() rng3.set_master_seed(20260920) var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng3) @@ -3941,7 +3941,7 @@ func _smoke_resource_surface() -> void: break check(settlement.query_reward_identity(r0_first) == null, "封锁格(R₀)身份查询 = null(不入摇号清单)") check(mine_unrevealed != null and settlement.query_reward_identity(mine_unrevealed) != null, - "未开雷格身份恒可查({reward_id, cell_type, tier}——秘宝 桥接前提)") + "未开危险格身份恒可查({reward_id, cell_type, tier}——秘宝 桥接前提)") # 五段全序断言(战斗结算 验收"五段全序"+ 行型封闭 10 类):逐轮行相位序 = 授予 → 增益/减益 → 战斗 → 衰减 → 判定。 @@ -4029,7 +4029,7 @@ func _row_phase(row: Dictionary, ri: int) -> int: "reward_ineffective": return 2 if String(row.get("forfeit", "")) == "hero_down" else 0 # 战斗段末地图账不兑留痕 vs 授予段未生效 match String(row.get("source_class", "")): - "safe_cell", "mine_hit", "flag_hit", "flag_miss", "clear_reward": + "safe_cell", "mine_hit", "seal_hit", "seal_miss", "clear_reward": if int(row.get("round_index", ri)) < ri: return 1 # 前轮授予实例的续存组合行(增益/减益段) return 0 @@ -4037,7 +4037,7 @@ func _row_phase(row: Dictionary, ri: int) -> int: return 0 -# 清图驱动(真实流):标一面真雷旗(完美前置)→ 逐轮 AutoPlayer 挖到轮末;board_seq 递增 = 清图换图。 +# 清图驱动(真实流):标一面真雷封印(完美前置)→ 逐轮 AutoPlayer 挖到轮末;board_seq 递增 = 清图换图。 # from_refresh=true 时先三轮停手攒 RAP、第 4 轮轮内刷新换图,再清刷新图。 func _run_full_clear(seed_val: int, from_refresh: bool, rows: Array) -> Dictionary: _db.difficulty.rows.append({"level_index": 1, "node_depth": CLEAR_SMOKE_DEPTH, "hp_mult": 10.0, "atk_mult": 1.0}) @@ -4062,18 +4062,18 @@ func _run_full_clear(seed_val: int, from_refresh: bool, rows: Array) -> Dictiona func _drive_clear(settlement) -> Dictionary: - var flag_done := false + var seal_done := false var rounds := 0 while rounds < 60: rounds += 1 var ms = settlement.minesweeper - if not flag_done: - var t := _find_flag_target(ms, true) + if not seal_done: + var t := _find_seal_target(ms, true) if not t.is_empty(): if t.hero_cell != ms.hero_pos(): ms.settle_batch([{"action": "move", "cell": t.hero_cell}]) - ms.settle_batch([{"action": "flag_place", "cell": t.flag_cell}]) - flag_done = true # 一面真雷旗 = 完美排雷前半(零误标),后半靠 AutoPlayer 清图 + ms.settle_batch([{"action": "seal_place", "cell": t.seal_cell}]) + seal_done = true # 一面真雷封印 = 完美排雷前半(零误标),后半靠 AutoPlayer 清图 var seq_before: int = int(settlement.diagnostic_snapshot().board_seq) var out := {"result": "", "rounds": 0, "terminated": false, "stream": []} _auto_play_round(settlement, out) @@ -4484,7 +4484,7 @@ func _has_err_category(errs: Array, category: String) -> bool: # ⑦ 新效应词汇批实装探针(2026-09-19——妨害技蛛网束缚 + 毒爆必中附加分量,实装面 = L2 Boss 卓尔): -# 停手轮驱动 (2,9)——零挖掘零旗 → 零池,伤害行可逐拍精确复算;种子 hunt 至少各命一粒毒爆伤害行 +# 停手轮驱动 (2,9)——零挖掘零封印 → 零池,伤害行可逐拍精确复算;种子 hunt 至少各命一粒毒爆伤害行 # 与蛛网束缚施放行;毒分量随开战掷定的攻击基线缩放(atk 区间 2–4 → rider 1–3)。 # (2026-09-21 商店房批连带:Boss 重编号 8→9——(2,8) 现为商店房无战斗行,驱动点随行迁移。) func _smoke_debuff_rider() -> void: @@ -4620,7 +4620,7 @@ func _smoke_level_graph() -> void: # 逐种子全关卡通关扫描找命中,期望路径过期时 258 次模拟撞 180s 闸(台账 257 + 2026-10-02 # 出度≤2 重建两次实证)。存储种子常态一次跑完;图表/数值有意变更致本断言红=快速失败(一次 # 即红非扫描超时),重采=临时脚本跑同款 run_level 循环取首命中种子回填(离线一次性)。 - const MAX_PATH_SEED := 43 # 2026-10-05 判式换代批重采(旗溢价 δ=1.25 落地致种子 42 战局位移=败于终点;同款循环首命中——断言注释既定程序,临时脚本用后即删) + const MAX_PATH_SEED := 43 # 2026-10-05 判式换代批重采(封印溢价 δ=1.25 落地致种子 42 战局位移=败于终点;同款循环首命中——断言注释既定程序,临时脚本用后即删) var win_max: Dictionary = autoplay.run_level(_db, MAX_PATH_SEED, 2, 200, 100, false, null, "normal", "max", 0) check(win_max.result == "victory" and win_max.visited_ids == [0, 2, 6, 7, 8, 9], "L2·满配 max 路径(max 取最大编号候选)通关 = 0→2(奖励)→6→7→8(商店零购离开)→9(存储种子 %d——T17 出度≤2 拍板模板 0 重建)" % MAX_PATH_SEED) @@ -4886,11 +4886,11 @@ func _escrow_sum_of(rows: Array) -> int: return sum -# ---- ② escrow 隔离(金币安全格兑付 / 破财直验 / 钱包 clamp)---- +# ---- ② escrow 隔离(GP安全格兑付 / 破财直验 / 钱包 clamp)---- func _smoke_gp_escrow() -> void: - print("--- GP escrow 隔离(金币安全格兑付入缓冲 · 破财不透支)---") - # ① 种子扫描:找金币袋(gp 型安全格)可挖掘局——挖开兑付 +3 入 escrow,战斗末随 gp_dropped 一次上抛 + print("--- GP escrow 隔离(GP安全格兑付入缓冲 · 破财不透支)---") + # ① 种子扫描:找GP 袋(gp 型安全格)可挖掘局——挖开兑付 +3 入 escrow,战斗末随 gp_dropped 一次上抛 var scan := {} for s in range(1, 121): var rng = _fresh_rng(s) @@ -4906,7 +4906,7 @@ func _smoke_gp_escrow() -> void: continue scan = {"seed": s, "settlement": settlement, "target": target, "rows": rows, "fin": fin} break - check(not scan.is_empty(), "金币袋(gp 型安全格)可挖掘局种子可达(seed=%s)" % str(scan.get("seed", -1))) + check(not scan.is_empty(), "GP 袋(gp 型安全格)可挖掘局种子可达(seed=%s)" % str(scan.get("seed", -1))) if not scan.is_empty(): var settlement2 = scan["settlement"] var ms = settlement2.minesweeper @@ -4919,12 +4919,12 @@ func _smoke_gp_escrow() -> void: while settlement2.battle_result == "" and guard_stop > 0: guard_stop -= 1 ms.settle_batch([{"action": "stop"}]) # 收轮结算:授予段兑付 +3 → 战斗段先手 999 清场 → 胜利上抛 - check(settlement2.battle_result == "victory", "金币局战斗终局(先手 999 收束)") + check(settlement2.battle_result == "victory", "GP局战斗终局(先手 999 收束)") var gain_ok := false for row in scan["rows"]: if String(row.get("effect_id", "")) == "gp_gain" and row.get("origin_cell", []) == dig_arr and int(row.get("value", 0)) == 3: gain_ok = true - check(gain_ok, "金币袋兑付行在案(金币袋 +3 → 战斗内缓冲,origin 指回来源格)") + check(gain_ok, "GP 袋兑付行在案(GP 袋 +3 → 战斗内缓冲,origin 指回来源格)") check(int(settlement2.escrow) >= 3, "escrow 累计缓冲 ≥3(实测 %d——战斗域中间态,不入钱包不入增益容器)" % int(settlement2.escrow)) var gp_d: int = int(scan["fin"].get("p", {}).get("gp_dropped", -999)) check(gp_d - int(settlement2.escrow) >= 2 and gp_d - int(settlement2.escrow) <= 4, @@ -4972,7 +4972,7 @@ func _smoke_gp_escrow() -> void: check(runner.gp == 0 and int(ev_box["min_gp"]) >= 0, "钱包全程不透支(gp=%d,事件投影最小读数 %d ≥ 0)" % [runner.gp, int(ev_box["min_gp"])]) -# 板真相直读找金币袋挖掘目标:未开安全格 + gp 型资源身份 + 存在可达已开邻格(_find_flag_target 同款口径) +# 板真相直读找GP 袋挖掘目标:未开安全格 + gp 型资源身份 + 存在可达已开邻格(_find_seal_target 同款口径) func _find_gp_dig(minesweeper, settlement) -> Dictionary: var board = minesweeper.current_board() var revealed := {} @@ -5363,13 +5363,13 @@ func _smoke_nine_types_gp_stream() -> void: if String(row.get("reward_id", "")) == "gp_lose": gp_neg = int(row.weight) check(cell_rows == 18, "奖励字典 18 行(九型×正负 18 格——aux 挖格投放四行已退役 2026-10-01 用户拍板甲:战斗/挖格不掉道具,秘宝唯一来路=三选一共享池〔节点/通关〕;清图槽独立批尾不计)") - # 雷格负向直伤当量(迭代 8 卡⑧——真人反馈「三雷 3/4 血无后果感」投值:三行各抬 +3 档,负向≈正向 2 倍定价) + # 危险格负向直伤当量(迭代 8 卡⑧——真人反馈「三雷 3/4 血无后果感」投值:三行各抬 +3 档,负向≈正向 2 倍定价) var mine_power := {"heal_backlash": 6, "pierce_snare": 8, "magic_recoil": 8} # 数值修复批 2026-10-01 再抬档(旧 4/5/5,见 numfix 报告) for row in _db.reward.rows: var rid := String(row.get("reward_id", "")) if mine_power.has(rid): check(int(row.get("power", -1)) == int(mine_power[rid]), - "雷格负向直伤 %s power=%d(卡⑧投值)" % [rid, int(mine_power[rid])]) + "危险格负向直伤 %s power=%d(卡⑧投值)" % [rid, int(mine_power[rid])]) # 正向权重结构校验(配置推导,2026-09-23 重构):正向 cell 行权重 ≥1(必在池)、负向行权重恒 0(不入池)、 # 合计即配置自身的和(改表自动跟随,不再硬编码合计值)。 var pos_all_in_pool := true @@ -5383,7 +5383,7 @@ func _smoke_nine_types_gp_stream() -> void: neg_all_zero = false check(pos_all_in_pool and neg_all_zero, "正向 cell 行权重 ≥1 全在池 / 负向行权重恒 0 不入池(正向合计 %d——配置推导)" % pos_weight) - check(gp_pos == 2 and gp_neg == 0, "gp 型两行(金币袋 gp_gain 正向 weight 2 / 破财 gp_loss 负向 weight 0 不入池)") + check(gp_pos == 2 and gp_neg == 0, "gp 型两行(GP 袋 gp_gain 正向 weight 2 / 破财 gp_loss 负向 weight 0 不入池)") var rng = _fresh_rng(42) check(rng.counter() == 0, "derive_at 纯函数不推计数器(统一流全局计数器恒 0——并流后纯函数语义不变,gp_drop 专用向量随分盐作废、统一向量中央断言)") @@ -6055,7 +6055,7 @@ func _smoke_tree() -> void: # ---- 天赋树六键行为冒烟(迭代 21 T3——V10:开局姿态窗/危险直觉限次/财富之道聚散/守侧失误补偿; -# 引擎直构 + 编排授予段直注(_grant_seg._judge_flag=结算授予段旗判定单口——迭代27 T2 随段迁址))---- +# 引擎直构 + 编排授予段直注(_grant_seg._judge_seal=结算授予段封印判定单口——迭代27 T2 随段迁址))---- func _smoke_tree_rules() -> void: print("--- 天赋树六键行为(V10:窗/限次/聚散/守侧)---") # 开局姿态组:每关首轮窗(battle_index 事实——引擎直构) @@ -6088,7 +6088,7 @@ func _smoke_tree_rules() -> void: fz2.counters_seed(exported) check((fz2.dispatch("mine_hit", {}, Callable()) as Array).is_empty(), "锋:限次跨战持久(adventure 域 counters_export/seed——断点保留同源,不新增存档域不升 v7)") - # 守侧五场景(契约 12):编排 rig——begin_battle 携 sense_guard,授予段 _grant_seg._judge_flag 直注 + # 守侧五场景(契约 12):编排 rig——begin_battle 携 sense_guard,授予段 _grant_seg._judge_seal 直注 var orch = load("res://core/battle_orchestrator.gd").new(_db, _fresh_rng(777001)) check(orch.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": 40, "hero_atk": 8, "hero_max_hp": 40, "hero_armor_class": 10, "hero_ap_bonus": 0, "attunement": [], "attune_charges": {}, @@ -6102,20 +6102,20 @@ func _smoke_tree_rules() -> void: if not board.is_mine(c): safe = c break - check(safe.x >= 0, "守侧 rig:安全格定位(非雷格=标错负样本)") + check(safe.x >= 0, "守侧 rig:安全格定位(非危险格=标错负样本)") check(int(orch.action_economy.pending_ap_delta()) == 0, "守侧 rig:首轮后 queue 干净(开局 posture queue 已兑现)") - # 场景①:当回合新插旗、结算判标错且旗仍在场 → queue +1(本轮 AP 零变化=queue 承载、下轮 notify_round_start 兑现) - orch._grant_seg._judge_flag({"cell": safe, "hit": false}, 1) + # 场景①:当回合新封印、结算判标错且封印仍在场 → queue +1(本轮 AP 零变化=queue 承载、下轮 notify_round_start 兑现) + orch._grant_seg._judge_seal({"cell": safe, "hit": false}, 1) check(int(orch.action_economy.pending_ap_delta()) == 1, - "守①:当回合标错且旗在场 → 下轮 AP+1(queue 排队——本轮 AP 逐位零变化)") - # 场景③④:之前回合标错重判(旗在场状态)与同格重复——去重闸挡回,最多返还一次 - orch._grant_seg._judge_flag({"cell": safe, "hit": false}, 2) - orch._grant_seg._judge_flag({"cell": safe, "hit": false}, 3) + "守①:当回合标错且封印在场 → 下轮 AP+1(queue 排队——本轮 AP 逐位零变化)") + # 场景③④:之前回合标错重判(封印在场状态)与同格重复——去重闸挡回,最多返还一次 + orch._grant_seg._judge_seal({"cell": safe, "hit": false}, 2) + orch._grant_seg._judge_seal({"cell": safe, "hit": false}, 3) check(int(orch.action_economy.pending_ap_delta()) == 1, - "守③④:旧旗重判零触发+同格最多一次(_flag_miss_seen 去重闸=「当回合标错动作」判别器)") - # 场景②负样本:标中旗(hit=true 正向兑付路径)零触发 - orch._grant_seg._judge_flag({"cell": safe, "hit": true}, 4) - check(int(orch.action_economy.pending_ap_delta()) == 1, "守②负样本:标中/被挖旗零触发(标错事件只在 miss 分支发射——发射面过滤承载)") + "守③④:旧封印重判零触发+同格最多一次(_seal_miss_seen 去重闸=「当回合标错动作」判别器)") + # 场景②负样本:封印命中(hit=true 正向兑付路径)零触发 + orch._grant_seg._judge_seal({"cell": safe, "hit": true}, 4) + check(int(orch.action_economy.pending_ap_delta()) == 1, "守②负样本:标中/被挖封印零触发(标错事件只在 miss 分支发射——发射面过滤承载)") # 场景⑤:末轮判出→无下一轮=queue 不兑现(编排器每战新建——队列实例随战亡,合法作废态) var orch2 = load("res://core/battle_orchestrator.gd").new(_db, _fresh_rng(777002)) check(orch2.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": 40, "hero_atk": 8, "hero_max_hp": 40, @@ -6193,8 +6193,8 @@ func _smoke_battle_log_view() -> void: check(agg_txt.contains("⚠") and agg_txt.contains("×2"), "未生效行聚合计数 ×2 呈现") # 其余行型逐型喂入:格式化中途夭折 = 解析文本零增长(脚本错误静默吞断言的盲区由此转为可见 FAIL) var rest := { - "effect": {"type": "effect", "display_name": "攻击强化", "value": 1, "pool_value": 2, "effect_id": "attack_up", "source_class": "flag_hit", "round_index": 1}, - "flag_miss": {"type": "flag_miss", "display_name": "标旗未中", "source_class": "flag_miss", "round_index": 1}, + "effect": {"type": "effect", "display_name": "攻击强化", "value": 1, "pool_value": 2, "effect_id": "attack_up", "source_class": "seal_hit", "round_index": 1}, + "seal_miss": {"type": "seal_miss", "display_name": "封印未中", "source_class": "seal_miss", "round_index": 1}, "cast": {"type": "cast", "display_name": "卓尔精灵 施放 毒雾", "source_class": "enemy_action", "round_index": 3}, "decay": {"type": "decay", "value": 1, "round_index": 3}, "verdict": {"type": "verdict", "display_name": "下一轮次", "value": 0, "round_index": 3}, diff --git a/game/smoke/type_glow_shot_probe.gd b/game/smoke/type_glow_shot_probe.gd index 86ff6706..ab4f0701 100644 --- a/game/smoke/type_glow_shot_probe.gd +++ b/game/smoke/type_glow_shot_probe.gd @@ -2,7 +2,7 @@ # 未开格类型微光渲染取证探针(迭代 30 卡① T2 像素侧——V4 禁侵/V5 不压破/V6 五组互辨)。 # 必须**窗口化**运行(headless 无渲染面,抓帧恒空): # Godot_console.exe --path . res://smoke/type_glow_shot_probe.tscn -- <输出目录> -# 流程:起一板(真实 LevelRunner + settle_batch 驱动 18 步 novice——自然揭示数字/旗)→ 注入夹具身份回调 +# 流程:起一板(真实 LevelRunner + settle_batch 驱动 18 步 novice——自然揭示数字/封印)→ 注入夹具身份回调 # (九 cell_type 循环 ⇒ 五组同屏齐现)→ BoardView 真渲染: # 帧 A = 微光关(基线态)→ type_glow_off.png # 帧 B = 微光开(生产默认态)→ type_glow_on.png @@ -57,8 +57,8 @@ func _ready() -> void: if kind == "stop": break var op := kind - if kind == "flag": - op = "flag_place" + if kind == "seal": + op = "seal_place" settlement.minesweeper.settle_batch([{"action": op, "cell": act.get("cell")}]) var view = load("res://presentation/views/board_view.gd").new() view.size = Vector2(900, 900) diff --git a/game/smoke/ui_click_probe.gd b/game/smoke/ui_click_probe.gd index 6bc8983a..11ffef68 100644 --- a/game/smoke/ui_click_probe.gd +++ b/game/smoke/ui_click_probe.gd @@ -2,7 +2,7 @@ # 实现 GDD:design/ux/battle.md(§AC 场景级测试 + §Interaction Map——UI 行为随机化探针 v3)。 # Date: 2026-09-12 # 合成鼠标事件走真实呈现层路径(BoardView.click_cell / 按钮信号 → 组合根动作通道), -# 随机混合玩家行为——插旗/拔旗、提前停手、弃图刷新确认链、图例模态、明细回看模态、 +# 随机混合玩家行为——封印/撤封印、提前停手、弃图刷新确认链、图例模态、明细回看模态、 # tooltip 悬停、无效点击——扫描结算停滞(缺陷②回归载体) # + 模态遮挡断言(缺陷⑤回归:图例/回看/终局 overlay 打开时上方遮挡层隐藏、输入锁定) # + 性能 AC:场景实例化到首格可点 ≤500ms 探针计时。 @@ -19,7 +19,7 @@ var _stall_frames := 0 var _closed_via_abandon := false # T17——预算耗尽经放弃路径收口(断点段返回断言豁免位) var _done := false var _rand := RandomNumberGenerator.new() -var _flags_placed: Array = [] +var _seals_placed: Array = [] var _ap_spent_this_round := 0 var _problems: Array = [] # 新增覆盖的问题收集(退出码合并判定) var _tested_legend := false @@ -260,7 +260,7 @@ func _ready() -> void: await get_tree().process_frame if main.node_overlay.visible: main.node_overlay.press_continue() - _flags_placed.clear() + _seals_placed.clear() continue if main.curio_overlay.visible: # 迭代 10 三选一停点(CurioPickOverlay——奖励节点/通关兑付共用面;T17 硬锁批适配—— @@ -276,7 +276,7 @@ func _ready() -> void: main.curio_overlay.press_confirm() else: main.curio_overlay.press_continue() # 停点已消费的残面——继续关屏 - _flags_placed.clear() + _seals_placed.clear() continue if main.shop_overlay.visible: # 商店房覆盖层(GP+商店房批——L2 商店为 Boss 前必经位):零购离开(真实 leave 信号路径)放行选路。 @@ -284,7 +284,7 @@ func _ready() -> void: # level_screen+shop 双 visible)——必须先于 level_screen 分派,否则下层候选点击 # 空转烧尽预算(实证:lv2 商店停点双 visible 循环 12000 帧 done=false)。 main.shop_overlay.leave_pressed.emit() - _flags_placed.clear() + _seals_placed.clear() continue if main.level_screen.visible: # 节点图选路口(零自动推进停点)——图上命中路径交替选候选(岔路使用行为;布局决策 2 改造) @@ -306,7 +306,7 @@ func _ready() -> void: _problems.append("状态面板关闭后地图屏态失守(恢复语义破)") main.level_screen.press_candidate(_route_clicks % 2) _route_clicks += 1 - _flags_placed.clear() + _seals_placed.clear() continue if main._inter_overlay.visible: # 大奖励屏(冒险级停点——非末关通关恰一次):首见确认推进 L2(真实按钮信号路径);再见 = L2 已通关,收口 @@ -327,7 +327,7 @@ func _ready() -> void: _done = true print("[click_probe] 第二关大奖励屏(L2 通关)——探针收口 · 选路口点击 %d 次" % _route_clicks) break - _flags_placed.clear() + _seals_placed.clear() continue if main._end_overlay.is_open() and main._settlement_stop_pending: # 卡⑥ 战斗胜利总结结算框(真实信号路径——每场普通胜利到达):断言已拍板面后点「下一节点」 @@ -388,7 +388,7 @@ func _ready() -> void: _locktest_tick() if main.run_scope.settlement.battle_result == "" and main.run_scope.settlement.action_economy.phase == "Active": # T1 D1——锁测在飞期(state 1)冻结探针动作面:排空帧 autoplay 的免费 move 会抢在 - # 帧末 deferred 重放之前改变英雄位(flag 拒收 not_adjacent 实证)——「注入→重放」 + # 帧末 deferred 重放之前改变英雄位(seal 拒收 not_adjacent 实证)——「注入→重放」 # 窗口内局面零变化正是 v3.1 被测语义(演播期冻结),动作面恢复待断言收口。 if _locktest_state != 1: _run_modal_probes_once() @@ -551,12 +551,12 @@ func _run_modal_probes_once() -> void: _problems.append("图例打开时上方遮挡层未隐藏(缺陷⑤复发)") if not main._input_locked(): _problems.append("图例打开时棋盘输入未锁定") - var legend_has_flag := false + var legend_has_seal := false for e in main.legend_overlay.ENTRIES: - if String(e[1]) == "旗": - legend_has_flag = true - if not legend_has_flag: - _problems.append("图例缺『旗』格态条目(格态图例基线)") + if String(e[1]) == "封印": + legend_has_seal = true + if not legend_has_seal: + _problems.append("图例缺『封印』格态条目(格态图例基线)") main.legend_overlay.close() if main.legend_overlay.is_open() or main._input_locked(): _problems.append("图例关闭后未恢复输入/可见性") @@ -640,18 +640,18 @@ func _play_one_action() -> void: if not main._row_queue.is_empty(): return # T1 D1——演播期不出手:此时点击只会进锁期缓存被「最后一次」覆盖(原逐帧连点语义无行为覆盖价值,且毁锁期断言注入的独占前提) var minesweeper = settlement.minesweeper - # 行为①:随机插旗(右键——未开相邻格),约 20% 轮次 + # 行为①:随机封印(右键——未开相邻格),约 20% 轮次 if _ap_spent_this_round == 0 and _rand.randf() < 0.2: var target := _random_unknown_adjacent(minesweeper) if target.x >= 0: main.board_view.click_cell(target, MOUSE_BUTTON_RIGHT) - _flags_placed.append(target) + _seals_placed.append(target) _ap_spent_this_round += 1 return - # 行为②:随机拔旗(右键已插旗格),约 10% 轮次 - if _rand.randf() < 0.1 and not _flags_placed.is_empty(): - var fc: Vector2i = _flags_placed.pop_back() - if minesweeper.has_flag(fc) and not minesweeper.is_revealed(fc): + # 行为②:随机撤封印(右键已封印格),约 10% 轮次 + if _rand.randf() < 0.1 and not _seals_placed.is_empty(): + var fc: Vector2i = _seals_placed.pop_back() + if minesweeper.has_seal(fc) and not minesweeper.is_revealed(fc): main.board_view.click_cell(fc, MOUSE_BUTTON_RIGHT) _ap_spent_this_round += 1 return @@ -681,7 +681,7 @@ func _random_unknown_adjacent(minesweeper) -> Vector2i: if dx == 0 and dy == 0: continue var c: Vector2i = hero + Vector2i(dx, dy) - if minesweeper.current_board().in_bounds(c) and not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): + if minesweeper.current_board().in_bounds(c) and not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): cands.append(c) if cands.is_empty(): return Vector2i(-1, -1) @@ -694,12 +694,12 @@ func _click_stop() -> void: # ---- T1 D1:锁期/重放断言(每 run 一次,脚本化场景——演播期豁免的断言化承载) ---- -# 锁期断言(排播队列活跃=锁面):注入旗击 → 直落被冻结不受理(旗未置)+ `_locked_click` +# 锁期断言(排播队列活跃=锁面):注入封印击 → 直落被冻结不受理(封印未置)+ `_locked_click` # 缓存命中且为本注入(「最后一次」语义——注入帧内无并发点击)。 # 重放断言(演播完边沿 pump_ended→_replay_locked_click 重入唯一动作通道):缓存清空 + -# 受理恰一次——旗布尔=单次送达探测器(双发=两次翻转回 false、零发=false,均暴露)。 +# 受理恰一次——封印布尔=单次送达探测器(双发=两次翻转回 false、零发=false,均暴露)。 # 前提消失守卫:等重放期间出现停点层/战斗收场(注入时点恰逢终结演播)→ 静默弃测不计 -# problem(旗动作不杀伤,正常局不触发;断言实现形态取舍在代拍白名单内)。 +# problem(封印动作不杀伤,正常局不触发;断言实现形态取舍在代拍白名单内)。 func _locktest_tick() -> void: if _locktest_state == 2: return @@ -714,13 +714,13 @@ func _locktest_tick() -> void: if int(settlement.action_economy.ap) < 1: return var target := _locktest_pick_cell(settlement.minesweeper) - if target.x < 0 or settlement.minesweeper.has_flag(target): - return # 无合法邻格/目标被并发旗行为占位——下帧重挑 + if target.x < 0 or settlement.minesweeper.has_seal(target): + return # 无合法邻格/目标被并发封印行为占位——下帧重挑 _locktest_cell = target _locktest_frames = 0 main.board_view.click_cell(target, MOUSE_BUTTON_RIGHT) - if settlement.minesweeper.has_flag(target): - _problems.append("锁期断言:演播期点击未被冻结(旗即时受理——v3 冻结失守)") + if settlement.minesweeper.has_seal(target): + _problems.append("锁期断言:演播期点击未被冻结(封印即时受理——v3 冻结失守)") _locktest_state = 2 return if main.run_scope.locked_click.is_empty() or main.run_scope.locked_click.get("cell") != target: @@ -744,16 +744,16 @@ func _locktest_tick() -> void: _locktest_state = 2 return if main.run_scope.locked_click.is_empty(): - if not settlement.minesweeper.has_flag(_locktest_cell): + if not settlement.minesweeper.has_seal(_locktest_cell): var b = settlement.minesweeper.current_board() - print("[lockdiag] 重放后旗未置:br='%s' phase=%s ap=%d cell=%s revealed=%s board=%dx%d hero=%s" % [ + print("[lockdiag] 重放后封印未置:br='%s' phase=%s ap=%d cell=%s revealed=%s board=%dx%d hero=%s" % [ str(settlement.battle_result), str(settlement.action_economy.phase), int(settlement.action_economy.ap), str(_locktest_cell), str(settlement.minesweeper.is_revealed(_locktest_cell)), b.width, b.height, str(settlement.minesweeper.hero_pos())]) - _problems.append("重放断言:锁期缓存点击未受理恰一次(旗未置位——零发或双发)") + _problems.append("重放断言:锁期缓存点击未受理恰一次(封印未置位——零发或双发)") _locktest_state = 2 - main.board_view.click_cell(_locktest_cell, MOUSE_BUTTON_RIGHT) # 拔旗恢复现场(尽力而为不判定) + main.board_view.click_cell(_locktest_cell, MOUSE_BUTTON_RIGHT) # 撤封印恢复现场(尽力而为不判定) func _locktest_pick_cell(minesweeper) -> Vector2i: @@ -763,7 +763,7 @@ func _locktest_pick_cell(minesweeper) -> Vector2i: if dx == 0 and dy == 0: continue var c: Vector2i = hero + Vector2i(dx, dy) - if minesweeper.current_board().in_bounds(c) and not minesweeper.is_revealed(c) and not minesweeper.has_flag(c): + if minesweeper.current_board().in_bounds(c) and not minesweeper.is_revealed(c) and not minesweeper.has_seal(c): return c return Vector2i(-1, -1) @@ -790,5 +790,5 @@ func _dump_state() -> void: str(main.run_scope.settlement.action_economy.phase), str(main.run_scope.settlement.action_economy.ap), str(main.run_scope.settlement.action_economy.rap)]) print(" battle_result='%s' settling=%s" % [ str(diag.battle_result), str(diag.settling)]) - print(" board_installed=%s facts_path='%s' refresh_used=%s flags=%s" % [ - str(diag.minesweeper_board_installed), str(diag.facts_path), str(diag.refresh_used_round), str(_flags_placed)]) + print(" board_installed=%s facts_path='%s' refresh_used=%s seals=%s" % [ + str(diag.minesweeper_board_installed), str(diag.facts_path), str(diag.refresh_used_round), str(_seals_placed)]) diff --git a/game/smoke/ui_contrast_probe.gd b/game/smoke/ui_contrast_probe.gd index 380d54f6..22dc312b 100644 --- a/game/smoke/ui_contrast_probe.gd +++ b/game/smoke/ui_contrast_probe.gd @@ -40,7 +40,7 @@ func _pairs() -> Array: ["结算·GP账行墨/结算板", UiKit.GOLD_INK, UiKit.PANEL_DATA, 1.0], # 迭代19卡②——battle_end 战利品 GP 行名/值(尾裁微批a 换深金墨 5.21:1;原 GOLD_DEEP 2.67 越带) ["结算·账行墨/结算板", UiKit.INK_LABEL, UiKit.PANEL_DATA, 1.0], # 迭代19卡②——battle_end 钥石/加成账行(标签深墨) ["商店·行卡名墨/暗底行卡", UiKit.WARM_SOFT, UiKit.BG_OVERLAY, 1.0], # 迭代19卡②——legacy 行卡商品名(尾裁微批a 显式传暖白次级 9.53:1;原 bold 缺省 INK_LABEL 1.12 越带) - ["商店·行卡现价墨/暗底行卡", UiKit.WARM_SOFT, UiKit.BG_OVERLAY, 1.0],# 迭代19卡②——legacy 行卡「现价 N 金币」 + ["商店·行卡现价墨/暗底行卡", UiKit.WARM_SOFT, UiKit.BG_OVERLAY, 1.0],# 迭代19卡②——legacy 行卡「现价 N GP」 ["商店·行卡已购墨/暗底行卡", UiKit.WARM_FAINT, UiKit.BG_OVERLAY, 1.0],# 迭代19卡②——legacy 行卡「已购 N 档」 ["商店·爬价规则墨/暖亮页底", UiKit.WARM_SOFT, UiKit.BG_BRIGHT, 1.0],# 迭代19卡②——货架面爬价规则行(page_shell 亮底) ["商店·货架卡名墨/货架板", UiKit.INK_TITLE, UiKit.PANEL_DATA, 1.0], # 迭代19卡②——bcard 货架卡商品名(iter16 换 TG 带后未机检位) diff --git a/game/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd index 059b1a55..aa149238 100644 --- a/game/smoke/ui_input_probe.gd +++ b/game/smoke/ui_input_probe.gd @@ -3,8 +3,8 @@ # Node2D 迁移批 Risks 缓解面)。现役探针全走 BoardView.click_cell 直调(合成鼠标事件零命中已实证)—— # 本探针是真实输入路径的唯一自动化覆盖:鼠标事件 → 壳层 _gui_input → 板级公式换算(_cell_at)→ # 悬停/点选/chord 既有出口 → 组合根信号。四 case:①悬停可挖域(金框+十字光标)②悬停禁入 -# (hover_forbidden 信号+灰禁红框)③悬停已开格(路径预览点迹+移动光标)④右键插旗(flag_place -# 到达组合根+核心旗态)⑤双击 chord(禁入格双左击,核心拒挖零副作用)⑥左键挖(dig 到达组合根+核心揭格) +# (hover_forbidden 信号+灰禁红框)③悬停已开格(路径预览点迹+移动光标)④右键封印(seal_place +# 到达组合根+核心封印态)⑤双击 chord(禁入格双左击,核心拒挖零副作用)⑥左键挖(dig 到达组合根+核心揭格) # ⑦英雄精灵世界落位(棋盘小人贴图批回归闸——SubViewport 世界坐标判据,素材缺位树跳过) # ⑧影子构成与贴脚 ⑨右移朝向+到位回站帧+缩放档 ⑩变格边长即时重排 ⑪贴图缺位回退字形 #(⑧–⑪=Node2D 展示几何/状态面单元化断言)。 @@ -157,26 +157,26 @@ func _ready() -> void: await get_tree().process_frame if ms.hero_pos() == hero_before: break - var flag_t := Vector2i(-9, -9) + var seal_t := Vector2i(-9, -9) var dig_t := Vector2i(-9, -9) for c in bv.diggable_probe(): - if not ms.has_flag(c): - if flag_t.x == -9: - flag_t = c + if not ms.has_seal(c): + if seal_t.x == -9: + seal_t = c elif dig_t.x == -9: dig_t = c break var forbid_t := _pick_forbidden(bv, ms) var reveal_t := _pick_revealed(ms) - if flag_t.x == -9 or dig_t.x == -9 or forbid_t.x == -9 or reveal_t.x == -9: - _pre_fail("目标格选取失败 flag=%s dig=%s forbid=%s reveal=%s" % [flag_t, dig_t, forbid_t, reveal_t]) + if seal_t.x == -9 or dig_t.x == -9 or forbid_t.x == -9 or reveal_t.x == -9: + _pre_fail("目标格选取失败 seal=%s dig=%s forbid=%s reveal=%s" % [seal_t, dig_t, forbid_t, reveal_t]) return # ---- case① 悬停可挖域:motion → 悬停态到达(金框 + 十字光标)---- - _push_motion(_pos(bv, flag_t)) + _push_motion(_pos(bv, seal_t)) await get_tree().process_frame - if bv.hover_probe() != flag_t: - _problems.append("case① 悬停未到达(_hover=%s 应=%s)" % [bv.hover_probe(), flag_t]) - var u1 = bv.cells_probe()[flag_t] + if bv.hover_probe() != seal_t: + _problems.append("case① 悬停未到达(_hover=%s 应=%s)" % [bv.hover_probe(), seal_t]) + var u1 = bv.cells_probe()[seal_t] if not u1.hl_visible or u1.hl_color != UiKit.GOLD: _problems.append("case① 悬停金框缺失(visible=%s color=%s)" % [str(u1.hl_visible), str(u1.hl_color)]) if bv.mouse_default_cursor_shape != Input.CURSOR_CROSS: @@ -199,23 +199,23 @@ func _ready() -> void: _problems.append("case③ 路径预览点迹未亮(dots=0)") if bv.mouse_default_cursor_shape != Input.CURSOR_ARROW: _problems.append("case③ 移动光标缺失(%d)" % bv.mouse_default_cursor_shape) - # ---- case④ 右键插旗:flag_place 到达组合根 + 核心旗态落位 ---- - _push_click(_pos(bv, flag_t), MOUSE_BUTTON_RIGHT) + # ---- case④ 右键封印:seal_place 到达组合根 + 核心封印态落位 ---- + _push_click(_pos(bv, seal_t), MOUSE_BUTTON_RIGHT) await get_tree().process_frame - if not _has_action(flag_t, "flag_place"): - _problems.append("case④ flag_place 未达组合根(actions=%s)" % [str(_actions)]) + if not _has_action(seal_t, "seal_place"): + _problems.append("case④ seal_place 未达组合根(actions=%s)" % [str(_actions)]) await get_tree().process_frame - if not ms.has_flag(flag_t): - _problems.append("case④ 核心旗态未落位") - # ---- case④b 旗纹理槽回归断言(P0-1 修复批 2026-10-02):T13 批曾在 paint 尾部无条件 - # `u.tex_flag = null` 覆盖 T17 批的条件赋值=素材在位时插旗不可见(headless 缺盘走字形回退 + if not ms.has_seal(seal_t): + _problems.append("case④ 核心封印态未落位") + # ---- case④b 封印纹理槽回归断言(P0-1 修复批 2026-10-02):T13 批曾在 paint 尾部无条件 + # `u.tex_seal = null` 覆盖 T17 批的条件赋值=素材在位时封印不可见(headless 缺盘走字形回退 # 掩盖)——有盘断言纹理在槽、缺盘断言字形回退,两分支防双写踩踏复活 ---- - var flag_unit = bv.cells_probe().get(flag_t) - if bv._flag_tex != null: - if flag_unit == null or flag_unit.tex_flag != bv._flag_tex: - _problems.append("case④b 旗纹理槽未挂封印旗纹理(tex_flag=%s)" % ["无单元" if flag_unit == null else str(flag_unit.tex_flag)]) - elif flag_unit == null or flag_unit.glyph != "旗": - _problems.append("case④b 缺盘字形回退缺失(glyph=%s)" % ["无单元" if flag_unit == null else String(flag_unit.glyph)]) + var seal_unit = bv.cells_probe().get(seal_t) + if bv._seal_tex != null: + if seal_unit == null or seal_unit.tex_seal != bv._seal_tex: + _problems.append("case④b 封印纹理槽未挂封印印记纹理(tex_seal=%s)" % ["无单元" if seal_unit == null else str(seal_unit.tex_seal)]) + elif seal_unit == null or seal_unit.glyph != "封": + _problems.append("case④b 缺盘字形回退缺失(glyph=%s)" % ["无单元" if seal_unit == null else String(seal_unit.glyph)]) # ---- case⑤ 双击 chord:禁入格双左击(核心拒挖零副作用)→ chord_attempted ---- _push_click(_pos(bv, forbid_t), MOUSE_BUTTON_LEFT) _push_click(_pos(bv, forbid_t), MOUSE_BUTTON_LEFT) @@ -442,11 +442,11 @@ func _ready() -> void: # ---- case⑯ 状态面板输入锁语义(迭代 17 卡③ R3——开层锁棋盘、关层恢复无残留;真实 push_input # 路径:入口角标本体 press+release 真点击 → 状态面板开;锁期挖掘点击零穿透;「继续」关层后 # 同格挖掘重新到达——锁语义与既有模态同款,无状态残留。置于全 case 之尾:取格若需前沿移位 - #(真实点击 move 扩大可挖域),其板面扰动不再波及任何既有断言——域恰 2 枚时 flag_t 带旗+ - # dig_t 揭开后域内零无旗格,正是首跑实测踩中的形态)---- + #(真实点击 move 扩大可挖域),其板面扰动不再波及任何既有断言——域恰 2 枚时 seal_t 带封印+ + # dig_t 揭开后域内零无封印格,正是首跑实测踩中的形态)---- var status_dig := Vector2i(-9, -9) for c in bv.diggable_probe(): - if not ms.has_flag(c): + if not ms.has_seal(c): status_dig = c break if status_dig.x == -9: @@ -458,11 +458,11 @@ func _ready() -> void: await get_tree().process_frame await get_tree().process_frame for c in bv.diggable_probe(): - if not ms.has_flag(c): + if not ms.has_seal(c): status_dig = c break if status_dig.x == -9: - _problems.append("case⑯ 无可挖无旗格(板面异常——锁断言中断)") + _problems.append("case⑯ 无可挖无封印格(板面异常——锁断言中断)") else: var pbtn16: Button = main.board_zone.status_badge var bpos: Vector2 = pbtn16.get_global_rect().get_center() @@ -523,11 +523,11 @@ func _ready() -> void: # ② 开格灭:真实点击挖开一格 → 该格退出作用集(S3 生命周期) var dig17 := Vector2i(-9, -9) for c in digp17: - if not ms.has_flag(c): + if not ms.has_seal(c): dig17 = c break if dig17.x == -9: - _problems.append("case⑰ 无无旗可挖格(板面异常)") + _problems.append("case⑰ 无无封印可挖格(板面异常)") else: if not (bv.type_glow_probe().get("cells", {}) as Dictionary).has(dig17): _problems.append("case⑰ 待挖格不在作用集(%s)" % str(dig17)) @@ -593,7 +593,7 @@ func _ready() -> void: if not bool(bv.type_glow_probe().get("enabled", false)): _problems.append("case⑰ 微光开关未恢复开态") if _problems.is_empty(): - print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标/视野迷雾/状态面板输入锁/未开格类型微光 十八断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增,④b 旗纹理槽回归 2026-10-02 增,⑮视野迷雾 2026-10-03 增〔+提灯接线断言 2026-10-05 迭代14⑤〕,⑯状态面板输入锁 2026-10-06 迭代17卡③增,⑰未开格类型微光 2026-10-17 迭代30卡①增)") + print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/seal_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标/视野迷雾/状态面板输入锁/未开格类型微光 十八断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增,④b 封印纹理槽回归 2026-10-02 增,⑮视野迷雾 2026-10-03 增〔+提灯接线断言 2026-10-05 迭代14⑤〕,⑯状态面板输入锁 2026-10-06 迭代17卡③增,⑰未开格类型微光 2026-10-17 迭代30卡①增)") get_tree().quit(0) else: for p in _problems: diff --git a/game/smoke/ui_probe.gd b/game/smoke/ui_probe.gd index 0bbaf3c7..1fa5dbe7 100644 --- a/game/smoke/ui_probe.gd +++ b/game/smoke/ui_probe.gd @@ -176,8 +176,8 @@ func _ready() -> void: if not BoardView.REWARD_BADGE.has(cat): problems.append("奖励图标表缺键(%s)" % cat) var probe_kb: Array = [ - {"effect_id": "enrage", "display_name": "暴走", "layers": 1, "remaining_settlements": 1, "source_class": "flag_miss", "round_index": 1, "effective_value": 25}, - {"effect_id": "off_guard", "display_name": "失衡", "layers": 1, "remaining_settlements": 1, "source_class": "flag_miss", "round_index": 1, "effective_value": 25}, + {"effect_id": "enrage", "display_name": "暴走", "layers": 1, "remaining_settlements": 1, "source_class": "seal_miss", "round_index": 1, "effective_value": 25}, + {"effect_id": "off_guard", "display_name": "失衡", "layers": 1, "remaining_settlements": 1, "source_class": "seal_miss", "round_index": 1, "effective_value": 25}, ] slots_row.set_effects(probe_kb) if slots_row._slots.size() != 2: diff --git a/game/tests/evidence/parity/anchor.json b/game/tests/evidence/parity/anchor.json index c4fc1a2f..5b10a675 100644 --- a/game/tests/evidence/parity/anchor.json +++ b/game/tests/evidence/parity/anchor.json @@ -2,46 +2,46 @@ "variants": { "base": { "runsum": [ - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":39,\"flag_hit_gain\":208,\"flag_miss\":8,\"flag_miss_penalty\":16,\"flag_placed\":51,\"hero_dmg\":13,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":11,\"route\":\"min\",\"seed\":71000,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":29,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":69,\"flag_hit_gain\":397,\"flag_miss\":6,\"flag_miss_penalty\":14,\"flag_placed\":81,\"hero_dmg\":30,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":79,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":71001,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":46,\"visited_count\":9,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":34,\"flag_hit_gain\":388,\"flag_miss\":6,\"flag_miss_penalty\":6,\"flag_placed\":48,\"hero_dmg\":36,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":13,\"route\":\"min\",\"seed\":71002,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":44,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":6,\"flag_hit_gain\":-9,\"flag_miss\":7,\"flag_miss_penalty\":8,\"flag_placed\":13,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":3,\"route\":\"min\",\"seed\":71003,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":20,\"visited_count\":1,\"wallet_count\":2}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":3,\"flag_hit_gain\":65,\"flag_miss\":2,\"flag_miss_penalty\":16,\"flag_placed\":5,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":1,\"route\":\"min\",\"seed\":71004,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":12,\"visited_count\":1,\"wallet_count\":2}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":80,\"flag_hit_gain\":138,\"flag_miss\":8,\"flag_miss_penalty\":24,\"flag_placed\":92,\"hero_dmg\":26,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"ap\",\"tier\":\"rare\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":10,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":10,\"hp_before\":10,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":25,\"route\":\"min\",\"seed\":71005,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":34,\"visited_count\":8,\"wallet_count\":7}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":65,\"flag_hit_gain\":286,\"flag_miss\":9,\"flag_miss_penalty\":22,\"flag_placed\":81,\"hero_dmg\":28,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":14,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"chain_traps\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":33,\"heal_gained\":5,\"hp_after\":14,\"hp_before\":9,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":14,\"hp_before\":14,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":25,\"route\":\"min\",\"seed\":71006,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":42,\"visited_count\":8,\"wallet_count\":7}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":48,\"flag_hit_gain\":319,\"flag_miss\":11,\"flag_miss_penalty\":8,\"flag_placed\":65,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"rap\",\"tier\":\"rare\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":16,\"route\":\"min\",\"seed\":71007,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":50,\"flag_hit_gain\":-30,\"flag_miss\":5,\"flag_miss_penalty\":14,\"flag_placed\":58,\"hero_dmg\":24,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}}],\"rounds\":19,\"route\":\"min\",\"seed\":71008,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":24,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":24,\"flag_hit_gain\":360,\"flag_miss\":6,\"flag_miss_penalty\":8,\"flag_placed\":35,\"hero_dmg\":17,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":10,\"route\":\"min\",\"seed\":71009,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":33,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":52,\"flag_hit_gain\":255,\"flag_miss\":9,\"flag_miss_penalty\":6,\"flag_placed\":65,\"hero_dmg\":33,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":6,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":20,\"route\":\"min\",\"seed\":71010,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":39,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":10,\"flag_hit_gain\":178,\"flag_miss\":6,\"flag_miss_penalty\":6,\"flag_placed\":16,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":71011,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":2,\"wallet_count\":3}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":10,\"flag_hit_gain\":79,\"flag_miss\":5,\"flag_miss_penalty\":6,\"flag_placed\":17,\"hero_dmg\":6,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":71012,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":23,\"flag_hit_gain\":64,\"flag_miss\":6,\"flag_miss_penalty\":8,\"flag_placed\":31,\"hero_dmg\":11,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":30,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":71013,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":41,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":47,\"flag_hit_gain\":366,\"flag_miss\":6,\"flag_miss_penalty\":6,\"flag_placed\":54,\"hero_dmg\":21,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":17,\"route\":\"min\",\"seed\":71014,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":37,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":36,\"flag_hit_gain\":891,\"flag_miss\":3,\"flag_miss_penalty\":0,\"flag_placed\":46,\"hero_dmg\":12,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":10,\"route\":\"min\",\"seed\":71015,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":34,\"flag_hit_gain\":-50,\"flag_miss\":4,\"flag_miss_penalty\":16,\"flag_placed\":41,\"hero_dmg\":20,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":12,\"route\":\"min\",\"seed\":71016,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":31,\"flag_hit_gain\":545,\"flag_miss\":5,\"flag_miss_penalty\":0,\"flag_placed\":42,\"hero_dmg\":24,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":71017,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":40,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":29,\"flag_hit_gain\":-119,\"flag_miss\":6,\"flag_miss_penalty\":6,\"flag_placed\":41,\"hero_dmg\":21,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"blood_tax\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":13,\"route\":\"min\",\"seed\":71018,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":35,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":4,\"flag_hit_gain\":5,\"flag_miss\":3,\"flag_miss_penalty\":14,\"flag_placed\":11,\"hero_dmg\":9,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":2,\"route\":\"min\",\"seed\":71019,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":17,\"visited_count\":1,\"wallet_count\":2}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":114,\"flag_hit_gain\":149,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":124,\"hero_dmg\":69,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"frontier_miner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"frontier_miner\",\"feat_name\":\"边陲矿工\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":71020,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":69,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":190,\"flag_hit_gain\":1509,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":205,\"hero_dmg\":86,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"market_close\",\"executioner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":5,\"hp_after\":18,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":18,\"hp_before\":18,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":18,\"heal_gained\":7,\"hp_after\":19,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":51,\"route\":\"min\",\"seed\":71021,\"shop_gp_seq\":[91],\"stopped_at\":3,\"taken\":86,\"visited_count\":15,\"wallet_count\":23}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":124,\"flag_hit_gain\":216,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":129,\"hero_dmg\":78,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"executioner\",\"seal_stake\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":41,\"route\":\"min\",\"seed\":71022,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":78,\"visited_count\":11,\"wallet_count\":10}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":17,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":242,\"flag_hit_gain\":1437,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":257,\"hero_dmg\":120,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"stone_skin\",\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":31,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":16,\"heal_gained\":7,\"hp_after\":13,\"hp_before\":6,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":13,\"hp_before\":13,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":82,\"route\":\"min\",\"seed\":71023,\"shop_gp_seq\":[49,60],\"stopped_at\":3,\"taken\":120,\"visited_count\":20,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":238,\"flag_hit_gain\":-139,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":250,\"hero_dmg\":120,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"executioner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":29,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":28,\"heal_gained\":7,\"hp_after\":21,\"hp_before\":14,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":21,\"hp_before\":21,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":74,\"route\":\"min\",\"seed\":71024,\"shop_gp_seq\":[53,64],\"stopped_at\":3,\"taken\":120,\"visited_count\":19,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":255,\"flag_hit_gain\":-235,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":277,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"warning_beacon\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":11,\"heal_gained\":7,\"hp_after\":36,\"hp_before\":29,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":36,\"hp_before\":36,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":79,\"route\":\"min\",\"seed\":71025,\"shop_gp_seq\":[76,49],\"stopped_at\":0,\"taken\":100,\"visited_count\":19,\"wallet_count\":28}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":211,\"flag_hit_gain\":1073,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":221,\"hero_dmg\":99,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"hard_hat\",\"venom_edge\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":27,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":27,\"hp_before\":27,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":62,\"route\":\"min\",\"seed\":71026,\"shop_gp_seq\":[68,48],\"stopped_at\":0,\"taken\":99,\"visited_count\":19,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":232,\"flag_hit_gain\":402,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":254,\"hero_dmg\":114,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"fuse_wire\",\"seal_stake\",\"breaker_strike\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":23,\"heal_gained\":7,\"hp_after\":20,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":20,\"hp_before\":20,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":78,\"route\":\"min\",\"seed\":71027,\"shop_gp_seq\":[65,48],\"stopped_at\":0,\"taken\":114,\"visited_count\":19,\"wallet_count\":25}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":240,\"flag_hit_gain\":1902,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":253,\"hero_dmg\":93,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"map_exchange\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":40,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":13,\"heal_gained\":7,\"hp_after\":22,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":22,\"hp_before\":22,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":72,\"route\":\"min\",\"seed\":71028,\"shop_gp_seq\":[61,34],\"stopped_at\":0,\"taken\":93,\"visited_count\":19,\"wallet_count\":24}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":119,\"flag_hit_gain\":557,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":127,\"hero_dmg\":73,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"fuse_wire\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"fuse_wire\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":47,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":71029,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":73,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":203,\"flag_hit_gain\":723,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":213,\"hero_dmg\":92,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"hard_hat\",\"flag_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":19,\"heal_gained\":7,\"hp_after\":38,\"hp_before\":31,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":38,\"hp_before\":38,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":60,\"route\":\"min\",\"seed\":71030,\"shop_gp_seq\":[85,35],\"stopped_at\":0,\"taken\":92,\"visited_count\":19,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":133,\"flag_hit_gain\":616,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":145,\"hero_dmg\":79,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":33,\"heal_gained\":7,\"hp_after\":31,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":31,\"hp_before\":31,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":40,\"route\":\"min\",\"seed\":71031,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":79,\"visited_count\":10,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":14,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":217,\"flag_hit_gain\":1602,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":238,\"hero_dmg\":110,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"stone_skin\",\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":43,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":18,\"heal_gained\":7,\"hp_after\":34,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":34,\"hp_before\":34,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":69,\"route\":\"min\",\"seed\":71032,\"shop_gp_seq\":[73],\"stopped_at\":3,\"taken\":110,\"visited_count\":17,\"wallet_count\":24}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":160,\"flag_hit_gain\":693,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":187,\"hero_dmg\":50,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"blood_tax\",\"map_exchange\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_tax\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":38,\"heal_gained\":5,\"hp_after\":15,\"hp_before\":10,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"hp_after\":15,\"hp_before\":15,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":11,\"heal_gained\":7,\"hp_after\":33,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":33,\"hp_before\":33,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":46,\"route\":\"min\",\"seed\":71033,\"shop_gp_seq\":[50,42],\"stopped_at\":0,\"taken\":50,\"visited_count\":19,\"wallet_count\":25}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":15,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":278,\"flag_hit_gain\":1426,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":292,\"hero_dmg\":114,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"seal_stake\",\"trap_instinct\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":4,\"hp_after\":38,\"hp_before\":34,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":38,\"hp_before\":38,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":89,\"route\":\"min\",\"seed\":71034,\"shop_gp_seq\":[85,70],\"stopped_at\":0,\"taken\":114,\"visited_count\":20,\"wallet_count\":30}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":231,\"flag_hit_gain\":1217,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":243,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"chain_traps\",\"map_exchange\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":59,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":21,\"hp_before\":14,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":21,\"hp_before\":21,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":71035,\"shop_gp_seq\":[88,40],\"stopped_at\":0,\"taken\":100,\"visited_count\":19,\"wallet_count\":27}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":118,\"flag_hit_gain\":430,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":127,\"hero_dmg\":76,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_smith\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":98,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":71036,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":76,\"visited_count\":11,\"wallet_count\":10}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":121,\"flag_hit_gain\":1364,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":124,\"hero_dmg\":60,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_smith\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":87,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":71037,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":60,\"visited_count\":10,\"wallet_count\":10}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":220,\"flag_hit_gain\":1090,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":231,\"hero_dmg\":116,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"chain_traps\",\"geologist\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":7,\"hp_after\":23,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"geologist\",\"feat_name\":\"地质学家\",\"hp_after\":23,\"hp_before\":23,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":71,\"route\":\"min\",\"seed\":71038,\"shop_gp_seq\":[56,58],\"stopped_at\":0,\"taken\":116,\"visited_count\":19,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":10,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":177,\"flag_hit_gain\":1689,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":185,\"hero_dmg\":98,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"skip_mining\",\"seal_echo\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":52,\"route\":\"min\",\"seed\":71039,\"shop_gp_seq\":[72],\"stopped_at\":2,\"taken\":98,\"visited_count\":14,\"wallet_count\":20}" + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":39,\"seal_hit_gain\":208,\"seal_miss\":8,\"seal_miss_penalty\":16,\"seal_placed\":51,\"hero_dmg\":13,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":11,\"route\":\"min\",\"seed\":71000,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":29,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":69,\"seal_hit_gain\":397,\"seal_miss\":6,\"seal_miss_penalty\":14,\"seal_placed\":81,\"hero_dmg\":30,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":79,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":71001,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":46,\"visited_count\":9,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":34,\"seal_hit_gain\":388,\"seal_miss\":6,\"seal_miss_penalty\":6,\"seal_placed\":48,\"hero_dmg\":36,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":13,\"route\":\"min\",\"seed\":71002,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":44,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":6,\"seal_hit_gain\":-9,\"seal_miss\":7,\"seal_miss_penalty\":8,\"seal_placed\":13,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":3,\"route\":\"min\",\"seed\":71003,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":20,\"visited_count\":1,\"wallet_count\":2}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":3,\"seal_hit_gain\":65,\"seal_miss\":2,\"seal_miss_penalty\":16,\"seal_placed\":5,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":1,\"route\":\"min\",\"seed\":71004,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":12,\"visited_count\":1,\"wallet_count\":2}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":80,\"seal_hit_gain\":138,\"seal_miss\":8,\"seal_miss_penalty\":24,\"seal_placed\":92,\"hero_dmg\":26,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"ap\",\"tier\":\"rare\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":10,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":10,\"hp_before\":10,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":25,\"route\":\"min\",\"seed\":71005,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":34,\"visited_count\":8,\"wallet_count\":7}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":65,\"seal_hit_gain\":286,\"seal_miss\":9,\"seal_miss_penalty\":22,\"seal_placed\":81,\"hero_dmg\":28,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":14,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"chain_traps\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":33,\"heal_gained\":5,\"hp_after\":14,\"hp_before\":9,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":14,\"hp_before\":14,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":25,\"route\":\"min\",\"seed\":71006,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":42,\"visited_count\":8,\"wallet_count\":7}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":48,\"seal_hit_gain\":319,\"seal_miss\":11,\"seal_miss_penalty\":8,\"seal_placed\":65,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"rap\",\"tier\":\"rare\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":16,\"route\":\"min\",\"seed\":71007,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":50,\"seal_hit_gain\":-30,\"seal_miss\":5,\"seal_miss_penalty\":14,\"seal_placed\":58,\"hero_dmg\":24,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}}],\"rounds\":19,\"route\":\"min\",\"seed\":71008,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":24,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":24,\"seal_hit_gain\":360,\"seal_miss\":6,\"seal_miss_penalty\":8,\"seal_placed\":35,\"hero_dmg\":17,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":10,\"route\":\"min\",\"seed\":71009,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":33,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":52,\"seal_hit_gain\":255,\"seal_miss\":9,\"seal_miss_penalty\":6,\"seal_placed\":65,\"hero_dmg\":33,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":6,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":20,\"route\":\"min\",\"seed\":71010,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":39,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":10,\"seal_hit_gain\":178,\"seal_miss\":6,\"seal_miss_penalty\":6,\"seal_placed\":16,\"hero_dmg\":4,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":71011,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":2,\"wallet_count\":3}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":10,\"seal_hit_gain\":79,\"seal_miss\":5,\"seal_miss_penalty\":6,\"seal_placed\":17,\"hero_dmg\":6,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":71012,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":23,\"seal_hit_gain\":64,\"seal_miss\":6,\"seal_miss_penalty\":8,\"seal_placed\":31,\"hero_dmg\":11,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":30,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":71013,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":41,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":47,\"seal_hit_gain\":366,\"seal_miss\":6,\"seal_miss_penalty\":6,\"seal_placed\":54,\"hero_dmg\":21,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":17,\"route\":\"min\",\"seed\":71014,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":37,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":36,\"seal_hit_gain\":891,\"seal_miss\":3,\"seal_miss_penalty\":0,\"seal_placed\":46,\"hero_dmg\":12,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":10,\"route\":\"min\",\"seed\":71015,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":34,\"seal_hit_gain\":-50,\"seal_miss\":4,\"seal_miss_penalty\":16,\"seal_placed\":41,\"hero_dmg\":20,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":12,\"route\":\"min\",\"seed\":71016,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":31,\"seal_hit_gain\":545,\"seal_miss\":5,\"seal_miss_penalty\":0,\"seal_placed\":42,\"hero_dmg\":24,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":71017,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":40,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":29,\"seal_hit_gain\":-119,\"seal_miss\":6,\"seal_miss_penalty\":6,\"seal_placed\":41,\"hero_dmg\":21,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"blood_tax\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":13,\"route\":\"min\",\"seed\":71018,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":35,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":1,\"choices\":0,\"cleared\":false,\"encounter_max_hp_seq\":[26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":4,\"seal_hit_gain\":5,\"seal_miss\":3,\"seal_miss_penalty\":14,\"seal_placed\":11,\"hero_dmg\":9,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":2,\"route\":\"min\",\"seed\":71019,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":17,\"visited_count\":1,\"wallet_count\":2}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":114,\"seal_hit_gain\":149,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":124,\"hero_dmg\":69,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"frontier_miner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"frontier_miner\",\"feat_name\":\"边陲矿工\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":71020,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":69,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":190,\"seal_hit_gain\":1509,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":205,\"hero_dmg\":86,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"market_close\",\"executioner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":5,\"hp_after\":18,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":18,\"hp_before\":18,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":18,\"heal_gained\":7,\"hp_after\":19,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":51,\"route\":\"min\",\"seed\":71021,\"shop_gp_seq\":[91],\"stopped_at\":3,\"taken\":86,\"visited_count\":15,\"wallet_count\":23}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":124,\"seal_hit_gain\":216,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":129,\"hero_dmg\":78,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"executioner\",\"seal_stake\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":41,\"route\":\"min\",\"seed\":71022,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":78,\"visited_count\":11,\"wallet_count\":10}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":17,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":242,\"seal_hit_gain\":1437,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":257,\"hero_dmg\":120,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"stone_skin\",\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":31,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":16,\"heal_gained\":7,\"hp_after\":13,\"hp_before\":6,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":13,\"hp_before\":13,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":82,\"route\":\"min\",\"seed\":71023,\"shop_gp_seq\":[49,60],\"stopped_at\":3,\"taken\":120,\"visited_count\":20,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":238,\"seal_hit_gain\":-139,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":250,\"hero_dmg\":120,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"executioner\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":29,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":28,\"heal_gained\":7,\"hp_after\":21,\"hp_before\":14,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":21,\"hp_before\":21,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":74,\"route\":\"min\",\"seed\":71024,\"shop_gp_seq\":[53,64],\"stopped_at\":3,\"taken\":120,\"visited_count\":19,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":255,\"seal_hit_gain\":-235,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":277,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"warning_beacon\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":11,\"heal_gained\":7,\"hp_after\":36,\"hp_before\":29,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":36,\"hp_before\":36,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":79,\"route\":\"min\",\"seed\":71025,\"shop_gp_seq\":[76,49],\"stopped_at\":0,\"taken\":100,\"visited_count\":19,\"wallet_count\":28}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":211,\"seal_hit_gain\":1073,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":221,\"hero_dmg\":99,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"hard_hat\",\"venom_edge\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":27,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":27,\"hp_before\":27,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":62,\"route\":\"min\",\"seed\":71026,\"shop_gp_seq\":[68,48],\"stopped_at\":0,\"taken\":99,\"visited_count\":19,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":232,\"seal_hit_gain\":402,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":254,\"hero_dmg\":114,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"fuse_wire\",\"seal_stake\",\"breaker_strike\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":23,\"heal_gained\":7,\"hp_after\":20,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":20,\"hp_before\":20,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":78,\"route\":\"min\",\"seed\":71027,\"shop_gp_seq\":[65,48],\"stopped_at\":0,\"taken\":114,\"visited_count\":19,\"wallet_count\":25}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":240,\"seal_hit_gain\":1902,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":253,\"hero_dmg\":93,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"map_exchange\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":40,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":13,\"heal_gained\":7,\"hp_after\":22,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":22,\"hp_before\":22,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":72,\"route\":\"min\",\"seed\":71028,\"shop_gp_seq\":[61,34],\"stopped_at\":0,\"taken\":93,\"visited_count\":19,\"wallet_count\":24}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":119,\"seal_hit_gain\":557,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":127,\"hero_dmg\":73,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"fuse_wire\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"fuse_wire\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":47,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":71029,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":73,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":203,\"seal_hit_gain\":723,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":213,\"hero_dmg\":92,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"hard_hat\",\"seal_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":19,\"heal_gained\":7,\"hp_after\":38,\"hp_before\":31,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":38,\"hp_before\":38,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":60,\"route\":\"min\",\"seed\":71030,\"shop_gp_seq\":[85,35],\"stopped_at\":0,\"taken\":92,\"visited_count\":19,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":133,\"seal_hit_gain\":616,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":145,\"hero_dmg\":79,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":33,\"heal_gained\":7,\"hp_after\":31,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":31,\"hp_before\":31,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":40,\"route\":\"min\",\"seed\":71031,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":79,\"visited_count\":10,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":14,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":217,\"seal_hit_gain\":1602,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":238,\"hero_dmg\":110,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"stone_skin\",\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":43,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":18,\"heal_gained\":7,\"hp_after\":34,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":34,\"hp_before\":34,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":69,\"route\":\"min\",\"seed\":71032,\"shop_gp_seq\":[73],\"stopped_at\":3,\"taken\":110,\"visited_count\":17,\"wallet_count\":24}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,35,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":160,\"seal_hit_gain\":693,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":187,\"hero_dmg\":50,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"blood_tax\",\"map_exchange\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_tax\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":38,\"heal_gained\":5,\"hp_after\":15,\"hp_before\":10,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"hp_after\":15,\"hp_before\":15,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":11,\"heal_gained\":7,\"hp_after\":33,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":33,\"hp_before\":33,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":46,\"route\":\"min\",\"seed\":71033,\"shop_gp_seq\":[50,42],\"stopped_at\":0,\"taken\":50,\"visited_count\":19,\"wallet_count\":25}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":15,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":278,\"seal_hit_gain\":1426,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":292,\"hero_dmg\":114,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"seal_stake\",\"trap_instinct\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":4,\"hp_after\":38,\"hp_before\":34,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":38,\"hp_before\":38,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":89,\"route\":\"min\",\"seed\":71034,\"shop_gp_seq\":[85,70],\"stopped_at\":0,\"taken\":114,\"visited_count\":20,\"wallet_count\":30}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":231,\"seal_hit_gain\":1217,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":243,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"chain_traps\",\"map_exchange\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":59,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":21,\"hp_before\":14,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":21,\"hp_before\":21,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":71035,\"shop_gp_seq\":[88,40],\"stopped_at\":0,\"taken\":100,\"visited_count\":19,\"wallet_count\":27}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":118,\"seal_hit_gain\":430,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":127,\"hero_dmg\":76,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_smith\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":98,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":71036,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":76,\"visited_count\":11,\"wallet_count\":10}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":121,\"seal_hit_gain\":1364,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":124,\"hero_dmg\":60,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_smith\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":87,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":71037,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":60,\"visited_count\":10,\"wallet_count\":10}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35,35,35,35,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":220,\"seal_hit_gain\":1090,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":231,\"hero_dmg\":116,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"chain_traps\",\"geologist\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":7,\"hp_after\":23,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"geologist\",\"feat_name\":\"地质学家\",\"hp_after\":23,\"hp_before\":23,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":71,\"route\":\"min\",\"seed\":71038,\"shop_gp_seq\":[56,58],\"stopped_at\":0,\"taken\":116,\"visited_count\":19,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":10,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":177,\"seal_hit_gain\":1689,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":185,\"hero_dmg\":98,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"skip_mining\",\"seal_echo\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":52,\"route\":\"min\",\"seed\":71039,\"shop_gp_seq\":[72],\"stopped_at\":2,\"taken\":98,\"visited_count\":14,\"wallet_count\":20}" ], "jsonl": { "normal": { @@ -56,46 +56,46 @@ }, "attune": { "runsum": [ - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":50,\"flag_hit_gain\":604,\"flag_miss\":8,\"flag_miss_penalty\":22,\"flag_placed\":60,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}}],\"rounds\":16,\"route\":\"min\",\"seed\":72000,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":42,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":57,\"flag_hit_gain\":416,\"flag_miss\":9,\"flag_miss_penalty\":16,\"flag_placed\":73,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":6,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"time_sand\",\"tier\":\"rare\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}}],\"rounds\":17,\"route\":\"min\",\"seed\":72001,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":37,\"flag_hit_gain\":-73,\"flag_miss\":10,\"flag_miss_penalty\":14,\"flag_placed\":52,\"hero_dmg\":23,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":11,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":15,\"route\":\"min\",\"seed\":72002,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":60,\"flag_hit_gain\":192,\"flag_miss\":7,\"flag_miss_penalty\":0,\"flag_placed\":69,\"hero_dmg\":22,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"trap_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":18,\"route\":\"min\",\"seed\":72003,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":46,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":19,\"flag_hit_gain\":-202,\"flag_miss\":5,\"flag_miss_penalty\":0,\"flag_placed\":27,\"hero_dmg\":10,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":6,\"route\":\"min\",\"seed\":72004,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":26,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":34,\"flag_hit_gain\":-7,\"flag_miss\":3,\"flag_miss_penalty\":14,\"flag_placed\":39,\"hero_dmg\":17,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":72005,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":17,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":66,\"flag_hit_gain\":134,\"flag_miss\":8,\"flag_miss_penalty\":6,\"flag_placed\":77,\"hero_dmg\":33,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attune_battery\",\"tier\":\"rare\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":20,\"route\":\"min\",\"seed\":72006,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":41,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":127,\"flag_hit_gain\":495,\"flag_miss\":9,\"flag_miss_penalty\":32,\"flag_placed\":144,\"hero_dmg\":39,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":12,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"fuse_wire\",\"field_dressing\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"field_dressing\",\"feat_name\":\"战地包扎\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":37,\"route\":\"min\",\"seed\":72007,\"shop_gp_seq\":[51],\"stopped_at\":2,\"taken\":55,\"visited_count\":13,\"wallet_count\":17}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":15,\"flag_hit_gain\":184,\"flag_miss\":3,\"flag_miss_penalty\":8,\"flag_placed\":23,\"hero_dmg\":8,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":2,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":5,\"route\":\"min\",\"seed\":72008,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":24,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":11,\"flag_hit_gain\":-8,\"flag_miss\":2,\"flag_miss_penalty\":8,\"flag_placed\":15,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":3,\"route\":\"min\",\"seed\":72009,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":19,\"visited_count\":2,\"wallet_count\":3}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":39,\"flag_hit_gain\":494,\"flag_miss\":12,\"flag_miss_penalty\":6,\"flag_placed\":55,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":22,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":13,\"route\":\"min\",\"seed\":72010,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":38,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":24,\"flag_hit_gain\":445,\"flag_miss\":3,\"flag_miss_penalty\":6,\"flag_placed\":30,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":6,\"route\":\"min\",\"seed\":72011,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":21,\"flag_hit_gain\":116,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":29,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":72012,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36,36,36,36],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":106,\"flag_hit_gain\":435,\"flag_miss\":15,\"flag_miss_penalty\":40,\"flag_placed\":135,\"hero_dmg\":48,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":11,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"map_exchange\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":47,\"heal_gained\":6,\"hp_after\":36,\"hp_before\":30,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":36,\"hp_before\":36,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":72013,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":48,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":52,\"flag_hit_gain\":410,\"flag_miss\":6,\"flag_miss_penalty\":14,\"flag_placed\":64,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"seal_stake\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":5,\"hp_after\":9,\"hp_before\":4,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":9,\"hp_before\":9,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":18,\"route\":\"min\",\"seed\":72014,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":41,\"visited_count\":8,\"wallet_count\":7}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":75,\"flag_hit_gain\":375,\"flag_miss\":9,\"flag_miss_penalty\":16,\"flag_placed\":89,\"hero_dmg\":31,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"trap_instinct\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":16,\"hp_before\":11,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":16,\"hp_before\":16,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":24,\"route\":\"min\",\"seed\":72015,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":39,\"visited_count\":9,\"wallet_count\":8}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":43,\"flag_hit_gain\":149,\"flag_miss\":7,\"flag_miss_penalty\":24,\"flag_placed\":55,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":11,\"route\":\"min\",\"seed\":72016,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":26,\"flag_hit_gain\":-23,\"flag_miss\":8,\"flag_miss_penalty\":8,\"flag_placed\":35,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":10,\"route\":\"min\",\"seed\":72017,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":22,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":50,\"flag_hit_gain\":-84,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":62,\"hero_dmg\":22,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}}],\"rounds\":17,\"route\":\"min\",\"seed\":72018,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":38,\"visited_count\":7,\"wallet_count\":7}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":21,\"flag_hit_gain\":257,\"flag_miss\":4,\"flag_miss_penalty\":22,\"flag_placed\":32,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":72019,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":5,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":131,\"flag_hit_gain\":975,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":142,\"hero_dmg\":84,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"breaker_strike\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":72020,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":84,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":124,\"flag_hit_gain\":287,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":133,\"hero_dmg\":65,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"blast_accounting\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blast_accounting\",\"feat_name\":\"爆破会计\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":72021,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":65,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":9,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":166,\"flag_hit_gain\":1207,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":179,\"hero_dmg\":93,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":46,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":44,\"route\":\"min\",\"seed\":72022,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":93,\"visited_count\":11,\"wallet_count\":10}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":10,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":155,\"flag_hit_gain\":220,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":166,\"hero_dmg\":78,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":35,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":49,\"route\":\"min\",\"seed\":72023,\"shop_gp_seq\":[74],\"stopped_at\":2,\"taken\":78,\"visited_count\":13,\"wallet_count\":20}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,35,35,35,35,35,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":238,\"flag_hit_gain\":2427,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":263,\"hero_dmg\":115,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"trap_burst\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":28,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":29,\"heal_gained\":7,\"hp_after\":24,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":24,\"hp_before\":24,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":72024,\"shop_gp_seq\":[60,60],\"stopped_at\":0,\"taken\":115,\"visited_count\":19,\"wallet_count\":28}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":107,\"flag_hit_gain\":431,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":124,\"hero_dmg\":61,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":33,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":72025,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":61,\"visited_count\":10,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":289,\"flag_hit_gain\":2172,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":309,\"hero_dmg\":108,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"blood_insight\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_insight\",\"feat_name\":\"见血开窍\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":24,\"heal_gained\":7,\"hp_after\":23,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":23,\"hp_before\":23,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":73,\"route\":\"min\",\"seed\":72026,\"shop_gp_seq\":[89,62],\"stopped_at\":0,\"taken\":108,\"visited_count\":19,\"wallet_count\":31}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":118,\"flag_hit_gain\":490,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":128,\"hero_dmg\":65,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"map_exchange\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":48,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":32,\"route\":\"min\",\"seed\":72027,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":65,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":16,\"choices\":18,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":304,\"flag_hit_gain\":1216,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":326,\"hero_dmg\":111,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"trap_instinct\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":38,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":30,\"heal_gained\":7,\"hp_after\":28,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":28,\"hp_before\":28,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":77,\"route\":\"min\",\"seed\":72028,\"shop_gp_seq\":[85,59],\"stopped_at\":0,\"taken\":111,\"visited_count\":21,\"wallet_count\":31}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":125,\"flag_hit_gain\":26,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":131,\"hero_dmg\":72,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":76,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":72029,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":72,\"visited_count\":10,\"wallet_count\":10}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":122,\"flag_hit_gain\":184,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":136,\"hero_dmg\":53,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"trap_instinct\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":34,\"route\":\"min\",\"seed\":72030,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":53,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":16,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,41,41,41,41,41,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":299,\"flag_hit_gain\":1950,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":320,\"hero_dmg\":97,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_echo\",\"executioner\",\"seal_stake\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":40,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":40,\"heal_gained\":6,\"hp_after\":41,\"hp_before\":35,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":41,\"hp_before\":41,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":78,\"route\":\"min\",\"seed\":72031,\"shop_gp_seq\":[111,73],\"stopped_at\":0,\"taken\":97,\"visited_count\":20,\"wallet_count\":33}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":185,\"flag_hit_gain\":1671,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":200,\"hero_dmg\":61,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"flag_burst\",\"executioner\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":55,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":22,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":43,\"route\":\"min\",\"seed\":72032,\"shop_gp_seq\":[72,39],\"stopped_at\":0,\"taken\":61,\"visited_count\":19,\"wallet_count\":26}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,36,36,36,36,45,45,45,45,45,51],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":263,\"flag_hit_gain\":1731,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":288,\"hero_dmg\":108,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"warning_beacon\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":2,\"hp_after\":45,\"hp_before\":43,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":45,\"hp_before\":45,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":72033,\"shop_gp_seq\":[65,77],\"stopped_at\":0,\"taken\":108,\"visited_count\":19,\"wallet_count\":28}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":272,\"flag_hit_gain\":91,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":289,\"hero_dmg\":101,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"last_stand\",\"seal_echo\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_stand\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_stand\",\"feat_name\":\"背水\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":26,\"hp_before\":26,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":73,\"route\":\"min\",\"seed\":72034,\"shop_gp_seq\":[95,60],\"stopped_at\":0,\"taken\":101,\"visited_count\":19,\"wallet_count\":31}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":242,\"flag_hit_gain\":-570,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":255,\"hero_dmg\":103,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"market_close\",\"seal_stake\",\"venom_edge\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":44,\"heal_gained\":5,\"hp_after\":20,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":20,\"hp_before\":20,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":7,\"hp_after\":19,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":71,\"route\":\"min\",\"seed\":72035,\"shop_gp_seq\":[84,59],\"stopped_at\":0,\"taken\":103,\"visited_count\":19,\"wallet_count\":28}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41,41,41,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":251,\"flag_hit_gain\":-108,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":268,\"hero_dmg\":95,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"pain_memory\",\"breaker_strike\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"pain_memory\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":97,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"pain_memory\",\"feat_name\":\"疼痛记忆\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":11,\"heal_gained\":8,\"hp_after\":35,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":35,\"hp_before\":35,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":72036,\"shop_gp_seq\":[113,49],\"stopped_at\":0,\"taken\":95,\"visited_count\":19,\"wallet_count\":32}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":88,\"flag_hit_gain\":125,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":95,\"hero_dmg\":46,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"flag_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":21,\"route\":\"min\",\"seed\":72037,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":46,\"visited_count\":10,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":164,\"flag_hit_gain\":293,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":198,\"hero_dmg\":52,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"blood_tax\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_tax\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":43,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":12,\"heal_gained\":7,\"hp_after\":35,\"hp_before\":28,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":35,\"hp_before\":35,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":45,\"route\":\"min\",\"seed\":72038,\"shop_gp_seq\":[93,43],\"stopped_at\":0,\"taken\":52,\"visited_count\":19,\"wallet_count\":29}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"flag_hit\":268,\"flag_hit_gain\":1293,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":289,\"hero_dmg\":106,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":19,\"heal_gained\":7,\"hp_after\":34,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":34,\"hp_before\":34,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":72039,\"shop_gp_seq\":[72,59],\"stopped_at\":0,\"taken\":106,\"visited_count\":19,\"wallet_count\":28}" + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":50,\"seal_hit_gain\":604,\"seal_miss\":8,\"seal_miss_penalty\":22,\"seal_placed\":60,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}}],\"rounds\":16,\"route\":\"min\",\"seed\":72000,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":42,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":57,\"seal_hit_gain\":416,\"seal_miss\":9,\"seal_miss_penalty\":16,\"seal_placed\":73,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":6,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"time_sand\",\"tier\":\"rare\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}}],\"rounds\":17,\"route\":\"min\",\"seed\":72001,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":37,\"seal_hit_gain\":-73,\"seal_miss\":10,\"seal_miss_penalty\":14,\"seal_placed\":52,\"hero_dmg\":23,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":11,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":15,\"route\":\"min\",\"seed\":72002,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":60,\"seal_hit_gain\":192,\"seal_miss\":7,\"seal_miss_penalty\":0,\"seal_placed\":69,\"hero_dmg\":22,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":24,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"trap_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":18,\"route\":\"min\",\"seed\":72003,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":46,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":19,\"seal_hit_gain\":-202,\"seal_miss\":5,\"seal_miss_penalty\":0,\"seal_placed\":27,\"hero_dmg\":10,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":6,\"route\":\"min\",\"seed\":72004,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":26,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":34,\"seal_hit_gain\":-7,\"seal_miss\":3,\"seal_miss_penalty\":14,\"seal_placed\":39,\"hero_dmg\":17,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":72005,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":17,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":66,\"seal_hit_gain\":134,\"seal_miss\":8,\"seal_miss_penalty\":6,\"seal_placed\":77,\"hero_dmg\":33,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attune_battery\",\"tier\":\"rare\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":20,\"route\":\"min\",\"seed\":72006,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":41,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,35],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":127,\"seal_hit_gain\":495,\"seal_miss\":9,\"seal_miss_penalty\":32,\"seal_placed\":144,\"hero_dmg\":39,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":12,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"fuse_wire\",\"field_dressing\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"fuse_wire\",\"feat_name\":\"保险丝\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"field_dressing\",\"feat_name\":\"战地包扎\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":37,\"route\":\"min\",\"seed\":72007,\"shop_gp_seq\":[51],\"stopped_at\":2,\"taken\":55,\"visited_count\":13,\"wallet_count\":17}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":15,\"seal_hit_gain\":184,\"seal_miss\":3,\"seal_miss_penalty\":8,\"seal_placed\":23,\"hero_dmg\":8,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":2,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":5,\"route\":\"min\",\"seed\":72008,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":24,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":11,\"seal_hit_gain\":-8,\"seal_miss\":2,\"seal_miss_penalty\":8,\"seal_placed\":15,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":3,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":3,\"route\":\"min\",\"seed\":72009,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":19,\"visited_count\":2,\"wallet_count\":3}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":39,\"seal_hit_gain\":494,\"seal_miss\":12,\"seal_miss_penalty\":6,\"seal_placed\":55,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":22,\"mine_hits\":10,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":13,\"route\":\"min\",\"seed\":72010,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":38,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":24,\"seal_hit_gain\":445,\"seal_miss\":3,\"seal_miss_penalty\":6,\"seal_placed\":30,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}}],\"rounds\":6,\"route\":\"min\",\"seed\":72011,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":31,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":21,\"seal_hit_gain\":116,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":29,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":72012,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":30,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36,36,36,36],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":106,\"seal_hit_gain\":435,\"seal_miss\":15,\"seal_miss_penalty\":40,\"seal_placed\":135,\"hero_dmg\":48,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":11,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"map_exchange\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":47,\"heal_gained\":6,\"hp_after\":36,\"hp_before\":30,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":36,\"hp_before\":36,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":72013,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":48,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":52,\"seal_hit_gain\":410,\"seal_miss\":6,\"seal_miss_penalty\":14,\"seal_placed\":64,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":7,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"seal_stake\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":5,\"hp_after\":9,\"hp_before\":4,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":9,\"hp_before\":9,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":18,\"route\":\"min\",\"seed\":72014,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":41,\"visited_count\":8,\"wallet_count\":7}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":75,\"seal_hit_gain\":375,\"seal_miss\":9,\"seal_miss_penalty\":16,\"seal_placed\":89,\"hero_dmg\":31,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[\"trap_instinct\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":16,\"hp_before\":11,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":16,\"hp_before\":16,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":24,\"route\":\"min\",\"seed\":72015,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":39,\"visited_count\":9,\"wallet_count\":8}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,36,36],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":43,\"seal_hit_gain\":149,\"seal_miss\":7,\"seal_miss_penalty\":24,\"seal_placed\":55,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":11,\"route\":\"min\",\"seed\":72016,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":28,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":26,\"seal_hit_gain\":-23,\"seal_miss\":8,\"seal_miss_penalty\":8,\"seal_placed\":35,\"hero_dmg\":14,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":9,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":10,\"route\":\"min\",\"seed\":72017,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":22,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":50,\"seal_hit_gain\":-84,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":62,\"hero_dmg\":22,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}}],\"rounds\":17,\"route\":\"min\",\"seed\":72018,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":38,\"visited_count\":7,\"wallet_count\":7}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":21,\"seal_hit_gain\":257,\"seal_miss\":4,\"seal_miss_penalty\":22,\"seal_placed\":32,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":4,\"policy\":\"normal\",\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":72019,\"shop_gp_seq\":[],\"stopped_at\":1,\"taken\":5,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":131,\"seal_hit_gain\":975,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":142,\"hero_dmg\":84,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"breaker_strike\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":36,\"route\":\"min\",\"seed\":72020,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":84,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":124,\"seal_hit_gain\":287,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":133,\"hero_dmg\":65,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"blast_accounting\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blast_accounting\",\"feat_name\":\"爆破会计\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":72021,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":65,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":9,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":166,\"seal_hit_gain\":1207,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":179,\"hero_dmg\":93,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":46,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":44,\"route\":\"min\",\"seed\":72022,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":93,\"visited_count\":11,\"wallet_count\":10}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":10,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":155,\"seal_hit_gain\":220,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":166,\"hero_dmg\":78,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"attune_battery\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attune_battery\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":35,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":49,\"route\":\"min\",\"seed\":72023,\"shop_gp_seq\":[74],\"stopped_at\":2,\"taken\":78,\"visited_count\":13,\"wallet_count\":20}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,35,35,35,35,35,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":238,\"seal_hit_gain\":2427,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":263,\"hero_dmg\":115,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"trap_burst\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":28,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":29,\"heal_gained\":7,\"hp_after\":24,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":24,\"hp_before\":24,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":72024,\"shop_gp_seq\":[60,60],\"stopped_at\":0,\"taken\":115,\"visited_count\":19,\"wallet_count\":28}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":107,\"seal_hit_gain\":431,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":124,\"hero_dmg\":61,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":33,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":29,\"route\":\"min\",\"seed\":72025,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":61,\"visited_count\":10,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":289,\"seal_hit_gain\":2172,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":309,\"hero_dmg\":108,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"blood_insight\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_insight\",\"feat_name\":\"见血开窍\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":24,\"heal_gained\":7,\"hp_after\":23,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":23,\"hp_before\":23,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":73,\"route\":\"min\",\"seed\":72026,\"shop_gp_seq\":[89,62],\"stopped_at\":0,\"taken\":108,\"visited_count\":19,\"wallet_count\":31}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":118,\"seal_hit_gain\":490,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":128,\"hero_dmg\":65,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"map_exchange\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":48,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":32,\"route\":\"min\",\"seed\":72027,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":65,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":16,\"choices\":18,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":304,\"seal_hit_gain\":1216,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":326,\"hero_dmg\":111,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"trap_instinct\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":38,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":30,\"heal_gained\":7,\"hp_after\":28,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":28,\"hp_before\":28,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":77,\"route\":\"min\",\"seed\":72028,\"shop_gp_seq\":[85,59],\"stopped_at\":0,\"taken\":111,\"visited_count\":21,\"wallet_count\":31}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":125,\"seal_hit_gain\":26,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":131,\"hero_dmg\":72,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":76,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":35,\"route\":\"min\",\"seed\":72029,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":72,\"visited_count\":10,\"wallet_count\":10}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":122,\"seal_hit_gain\":184,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":136,\"hero_dmg\":53,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"trap_instinct\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_instinct\",\"feat_name\":\"陷阱本能\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":34,\"route\":\"min\",\"seed\":72030,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":53,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":16,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,41,41,41,41,41,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":299,\"seal_hit_gain\":1950,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":320,\"hero_dmg\":97,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"seal_echo\",\"executioner\",\"seal_stake\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":40,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":40,\"heal_gained\":6,\"hp_after\":41,\"hp_before\":35,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":41,\"hp_before\":41,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":78,\"route\":\"min\",\"seed\":72031,\"shop_gp_seq\":[111,73],\"stopped_at\":0,\"taken\":97,\"visited_count\":20,\"wallet_count\":33}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":185,\"seal_hit_gain\":1671,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":200,\"hero_dmg\":61,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"seal_burst\",\"executioner\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":55,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":22,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":43,\"route\":\"min\",\"seed\":72032,\"shop_gp_seq\":[72,39],\"stopped_at\":0,\"taken\":61,\"visited_count\":19,\"wallet_count\":26}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,36,36,36,36,45,45,45,45,45,51],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":263,\"seal_hit_gain\":1731,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":288,\"hero_dmg\":108,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"warning_beacon\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":2,\"hp_after\":45,\"hp_before\":43,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":45,\"hp_before\":45,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":72033,\"shop_gp_seq\":[65,77],\"stopped_at\":0,\"taken\":108,\"visited_count\":19,\"wallet_count\":28}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":272,\"seal_hit_gain\":91,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":289,\"hero_dmg\":101,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"last_stand\",\"seal_echo\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_stand\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_stand\",\"feat_name\":\"背水\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":21,\"heal_gained\":7,\"hp_after\":26,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":26,\"hp_before\":26,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":73,\"route\":\"min\",\"seed\":72034,\"shop_gp_seq\":[95,60],\"stopped_at\":0,\"taken\":101,\"visited_count\":19,\"wallet_count\":31}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":242,\"seal_hit_gain\":-570,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":255,\"hero_dmg\":103,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":2,\"relics\":[\"market_close\",\"seal_stake\",\"venom_edge\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":44,\"heal_gained\":5,\"hp_after\":20,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":20,\"hp_before\":20,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":7,\"hp_after\":19,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":71,\"route\":\"min\",\"seed\":72035,\"shop_gp_seq\":[84,59],\"stopped_at\":0,\"taken\":103,\"visited_count\":19,\"wallet_count\":28}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41,41,41,44],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":251,\"seal_hit_gain\":-108,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":268,\"hero_dmg\":95,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"pain_memory\",\"breaker_strike\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"pain_memory\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":97,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"pain_memory\",\"feat_name\":\"疼痛记忆\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":11,\"heal_gained\":8,\"hp_after\":35,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":35,\"hp_before\":35,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":72036,\"shop_gp_seq\":[113,49],\"stopped_at\":0,\"taken\":95,\"visited_count\":19,\"wallet_count\":32}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":88,\"seal_hit_gain\":125,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":95,\"hero_dmg\":46,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"seal_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":21,\"route\":\"min\",\"seed\":72037,\"shop_gp_seq\":[],\"stopped_at\":2,\"taken\":46,\"visited_count\":10,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":15,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":164,\"seal_hit_gain\":293,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":198,\"hero_dmg\":52,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":0,\"relics\":[\"blood_tax\",\"last_drop\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_tax\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":43,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_tax\",\"feat_name\":\"血税\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":12,\"heal_gained\":7,\"hp_after\":35,\"hp_before\":28,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":35,\"hp_before\":35,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":45,\"route\":\"min\",\"seed\":72038,\"shop_gp_seq\":[93,43],\"stopped_at\":0,\"taken\":52,\"visited_count\":19,\"wallet_count\":29}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"on\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,38,38,38,38,38,41],\"equipped\":[\"morning_order\",\"wide_scout_band\",\"trial_pick\"],\"feat_mode\":\"off\",\"seal_hit\":268,\"seal_hit_gain\":1293,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":289,\"hero_dmg\":106,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"refreshes\":1,\"relics\":[\"breaker_strike\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":41,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":19,\"heal_gained\":7,\"hp_after\":34,\"hp_before\":27,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":34,\"hp_before\":34,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":72039,\"shop_gp_seq\":[72,59],\"stopped_at\":0,\"taken\":106,\"visited_count\":19,\"wallet_count\":28}" ], "jsonl": { "normal": { @@ -110,46 +110,46 @@ }, "shop": { "runsum": [ - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":16,\"flag_hit_gain\":192,\"flag_miss\":3,\"flag_miss_penalty\":8,\"flag_placed\":22,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":73000,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":21,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":25,\"flag_hit_gain\":0,\"flag_miss\":6,\"flag_miss_penalty\":6,\"flag_placed\":32,\"hero_dmg\":20,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":73001,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":28,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":35,\"flag_hit_gain\":-362,\"flag_miss\":2,\"flag_miss_penalty\":8,\"flag_placed\":44,\"hero_dmg\":30,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":2,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":13,\"route\":\"min\",\"seed\":73002,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":30,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":50,\"flag_hit_gain\":222,\"flag_miss\":5,\"flag_miss_penalty\":16,\"flag_placed\":60,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":17,\"route\":\"min\",\"seed\":73003,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":33,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":26,\"flag_hit_gain\":272,\"flag_miss\":8,\"flag_miss_penalty\":6,\"flag_placed\":38,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":11,\"route\":\"min\",\"seed\":73004,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":23,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":8,\"flag_hit_gain\":-91,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":18,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":22,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":73005,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":27,\"visited_count\":2,\"wallet_count\":3}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":48,\"flag_hit_gain\":399,\"flag_miss\":4,\"flag_miss_penalty\":0,\"flag_placed\":57,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":15,\"route\":\"min\",\"seed\":73006,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":34,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":33,\"flag_hit_gain\":52,\"flag_miss\":2,\"flag_miss_penalty\":6,\"flag_placed\":39,\"hero_dmg\":10,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":8,\"route\":\"min\",\"seed\":73007,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":18,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":59,\"flag_hit_gain\":155,\"flag_miss\":3,\"flag_miss_penalty\":14,\"flag_placed\":68,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"field_dressing\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"field_dressing\",\"feat_name\":\"战地包扎\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":23,\"route\":\"min\",\"seed\":73008,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":41,\"visited_count\":8,\"wallet_count\":7}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":27,\"flag_hit_gain\":-267,\"flag_miss\":3,\"flag_miss_penalty\":0,\"flag_placed\":37,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":73009,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":32,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":28,\"flag_hit_gain\":-83,\"flag_miss\":5,\"flag_miss_penalty\":4,\"flag_placed\":37,\"hero_dmg\":12,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":73010,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":20,\"visited_count\":4,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":20,\"flag_hit_gain\":9,\"flag_miss\":1,\"flag_miss_penalty\":6,\"flag_placed\":22,\"hero_dmg\":6,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":73011,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":22,\"visited_count\":3,\"wallet_count\":4}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":41,\"flag_hit_gain\":375,\"flag_miss\":5,\"flag_miss_penalty\":6,\"flag_placed\":53,\"hero_dmg\":19,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":14,\"route\":\"min\",\"seed\":73012,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":27,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":5,\"flag_hit_gain\":73,\"flag_miss\":3,\"flag_miss_penalty\":8,\"flag_placed\":10,\"hero_dmg\":2,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":2,\"route\":\"min\",\"seed\":73013,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":18,\"visited_count\":2,\"wallet_count\":3}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":26,\"flag_hit_gain\":184,\"flag_miss\":8,\"flag_miss_penalty\":20,\"flag_placed\":35,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":73014,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":15,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":23,\"flag_hit_gain\":15,\"flag_miss\":8,\"flag_miss_penalty\":24,\"flag_placed\":32,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":11,\"route\":\"min\",\"seed\":73015,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":23,\"visited_count\":5,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":23,\"flag_hit_gain\":134,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":34,\"hero_dmg\":13,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}}],\"rounds\":8,\"route\":\"min\",\"seed\":73016,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":29,\"visited_count\":5,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":42,\"flag_hit_gain\":129,\"flag_miss\":8,\"flag_miss_penalty\":-2,\"flag_placed\":53,\"hero_dmg\":19,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":36,\"mine_hits\":9,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":17,\"route\":\"min\",\"seed\":73017,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":55,\"visited_count\":7,\"wallet_count\":6}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":30,\"flag_hit_gain\":182,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":37,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":20,\"mine_hits\":7,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":73018,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":36,\"visited_count\":6,\"wallet_count\":5}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":69,\"flag_hit_gain\":275,\"flag_miss\":5,\"flag_miss_penalty\":8,\"flag_placed\":82,\"hero_dmg\":39,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":27,\"route\":\"min\",\"seed\":73019,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":55,\"visited_count\":9,\"wallet_count\":8}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,31,31,31,31,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":164,\"flag_hit_gain\":678,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":179,\"hero_dmg\":66,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":19,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":0,\"relics\":[\"flag_burst\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":56,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":6,\"hp_after\":11,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":11,\"hp_before\":11,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":42,\"route\":\"min\",\"seed\":73020,\"shop_buys\":7,\"shop_gp_seq\":[73,53],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":66,\"visited_count\":19,\"wallet_count\":22}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":135,\"flag_hit_gain\":474,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":143,\"hero_dmg\":87,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":2,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"last_drop\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":37,\"route\":\"min\",\"seed\":73021,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":87,\"visited_count\":10,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":144,\"flag_hit_gain\":248,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":157,\"hero_dmg\":70,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":2,\"relics\":[\"twin_pick\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":38,\"route\":\"min\",\"seed\":73022,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":70,\"visited_count\":11,\"wallet_count\":9}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":15,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,31,31,31,31,46],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":276,\"flag_hit_gain\":1426,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":294,\"hero_dmg\":123,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":1,\"relics\":[\"stone_skin\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":6,\"hp_after\":11,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":11,\"hp_before\":11,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":82,\"route\":\"min\",\"seed\":73023,\"shop_buys\":8,\"shop_gp_seq\":[94,70],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":123,\"visited_count\":20,\"wallet_count\":24}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":220,\"flag_hit_gain\":378,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":237,\"hero_dmg\":88,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":19,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":3,\"relics\":[\"venom_edge\",\"flag_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":26,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":7,\"hp_after\":32,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":32,\"hp_before\":32,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":60,\"route\":\"min\",\"seed\":73024,\"shop_buys\":6,\"shop_gp_seq\":[45,50],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":88,\"visited_count\":19,\"wallet_count\":20}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,51,51,51,51,56],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":224,\"flag_hit_gain\":643,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":244,\"hero_dmg\":72,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":17},\"refreshes\":1,\"relics\":[\"twin_pick\",\"last_stand\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_stand\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":10,\"hp_after\":40,\"hp_before\":30,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_stand\",\"feat_name\":\"背水\",\"hp_after\":40,\"hp_before\":40,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":54,\"route\":\"min\",\"seed\":73025,\"shop_buys\":8,\"shop_gp_seq\":[67,61],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":72,\"visited_count\":19,\"wallet_count\":22}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":255,\"flag_hit_gain\":362,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":267,\"hero_dmg\":142,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":18,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"executioner\",\"skip_mining\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":31,\"heal_gained\":7,\"hp_after\":29,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":29,\"hp_before\":29,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":87,\"route\":\"min\",\"seed\":73026,\"shop_buys\":8,\"shop_gp_seq\":[74,69],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":142,\"visited_count\":19,\"wallet_count\":23}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":170,\"flag_hit_gain\":123,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":185,\"hero_dmg\":63,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":18,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":0,\"relics\":[\"flag_burst\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"flag_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"flag_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":40,\"heal_gained\":6,\"hp_after\":18,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":18,\"hp_before\":18,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":41,\"route\":\"min\",\"seed\":73027,\"shop_buys\":7,\"shop_gp_seq\":[53,66],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":63,\"visited_count\":19,\"wallet_count\":22}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":202,\"flag_hit_gain\":303,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":220,\"hero_dmg\":104,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":1,\"relics\":[\"seal_echo\",\"market_close\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":23,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":43,\"heal_gained\":6,\"hp_after\":14,\"hp_before\":8,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":14,\"hp_before\":14,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":58,\"route\":\"min\",\"seed\":73028,\"shop_buys\":3,\"shop_gp_seq\":[46],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":104,\"visited_count\":15,\"wallet_count\":15}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":197,\"flag_hit_gain\":-852,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":207,\"hero_dmg\":111,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":2,\"relics\":[\"blood_honey\",\"blast_accounting\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_honey\",\"feat_name\":\"血蜜\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":31,\"heal_gained\":8,\"hp_after\":27,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blast_accounting\",\"feat_name\":\"爆破会计\",\"hp_after\":27,\"hp_before\":27,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":63,\"route\":\"min\",\"seed\":73029,\"shop_buys\":4,\"shop_gp_seq\":[68],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":111,\"visited_count\":15,\"wallet_count\":16}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,31,31,31,31,36],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":255,\"flag_hit_gain\":2395,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":271,\"hero_dmg\":90,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":17,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"warning_beacon\",\"trap_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":58,\"heal_gained\":5,\"hp_after\":20,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":20,\"hp_before\":20,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":56,\"heal_gained\":6,\"hp_after\":25,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":25,\"hp_before\":25,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":75,\"route\":\"min\",\"seed\":73030,\"shop_buys\":8,\"shop_gp_seq\":[92,80],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":90,\"visited_count\":19,\"wallet_count\":23}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":191,\"flag_hit_gain\":862,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":204,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":2,\"relics\":[\"execution_scholar\",\"market_close\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"execution_scholar\",\"feat_name\":\"斩首学者\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":6,\"hp_after\":12,\"hp_before\":6,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":12,\"hp_before\":12,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":64,\"route\":\"min\",\"seed\":73031,\"shop_buys\":4,\"shop_gp_seq\":[62],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":100,\"visited_count\":15,\"wallet_count\":16}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":285,\"flag_hit_gain\":2024,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":298,\"hero_dmg\":119,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":18,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":1,\"relics\":[\"seal_echo\",\"seal_stake\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":25,\"heal_gained\":6,\"hp_after\":17,\"hp_before\":11,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":17,\"hp_before\":17,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":84,\"route\":\"min\",\"seed\":73032,\"shop_buys\":8,\"shop_gp_seq\":[62,69],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":119,\"visited_count\":20,\"wallet_count\":23}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":133,\"flag_hit_gain\":896,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":146,\"hero_dmg\":69,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"seal_echo\",\"stone_skin\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":40,\"route\":\"min\",\"seed\":73033,\"shop_buys\":4,\"shop_gp_seq\":[61],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":69,\"visited_count\":13,\"wallet_count\":14}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,26,26,26,46],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":240,\"flag_hit_gain\":1777,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":255,\"hero_dmg\":84,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":19,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"seal_stake\",\"twin_pick\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":26,\"heal_gained\":5,\"hp_after\":18,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":18,\"hp_before\":18,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":68,\"route\":\"min\",\"seed\":73034,\"shop_buys\":8,\"shop_gp_seq\":[70,72],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":84,\"visited_count\":19,\"wallet_count\":23}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":137,\"flag_hit_gain\":1027,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":149,\"hero_dmg\":80,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":20,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":1,\"relics\":[\"trap_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":48,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":45,\"route\":\"min\",\"seed\":73035,\"shop_buys\":4,\"shop_gp_seq\":[67],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":80,\"visited_count\":13,\"wallet_count\":14}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":15,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":211,\"flag_hit_gain\":1222,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":225,\"hero_dmg\":98,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":21,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"market_close\",\"chain_traps\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":29,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":5,\"hp_after\":15,\"hp_before\":10,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":15,\"hp_before\":15,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":63,\"route\":\"min\",\"seed\":73036,\"shop_buys\":3,\"shop_gp_seq\":[53],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":98,\"visited_count\":18,\"wallet_count\":17}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":255,\"flag_hit_gain\":1567,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":275,\"hero_dmg\":110,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":21,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":0,\"relics\":[\"chain_traps\",\"hard_hat\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":6,\"hp_after\":19,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":75,\"route\":\"min\",\"seed\":73037,\"shop_buys\":7,\"shop_gp_seq\":[64,54],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":110,\"visited_count\":19,\"wallet_count\":22}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41,41,51],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":228,\"flag_hit_gain\":798,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":242,\"hero_dmg\":97,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":18},\"refreshes\":0,\"relics\":[\"map_exchange\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":87,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":31,\"heal_gained\":8,\"hp_after\":15,\"hp_before\":7,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":15,\"hp_before\":15,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":73038,\"shop_buys\":9,\"shop_gp_seq\":[115,73],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":97,\"visited_count\":19,\"wallet_count\":24}", - "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":13,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"flag_hit\":215,\"flag_hit_gain\":1291,\"flag_miss\":0,\"flag_miss_penalty\":0,\"flag_placed\":228,\"hero_dmg\":91,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":22,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":2,\"relics\":[\"breaker_strike\",\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":56,\"heal_gained\":6,\"hp_after\":7,\"hp_before\":1,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":7,\"hp_before\":7,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":73039,\"shop_buys\":4,\"shop_gp_seq\":[90],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":91,\"visited_count\":16,\"wallet_count\":18}" + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":16,\"seal_hit_gain\":192,\"seal_miss\":3,\"seal_miss_penalty\":8,\"seal_placed\":22,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":73000,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":21,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":25,\"seal_hit_gain\":0,\"seal_miss\":6,\"seal_miss_penalty\":6,\"seal_placed\":32,\"hero_dmg\":20,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":73001,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":28,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":35,\"seal_hit_gain\":-362,\"seal_miss\":2,\"seal_miss_penalty\":8,\"seal_placed\":44,\"hero_dmg\":30,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":2,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":13,\"route\":\"min\",\"seed\":73002,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":30,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":50,\"seal_hit_gain\":222,\"seal_miss\":5,\"seal_miss_penalty\":16,\"seal_placed\":60,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"max_hp\",\"tier\":\"excellent\",\"value\":10}}],\"rounds\":17,\"route\":\"min\",\"seed\":73003,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":33,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":26,\"seal_hit_gain\":272,\"seal_miss\":8,\"seal_miss_penalty\":6,\"seal_placed\":38,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":8,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":11,\"route\":\"min\",\"seed\":73004,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":23,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":8,\"seal_hit_gain\":-91,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":18,\"hero_dmg\":5,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":22,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":4,\"route\":\"min\",\"seed\":73005,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":27,\"visited_count\":2,\"wallet_count\":3}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":48,\"seal_hit_gain\":399,\"seal_miss\":4,\"seal_miss_penalty\":0,\"seal_placed\":57,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":15,\"route\":\"min\",\"seed\":73006,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":34,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":33,\"seal_hit_gain\":52,\"seal_miss\":2,\"seal_miss_penalty\":6,\"seal_placed\":39,\"hero_dmg\":10,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":8,\"route\":\"min\",\"seed\":73007,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":18,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":6,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":59,\"seal_hit_gain\":155,\"seal_miss\":3,\"seal_miss_penalty\":14,\"seal_placed\":68,\"hero_dmg\":25,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"三干宽门\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"field_dressing\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"field_dressing\",\"feat_name\":\"战地包扎\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":23,\"route\":\"min\",\"seed\":73008,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":41,\"visited_count\":8,\"wallet_count\":7}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":27,\"seal_hit_gain\":-267,\"seal_miss\":3,\"seal_miss_penalty\":0,\"seal_placed\":37,\"hero_dmg\":18,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":14,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":73009,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":32,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":3,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":28,\"seal_hit_gain\":-83,\"seal_miss\":5,\"seal_miss_penalty\":4,\"seal_placed\":37,\"hero_dmg\":12,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":9,\"route\":\"min\",\"seed\":73010,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":20,\"visited_count\":4,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":3,\"choices\":2,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":20,\"seal_hit_gain\":9,\"seal_miss\":1,\"seal_miss_penalty\":6,\"seal_placed\":22,\"hero_dmg\":6,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":7,\"route\":\"min\",\"seed\":73011,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":22,\"visited_count\":3,\"wallet_count\":4}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":41,\"seal_hit_gain\":375,\"seal_miss\":5,\"seal_miss_penalty\":6,\"seal_placed\":53,\"hero_dmg\":19,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":3,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":14,\"route\":\"min\",\"seed\":73012,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":27,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":2,\"choices\":1,\"cleared\":false,\"encounter_max_hp_seq\":[26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":5,\"seal_hit_gain\":73,\"seal_miss\":3,\"seal_miss_penalty\":8,\"seal_placed\":10,\"hero_dmg\":2,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[],\"rounds\":2,\"route\":\"min\",\"seed\":73013,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":18,\"visited_count\":2,\"wallet_count\":3}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":26,\"seal_hit_gain\":184,\"seal_miss\":8,\"seal_miss_penalty\":20,\"seal_placed\":35,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":0,\"mine_hits\":4,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":73014,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":15,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":23,\"seal_hit_gain\":15,\"seal_miss\":8,\"seal_miss_penalty\":24,\"seal_placed\":32,\"hero_dmg\":15,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":8,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"rap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"rap\",\"tier\":\"rare\",\"value\":3}}],\"rounds\":11,\"route\":\"min\",\"seed\":73015,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":23,\"visited_count\":5,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":4,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":23,\"seal_hit_gain\":134,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":34,\"hero_dmg\":13,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\",\"地精洞窟·赏战整\"],\"levels_cleared\":0,\"mine_dmg\":16,\"mine_hits\":5,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}}],\"rounds\":8,\"route\":\"min\",\"seed\":73016,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":29,\"visited_count\":5,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":5,\"choices\":6,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":42,\"seal_hit_gain\":129,\"seal_miss\":8,\"seal_miss_penalty\":-2,\"seal_placed\":53,\"hero_dmg\":19,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\"],\"levels_cleared\":0,\"mine_dmg\":36,\"mine_hits\":9,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":17,\"route\":\"min\",\"seed\":73017,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":55,\"visited_count\":7,\"wallet_count\":6}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":4,\"choices\":5,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":30,\"seal_hit_gain\":182,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":37,\"hero_dmg\":16,\"hp_pct\":0,\"keystone_total\":0,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\"],\"levels_cleared\":0,\"mine_dmg\":20,\"mine_hits\":7,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}}],\"rounds\":10,\"route\":\"min\",\"seed\":73018,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":1,\"taken\":36,\"visited_count\":6,\"wallet_count\":5}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":7,\"choices\":7,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":69,\"seal_hit_gain\":275,\"seal_miss\":5,\"seal_miss_penalty\":8,\"seal_placed\":82,\"hero_dmg\":39,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":1,\"mine_dmg\":16,\"mine_hits\":6,\"policy\":\"normal\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"hard_hat\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":49,\"heal_gained\":5,\"hp_after\":17,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":17,\"hp_before\":17,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":27,\"route\":\"min\",\"seed\":73019,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":55,\"visited_count\":9,\"wallet_count\":8}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,31,31,31,31,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":164,\"seal_hit_gain\":678,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":179,\"hero_dmg\":66,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":19,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":0,\"relics\":[\"seal_burst\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_instinct\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"}],\"gp\":56,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":6,\"hp_after\":11,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":11,\"hp_before\":11,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":42,\"route\":\"min\",\"seed\":73020,\"shop_buys\":7,\"shop_gp_seq\":[73,53],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":66,\"visited_count\":19,\"wallet_count\":22}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":8,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":135,\"seal_hit_gain\":474,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":143,\"hero_dmg\":87,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":23,\"feat_ticket\":0,\"heal\":2,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"last_drop\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"heal\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"heal\",\"tier\":\"excellent\",\"value\":6}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_drop\",\"feat_name\":\"一滴不剩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":37,\"route\":\"min\",\"seed\":73021,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":87,\"visited_count\":10,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":8,\"choices\":9,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":144,\"seal_hit_gain\":248,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":157,\"hero_dmg\":70,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":2,\"relics\":[\"twin_pick\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":0,\"hp_after\":26,\"hp_before\":26,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":38,\"route\":\"min\",\"seed\":73022,\"shop_buys\":0,\"shop_gp_seq\":[],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":70,\"visited_count\":11,\"wallet_count\":9}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":15,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,31,31,31,31,46],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":276,\"seal_hit_gain\":1426,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":294,\"hero_dmg\":123,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":1,\"relics\":[\"stone_skin\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":21,\"hp_before\":16,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":21,\"hp_before\":21,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":6,\"hp_after\":11,\"hp_before\":5,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":11,\"hp_before\":11,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":82,\"route\":\"min\",\"seed\":73023,\"shop_buys\":8,\"shop_gp_seq\":[94,70],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":123,\"visited_count\":20,\"wallet_count\":24}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":220,\"seal_hit_gain\":378,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":237,\"hero_dmg\":88,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":19,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":3,\"relics\":[\"venom_edge\",\"seal_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"excellent\"},{\"kind\":\"max_hp\",\"tier\":\"excellent\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"venom_edge\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":26,\"heal_gained\":3,\"hp_after\":26,\"hp_before\":23,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"venom_edge\",\"feat_name\":\"淬毒刃纹\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":7,\"hp_after\":32,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":32,\"hp_before\":32,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":60,\"route\":\"min\",\"seed\":73024,\"shop_buys\":6,\"shop_gp_seq\":[45,50],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":88,\"visited_count\":19,\"wallet_count\":20}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,51,51,51,51,56],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":224,\"seal_hit_gain\":643,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":244,\"hero_dmg\":72,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":17},\"refreshes\":1,\"relics\":[\"twin_pick\",\"last_stand\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"attack\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"last_stand\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":10,\"hp_after\":40,\"hp_before\":30,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"last_stand\",\"feat_name\":\"背水\",\"hp_after\":40,\"hp_before\":40,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":54,\"route\":\"min\",\"seed\":73025,\"shop_buys\":8,\"shop_gp_seq\":[67,61],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":72,\"visited_count\":19,\"wallet_count\":22}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,36,36,36,36,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":255,\"seal_hit_gain\":362,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":267,\"hero_dmg\":142,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":18,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"executioner\",\"skip_mining\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"executioner\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":30,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"executioner\",\"feat_name\":\"处刑台\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":31,\"heal_gained\":7,\"hp_after\":29,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":29,\"hp_before\":29,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":87,\"route\":\"min\",\"seed\":73026,\"shop_buys\":8,\"shop_gp_seq\":[74,69],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":142,\"visited_count\":19,\"wallet_count\":23}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":170,\"seal_hit_gain\":123,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":185,\"hero_dmg\":63,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":22,\"attack\":18,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":0,\"relics\":[\"seal_burst\",\"seal_smith\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":34,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_burst\",\"feat_name\":\"封印爆裂\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_smith\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":40,\"heal_gained\":6,\"hp_after\":18,\"hp_before\":12,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_smith\",\"feat_name\":\"封印匠\",\"hp_after\":18,\"hp_before\":18,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":41,\"route\":\"min\",\"seed\":73027,\"shop_buys\":7,\"shop_gp_seq\":[53,66],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":63,\"visited_count\":19,\"wallet_count\":22}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":202,\"seal_hit_gain\":303,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":220,\"hero_dmg\":104,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":23,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":1,\"relics\":[\"seal_echo\",\"market_close\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"refresh\",\"tier\":\"excellent\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":23,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":43,\"heal_gained\":6,\"hp_after\":14,\"hp_before\":8,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":14,\"hp_before\":14,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":58,\"route\":\"min\",\"seed\":73028,\"shop_buys\":3,\"shop_gp_seq\":[46],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":104,\"visited_count\":15,\"wallet_count\":15}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":197,\"seal_hit_gain\":-852,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":207,\"hero_dmg\":111,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":2,\"relics\":[\"blood_honey\",\"blast_accounting\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"time_sand\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"time_sand\",\"tier\":\"rare\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":45,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blood_honey\",\"feat_name\":\"血蜜\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":31,\"heal_gained\":8,\"hp_after\":27,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"blast_accounting\",\"feat_name\":\"爆破会计\",\"hp_after\":27,\"hp_before\":27,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":63,\"route\":\"min\",\"seed\":73029,\"shop_buys\":4,\"shop_gp_seq\":[68],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":111,\"visited_count\":15,\"wallet_count\":16}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,31,31,31,31,36],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":255,\"seal_hit_gain\":2395,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":271,\"hero_dmg\":90,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\",\"三干中廊\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":17,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"warning_beacon\",\"trap_burst\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":58,\"heal_gained\":5,\"hp_after\":20,\"hp_before\":15,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"warning_beacon\",\"feat_name\":\"示警烟火\",\"hp_after\":20,\"hp_before\":20,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":56,\"heal_gained\":6,\"hp_after\":25,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":25,\"hp_before\":25,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":75,\"route\":\"min\",\"seed\":73030,\"shop_buys\":8,\"shop_gp_seq\":[92,80],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":90,\"visited_count\":19,\"wallet_count\":23}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":11,\"choices\":12,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":191,\"seal_hit_gain\":862,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":204,\"hero_dmg\":100,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":22,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":2,\"relics\":[\"execution_scholar\",\"market_close\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"perfect_insurance\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"perfect_insurance\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":5,\"hp_after\":26,\"hp_before\":21,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"execution_scholar\",\"feat_name\":\"斩首学者\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"geologist\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":28,\"heal_gained\":6,\"hp_after\":12,\"hp_before\":6,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":12,\"hp_before\":12,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":64,\"route\":\"min\",\"seed\":73031,\"shop_buys\":4,\"shop_gp_seq\":[62],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":100,\"visited_count\":15,\"wallet_count\":16}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":17,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":285,\"seal_hit_gain\":2024,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":298,\"hero_dmg\":119,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":18,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":1,\"relics\":[\"seal_echo\",\"seal_stake\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"armor\",\"tier\":\"excellent\",\"value\":2}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_echo\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":36,\"heal_gained\":5,\"hp_after\":24,\"hp_before\":19,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"hp_after\":24,\"hp_before\":24,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":25,\"heal_gained\":6,\"hp_after\":17,\"hp_before\":11,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":17,\"hp_before\":17,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":84,\"route\":\"min\",\"seed\":73032,\"shop_buys\":8,\"shop_gp_seq\":[62,69],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":119,\"visited_count\":20,\"wallet_count\":23}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":133,\"seal_hit_gain\":896,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":146,\"hero_dmg\":69,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":21,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"seal_echo\",\"stone_skin\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"feat_ticket\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"feat_archetype\":\"\",\"feat_id\":\"seal_echo\",\"feat_name\":\"封印回响\",\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":39,\"heal_gained\":5,\"hp_after\":23,\"hp_before\":18,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":23,\"hp_before\":23,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":40,\"route\":\"min\",\"seed\":73033,\"shop_buys\":4,\"shop_gp_seq\":[61],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":69,\"visited_count\":13,\"wallet_count\":14}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,26,26,26,46],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":240,\"seal_hit_gain\":1777,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":255,\"hero_dmg\":84,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\",\"三干宽门\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":19,\"feat_ticket\":0,\"heal\":3,\"max_hp\":20},\"refreshes\":1,\"relics\":[\"seal_stake\",\"twin_pick\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"refresh\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"refresh\",\"tier\":\"excellent\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":50,\"heal_gained\":4,\"hp_after\":26,\"hp_before\":22,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"seal_stake\",\"feat_name\":\"封印桩\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":26,\"heal_gained\":5,\"hp_after\":18,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"twin_pick\",\"feat_name\":\"双管镐\",\"hp_after\":18,\"hp_before\":18,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}}],\"rounds\":68,\"route\":\"min\",\"seed\":73034,\"shop_buys\":8,\"shop_gp_seq\":[70,72],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":84,\"visited_count\":19,\"wallet_count\":23}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":9,\"choices\":11,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":137,\"seal_hit_gain\":1027,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":149,\"hero_dmg\":80,\"hp_pct\":0,\"keystone_total\":3,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":1,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":20,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":1,\"relics\":[\"trap_burst\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"trap_burst\",\"kind\":\"relic\",\"tier\":\"rare\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":48,\"heal_gained\":5,\"hp_after\":22,\"hp_before\":17,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"trap_burst\",\"feat_name\":\"陷阱爆发\",\"hp_after\":22,\"hp_before\":22,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"rare\",\"value\":0}}],\"rounds\":45,\"route\":\"min\",\"seed\":73035,\"shop_buys\":4,\"shop_gp_seq\":[67],\"shop_mode\":\"pool\",\"stopped_at\":2,\"taken\":80,\"visited_count\":13,\"wallet_count\":14}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":15,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,26,26,26],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":211,\"seal_hit_gain\":1222,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":225,\"hero_dmg\":98,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"地精洞窟·主线洞道(现行)\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":21,\"attack\":21,\"feat_ticket\":0,\"heal\":3,\"max_hp\":22},\"refreshes\":0,\"relics\":[\"market_close\",\"chain_traps\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"last_drop\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":29,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"market_close\",\"feat_name\":\"收盘\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"common\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":51,\"heal_gained\":5,\"hp_after\":15,\"hp_before\":10,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":15,\"hp_before\":15,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":63,\"route\":\"min\",\"seed\":73036,\"shop_buys\":3,\"shop_gp_seq\":[53],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":98,\"visited_count\":18,\"wallet_count\":17}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":14,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,31,31,31,31,31,41],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":255,\"seal_hit_gain\":1567,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":275,\"hero_dmg\":110,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"地精洞窟·先赏后整\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":21,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":19},\"refreshes\":0,\"relics\":[\"chain_traps\",\"hard_hat\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"gp\",\"tier\":\"common\"},{\"kind\":\"armor\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"chain_traps\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_honey\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"twin_pick\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":42,\"heal_gained\":2,\"hp_after\":26,\"hp_before\":24,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"chain_traps\",\"feat_name\":\"连环陷阱\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"hard_hat\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"frontier_miner\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":27,\"heal_gained\":6,\"hp_after\":19,\"hp_before\":13,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"hard_hat\",\"feat_name\":\"安全帽\",\"hp_after\":19,\"hp_before\":19,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":75,\"route\":\"min\",\"seed\":73037,\"shop_buys\":7,\"shop_gp_seq\":[64,54],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":110,\"visited_count\":19,\"wallet_count\":22}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":16,\"cleared\":true,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,41,41,41,41,51],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":228,\"seal_hit_gain\":798,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":242,\"hero_dmg\":97,\"hp_pct\":0,\"keystone_total\":9,\"level_templates\":[\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"地精洞窟·先整后赏\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\",\"宽廊斜岔\"],\"levels_cleared\":3,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":3,\"armor\":20,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":18},\"refreshes\":0,\"relics\":[\"map_exchange\",\"stone_skin\"],\"result\":\"completed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"gp\",\"tier\":\"excellent\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"gp\",\"tier\":\"excellent\",\"value\":50}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"map_exchange\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"blood_insight\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"blast_accounting\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":87,\"heal_gained\":1,\"hp_after\":26,\"hp_before\":25,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"map_exchange\",\"feat_name\":\"弃图兑换\",\"hp_after\":26,\"hp_before\":26,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"field_dressing\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"stone_skin\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"}],\"gp\":31,\"heal_gained\":8,\"hp_after\":15,\"hp_before\":7,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"stone_skin\",\"feat_name\":\"石肤\",\"hp_after\":15,\"hp_before\":15,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":70,\"route\":\"min\",\"seed\":73038,\"shop_buys\":9,\"shop_gp_seq\":[115,73],\"shop_mode\":\"pool\",\"stopped_at\":0,\"taken\":97,\"visited_count\":19,\"wallet_count\":24}", + "RUNSUM {\"atk_pct\":0,\"attune\":\"off\",\"battles\":13,\"choices\":13,\"cleared\":false,\"encounter_max_hp_seq\":[26,26,26,26,26,26,26,26,26,26,31,31,31],\"equipped\":[],\"feat_mode\":\"off\",\"seal_hit\":215,\"seal_hit_gain\":1291,\"seal_miss\":0,\"seal_miss_penalty\":0,\"seal_placed\":228,\"hero_dmg\":91,\"hp_pct\":0,\"keystone_total\":6,\"level_templates\":[\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"地精洞窟·整战赏\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"窄廊短支\",\"宽廊双干(现行)\",\"宽廊双干(现行)\"],\"levels_cleared\":2,\"mine_dmg\":0,\"mine_hits\":0,\"policy\":\"perfect\",\"pool_stock\":{\"ap\":2,\"armor\":22,\"attack\":20,\"feat_ticket\":0,\"heal\":3,\"max_hp\":21},\"refreshes\":2,\"relics\":[\"breaker_strike\",\"skip_mining\"],\"result\":\"failed\",\"reward_events\":[{\"node_curio_pick\":[{\"kind\":\"attack\",\"tier\":\"common\"},{\"kind\":\"max_hp\",\"tier\":\"common\"},{\"kind\":\"ap\",\"tier\":\"rare\"}]},{\"curio_resolved\":{\"context\":\"reward_node\",\"level_index\":1,\"picked\":\"ap\",\"tier\":\"rare\",\"value\":1}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"breaker_strike\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"execution_scholar\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"warning_beacon\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":35,\"heal_gained\":5,\"hp_after\":25,\"hp_before\":20,\"keystone_gained\":3,\"keystone_total\":3,\"level_index\":1}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"breaker_strike\",\"feat_name\":\"破封一击\",\"hp_after\":25,\"hp_before\":25,\"level_index\":1,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}},{\"curio_pick\":{\"aux_cleared\":0,\"candidates\":[{\"feat_id\":\"seal_stake\",\"kind\":\"relic\",\"tier\":\"common\"},{\"feat_id\":\"skip_mining\",\"kind\":\"relic\",\"tier\":\"excellent\"},{\"feat_id\":\"market_close\",\"kind\":\"relic\",\"tier\":\"common\"}],\"gp\":56,\"heal_gained\":6,\"hp_after\":7,\"hp_before\":1,\"keystone_gained\":3,\"keystone_total\":6,\"level_index\":2}},{\"curio_resolved\":{\"feat_archetype\":\"\",\"feat_id\":\"skip_mining\",\"feat_name\":\"跳格采掘\",\"hp_after\":7,\"hp_before\":7,\"level_index\":2,\"picked\":\"relic\",\"tier\":\"excellent\",\"value\":0}}],\"rounds\":66,\"route\":\"min\",\"seed\":73039,\"shop_buys\":4,\"shop_gp_seq\":[90],\"shop_mode\":\"pool\",\"stopped_at\":3,\"taken\":91,\"visited_count\":16,\"wallet_count\":18}" ], "jsonl": { "normal": { diff --git a/game/tests/run_all.gd b/game/tests/run_all.gd index aee451bb..83c64933 100644 --- a/game/tests/run_all.gd +++ b/game/tests/run_all.gd @@ -72,7 +72,7 @@ func _suites() -> Array: {"path": "res://tests/integration/save_rng_roundtrip_test.gd", "expect": 0}, # 存档⇄RNG 快照往返(SaveManager 迁移链 × 断点消费 × RNG 续跑 × 停点态确定性) # ---- 迭代 29 T5 覆盖补洞:此前零指名的 core 四件与呈现层两件 ---- {"path": "res://tests/unit/core/board_generator_test.gd", "expect": 0}, # 棋盘生成(尺寸合表/数字=八邻雷数/同种子逐位一致/可推理自洽) - {"path": "res://tests/unit/core/minesweeper_rules_test.gd", "expect": 0}, # 排雷规则(装板不变量/挖的 face 规则/揭示推进/插旗/目录外拒) + {"path": "res://tests/unit/core/minesweeper_rules_test.gd", "expect": 0}, # 排雷规则(装板不变量/挖的 face 规则/揭示推进/封印/目录外拒) {"path": "res://tests/unit/core/config_db_resolver_test.gd", "expect": 0}, # 配置解析(ceil 偏难语义/行集行序/难度 clamp) {"path": "res://tests/unit/core/config_db_cross_validator_test.gd", "expect": 0}, # 跨表校验(正向零错/悬空 skill_id/side 反向) {"path": "res://tests/unit/presentation/hud_presenter_test.gd", "expect": 0}, # HUD 投影文案(逐拒绝原因/兜底不空) diff --git a/game/tests/smoke/critical-paths.md b/game/tests/smoke/critical-paths.md index 8cfadbb3..af01c964 100644 --- a/game/tests/smoke/critical-paths.md +++ b/game/tests/smoke/critical-paths.md @@ -13,8 +13,8 @@ ## Core Mechanic 3. 挖掘:单格 1 AP、数字亮起与 8 邻雷数一致、连锁免费撕开一片 -4. 插旗/拔旗/挪旗:AP 价目正确、连锁止于旗(旗挡链)属正常 -5. 移动:已开格瞬移、**已引爆雷格可通行可读**(工程债呈现半边) +4. 封印/撤封印/挪封印:AP 价目正确、连锁止于封印(封印挡链)属正常 +5. 移动:已开格瞬移、**已引爆危险格可通行可读**(工程债呈现半边) 6. 停手:RAP 1:1 转存、下轮 AP 硬重置同图继续 7. 轮末结算:明细逐行呈现、来源标注可读(P2——"这一行是我哪步扫雷带来的"可答) 8. 清图:清图奖励兑付 + 完美排雷高光(零误标时双份)+ 换新图;未刷新的停手轮不换图 diff --git a/game/tests/unit/core/board_generator_test.gd b/game/tests/unit/core/board_generator_test.gd index f593cdaa..12130ee0 100644 --- a/game/tests/unit/core/board_generator_test.gd +++ b/game/tests/unit/core/board_generator_test.gd @@ -50,7 +50,7 @@ func _test_generate_shape_and_mines() -> void: for c in b.mines: if not b.in_bounds(c as Vector2i): all_in_bounds = false - Kit.check("全部雷格在界内", all_in_bounds) + Kit.check("全部危险格在界内", all_in_bounds) Kit.check("生成期指标集已落盘(metrics 非空)", not b.metrics.is_empty()) diff --git a/game/tests/unit/core/effect_words_t1_test.gd b/game/tests/unit/core/effect_words_t1_test.gd index 2169b743..16082ffd 100644 --- a/game/tests/unit/core/effect_words_t1_test.gd +++ b/game/tests/unit/core/effect_words_t1_test.gd @@ -15,10 +15,10 @@ func _init() -> void: Kit.check_quiet(EffectEngineScript.EVENTS.has("dig_stop") and EffectEngineScript.EVENTS.has("battle_won"), "新事件在册:dig_stop/battle_won〔专长批 V1〕") Kit.check_quiet(EffectEngineScript.FACTS.has("hp_ratio") and EffectEngineScript.FACTS.has("is_edge_cell") - and EffectEngineScript.FACTS.has("new_resource_type") and EffectEngineScript.FACTS.has("dug_under_flag") + and EffectEngineScript.FACTS.has("new_resource_type") and EffectEngineScript.FACTS.has("dug_under_seal") and EffectEngineScript.FACTS.has("ap_exhausted_last") and EffectEngineScript.FACTS.has("ap_left") and EffectEngineScript.FACTS.has("is_blank_zero") and EffectEngineScript.FACTS.has("amount"), - "新事实在册:hp_ratio/is_edge_cell/new_resource_type/dug_under_flag/ap_exhausted_last/ap_left/is_blank_zero/amount〔专长批 V1〕") + "新事实在册:hp_ratio/is_edge_cell/new_resource_type/dug_under_seal/ap_exhausted_last/ap_left/is_blank_zero/amount〔专长批 V1〕") Kit.check_quiet(EffectEngineScript.EFFECT_KINDS.has("heal") and EffectEngineScript.EFFECT_KINDS.has("ac_bonus") and EffectEngineScript.EFFECT_KINDS.has("damage_reduce") and EffectEngineScript.EFFECT_KINDS.has("bonus_delta") and EffectEngineScript.EFFECT_KINDS.has("blast_scaled") and EffectEngineScript.EFFECT_KINDS.has("preview_area") diff --git a/game/tests/unit/core/feat_vouchers_test.gd b/game/tests/unit/core/feat_vouchers_test.gd index d2fe9696..1fa1f976 100644 --- a/game/tests/unit/core/feat_vouchers_test.gd +++ b/game/tests/unit/core/feat_vouchers_test.gd @@ -74,7 +74,7 @@ func _init() -> void: a._curio_pending = {"candidates": [{"kind": "gp", "tier": "common"}]} var gp_taken_before := int(a._curio_taken.get("gp", 0)) Kit.check_quiet(a.pick_curio("gp", "common") and int(a._curio_taken.get("gp", 0)) == gp_taken_before + 1, - "留任小金币袋:GP 通道兑付受理(gp 计数入账——路由零变化)〔专长批 V10〕") + "留任小GP 袋:GP 通道兑付受理(gp 计数入账——路由零变化)〔专长批 V10〕") var hp_before := int(a.ledger.get("hero_hp", 0)) a._curio_pending = {"candidates": [{"kind": "heal", "tier": "excellent"}]} Kit.check_quiet(a.pick_curio("heal", "excellent") and int(a.ledger.get("hero_hp", 0)) == mini(hp_before + int(db.adventure.curio_value("heal", "excellent")), a.effective_max_hp()), diff --git a/game/tests/unit/core/minesweeper_rules_test.gd b/game/tests/unit/core/minesweeper_rules_test.gd index 1e51dbad..b95c08f9 100644 --- a/game/tests/unit/core/minesweeper_rules_test.gd +++ b/game/tests/unit/core/minesweeper_rules_test.gd @@ -1,6 +1,6 @@ # tests/unit/core/minesweeper_rules_test.gd — 排雷规则直接单测(迭代 29 T5 补洞:该模块此前零指名) # 断言面 = 装板后的盘面不变量与意图受理:装板零揭示、安全格余量=安全格总数、挖安全格后揭示 -# 且余量递减、插旗落旗态、禁挖面拒绝、清图判定随揭示推进。期望值一律由盘上数出来。 +# 且余量递减、封印落封印态、禁挖面拒绝、清图判定随揭示推进。期望值一律由盘上数出来。 # 运行:godot --headless --path game --script res://tests/unit/core/minesweeper_rules_test.gd extends SceneTree @@ -38,7 +38,7 @@ func _init() -> void: _ae._phase = 1 # Phase.ACTIVE——意图受理的合法相位 _test_dig_face_rules() _test_reveal_advances() - _test_flag_place() + _test_seal_place() _test_reject_out_of_catalog() quit(Kit.finish("minesweeper_rules_test")) @@ -93,16 +93,16 @@ func _test_reveal_advances() -> void: _rules.safe_remaining() < before) -func _test_flag_place() -> void: +func _test_seal_place() -> void: var c := _unrevealed_safe() if c == Vector2i(-1, -1): - Kit.check("存在未揭示安全格(插旗前置)", false) + Kit.check("存在未揭示安全格(封印前置)", false) return - _ae.grant_ap(20) # 旗动作走行动经济扣点——夹具先给足 AP - _rules.flag_range_free = true # 插旗免邻接(信标网络装配态)——否则未揭示格多半够不着英雄 - _rules.settle_batch([{"action": "flag_place", "cell": c}]) - Kit.check("插旗后该格在旗态", _rules.has_flag(c)) - Kit.check("旗数计数 = 1", _rules.flag_count() == 1) + _ae.grant_ap(20) # 封印动作走行动经济扣点——夹具先给足 AP + _rules.seal_range_free = true # 封印免邻接(信标网络装配态)——否则未揭示格多半够不着英雄 + _rules.settle_batch([{"action": "seal_place", "cell": c}]) + Kit.check("封印后该格在封印态", _rules.has_seal(c)) + Kit.check("封印数计数 = 1", _rules.seal_count() == 1) func _test_reject_out_of_catalog() -> void: diff --git a/game/tests/unit/core/treasure_effects_test.gd b/game/tests/unit/core/treasure_effects_test.gd index 627e1a07..d00b8978 100644 --- a/game/tests/unit/core/treasure_effects_test.gd +++ b/game/tests/unit/core/treasure_effects_test.gd @@ -223,7 +223,7 @@ func _init() -> void: Kit.check_quiet(int(lv10.shop_refresh_free_left()) == int(db.adventure.shop_refresh_free) + 2, "刷新执照正常:免费刷新 +2/店(读数即本店可用——进店重置生命周期同 knob)") - # ⑪ 天眼(3×3 真视+安全格直开/危险格不开/旗格跳过) + # ⑪ 天眼(3×3 真视+安全格直开/危险格不开/封印格跳过) var rng11 = load("res://core/rng_service.gd").new(); rng11.set_master_seed(301) var ob11 = orch_s.new(db, rng11) Kit.check_quiet(ob11.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["sky_eye"]}), @@ -252,22 +252,22 @@ func _init() -> void: Kit.check_quiet(overlay_ok, "天眼正常:窗口全格入真视叠加层(危险格显示=C5 有差别开格)") Kit.check_quiet(not ob11.minesweeper.clear_map_cleared() or true, "天眼开格走普通挖格链(连锁/资源兑付=fx_reveal 通道——免 AP 即效果本身)") - # ⑫ 信标网络(插旗不限相邻/旗价照付) + # ⑫ 信标网络(封印不限相邻/封印价照付) var rng12 = load("res://core/rng_service.gd").new(); rng12.set_master_seed(311) var ob12 = orch_s.new(db, rng12) Kit.check_quiet(ob12.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp), "attunement": ["beacon_network"]}), - "信标网络:装配起战(flag_range_free 注入)") + "信标网络:装配起战(seal_range_free 注入)") var far12: Vector2i = _cell_at(ob12, ob12.minesweeper.hero_pos() + Vector2i(4, 4)) if far12 != Vector2i(-9, -9): Kit.check_quiet(ob12.minesweeper._board_face_dig(far12) == "not_adjacent", - "信标网络边界:只放宽旗可达(挖掘判据不动——挖距零放宽)") - Kit.check_quiet(ob12.minesweeper.flag_range_free == true, - "信标网络正常:旗可达豁免在册(插旗仍按标准动作价计费=try_spend 照走)") + "信标网络边界:只放宽封印可达(挖掘判据不动——挖距零放宽)") + Kit.check_quiet(ob12.minesweeper.seal_range_free == true, + "信标网络正常:封印可达豁免在册(封印仍按标准动作价计费=try_spend 照走)") var rng12b = load("res://core/rng_service.gd").new(); rng12b.set_master_seed(312) var ob12b = orch_s.new(db, rng12b) ob12b.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(db.hero.max_hp)}) - Kit.check_quiet(ob12b.minesweeper.flag_range_free == false, - "信标网络反例:未装配旗可达豁免=缺省 false(零装配零扰动)") + Kit.check_quiet(ob12b.minesweeper.seal_range_free == false, + "信标网络反例:未装配封印可达豁免=缺省 false(零装配零扰动)") # ⑬ 真视使用计数链(受理成功恰计一次——RunLedger 单类持账;迭代 27 T3 换代) var rng13 = load("res://core/rng_service.gd").new(); rng13.set_master_seed(321) diff --git a/game/tests/unit/core/treasure_items_test.gd b/game/tests/unit/core/treasure_items_test.gd index 22757cb3..ffcf8e99 100644 --- a/game/tests/unit/core/treasure_items_test.gd +++ b/game/tests/unit/core/treasure_items_test.gd @@ -52,7 +52,7 @@ func _init() -> void: # ① 授予归因+受理序+Used 不可逆 var inv = _new_inv() var r1: Dictionary = inv.add_item("sapper_order", "safe_cell", Vector2i(3, 4), 2) - var r2: Dictionary = inv.add_item("nest_pendulum", "flag_hit", Vector2i(5, 6), 3) + var r2: Dictionary = inv.add_item("nest_pendulum", "seal_hit", Vector2i(5, 6), 3) Kit.check_quiet(int(r1.handle) == 1 and int(r2.handle) == 2, "句柄受理序单调(1→2——零随机)") Kit.check_quiet(String(r1.source_class) == "safe_cell" and r1.origin_cell == Vector2i(3, 4) and int(r1.round_index) == 2, "授予来源可归因(source/cell/round)") diff --git a/game/tests/unit/core/tree_rules_v11_test.gd b/game/tests/unit/core/tree_rules_v11_test.gd index 6325b638..3e88d9e6 100644 --- a/game/tests/unit/core/tree_rules_v11_test.gd +++ b/game/tests/unit/core/tree_rules_v11_test.gd @@ -31,10 +31,10 @@ func _init() -> void: {"on": "mine_hit", "when": [{"fact": "counter", "id": "tree_sense_sharp_used", "op": "lt", "value": 2}], "do": {"kind": "counter_add", "counter_id": "tree_sense_sharp_used", "value": 1, "domain": "adventure"}}], - "sense_guard": [{"on": "flag_missed", + "sense_guard": [{"on": "seal_missed", "when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}], "do": {"kind": "grant_ap", "mode": "queue", "value": 1}}, - {"on": "flag_missed", + {"on": "seal_missed", "when": [{"fact": "counter", "id": "tree_sense_guard_used", "op": "lt", "value": 2}], "do": {"kind": "counter_add", "counter_id": "tree_sense_guard_used", "value": 1, "domain": "adventure"}}], } diff --git a/game/tests/unit/presentation/hud_presenter_test.gd b/game/tests/unit/presentation/hud_presenter_test.gd index 8db3b1f0..94c9baa1 100644 --- a/game/tests/unit/presentation/hud_presenter_test.gd +++ b/game/tests/unit/presentation/hud_presenter_test.gd @@ -24,7 +24,7 @@ func _test_reject_text_by_reason() -> void: var cases := { "not_adjacent": "不能执行:目标与小人不相邻", "target_revealed": "不能执行:目标已开", - "flag_present": "不能插旗:此格已有旗(旗为一次性承诺——相邻时左键直接挖开)", + "seal_present": "不能封印:此格已有封印印记(封印为一次性承诺——相邻时左键直接挖开)", } var bad: Array[String] = [] for sub in cases: diff --git a/game/tests/unit/presentation/reward_overlay_test.gd b/game/tests/unit/presentation/reward_overlay_test.gd index 3c27e989..86387ef1 100644 --- a/game/tests/unit/presentation/reward_overlay_test.gd +++ b/game/tests/unit/presentation/reward_overlay_test.gd @@ -28,7 +28,7 @@ func _run() -> void: # ① 选择态:三卡呈现、确认钮隐藏(两段式——点选前不给确认) ov.open_pick("第 1 层通过!", [ {"id": "attack", "text": "攻击力提升\n攻击 +1"}, - {"id": "gp", "text": "金币袋\n金币 +20"}, + {"id": "gp", "text": "GP 袋\nGP +20"}, {"id": "ap", "text": "行动点提升\n每战首轮 AP +1"}, ]) # M7 bcard 换装适配(2026-10-05 奇物批 T2 连带):三选一卡自 M7 起为 BCard(PanelContainer) 非 Button—— @@ -46,7 +46,7 @@ func _run() -> void: ov.set_refresh_display(0, 20, false) if not _req("GP 付费档:余量 0 价 20 余额不足=钮现形但禁用、角标 0、价签行可见", ov._refresh_btn.visible and ov._refresh_btn.disabled and ov._refresh_badge.text == "0" - and ov._refresh_l.visible and ov._refresh_l.text == "刷新 20 金币"): + and ov._refresh_l.visible and ov._refresh_l.text == "刷新 20 GP"): return ov.set_refresh_display(2, 20, false) if not _req("免费位余量 2:钮点亮、角标 2、免费行——真实按钮路径外发 refresh_requested", diff --git a/tools/golden_baseline_refresh.sh b/tools/golden_baseline_refresh.sh index 17d1b189..ed8a7697 100644 --- a/tools/golden_baseline_refresh.sh +++ b/tools/golden_baseline_refresh.sh @@ -50,7 +50,7 @@ if [ "$MODE" = "menu" ]; then fi for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \ - assets/art/board/flag_seal.png \ + assets/art/board/seal_mark.png \ assets/art/character/character_hero_idle.png \ assets/art/board/terrain_wall_n_dungeon.png assets/art/board/terrain_floor_dungeon_1.png \ assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \ diff --git a/tools/path_check.py b/tools/path_check.py index 655bbacb..b976e13c 100644 --- a/tools/path_check.py +++ b/tools/path_check.py @@ -42,7 +42,7 @@ ACTIVE_FILES = [ "fx/shovel_swing_f0.png", "fx/shovel_swing_f1.png", "fx/shovel_swing_f2.png", - "board/flag_seal.png", + "board/seal_mark.png", ] # 立绘八敌按数据表键生成(键集=STANDEE_TIER_H,见 standee_asset_check) ENEMY_KEYS = ("bugbear", "drider", "duergar", "duergar_king", "giant_spider", diff --git a/tools/render_gate.sh b/tools/render_gate.sh index 8dc43970..c2365766 100644 --- a/tools/render_gate.sh +++ b/tools/render_gate.sh @@ -118,7 +118,7 @@ else # worktree 自检的)。基线锚在素材齐盘态(Q5),缺盘态本就无权出验收结论。 _asset_miss=0 for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \ - assets/art/board/flag_seal.png \ + assets/art/board/seal_mark.png \ assets/art/character/character_hero_idle.png \ assets/art/board/terrain_wall_n_dungeon.png assets/art/board/terrain_floor_dungeon_1.png \ assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \ diff --git a/tools/run_all_gates.sh b/tools/run_all_gates.sh index 26286f7f..bd0a61ac 100644 --- a/tools/run_all_gates.sh +++ b/tools/run_all_gates.sh @@ -95,7 +95,7 @@ in_domain() { # in_domain if in_domain code; then _miss="" for a in assets/art/ui/button_stone.png assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \ - assets/art/board/flag_seal.png assets/art/character/character_hero_idle.png \ + assets/art/board/seal_mark.png assets/art/character/character_hero_idle.png \ assets/art/board/terrain_wall_n_dungeon.png assets/art/board/terrain_floor_dungeon_1.png \ assets/art/board/terrain_wall_n_underdark.png assets/art/board/terrain_floor_underdark_1.png \ assets/art/board/terrain_wall_n_deep_underdark.png assets/art/board/terrain_floor_deep_underdark_1.png; do