来源:
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 条件与效果嵌套¶
嵌套先受容器形状约束,再受具体 handler 约束。
已证明的通用规则¶
- 条件可以通过对象或字符串解析路径进入 parser;
and、or接收数组,not接收 单个对象或字符串。这三个逻辑键的嵌套契约已完整分类。 - 效果容器可为 string、object 或 array。
- 两类 parser 都是第一个匹配项获胜。不要在同一分派对象里放多个互相竞争的效果/条件键。
- 除三个逻辑条件外,handler 的参数、默认值和嵌套能力大多尚未分类;必须查看生成参考 指向的源码。
最小结构¶
文档示例 Mod 使用一个 activation EOC:
{
"type": "effect_on_condition",
"id": "EOC_CCB_DOCS_HELLO",
"eoc_type": "ACTIVATION",
"condition": { "math": [ "1 == 1" ] },
"effect": [ { "u_message": "The CCB Docs example EOC ran." } ]
}
math 和 u_message 都在注册表中,但当前契约为 partial。示例检查只证明它们被注册、
形状符合维护样例且 JSON 可解析;真实 CCB loader 仍是最终验证层。
复杂嵌套应逐层增加:先验证叶子条件/效果,再加入 and/or/not 或 if/then/else,
最后才加入变量传递和 talker 交换。每层保留一个能复现失败的最小 EOC。