MOD / Lua API

MOD 製作教程與 Lua API

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

01

1. 快速開始

1.1 MOD 是什么?

MOD 是玩家自制的内容扩展包,可以修改遊戲内生物的數值、技能、皮膚外观和受擊属性。遊戲已内置 DemoCharacterModDemoSkinsMod 两个範例 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"
}
字段必填說明
NameMOD 唯一标识符,建议與資料夾名一致。
Author作者名。
VersionMOD 版本号。
SupportedVersion兼容的遊戲版本,支持 * 通配符(如 0.6.*)。
Priority执行優先级(默认 0),數值越大越后执行(最终生效)。
DescriptionMOD 简短描述。
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 表来修改遊戲内生物的各项属性。未填写的字段将保持遊戲原始设定。下方是遊戲自带 DemoCharacterModallo.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 沙箱安全

  • osio:禁止系统命令與檔案读写。
  • dofileloadfilepackage:禁止执行任意本地檔案或載入动态库。

7.3 打包为 .mod 檔案

将 MOD 資料夾内所有檔案压缩为 ZIP,然后将扩展名改为 .mod。确保 mod.json 在压缩包根目錄。.mod.zip 均可被遊戲识别。

7.4 伺服器端 MOD

伺服器端通过環境变量 GAME_MODS 指定要載入的 MOD(逗号分隔):
GAME_MODS=DemoCharacterMod,MySkinMod
伺服器端指定的 MOD 客户端必须全部安装并啟用才能加入。客户端额外啟用的 MOD 不会在该服务器生效。管理員可使用 /modReload 热重新載入 MOD 配置。