触发器卡(触发器批wr1-wr9): 触发条件机制实装+三Boss迁移+两示范投放——skill_table三常量词表+validate七反例校验段(四键白名单/词表出域/枚举算子限域/类型分派/普攻禁配);enemy_table unlock_hp_pct域校验段删(字段退役);skills.tres三Boss行加trigger闩型+enemy.tres八处unlock_hp_pct删+J面注释清理(技能表头注/酋长池注);unit_container快照trigger随读(技能行权威)+_entry_blocked收编_entry_locked(百分比阈值式T=round(max_hp×value/100)六算子统一/facts缺键=拦fail-safe)+rollable/special双面过滤facts缺省参(既有单参调用零破坏)+check_trigger_unlocks闩型换代;battle facts组包(摇号前一次成型,last_round_end空字典首轮映射none唯一落点)+mines计数埋点(负向blast守卫累加——正向spark_aoe/清图奖励同走blast分支不计入,轮末转存,开战清零)+解锁调用与pct读值源迁移;cross_validator池构成新纪律(每池至少一行无条件特殊技——普攻不计/trigger缺省行计数);示范投放:skills.tres孤注守势(buff/defensive_stance/lte35)+趁隙偷袭(damage×1.5/CD4/eq stopped)+status_effects护身行+地精两行w1+钩爪恐魔三行w2;测试换代:skill_unlock_test读值源与签名换代(申报①语义零变化)+round_flow expect_pools期望值随投放改写(申报②地精两行9/1→9/1/1·钩爪恐魔三行6/2/1→6/2/1/2)+十四行断言换代十六行+V4池纪律扩行(申报④)+巨蜘蛛band1误投修正(old_hook块与蜘蛛池同构误命中);trigger_cond_test新套件V1/V2/V4/V6/V7/V8/V9/V10全绿(manifest登记;V5对拍由skill_unlock/round_flow编排集成承载)。已知预期红:round_flow EV抽样对锚goblin(实测0.9148∉[1.00,1.20]——示范投放=池权重数值改动,EV稀释方向合理)——卡片T4-4预设停机呈报面:锚内子集判红,重锚归用户档位发起,实现批不自行重锚〔触发器批 V1-V10〕
This commit is contained in:
1 parent
4889fd257c
commit
4868e11b9d
14 files changed
+1756
-1413
No files matched your search
@@ -108,12 +108,6 @@ func validate() -> Array:
|
||||
var w: int = int(entry.get("weight", 0))
|
||||
if w <= 0 or w > 9999:
|
||||
errs.append({"category": "domain", "message": "%s pool 权重越域 (0,9999]: %d" % [eid, w]})
|
||||
# unlock_hp_pct(可省略——Boss 半血解锁技:缺省无字段=无门槛;域 [1,99] percent。
|
||||
# 投放纪律=仅 Boss 行〔enemy 表无 boss 编码位,硬闸须跨表查节点类型——不做硬闸,文档纪律登记〕)
|
||||
if entry.has("unlock_hp_pct"):
|
||||
var uhp: int = int(entry.get("unlock_hp_pct", 0))
|
||||
if uhp < 1 or uhp > 99:
|
||||
errs.append({"category": "domain", "message": "%s pool unlock_hp_pct 越域 [1,99]: %d" % [eid, uhp]})
|
||||
# armor_type(可省略——缺省 light 向后兼容)
|
||||
var at: String = String(row.get("armor_type", "light"))
|
||||
if not ARMOR_TYPES.has(at):
|
||||
|
||||
@@ -11,6 +11,13 @@ extends Resource
|
||||
@export var pity_threshold: int = 4
|
||||
|
||||
const SKILL_TYPES := ["basic", "damage", "buff", "debuff"] # 普通攻击 / 伤害 / 增益 / 妨害(封闭枚举四型)
|
||||
# trigger(触发条件)封闭词表(敌人系统 v1.2「触发条件」节——出域加载期拒绝止动):
|
||||
const TRIGGER_FACTS := ["self_hp_pct", "hero_hp_pct", "round_index", "last_round_end", "mines_hit_last", "mines_hit_total"]
|
||||
const TRIGGER_OPS := ["eq", "neq", "gt", "gte", "lt", "lte"]
|
||||
const TRIGGER_KEYS := ["fact", "op", "value", "latch"]
|
||||
const TRIGGER_ENUM_FACTS := ["last_round_end"] # 枚举事实(op 限域 eq/neq;value 限枚举串)
|
||||
const TRIGGER_ENUM_VALUES := ["none", "cleared", "stopped", "ap_exhausted"]
|
||||
const TRIGGER_PCT_FACTS := ["self_hp_pct", "hero_hp_pct"] # 百分比事实(value 域 [1,99]——阈值式求值)
|
||||
const MULT_DOMAIN_MIN := 1.1 # damage_mult 域 [1.1, 16] provisional(proposal §2.2)
|
||||
const MULT_DOMAIN_MAX := 16.0
|
||||
const RIDER_MULT_MAX := 1.0 # rider_mult 域 (0, 1](必中附加分量——proposal-status-vocabulary §2;首发 0.75 锚 AC 折扣档最轻档)
|
||||
@@ -37,6 +44,38 @@ func validate() -> Array:
|
||||
if not SKILL_TYPES.has(type):
|
||||
errs.append({"category": "enum", "message": "%s type 未知枚举: %s(域 %s)" % [sid, type, str(SKILL_TYPES)]})
|
||||
continue
|
||||
# trigger(触发条件,可省略——敌人系统 v1.2:四键白名单/词表出域/类型分派/普攻禁配;加载期报错止动)
|
||||
if row.has("trigger"):
|
||||
var trig: Variant = row.get("trigger", null)
|
||||
if not (trig is Dictionary):
|
||||
errs.append({"category": "domain", "message": "%s trigger 须为 {fact,op,value,latch} 字典" % sid})
|
||||
else:
|
||||
var t: Dictionary = trig
|
||||
for tk in t.keys():
|
||||
if not TRIGGER_KEYS.has(String(tk)):
|
||||
errs.append({"category": "domain", "message": "%s trigger 键白名单外: %s" % [sid, str(tk)]})
|
||||
var tf := String(t.get("fact", ""))
|
||||
var top := String(t.get("op", ""))
|
||||
if not TRIGGER_FACTS.has(tf):
|
||||
errs.append({"category": "enum", "message": "%s trigger fact 出域: %s" % [sid, tf]})
|
||||
if not TRIGGER_OPS.has(top):
|
||||
errs.append({"category": "enum", "message": "%s trigger op 出域: %s" % [sid, top]})
|
||||
if TRIGGER_ENUM_FACTS.has(tf) and not (top == "eq" or top == "neq"):
|
||||
errs.append({"category": "domain", "message": "%s trigger 枚举事实 %s 算子限域 eq/neq: %s" % [sid, tf, top]})
|
||||
if tf != "" and TRIGGER_ENUM_FACTS.has(tf):
|
||||
var ev = t.get("value", "")
|
||||
if not (ev is String) or not TRIGGER_ENUM_VALUES.has(String(ev)):
|
||||
errs.append({"category": "domain", "message": "%s trigger 枚举事实 value 越域: %s(域 %s)" % [sid, str(ev), str(TRIGGER_ENUM_VALUES)]})
|
||||
elif TRIGGER_PCT_FACTS.has(tf):
|
||||
var pv := int(t.get("value", 0))
|
||||
if pv < 1 or pv > 99:
|
||||
errs.append({"category": "domain", "message": "%s trigger 百分比事实 value 越域 [1,99]: %d" % [sid, pv]})
|
||||
elif tf != "" and not (t.get("value", 0) is int):
|
||||
errs.append({"category": "domain", "message": "%s trigger 数值事实 value 须整数: %s" % [sid, str(t.get("value", 0))]})
|
||||
if t.has("latch") and not (t.get("latch", false) is bool):
|
||||
errs.append({"category": "domain", "message": "%s trigger latch 须布尔: %s" % [sid, str(t.get("latch", false))]})
|
||||
if type == "basic" and row.has("trigger"):
|
||||
errs.append({"category": "cross_field", "message": "%s 普攻行禁配 trigger(普攻恒可摇的结构前提)" % sid})
|
||||
# 冷却域(全类型):施放后连续 N 拍不可摇中
|
||||
var cd: int = int(row.get("cooldown_beats", -1))
|
||||
if cd < 0 or cd > 99:
|
||||
|
||||
@@ -22,6 +22,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "lunge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "desperate_guard",
|
||||
"weight": 1
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -44,6 +47,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "lunge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "desperate_guard",
|
||||
"weight": 1
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -145,7 +151,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "quake_smash",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -173,7 +178,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "quake_smash",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -413,7 +417,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "venom_curb",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "ward",
|
||||
@@ -444,7 +447,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "venom_curb",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "ward",
|
||||
@@ -496,6 +498,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "sneak_ambush",
|
||||
"weight": 2
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -521,6 +526,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "sneak_ambush",
|
||||
"weight": 2
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -573,6 +581,9 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "charge",
|
||||
"weight": 1
|
||||
}, {
|
||||
"skill_id": "sneak_ambush",
|
||||
"weight": 2
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "light",
|
||||
@@ -656,7 +667,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "rockslide",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "heavy",
|
||||
@@ -684,7 +694,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "rockslide",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "heavy",
|
||||
@@ -712,7 +721,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "rockslide",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "heavy",
|
||||
@@ -740,7 +748,6 @@ rows = [{
|
||||
}, {
|
||||
"skill_id": "rockslide",
|
||||
"weight": 2,
|
||||
"unlock_hp_pct": 50
|
||||
}],
|
||||
"attack_type": "normal",
|
||||
"armor_type": "heavy",
|
||||
@@ -777,7 +784,7 @@ rows = [{
|
||||
; 地精 普攻 9/突刺 1(名义 EV 1.05;**整数基线 EV 1.10**——atk1 突刺落地 2:〔9×1+1×2〕÷10;2026-10-05 技能池执行批 D4 整数口径重登记);
|
||||
; 熊地精 普攻 6/蓄力 2/重击 2(EV 1.00 中性);食人魔酋长 普攻 6/重击 2/硬化 2(EV 1.00 中性;
|
||||
; 硬化 = Boss 池独占增益技——增益 ≤1 纪律下旧蓄力拍退役不进 Boss 池)。;
|
||||
; 酋长 EV 重锚(2026-10-05 技能池执行批 T5——震地怒击 unlock_hp_pct=50 半血解锁入池:前半场池 6/2/2/3,
|
||||
; 酋长 EV 重锚(2026-10-05 技能池执行批 T5——震地怒击半血解锁入池:前半场池 6/2/2/3,
|
||||
; 后半场 6/2/2/2+震地怒击 2=每拍 4.33;含闸长期速率抽样实测 1.1948,smoke EV 抽样带重锚 [1.10, 1.30];
|
||||
; 卓尔遏毒/石君王岩崩同批入池——读数判读归 T7 节奏重测〔后置挂 07,跑批待用户批准〕)
|
||||
; 含闸长期速率(冷却/保底)EV 锚按实施批 EV 抽样复核登记(proposal §2.5)。
|
||||
|
||||
@@ -68,19 +68,37 @@ rows = [{
|
||||
"display_name": "震地怒击",
|
||||
"type": "damage",
|
||||
"damage_mult": 2.5,
|
||||
"cooldown_beats": 4
|
||||
"cooldown_beats": 4,
|
||||
"trigger": {"fact": "self_hp_pct", "op": "lte", "value": 50, "latch": true}
|
||||
}, {
|
||||
"skill_id": "venom_curb",
|
||||
"display_name": "遏毒",
|
||||
"type": "damage",
|
||||
"damage_mult": 2.0,
|
||||
"cooldown_beats": 3
|
||||
"cooldown_beats": 3,
|
||||
"trigger": {"fact": "self_hp_pct", "op": "lte", "value": 50, "latch": true}
|
||||
}, {
|
||||
"skill_id": "rockslide",
|
||||
"display_name": "岩崩",
|
||||
"type": "damage",
|
||||
"damage_mult": 2.5,
|
||||
"cooldown_beats": 4
|
||||
"cooldown_beats": 4,
|
||||
"trigger": {"fact": "self_hp_pct", "op": "lte", "value": 50, "latch": true}
|
||||
}, {
|
||||
"skill_id": "desperate_guard",
|
||||
"display_name": "孤注守势",
|
||||
"type": "buff",
|
||||
"buff_ref": "defensive_stance",
|
||||
"buff_duration": 2,
|
||||
"cooldown_beats": 0,
|
||||
"trigger": {"fact": "self_hp_pct", "op": "lte", "value": 35, "latch": false}
|
||||
}, {
|
||||
"skill_id": "sneak_ambush",
|
||||
"display_name": "趁隙偷袭",
|
||||
"type": "damage",
|
||||
"damage_mult": 1.5,
|
||||
"cooldown_beats": 4,
|
||||
"trigger": {"fact": "last_round_end", "op": "eq", "value": "stopped", "latch": false}
|
||||
}, {
|
||||
"skill_id": "venom_spit",
|
||||
"display_name": "毒吐",
|
||||
@@ -130,7 +148,7 @@ rows = [{
|
||||
; provisional 归 难度曲线与Boss。
|
||||
;
|
||||
; Boss 半血解锁技三行(2026-10-05 技能池执行批 T5,迭代14④——D7 用户裁案甲:每 Boss 一行新独占伤害技,
|
||||
; 工作值 provisional 归调参;pool 侧 unlock_hp_pct=50 门槛随 enemy.tres 三 Boss 行):
|
||||
; 工作值 provisional 归调参;pool 侧 半血解锁(trigger 收编)=50 门槛随 enemy.tres 三 Boss 行):
|
||||
; quake_smash 震地怒击 ×2.5/CD4(食人魔酋长)· venom_curb 遏毒 ×2.0/CD3(蛛化卓尔精灵)·
|
||||
; rockslide 岩崩 ×2.5/CD4(灰矮人石君王)。解锁语义/双面过滤/一次性弹出规格 = 敌人系统.md 意图呈现节。
|
||||
;
|
||||
|
||||
@@ -77,6 +77,15 @@ rows = [{
|
||||
"stack_policy": "refresh",
|
||||
"max_stack": 1
|
||||
}, {
|
||||
"effect_id": "defensive_stance",
|
||||
"display_name": "护身",
|
||||
"target_side": "enemy",
|
||||
"magnitude": -25,
|
||||
"unit": "percent",
|
||||
"duration_settlements": 2,
|
||||
"stack_policy": "refresh",
|
||||
"max_stack": 1
|
||||
}, {
|
||||
"effect_id": "alert",
|
||||
"display_name": "警觉",
|
||||
"target_side": "enemy",
|
||||
|
||||
Reference in new issue
Block a user