奇物批T3+T4:relic_*→feat_*词族全换(feat_table.gd/feats.tres/feats_engine.gd三文件改名+.uid+feat_flags/feat_id/feat_row等全token+config_db注册键feats两端+entities.yaml换代注记——kind值relic/身份前缀relic:/relics存档键/摘要键按数据契约保留);T4渠道白名单过滤(_draw_curio_candidates(channel):通关渠道只出专长/节点渠道零专长——过滤式不拆池,TIER_QUOTAS锚零改动,devour货架保底随渠道定位退役,迁移保feat_id,pick_curio测试feat_id透传;冒烟773/0+run_all 16全绿+断点往返PASS)
This commit is contained in:
1 parent
8e2694de49
commit
6812ebbb73
24 files changed
+385
-384
No files matched your search
@@ -0,0 +1,52 @@
|
||||
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||||
# Date: 2026-10-04(双层 BD 实施批 T1——标签档位激活引擎)
|
||||
# 流派成型判据机制化(整合定稿 设计工具 1——以撒套装/小骨铭文先例):
|
||||
# 同流派标签 relic 计数 ≥2 → 档一(流派核心规则);≥4 → 档二(完全体);<2 = 散件(单体保底——
|
||||
# 每件效果独立生效,档位只做质变不做启动,反例 B-2)。
|
||||
# 纯函数零 await 零 RNG 零副作用(Attunement 求值服务同款纪律);核心层零特判延伸——引擎只读
|
||||
# feat_table 行集与持有集,接线点消费 tiers/hooks 投影。
|
||||
class_name FeatsEngine
|
||||
extends RefCounted
|
||||
|
||||
|
||||
## 档位求值:feat_ids 持有集 × 行集 → {archetype: tier}(tier ∈ 0/1/2;无行流派不出现)
|
||||
static func tiers_for(feat_ids: Array, table: FeatTable) -> Dictionary:
|
||||
var counts := {}
|
||||
for rid in feat_ids:
|
||||
var row: Dictionary = table.row_by_id(String(rid)) if table != null else {}
|
||||
if row.is_empty():
|
||||
continue
|
||||
var arch := String(row.get("archetype", ""))
|
||||
counts[arch] = int(counts.get(arch, 0)) + 1
|
||||
var out := {}
|
||||
for arch in counts.keys():
|
||||
var n := int(counts[arch])
|
||||
if n >= 4:
|
||||
out[arch] = 2
|
||||
elif n >= 2:
|
||||
out[arch] = 1
|
||||
else:
|
||||
out[arch] = 0
|
||||
return out
|
||||
|
||||
|
||||
## 挂点投影:持有集 → [{feat_id, hook, archetype, tier, effects}](表序稳定——同集合同投影,
|
||||
## MC 逐位可复放承载)
|
||||
static func hooks_for(feat_ids: Array, table: FeatTable) -> Array:
|
||||
var out: Array = []
|
||||
for rid in feat_ids:
|
||||
var row: Dictionary = table.row_by_id(String(rid)) if table != null else {}
|
||||
if row.is_empty():
|
||||
continue
|
||||
out.append({
|
||||
"feat_id": String(row.get("feat_id", "")),
|
||||
"hook": String(row.get("hook", "")),
|
||||
"archetype": String(row.get("archetype", "")),
|
||||
"effects": (row.get("effects", {}) as Dictionary).duplicate(true),
|
||||
})
|
||||
return out
|
||||
|
||||
|
||||
## 成型判读(读数面口径):流派 tier ≥1 = 成型(档一即判——任务书完成定义「标签+档位激活引擎可判成型」)
|
||||
static func is_formed(tiers: Dictionary, archetype: String) -> bool:
|
||||
return int(tiers.get(archetype, 0)) >= 1
|
||||
Reference in new issue
Block a user