refactor(代码术语): 卡① flag→seal 全族换代+game/ 禁用词清扫(迭代 31 卡①)

标识符面: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 同一存量红、其余全绿。
This commit is contained in:
DKChan committed 2026-10-19 02:52:38 +08:00
1 parent ed2dfaf66f
commit 32fdf957fd
79 files changed
+899 -899

No files matched your search

+28 -28
View File
@@ -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 裁甲)。
+6 -6
View File
@@ -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:
+44 -44
View File
@@ -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 = ""
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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 闸承担
+2 -2
View File
@@ -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:
+3 -3
View File
@@ -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)
+2 -2
View File
@@ -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〕;
+15 -15
View File
@@ -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"}}, {})
+2 -2
View File
@@ -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 }
+71 -71
View File
@@ -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", "")})
+1 -1
View File
@@ -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":
+52 -52
View File
@@ -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:
+1 -1
View File
@@ -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:
+1 -1
View File
@@ -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 := "" # 诊断面(最近一次拒绝原因——呈现反馈取数)
+1 -1
View File
@@ -7,7 +7,7 @@ extends RefCounted
# 死亡事件(伤害管线单据化批 2026-09-24 用户裁决③——单位自行宣布死亡):apply_damage 扣血归零、
# alive 翻 false 的同一时点发出;载荷 = 单位句柄(Dictionary 引用,is_hero 区分主角/敌)。
# 消费方 = 伤害控制器(怪死 → 其未结单据作废〔死亡即不动手〕;主角死 → 兑付终止旗)。
# 消费方 = 伤害控制器(怪死 → 其未结单据作废〔死亡即不动手〕;主角死 → 兑付终止封印)。
signal unit_died(u: Dictionary)
var db: ConfigDb
+5 -5
View File
@@ -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
+2 -2
View File
@@ -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 时沙/
+1 -1
View File
@@ -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:
+4 -4
View File
@@ -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)})
+3 -3
View File
@@ -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"]
+1 -1
View File
@@ -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)不入本组——零误伤)
+6 -6
View File
@@ -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)。
+17 -17
View File
@@ -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",
+4 -4
View File
@@ -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 面)。
;
+4 -4
View File
@@ -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 /
+1 -1
View File
@@ -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 由"护甲强化"改名)——
+3 -3
View File
@@ -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"]
}]
+2 -2
View File
@@ -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":
+3 -3
View File
@@ -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 爬价规则行
@@ -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() # 钱包变化上屏(对齐商店购买后刷新面)
+2 -2
View File
@@ -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": "无效目标",
}
+5 -5
View File
@@ -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
+3 -3
View File
@@ -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":
+1 -1
View File
@@ -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 # 向左上生长——尺寸变化向屏内
+3 -3
View File
@@ -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:
+11 -11
View File
@@ -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:
+3 -3
View File
@@ -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 伤害施放,具名技能
+17 -17
View File
@@ -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)
+5 -5
View File
@@ -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
+32 -32
View File
@@ -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":
@@ -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
@@ -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
+5 -5
View File
@@ -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)
+2 -2
View File
@@ -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)
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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 := "?"
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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" # 图标·刷新(货架/候选)
+6 -6
View File
@@ -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"],
+21 -21
View File
@@ -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):
+3 -3
View File
@@ -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)
+5 -5
View File
@@ -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:
+1 -1
View File
@@ -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:
+29 -29
View File
@@ -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":
+8 -8
View File
@@ -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:
+204 -204
View File
@@ -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},
+3 -3
View File
@@ -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)
+34 -34
View File
@@ -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)])
+1 -1
View File
@@ -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 带后未机检位)
+34 -34
View File
@@ -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:
+2 -2
View File
@@ -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:
+120 -120
View File
@@ -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": {
+1 -1
View File
@@ -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 投影文案(逐拒绝原因/兜底不空)
+2 -2
View File
@@ -13,8 +13,8 @@
## Core Mechanic
3. 挖掘:单格 1 AP、数字亮起与 8 邻雷数一致、连锁免费撕开一片
4. 插旗/拔旗/挪旗:AP 价目正确、连锁止于旗(旗挡链)属正常
5. 移动:已开格瞬移、**已引爆雷格可通行可读**(工程债呈现半边)
4. 封印/撤封印/挪封印:AP 价目正确、连锁止于封印(封印挡链)属正常
5. 移动:已开格瞬移、**已引爆危险格可通行可读**(工程债呈现半边)
6. 停手:RAP 1:1 转存、下轮 AP 硬重置同图继续
7. 轮末结算:明细逐行呈现、来源标注可读(P2——"这一行是我哪步扫雷带来的"可答)
8. 清图:清图奖励兑付 + 完美排雷高光(零误标时双份)+ 换新图;未刷新的停手轮不换图
+1 -1
View File
@@ -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())
+2 -2
View File
@@ -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")
+1 -1
View File
@@ -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()),
@@ -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:
@@ -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)
+1 -1
View File
@@ -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)")
+2 -2
View File
@@ -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"}}],
}
@@ -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:
@@ -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",
+1 -1
View File
@@ -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 \
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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 \
+1 -1
View File
@@ -95,7 +95,7 @@ in_domain() { # in_domain <code|docs|both>
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