跳到主要内容

Next Patch Mod 制作文档

1 什么是 Patch Mod

Patch Mod 是对需要 Next 插件 Mod(简称 Next) 进行加载的 mod 的称呼,以便与需要 BepinEx 加载的 Mod 进行区分。(Next 本身需要 BepinEx 进行加载)

2 新建 Patch Mod

觅长生/本地Mod测试/ 文件夹下,新建文件夹。\ 文件夹内目录结构如下

Mod 目录结构

V2 版本

plugins
└── Next
└── mod测试 PatchMod文件夹
├── Assets Mod资源文件夹
├── Config Mod配置文件夹
│ └── modConfig.json Mod描述文件
├── Data 游戏数据文件夹
├── Lua Lua数据文件夹
└── NData Next数据文件夹

Next Patch 的文件夹以 mod 开头,如 mod测试\ 只有以"mod"开头的文件夹会被加载。

3 Mod 描述文件

Mod 描述文件是用于描述 mod 名称、作者、版本与介绍。

该文件本身不影响 mod 加载,但是完善的 mod 描述文件有利于留下 mod 作者的信息,以及进行版本管理等。

3.1 创建描述文件

新建 json 文件,保存至 mod测试/Config/modConfig.json 的路径中

文件结构:

modConfig.json

{
"Name" : "测试Mod",
"Author" : "佚名",
"Version" : "1.0.0",
"Description" : "测试用的Mod。",
"Settings" : [ ... ]
}

详见描述文件设置

4 数据 Patch

数据 Patch 是指对游戏原版数据进行修改与增加。(目前未提供删除功能)

4.1 数据类型

当 Next 安装后,可以点击 Next 面板上的【导出 Base】,自动导出 Data 文件。

点击面板上的【打开导出文件夹】按钮,即可找到导出的 Data 文件

导出的游戏数据位于 ..\OutPut\Data 根据 Next 的安装位置,有所不同

Data 文件夹里的文件,大致分为三类:

  1. 普通 Json 数据文件
    该类文件格式如下

    {
    "1": {
    //......
    },
    "2": {
    //......
    }
    }

    对这类文件制作补丁时,只需要在 Data 文件夹里创建同名 json 文件,然后进行修改/新增数据即可。如:

    {
    "2": {
    //......
    },
    "10": {
    //......
    }
    }

    与源数据 ID 一致的数据会进行替换,其余的数据则会新增到原版数据末尾

  2. 字典 json 数据文件
    该类文件是放到文件夹里的特殊 json 文件,其文件名构成了数据的 ID,如ItemJsonData/文件夹内的文件:
    1.json

    {
    "id": 1,
    "ItemIcon": 0,
    "maxNum": 1,
    "name": "锈渍铁剑",
    "TuJianType": 0,
    "ShopType": 99,
    "ItemFlag": [1, 101],
    "WuWeiType": 0,
    "ShuXingType": 0,
    "type": 0,
    "quality": 1,
    "typePinJie": 1,
    "StuTime": 0,
    "seid": [2],
    "vagueType": 0,
    "price": 350,
    "desc": "主动:下一次造成的伤害提升25%(血量低于10时才能使用)",
    "desc2": "剑身满是锈渍,看起来连凡人用的武器都不如,魏无极的残魂便寄居在其中。",
    "CanSale": 1,
    "DanDu": 0,
    "CanUse": 0,
    "NPCCanUse": 0,
    "yaoZhi1": 0,
    "yaoZhi2": 0,
    "yaoZhi3": 0,
    "wuDao": []
    }

    要修改此类文件时,将该文件一份至 mod 文件夹里的Data/ItemJsonData文件夹,然后修改其数据即可。
    如若需要新增数据,则将数据名称命名为新的数字,并修改数据内的 ID 与其一致即可。

  3. SeidJson 数据
    该类文件与类型 1 一样,但是其是放置在文件夹类的。目前版本以SeidJsonData结尾的文件夹皆属于该类。
    BuffSeidJsonData/1.json 文件,呈如下结构:

    {
    "1": {
    "id": 1,
    "value1": 1
    },
    "2": {
    "id": 2,
    "value1": -1
    }
    //......
    }

    需要在该类文件里修改或新增数据时,参考类型 1 的文件,在 mod 文件夹里新建 BuffSeidJsonData/1.json

    {
    "1": {
    "id": 1,
    "value1": 10
    },
    "666": {
    "id": 666,
    "value1": 1
    }
    }

    与源数据 ID 一致的数据会进行替换,其余的数据则会新增到原版数据末尾
    注:该类文件一般为游戏内功能函数的配置文件,例如 buff 数据里配置的 seid 会在 buffSeid 文件夹里寻找对应的 json 文件,然后在该文件内寻找该 buffID 对应的数据。

4.2 增量修改

Next 0.3.0 版本新增了增量修改的功能

当对源数据进行修改时,可以填写需要修改的部分。这样其他内容则不会被覆盖

ItemJsonData/1.json

{
"id": 1,
"ItemIcon": 0,
"maxNum": 1,
"name": "锈渍铁剑",
"TuJianType": 0,
"ShopType": 99,
"ItemFlag": [1, 101],
"WuWeiType": 0,
"ShuXingType": 0,
"type": 0,
"quality": 1,
"typePinJie": 1,
"StuTime": 0,
"seid": [2],
"vagueType": 0,
"price": 350,
"desc": "主动:下一次造成的伤害提升25%(血量低于10时才能使用)",
"desc2": "剑身满是锈渍,看起来连凡人用的武器都不如,魏无极的残魂便寄居在其中。",
"CanSale": 1,
"DanDu": 0,
"CanUse": 0,
"NPCCanUse": 0,
"yaoZhi1": 0,
"yaoZhi2": 0,
"yaoZhi3": 0,
"wuDao": []
}

制作增量补丁时,可以写成如下格式:

{
"name": "魏老之剑",
"desc2": "这就是传说中的修仙老爷爷,魏无极的残魂便寄居在其中。"
}

这样游戏里的最终数据便会变为如下:

{
"id": 1,
"ItemIcon": 0,
"maxNum": 1,
"name": "魏老之剑",
"TuJianType": 0,
"ShopType": 99,
"ItemFlag": [1, 101],
"WuWeiType": 0,
"ShuXingType": 0,
"type": 0,
"quality": 1,
"typePinJie": 1,
"StuTime": 0,
"seid": [2],
"vagueType": 0,
"price": 350,
"desc": "主动:下一次造成的伤害提升25%(血量低于10时才能使用)",
"desc2": "这就是传说中的修仙老爷爷,魏无极的残魂便寄居在其中。",
"CanSale": 1,
"DanDu": 0,
"CanUse": 0,
"NPCCanUse": 0,
"yaoZhi1": 0,
"yaoZhi2": 0,
"yaoZhi3": 0,
"wuDao": []
}

增量修改可以避免游戏本体更新而导致需要重新适配数据文件,并且多个 Mod 之间也可以相互以增量修改的形式相互覆盖。

4.3 数据含义参考

此处可参考官方的 Excel 开源文件

或参考 3DM 一位大佬的此篇帖子

5 剧情文件

5.1 介绍

剧情文件是 Next 添加的剧情配置文件,用于向游戏内添加剧情。由于该功能由 Next 提供运行框架与扩展方法,因此能实现的功能较为有限。有更多的需求欢迎提 Issue。

5.2 创建剧情文件

在 Mod 文件夹里新建 NData/DialogEvent 文件夹,随后在该文件夹里新建任意名称的 json 文件,文件结构如下:

example.json

[
{
"id": "测试1",
"character": {
"旁白": 0,
"主角": 1,
"倪旭欣": 609
},
"dialog": ["主角#武当如何?", "倪旭欣#武当天下第一!", "旁白#你怎么看?"],
"option": ["天下第一!#测试2", "天下第一鸭!"]
},
{
"id": "测试2",
"character": {
"主角": 1
},
"dialog": ["主角#确实。"],
"option": []
}
]

对象解释: |字段|类型|说明| |-|-|-| |id|字符串|唯一 ID| |character|字典
字符串-数字 键值对|储存预定义的角色 ID
预定义 ID 只能用于重要 NPC 的对话头像显示
特殊 ID:
旁白:0
主角:1
更多的预定义 ID 可以在文件AvatarJsonData.json里查询| |dialog|字符串列表|对话指令列表,详见 剧情对话指令| |option|字符串列表|选项指令列表,详见 选项指令|

6 触发器文件

6.1 介绍

触发器文件是 Next 添加的触发器配置文件,用于为剧情提供触发方式。由于触发器由 Next 提供对游戏原本功能的接口检测,因此能实现的功能较为有限。有更多的需求欢迎提 Issue。

6.2 触发器文件

在 Mod 文件夹里新建 NData/DialogTrigger 文件夹,随后在该文件夹里新建任意名称的 json 文件,文件结构如下:

example.json

[
{
"id": "测试触发器",
"type": "交谈",
"condition": "roleBindID==609",
"triggerEvent": "测试1",
// 默认true
"default": true,
// 默认false
"once": false
}
]

对象解释: |字段|类型|说明| |-|-|-| |id|字符串|唯一 ID| |type|字符串|触发器类型,参考触发器类型| |condition|字符串|检测指令,参考运行时脚本| |triggerEvent|字符串|触发事件,使用事件 ID
参考本篇 5 剧情文件| |default|布尔类型|初始状态,false 为关闭,true 为开启,关闭的触发器不会参与触发判断| |once|布尔类型|是否触发后自动关闭,默认 false|

7 添加资源

Next 为游戏引入了添加自定义资源的功能

7.1 介绍

在 Mod 文件夹里新建 Assets 文件夹,将图标按指定的目录放入其中,即可在游戏内读取出来

7.2 详情

该部分可参考 添加资源

8 自定义捏脸数据

8.1 介绍

从 Next 0.3.5 版本开始,添加了自定义捏脸数据的功能。 通过自定义捏脸数据,可以替换或指定重要 NPC 的捏脸立绘。 也可以用于SetCustomFace指令更改角色的立绘。

注:定义的立绘文件需要新开档生效,或使用SetCustomFace指令强制刷新立绘,如SetCustomFace*614#614可强制刷新林沐心的立绘。

8.2 捏脸数据文件

在 Mod 文件夹里新建 NData/CustomFace 文件夹,随后在该文件夹里新建任意名称的 json 文件,文件结构如下:

{
"ID": 618,
"RandomInfos": {
"head": 99,
"eyes": 99,
"mouth": 99,
"nose": 99,
"eyebrow": 99,
"hair": 99,
"feature": 99,
"yanying": 99,
"a_suit": 95,
"hairColorR": 99,
"yanzhuColor": 99,
"tezhengColor": 99,
"eyebrowColor": 99
}
}

ID 为捏脸数据的 ID RandomInfos 为捏脸数据具体内容

与 Seid 文件不同之处在于,该处 json 文件仅使用文件内定义的 ID 作为导入的捏脸立绘 ID。

通过使用

  • 调试面板 - NPC 调试 - 选择 NPC - 导出捏脸数据 可将捏脸数据复制到剪切板

或者

  • 调试面板 - 杂项调试 - 导出主角捏脸 可将捏脸数据导出到输入框内,自行将其复制出来即可。

导出主角立绘 功能可在角色创建界面进行捏脸后导出。

9 Lua 脚本

9.1 介绍

Lua 脚本不同于运行时脚本,运行时脚本本质上仅是为了方便进行逻辑运算而引入的 C#逻辑判断脚本,但 Lua 脚本则可以独立调用剧情指令,进行更加复杂的流程调控。

9.2 详情

该部分可参考 Lua 脚本

10 Fungus 补丁

10.1 介绍

Fungus 是什么

Fungus 是觅长生原生的剧情运行框架,游戏内的原版剧情由 Fungus 运行。

Fungus 补丁是什么

从 Next 0.5.0 版本开始,Next 提供了修改 Fungus 的方法,通过创建 Fungus 补丁,可以对原版剧情进行新增与删除,方便与原版剧情交互。

10.2 创建 Fungus 补丁

该部分可参考 Fungus 补丁