From 14534128bd7420a2507c6afdef2a21a49ee8c728 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 5 Nov 2026 01:54:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E7=A8=8B(=E6=97=A7=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E4=BB=B6=E6=B8=85=E5=B0=BE=C2=B7=E7=94=A8=E6=88=B7=E4=BB=A4):?= =?UTF-8?q?=20config=5Fdb.=5Fvalidate=5Fskill=5Fpool=5Flinks=20=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E6=96=B9=E6=B3=95=E5=88=A0=E9=99=A4=EF=BC=88=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E9=9B=B6=E8=B0=83=E7=94=A8=EF=BC=8C=E6=9C=AC=E4=BD=93?= =?UTF-8?q?=E5=8F=AA=E8=BD=AC=E4=B8=80=E8=A1=8C=E8=B0=83=E8=B7=A8=E8=A1=A8?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E4=BB=B6=EF=BC=89=EF=BC=8Bround=5Fflow=5Fski?= =?UTF-8?q?ll=5Fpool=5Ftest=20=E4=BA=94=E5=A4=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=9B=B4=E8=BF=9E=E6=94=B9=E9=94=9A=20ValidatorScript.new().va?= =?UTF-8?q?lidate=5Fskill=5Fpool=5Flinks=EF=BC=88=E6=B2=BF=E7=94=A8?= =?UTF-8?q?=E5=90=8C=E8=83=BD=E5=8A=9B=E5=8D=95=E6=B5=8B=20config=5Fdb=5Fc?= =?UTF-8?q?ross=5Fvalidator=5Ftest=20=E7=9A=84=E7=9B=B4=E6=9E=84=E5=86=99?= =?UTF-8?q?=E6=B3=95=EF=BC=89;=20=E9=9B=B6=E8=A1=8C=E4=B8=BA=E5=8F=98?= =?UTF-8?q?=E6=9B=B4;=20=E9=AA=8C=E8=AF=81=3D=E5=85=A8=E4=BB=93=20grep=20?= =?UTF-8?q?=E9=9B=B6=E6=AE=8B=E7=95=99=E5=BC=95=E7=94=A8=EF=BC=8Barchitect?= =?UTF-8?q?ure=20=E5=85=AC=E5=BC=80=E9=9D=A2=208=20=E4=B8=8E=20tests/READM?= =?UTF-8?q?E=20=E8=83=BD=E5=8A=9B=E8=A1=8C=E9=9B=B6=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=B9=89=E5=8A=A1=EF=BC=88=E6=9C=AA=E8=B7=91=E6=B5=8B=3D?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=B8=A4=E5=85=A5=E5=8F=A3=E9=93=81=E8=A7=84?= =?UTF-8?q?=EF=BC=8C=E9=AA=8C=E8=AF=81=E7=82=B9=3D=E5=90=88=E5=9B=9E?= =?UTF-8?q?=E8=BF=9C=E7=AB=AF=20CI=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/config_db.gd | 6 ------ .../battle_settlement/round_flow_skill_pool_test.gd | 11 ++++++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/game/core/config_db.gd b/game/core/config_db.gd index 996e062c..c89ac75b 100644 --- a/game/core/config_db.gd +++ b/game/core/config_db.gd @@ -165,12 +165,6 @@ func _cross_validate(loaded: Dictionary) -> void: _validator.cross_validate(loaded, push_diag) -# 池模板 × 技能行跨表校验(冒烟直验独立入口——签名与消费面零变化,实现归协作类;门面私有—— -# 消费面经门面者改 _ 前缀直调,cross_validator 直验入口公开面不变) -func _validate_skill_pool_links(skill_table: SkillTable, enemy_table: EnemyTable, status_table: StatusEffectTable = null) -> Array: - return _validator.validate_skill_pool_links(skill_table, enemy_table, status_table) - - # ---- 数据配置 EC8:debug 热重载门(战斗结算 唯一调用方;切片实现 = 门标志 + 拒绝语义)---- func set_reload_gate(gated: bool) -> void: diff --git a/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd b/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd index ad2d3ab9..9fd663be 100644 --- a/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd +++ b/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd @@ -15,6 +15,7 @@ extends SceneTree const Kit := preload("res://tests/unit/test_kit.gd") const ConfigDBScript := preload("res://core/config_db.gd") +const ValidatorScript := preload("res://core/config_db_cross_validator.gd") const AutoPlayer := preload("res://sim/auto_player.gd") # 自动玩家策略单一实现(迁移期按现路径 preload——账本 §五夹具前提) var _db @@ -866,14 +867,14 @@ func _smoke_skill_pool_validation_reject() -> void: var skill_table = load("res://data/schemas/skill_table.gd").new() var enemy_table = load("res://data/schemas/enemy_table.gd").new() enemy_table.rows.assign([{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "ghost", "weight": 1}]}]) - Kit.check("加载校验拒绝:池条目 skill_id 悬空致命", _has_err_category(_db._validate_skill_pool_links(skill_table, enemy_table), "dangling_skill")) + Kit.check("加载校验拒绝:池条目 skill_id 悬空致命", _has_err_category(ValidatorScript.new().validate_skill_pool_links(skill_table, enemy_table), "dangling_skill")) skill_table.rows.assign([{"skill_id": "a", "display_name": "a", "type": "damage", "damage_mult": 1.5, "cooldown_beats": 2}]) - Kit.check("加载校验拒绝:池普攻行数 ≠ 1(空池不可能前提)", _has_err_category(_db._validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) + Kit.check("加载校验拒绝:池普攻行数 ≠ 1(空池不可能前提)", _has_err_category(ValidatorScript.new().validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) skill_table.rows.assign([ {"skill_id": "b1", "display_name": "b1", "type": "buff", "buff_ref": "empower", "buff_duration": 2, "cooldown_beats": 3}, {"skill_id": "b2", "display_name": "b2", "type": "buff", "buff_ref": "fortify", "buff_duration": 2, "cooldown_beats": 4}]) enemy_table.rows.assign([{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "b1", "weight": 1}, {"skill_id": "b2", "weight": 1}]}]) - Kit.check("加载校验拒绝:池增益技 > 1(每池增益 ≤1 纪律)", _has_err_category(_db._validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) + Kit.check("加载校验拒绝:池增益技 > 1(每池增益 ≤1 纪律)", _has_err_category(ValidatorScript.new().validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) skill_table.rows.assign([{"skill_id": "atk", "display_name": "a", "type": "basic", "damage_mult": 2.0, "cooldown_beats": 0}]) Kit.check("加载校验拒绝:普攻配倍率 ≠ 1(域校验锁死)", not skill_table.validate().is_empty()) skill_table.rows.assign([{"skill_id": "atk", "display_name": "a", "type": "basic", "cooldown_beats": 2}]) @@ -890,7 +891,7 @@ func _smoke_skill_pool_validation_reject() -> void: {"skill_id": "w1", "display_name": "w1", "type": "debuff", "buff_ref": "off_guard", "buff_duration": 2, "cooldown_beats": 4}, {"skill_id": "w2", "display_name": "w2", "type": "debuff", "buff_ref": "off_guard", "buff_duration": 2, "cooldown_beats": 4}]) enemy_table.rows.assign([{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "w1", "weight": 1}, {"skill_id": "w2", "weight": 1}]}]) - Kit.check("加载校验拒绝:池妨害技 > 1(每池妨害 ≤1 纪律)", _has_err_category(_db._validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) + Kit.check("加载校验拒绝:池妨害技 > 1(每池妨害 ≤1 纪律)", _has_err_category(ValidatorScript.new().validate_skill_pool_links(skill_table, enemy_table), "pool_composition")) skill_table.rows.assign([{"skill_id": "w1", "display_name": "w1", "type": "debuff", "cooldown_beats": 4}]) Kit.check("加载校验拒绝:妨害技缺 buff_ref(效果引用)", not skill_table.validate().is_empty()) skill_table.rows.assign([{"skill_id": "d", "display_name": "d", "type": "damage", "damage_mult": 1.5, "rider_mult": 1.5, "cooldown_beats": 1}]) @@ -902,7 +903,7 @@ func _smoke_skill_pool_validation_reject() -> void: {"skill_id": "atk", "display_name": "a", "type": "basic", "cooldown_beats": 0}, {"skill_id": "w1", "display_name": "w1", "type": "debuff", "buff_ref": "empower", "buff_duration": 2, "cooldown_beats": 4}]) enemy_table.rows.assign([{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "atk", "weight": 1}, {"skill_id": "w1", "weight": 1}]}]) - Kit.check("加载校验拒绝:妨害技引用敌方侧状态(施放类 side 守卫)", _has_err_category(_db._validate_skill_pool_links(skill_table, enemy_table, _db.combat.status_effects), "cast_side")) + Kit.check("加载校验拒绝:妨害技引用敌方侧状态(施放类 side 守卫)", _has_err_category(ValidatorScript.new().validate_skill_pool_links(skill_table, enemy_table, _db.combat.status_effects), "cast_side")) func _has_err_category(errs: Array, category: String) -> bool: