MOD / Lua API
MOD 製作教程與 Lua API
学习如何建立角色數值 MOD、技能 MOD、基因 BUFF MOD、皮膚 MOD 與受擊体 MOD,并理解 MOD 的管理、優先级與沙箱限制。
1. 快速開始
1.1 MOD 是什么?
MOD 是玩家自制的内容扩展包,可以修改遊戲内生物的數值、技能、皮膚外观和受擊属性。遊戲已内置 DemoCharacterMod 和 DemoSkinsMod 两个範例 MOD,位于遊戲内置 MOD 目錄(见上方路径)中,你可以直接复制和修改它们来快速上手。
1.2 MOD 目錄位置
| 平台 | Mods 目錄路径 |
|---|---|
| Windows (Steam) | Steam 創意工坊自动管理订阅 MOD |
| Windows (本地) | C:\Users\{用户名}\AppData\LocalLow\NEXTINDIE Studio\Mesozoic Dawn\Mods\ |
| Linux Server | 遊戲安装目錄\MesozoicDawn_Data\StreamingAssets\Mods\ |
| Android | 内部存储/Android/data/com.../files/Mods/ |
| iOS | 应用沙盒/Documents/Mods/ |
1.3 MOD 目錄结构
Mods/
├── DemoCharacterMod/ ← 完整範例(數值+技能+受擊体+皮膚)
│ ├── mod.json ← MOD 清单
│ ├── preview.jpg ← 預覽图
│ ├── CharacterAsset/
│ │ └── allo.txt ← 異特龍配置(包含4种MOD類型)
│ └── SkinsAsset/
│ └── Crooked mouth.png ← 皮膚貼圖
│
├── DemoSkinsMod/ ← 纯皮膚 MOD 範例
│ ├── mod.json
│ ├── preview.jpg
│ └── SkinsAsset/
│ ├── allo_deser_allo.txt ← 皮膚脚本
│ └── deser_allo.png ← 皮膚貼圖
│
└── MyFirstMod/ ← 你的 MOD 根目錄
├── mod.json
└── CharacterAsset/
└── allo.txt 1.4 建立 mod.json
{
"Name": "MyFirstMod",
"Author": "你的名字",
"Version": "1.0",
"SupportedVersion": "0.6.*",
"Priority": 0,
"Description": "我的第一个 MOD",
"PreviewImagePath": "preview.jpg",
"Tags": "Character"
} | 字段 | 必填 | 說明 |
|---|---|---|
Name | ✅ | MOD 唯一标识符,建议與資料夾名一致。 |
Author | ✅ | 作者名。 |
Version | ✅ | MOD 版本号。 |
SupportedVersion | ✅ | 兼容的遊戲版本,支持 * 通配符(如 0.6.*)。 |
Priority | ❌ | 执行優先级(默认 0),數值越大越后执行(最终生效)。 |
Description | ❌ | MOD 简短描述。 |
PreviewImagePath | ❌ | 預覽图相对路径(如 preview.jpg)。 |
Tags | ❌ | 標籤(逗号分隔),如 Character,Skin。 |
1.5 遊戲内 MOD 介面一览
在登入介面點擊 MOD 管理 打开 MOD 介面。顶部有三个標籤:本地模组、創意工坊、管理模組,再配合 建立 MOD 與 设置目錄 两个按钮,覆盖 MOD 作者从建立到測試的完整流程。
| 介面 / 按钮 | 作用 |
|---|---|
| 本地模组 | 已預覽到本地的 MOD 列表,可啟用/禁用、删除。进入遊戲时实际載入的就是这里已啟用的 MOD。 |
| 創意工坊 | 仅 Steam 平台。浏览并管理你已订阅的創意工坊 MOD(查看、取消订阅),并显示安装/下载状态。 |
| 管理模組 | 你自己建立的 MOD 草稿工作台。每个 MOD 提供 預覽、匯出、编辑、删除(Steam 平台额外提供 上傳創意工坊)。 |
| 建立 MOD | 新建一个 MOD 草稿,可选择空白 / 皮膚範例 / 角色數值範例 / 基因數值範例模板。 |
| 设置目錄 | 指定一个外部可读写資料夾作为 MOD 根目錄,方便用电脑上的文本编辑器直接改脚本,再一键同步回遊戲。 |
1.6 建立你的 MOD(推薦新手)
遊戲内置了 MOD 建立工具,无需手动建資料夾:
① 登入帳號(建立 MOD 需要登入,MOD 会绑定到你的帳號)。
② MOD 管理 → 點擊 建立 MOD。
③ 填写名称(仅允许字母/数字/下划线/连字符,长度 1~64)、作者、版本、支持版本、描述、標籤,并选择一个模板。
④ 點擊 建立,系统自动生成 MOD 目錄骨架(mod.json 及对应模板的範例脚本資料夾)。
⑤ 建立完成后,MOD 出现在 管理模組 页,此时仍是草稿,尚未进入本地載入列表。
| 模板 | 自动生成的内容 |
|---|---|
| 空白 | 仅 mod.json,从零開始。 |
| 皮膚範例 | SkinsAsset/ 皮膚脚本骨架。 |
| 角色數值範例 | CharacterAsset/ 角色數值脚本骨架。 |
| 基因數值範例 | GeneBuff/ 基因覆写脚本骨架。 |
1.7 编辑與預覽
① 在 管理模組 找到你的 MOD。若已「设置目錄」,MOD 会同步到该外部資料夾,可直接用文本编辑器打开编辑;否则编辑遊戲 MOD 目錄下对应資料夾里的 CharacterAsset/*.txt 等 Lua 脚本、皮膚 PNG,以及 preview.jpg。
② 用行内 编辑 按钮可修改版本、支持版本、描述、標籤等元信息(名称不可改)。
③ 编辑完成后點擊 預覽,把这份草稿推送到 本地模组 載入列表。
1.8 进入遊戲測試(作者開發測試流程)
- 建立:MOD 管理 → 建立 MOD → 选模板 → 建立(生成草稿,见 1.6)。
- 编辑:在管理模組中编辑脚本與元信息(见 1.7)。
- 預覽:點擊 預覽,草稿进入本地模组載入列表。
- 啟用:切到 本地模组 页,确认 MOD 状态为「啟用」(绿色),且「支持版本」为绿色(红色表示與目前遊戲版本不兼容,需修改
SupportedVersion)。 - 測試:进入单机或建立房间,修改的數值/技能/皮膚即刻生效。
- 迭代:回到管理模組改脚本 → 建立本地主機房間,自动用最新草稿刷新預覽副本 → 重新进入对局验证。首次开启同步預覽后,无需重啟遊戲或再次點擊同步預覽。
- 分发:满意后用 匯出 生成
.mod檔案分享给他人;Steam 平台还可点 上傳創意工坊 公開發布。
1.9 同步預覽模式(開發測試)
管理模組中的 同步預覽 会为你的草稿建立一个独立的運行時副本,并把它登记到本地載入列表。草稿原始檔案仍保留在管理目錄中;同步預覽不是發布,也不会把 MOD 上傳到創意工坊。
1.10 匯出 .mod(分享與安裝)
匯出会将管理模組中目前的工作副本打包成 .mod 压缩包,并打开系统儲存位置选择器。包内以 mod.json 所在目錄为根,包含脚本、图片和其他 MOD 檔案;匯出不会开启預覽、不会修改草稿,也不会自动公開或上傳創意工坊。
- 作者:在管理模組中點擊 匯出,在系统檔案选择器中儲存
.mod檔案,然后将该檔案发送给測試者或玩家。 - 接收者:在 本地模组 页點擊导入模组,选择收到的
.mod(也支持.zip),再确认它已出现在本地載入列表并啟用。 - 联机:加入或建立需要 MOD 的房间前,所有参與者应使用相同内容、版本和啟用状态的 MOD;匯出包本身不替代創意工坊發布。
2. 角色數值 MOD
在 CharacterAsset/ 目錄下建立 .txt 檔案,定义 CharacterAsset 表来修改遊戲内生物的各项属性。未填写的字段将保持遊戲原始设定。下方是遊戲自带 DemoCharacterMod 中 allo.txt 的完整配置,展示了所有可修改字段。
2.1 完整範例(来自 DemoCharacterMod 的 allo.txt)
-- 修改異特龍的完整属性(*不可删除以下项目)
CharacterAsset = {
name = "異特龍", -- 角色名称
enable = true, -- 是否啟用角色
jump = false, -- 是否允许跳跃(无匹配动画则报错)
race = "allo", -- 種族標籤(*必填,唯一匹配键)
ropoda = 0, -- 巢穴類型(-1=无, 0=兽脚类, 1=蜥脚类, 2=鸟臀目)
ropode = 0, -- 蛋類型(-1=无, 0=兽脚类, 1=蜥脚类, 2=鸟臀目)
volume = 2, -- 体型 0~5(轻→超级)
rank = 7, -- 星级 0~12(S1~SS)
branch = 3, -- 属种科目 0~25
habit = 0, -- 习性(0=陆生, 1=亲水, 2=海爬, 3=水生, 4=两栖, 5=飞行)
type = 0, -- 种类(0=食肉龍, 1=食草龍, 2=水生, 3=节肢, 4=哺乳, 5=飞行)
taste = 0, -- 食性(0=食肉, 1=花草, 2=树叶, 3=杂食)
spawn = 0, -- 繁殖方式(0=卵生, 1=胎生)
health = 26503.0, -- 生命值
hunger = 12227.0, -- 饥饿值
water = 3128.0, -- 水分
oxygen = 474.0, -- 氧气
stamina = 100.0, -- 耐力
attack = 2802.0, -- 攻擊力
defend = 779.0, -- 防御力
pen = 5, -- 穿透等级 0~10
ten = 3, -- 韧性等级 0~10
restore = 266.0, -- 恢复能力
consume = 100.0, -- 巡航消耗
weight = 3600.0, -- 体重(公斤)
speed = 27.01, -- 行走速度(km/h)
swim = 13.5, -- 游泳速度(km/h)
flying = 0.0, -- 飞行速度(km/h)
runSpeed = 54.01, -- 奔跑速度(km/h)
turnSpeed = 0.61, -- 转向灵活度(度/秒)
growtime = 1560.0, -- 成长到成年所需时间(秒)
ovumtime = 1080.0, -- 体内卵形成间隔(秒)
hatching = 2210.0, -- 蛋孵化时间(秒)
safe = 1800.0, -- 幼体保护期(秒)
skill = "LifeDrain,3;", -- 出生自带 EX 技能
gene = "", -- 出生自带基因
} 2.2 分类與识别
| 字段 | 類型 | 說明 |
|---|---|---|
race | 字符串 | 必须填写。種族標籤(如 allo、rex、sauro)。 |
name | 字符串 | 角色显示名称。 |
enable | 布尔 | 是否允许在选择介面使用(true/false)。 |
jump | 布尔 | 是否允许跳跃(需匹配动画,否则报错)。 |
volume | 整数 | 体型分类 0~5(轻→超级)。 |
rank | 整数 | 星级 0~12(对应 S1~SS 评级)。 |
branch | 整数 | 属种科目 0~25。 |
habit | 整数 | 习性 0~5(0=陆生, 1=亲水, 2=海爬, 3=水生, 4=两栖, 5=飞行)。 |
type | 整数 | 种类 0~5(0=食肉龍, 1=食草龍, 2=水生, 3=节肢, 4=哺乳, 5=飞行)。 |
taste | 整数 | 食性 0~3(0=食肉, 1=花草, 2=树叶, 3=杂食)。 |
spawn | 整数 | 繁殖方式 0~1(0=卵生, 1=胎生)。 |
ropoda | 整数 | 巢穴類型 -1~2(-1=无, 0=兽脚类, 1=蜥脚类, 2=鸟臀目)。 |
ropode | 整数 | 蛋類型 -1~2(-1=无, 0=兽脚类, 1=蜥脚类, 2=鸟臀目)。 |
2.3 生存與戰鬥
| 字段 | 類型 | 說明 |
|---|---|---|
health | 數值 | 最大生命值。 |
stamina | 數值 | 最大耐力值。 |
hunger | 數值 | 最大饥饿值。 |
water | 數值 | 最大水分值。 |
oxygen | 數值 | 最大氧气值。 |
attack | 數值 | 基础攻擊力。 |
defend | 數值 | 基础防御力。 |
pen | 整数 | 穿透等级 0~10。 |
ten | 整数 | 韧性等级 0~10。 |
restore | 數值 | 自然恢复能力。 |
consume | 數值 | 巡航消耗值。 |
weight | 數值 | 体重(公斤)。 |
force | 數值 | 物理力量 0~10000。 |
2.4 移动速度(km/h)
| 字段 | 類型 | 說明 |
|---|---|---|
speed | 數值 | 行走速度。 |
runSpeed | 數值 | 奔跑速度。 |
swim | 數值 | 游泳速度(不会游泳填 0)。 |
flying | 數值 | 飞行速度(不会飞填 0)。 |
turnSpeed | 數值 | 转向灵活度(度/秒)。 |
2.5 时间参数
| 字段 | 類型 | 說明 |
|---|---|---|
growtime | 數值 | 成长到成年所需时间(秒)。 |
ovumtime | 數值 | 体内卵形成间隔(秒)。 |
hatching | 數值 | 蛋孵化时间(秒)。 |
safe | 數值 | 幼体保护期时长(秒)。 |
2.6 器官效率(0.0 ~ 1.0)
| 字段 | 類型 | 說明 |
|---|---|---|
muscle | 數值 | 肌肉效率。影响攻擊耐力恢复。 |
stomach | 數值 | 肠胃效率。影响食物/水分消耗倍率。 |
lung | 數值 | 肺部效率。影响氧气产出。 |
heart | 數值 | 心脏效率。影响生命恢复速度。 |
breed | 數值 | 繁殖效率。影响卵子生成速率。 |
2.7 身体参数與天赋
| 字段 | 類型 | 說明 |
|---|---|---|
length | 數值 | 身体长度(米)0.1~100。 |
width | 數值 | 身体宽度(米)0.1~100。 |
height | 數值 | 身体高度(米)0.1~100。 |
tempMin | 數值 | 最低适应温度 (°C)。 |
tempMax | 數值 | 最高适应温度 (°C)。 |
humidMin | 數值 | 最低适应湿度 (%)。 |
humidMax | 數值 | 最高适应湿度 (%)。 |
skill | 字符串 | 出生自带 EX 技能。格式:"基因名,等级;"。 |
gene | 字符串 | 出生自带基因。格式同上。 |
3. 技能 MOD
通过 CharacterSkill 表修改角色的攻擊方式。每个技能以 key-value 形式定义(key 可任意命名)。可與 CharacterAsset 放在同一个 .txt 檔案中。
3.1 完整範例(来自 DemoCharacterMod)
CharacterSkill = {
attack1 = {
Race = "allo", -- *必填* 種族標籤
AttackOrder = 1, -- 攻擊序号(1=嘴1, 2=嘴2...)
AttackType = 0, -- 攻擊方式 0~7(见下方枚举)
DamageMode = 0, -- 傷害類型 0~2(见下方枚举)
Area = nil, -- 可用区域 nil=不限, {0,1}=陆地+浅水
AttackRange = 1.0, -- 攻擊碰撞半径(米)
Modify = 2.0, -- 傷害修正系数(1=无修正)
UseStamina = 0.01, -- 耐力消耗百分比(0=系统默认)
TriggerSkill = "Scars,2;", -- 命中时触发技能(格式: "名称,等级;")
},
attack2 = {
Race = "allo",
AttackOrder = 2,
AttackType = 1, -- 尾巴
DamageMode = 1, -- AOE 範圍傷害
AttackRange = 3.0,
Modify = 0.8,
UseStamina = 0.03,
TriggerSkill = "Blood,2;",
},
} 3.2 AttackType(攻擊方式)枚举
| 值 | 名称 | 說明 |
|---|---|---|
| 0 | BITE / 嘴巴 | 撕咬类攻擊 |
| 1 | TAIL / 尾巴 | 甩尾/扫尾 |
| 2 | STEP / 践踏 | 踩踏/践踏 |
| 3 | HAND / 甩手 | 前肢攻擊 |
| 4 | BODY / 身体 | 身体冲撞 |
| 5 | HEAD / 頭部 | 頭部撞击 |
| 6 | FOOT / 腿部 | 踢击 |
| 7 | DASH / 冲撞 | 冲刺撞击 |
3.3 DamageMode(傷害類型)枚举
| 值 | 名称 | 說明 |
|---|---|---|
| 0 | 单体 | 单体攻擊 |
| 1 | AOE / 範圍 | 範圍攻擊(首个有效目标不衰减,后续目标依次衰减) |
| 2 | 蓄力 | 蓄力攻擊(需绑定蓄力动画) |
3.4 Area(可用区域)枚举
| 值 | 名称 |
|---|---|
| 0 | 陆地 |
| 1 | 浅水 |
| 2 | 深水 |
| 3 | 天空 |
4. 受擊体 MOD(Hitbox)
通过 CharacterHitGroup 表修改角色各身体部位的 装甲渗透率 和 傷害倍率,实现弱点强化或护甲增强。
4.1 身体部位常量
| 常量 | 值 | 部位 |
|---|---|---|
BODY_HEAD | 0 | 頭部(高渗透弱点) |
BODY_BODY | 2 | 躯干(装甲保护) |
BODY_TAIL | 3 | 尾巴 |
BODY_BELLY | 7 | 腹部(致命弱点) |
4.2 範例(来自 DemoCharacterMod)
CharacterHitGroup = {
head = {
Race = "allo",
PartType = BODY_HEAD,
PenetrationRate = 0.6, -- 渗透率 0~1(越大越易被穿透)
DamageMultiplier = 1.5, -- 傷害倍率 0.5~2(>1 受伤更重)
},
body = {
Race = "allo",
PartType = BODY_BODY,
PenetrationRate = 0.05, -- 几乎不穿透
DamageMultiplier = 0.8, -- 减伤 20%
},
belly = {
Race = "allo",
PartType = BODY_BELLY, -- 腹部(值=7)
PenetrationRate = 0.9, -- 极高渗透
DamageMultiplier = 1.8, -- 大幅提升受擊傷害
},
} 5. 基因 BUFF MOD
基因 BUFF MOD 通过全局表 CharacterGeneBuff 覆写遊戲中已有基因/技能/BUFF 的數值與配置。脚本與 CharacterAsset 一样是 XLua(.txt),可與它写在同一个檔案或独立的 GeneBuff/ 子目錄中。
5.1 配置结构(CharacterGeneBuff)
CharacterGeneBuff = {
-- 键 = 要覆写的现有基因 tag(TAG 从「基因/技能列表」页查询)
Bleed = {
Repeat = "COVER", -- 可选:覆盖规则
Upgrade = "EXP", -- 可选:升级方式
With = "", -- 可选:附加效果 DSL,格式 tag,等级;
Copes = "", -- 可选:克制对象 tag
Effects = { -- *必填* 每级數值表(覆写后原每级數值被整体替换)
{ Level = 1, Probability = 0.55, Effect = 0.03, Duration = 5 },
{ Level = 2, Probability = 0.65, Effect = 0.05, Duration = 7 },
}
}
} 5.2 可修改的顶层字段
| 字段 | 類型 | 含义 | 必填 |
|---|---|---|---|
Repeat | 枚举 | 覆盖规则(见 5.4) | 可选 |
Upgrade | 枚举 | 升级方式(见 5.4) | 可选 |
With | string | 附加效果 DSL tag,等级; | 可选 |
Copes | string | 克制对象 tag | 可选 |
Effects | 数组 | 每级數值表(见 5.3) | 必填 |
5.3 Effects 每级數值字段
| 字段 | 類型 | 含义 | 範圍 |
|---|---|---|---|
Level | int | 等级号(≤0 回退为下标) | ≥1 |
Probability | float | 触发概率 | 0~1 |
Chance | float | 合成概率 | 0~1 |
Range | int | 效果作用範圍 | 0~100 |
Limit | int | 最多作用玩家数 | 0~10 |
Effect | float | 核心强度數值 | 由效果類型决定 |
Count | int | 次数(配合 TRIGGER) | — |
Skillful | float | 升到本级所需熟练度 | — |
Duration | float | 持续时间(克制基因时=减少 DEBUFF 时间百分比) | -99999~99999 |
Forever | bool | 本级 BUFF 是否永久 | — |
IsEffectFixed / IsDurationFixed | bool | 數值/时间是否为固定值(影响描述展示) | — |
5.4 可用枚举
| 枚举 | 可用值 |
|---|---|
Upgrade 升级方式 | NONE(禁止升级) / TIME(按存活时间积累熟练度) / EXP(击杀积累熟练度) / ALL(全部来源) |
Repeat 覆盖规则 | ONE(拒绝重复) / ADD(可叠加) / COVER(覆盖刷新) |
5.5 完整範例(内置 DemoCharacterMod/GeneBuff/gene_buff.txt)
CharacterGeneBuff = {
-- ① 覆写现有基因 Metabolism(新陈代谢)的每级數值
Metabolism = {
Effects = {
{ Level = 1, Effect = 0.12, Skillful = 0 },
{ Level = 2, Effect = 0.18, Skillful = 100 },
}
},
-- ② 覆写现有技能基因 Bleed(流血)的触发概率、數值與持续时间
Bleed = {
Effects = {
{ Level = 1, Probability = 0.55, Effect = 0.03, Duration = 5 },
{ Level = 2, Probability = 0.65, Effect = 0.05, Duration = 7 },
}
}
} 5.6 让角色出生自带基因
-- 在角色的 CharacterAsset 脚本里用 gene 字段让角色出生自带基因,格式:基因名,等级;
CharacterAsset = {
race = "allo",
gene = "Metabolism,2;",
} 5.7 載入與约束
- 覆写即生效:覆写成功后,出生 / 触发 / 执行全链路都会读取覆写后的數值。
- 引用强校验:
With必须tag,等级格式、不能自引用、引用的 tag 必须存在、等级不越界;Copes不能自引用且必须存在。任一不通过则拒绝生效(不会静默出错)。 - 无有效
Effects→ 该条覆写失败。 - 会话级还原:退房 / 禁用 / 重置 MOD 时自动还原被覆写的基因,避免跨对局残留。
- 双端同构:伺服器端须经
GAME_MODS載入同一份 MOD,哈希一致才能加入;/modReload支持热重新載入基因數值。
6. 皮膚 MOD
通过 CharacterSkin 表为角色添加自定义皮膚。每个 .txt 檔案定义一个皮膚。貼圖檔案放在 MOD 目錄下的 SkinsAsset/ 資料夾中。参考遊戲自带的 DemoSkinsMod 查看完整範例。
6.1 皮膚脚本
CharacterSkin = {
Race = "allo", -- *必填* 種族標籤
Name = "Crooked mouth", -- *必填* 皮膚唯一名称(用于去重)
Path = "SkinsAsset/Crooked mouth.png", -- *必填* 貼圖路径(相对 MOD 根目錄)
} 6.2 貼圖要求
- 格式:PNG 或 JPG。
- 分辨率:建议與原始貼圖一致(通常 2048×2048 或 4096×4096)。
- 路径必须相对于 MOD 根目錄,不要使用绝对路径。
6.3 多皮膚目錄範例
MySkinMod/
├── mod.json
├── preview.jpg
└── SkinsAsset/
├── allo_crooked.txt ← CharacterSkin { Race="allo", Name="Crooked mouth", ... }
├── crooked_allo.png ← 貼圖檔案
├── rex_volcano.txt ← 同一 MOD 可包含多个種族皮膚
└── volcano_rex.png 7. 高级:管理與分发
7.1 優先级系统
当多个 MOD 修改同一種族的同一字段时,Priority 數值越大,越后执行,最终生效。默认值为 0。同 Priority 的 MOD 按字母序执行。
7.2 Lua 沙箱安全
os、io:禁止系统命令與檔案读写。dofile、loadfile、package:禁止执行任意本地檔案或載入动态库。
7.3 打包为 .mod 檔案
将 MOD 資料夾内所有檔案压缩为 ZIP,然后将扩展名改为 .mod。确保 mod.json 在压缩包根目錄。.mod 和 .zip 均可被遊戲识别。
7.4 伺服器端 MOD
伺服器端通过環境变量 GAME_MODS 指定要載入的 MOD(逗号分隔):GAME_MODS=DemoCharacterMod,MySkinMod
伺服器端指定的 MOD 客户端必须全部安装并啟用才能加入。客户端额外啟用的 MOD 不会在该服务器生效。管理員可使用 /modReload 热重新載入 MOD 配置。