专长迁移完成:27 行 triggers 订阅形态全量生效+旧 23 挂点枚举消亡+消费点拆除+断言面随迁(T3——内容数据驱动扩展批)
接手前任中断的 T3 半成品(脏文件三件:battle_orchestrator/effects engine/feats.tres),方向核实无误后续做收口; 承接修正四处随本提交留痕:①perfect_defense 的 when 用了 fact 封闭 9 项外的 flags_hit_all(装载校验必红)—— 改 flags_count gte 1 保守判定,全中闸=flag_settle 发射点施加面承载(载荷字段仅供观测);②has 算子语义与行 不匹配(数组包含对 String 恒假)——落非空在场判定(value 缺省)+数组包含(value 给定),查询面落法=代拍板 白名单;③前任漏写 _harmful_adjacent 助手(flag_hit 发射点调用必炸);④counter_add set 键语义 bool() 吞 0 (清零行 set:0 被当 false 走加零通道)——改 has(set) 置值模式,四处施加点同修。 本提交主干(专长族全量迁移——任务书 §六 T3): - damage_controller:feat_flags 旗面整体退役,五事件施加面接线——attack_commit 命中随单据 context 携带 (发射点=开单入口,任务书 §3.1 定稿位;主角攻击单恒段内首单,开单现场=结账现场),rider/改写/加值/ 段数/状态五族按迁移前算序施加(重锤两拍/专注/spike 恒全额/猎弱移档/魔网湛蓝猎手克制直调/整备每层 +1/厚积满层倍乘/奥术+猎巢+执拗 rider 合计后档位暴击);armor_roll 免掷恒折扣、clamp_check 双面 (hero+board_typed)delta 窗口、kill 溢出弹射(landed×value%)、damage_taken shield 加法族合计。 _feat_clamp_bonus/13 处旗消费点拆除。 - battle_orchestrator:_combat_segment 换代(dig_streak/charge_layers 注伤害控制器运行态;连珠矢段数 施加位紧随主角攻击单开立=迁移前开单位,flush 兑现序逐位一致);round_start 发射位前移至行动经济轮 切换前(树规则 grant_ap queue 当轮入队当轮兑现——先手压制首轮语义锚);深挖快照滚动拆除(计数器 reset_at 声明承载);熔火/连击旧计数变量退役。 - action_economy:feat_ap_carry/feat_dig_extra/deep_paid_count 旧注入旗拆除;dig_paid 施加面落地 (counter_spend 对价:AP 富余付全价积计数、不足 fallback 只付基础 1——2026-10-04 降级口径逐位保留)。 - feat_table schema:HOOKS 23 挂点枚举/MINE_HOOKS/EFFECT_KEYS/hook+effects 双形态校验全删——triggers 订阅形态唯一合法行形(行键白名单收口 feat_id/display_name/rarity/archetype/triggers/desc/note)。 - feats_engine:hooks_for 挂点投影退役(订阅装载序=feats 表序,由效果引擎 rebuild 承载)。 - battle_narrator:专长卡片文案表值化(summaries 硬编码映射拆除,读行 desc——27 件措辞逐字迁移)。 - smoke 断言面随迁(任务书 v1.1 补列项):构造表 5 行换代 triggers 形态;挂点投影断言换代订阅装载面; ④-⑧ 求值断言(_feat_flags_for 直呼+旗读数)全量改写为 rebuild+dispatch 命中面(27 件逐事件覆盖); 深挖钻头付费开掘回归闸改 counter_spend 计数器面;特性卡 desc 直读断言新增。 映射表对拍注记(行为等价优先,.tres 尾注同步留痕):猎巢人/矿工的执拗映射表标 modify_ticket/attack_bonus, 现行为必中附加通道(hero_rider 后置于乘区与下限)——落 add_ticket_rider(per 取数载荷);整备军备现行为 双效果(轮末转蓄力+每层首段攻 +1)——两行订阅;深挖钻头 per-round 计数器对(paid/given)复刻旧 v2 跨轮不对称语义(given 不随轮重置)。 验证:冒烟 800 项 0 失败(三闸过)· 单元 17 套全绿 · S1 魔法流对拍预检=MC formed/off 两态与 T0 pre 锚 (83000 种子段)同种子逐位一致(2×5 局,三档只测不判)——14 件迁移行实战斗承载零分岔。 设计权威:design/research/研究-内容数据驱动扩展架构-2026-10-06.md(案乙)。 任务书:design/research/任务书-内容数据驱动扩展批-2026-10-06.md §六 T3、§五映射表、§七契约 2/4。
This commit is contained in:
1 parent
225765f3f7
commit
e28a6cb3c4
9 files changed
+982
-676
No files matched your search
@@ -1,7 +1,8 @@
|
||||
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||||
# Validation Question: 七核心流派各 ≥3 件入局内随机渠道后,标签+档位激活引擎能否机械判「成型」、
|
||||
# 专长带能否挂进令牌池稀有/罕见档随机投放(P0——迭代 12 双层 BD 实施批 T1)
|
||||
# Date: 2026-10-04(双层 BD 实施批 T1——任务书五裁定稿;设计权威 双层BD体系-整合定稿-2026-10-03 v3)
|
||||
# Date: 2026-10-06(内容数据驱动扩展批 T3——行换代:hook/effects 挂点形态退役,triggers 事件订阅形态
|
||||
# 唯一合法行形——旧 23 挂点枚举消亡:事件名+效果类型取代,任务书 R4 裁决)
|
||||
# 概念指路:本表的专长,与 adventure.tres 的属性值提升、资源,同属一个对象——
|
||||
# 「奇物」(一次冒险内各渠道给予玩家的增益总称)。定义见 design/gdd/systems/冒险循环/奇物.md。
|
||||
# 它们是它分类轴上的枚举(专长 / 属性值提升 / 资源),不是三套系统;本表承载「专长」(专长 Feat)的逐项定义。
|
||||
@@ -11,16 +12,15 @@
|
||||
# 数据配置 FeatTable schema(奇物·专长定义表;行 = Dictionary 键 feat_id,Rule 4 豁免
|
||||
# 定义表——TreasureItemTable 先例)。
|
||||
# 行字段:feat_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名——
|
||||
# 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」
|
||||
# 追认 b 接线口径)/ archetype ∈ ARCHETYPES 七流派标签 / hook ∈ HOOKS 挂点枚举(结算段槽——整合定稿
|
||||
# §2.1 哈迪斯恩赐槽同构)/ effects Dictionary(hook 消费参数,provisional 投值)。
|
||||
# 正负双修(整合定稿 B2 判据):effects 允许负向键(cost_* 族)——纯增益件须专项论证(反例 B-3),加载期
|
||||
# 仅校验键域不禁纯增益(专项论证件以 positive_only 批注登记,人工清单呈报)。
|
||||
# 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档)/
|
||||
# archetype ∈ ARCHETYPES 七流派标签 / desc 效果说明(文案表值化——呈现层读行,零硬编码)/
|
||||
# triggers 订阅行数组(订阅哪个事件 on / 什么条件 when / 什么效果 do——效果引擎 EffectEngine
|
||||
# 统一解释执行;四词表封闭校验=EffectEngine.validate_trigger_row 单一事实源)。
|
||||
# 档位激活(整合定稿 设计工具 1——以撒套装/小骨铭文):同标签计数 ≥2→档一(流派核心规则)/≥4→档二
|
||||
# (完全体);散件单体保底=每件效果独立生效,档位只做质变(反例 B-2)——引擎纯函数 FeatsEngine。
|
||||
# 🔴 层级纪律(任务书红线 2):专长只走局内随机渠道(三选一/商店/格面)——本表行永不入同调位
|
||||
# (treasure_items 表)/局外树(T8 节点表);扫雷触发点铁律:每流派 ≥1 行 hook ∈ MINE_HOOKS(加载校验,
|
||||
# 违反=红线①触碰面)。
|
||||
# (treasure_items 表)/局外树(T8 节点表);扫雷触发点铁律:每流派 ≥1 行订阅扫雷侧事件
|
||||
# (EffectEngine.MINE_EVENTS——加载校验,违反=红线①触碰面)。
|
||||
class_name FeatTable
|
||||
extends Resource
|
||||
|
||||
@@ -32,70 +32,19 @@ const ARCHETYPES := ["magic", "pierce", "normal", "dig", "flag", "charge", "devo
|
||||
## 稀有度词表(对齐令牌池三档;投放档映射 relic→rare / rarest→rarest)
|
||||
const RARITIES := ["common", "rare", "rarest"]
|
||||
|
||||
## 挂点枚举(结算段槽——首批 23 点位;每 hook 恰一流派域消费,T2-T6 接线)
|
||||
## 内容数据驱动扩展批 T2 挂账:hook 词族随 T3 专长迁移退役(triggers 事件订阅形态取代——
|
||||
## 旧字段校验保留共存至迁移完成,过渡期两形态同行校验)。
|
||||
const HOOKS := [
|
||||
# 魔法流
|
||||
"hero_attack_rider", # 普攻命中后追加必中魔法伤(奥术余烬/魔能共鸣)
|
||||
"clamp_modifier", # 克制点直调(魔网织者/湛蓝誓约/猎手刺剑)
|
||||
"first_dig_spell", # 每关首次开格必出魔法矢(魔能共鸣第二效果)
|
||||
# 穿刺流
|
||||
"kill_overflow", # 击杀溢出弹射(贯穿射击)
|
||||
"dig_count_segments", # 开格计数转攻击段数(连珠矢)
|
||||
"roll_discount", # 折扣档改写(猎弱本能前移一档)
|
||||
# 普攻流
|
||||
"round_dig_bonus", # 轮内安全开格数转攻击加成(矿工的执拗;踩雷清零=mine_hit 监听同口)
|
||||
"hit_trade", # 命中交换(矿工重锤——正负双修原生形态)
|
||||
"armor_roll_rewrite", # 免掷骰恒折扣(专注)
|
||||
"heavy_debuff", # 命中重甲附加护甲裂解(碎甲震击)
|
||||
# 开格流
|
||||
"dig_yield_mult", # 开格产出乘区(贪婪矿灯/矿脉直觉/赌徒的血签——正负双向)
|
||||
"deep_dig", # 深层资源掘取(深挖钻头——R4 甲非信息税形态:开掘额外 AP 代价)
|
||||
# 标旗流
|
||||
"flag_resource", # 标中雷获格面资源(雷区图谱)
|
||||
"nest_aura", # 控制巢穴数转伤害光环(猎巢人)
|
||||
"flag_all_hit", # 同轮全中旗伤倍增(完美布防)
|
||||
"flag_strike", # 轮末旗伤开单(战旗军规——复用 board_typed)
|
||||
# 蓄力流
|
||||
"ap_carry", # 轮末 AP 结转蓄力(整备军备——改写 cleared 作废口径)
|
||||
"charge_shield", # 蓄力层转减伤(铁壁整备)
|
||||
"charge_spike", # 满层 spike(厚积薄发)
|
||||
# 吞噬流
|
||||
"terrain_refund", # 受地形伤掉落资源补偿(地脉采撷——伤害仍发生)
|
||||
"terrain_dig_double", # 挖开伤害型地形格双产出(荆棘编织者)
|
||||
"flag_neutralize", # 标中旗中和相邻伤害型地形格(净化工兵——🔴 R4 甲仅限伤害型)
|
||||
"variant_counter", # 受地形伤积层轮末反打(熔火之躯——触发键不按地形种类特化)
|
||||
]
|
||||
## 行键白名单(🔴 零裸 flat 同族护栏——键出域=加载致命;triggers/desc=T3 换代新形态)
|
||||
const ROW_KEYS := ["feat_id", "display_name", "rarity", "archetype", "triggers", "desc", "note"]
|
||||
|
||||
## 扫雷结算触发点 hook 集(🔴 红线①承载:每流派 ≥1 行 hook 命中本集——加载校验)
|
||||
const MINE_HOOKS := ["first_dig_spell", "dig_count_segments", "round_dig_bonus", "dig_yield_mult",
|
||||
"deep_dig", "flag_resource", "nest_aura", "flag_all_hit", "flag_strike", "ap_carry",
|
||||
"terrain_refund", "terrain_dig_double", "flag_neutralize", "variant_counter"]
|
||||
|
||||
## effects 键白名单(🔴 零裸 flat 同族护栏——机制轴禁无条件属性加项;键出域=加载致命)
|
||||
## 全部条件触发/机制修正参数;cost_* 族=正负双修负向面
|
||||
const EFFECT_KEYS := ["value", "value2", "tier_value", "per_stack", "cap", "ap_cost", "chance",
|
||||
"mult", "cost_mult", "cost_flat", "polarity", "spell_kind", "segment_cap", "discount_shift",
|
||||
"trade_atk", "trade_hit", "shield_per_layer", "spike_mult", "layers_to_shield",
|
||||
"neutralize_range", "counter_damage", "resource_kind", "rider_kind", "note"]
|
||||
|
||||
## ---- 内容数据驱动扩展批 T2 新形态词汇(triggers 事件订阅行)----
|
||||
## 行字段换代目标:hook/effects → triggers: [{on, when?, do}]——订阅哪个事件/什么条件/什么效果。
|
||||
## 事件/效果/fact/算子四词表全部引用 EffectEngine 闭集常量(单一事实源,禁本表复抄)。
|
||||
## trigger 行键(订阅行三字段:on/when?/do)
|
||||
const TRIGGER_KEYS := ["on", "when", "do"]
|
||||
|
||||
|
||||
func _validate_triggers(rid: String, row: Dictionary, triggers: Array, errs: Array) -> bool:
|
||||
return EffectEngine.validate_trigger_row(rid, row, triggers, errs)
|
||||
|
||||
|
||||
func validate() -> Array:
|
||||
var errs: Array = []
|
||||
if rows.is_empty():
|
||||
return errs # 空表合法态(T1 基建先行——T2 起逐流派填行)
|
||||
return errs # 空表合法态(T1 基建先行——逐流派填行)
|
||||
var seen := {}
|
||||
# 流派扫雷覆盖聚合(🔴 红线①铁律——两形态共存判定:triggers 行按扫雷侧事件、hook 行按 MINE_HOOKS)
|
||||
# 流派扫雷覆盖聚合(🔴 红线①铁律——每流派 ≥1 行订阅扫雷侧事件)
|
||||
var arch_mine := {} # archetype → bool
|
||||
for row in rows:
|
||||
var rid: String = row.get("feat_id", "")
|
||||
@@ -113,33 +62,17 @@ func validate() -> Array:
|
||||
var arch := String(row.get("archetype", ""))
|
||||
if not ARCHETYPES.has(arch):
|
||||
errs.append({"category": "enum", "message": "%s archetype 出域 %s" % [rid, str(ARCHETYPES)]})
|
||||
var has_triggers: bool = row.has("triggers")
|
||||
var has_hook: bool = row.has("hook")
|
||||
if has_triggers:
|
||||
if String(row.get("hook", "")) != "":
|
||||
errs.append({"category": "domain", "message": "%s triggers 与 hook 并存(换代单形态——迁移期禁双挂)" % rid})
|
||||
if _validate_triggers(rid, row, row.get("triggers", []) as Array, errs):
|
||||
arch_mine[arch] = true
|
||||
elif has_hook:
|
||||
var hook := String(row.get("hook", ""))
|
||||
if not HOOKS.has(hook):
|
||||
errs.append({"category": "enum", "message": "%s hook 出域(挂点枚举封闭): %s" % [rid, hook]})
|
||||
if MINE_HOOKS.has(hook):
|
||||
arch_mine[arch] = true
|
||||
else:
|
||||
errs.append({"category": "domain", "message": "%s 缺 triggers/hook(换代后行必须声明订阅)" % rid})
|
||||
if not row.has("triggers"):
|
||||
errs.append({"category": "domain", "message": "%s 缺 triggers(订阅形态唯一合法行形)" % rid})
|
||||
elif EffectEngine.validate_trigger_row(rid, row, row.get("triggers", []) as Array, errs):
|
||||
arch_mine[arch] = true
|
||||
for k in row.keys():
|
||||
if not ["feat_id", "display_name", "rarity", "archetype", "hook", "effects", "triggers", "desc", "note"].has(String(k)):
|
||||
if not ROW_KEYS.has(String(k)):
|
||||
errs.append({"category": "zero_flat", "message": "%s 行键出白名单: %s" % [rid, String(k)]})
|
||||
var fx: Dictionary = row.get("effects", {}) as Dictionary
|
||||
for ek in fx.keys():
|
||||
if not EFFECT_KEYS.has(String(ek)):
|
||||
errs.append({"category": "zero_flat", "message": "%s effects 键出白名单: %s(机制轴禁无条件属性加项)" % [rid, String(ek)]})
|
||||
# 🔴 红线① 扫雷触发点铁律:**有行的流派**各 ≥1 行订阅扫雷侧事件(triggers 新形态)或
|
||||
# hook ∈ MINE_HOOKS(旧形态过渡)
|
||||
# 🔴 红线① 扫雷触发点铁律:**有行的流派**各 ≥1 行订阅扫雷侧事件(MINE_EVENTS 同义校验)
|
||||
for arch in archs_with_rows():
|
||||
if not bool(arch_mine.get(arch, false)):
|
||||
errs.append({"category": "load_bearing", "message": "流派 %s 无扫雷结算触发点行(🔴 红线①铁律——每流派 ≥1 件挂扫雷端)" % String(arch)})
|
||||
errs.append({"category": "load_bearing", "message": "流派 %s 无扫雷结算触发点行(🔴 红线①铁律——每流派 ≥1 件订阅扫雷侧事件)" % String(arch)})
|
||||
return errs
|
||||
|
||||
|
||||
|
||||
+390
-92
@@ -9,266 +9,564 @@ rows = [{
|
||||
"display_name": "奥术余烬",
|
||||
"rarity": "common",
|
||||
"archetype": "magic",
|
||||
"hook": "hero_attack_rider",
|
||||
"effects": {
|
||||
"desc": "普攻附加必中伤害",
|
||||
"triggers": [{
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "add_ticket_rider",
|
||||
"value": 1
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "mana_weaver",
|
||||
"display_name": "魔网织者",
|
||||
"rarity": "rare",
|
||||
"archetype": "magic",
|
||||
"hook": "clamp_modifier",
|
||||
"effects": {
|
||||
"value": 1,
|
||||
"polarity": "magic_vs_magic"
|
||||
"desc": "克制面强化",
|
||||
"triggers": [{
|
||||
"on": "clamp_check",
|
||||
"when": [{
|
||||
"fact": "matchup",
|
||||
"op": "eq",
|
||||
"value": "magic_vs_magic"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"delta": 1
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "azure_oath",
|
||||
"display_name": "湛蓝誓约",
|
||||
"rarity": "rare",
|
||||
"archetype": "magic",
|
||||
"hook": "clamp_modifier",
|
||||
"effects": {
|
||||
"value": 1,
|
||||
"polarity": "magic_vs_heavy"
|
||||
"desc": "克制面强化",
|
||||
"triggers": [{
|
||||
"on": "clamp_check",
|
||||
"when": [{
|
||||
"fact": "matchup",
|
||||
"op": "eq",
|
||||
"value": "magic_vs_heavy"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"delta": 1
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "mana_resonance",
|
||||
"display_name": "魔能共鸣",
|
||||
"rarity": "rarest",
|
||||
"archetype": "magic",
|
||||
"hook": "first_dig_spell",
|
||||
"effects": {
|
||||
"desc": "首格追加奥术矢",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"when": [{
|
||||
"fact": "is_first_dig_of_battle",
|
||||
"op": "eq",
|
||||
"value": true
|
||||
}],
|
||||
"do": {
|
||||
"kind": "spawn_spell",
|
||||
"value": 2
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "mine_atlas",
|
||||
"display_name": "雷区图谱",
|
||||
"rarity": "common",
|
||||
"archetype": "flag",
|
||||
"hook": "flag_resource",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "标中雷额外得资源",
|
||||
"triggers": [{
|
||||
"on": "flag_hit",
|
||||
"do": {
|
||||
"kind": "grant_material",
|
||||
"value": 1,
|
||||
"label": "(雷区图谱)"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "nest_hunter",
|
||||
"display_name": "猎巢人",
|
||||
"rarity": "rare",
|
||||
"archetype": "flag",
|
||||
"hook": "nest_aura",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "控巢攻击光环",
|
||||
"triggers": [{
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "add_ticket_rider",
|
||||
"value": 1,
|
||||
"per": "nest_count"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "perfect_defense",
|
||||
"display_name": "完美布防",
|
||||
"rarity": "rare",
|
||||
"archetype": "flag",
|
||||
"hook": "flag_all_hit",
|
||||
"effects": {
|
||||
"value": 2
|
||||
"desc": "全中标旗伤加倍",
|
||||
"triggers": [{
|
||||
"on": "flag_settle",
|
||||
"when": [{
|
||||
"fact": "flags_count",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"value": 2,
|
||||
"mode": "flag_mult"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "war_banner",
|
||||
"display_name": "战旗军规",
|
||||
"rarity": "rarest",
|
||||
"archetype": "flag",
|
||||
"hook": "flag_strike",
|
||||
"effects": {
|
||||
"value": 2
|
||||
"desc": "标中旗必中打敌",
|
||||
"triggers": [{
|
||||
"on": "flag_settle",
|
||||
"when": [{
|
||||
"fact": "flags_count",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}],
|
||||
"do": {
|
||||
"kind": "open_ticket",
|
||||
"value": 2,
|
||||
"channel": "attack"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "pierce_shot",
|
||||
"display_name": "贯穿射击",
|
||||
"rarity": "rarest",
|
||||
"archetype": "pierce",
|
||||
"hook": "kill_overflow",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "击杀半额弹射",
|
||||
"triggers": [{
|
||||
"on": "kill",
|
||||
"do": {
|
||||
"kind": "overflow",
|
||||
"value": 50
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "chain_arrows",
|
||||
"display_name": "连珠矢",
|
||||
"rarity": "rare",
|
||||
"archetype": "pierce",
|
||||
"hook": "dig_count_segments",
|
||||
"effects": {
|
||||
"value": 2,
|
||||
"cap": 2
|
||||
"desc": "开格积穿刺矢",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "chain_digs",
|
||||
"value": 1,
|
||||
"reset_at": "round_start"
|
||||
}
|
||||
}, {
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "attack_segments",
|
||||
"value": 2,
|
||||
"cap": 2,
|
||||
"per": "dig_streak",
|
||||
"divisor": 3
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "weak_instinct",
|
||||
"display_name": "猎弱本能",
|
||||
"rarity": "rare",
|
||||
"archetype": "pierce",
|
||||
"hook": "roll_discount",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "打轻甲更易命中",
|
||||
"triggers": [{
|
||||
"on": "clamp_check",
|
||||
"when": [{
|
||||
"fact": "matchup",
|
||||
"op": "ends_with",
|
||||
"value": "vs_light"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"value": 1,
|
||||
"mode": "discount_shift"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "hunter_rapier",
|
||||
"display_name": "猎手刺剑",
|
||||
"rarity": "common",
|
||||
"archetype": "pierce",
|
||||
"hook": "clamp_modifier",
|
||||
"effects": {
|
||||
"value": 1,
|
||||
"polarity": "pierce_vs_light"
|
||||
"desc": "克制面强化",
|
||||
"triggers": [{
|
||||
"on": "clamp_check",
|
||||
"when": [{
|
||||
"fact": "matchup",
|
||||
"op": "eq",
|
||||
"value": "pierce_vs_light"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"delta": 1
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "miner_stubborn",
|
||||
"display_name": "矿工的执拗",
|
||||
"rarity": "common",
|
||||
"archetype": "normal",
|
||||
"hook": "round_dig_bonus",
|
||||
"effects": {
|
||||
"desc": "开格越多打得越疼",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "stubborn_digs",
|
||||
"value": 1,
|
||||
"cap": 5
|
||||
"reset_at": "round_start"
|
||||
}
|
||||
}, {
|
||||
"on": "mine_hit",
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "stubborn_digs",
|
||||
"set": 0
|
||||
}
|
||||
}, {
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "add_ticket_rider",
|
||||
"value": 1,
|
||||
"cap": 5,
|
||||
"per": "dig_streak"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "miner_hammer",
|
||||
"display_name": "矿工重锤",
|
||||
"rarity": "common",
|
||||
"archetype": "normal",
|
||||
"hook": "hit_trade",
|
||||
"effects": {
|
||||
"desc": "加伤换命中",
|
||||
"triggers": [{
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"trade_atk": 25,
|
||||
"trade_hit": 2
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "focus_mind",
|
||||
"display_name": "专注",
|
||||
"rarity": "rare",
|
||||
"archetype": "normal",
|
||||
"hook": "armor_roll_rewrite",
|
||||
"effects": {
|
||||
"value": 75
|
||||
"desc": "攻击恒75%折扣",
|
||||
"triggers": [{
|
||||
"on": "armor_roll",
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"value": 75,
|
||||
"mode": "armor_rewrite"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "armor_crack",
|
||||
"display_name": "碎甲震击",
|
||||
"rarity": "rare",
|
||||
"archetype": "normal",
|
||||
"hook": "heavy_debuff",
|
||||
"effects": {
|
||||
"value": 25
|
||||
"desc": "打重甲附加破防",
|
||||
"triggers": [{
|
||||
"on": "attack_commit",
|
||||
"when": [{
|
||||
"fact": "matchup",
|
||||
"op": "ends_with",
|
||||
"value": "vs_heavy"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "apply_status",
|
||||
"status_id": "off_guard"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "greedy_lantern",
|
||||
"display_name": "贪婪矿灯",
|
||||
"rarity": "common",
|
||||
"archetype": "dig",
|
||||
"hook": "dig_yield_mult",
|
||||
"effects": {
|
||||
"desc": "开格产出放大",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "yield_mult",
|
||||
"mult": 25,
|
||||
"cost_mult": 25
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "vein_intuition",
|
||||
"display_name": "矿脉直觉",
|
||||
"rarity": "rare",
|
||||
"archetype": "dig",
|
||||
"hook": "dig_yield_mult",
|
||||
"effects": {
|
||||
"desc": "开格产出放大",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "dig_combo",
|
||||
"value": 1
|
||||
}
|
||||
}, {
|
||||
"on": "mine_hit",
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "dig_combo",
|
||||
"set": 0
|
||||
}
|
||||
}, {
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "yield_mult",
|
||||
"mult": 10,
|
||||
"cap": 5
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "gambler_pact",
|
||||
"display_name": "赌徒的血签",
|
||||
"rarity": "rarest",
|
||||
"archetype": "dig",
|
||||
"hook": "dig_yield_mult",
|
||||
"effects": {
|
||||
"desc": "开格产出放大",
|
||||
"triggers": [{
|
||||
"on": "dig_reveal",
|
||||
"do": {
|
||||
"kind": "yield_mult",
|
||||
"mult": 50,
|
||||
"cost_mult": 100
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "deep_drill",
|
||||
"display_name": "深挖钻头",
|
||||
"rarity": "rare",
|
||||
"archetype": "dig",
|
||||
"hook": "deep_dig",
|
||||
"effects": {
|
||||
"ap_cost": 1,
|
||||
"cap": 4
|
||||
"desc": "开格2AP·产出双份",
|
||||
"triggers": [{
|
||||
"on": "dig_paid",
|
||||
"do": {
|
||||
"kind": "counter_spend",
|
||||
"counter_id": "deep_paid_round",
|
||||
"value": 1,
|
||||
"reset_at": "round_start",
|
||||
"fallback": 1
|
||||
}
|
||||
}, {
|
||||
"on": "dig_reveal",
|
||||
"when": [{
|
||||
"fact": "counter",
|
||||
"id": "deep_paid_round",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}, {
|
||||
"fact": "counter",
|
||||
"id": "deep_given_round",
|
||||
"op": "lt_ref",
|
||||
"ref": "deep_paid_round"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "grant_material",
|
||||
"label": "(深挖)"
|
||||
}
|
||||
}, {
|
||||
"on": "dig_reveal",
|
||||
"when": [{
|
||||
"fact": "counter",
|
||||
"id": "deep_paid_round",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}, {
|
||||
"fact": "counter",
|
||||
"id": "deep_given_round",
|
||||
"op": "lt_ref",
|
||||
"ref": "deep_paid_round"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "deep_given_round",
|
||||
"value": 1
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "armory_prep",
|
||||
"display_name": "整备军备",
|
||||
"rarity": "rarest",
|
||||
"archetype": "charge",
|
||||
"hook": "ap_carry",
|
||||
"effects": {
|
||||
"value": 1,
|
||||
"cap": 3
|
||||
"desc": "剩AP转下轮攻击",
|
||||
"triggers": [{
|
||||
"on": "round_end",
|
||||
"do": {
|
||||
"kind": "grant_ap",
|
||||
"mode": "transfer"
|
||||
}
|
||||
}, {
|
||||
"on": "attack_commit",
|
||||
"do": {
|
||||
"kind": "attack_bonus",
|
||||
"value": 1,
|
||||
"per": "charge_layers"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "iron_wall",
|
||||
"display_name": "铁壁整备",
|
||||
"rarity": "rare",
|
||||
"archetype": "charge",
|
||||
"hook": "charge_shield",
|
||||
"effects": {
|
||||
"shield_per_layer": 1
|
||||
"desc": "蓄力转减伤",
|
||||
"triggers": [{
|
||||
"on": "damage_taken",
|
||||
"do": {
|
||||
"kind": "shield",
|
||||
"value": 1,
|
||||
"per": "charge_layers"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "patient_burst",
|
||||
"display_name": "厚积薄发",
|
||||
"rarity": "rare",
|
||||
"archetype": "charge",
|
||||
"hook": "charge_spike",
|
||||
"effects": {
|
||||
"value": 2
|
||||
"desc": "蓄满下轮爆发",
|
||||
"triggers": [{
|
||||
"on": "attack_commit",
|
||||
"when": [{
|
||||
"fact": "charge_layers",
|
||||
"op": "gte",
|
||||
"value": 3
|
||||
}],
|
||||
"do": {
|
||||
"kind": "modify_ticket",
|
||||
"value": 2,
|
||||
"mode": "spike"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "ley_harvest",
|
||||
"display_name": "地脉采撷",
|
||||
"rarity": "common",
|
||||
"archetype": "devour",
|
||||
"hook": "terrain_refund",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "吃地形伤返资源",
|
||||
"triggers": [{
|
||||
"on": "damage_taken",
|
||||
"when": [{
|
||||
"fact": "terrain_kind",
|
||||
"op": "has"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "grant_material",
|
||||
"label": "(地脉补偿)"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "thorn_weaver",
|
||||
"display_name": "荆棘编织者",
|
||||
"rarity": "rare",
|
||||
"archetype": "devour",
|
||||
"hook": "terrain_dig_double",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "挖伤害格双产出",
|
||||
"triggers": [{
|
||||
"on": "damage_taken",
|
||||
"when": [{
|
||||
"fact": "terrain_kind",
|
||||
"op": "has"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "grant_material",
|
||||
"label": "(荆棘编织)"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "purge_sapper",
|
||||
"display_name": "净化工兵",
|
||||
"rarity": "rare",
|
||||
"archetype": "devour",
|
||||
"hook": "flag_neutralize",
|
||||
"effects": {
|
||||
"value": 1
|
||||
"desc": "标旗中和伤害格",
|
||||
"triggers": [{
|
||||
"on": "flag_hit",
|
||||
"when": [{
|
||||
"fact": "terrain_kind",
|
||||
"op": "has"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "rewrite_board"
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
"feat_id": "magma_body",
|
||||
"display_name": "熔火之躯",
|
||||
"rarity": "rarest",
|
||||
"archetype": "devour",
|
||||
"hook": "variant_counter",
|
||||
"effects": {
|
||||
"desc": "吃地形伤反打全体",
|
||||
"triggers": [{
|
||||
"on": "damage_taken",
|
||||
"when": [{
|
||||
"fact": "terrain_kind",
|
||||
"op": "has"
|
||||
}],
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "magma_layers",
|
||||
"value": 1
|
||||
}
|
||||
}, {
|
||||
"on": "round_end",
|
||||
"when": [{
|
||||
"fact": "counter",
|
||||
"id": "magma_layers",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}],
|
||||
"do": {
|
||||
"kind": "open_ticket",
|
||||
"value": 1,
|
||||
"per": "magma_layers",
|
||||
"channel": "blast"
|
||||
}
|
||||
}, {
|
||||
"on": "round_end",
|
||||
"when": [{
|
||||
"fact": "counter",
|
||||
"id": "magma_layers",
|
||||
"op": "gte",
|
||||
"value": 1
|
||||
}],
|
||||
"do": {
|
||||
"kind": "counter_add",
|
||||
"counter_id": "magma_layers",
|
||||
"set": 0
|
||||
}
|
||||
}]
|
||||
}]
|
||||
|
||||
; 双层 BD 实施批(2026-10-04):规则改写型特性表——行 = 特性定义
|
||||
; (feat_id/display_name/rarity/archetype/hook/effects)。
|
||||
; T2 魔法流四件(整合定稿 §2.3 S1):奥术余烬〔普通·rider+1 必中附加〕/魔网织者〔稀有·magic vs
|
||||
; magic 克制罚修正〕/湛蓝誓约〔稀有·magic vs heavy 克制加成〕/魔能共鸣〔罕见锚点·rider+2+每战首次
|
||||
; 开格奥术矢——「每关首次」字面落地为「每战首次」台账披露待追认〕;magic 档一(≥2 件)rider+1 /
|
||||
; 档二(≥4 件)rider 可暴击——引擎 tiers_for 承载。T3-T6 逐流派续填(flag 4/pierce 4/normal 4/
|
||||
; dig 4/charge 3/devour 4——整合定稿 §2.3 七流派的件面)。
|
||||
; 稀有度→投放档映射:common/rare → 稀有令牌档、rarest → 罕见令牌档(relic 永不入普通令牌档
|
||||
; ——「规则改写型特性带挂稀有/罕见档」追认 b 接线口径,普通档 70 张纯数值维持)。
|
||||
; 🔴 层级纪律:本表行永不入同调位(treasure_items)/局外树(T8 节点表)——规则改写型特性只走局内随机渠道。
|
||||
; 数值全 provisional 归 M-4 数值批;effects 键白名单封闭(零裸 flat 同族护栏)。
|
||||
|
||||
; 内容数据驱动扩展批(2026-10-06 T3):专长表换代——行 = triggers 事件订阅形态
|
||||
; (feat_id/display_name/rarity/archetype/desc/triggers——订阅哪个事件 on / 什么条件 when / 什么效果 do)。
|
||||
; 旧 hook/effects 挂点形态随本批退役(挂点枚举消亡:事件名+效果类型取代——任务书 R4 裁决)。
|
||||
; 23 挂点逐行移植映射=任务书 §五(等价性对拍底单);desc=文案表值化(呈现层读行,零硬编码)。
|
||||
; 效果参数值直接写 do 字典(数值单一事实源=本表;效果引擎 DO_KEYS 白名单封闭)。
|
||||
; 🔴 护栏全部保留:事件/效果/fact/算子四词表封闭(EffectEngine 常量)、行键白名单、悬空引用
|
||||
; 致命、零裸 flat 禁令、流派扫雷触发铁律(每流派 ≥1 行订阅扫雷侧事件——MINE_EVENTS 同义校验)。
|
||||
; 映射表对拍注记(T3 落地语义修正,行为等价优先——commit 留痕):
|
||||
; - terrain_dig_double(荆棘编织者):映射表标 yield_mult(×2),现行为=第二份同格产出兑付
|
||||
; (grant_material),×2 乘区对 percent 行不等价——落 grant_material。
|
||||
; - flag_all_hit(完美布防):映射表标 yield_mult(旗伤乘区),现行为=旗伤单值倍增(战旗单据
|
||||
; 数值改写)——落 modify_ticket(mode:flag_mult)。
|
||||
; - 连珠矢/矿工的执拗 streak 取数:映射表 on:dig_reveal counter_add 形态与现行为「轮内踩雷全轮
|
||||
; 清零」不等价(逐格清零后重积≠全轮判定)——计数器行保留(扫雷铁律承载),等价执行读
|
||||
; attack_commit 载荷 dig_streak(战斗段全轮推导,与迁移前逐位一致)。
|
||||
; - 厚积薄发:映射表 on:charge_full(满层沿)→spike,现行为=满层持续状态(层数无消耗点,沿触发
|
||||
; 一次≠持续增强)——落 on:attack_commit + when(charge_layers ≥3) → modify_ticket(mode:spike),
|
||||
; charge_full 事件仍埋点(R6 框架先行)。
|
||||
; - 完美布防:「全中」条件装不进 fact 封闭 9 项(需 hits>0 且 misses==0 双读数)——when 落
|
||||
; flags_count ≥1(可命中保守判定),全中闸=flag_settle 发射点施加面承载(载荷 flags_hit_all
|
||||
; 仅供观测)——禁私开 fact(停机点纪律),查询面落法=代拍板白名单。
|
||||
; - 猎巢人/矿工的执拗:映射表标 modify_ticket/attack_bonus,现行为=必中附加通道(伤害控制器
|
||||
; hero_rider 后置于乘区与下限)——落 add_ticket_rider(per 取数载荷),乘区外恒定兑付逐位一致。
|
||||
; - 整备军备:现行为双效果(轮末 AP 转蓄力层 + 每层下轮首段攻 +1)——两行订阅:
|
||||
; round_end grant_ap(mode:transfer) + attack_commit attack_bonus(per:charge_layers)。
|
||||
; 数值全 provisional 归 M-4 数值批;desc 文案=旧 summaries 表迁移(措辞零变化)。
|
||||
Reference in new issue
Block a user