Files
gplan-2/game/data/schemas/difficulty_table.gd
2026-11-04 05:08:31 +08:00

44 lines
1.9 KiB
GDScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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 到 MULT_MIN/MULT_MAX——组合事故非配置事故,warning 预登记)
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
var _resolver # R1 解析协作件(ConfigDB load_tables 装配段经 bind_resolver 注入——resolver 文件与键零搬移)
# 解析协作件挂载口(ConfigDB 装配段公开面〔5.1 封装修复——直写 _resolver 改经此口〕)
func bind_resolver(resolver: ConfigDbResolver) -> void:
_resolver = resolver
## 难度修饰解析委托(消费面 db.run.difficulty.resolve_modifiers——clamp 语义归 ConfigDbResolver)
func resolve_modifiers(L: int, D: int) -> Dictionary:
return _resolver.resolve_difficulty_modifiers(L, D)