refactor(迭代35卡②T2·一口): 跨表校验④「关卡节点→敌/板覆盖与多终点 Boss 共带」随静态节点数据消亡整体退役——两条拦截语义改由运行时断言承接:顶 clamp 消解禁=〔v11〕「解析落带 ≥ 请求深度」、多终点 Boss 带键互异=〔v11〕逐终点带键两两比对(拦截面从表内静态代理升级到消费图本体,无削弱);其单测段 _test_level_node_band_rules 与随它而存的四个 preload 一并退役(fv15/fv16/fv17 三条判据的现役等价面在 level_shop_economy〔v11〕与 level_table_validate〔v1〕)
- 覆盖不降级的依据:生成图深度域实测 L1 0–6/L2 0–9/L3 0–13 为模板池深度域(0–4/0–9/0–9)的超集,且 〔v11〕扫描面三档×20 种子逐节点核敌带与板精确行 - save_manager 首次冒险位注释随确定性承载换代改口径(首局固定种子 42+参数档生成图,无兜底模板),键与行为零改动 - run_all 59 套件全绿
This commit is contained in:
1 parent
0fcbcb933b
commit
98c61d50c3
3 files changed
+5
-115
No files matched your search
@@ -16,7 +16,6 @@ func _init() -> void:
|
||||
_test_all_links_valid()
|
||||
_test_dangling_skill_id()
|
||||
_test_cast_side_mismatch()
|
||||
_test_level_node_band_rules()
|
||||
quit(Kit.finish("config_db_cross_validator_test"))
|
||||
|
||||
|
||||
@@ -83,61 +82,3 @@ func _test_cast_side_mismatch() -> void:
|
||||
var status := _status([{"effect_id": "st_hero_side", "target_side": "hero"}])
|
||||
var errs: Array = ValidatorScript.new().validate_skill_pool_links(skills, enemies, status)
|
||||
Kit.check("buff 挂主角侧状态被报(施放类 side 守卫)", _cats(errs).has("cast_side"))
|
||||
|
||||
|
||||
# ---- ④ 节点 × 敌人表带寻址(单终点零误报/同带双 Boss 报错/顶 clamp 消解报错)----
|
||||
const LevelTableScript := preload("res://data/schemas/level_table.gd")
|
||||
const BoardGenTableScript := preload("res://data/schemas/board_gen_table.gd")
|
||||
const RewardTableScript := preload("res://data/schemas/reward_table.gd")
|
||||
const SettlementTableScript := preload("res://data/schemas/settlement_table.gd")
|
||||
|
||||
|
||||
func _loaded(level_nodes: Array, bg_depths: Array, boss_bands: Array, battle_bands: Array) -> Dictionary:
|
||||
var lv := LevelTableScript.new()
|
||||
lv.rows.assign([{"level_index": 1, "display_name": "夹具关", "templates": [{"nodes": level_nodes}]}])
|
||||
var bg := BoardGenTableScript.new()
|
||||
var bg_rows: Array = []
|
||||
for d in bg_depths:
|
||||
bg_rows.append({"level_index": 1, "node_depth": int(d), "board_width": 10})
|
||||
bg.rows.assign(bg_rows)
|
||||
var en := EnemyTableScript.new()
|
||||
var en_rows: Array = []
|
||||
for b in battle_bands:
|
||||
en_rows.append({"level_index": 1, "row_kind": "battle", "depth_band": int(b), "enemy_id": "goblin",
|
||||
"unit_count": 1, "hp": 10, "atk": 2, "pool": [{"skill_id": "attack", "weight": 9}]})
|
||||
for b in boss_bands:
|
||||
en_rows.append({"level_index": 1, "row_kind": "boss", "depth_band": int(b), "enemy_id": "ogre_chief",
|
||||
"unit_count": 1, "hp": 10, "atk": 2, "pool": [{"skill_id": "attack", "weight": 9}]})
|
||||
en.rows.assign(en_rows)
|
||||
var st := SettlementTableScript.new()
|
||||
st.source_label_map.assign({"safe_cell": "a", "seal_hit": "b", "mine_hit": "c", "clear_reward": "d",
|
||||
"hero_attack": "e", "enemy_action": "f", "seal_miss": "g"})
|
||||
return {"status_effects": StatusTableScript.new(), "reward": RewardTableScript.new(),
|
||||
"settlement": st, "level": lv, "board_gen": bg, "enemy": en}
|
||||
|
||||
|
||||
func _cross_cats(loaded: Dictionary, needle: String) -> Array[String]:
|
||||
var out: Array[String] = []
|
||||
ValidatorScript.new().cross_validate(loaded,
|
||||
func(_sev, cat, msg) -> void:
|
||||
if String(msg).contains(needle):
|
||||
out.append(String(cat)))
|
||||
return out
|
||||
|
||||
|
||||
func _test_level_node_band_rules() -> void:
|
||||
# 正向:单终点三关同构(battle 节点落 band 0、boss 节点精确落顶带)→ ④ 零误报
|
||||
var ok_nodes := [{"type": "battle", "node_depth": 0}, {"type": "boss", "node_depth": 9}]
|
||||
var ok_cats := _cross_cats(_loaded(ok_nodes, [0, 9], [9], [0]), "level 1")
|
||||
Kit.check("单终点图 ④ 敌侧带寻址零误报〔fv17〕", ok_cats.is_empty())
|
||||
# 负向:一路两终点落同一 Boss 带(深度 3/4 都落带 4)→ rowset_rule
|
||||
var same_band_nodes := [{"type": "battle", "node_depth": 0},
|
||||
{"type": "boss", "node_depth": 3}, {"type": "boss", "node_depth": 4}]
|
||||
var same_band_cats := _cross_cats(_loaded(same_band_nodes, [0, 3, 4], [4, 9], [0]), "同带")
|
||||
Kit.check("同关双终点共带报 rowset_rule〔fv15〕",
|
||||
same_band_cats.has("rowset_rule"))
|
||||
# 负向:Boss 节点深度高于顶带键(顶 clamp 消解)→ level_node_dangling
|
||||
var over_nodes := [{"type": "battle", "node_depth": 0}, {"type": "boss", "node_depth": 10}]
|
||||
var over_cats := _cross_cats(_loaded(over_nodes, [0, 10], [9], [0]), "顶 clamp 消解")
|
||||
Kit.check("Boss 节点越顶带报 level_node_dangling〔fv16〕",
|
||||
over_cats.has("level_node_dangling"))
|
||||
Reference in new issue
Block a user