- d1 伤害控制器来源敌作废判定 `==`→`is_same`(同内容异实例不再误废;夹具双敌两断言〔wd1〕) - d11 shop 表新增 relic_base_price/spend_discount 两 knob+域检+ConfigDB 访问器+level_runner 读表; level_shop_economy_test 三表值断言+relic 现价读表与迁移前字面量逐位等价〔wd11〕 - d16a HeroTable.display_name+域检+访问器+unit_container 读表;spawn 真实链断言〔wd16〕 - d14 board_generator 目标雷数公式单点 target_mine_count(两调用点改引)+legality 去 db 参数(两调用点同批改)〔wd14〕 - d15 蓄力层上限 CHARGE_LAYER_CAP 常量(两处字面量+注释随动) - d16b unit_container/status_container 六处 Dictionary 取值显式 int() 包裹(读侧包) - d10 minesweeper 两信号按 §2.1 三要素补契约(载荷键集按发射位并集实查)+全库 28 处信号注释载体 #→## 撤销证明:回退 d1 hunk → 同容异实例断言红(A 单据被 B 死亡误废),还原复绿; 回退 d10 契约 → 契约在位扫描 undocumented=2 红,还原归零。等价类申报(d11/d14/d15/d16)见实现报告。 代拍板:#1 target_mine_count 签名(照接口块)、#2 契约措辞与载荷键并集(实查发射位)、#4 int() 读侧包写法。
25 lines
1.6 KiB
GDScript
25 lines
1.6 KiB
GDScript
## VERTICAL SLICE - NOT FOR PRODUCTION
|
||
## 英雄基线表 schema:max_hp/atk/armor_class 三数值轴单行全局类型化读取(垂直切片验证:完整战斗逐行归因)。
|
||
## 类型轴不归本表(所有权在锻造工坊):默认值住 forge 表常驻持有、选中态写存档经参数面注入。
|
||
## atk 无零基线:0 = 加载拒绝(零基线死锁在 schema 层杜绝)。
|
||
class_name HeroTable
|
||
extends Resource
|
||
|
||
@export var max_hp: int = 50 # [1,999] knob(provisional,溯源 = 原型锚)
|
||
@export var atk: int = 6 # [1,999] knob——基础攻击(溯源 = 概念原型 HERO_BASE_ATK,provisional 归 难度曲线与Boss);消费面 = 战斗结算·战斗段先手攻击
|
||
@export var armor_class: int = 10 # [0,999] knob——防守方护甲等级基准(暂定 10 归 难度曲线与Boss);消费面 = 战斗结算掷点判定阈值基数(ac_up 效果加算其上)
|
||
@export var display_name: String = "探险者" # 英雄单位显示名(与敌人行 display_name 同轴;单位快照读取面单源)
|
||
|
||
|
||
func validate() -> Array:
|
||
var errs: Array[Dictionary] = []
|
||
if max_hp < 1 or max_hp > 999:
|
||
errs.append({"category": "domain", "message": "max_hp 越域 [1,999]: %d" % max_hp})
|
||
if atk < 1 or atk > 999:
|
||
errs.append({"category": "domain", "message": "atk 越域 [1,999]: %d" % atk})
|
||
if armor_class < 0 or armor_class > 999:
|
||
errs.append({"category": "domain", "message": "armor_class 越域 [0,999]: %d" % armor_class})
|
||
if display_name.strip_edges() == "":
|
||
errs.append({"category": "domain", "message": "display_name 为空"})
|
||
return errs
|