MOD / Lua API

MOD 製作教程與 Lua API

学习如何建立角色數值 MOD、技能 MOD、基因 BUFF MOD、皮膚 MOD 與受擊体 MOD,并理解 MOD 的管理、優先级與沙箱限制。

01

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 目錄结构

Text
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

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 进入遊戲測試(作者開發測試流程)

  1. 建立:MOD 管理 → 建立 MOD → 选模板 → 建立(生成草稿,见 1.6)。
  2. 编辑:在管理模組中编辑脚本與元信息(见 1.7)。
  3. 預覽:點擊 預覽,草稿进入本地模组載入列表。
  4. 啟用:切到 本地模组 页,确认 MOD 状态为「啟用」(绿色),且「支持版本」为绿色(红色表示與目前遊戲版本不兼容,需修改 SupportedVersion)。
  5. 測試:进入单机或建立房间,修改的數值/技能/皮膚即刻生效。
  6. 迭代:回到管理模組改脚本 → 建立本地主機房間,自动用最新草稿刷新預覽副本 → 重新进入对局验证。首次开启同步預覽后,无需重啟遊戲或再次點擊同步預覽。
  7. 分发:满意后用 匯出 生成 .mod 檔案分享给他人;Steam 平台还可点 上傳創意工坊 公開發布。

1.9 同步預覽模式(開發測試)

管理模組中的 同步預覽 会为你的草稿建立一个独立的運行時副本,并把它登记到本地載入列表。草稿原始檔案仍保留在管理目錄中;同步預覽不是發布,也不会把 MOD 上傳到創意工坊。

1.10 匯出 .mod(分享與安裝)

匯出会将管理模組中目前的工作副本打包成 .mod 压缩包,并打开系统儲存位置选择器。包内以 mod.json 所在目錄为根,包含脚本、图片和其他 MOD 檔案;匯出不会开启預覽、不会修改草稿,也不会自动公開或上傳創意工坊。

  1. 作者:在管理模組中點擊 匯出,在系统檔案选择器中儲存 .mod 檔案,然后将该檔案发送给測試者或玩家。
  2. 接收者:在 本地模组 页點擊导入模组,选择收到的 .mod(也支持 .zip),再确认它已出现在本地載入列表并啟用。
  3. 联机:加入或建立需要 MOD 的房间前,所有参與者应使用相同内容、版本和啟用状态的 MOD;匯出包本身不替代創意工坊發布。
02

2. 角色數值 MOD

在 CharacterAsset/ 目錄下建立 .txt 檔案,定义 CharacterAsset 表来修改遊戲内生物的各项属性。未填写的字段将保持遊戲原始设定。下方是遊戲自带 DemoCharacterMod 中 allo.txt 的完整配置,展示了所有可修改字段。

2.1 完整範例(来自 DemoCharacterMod 的 allo.txt)

Lua
-- 修改異特龍的完整属性(*不可删除以下项目)
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字符串出生自带基因。格式同上。
03

3. 技能 MOD

通过 CharacterSkill 表修改角色的攻擊方式。每个技能以 key-value 形式定义(key 可任意命名)。可與 CharacterAsset 放在同一个 .txt 檔案中。

3.1 完整範例(来自 DemoCharacterMod)

Lua
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(攻擊方式)枚举

值名称說明
0BITE / 嘴巴撕咬类攻擊
1TAIL / 尾巴甩尾/扫尾
2STEP / 践踏踩踏/践踏
3HAND / 甩手前肢攻擊
4BODY / 身体身体冲撞
5HEAD / 頭部頭部撞击
6FOOT / 腿部踢击
7DASH / 冲撞冲刺撞击

3.3 DamageMode(傷害類型)枚举

值名称說明
0单体单体攻擊
1AOE / 範圍範圍攻擊(首个有效目标不衰减,后续目标依次衰减)
2蓄力蓄力攻擊(需绑定蓄力动画)

3.4 Area(可用区域)枚举

值名称
0陆地
1浅水
2深水
3天空
04

4. 受擊体 MOD(Hitbox)

通过 CharacterHitGroup 表修改角色各身体部位的 装甲渗透率 和 傷害倍率,实现弱点强化或护甲增强。

4.1 身体部位常量

常量值部位
BODY_HEAD0頭部(高渗透弱点)
BODY_BODY2躯干(装甲保护)
BODY_TAIL3尾巴
BODY_BELLY7腹部(致命弱点)

4.2 範例(来自 DemoCharacterMod)

Lua
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,    -- 大幅提升受擊傷害
    },
}
05

5. 基因 BUFF MOD

基因 BUFF MOD 通过全局表 CharacterGeneBuff 覆写遊戲中已有基因/技能/BUFF 的數值與配置。脚本與 CharacterAsset 一样是 XLua(.txt),可與它写在同一个檔案或独立的 GeneBuff/ 子目錄中。

5.1 配置结构(CharacterGeneBuff)

Lua
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)可选
Withstring附加效果 DSL tag,等级;可选
Copesstring克制对象 tag可选
Effects数组每级數值表(见 5.3)必填

5.3 Effects 每级數值字段

字段類型含义範圍
Levelint等级号(≤0 回退为下标)≥1
Probabilityfloat触发概率0~1
Chancefloat合成概率0~1
Rangeint效果作用範圍0~100
Limitint最多作用玩家数0~10
Effectfloat核心强度數值由效果類型决定
Countint次数(配合 TRIGGER)—
Skillfulfloat升到本级所需熟练度—
Durationfloat持续时间(克制基因时=减少 DEBUFF 时间百分比)-99999~99999
Foreverbool本级 BUFF 是否永久—
IsEffectFixed / IsDurationFixedbool數值/时间是否为固定值(影响描述展示)—

5.4 可用枚举

枚举可用值
Upgrade 升级方式NONE(禁止升级) / TIME(按存活时间积累熟练度) / EXP(击杀积累熟练度) / ALL(全部来源)
Repeat 覆盖规则ONE(拒绝重复) / ADD(可叠加) / COVER(覆盖刷新)

5.5 完整範例(内置 DemoCharacterMod/GeneBuff/gene_buff.txt)

Lua
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 让角色出生自带基因

Lua
-- 在角色的 CharacterAsset 脚本里用 gene 字段让角色出生自带基因,格式:基因名,等级;
CharacterAsset = {
    race = "allo",
    gene = "Metabolism,2;",
}

5.7 載入與约束

  • 覆写即生效:覆写成功后,出生 / 触发 / 执行全链路都会读取覆写后的數值。
  • 引用强校验:With 必须 tag,等级 格式、不能自引用、引用的 tag 必须存在、等级不越界;Copes 不能自引用且必须存在。任一不通过则拒绝生效(不会静默出错)。
  • 无有效 Effects → 该条覆写失败。
  • 会话级还原:退房 / 禁用 / 重置 MOD 时自动还原被覆写的基因,避免跨对局残留。
  • 双端同构:伺服器端须经 GAME_MODS 載入同一份 MOD,哈希一致才能加入;/modReload 支持热重新載入基因數值。
06

6. 皮膚 MOD

通过 CharacterSkin 表为角色添加自定义皮膚。每个 .txt 檔案定义一个皮膚。貼圖檔案放在 MOD 目錄下的 SkinsAsset/ 資料夾中。参考遊戲自带的 DemoSkinsMod 查看完整範例。

6.1 皮膚脚本

Lua
CharacterSkin = {
    Race = "allo",                              -- *必填* 種族標籤
    Name = "Crooked mouth",                      -- *必填* 皮膚唯一名称(用于去重)
    Path = "SkinsAsset/Crooked mouth.png",       -- *必填* 貼圖路径(相对 MOD 根目錄)
}

6.2 貼圖要求

  • 格式:PNG 或 JPG。
  • 分辨率:建议與原始貼圖一致(通常 2048×2048 或 4096×4096)。
  • 路径必须相对于 MOD 根目錄,不要使用绝对路径。

6.3 多皮膚目錄範例

Text
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
07

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 配置。