## VERTICAL SLICE - NOT FOR PRODUCTION ## 难度修饰表 schema:按 (level_index, node_depth) 精确匹配施加乘数的类型化读取(空表=零行为合法态)。 ## Boss 数值走行值直填不经本表;乘数越域仅告警、使用时 clamp(组合事故不作配置事故拒载)。 class_name DifficultyTable extends Resource @export var rows: Array[Dictionary] = [] # Array[Dictionary]:{level_index, node_depth, hp_mult, atk_mult} const MULT_MIN := 0.1 const MULT_MAX := 10.0 func validate() -> Array: var errs: Array[Dictionary] = [] var seen := {} for row in rows: var L: int = int(row.get("level_index", 0)) var D: int = int(row.get("node_depth", -1)) var key := "%d_%d" % [L, D] if seen.has(key): errs.append({"category": "dup_key", "message": "DifficultyTable 键重复: %s" % key}) seen[key] = true if L < 1 or D < 0: errs.append({"category": "domain", "message": "难度键越域 (%d,%d)" % [L, D]}) # 乘数越域 = warning 级(使用时 clamp——组合事故非配置事故,难度曲线与Boss GDD Edge Case 预登记) for k in ["hp_mult", "atk_mult"]: var v: float = float(row.get(k, 1.0)) if v < MULT_MIN or v > MULT_MAX: errs.append({"category": "mult_oor_warning", "message": "%s (%s) 越域 [0.1,10] 使用时 clamp: %f" % [key, k, v]}) return errs