Files
ChronicleOfTheImmortalClan/docs/MOD_GUIDE.md
T
thzxx 088fda2df0 docs: MOD_GUIDE 依 0.1.35 真实代码重写(362 行)+ bug 修复
【bug 修复】官方示例包 zhanbei-xv 的灵纹刃产出物缺 ITEMS 定义(0.1.33 幽灵物品纪律违反——装包即产出不可见武器)→ 补 weapon-lingwoon 定义(图标/价 700/战力 0.35);删 wordgen 死占位字段
【MOD_GUIDE 重写】与真实 modSchema/插件/内置包逐口对齐:
§2 补 patch/kind/四效果键;§9.5 功法补四流派效果(含平衡提醒/validate 校验区间);
新增 §9.6 patch 层(0.5~2/mult add 二选一/卸载复原/缺键 warn);
§10 速查表全量更新:丹药 5(和灵/虚元)/兵器 6(玉澜刃/灵纹刃)/功法 23 本全列(含流派备注)/建筑 14(符箓坊消耗式)/秘境含 m-wonder-*;
§13 官方范例修正(真实字段——原谓词错配);FAQ 补 Q8 patch;尾注 0.1.33/34/35 三注;
【验证】builtin-mods/mod/economy 回归绿;tsc 0 错
2026-08-23 22:41:44 +08:00

363 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MOD 开发教程 · Chronicle of the Immortal Clan
> 版本 **0.1.35·《荡涤·向新》** · MOD_SCHEMA_VERSION = 1 · 全口为纯 JSON(零脚本)
---
## 0. 先读这两句(最重要)
1. **MOD = 一个 JSON 文件**。放进 `mods/` 目录(游戏目录下),设置页 → MOD 层即可装卸——无任何构建工具。
2. **MOD 只影响新开档**。旧档的世界是"既成事实"——开档后世界自然演化不受 MOD 回溯;卸载还原 MOD 造成的**机制**(词库/灾因/配方/数值/注入条目),不回滚世界历史。游戏未正式发布(0.1.35 起无存档迁移),MOD 请对新档安装测试。
---
## 1. 五分钟上手
### 第 1 步:放文件
`.json`(或打包好的 `.cotymod`)放进游戏目录的 `mods/` 文件夹(含 `mods/` 本身时更稳)。文件名只用 `[a-z0-9-]`——**勿用中文/大写/空格**。
### 第 2 步:复制这个文件(最简 MOD)
```jsonc
{
"id": "tianxia-changxiao",
"name": "天下长啸",
"version": "1.0.0",
"schema": 1,
"author": "你",
"description": "一支会喊一句口号的曲子。",
"data": {
"worldgen": { "fams": ["啸"], "regions": ["天穹岭"] }
}
}
```
### 第 3 步:装上看效果
设置页 → MOD 层 → 扫描(自动刷新列表)→ 点安装;**新开档** → 天下面板/事件里找痕迹。装卸后现有档的机制即还原/生效。
---
## 2. MOD 包结构总览
```jsonc
{
"id": "my-pack", // [a-z0-9-],全局唯一
"name": "我的包",
"version": "1.0.0",
"schema": 1, // 范式版本(当前 = 1;缺失 → 提示)
"author": "你",
"description": "一句话",
"kind": "content", // content(剧情/风物) | data(新实体) | rules(数值规则)——仅归类展示
"depends": ["other-pack"], // 先装依赖,否则拒绝
"conflicts": ["old-pack"], // 与谁互斥,已装则拒绝
"data": {
// 五大延伸口 + 内容面七口 + patch 层——全可选,按需填
"events": [...], // §3 剧情事件
"npcs": [...], // §4 世界模板
"worldgen": {...}, // §5 生成词库
"calamities": [...], // §6 灾因
"pills": [...], // §7 丹方
"forges": [...], // §8 铸器
"worldNum": {...}, // §9 世界数值
"items": [...], // §9.5 物品
"techniques": [...], // §9.5 功法(含四流派效果)
"buildings": [...], // §9.5 建筑
"posts": [...], // §9.5 职事
"aspirations": [...], // §9.5 志向
"formations": [...], // §9.5 阵型
"traits": [...], // §9.5 性格
"patch": [...] // §9.6 数值 patch
}
}
```
---
## 3. 能力一:事件(events
**入口:全游戏随机抽签(daily/major/fate 各池)与世代循环。** 每事件有起因条件与结局选项;事件 id 全局唯一(撞内置 → 该事件被忽略并 warn)。
### 3.1 字段表
```jsonc
{
"id": "ev-changxiao2",
"category": "daily", // "daily"|"major"|"fate"
"title": "……",
"text": "……",
"weight": 10, // 0~100,池内比例权重
"condition": { "minYear": 3, "maxYear": 20, "minRep": 20, "minPower": 80, "era": "shengshi" },
"once": true, // 全游戏只发生一次
"cooldown": 24, // 月数——离上次触发后冷却
"options": [ { "label": "……", "eff": { "res": { "stones": 50, "lingcao": -3 }, "rep": 4, "relation": { "n-danxin": 5 } } } ]
}
```
### 3.2 条件(condition 可考键)
- `minYear/maxYear`(年)· `minAge/maxAge`(成员年龄)· `minRep`(声望)· `minPower/minPop` · `era`shengshi/pingshi/luanshi/mofa)· `minSeason`
### 3.3 效果(eff 可考键)
| 键 | 含义 | 取值 |
|---|---|---|
| `res` | 物品增减 | Record<资源id, 数>(见 §10 速查表) |
| `rep` | 声望 | ±数 |
| `relation` | 对天下家关系 | Record<天下家id, ±数> |
| `memberBy` | 族内一人效果 | `{ spec: "male"\|"adult"\|"youngest", method: "qi"\|"health", amount }` |
| `addBuilding` | 直接建成建筑 | 建筑 id(§10) |
| `addTech` | 获得功法 | 功法 id(§10) |
| `pillGain` | 得丹药 | `{ "pill-qiyuan": 1 }` |
| `mission/raid/tribody` | 触发任务/袭击/渡劫 | 详见实际事件体(内部均走同 gate) |
> 事件闸纪律:`pendingEvent` 唯一入口是引擎 fire(0=普通遇占放弃 / 1=高优顶替)。
---
## 4. 能力二:世界模板(npcs)
新档世界生成池的候选家(worldgen 按池凑 4~8 家——实际家数由种子决定,非全装即全出)。**改已装世界不生效**(世界形成为档记录)。
```jsonc
"npcs": [{
"id": "n-cangwu", "name": "苍梧氏", "region": "南岭苍梧", "style": "剑修世家",
"desc": "苍梧山下养剑人家,锋芒内敛而傲骨铮铮。",
"leaderRealm": "foundation", // 境界取值见下
"initialPower": 180, // 建议 60~400(校验区间)
"powerGrowth": [3, 9], // 年成长区间
"sells": ["pill-qiyuan"], // 入市售品(§10 id
"buys": ["lingcao", "beastcore"]
}]
```
### 4.1 境界取值(所有用到境界的地方通用)
`mortal`(凡)· `qi`(炼气·min 0~8)· `foundation`(筑基)· `core`(金丹)· `nascent`(元婴)· `spirit`(化神)
---
## 5. 能力三:世界生成词库(worldgen)
四组名字概率池,新档生成时抽查:
```jsonc
"worldgen": {
"styles": ["丹道世家", "商盟"], // 家族风格——影响 sell/build/态度
"regions": ["江南烟雨畔"], // 地域——影响地形/灵势/掉落速记
"fams": ["吴", "江"], // 姓氏
"suffixes": ["宗", "门"] // 后缀——组合出家名
}
```
---
## 6. 能力四:灾因(calamities
进入世界灾签循环(WORLDSIM.calamities 默认「旱灾/涝灾/蝗灾/疫病/兽潮/寒潮」——MOD 追加即参与):
```jsonc
"calamities": [{
"name": "瘴雨",
"brief": "瘴雨连绵,田间霉蛀——灵植减产。",
"family": { "lingcao": 0.75 }, // 家族减产乘(0.1.33 起真正计入生产)
"effect": { "lingcao": -0.2 } // 世界池冲击(CALAMITY_EFFECT 通道)
}]
```
---
## 7. 能力五:丹方(pills
```jsonc
"pills": [{
"output": "pill-biandan", "name": "便丹",
"danfangLevel": 1, // 丹房等级门槛 1~5(校验提醒)
"stones": 20, "lingcao": 15, "beastcore": 0,
"desc": "出门在外备着。"
}]
```
**红牌(0.1.33 生态纪律)**`output` 必须同时出现在 `items`(§9.5)——产物无物品表定义 = 幽灵物品(不可见不可卖)。
---
## 8. 能力六:铸器配方(forges)
```jsonc
"forges": [{
"output": "weapon-lingwoon", "name": "灵纹刃",
"stones": 700, "lingkuang": 15, "beastcore": 5,
"desc": "纹蕴灵光,锋锐无俦。"
}]
```
同样**必须先在 items 立名**——内置示例包 `zhanbei-xv` 已作出表率(0.1.35 修复了它原本"幽灵产出"的旧缺口)。
---
## 9. 能力七:世界数值(worldNum
白名单覆写(仅 WORLDSIM 常数表内键生效,越界键忽略)——**卸载复位**。常用键:
```
marketDriftRate / marketRebalance / poolFloorPct / tradeFloorPct / tradeCeilPct
worldSupplyRate / worldDemandRate / npcTradeRate / warFatigueRise / warFatigueTempK
shortageLine / shortageMonths / shortagePrice / newSecretChance / greatNewbornChance
calamityChance / npcEventChance / newsEvery / tempEraK
```
---
## 9.5 内容面扩展(物品/功法/建筑/职事/志向/阵型/性格)
纯数据口;**内置条目不可覆盖**(同 id 被跳过并 warn——防覆盖红线),只加新键。
### 物品(items)——k 六类生态
```jsonc
"items": [
{ "id": "pill-biandan", "name": "便丹", "kind": "pill", "basePrice": 60, "desc": "……", "icon": "丹" },
{ "id": "weapon-lingwoon", "name": "灵纹刃", "kind": "artifact", "basePrice": 700, "desc": "……", "icon": "纹" }
]
```
`kind` 六值(0.1.32 起):`resource`(资源)/ `material`(素材:灵玉灵木兽皮灵果等——入世界池参与呼吸)/ `pill`(丹药)/ `talisman`(符箓·开战武备自动消耗)/ `brew`(灵酿·渡劫伤后自动回气)/ `artifact`(兵器·装备)。**四同步纪律**:新资源进世界循环必须同时办 4 件事(ITEMS 定义 + POOL_BASE + MARKET_IDS + worldgen marketOffset),否则"只躺仓库"。
### 功法(techniques)——含四流派效果
```jsonc
"techniques": [{
"id": "t-lingwu", "name": "灵雾心法",
"grade": 1, // 1~4(品阶:市价/掉率/求学池下限)
"element": "水", // 木金水火土雷——与时令共鸣(春木夏火秋金冬水;土恒应×1.02)
"path": "丹修", // 剑修/体修/丹修/阵修/符修/御灵……自由
"expBonus": 0.11, "powerBonus": 0.12,
"critChance": 0.08, // 流派效果(0.1.34,全 optional——缺省零行为)
"guardBonus": 0.2, // 暴击:战斗阵亡压制 / 受创减免:战斗受伤折减
"tribBonus": 0.05, // 渡劫成功率加成
"secretBonus": 0.15, // 秘境收获放大
"desc": "雾气绕身,吐纳绵长。"
}]
```
新功法进入:藏书阁可购(grade≤3)/ 秘境掉落 / 拍卖 / 求经台——全自动入列。**平衡提醒**:validateMod 检查 `expBonus≤0.5 / powerBonus≤1`(警告非阻断)。
### 建筑(buildings
```jsonc
"buildings": [{
"id": "b-chalu", "name": "茶园", "icon": "茗", "desc": "清茶待客。",
"kind": "produce", "maxLevel": 3,
"produceExpr": { "lingcao": "4 * L" }, // L=等级——月产表达式(+ - * / ^,白名单安全)
"upgradeStones": 60, "upgradeMineral": 8 // 升级费=基价×1.6^(L-1) / 灵矿×L
}]
```
- `kind``produce`(月产——用 produceExpr);`function`(加成)——加成类请保守(白名单表达式只解析自家键)。
- 建筑自动出现在领地页可建可升;**消耗式生产**(如符箓坊:扣符纸产符)勿用表达式泛化——泛化只做纯产出。
### 职事(posts
```jsonc
"posts": [{ "id": "p-chashi", "effectType": "marketIncome", "value": 0.06, "max": 1, "desc": "坐市司货,坊市入息+6%。" }]
```
`effectType``expAll / marketIncome / battlePower / cultivation / stamina / insight / feast`
### 志向(aspirations
```jsonc
"aspirations": [{ "id": "a-chafan", "desc": "偶有茶会,心神宁和。", "effectType": "cult", "value": 0.04 }]
```
`effectType``cult`(修为)/ `field`(产田)/ `market`(商市)/ `combat`(战力)/ `offspring`(生育)。
### 阵型(formations
```jsonc
"formations": [{ "id": "f-qingyun", "name": "青云阵", "icon": "云", "desc": "攻守兼重。", "atk": 1.05, "def": 1.05, "retreatWound": 1 }]
```
### 性格(traits
```jsonc
"traits": [{ "id": "t-yaxi", "name": "雅细", "desc": "心细如发。", "bonus": { "expBonus": 0.03, "charmBonus": 0.05, "danger": 0 } }]
```
`bonus``expBonus / breakBonus / windBonus / charmBonus / priceMult / danger(0~1)`
---
## 9.6 数值 patch 层(0.1.34
对**已存在表项**做局部改值——不做新实体:`mult`0.5~2)或 `add`(实数)二选一。
```jsonc
"patch": [
{ "target": "technique", "id": "t-qinglian", "mult": 0.9 }, // 青莲剑诀全数值×0.9
{ "target": "item", "id": "pill-qiyuan", "add": -10 } // 聚气丹基价-10
]
```
- 规则:`mult` 限 0.5~2(超出 → 拒绝);`mult/add` 勿同给;只对**已定义数值键**生效(缺键字段 → warn 跳过)。
- **仅新档生效;卸载复原**(按 id 归属逐个插件回滚)。
- debug 建议:同 id 功法冲突时设置页会看到`[MOD:xxx] 功法同 id 已存在(内置优先,新增跳过)`日志。
---
## 10. 速查表:内置 id 大全
### 资源/材料(res / sells / buys / family / effect
- 资源:`stones` · `lingcao` · `lingkuang` · `beastcore`
- 材料七种(0.1.32):`lingyu` · `lingmu` · `shoupi` · `lingguo` · `linglu` · `dansha` · `fuzhi`
- 符箓:`talisman-feng`(风符·开战×1.12)· `talisman-shan`(山符×1.15+受创减半)
- 灵酿:`brew-niang`(渡劫伤后回气+5
### 丹药(产出自丹方)
`pill-qiyuan`(聚气·丹房1级)· `pill-ningyuan`(凝元·2级)· `pill-pojing`(破境·3级)· `pill-heling`(和灵·2级·0.1.33)· `pill-xudan`(虚元·4级·0.1.33
### 兵器(forge output
`weapon-fan`(凡器0.1)· `weapon-qi`(法器0.25)· `weapon-ling`(灵器0.5)· `weapon-fa`(法宝0.9)· `weapon-yu`(玉澜刃0.4)· `weapon-lingwoon`(灵纹刃0.35·官方示例包)
### 功法(23 本)
剑修:`t-qinglian` 青莲剑诀 · `t-xuanyue` 玄月斩灵诀 · `t-hanyu` 寒玉心法 · `t-liehuo` 烈火焚空诀 · `t-wanjian` 万剑归一诀 · `t-jiuxiao` 九霄龙吟诀
体修:`t-canglei` 苍雷炼体功 · `t-houtu` 厚土镇岳功 · `t-xiantian` 先天混元功 · `t-xuanbing` 玄冰凝甲功(guard) · `t-shanling` 山灵镇岳录(guard+crit)
丹修:`t-lieliuxin` 离火心经 · `t-baihui` 百草经 · `t-danding` 丹鼎护道妙典(trib)
阵修:`t-zhenyu` 阵纹天书 · `t-qiankun` 乾坤七星阵
符修:`t-geling` 化灵经 · `t-tianya` 天涯孤鸿法 · `t-fengyu` 风遁青冥诀(secret) · `t-lanhai` 澜海听涛经(trib+secret) · `t-shiling` 时灵应候诀(secret)
御灵:`t-yushen` 驭兽真解
新锐:`t-zidian` 紫电惊雷诀(crit,一阶剑修)
### 建筑(建/升/领地)
`lingtian` 灵田 · `yaoyuan` 药园 · `lingkuang` 灵矿 · `fangshi` 坊市 · `danfang` 丹房 · `cangshu` 藏书阁 · `juling` 聚灵阵 · `yanwu` 演武场 · `dongfu` 洞府 · `zongci` 宗祠 · `lingshou` 灵兽园 · `lingguoyuan` 灵果园 · `lingmufang` 灵木坊 · **`fuzhifang` 符箓坊(消耗式:耗符纸×2+灵木×2/级→风符1;叁级→山符±1)**
### 天下家 id
`n-xuanying` 玄影沈氏 · `n-danxin` 丹心木氏 · `n-sihai` 四海王氏 · `n-nulei` 怒雷祝氏——**新档 worldgen 随机凑 4~8 家,你家不一定全有**;关系/raid 写不存在的 id 不报错,只是落空。
### 秘境 idmissionId
`m-anmoku` 暗墨林 · `m-xuangu` 玄冰谷 · `m-guzhan` 古战阵 · `m-lingshan` 灵鹫山 · `m-tiankeng` 天坑——**0.1.34 起世界年首会灵机现身 `m-wonder-*`(种子派生生成,档档不同)**;你的 `sendMission` 对 wonder 也是通的(引擎双向回退)。
---
## 11. 排错 FAQ
**Q1:扫描后列表里没有我的文件?** 文件名 `[a-z0-9-]`(勿中文/大写);`mods/` 路径对;`.json/.cotymod` 后缀。检查后“已扫描 mods 目录”提示是否出现。
**Q2:提示"MOD 解析失败:缺失/非法的 MOD id"**`id` 或含中文/大写/`.`;也防误把**存档导出**放进了 mods 目录。
**Q3:提示"MOD 安装被拒绝:事件 id 冲突:xxx"** 与内置/已装重名——改名。
**Q4:装上了但没见反应?** 先确认**新开档**(MOD 只影响新世界生成与装载);事件类查 category/weight;模板类去"天下·群雄谱"看。
**Q5:卸载后世界还变着?** 世界演化既成事实不可回滚(与游戏规则一致);要干净世界用无 MOD 的新档。
**Q6:读档提示"缺失 MOD"** MOD 文件移动/删除/版本不符——放回 `mods`(同 id 同版本)。改动 MOD 务必升 `version`
**Q7MOD 间冲突?** 撞 id(事件/灾因名/丹方 output/模板 id)→ 后装被忽略/拒绝;用 `depends/conflicts` 声明。同名功法冲突后装会被**跳过并记 `[MOD:xxx]` 日志**——看设置页。
**Q8patch 不生效?** 确认 `target/id` 精确匹配表内项;`mult` 界内;效果字段缺失 → `[patch] 功法 xx 无字段 yy` 日志提示补效果字段。
---
## 12. 进阶:依赖/导出/重装
### 12.1 depends / conflicts
```jsonc
"depends": ["fenwu-ji"], // 先装风物集;未装 → 拒绝
"conflicts": ["old-pack"] // 相斥
```
### 12.2 导出与分享
设置页 → MOD 层 → **导出 MOD 集** → 打包 `mod-bundle-export.cotymod`;同伴放入 `mods/` 逐一安装。`.cotymod` 即文件压缩包——直接分发。
### 12.3 读档重装
MOD 状态随存档保存;重装要求**同 id 同版本**——升 `version` 是 mod 生态建议(否则老档静默跳过新包)。
---
## 13. 官方范例(内置仓库 · 纯 JSON 范式教学)
| 包 | 教什么 |
|---|---|
| **风物集** `fenwu-ji` | 词库注入 + 灾因(brief/family/effect)——"做地域风物" |
| **战备解军** `zhanbei-xv` | 铸器配方 + worldNum 覆写——"做数值平衡";0.1.35 起配方产物在物品表有定义(示范四同步) |
拆解:安装后 → 导出 MOD 集 → 打开 `mod-bundle-export.cotymod`,字段与本文一一对应。
---
**一句话总结**MOD = 一个有 `data` 字段的 JSON。事件管"剧情"、模板管"新家族"、词库管"名字"、灾因管"灾年"、配方管"炼丹铸器"、worldNum 管"脾性"、七口管"新内容门面"、patch 管"旧表微调"。装/卸/导出全在设置页,读档重装全自动。去写吧——这个世界等你的素材。
> 0.1.33 闭环注:丹方/铸器产出物 ALL 必须先在物品表立名(四同步纪律);符箓开战即耗(零 rng)。
> 0.1.34 功法注:four 流派效果 crit/guard/trib/secret 全 optional——缺省零行为,金钟罩安全。
> 0.1.35 涤荡注:无存档迁移 + patch 层按插件归属回滚 + validateMod 覆盖 pace/tag 全部校验规则(详见 §12)。
<sub>⚔️ 本文档随游戏版本更新(0.1.35)。字段若有新增,此处先行。</sub>