diff --git a/docs/MOD_GUIDE.md b/docs/MOD_GUIDE.md index ed8cba9..5f415f3 100644 --- a/docs/MOD_GUIDE.md +++ b/docs/MOD_GUIDE.md @@ -1,20 +1,54 @@ # MOD 开发教程 · Chronicle of the Immortal Clan -> 版本 **0.1.35·《涤荡·向新》** · MOD_SCHEMA_VERSION = 1 -> **本教程即全部所需**:你不需要读任何源码或类型文件——所有 MOD 能用的字段、取值、默认值、坑点都写在这里。 +> 版本 **0.1.35·《涤荡·向新》** · MOD_SCHEMA_VERSION = 1 · 全口纯 JSON(零脚本) +> **本教程即全部所需**:你不需要读任何源码或类型文件——所有 MOD 能用的字段、取值、默认值、坑点、示例都写在下面。 > 照例动手即可:最快 5 分钟做出你的第一个 MOD。 --- +## 目录 + +- [0. 先读这两句(最重要)](#0-先读这两句最重要) +- [1. 五分钟上手](#1-五分钟上手) +- [2. MOD 包结构总览](#2-mod-包结构总览) +- [3. 能力一:事件(events)](#3-能力一事件events) +- [4. 能力二:世界模板(npcs)](#4-能力二世界模板npcs) +- [5. 能力三:生成词库(worldgen)](#5-能力三生成词库worldgen) +- [6. 能力四:灾因(calamities)](#6-能力四灾因calamities) +- [7. 能力五:丹方(pills)](#7-能力五丹方pills) +- [8. 能力六:铸器配方(forges)](#8-能力六铸器配方forges) +- [9. 能力七:世界数值(worldNum)](#9-能力七世界数值worldnum) +- [9.5 内容面扩展(物品/功法/建筑/职事/志向/阵型/性格)](#95-内容面扩展物品功法建筑职事志向阵型性格) +- [9.6 数值 patch 层](#96-数值-patch-层) +- [10. 速查表:内置 id 大全](#10-速查表内置-id-大全) +- [11. 排错 FAQ](#11-排错-faq) +- [12. 进阶:依赖、冲突与导出](#12-进阶依赖冲突与导出) +- [13. 官方范例(可拆解学习)](#13-官方范例可拆解学习) + +--- + ## 0. 先读这两句(最重要) -1. **MOD 是纯 JSON,零脚本**。没有代码、没有沙箱、没有 eval——永远不会"写挂"游戏本体。 -2. **五个安全红线**(违反会导致 MOD 无效或世界怪,但不会崩存档): - - `id` 全局唯一:只有 `[a-z0-9-]`、长度 2~32(小写字母/数字/连字符/下划线) - - 事件 `id` 不能与游戏内置事件或其它已装 MOD 事件重复(安装时会被拒绝,报具体冲突名) - - 不碰任何 `rng` 字段(MOD 里没有 rng 概念——随机数值一律由游戏引擎生成) - - 数值建议贴近内置量级(模板 power 60~400、事件 weight 0~100、成本不比顶级丹厚) - - 数据口全图(0.1.35 共 15 口):**事件 / 世界模板 / 词库 / 灾因 / 丹方 / 铸器 / 世界数值 / 物品 / 功法 / 建筑 / 职事 / 志向 / 阵型 / 性格 / 数值 patch**——按需自取,见 §3~§9.6 +1. **MOD 是纯 JSON,零脚本**。没有代码、没有沙箱、没有 eval——永远不会"写挂"游戏本体。装错了最多报"校验失败",把文件删了就好。 +2. **MOD 只影响新开档**。旧档的世界是"既成事实"——开档后世界自然演化不受 MOD 回溯;卸载只还原 MOD 造成的**机制**(词库/灾因/配方/数值/注入条目),不会回滚世界历史。想验证 MOD 效果,**务必新开档**。 + +### 零 B 君护航:安装即校验 + +每个 MOD 在安装前都会过一遍 `validateMod` 预检(0.1.28 起)——不对的地方会在安装界面提示原因(不装也不崩)。安全的数值区间: + +| 项目 | 安全区间 | 违例后果 | +|---|---|---| +| `id` | `[a-z0-9-]`,长 2~32 | 解析失败(拒绝) | +| 事件 id | 全局唯一(与内置、其它 MOD 都不撞) | 安装被拒并报冲突名 | +| 模板 `initialPower` | 60~400 | warning(仍可装) | +| 事件 `weight` | 0~100 | warning | +| 丹方等级 | 1~5 | warning | +| 功法 `expBonus` | ≤ 0.5 | warning | +| 功法 `powerBonus` | ≤ 1 | warning | +| patch `mult` | 0.5 ~ 2(或 add 实数,二选一) | 拒绝 | +| 材料成本 | ≥ 0 | warning | + +> **不碰任何 `rng` 字段**:MOD 里没有随机数的概念——所有随机数值(事件抽签、天气、掉落)一律由游戏引擎生成,你只挂牌子。 --- @@ -22,9 +56,7 @@ ### 第 1 步:放文件 -在你的游戏用户目录下建 `mods` 文件夹(没有就建一个),文件名随意,但要: -- 后缀 `.json` 或 `.cotymod`(两种都行,内容完全一样) -- 文件名 `[a-z0-9-].json`(建议与 MOD id 同名:`hello-world.json`) +在你的游戏用户目录下建 `mods` 文件夹(没有就建一个),把 MOD 文件放进去: ``` Windows: %APPDATA%/Electron/mods/ @@ -32,417 +64,588 @@ Linux: ~/.config/Electron/mods/ macOS: ~/Library/Application Support/Electron/mods/ ``` +文件要求: +- 后缀 `.json` 或 `.cotymod`(两种都行,内容完全一样;`.cotymod` 只是"已打包分享"的惯例) +- 文件名只用 `[a-z0-9-]`(建议与 MOD `id` 同名:`hello-world.json`)——**勿用中文/大写/空格/点**(点留给后缀) + ### 第 2 步:复制这个文件 -完整可用的最小 MOD(直接存为 `hello-world.json`): +最小可用 MOD(直接存为 `hello-world.json`): -```json +```jsonc { - "id": "hello-world", - "name": "你好世界", - "version": "1.0.0", - "schema": 1, - "author": "你的名字", + "id": "hello-world", // 唯一 id([a-z0-9-],2~32 长度) + "name": "你好世界", // 显示名(随便写中文) + "version": "1.0.0", // 版本(改动必升——读档重装按 id+version 匹配) + "schema": 1, // 范式版本(当前 = 1;缺失会提示但可加载) + "author": "你的名字", // 建议填(玩家辨识) "description": "我的第一个 MOD:家族来了一位卖豆腐的老伯。", + "kind": "content", // content|data|rules(仅设置页归类展示) "data": {} } ``` +> **`data` 为空 = 这个 MOD 什么都不会改**。想改世界的活往下看 §3~§9.6,往 `data` 里加键。 + ### 第 3 步:装上看效果 -游戏内 → **设置 → MOD 层 → 扫描目录** → 列表里出现 `hello-world.json` → 点 **安装** → 提示"MOD 安装完成"。 +游戏内 → **设置 → MOD 层 → 扫描目录** → 列表里出现 `hello-world.json` → 点 **安装** → 提示"MOD 安装完成",插件表格里出现 `MOD·你好世界 v1.0.0 · content · 你的名字`。 -**看效果的验证方法**:MOD 层插件表格里出现 `MOD·你好世界 v1.0.0 · content · 你的名字`。新开一局时 NewGame 预览页会标注「已装入 MOD:你好世界」。 - -> 只有 `data` 段为空时这个 MOD 什么都不会改。想改世界的活往下看。 +**想立刻看到效果**?把这个最小模版换一个真的能动的版本(§3 完整的"卖豆腐的"事件示例),或直接装官方范例(§13),新开一局去"天下"面板找痕迹。 --- ## 2. MOD 包结构总览 -一个 MOD = 一个 JSON 对象,全部字段如下(标 ✅ 的必填): +### 2.1 顶层字段 + +| 字段 | 必填 | 类型 | 说明 | +|---|---|---|---| +| `id` | ✅ | string | 全局唯一标识(`[a-z0-9-]`,2~32 长度)——安装/卸载/读档重装全靠它 | +| `name` | ✅ | string | 中文显示名 | +| `version` | ✅ | string | 语义化版本(改内容必升——读档重装要求同 id 同版本) | +| `schema` | 建议 | number | 范式版本 = 1(写 `1` 即可;缺失会有提示,不影响安装) | +| `author` | 建议 | string | 作者名 | +| `description` | 可选 | string | 一句话介绍(显示在列表) | +| `gameVersion` | 可选 | string | 为哪个游戏版本写的(仅展示) | +| `kind` | 可选 | string | `content`(剧情/风物)\| `data`(新实体)\| `rules`(数值规则)——仅分类展示 | +| `depends` | 可选 | string[] | 依赖的 MOD id(先装依赖,未装 → 拒绝) | +| `conflicts` | 可选 | string[] | 相斥的 MOD id(对方已装 → 拒绝) | +| `data` | ✅ | object | **全部功能键的入口**(下表) | + +### 2.2 `data` 十五口全景 + +| 分组 | 口 | 章节 | 一句话 | 卸载后 | +|---|---|---|---|---| +| 世界侧 | `events` | §3 | 随机剧情事件(抽签进族中日常/家国大事/乾坤造化) | 从事件池摘除 | +| 世界侧 | `npcs` | §4 | 世界模板(新档世界生成候选家) | 模板池摘除 | +| 世界侧 | `worldgen` | §5 | 词库(姓氏/地域/风格/后缀) | 词库池按来源摘除 | +| 世界侧 | `calamities` | §6 | 灾因(旱灾/涝灾/蝗灾/疫病/兽潮/寒潮 之外的自家灾年) | 灾因表按名摘除 | +| 世界侧 | `worldNum` | §9 | 世界常数覆写(供需/池深/潮汐/灾年概率……) | 复位 | +| 配方 | `pills` | §7 | 丹方(丹房等级门槛+材料+灵石) | 丹方表摘除 | +| 配方 | `forges` | §8 | 铸器配方(灵矿+兽核+灵石→兵刃) | 配方表摘除 | +| 内容面 | `items` | §9.5 | 物品表新条目(资源/材料/丹药/符箓/灵酿/兵器六类) | 从数据包摘除 | +| 内容面 | `techniques` | §9.5 | 功法(含四流派效果) | 注入条目按 id 摘除 | +| 内容面 | `buildings` | §9.5 | 建筑(产线/功能类) | 从建筑表摘除 | +| 内容面 | `posts` | §9.5 | 职事(坊市入息等加成) | 摘除 | +| 内容面 | `aspirations` | §9.5 | 志向(修为/战斗/市贸/产田/生育/声望) | 摘除 | +| 内容面 | `formations` | §9.5 | 阵型(攻击/防御/撤退伤) | 摘除 | +| 内容面 | `traits` | §9.5 | 性格(修为/突破/战力/魅力/售价加成) | 摘除 | +| 微调 | `patch` | §9.6 | 对**已存在**表项改数值(mult 或 add)——不改结构只改数 | 按插件归属复原 | + +### 2.3 一个"五脏俱全"的示意壳(啃编排用) ```jsonc { - "id": "jiangnan-feng", // ✅ MOD 唯一 id([a-z0-9-]{2,32}) - "name": "江南遗风", // ✅ 显示名 - "version": "1.0.0", // ✅ 版本号(semver:主.次.补) - "schema": 1, // 建议:格式版本,目前恒写 1 - "author": "风雅散人", // 建议:作者名(会显示在设置页) - "description": "一句话说来意。", // 建议:说明文字 - "gameVersion": "0.1.30", // 可选:为哪个游戏版本做的(仅展示) - "depends": ["other-mod-id"], // 可选:依赖的其它 MOD id(未装会拒绝安装) - "conflicts": ["old-mod-id"], // 可选:与哪些 MOD 互斥(已装会拒绝安装) - "data": { // ✅ 能力段(可以为空对象) - "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 */ ] - }, - "kind": "content" // 类型标签(content 内容/data 实体/rules 规则——仅展示与归类) + "id": "shiyi-quan", + "name": "示意全包", + "version": "0.1.0", + "schema": 1, + "author": "示例", + "kind": "data", + "data": { + "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 */ ] + } } ``` -**安装行为承诺**(0.1.30 全部兑现): -- 安装时自动检查:事件 id 冲突 → **拒绝**并报具体名;其余字段不合规 → **警告但安装**(你可能想修正) -- 启用/停用随插件开关;**卸载时 MOD 改过的一切自动还原**(词库/灾因/配方/数值全摘,只删自己加的词条) -- 存档携带 MOD 状态;下次读档自动重装;换电脑或删文件 → 读档提示"缺失 MOD" -- **只影响新开档**:历史存档的世界不会因你装/卸 MOD 改变 - ---- - -### 2.1 data 全景(0.1.35 十五口) - -五个"世界侧"口(影响世界生成/天下演化): - -| 口 | 章节 | 一句话 | 卸载后 | -|---|---|---|---| -| `events` | §3 | 随机剧情事件 | 从事件池摘除 | -| `npcs` | §4 | 世界模板(新家族) | 模板池摘除 | -| `worldgen` | §5 | 词库(姓/地/风) | 词库池按来源摘除 | -| `calamities` | §6 | 灾因(旱/涝/蝗…) | 灾因表按名摘除 | -| `worldNum` | §9 | 世界基数覆写 | 复位 | - -七个"内容面"口(0.1.31 起,全纯数据——**内置条目不可覆盖**,同名 id 被跳过并 warn):`items`(§9.5)· `techniques`(§9.5)· `buildings`(§9.5)· `posts`(§9.5)· `aspirations`(§9.5)· `formations`(§9.5)· `traits`(§9.5) - -两个"配方"口:`pills`(§7)· `forges`(§8)——**产物必须先立名 items**(0.1.33 红牌)。 - -一个"微调"口(0.1.34):`patch`(§9.6)——对已存在表项改数值(mult 0.5~2 / add),卸载复原。 - --- ## 3. 能力一:事件(events) -事件 = 游戏过程中冒出的"情景选择"(和内置事件共用一套系统)。 +**这是什么**:剧情触发器。安装后进入游戏随机事件池,按 `category` 分成三类池子,每月抽签;命中的事件弹出一道"选择"(Modal),你为玩家准备 1~4 个选项,每个选项有不同的**效果**。 -### 3.1 字段表 +**什么时候发生**:事件池抽签(日常/大事/造化各自独立);`weight` 越大越容易被抽到;`once` 事件发生后永不再来;`cooldown` 是冷却月数。 -| 字段 | 类型 | 必填 | 说明 | -|---|---|---|---| -| `id` | string | ✅ | `ev-` 开头便于辨识;全游戏唯一(冲突→拒装) | -| `name` | string | ✅ | 弹窗标题 | -| `category` | string | ✅ | `daily`(日常)/ `major`(大事)/ `fate`(天命)。越高越少见 | -| `weight` | number | ✅ | 抽中权重,0~100。同类别内按权重随机 | -| `text` | string | ✅ | 事件正文 | -| `once` | boolean | ✖ | `true` 则整局只发生一次 | -| `cond` | object | ✖ | 触发条件(见 3.3 条件表)——**不写=任何年代都可能发生** | -| `options` | array | ✅ | 选项数组(1~4 个),见 3.2 | +### 3.1 事件字段表 + +```jsonc +{ + "id": "ev-senlin", // 唯一 id(禁止与内置/已装 MOD 撞) + "name": "森林深处", // 显示名 + "category": "daily", // daily(族中日常) | major(家国大事) | fate(乾坤造化) + "weight": 10, // 池内绝对权重 0~100(建议 3~25) + "once": false, // 是否全游戏只发生一次(默认 false) + "cond": { // 触发条件(全部满足才可能被抽到;整段可选) + "minYear": 3, // 年份下限 + "minRep": 20, // 声望下限 + "minBuilding": { "id": "danfang", "level": 2 } // 建筑等级要求 + }, + "text": "……", // 正文(事件描述,写小说家一点) + "options": [ /* §3.2 */ ] +} +``` + +| 字段 | 类型 | 说明 | +|---|---|---| +| `id` | string | 唯一(小写字母/数字/连字符/下划线) | +| `name` | string | 标题(显示在事件框顶部) | +| `category` | string | `daily` 族中日常(常见)\| `major` 家国大事(中频)\| `fate` 乾坤造化(稀有) | +| `weight` | number | 池内权重(0~100)。同池内按比例抽签 | +| `once` | boolean | true=一生一次(之后 `completedEvents` 不再抽) | +| `cond` | object | 触发条件(见 §3.3 全表——不写=无条件) | +| `text` | string | 正文 | +| `options` | array | 选项(1~4 个) | ### 3.2 选项数组 ```jsonc "options": [ { - "label": "称谢收下", // ✅ 按钮文字 - "hint": "获得灵石 20", // 悬停提示(写不写都行) - "eff": { "res": { "stones": 20 } } // ✅ 效果(见 3.4 效果表) + "label": "换!", // 选项按钮文字 + "hint": "灵草-5,聚气丹+1", // 选项小字提示(建议写人话) + "eff": { "res": { "lingcao": -5 }, "pillGain": { "pill-qiyuan": 1 } }, + "note": "(可写一段结算后的话)" // 可选 }, - { - "label": "婉拒", - "hint": "什么都不变", - "eff": {} - } + { "label": "送他些斋饭", "hint": "灵石-10,声望+2", "eff": { "res": { "stones": -10 }, "rep": 2 } }, + { "label": "赶走", "hint": "无", "eff": {} } ] ``` -### 3.3 条件表(cond)——事件何时发生 +### 3.3 触发条件(cond)全表 -全部可选;写多个 = 同时满足(`all`);"任一满足"用 `any`;"不满足"用 `not`。 +一个事件可以同时用多个键(全部满足才算"命中");也支持组合: -```jsonc -"cond": { - "minYear": 5, // 第五年及以后 - "minRep": 50, // 声望 ≥50 - "maxRep": 200, // 声望 ≤200 - "minGeneration": 3, // 至少第三代 - "minHeadRealm": "foundation", // 家主最低境界(mortal/qi/foundation/core/nascent/spirit) - "minMembers": 8, // 家族至少 8 人 - "minAdult": 3, // 适婚成人 ≥3 - "minBuilding": { "id": "danfang", "level": 2 }, // 某建筑 ≥Lv2(建筑 id 见 §10 速查) - "minResource": { "id": "lingcao", "n": 50 }, // 库存某资源 ≥50 - "minTechCount": 3, // 家传功法 ≥3 部 - "flag": { "key": "anyKey", "eq": true }, // 家族某旗标为真 - "relation": { "npcId": "n-danxin", "lt": 0 }, // 与某天下家关系 <0 - "any": [ { "minRep": 100 }, { "minYear": 60 } ], // 任一满足 - "not": { "minYear": 3 } // 第三年以前 -} -``` - -### 3.4 效果表(eff)——选中后发生什么 - -一个选项可以同时用好几个效果(写多个键): - -| 键 | 写法 | 示例 | +| 键 | 写法 | 含义 | |---|---|---| -| `res` | 资源增减(灵石/灵草/灵矿/兽核 + 丹药) | `{"stones":-50,"lingcao":5}` | -| `rep` | 家族声望变动 | `{"rep":10}` | -| `relation` | 与天下各家关系(用 `n-` 家 id) | `{"n-danxin":5,"n-nulei":-8}` | -| `pillGain` | 直接获得丹药 | `{"pill-qiyuan":1}` | -| `addTech` | 获得功法(`t-` id,见 §10) | `{"addTech":"t-baihui"}` | -| `addBuilding` | 白得一座建筑(建筑 id) | `{"addBuilding":"lingtian"}` | -| `memberBy` | 对族人施加(见 3.5) | `{"by":"inspire","target":"all","n":3}` | -| `flag` | 设家族旗标(后续可被 cond 读取) | `{"anyKey":true}` | -| `mission` | 触发某秘境(`m-` id)给家族 | `{"mission":"m-anmoku"}` | -| `raid` | 某家来犯 | `{"npcId":"n-nulei"}` | -| `techniqueChance` | 概率得功法(0~1) | `{"techniqueChance":0.3}` | -| `artifactChance` | 概率得宝器 | `{"artifactChance":0.3}` | -| `tournament` | 触发大比 | `{"tournament":true}` | -| `apprentice` | 触发谒祖师 | `{"build":true}` | -| `trib` | 指定成员渡劫 | `{"memberId":"某成员id","mode":"rash"}`(rash/guard/delay) | -| `feisheng` | 飞升剧情 | `{"stay":false}` | +| `minYear` / `maxYear` | `10` / `50` | 年份窗口(避免开局就出某些事件) | +| `minGeneration` | `3` | 代数下限 | +| `minHeadRealm` | `"core"` | 家主最低境界(取值见 §4.1 境界表) | +| `minBuilding` | `{ "id": "danfang", "level": 2 }` | 某建筑至少到某级 | +| `minRep` / `maxRep` | `20` / `80` | 声望窗口 | +| `minResource` | `{ "id": "lingcao", "n": 100 }` | 库存下限 | +| `minAdult` / `maxAdult` | `4` / `8` | 成年(16+)人数窗口 | +| `minMembers` | `10` | 总人口下限 | +| `eligibleAdult` | `3` | 可婚配(未婚成年)下限 | +| `relation` | `{ "npcId": "n-danxin", "gt": 30 }` | 与某天下家关系(gt/lt 可只用其一) | +| `flag` | `{ "key": "someKey", "eq": true }` | 家族旗标匹配(详见 §3.5 旗标) | +| `hasMeditation` | `true` | 有一人正在闭关(冥想) | +| `noWarForYears` | `2` | 未被袭击至少 N 年 | +| `minTechCount` | `3` | 已藏功法数下限 | +| `all` / `any` / `not` | `[Cond]` / `[Cond]` / `Cond` | 组合词:全满足/任一满足/取反(可嵌套) | -### 3.5 族人效果(memberBy) +### 3.4 选项效果(eff)全表 + +| 键 | 类型 | 写法示例 | 含义 | +|---|---|---|---| +| `res` | object | `{ "stones": 50, "lingcao": -3 }` | 资源增减(§10 资源 id;数量可为负——**减不得超库存**) | +| `rep` | number | `4` | 家族声望 ± | +| `relation` | object | `{ "n-danxin": 5, "n-nulei": -8 }` | 对某几家 +关系-关系(世界家 id §10) | +| `addBuilding` | string | `"lingtian"` | 白得一座建筑(§10 建筑 id) | +| `memberBy` | object | `{ "by": "heal", "target": "youngest" }` | 对族人施加随机/指定一人的效果(§3.5 详解) | +| `pillGain` | object | `{ "pill-qiyuan": 1 }` | 直接获得丹药(§10 丹 id) | +| `mission` | string | `"m-anmoku"` | 触发该秘境任务(§10 秘境 id) | +| `raid` | object | `{ "npcId": "n-nulei" }` | 某天下家来犯(袭击事件) | +| `flag` | object | `{ "myFlag": true }` | 设家族旗标(可被 cond 读取/其它事件调用) | +| `techniqueChance` | number | `0.3` | 概率获得一部功法(0~1) | +| `artifactChance` | number | `0.3` | 概率获得一件兵器 | +| `addTech` | string | `"t-baihui"` | 直接获得指定功法(§10 功法 id) | +| `feisheng` | object | `{ "stay": false }` | 触飞升剧情(stay=false 是强者飞升/留下) | +| `tournament` | boolean | `true` | 触发五年大比 | +| `formation` | string | `"vanguard"` | 指定阵型 | +| `apprentice` | object | `{ "build": true }` | 触发求经台/寄读 | +| `trib` | object | `{ "memberId": "x1", "mode": "rash" }` | 指定成员渡劫(rash 硬渡/guard 护法/delay 压制) | + +> **一个选项可同时写多个效果键**——例如 `{ "res": {...}, "rep": 4, "relation": {...} }` 三合一。无效果就 `{}`。 + +### 3.5 族人效果(memberBy)详解 ```jsonc -"memberBy": { - "by": "exp", // exp 修为 / wound 受伤 / heal 治愈 / breakthrough 突破 / fatal 重伤 / - // repGain 名望 / inspire 心境 / loot 得财 / madness 入魔 / genius 顿悟 - "target": "all", // random / head / youngest / oldest / highestPerception / highestPower / all - "n": 3, // 数量(all 时忽略) - "desc": "此事传开,族人倍受鼓舞。" // 可选描述 -} +"memberBy": { "by": "heal", "target": "youngest", "n": 5 } ``` +| `by`(做什么) | 含义 | +|---|---| +| `exp` | 修为增加(`n` 为月量) | +| `wound` | 受伤(`n` 为伤量) | +| `heal` | 治疗(`n` 为疗量) | +| `breakthrough` | 触发一次突破判定 | +| `fatal` | 直接陨落(慎用!) | +| `repGain` | 个人修善声望 | +| `inspire` | 士气/励族 | +| `loot` | 个人得货 | +| `madness` | 心智失乱 | +| `genius` | 天骄之资(稀有待遇) | + +| `target`(对谁) | 含义 | +|---|---| +| `random` | 随机一人 | +| `head` | 家主 | +| `youngest` | 最年幼 | +| `oldest` | 最年长 | +| `highestPerception` | 悟性最高 | +| `highestPower` | 战力最高 | +| `highestFortune` | 气运最高 | +| `all` | 全体族人 | + ### 3.6 完整示例(可直接用) ```jsonc -"events": [ - { - "id": "ev-jiangnan-rain", - "name": "江南烟雨", - "category": "daily", - "weight": 3, - "once": false, - "cond": { "minYear": 2 }, - "text": "一连三日细雨,田垄新绿。一位老农挑着桑筐来访,自称是十里外的蚕桑户。", - "options": [ - { "label": "留饭相谈", "hint": "灵草+3,声望+2", "eff": { "res": { "lingcao": 3 }, "rep": 2 } }, - { "label": "赠他盘缠", "hint": "灵石-15,好感+5", "eff": { "res": { "stones": -15 }, "relation": { "n-danxin": 5 } } }, - { "label": "笑笑送客", "hint": "无", "eff": {} } - ] - } -] +{ + "id": "ev-doufu", + "name": "豆腐老伯", + "category": "daily", + "weight": 12, + "once": true, + "cond": { "minYear": 2, "minRep": 10 }, + "text": "天还没亮,一名挑着豆腐担的老伯在祖宅门外叫卖。他说祖上受过先辈恩惠,今日来谢——不收钱,只求族人尝尝他的手艺。", + "options": [ + { "label": "尝一碗", "hint": "灵草+3,声望+2", + "eff": { "res": { "lingcao": 3 }, "rep": 2 } }, + { "label": "请他进屋喝口茶", "hint": "灵石-20,封藏一部功法(20% 得《百草经》)", + "eff": { "res": { "stones": -20 }, "techniqueChance": 0.2 } }, + { "label": "送他几册农书", "hint": "灵草-5,信任+1", + "eff": { "res": { "lingcao": -5 }, "flag": { "doufuTrust": true } } } + ] +} ``` -**常见坑**: -- `weight` 决定概率:一个 MOD 塞 20 个 `weight:100` 的事件会垄断剧情——引擎会自动按"插件池 ≤ 核心 50%"压缩,但文明开发请保持克制(日常事件推荐 1~5) -- `id` 撞名会被拒装——改名即可 -- 事件正文/选项不要用半角引号冲突(JSON 标准转义 `\"`) +> `flag` 用法进阶:A 事件设 `flag: { "doufuTrust": true }` → B 事件条件写 `cond: { "flag": { "key": "doufuTrust", "eq": true } }`——做成"系列剧情"。 + +> **例行检查**:事件 id 别撞内置(内置事件在 `src/renderer/game/data/events.ts`——最省事办法是懒人前缀:`ev-mymod-`)。 --- ## 4. 能力二:世界模板(npcs) -让这个世界"开局多一家"(或这家的某几族)。**只影响新开档**。 +**这是什么**:新档世界生成时的**候选家族池**。worldgen 每次开档按池子凑 4~8 家(名册随机)——你的模板**有机会**被选中入世,一旦选中,它将作为 NPC 家族参与天下演化(贸易/结盟/袭扰/换代/覆灭)。 + +**什么时候生效**:只在新世界生成时(模板会参与)。开档后天下家已定——不会再变(世界形成为档记录)。 ### 4.1 字段表 ```jsonc -"npcs": [ - { - "id": "n-gu-shi", // ✅ 建议 n- 前缀;全局唯一 - "name": "姑苏顾氏", // ✅ 显示名 - "region": "江南烟雨港", // ✅ 势力所在地区(词库会被生成引用) - "style": "风雅世家", // ✅ 宗族风骨(剑修世家/丹道世家/商盟世族/兵修蛮门/符箓仙门/灵植谷户/阵道门阀/散修聚落…自由写) - "desc": "临水而居,诗酒传家。",// ✅ 介绍 - "leaderRealm": "foundation", // ✅ 宗主境界(4.2 取值) - "initialPower": 150, // ✅ 开局实力(建议 60~400;与开局难度会再乘系数) - "powerGrowth": [3, 9], // ✅ 年度成长范围 [最小, 最大] - "sells": ["lingcao"], // 可选:它卖什么给市场(资源 id) - "buys": ["lingcao", "lingkuang"] // 可选:它买什么 - } -] +{ + "id": "n-cangwu", // 唯一(同样 [a-z0-9-]) + "name": "苍梧氏", // 家名 + "region": "南岭苍梧", // 地域(显示/影响区域风味) + "style": "剑修世家", // 风格(世界词库 styles 也可以是候选;这里写死) + "desc": "苍梧山下养剑人家,锋芒内敛而傲骨铮铮。", + "leaderRealm": "foundation", // 家主境界(见下表) + "initialPower": 180, // 起始实力 60~400 + "powerGrowth": [3, 9], // 每年实力成长区间 [min,max] + "sells": ["pill-qiyuan"], // 入市售品(§10 资源/成品 id) + "buys": ["lingcao", "beastcore"] // 入市求购 +} ``` -### 4.2 境界取值(所有用到境界的地方通用) +| 字段 | 必填 | 说明 | +|---|---|---| +| `id` | ✅ | 唯一 | +| `name` | ✅ | 中文家名 | +| `region` | ✅ | 地域(新贵世代可用 woldgen `regions` 词库——你家取现成地域也行) | +| `style` | ✅ | 风格(标注型;剑修/丹道/商盟/兵修…) | +| `desc` | ✅ | 简介 | +| `leaderRealm` | ✅ | 家主境界:`mortal` 凡 / `qi` 炼气 / `foundation` 筑基 / `core` 金丹 / `nascent` 元婴 / `spirit` 化神 | +| `initialPower` | ✅ | 实力 60~400 | +| `powerGrowth` | ✅ | [min,max] 年成长(min ≤ max) | +| `sells` | 可选 | 售品(API:入市即贸易表) | +| `buys` | 可选 | 求购(同上) | -``` -mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹)→ nascent(元婴)→ spirit(化神) -``` +### 4.2 境界取值(全游戏通用 `REALMS`) + +| 值 | 中文 | 年寿元 | +|---|---|---| +| `mortal` | 凡人 | 75 | +| `qi` | 炼气 | 150 | +| `foundation` | 筑基 | 220 | +| `core` | 金丹 | 340 | +| `nascent` | 元婴 | 520 | +| `spirit` | 化神 | 850 | + +(对外只写大境界;小境界炼气 0~8 层随数值演化由引擎管理。) ### 4.3 完整示例 ```jsonc -"npcs": [ - { - "id": "n-jiang-yu", - "name": "渔隐柴氏", - "region": "江南烟雨港", - "style": "渔隐门", - "desc": "一叶扁舟渡南北,渔篓里尽是江湖事。", - "leaderRealm": "qi", - "initialPower": 120, - "powerGrowth": [2, 7], - "sells": ["beastcore"], - "buys": ["lingcao"] - } -] +{ + "id": "n-juemai", "name": "绝脉氏", "region": "北原寒漠", "style": "兵修门阀", + "desc": "荒原上以猎妖为生的铁血之家,活人于死地,出手绝不留情。", + "leaderRealm": "core", "initialPower": 210, "powerGrowth": [3, 10], + "sells": ["shoupi", "beastcore"], "buys": ["lingcao", "lingkuang"] +} ``` -**常见坑**:`power` 太低的新家开局会被默认为"衰微家"(power<150 且景气低持续 8 年会覆灭)——这不是 bug,是世界的淘汰规律;建议新家 `initialPower ≥ 120`。 - --- ## 5. 能力三:生成词库(worldgen) -让新世界"这个时代容易出什么名字/哪里的家族"。词库会**混入自家词库**(默认 4 系 12 姓氏库),注入的每一条都进生成抽签。 +**这是什么**:四组**名字/风味池**——开档时世界从池子抽组合(家姓×地域×风格×后缀),决定"天下名卷"的自然涌现感。 ```jsonc "worldgen": { - "fams": ["吴", "江", "雨"], // 姓氏词根(会与后缀组合:吴氏/吴宗/吴寨…) - "regions": ["江南烟雨畔", "吴淞江湾"], // 地区名 - "styles": ["风雅世家", "渔隐门"], // 风骨 - "suffixes": ["氏", "族", "轩"] // 后缀(默认 氏/氏/宗/寨/门;自定义时替换组合) + "styles": ["丹道世家", "商盟", "猎妖门"], // 家族风格词 + "regions": ["江南烟雨畔", "北疆雪原"], // 地域词 + "fams": ["吴", "江", "雨"], // 姓氏 + "suffixes": ["宗", "门", "寨"] // 家名后缀(家族名 = 姓+后缀) } ``` -> 建议 `regions` 与你的模板 `region` 一致——这样"渔隐柴氏"的世界感统一。卸载时只会撤掉你加的词条,不会污染默认库。 +| 池 | 含义 | 示例 | +|---|---|---| +| `styles` | 家族风格(影响言行/售品倾向设定) | `丹道世家`、`剑修世家`、`渔隐门` | +| `regions` | 地域(影响区域灵势) | `江南烟雨畔`、`吴淞江湾` | +| `fams` | 姓氏 | `吴`、`江` | +| `suffixes` | 家名后缀 | `宗`、`门` | + +> 自己造的词会在**下一新档**出现;老档历史不变。喜欢"天下永远有"某个家族?那就用 §4 npcs 模板。 --- ## 6. 能力四:灾因(calamities) -给世界加一种"灾年"(与内置旱灾/蝗灾/兽潮同机制——全链路自动生效:减产/市场冲击/快讯/史册)。 +**这是什么**:灾年(旱灾/涝灾/蝗灾/疫病/兽潮/寒潮 是世界内置的六种)——你的 MOD 可以**追加**新的灾因,进世界灾签循环:年首抽灾 → 6 个月减产/困扰 → 散去。 ```jsonc -"calamities": [ - { - "name": "瘴雨", - "brief": "瘴雨连绵,田间霉蛀——灵植减产。", // 可选:灾年快讯文案(不写则自动用"XX——灵植减产,市价将行") - "family": { "lingcao": 0.75 }, // 可选:家族生产乘量(1=正常;0.75=减产25%) - "effect": { "lingcao": -0.2 } // 可选:世界市场冲击(-0.2=市池减20%) - } -] +"calamities": [{ + "name": "瘴雨", // 灾名(唯一——与内置灾因同名会被拒) + "brief": "瘴雨连绵,田间霉蛀——灵植减产。", // 灾年提示语 + "family": { "lingcao": 0.75 }, // 家族减产乘(0.1.33 起真正计入月产——须填) + "effect": { "lingcao": -0.2 } // 天下市场冲击(世界池现货下调) +}] ``` -- `family` 键支持:`lingcao / lingkuang / beastcore`(家族生产乘量) -- `effect` 键支持:`lingcao / lingkuang / beastcore`(世界池乘量) -- 灾年持续 6 月,会写进天下史册;**灾名全局唯一**(与内置重复会被忽略) +| 字段 | 必填 | 说明 | +|---|---|---| +| `name` | ✅ | 灾名(唯一;DEFAULT_CALAMITIES 里已有六种:旱灾/涝灾/蝗灾/疫病/兽潮/寒潮——同名被拒) | +| `brief` | 建议 | 灾年提示文案(历史记录/新闻引用) | +| `family` | 建议 | 家族侧减产乘:`{ 资源id: 乘数 }`(0.7=打七折;≤1 减产,>1 增产——兽潮就可以整点猎获) | +| `effect` | 建议 | 世界池侧冲击:`{ 资源id: 增减量 }`(世界市场实际库存起落) | --- ## 7. 能力五:丹方(pills) -给丹房加新丹药。**丹房等级门槛、材料、效果全由你定义**(服丹的修为增量由引擎按丹名归属自动处理——`pill-` 前缀的丹在"服丹"时走内置逻辑)。 +**这是什么**:丹房的炼丹配方。丹房等级、原料、灵石齐了之后玩家可以在"工坊"页点炼丹(0.1.30 起物品表接口已开放,背包/卖出/服丹全走物品表)。 ```jsonc -"pills": [ - { - "output": "pill-biandan", // ✅ 丹药 id(pill-QIANSUO 命名:`pill-` + 拼音/英文短名);需安装或存有对应描述(见坑) - "name": "便丹", - "danfangLevel": 1, // ✅ 丹房等级门槛(1~5) - "stones": 30, // ✅ 灵石成本 - "lingcao": 8, // ✅ 灵草成本 - "beastcore": 0, // ✅ 兽核成本(0 也可以) - "desc": "出门在外备着。" - } -] +"pills": [{ + "output": "pill-biandan", // 成品丹 id(**必须同时在 §9.5 items 立名**!) + "name": "便丹", + "danfangLevel": 1, // 丹房门槛(1~5) + "stones": 20, // 灵石成本 + "lingcao": 15, // 灵草成本 + "beastcore": 0, // 兽核成本 + "desc": "出门在外备着。" +}] ``` -**为什么需要 `items` 配套**:丹药在背包与卖出时要有"名号/图标",由物品表供应——MOD 需要一个配套物品条目(同时给物品表与丹方)。**0.1.30 起物品表接口暂未开放**:丹方会入"可炼制"列表、服丹修为增加,但背包显示用惯例名。**建议先只做"专用丹方"主题**,或等 item 表开放(在开发中)——文档会第一时间更新。 +| 字段 | 必填 | 说明 | +|---|---|---| +| `output` | ✅ | 丹 id(`pill-` 前缀惯例;且**物品表必须有同名 item**——见红牌) | +| `name` | ✅ | 丹名 | +| `danfangLevel` | ✅ | 丹房等级门槛(1~5,超出提示 warning) | +| `stones` / `lingcao` / `beastcore` | ✅ | 三原料成本(非负) | +| `desc` | ✅ | 丹说明(物品表 desc 同步显示) | -> 若你只想做"经济型" mod(材料搭配),这章已够;需要"全新药效"留给未来版本。 +> 🔴 **0.1.33 红牌(血泪教训)**:`output` 必须同时写进 §9.5 的 `items`!产物没有物品表定义 = **幽灵物品**——炼出来在背包里看不见、卖不掉、不能用。标准的配合写法: +> ```jsonc +> "pills": [{ "output": "pill-biandan", "name": "便丹", "danfangLevel": 1, "stones": 20, "lingcao": 15, "beastcore": 0, "desc": "出门在外备着。" }], +> "items": [{ "id": "pill-biandan", "name": "便丹", "kind": "pill", "basePrice": 60, "desc": "出门在外备着。", "icon": "丹" }] +> ``` + +**内置丹方参照**(照这个量级走): + +| 丹方 | 丹房 | 材料 | 售价 | +|---|---|---|---| +| `pill-qiyuan` 聚气丹 | 1 级 | 灵草15 | 45 | +| `pill-ningyuan` 凝元丹 | 2 级 | 灵草25+兽核4 | 150 | +| `pill-pojing` 破境丹 | 3 级 | 灵草40+兽核10 | 480 | +| `pill-heling` 和灵丹 | 2 级 | 灵草20+兽核8 | 120 | +| `pill-xudan` 虚元丹 | 4 级 | 灵草50+兽核16 | 320 | --- -> **红牌(0.1.33 生态纪律)**:`output` 必须同时出现在 `§9.5 items` 里——产物没有物品表定义 = 幽灵物品(炼出来不可见、不可卖、不可装备)。内置丹方参考:聚气 `pill-qiyuan`/凝元 `pill-ningyuan`/破境 `pill-pojing`/和灵 `pill-heling`/虚元 `pill-xudan`(丹房等级 1/2/3/2/4)。 - ## 8. 能力六:铸器配方(forges) -给"定制"页加新兵刃(铸器是 0.1.16 起的正式玩法;武器**必须有对应物品条目**才能被装备)。 +**这是什么**:自造兵器的配方(灵矿+兽核+灵石→武器),无建筑门槛——数值即门槛(成本低=品质低)。 ```jsonc -"forges": [ - { - "output": "weapon-lingwoon", // ✅ 武器 id(`weapon-` 前缀;内置有 weapon-fan/qi/ling/fa) - "name": "灵纹刃", - "stones": 700, - "lingkuang": 15, - "beastcore": 5, - "desc": "纹蕴灵光,锋锐无俦。" - } -] +"forges": [{ + "output": "weapon-gangchi", // 兵器 id(**同样必须先立名 items**) + "name": "罡齿刃", + "stones": 800, + "lingkuang": 16, + "beastcore": 5, + "desc": "咬罡崩铁,斩山如泥。" +}] ``` ---- +| 字段 | 必填 | 说明 | +|---|---|---| +| `output` | ✅ | 兵器 id;**红牌同 §7**:物品表必须有同名 item | +| `name` | ✅ | 兵名 | +| `stones` / `lingkuang` / `beastcore` | ✅ | 三成本(非负) | -> **红牌(0.1.33 生态纪律)**:`output` 同样必须先立名 items(内置参照:凡器 `weapon-fan`/法器 `weapon-qi`/灵器 `weapon-ling`/法宝 `weapon-fa`/玉澜刃 0.1.33 `weapon-yu`/灵纹刃 官方示例 `weapon-lingwoon`)。另:*铸器不带建筑门槛、数值即门槛*——`stones/lingkuang/beastcore` 的三成本既是成本也是难度。 +> 🔴 **红牌同 §7**——范例(注意 `items` 里 `artifact` 类 + `basePrice`): +> ```jsonc +> "forges": [{ "output": "weapon-gangchi", "name": "罡齿刃", "stones": 800, "lingkuang": 16, "beastcore": 5, "desc": "咬罡崩铁。" }], +> "items": [{ "id": "weapon-gangchi", "name": "罡齿刃", "kind": "artifact", "basePrice": 900, "desc": "咬罡崩铁。", "icon": "罡" }] +> ``` + +**武器强度表**(`ARTIFACT_POWER`——决定装备后的战力百分比): + +| 兵器 | 战力 | +|---|---| +| `weapon-fan` 凡器 | +10% | +| `weapon-qi` 法器 | +25% | +| `weapon-yu` 玉澜刃 | +40% | +| `weapon-lingwoon` 灵纹刃(官范例) | +35% | +| `weapon-ling` 灵器 | +50% | +| `weapon-fa` 法宝 | +90% | + +> 自己铸兵器的战力怎么定?**不能直接给定**(铸器表没有战力字段)——想给玩家武器设满配,请在 §11 用 `ARTIFACT_POWER` 内部映射(MOD 不可覆写内置映射;**建议在 items 定义时参考上表量级定价**:法器 450/灵器 1400/法宝 3600)。 + +--- ## 9. 能力七:世界数值(worldNum) -微调"世界的脾气"。**白名单键**(只允许改这些;写别的键会被忽略、但不会报错): - -| 键 | 默认 | 说明 | -|---|---|---| -| `calamityChance` | 0.18 | 灾年概率(0.5 = 几乎年年灾) | -| `worldSupplyRate` | 0.02 | 世界月供给 | -| `worldDemandRate` | 0.015 | 世界月需求 | -| `npcTradeRate` | 0.008 | NPC 月贸易量 | -| `greatNewbornChance` | 0.06 | 新贵补位率 | -| `secretRecover` | 2 | 秘境灵气月恢复 | -| `tradeFloorPct` | 0.35 | 断供拒单线 | +**这是什么**:对**世界常数表**(WORLDSIM)做覆写——调供需、池深、潮汐、灾年概率、战争疲劳等。白名单机制:**只认常数表内键**,乱写的键被忽略(不报错不算错)。 ```jsonc "worldNum": { - "calamityChance": 0.28, - "greatNewbornChance": 0.08 + "worldSupplyRate": 0.02, // 世界月供给上浮(更富饶的世界) + "calamityChance": 0.1, // 灾年概率调低(温和天下) + "newSecretChance": 0.06 // 新秘境现身率上浮 } ``` -> `marketRebalance`(0.025)与 `poolFloorPct`(0.35)是平衡核心,**不建议** MOD 修改(改了容易让价格/池系统黏糊)。卸载时数值自动还原。 +### 全键列表(取值均为"数值",单位见注释) + +**市场/池**(0.1.32 起实体化——详见 README"市场实体化"): + +| 键 | 默认 | 含义 | +|---|---|---| +| `marketDriftRate` | 0.03 | 月波动幅度 | +| `marketRebalance` | 0.025 | 弱锚定强度(**勿调回 0.1+**——锚死供需失去意义) | +| `priceFloor` / `priceCeil` | 0.55 / 2.3 | 相对基准价上下限 | +| `worldSupplyRate` | 0.02 | 世界月供给 | +| `worldDemandRate` | 0.015 | 世界常驻需求 | +| `npcTradeRate` | 0.6 | NPC 贸易频率 | +| `tradeFloorPct` | 0.35 | **拒单线**(池比 < 此值玩家停手断供) | +| `poolFloorPct` | 0.25 | **池底**(市场永不清零;**低手线分离**——别改回同值,0.1.20 语义已废) | +| `tradeCeilPct` | 8 | 池上限 | + +**潮汐/灵气**: + +| 键 | 默认 | 含义 | +|---|---|---| +| `tideCycle` | 96 | 潮汐周期(月) | +| `tideSupplySpan` | 0.35 | 潮汐对供给的摆动 | +| `longWave` / `longWaveSpan` | 120 / 0.08 | 十年长波周期/振幅 | +| `tideMin` / `tideMax` | 0.65 / 1.35 | 潮汐上下限 | +| `secretRecover` / `secretRecoverHi` | 2 / 5 | 秘境灵气月恢复(常/潮高) | +| `secretConsume` | 6 | 单次探索消耗 | + +**时代/灾**: + +| 键 | 默认 | 含义 | +|---|---|---| +| `tempEraK` | 0.8 | 世界温度对 era 转移强度(下界已钳 0.05——不再零/负) | +| `greatNewbornChance` | 0.06 | 年首新贵补位率(乱世×2) | +| `allianceGriefRaid` | 0.012 | 盟约连坐的袭扰概率 | +| `calamityChance` | 0.18 | 灾年概率 | +| `calamityMonths` | 6 | 灾年持续月数 | +| `npcEventChance` | 0.05 | NPC 互攻年首诗签率 | +| `newsEvery` / `newsKeep` | 24 / 120 | 天下快讯节奏/留档条数 | + +**0.1.34 新键(战争疲劳/断供/新秘境)**: + +| 键 | 默认 | 含义 | +|---|---|---| +| `warFatigueRise` | 0.008 | 每次乱象(互攻)累积的战争疲劳 | +| `warFatigueTempK` | 0.6 | 疲劳对世界温度的冷降幅度(打不动即荒年) | +| `shortageLine` | 0.7 | 断供警戒线(池/基准低于此起计) | +| `shortageMonths` | 3 | 连续月数触发断供应急(价 ×1.5 + 广播) | +| `shortagePrice` | 1.5 | 断供价乘 | +| `newSecretChance` | 0.04 | 年首新秘境现身概率(乱世×2) | --- -## 9.5 内容面扩展(0.1.31:物品/功法/建筑/职事/志向/阵型/性格) +## 9.5 内容面扩展(物品/功法/建筑/职事/志向/阵型/性格) -七个新口全部纯数据;**内置条目不可覆盖**(同名 id 被跳过——防覆盖红线),只加新键。 +七口全纯数据;**内置条目不可覆盖**(同名 id 被跳过并 warn——防覆盖红线),只加新键。凡"新实体"口都自动进入游戏各面(背包/市场/建/配/装等)。 + +### 9.5.1 物品(items)——六类生态 -### 物品(items)——配丹药/武器显示 ```jsonc "items": [ { "id": "pill-biandan", "name": "便丹", "kind": "pill", "basePrice": 60, "desc": "出门在外备着。", "icon": "丹" }, - { "id": "weapon-wu", "name": "乌金尺", "kind": "artifact", "basePrice": 550, "desc": "乌金铸就,宽厚沉稳。", "icon": "玄" } + { "id": "weapon-gangchi", "name": "罡齿刃", "kind": "artifact", "basePrice": 900, "desc": "咬罡崩铁。", "icon": "罡" } ] ``` -`kind` 取值(0.1.32 六值):`resource`(资源)/ **`material`(素材:灵玉灵木兽皮灵果等)** / `pill`(丹药)/ **`talisman`(符箓:开战武备自动消耗)** / **`brew`(灵酿:渡劫伤后自动回气)** / `artifact`(兵器)。加了物品后:丹方(§7)/铸器(§8)与市场/背包自动可见。 -### 功法(techniques)——0.1.34 起含四流派效果 +| 字段 | 必填 | 说明 | +|---|---|---| +| `id` | ✅ | 唯一(`[a-z0-9-]`) | +| `name` | ✅ | 名字 | +| `kind` | ✅ | 六类:`resource` 资源 / `material` 材料 / `pill` 丹药 / `talisman` 符箓 / `brew` 灵酿 / `artifact` 兵器 | +| `basePrice` | ✅ | 基准价(市场行情按此波动;>0) | +| `desc` | ✅ | 描述 | +| `icon` | ✅ | **单字汉字**(印章字符——游戏内无 emoji 字体,别写 emoji/多字) | + +**六类生态说明**(每类都有"出口"才闭环): + +| kind | 游戏内行为 | +|---|---| +| `resource` | 基础资源(世界池/生产/市场全链) | +| `material` | 素材(入世界池参与呼吸+NPC 贸易;灵玉/灵木/兽皮等天然材料即此列) | +| `pill` | 丹药(服丹加修为——需丹方生产) | +| `talisman` | 符箓(开战胜耗:风符×1.12 / 山符×1.15+受创减半——金钟罩零 rng 结算) | +| `brew` | 灵酿(渡劫受重创后自动回气+5) | +| `artifact` | 兵器(成员可装备——战力按 ARTIFACT_POWER 表) | + +> **四同步纪律**(0.1.32,想进世界循环的 *material/resource* 必须 4 件事齐):① 本表定义 → ② POOL_BASE(世界池基准)→ ③ MARKET_IDS(市场循环键位)→ ④ worldgen marketOffset(开档偏移)。只做完① = "躺仓库"(能背包不能世界呼吸)。丹药/符箓/灵酿/兵器**不需要**世界池(玩家自制/市场购)。 + +### 9.5.2 功法(techniques)——含四流派效果 + ```jsonc "techniques": [ { "id": "t-lingwu", "name": "灵雾心法", "grade": 1, "element": "水", "path": "丹修", "expBonus": 0.11, "powerBonus": 0.12, "desc": "雾气绕身,吐纳绵长。" }, - { "id": "t-hanfeng", "name": "寒锋慢斩诀", "grade": 2, "element": "水", "path": "剑修", - "expBonus": 0.15, "powerBonus": 0.18, - "critChance": 0.1, // 流派效果(全 optional,缺省零行为) - "guardBonus": 0.25, - "tribBonus": 0.05, - "secretBonus": 0.15, - "desc": "剑藏寒锋,斩人有思。" } + { "id": "t-xiashuang", "name": "霞霜剑歌", "grade": 2, "element": "水", "path": "剑修", + "expBonus": 0.14, "powerBonus": 0.17, + "critChance": 0.1, "guardBonus": 0.1, "tribBonus": 0.04, "secretBonus": 0.1, + "desc": "霞染霜锋,剑歌行处皆败。" + } ] ``` -- `grade` 1~4(品阶:市价/掉率/求学经库门槛);`element` 木/金/水/火/土/雷;`path` 剑修/体修/丹修/阵修/符修/御灵自由 -- **四流派效果**(0.1.34 全 optional)——缺省即零行为: - | 字段 | 作用 | 参考量级 | - |---|---|---| - | `critChance` | 暴击:战斗败亡率压制 | 0.05~0.12 | - | `guardBonus` | 受创减免:战斗受伤折减 | 0.15~0.3 | - | `tribBonus` | 渡劫成功率加成 | 0.03~0.09 | - | `secretBonus` | 秘境收获放大 | 0.1~0.2 | -- **元素×时令共鸣**(0.1.34):春木/夏火/秋金/冬水——修炼 expBonus 额外 ×1.04;**土系恒应 ×1.02**(4 季皆宜,0.1.35) -- 新功法将进入:藏书阁可购(grade≤3)/ 秘境掉落 / 拍卖 / 求经台 -- **平衡提醒**:validateMod 检查 `expBonus ≤ 0.5 / powerBonus ≤ 1`(警告级,不阻断) -### 建筑(buildings) +| 字段 | 必填 | 说明 | +|---|---|---| +| `id` | ✅ | 唯一(`t-` 惯例) | +| `name` | ✅ | 功法名 | +| `grade` | ✅ | 品阶 1~4(影响市价/掉率/求学经库边际) | +| `element` | ✅ | `木/金/水/火/土/雷`——**元素×时令共鸣**(春木夏火秋金冬水,季修 ×1.04;土系恒应 ×1.02 四季皆宜) | +| `path` | ✅ | 流派标签:剑修/体修/丹修/阵修/符修/御灵…(自由填) | +| `expBonus` | ✅ | 修炼加速(建议 0.08~0.28) | +| `powerBonus` | ✅ | 战力加成(建议 0.05~0.38) | +| `critChance` | 可选 | **暴击**:战斗阵亡率压制(建议 0.05~0.12) | +| `guardBonus` | 可选 | **受创减免**:战斗受伤折减(建议 0.15~0.3) | +| `tribBonus` | 可选 | **渡劫加成**:渡劫成功率 +(建议 0.03~0.09) | +| `secretBonus` | 可选 | **秘境收获**:任务掉落乘放大(建议 0.1~0.2) | +| `desc` | ✅ | 描述 | + +> 新功法自动进:藏书阁可购(grade≤3 才入市)/ 秘境掉落 / 拍卖 / 求经台。 +> **平衡提醒**(validateMod 检查):`expBonus ≤ 0.5`、`powerBonus ≤ 1`(超了 warning)。 +> 参阅内置 23 本量级(§10 速查表功法表——照档位编,别造出"二品武功碾压天阶")。 + +### 9.5.3 建筑(buildings) + ```jsonc "buildings": [ { "id": "b-chalu", "name": "茶园", "icon": "茗", "desc": "清茶待客,悦人悦己。", "kind": "produce", @@ -451,50 +654,86 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 "upgradeStones": 60, "upgradeMineral": 8 } // 升级费=基价 ×1.6^(L-1) / 灵矿×L ] ``` -- `kind`:`produce`(月产)/ `function`(加成(function 型加成用 worldNum 风格暂不支持自定义配方——建议 produce 为主)) -- 建筑自动出现在领地页可建/可升;**生产表达式白名单安全**(数学符号 + L,别的符号被忽略) -### 职事(posts) +| 字段 | 必填 | 说明 | +|---|---|---| +| `id` | ✅ | 唯一 | +| `name` / `icon` / `desc` | ✅ | 显示(icon 单字汉字符号) | +| `kind` | ✅ | `produce`(月产)\| `function`(加成——function 型建议少碰,数据面以 produceExpr 为主) | +| `maxLevel` | ✅ | 最高等级 | +| `produceExpr` | produce 必填 | 月产表达式:`{ 资源id: "公式" }`——公式中 `L`=当前等级;数学符号白名单(+ - * / 与 ^,其它忽略) | +| `upgradeStones` | ✅ | 升级灵石基价(1.6^(L-1) 递增) | +| `upgradeMineral` | ✅ | 升级灵矿(×L) | + +> 建筑自动出现在领地页可建/可升。**消耗式建筑**(如符箓坊:扣符纸+灵木产符箓——0.1.33 引入)**不要**用 produceExpr 泛化——泛化只做纯产出。 + +### 9.5.4 职事(posts)——5 效果 + ```jsonc "posts": [ - { "id": "p-chashi", "effectType": "marketIncome", "value": 0.06, "max": 1, "desc": "坐市司货,坊市入息 +6%。" } + { "id": "p-chashi", "name": "茶司", "effectType": "marketIncome", "value": 0.06, "max": 1, "desc": "坐市司货,坊市入息 +6%。" } ] ``` -`effectType` 取值(对应内置效果):`expAll / marketIncome / battlePower / cultivation / stamina / insight / feast`。 -### 志向(aspirations) +| 字段 | 必填 | 说明 | +|---|---|---| +| `id` | ✅ | 唯一 | +| `name` | ✅ | 职事名 | +| `effectType` | ✅ | **真实取值**:`expAll`(全体修炼)/ `marketIncome`(坊市入息)/ `battlePower`(战力)/ `meditation`(闭关效率)/ `familyRep`(家族声望) | +| `value` | ✅ | 效果强度(小数:0.06=+6%) | +| `max` | ✅ | 可设人数上限 | +| `desc` | ✅ | 描述 | + +### 9.5.5 志向(aspirations)——6 效果 + ```jsonc "aspirations": [ - { "id": "a-chafan", "desc": "偶有茶会,心神宁和。", "effectType": "cult", "value": 0.04 } + { "id": "a-chafan", "name": "茶饭闲人", "desc": "偶有茶会,心神宁和。", "effectType": "cult", "value": 0.04 } ] ``` -`effectType`:`cult`(修为)/ `field`(产田)/ `market`(商市)/ `combat`(战力)/ `offspring`(生育)。 -### 阵型(formations) +| `effectType` 真实取值 | 含义 | +|---|---| +| `cult` | 修炼加速 | +| `battle` | 战力(注意:是 **battle** 不是 combat——0.1.31 早期文档曾误写) | +| `market` | 市场经济(坊市/贸易) | +| `field` | 灵田产降(农务) | +| `offspring` | 生育/姻缘 | +| `rep` | 声望 | + +### 9.5.6 阵型(formations) + ```jsonc "formations": [ { "id": "f-qingyun", "name": "青云阵", "icon": "云", "desc": "攻守兼重。", "atk": 1.05, "def": 1.05, "retreatWound": 1 } ] ``` +`atk`(攻倍)/ `def`(防倍)/ `retreatWound`(撤退伤乘):围绕 1.0 设计(0.9~1.15 区间是合理动态)。 + +### 9.5.7 性格(traits) -### 性格(traits) ```jsonc "traits": [ - { "id": "t-yaxi", "name": "雅细", "desc": "心细如发,炼丹养生。", - "bonus": { "expBonus": 0.03, "charmBonus": 0.05, "danger": 0 } } + { "id": "t-yaxi", "name": "雅细", "desc": "心细如发,炼丹养生。", "bonus": { "expBonus": 0.03, "charmBonus": 0.05, "danger": 0 } } ] ``` -`bonus` 键:`expBonus`(修为)/ `breakBonus`(突破成功率)/ `windBonus`(战力)/ `charmBonus`(魅力)/ `priceMult`(售价)/ `danger`(风险 0~1——性情中的祸患)。 -### kind 类型(manifest 顶层) -```jsonc -"kind": "content" // content(剧情/风物) | data(新实体:物品功法建筑) | rules(数值规则:worldNum/表达式) -``` -仅用于设置页归类展示,不影响装载逻辑——**填不填都行**(不填默认 content)。 +`bonus` 键(映射到引擎的 TraitDef 平铺字段): -## 9.6 数值 patch 层(0.1.34) +| bonus 键 | 含义 | 建议量级 | +|---|---|---| +| `expBonus` | 修为加成 | 0.02~0.08 | +| `breakBonus` | 突破成功率 | 0.02~0.06 | +| `windBonus` | 战力 | 0.02~0.1 | +| `charmBonus` | 魅力(姻缘/招募) | 0.02~0.1 | +| `priceMult` | 售价加成 | 0.02~0.08 | +| `danger` | 风险(性情偏激/祸患 0~1) | 0~1 | -**不改表结构、不加新实体**——只对"已存在"的表项改数值;打包/改值/回滚全自动。 +--- + +## 9.6 数值 patch 层 + +**这是什么**:不改表结构、不加新实体——只对**已存在**表项改数值(打包/改值/回滚全自动)。适合"风味包调平衡"(比如你的主题包想让聚气丹便宜两成)。 ```jsonc "patch": [ @@ -503,26 +742,35 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 ] ``` -规则(validateMod 预检 + 运行时双重把关): -- `mult` 限 `0.5 ~ 2`(越界 → MOD 拒绝);`add` 为实数 -- **`mult` / `add` 二选一**,勿同给(同给 → 拒绝) -- 只对**已定义数值键**生效:功法作用于 `expBonus/powerBonus/critChance/guardBonus/tribBonus/secretBonus`;物品作用于 `basePrice`(钳制 ≥1) -- 目标字段缺失 → **warn 日志**(`[patch] 功法 xx 无字段 yy`),绝不静默吞 -- **仅新开档生效;卸载复原**(0.1.35 归属到每个插件——卸载只弹本家,互不侵扰) -- 与 `worldNum` 区别:`worldNum` 改**全局世界常数**,`patch` 改**表项数据**——两者可并用 +| 字段 | 必填 | 说明 | +|---|---|---| +| `target` | ✅ | `technique` / `item`(`building` 记于文——表项结构复杂,建议不碰) | +| `id` | ✅ | 表内已有条目 id | +| `mult` | 二选一 | 乘数(0.5~2,越界 → 安装拒绝) | +| `add` | 二选一 | 实数增量 | + +**规则**: +1. `mult`/`add` **二选一**,同给 → 拒绝; +2. 只对**已定义数值键**生效:功法改 `expBonus/powerBonus/critChance/guardBonus/tribBonus/secretBonus`;物品改 `basePrice`(钳 ≥1); +3. **目标字段缺失 → warn 日志**(`[patch] 功法 xx 无字段 yy`)——绝不清空吞; +4. **仅新开档生效**;卸载复原(0.1.35 按插件归属——只弹本家,互不侵扰); +5. 与 `worldNum` 区别:`worldNum` 改**全局世界常数**,`patch` 改**表项数据**——可并用。 --- ## 10. 速查表:内置 id 大全 -### 资源/材料 id(res / sells / buys / family / effect 通用) +### 10.1 资源/材料 id(res / sells / buys / family / effect 通用) + - **资源**:`stones`(灵石)· `lingcao`(灵草)· `lingkuang`(灵矿)· `beastcore`(兽核) -- **材料(0.1.32 新材料七种)**:`lingyu`(灵玉)· `lingmu`(灵木)· `shoupi`(兽皮)· `lingguo`(灵果)· `linglu`(灵露)· `dansha`(丹砂)· `fuzhi`(符纸) -- **符箓**:`talisman-feng`(风符·开战武备消耗)· `talisman-shan`(山符) -- **灵酿**:`brew-niang`(灵酿·渡劫伤后回气) -- **来源速记**(与玩法真实对应):灵玉←玄冰谷/古战阵掉落+市场;灵木←灵木坊(建筑)+暗墨林;兽皮←灵兽园/古战阵/兽潮灾年;灵果←灵果园;丹砂/灵露/符纸←市场购买为主 +- **材料七种**(0.1.32):`lingyu` 灵玉 · `lingmu` 灵木 · `shoupi` 兽皮 · `lingguo` 灵果 · `linglu` 灵露 · `dansha` 丹砂 · `fuzhi` 符纸 +- **符箓**:`talisman-feng` 风符(开战全体 ·1.12)· `talisman-shan` 山符(开战 ·1.15 + 受创减半) +- **灵酿**:`brew-niang`(渡劫伤后回气 +5) + +**材料来源速记**(与玩法真实对应):灵玉 ← 玄冰谷/古战阵掉落+市场;灵木 ← 灵木坊(建筑)+暗墨林;兽皮 ← 灵兽园/古战阵/兽潮灾年;灵果 ← 灵果园;丹砂/灵露/符纸 ← 市场购买为主。 + +### 10.2 丹药 id(pillGain / res 可用 / 丹方) -### 丹药 id(pillGain / res 可用) | id | 丹名 | 丹房 | 材料 | 说明 | |---|---|---|---|---| | `pill-qiyuan` | 聚气丹 | 1 级 | 灵草15 | 炼气期主修 | @@ -531,17 +779,19 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 | `pill-heling` | 和灵丹 | 2 级 | 灵草20+兽核8 | 0.1.33 新丹方 | | `pill-xudan` | 虚元丹 | 4 级 | 灵草50+兽核16 | 0.1.33 新丹方 | -### 武器 id(forge output / 掉落池 / ARTIFACT_POWER) +### 10.3 兵器 id(forge output / 掉落 / 装备) + | id | 兵名 | 战力 | 说明 | |---|---|---|---| -| `weapon-fan` | 凡器 | +0.10 | 基础器 | +| `weapon-fan` | 凡器 | +0.10 | 基本位 | | `weapon-qi` | 法器 | +0.25 | 蕴灵 | | `weapon-ling` | 灵器 | +0.50 | 有灵 | | `weapon-fa` | 法宝 | +0.90 | 罕世 | | `weapon-yu` | 玉澜刃 | +0.40 | 0.1.33 灵木铸器 | -| `weapon-lingwoon` | 灵纹刃 | +0.35 | 官方示例包产出(0.1.35 立名修复) | +| `weapon-lingwoon` | 灵纹刃 | +0.35 | 官方范例包产出(0.1.35 立名修复) | + +### 10.4 功法 id(23 本全列) -### 功法 id(addTech;掉落池随机取用)——23 本全列 | id | 名称 | 品阶 | 流派效果 | |---|---|---|---| | `t-qinglian` | 青莲剑诀 | 1 | — | @@ -568,14 +818,15 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 | `t-qiankun` | 乾坤七星阵 | 4 | — | | `t-xiantian` | 先天混元功 | 4 | — | -### 建筑 id(addBuilding / minBuilding / produceExpr)——14 座 +### 10.5 建筑 id(14 座) + | id | 名 | 类型 | 产物/说明 | |---|---|---|---| | `lingtian` | 灵田 | produce | 灵草(月产 L 倍) | -| `yaoyuan` | 药园 | produce | 灵草 + 兽核(3 级) | +| `yaoyuan` | 药园 | produce | 灵草 + 兽核(3 级起) | | `lingkuang` | 灵矿 | produce | 灵矿 | | `fangshi` | 坊市 | produce(stones) | 灵石月入 | -| `danfang` | 丹房 | function | 炼丹(craftChance) | +| `danfang` | 丹房 | function | 炼丹(craftChance 随级) | | `cangshu` | 藏书阁 | function | 功法购入/求经 | | `juling` | 聚灵阵 | function | 修炼 expBonus | | `yanwu` | 演武场 | function | 战力 + 悟位积累(0.1.34) | @@ -586,10 +837,12 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 | `lingmufang` | 灵木坊 | produce | 灵木(0.1.32) | | `fuzhifang` | 符箓坊 | produce(消耗式) | 耗符纸×2+灵木×2/级→风符;叁级→山符(0.1.33) | -### 天下家 id(relation / raid) -`n-xuanying`(玄影沈氏·剑修)· `n-danxin`(丹心木氏·丹道)· `n-sihai`(四海王氏·商盟)· `n-nulei`(怒雷祝氏·兵修)——注:**世界随机化后你家不一定有全部四家**;写它们不会报错,只是关系变化可能发生在"不存在的家"上(忽略即可)。 +### 10.6 天下家 id(relation / raid) + +`n-xuanying` 玄影沈氏 · `n-danxin` 丹心木氏 · `n-sihai` 四海王氏 · `n-nulei` 怒雷祝氏——**新档 worldgen 随机凑 4~8 家,你家不一定全有**;写不存在的也不报错,只是关系变化落空。新贵家族 id 是 `n-new-…`(世界新贵+你的模板家混出),写不得——只用上面四家作为"保底名册"。 + +### 10.7 秘境 id(missionId) -### 秘境 id(mission) | id | 名 | 风险 | 掉落特征 | |---|---|---|---| | `m-anmoku` | 暗墨林 | 0.5 | 灵草/兽核 | @@ -598,7 +851,7 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 | `m-lingshan` | 灵鹫山 | 0.85 | 灵草/兽核(高难) | | `m-tiankeng` | 天坑 | 0.9 | 兽核/高阶战利 | -> **0.1.34 起世界年首会灵机现身 `m-wonder-*` 新秘境**(随 seed/年号派生,档档不同)——你的 `sendMission` 对 wonder id 也完全可用(引擎双向回退),放心引用或观望。 +> **0.1.34 起世界年首会灵机现身 `m-wonder-*` 新秘境**(随 seed/年号派生,档档不同)——引擎双向回退,你的 `sendMission` 对 wonder id 也完全可用;放心引用或观望。 --- @@ -612,27 +865,28 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 - 缺 `id` 字段或 `id` 用了中文/大写/`.`;按 §2 修。**另外**:如果你把**存档导出文件**误放进了 mods 目录,也会报这个错——那是存档,请删除或移到别处(或用游戏内"导入存档")。 **Q3:提示"MOD 安装被拒绝:事件 id 冲突:xxx"?** -- 你的事件 `id` 与内置/已装 MOD 重复——改个不重名的 id 即可。 +- 你的事件 `id` 与内置/已装 MOD 重复——改个不重名的 id 即可(用 `ev-你的前缀-` 最省心)。 **Q4:装上了但游戏里没见反应?** -- **先确认是"新开档"**:MOD 只影响新世界生成;已开的档不会变。 +- **先确认是"新开档"**:MOD 只影响新世界生成与装载;已开的档不会变。 - 事件类:检查 `category` 与 `weight`(`daily`/`major`/`fate` 各自独立抽签,weight 太小+类别太稀有会很少见)。 - 模板类:新开档后去"天下"面板看"群雄谱"。 +- 物品/功法/建筑类:直接去对应页面(背包/藏书阁/领地)核对。 **Q5:卸载后世界还变着?** -- 世界状态(已发生的演化)是"既成事实"——卸载只还原 MOD 造成的**机制**(词库/灾因/配方/数值),不会回滚开档后世界自然发生的事。这与游戏规则一致:**装 MOD 改变世界的历史**。如果希望干净世界,用没装 MOD 时的新档。 +- 世界状态(已发生的演化)是"既成事实"——卸载只还原 MOD 造成的**机制**(词库/灾因/配方/数值/注入条目),不会回滚开档后世界自然发生的事。这与游戏规则一致:**装 MOD 改变世界的历史**。如果希望干净世界,用没装 MOD 时的新档。 **Q6:读档提示"缺失 MOD"?** - MOD 的文件被移动/删了,或游戏版本变化导致版本不符。把文件放回 `mods` 目录(同 id 同版本)再进档即可。 **Q7:我的 MOD 与别人冲突?** -- 检查两个 MOD 是否用了相同事件 id / 灾因名 / 丹方 output / 模板 id / **功法 id**——任意撞名 → 后装者会被拒/被忽略(同 id 功法撞内置 → `[MOD:xxx]` 日志提示跳过)。用 `depends`/`conflicts` 声明关系(§2)。 +- 检查两个 MOD 是否用了相同事件 id / 灾因名 / 丹方 output / 模板 id / 功法 id——任意撞名 → 后装者会被拒/被忽略(同 id 功法撞内置 → `[MOD:xxx]` 日志提示跳过)。用 `depends`/`conflicts` 声明关系(§2)。 **Q8:`patch` 改了没生效?** - 查三事:① `target`/`id` 是否精确表内项;② `mult` 是否 0.5~2(越界会**拒绝**而非忽略);③ 目标字段是否存在(功法没定义某效果键 → `[patch] 功法 xx 无字段 yy` 日志。补上该效果字段再 patch 即可)。 - 注意 `patch` **只改表项**,世界常数用 `worldNum`;两者作用范围不同。 -**Q9:带 `patch` / 新功法的 MOD,读档后世界正常吗?** +**Q9:带 `patch` / 新功法的 MOD,老档读档正常吗?** - MOD 只作用于**新开档**;老档装载 MOD 只影响"此刻起"的机制拼接,数值 patch 不会追溯已建世界。想验证效果请新开档。 --- @@ -666,30 +920,34 @@ mortal(凡人)→ qi(练气)→ foundation(筑基)→ core(金丹 | 包 | 教会你 | |---|---| | **风物集**(`fenwu-ji`) | 词库注入 + 灾因(含 brief 文案)——"做地域风物" | -| **战备解军**(`zhanbei-xv`) | 配方注入 + worldNum 覆写——"做数值平衡" | +| **战备解军**(`zhanbei-xv`) | 铸器配方 + worldNum 覆写——"做数值平衡" | 拆解方法:安装后 → 导出当前 MOD 集 → 用文本编辑器打开 `mod-bundle-export.cotymod` → 所有字段即你所见。 **风物集** data 实样: ```jsonc -{ "worldgen": { "fams": ["吴","江","雨"], "regions": ["江南烟雨畔","吴淞江湾"], "styles": ["风雅世家","渔隐门"] }, - "calamities": [{ "name": "瘴雨", "brief": "瘴雨连绵,田间霉蛀——灵植减产。", "family": { "lingcao": 0.75 }, "effect": { "lingcao": -0.2 } }] } +{ + "worldgen": { "fams": ["吴", "江", "雨"], "regions": ["江南烟雨畔", "吴淞江湾"], "styles": ["风雅世家", "渔隐门"] }, + "calamities": [{ "name": "瘴雨", "brief": "瘴雨连绵,田间霉蛀——灵植减产。", "family": { "lingcao": 0.75 }, "effect": { "lingcao": -0.2 } }] +} ``` **战备解军** data 实样: ```jsonc -{ "forges": [{ "output": "weapon-lingwoon", "name": "灵纹刃", "stones": 700, "lingkuang": 15, "beastcore": 5, "desc": "纹蕴灵光,锋锐无俦。" }], - "worldNum": { "worldSupplyRate": 0.018, "worldDemandRate": 0.014 } } +{ + "forges": [{ "output": "weapon-lingwoon", "name": "灵纹刃", "stones": 700, "lingkuang": 15, "beastcore": 5, "desc": "纹蕴灵光,锋锐无俦。" }], + "worldNum": { "worldSupplyRate": 0.018, "worldDemandRate": 0.014 } +} ``` -> 注意战备解军示范了**配方产物先在 items 立名**(灵纹刃物品表 0.1.35 修复过的正确姿势)。 +> 注意战备解军示范了**配方产物先在 items 立名**(灵纹刃物品表 0.1.35 修复过的正确姿势)——你说它名字里有"灵"有"纹"却不给物品表,它就真的只是"铸器单子上画出的一把虚影"。 --- **一句话总结**:MOD = 一个有 `data` 字段的 JSON。事件管"剧情"、模板管"新家族"、词库管"名字概率"、灾因管"灾年种类"、丹方铸器管"炼丹造兵"、worldNum 管"世界脾性"、内容面七口管"新物品/功法/建筑/职事/志向/阵型/性格"、patch 管"已有表项微调"。装/卸/导出全在设置页,读档重装全自动。去写吧——这个世界等你的素材。 > 0.1.32 玩注:资源循环已是六类生态(资源/材料/丹药/符箓/灵酿/兵器),新物产入池即参与世界呼吸与 NPC 贸易——写材料口别怕世界吃不进去。 -> 0.1.33 闭环注:符箓开战即耗(风符×1.12/山符×1.15+减伤——零 rng 结算),灵酿渡劫伤后自动回气;丹方/铸器产出物 **ALL 必须先在物品表立名**(否则幽灵物品不可见不可卖)。 -> 0.1.34 功法注:四流派效果 crit/guard/trib/secret 全 optional——缺省零行为,金钟罩安全;元素时节共鸣 4 季同频(土系恒应)。MOD 功法别拿这个当"必填"——**只填想要的即可**。 +> 0.1.33 闭环注:符箓开战即耗(风符×1.12/山符×1.15+减伤——零 rng 结算),灵酿渡劫伤后自动回气;丹方/铸器产出物 ALL 必须先在物品表立名(否则幽灵物品不可见不可卖)。 +> 0.1.34 功法注:四流派效果 crit/guard/trib/secret 全 optional——缺省零行为,金钟罩安全;元素时节共鸣 4 季同频(土系恒应)。 > 0.1.35 涤荡注:无存档迁移(游戏未发布——旧档随版本演进失效属预期);`patch` 层按插件归属回滚;validate 覆盖 §12 全部规则。 ⚔️ 本文档随游戏版本更新(0.1.35)。字段若有新增,此处先行。