fix(review-batch3): 类型收紧生产清零137处(P1-2三步+延伸)+autoload class_name(ConfigDb/RngServiceCore)与_init标注(P2-1)+validate_skill_pool_links/ShopTable标注(P2-4)+相位enum外String面(P2-2)+typed-rows探针实证.tres装载转换;smoke缝合20处rows.assign+str(bb)同语义;审计生产双归零(240→103/83→59全测试链),单测7套绿,冒烟576/0同基线
This commit is contained in:
1 parent
f5edb65d25
commit
104cea6461
46 files changed
+233
-218
No files matched your search
@@ -20,18 +20,18 @@ extends RefCounted
|
||||
# 消费方 = 伤害控制器(怪死 → 其未结单据作废〔死亡即不动手〕;主角死 → 兑付终止旗)。
|
||||
signal unit_died(u: Dictionary)
|
||||
|
||||
var db
|
||||
var db: ConfigDb
|
||||
# 单位容器私有(E3 封装收口 2026-09-13):hero/enemies 原始数组不再外露——读取经 hero_unit()/
|
||||
# all_enemies() 投影面(死亡残位查询包含在内),写入只经 apply_damage/heal/set_pending_action/commit_action/
|
||||
# tick_cooldowns/spawn/despawn。
|
||||
# 句柄语义不变:投影返回的 Dictionary 引用即单位句柄(同 query_alive 先例)。
|
||||
var _hero: Dictionary = {} # {hp, max_hp, atk, is_hero: true}
|
||||
var _enemies: Array = [] # 行主序生成序;元素 = 单位 Dictionary
|
||||
var _hero: Dictionary[String, Variant] = {} # {hp, max_hp, atk, is_hero: true}
|
||||
var _enemies: Array[Dictionary] = [] # 行主序生成序;元素 = 单位 Dictionary
|
||||
var _spawned := false
|
||||
var _despawned := false
|
||||
|
||||
|
||||
func _init(db_ref) -> void:
|
||||
func _init(db_ref: ConfigDb) -> void:
|
||||
db = db_ref
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ func spawn(level_index: int, node_depth: int, hero_hp: int, unit_count_override:
|
||||
for i in range(count):
|
||||
var eff_row_atk: int = enemy_atk_override if enemy_atk_override >= 0 else int(row.atk)
|
||||
# 实例池快照(proposal §2.2:开战把模板快照一份,冷却全零——与"生成拿到当时的表值快照"同一条快照纪律)
|
||||
var pool_snap: Array = []
|
||||
var pool_snap: Array[Dictionary] = []
|
||||
for entry in row.get("pool", []):
|
||||
pool_snap.append({
|
||||
"skill_id": String(entry.get("skill_id", "")),
|
||||
@@ -103,7 +103,7 @@ func query_alive(side: String) -> Array:
|
||||
return []
|
||||
if side == "hero":
|
||||
return [] if (_hero.is_empty() or not _hero.alive) else [_hero]
|
||||
var out: Array = []
|
||||
var out: Array[Dictionary] = []
|
||||
for u in _enemies:
|
||||
if u.alive:
|
||||
out.append(u)
|
||||
@@ -118,7 +118,7 @@ func rollable_skills(u: Dictionary) -> Array:
|
||||
if u.is_empty() or _despawned or u.get("is_hero", false):
|
||||
_diag("rollable_skills 失效句柄")
|
||||
return []
|
||||
var out: Array = []
|
||||
var out: Array[Dictionary] = []
|
||||
for e in u.pool:
|
||||
if int(e.cooldown_left) <= 0:
|
||||
out.append({"skill_id": String(e.skill_id), "weight": int(e.weight)})
|
||||
@@ -130,7 +130,7 @@ func special_skills(u: Dictionary) -> Array:
|
||||
if u.is_empty() or _despawned or u.get("is_hero", false):
|
||||
_diag("special_skills 失效句柄")
|
||||
return []
|
||||
var out: Array = []
|
||||
var out: Array[Dictionary] = []
|
||||
for e in u.pool:
|
||||
var srow: Dictionary = db.skill_row(String(e.skill_id))
|
||||
if not srow.is_empty() and String(srow.type) != "basic":
|
||||
|
||||
Reference in new issue
Block a user