来源:
data/reference/json/ccb_eoc_conditions.json
data/reference/json/ccb_eoc_effects.json
tools/json_api/contract-inventory.schema.json
tools/json_api/generate_contracts.py
tools/json_api/test_generate_contracts.py
src/condition.cpp
src/npctalk.cpp
src/effect_on_condition.cpp
src/effect_on_condition.h
tests/eoc_test.cpp
doc/JSON/EFFECT_ON_CONDITION.md
commit c663ceb2c1bd
api-contract
EOC 契约与生命周期¶
EOC(effect on condition)把条件解析、效果解析和触发生命周期组合起来。当前机器清单 分别索引275 个条件键和 310 个效果键。注册覆盖完整,但 handler 级参数分类仍不完整。
effect_on_condition 对象¶
源码清单已把该对象的字段契约标为 partial:
id是明确的 mandatory 字段。eoc_type可选;无recurrence时默认 activation,有recurrence时走 recurring 规则。condition、deactivate_condition、effect、false_effect由存在性分支读取。global和run_for_npcs有false默认值。required_event只在EVENT分支中 mandatory;不能脱离分支把它解释为所有 EOC 都必填。
生命周期类型来自 effect_on_condition.h/.cpp:ACTIVATION、RECURRING、
AVATAR_DEATH、NPC_DEATH、PREVENT_DEATH 和 EVENT。每种类型的 talker 和上下文
来源不同,必须查对应触发路径和测试。
解析边界¶
- 条件按“第一个匹配解析器获胜”的顺序分派。未知对象条件抛出
JsonError;未知字符串 条件生成恒 false predicate。 - 效果容器接受 string、object 或 array,并同样按首个匹配解析器分派;未知效果抛出
JsonError。 - 条件清单只有
and、or、not三个逻辑键完全分类;其余 272 个为partial。 - 310 个效果键全部为
partial。这不表示它们不可用,只表示参数、默认值、嵌套、talker、 变量或上下文尚未全部获得源码级分类。