跳转至

完整 JSON/EOC Mod 教程

本教程的维护样例位于 CCB-Docs 的 examples/complete-json-eoc-mod/,包含两个文件:

complete-json-eoc-mod/
├── modinfo.json
└── eocs.json

1. 声明 Mod

modinfo.json 是完整 JSON 数组;ID 使用项目专用前缀,并明确依赖 core dda:

[
  {
    "type": "MOD_INFO",
    "id": "ccb_docs_json_eoc_example",
    "name": "CCB Docs JSON/EOC Example",
    "authors": [ "CCB contributors" ],
    "description": "A minimal contract-tested EOC mod used by the bilingual developer documentation.",
    "category": "misc_additions",
    "dependencies": [ "dda" ]
  }
]

2. 添加 EOC

eocs.json 定义一个不会自动触发的 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." } ]
  }
]

3. 验证维护样例

在 CCB-Docs 根目录运行;把路径替换为包含 PR #566 提交的 CCB clone:

# validation: docs-json-eoc-example
python3 scripts/check_json_eoc_example_mod.py --source-repo /path/to/Cataclysm-Cleanwater-Bomb

该检查真实解析两个 JSON 文件,并确认 MOD_INFO、effect_on_condition、math、 u_message 都存在于固定提交的生成清单。它刻意不声称执行了游戏 loader。

在 CCB 根目录运行基础仓库检查:

# validation: json-load
make -j2 json-check

当前 json-check 不扫描 CCB-Docs 外部样例。最终发布前还必须把目录放入 CCB 支持的 第三方 Mod 位置,并调用真实 loader:

# validation: json-mod-load
ccb_source=/path/to/Cataclysm-Cleanwater-Bomb
ccb_example_user=/tmp/ccb-docs-example-user
mkdir -p "$ccb_example_user/mods"
cp -R examples/complete-json-eoc-mod "$ccb_example_user/mods/ccb_docs_json_eoc_example"
"$ccb_source/cataclysm" --basepath "$ccb_source/" --userdir "$ccb_example_user/" --check-mods ccb_docs_json_eoc_example

--check-mods 成功后,再在测试世界中启用 dda + 本 Mod,验证实际触发行为并保存日志。

4. 扩展时保持可验证

  • 每个顶层 type 先在对象类型注册表中确认。
  • 每个条件/效果键分别在条件和 效果注册表中确认。
  • 不把 lexical_only 样例当作最小有效契约。
  • ID 保持稳定并加 Mod 前缀;依赖必须显式声明。
  • 添加行为前先复制最小 EOC,逐层增加嵌套、变量和 talker,并在真实 loader 中测试。