【D2RMM】暗黑2重制版MOD管理器《D2RMM 进阶图文教程》,D2RMM组件制作入门手册
本帖最后由 我是demo 于 2023-8-1 14:31 编辑以下部分并不要求一定要都能看得懂,毕竟这是面向 MOD 作者的教程,既要照顾萌新能听懂一部分,更多是为了向 MOD 作者演示常见的几种情况里面,D2RMM 里要怎么做。D2RMM 组件数目远远不够,我更希望有能力的同志一起加入进来,难免写得深入一些。如果你是 MOD DIY爱好者,你能看懂你所能看懂即可,不要纠结深入的内容看不懂,放过自己。如果你有兴趣写写 D2RMM 组件,那深入的东西可以写一写,尝试尝试,即使是 D2RMM 作者没有如此详尽的演示过文件修改常见情况该怎么写。
如果你只是一个爱好者,只想知道 D2RMM 组件怎么用的指路==》【D2RMM】暗黑2重制版 MOD管理器《入门图文教程》,D2RMM使用必看手册
【基础工具安装】
1. 工欲善其事必先利其器,笑
2. 为了更快入门,推荐使用国产编辑 notepad-- 进行后续的编辑文件操作,这能避免很多不必要的麻烦
3. 下载链接:[【notepad--】](https://gitee.com/cxasm/notepad- ... lugin-Installer.exe)
4. 这个的安装非常简单就不贴图了,当然你会用 vscode 或是 idea 等更有难度的富文本编辑器那就更好了
【基础设置】
1. 文件扩展名,是要勾选的,当然这个大部分人有开启过
【将 非D2RMM 的 mod 整合到 D2RMM】
【如何利用以前的 mod 简单做一个D2RMM组件】
1. 比如:在3DM论坛里找到一个说明还算完整的组件(侵删),下载[【召唤流数量和时间限制修改】](https://bbs.3dmgame.com/forum.ph ... 5ODE2fDYzMzY2NDM%3D),将它下载下来,原帖子:https://bbs.3dmgame.com/thread-6336643-1-1.html
2. 解压,打开文件夹,在 zhl.mpq 文件夹发现有个 data 文件夹,第一个知识点:所有整合 mod,真正起作用的东西都在 data 文件夹内,【复制这个 data 文件夹】
3. 来到 D2RMM 的安装目录下的 mods 目录,在这里我们建一个叫【(FS)召唤流数量和时间限制修改】的文件夹,F表示这个是一个需要覆盖原有游戏文件的D2RMM 组件,S表示它修改文件的首字母(skill.txt),这能其他玩家很方便的排序和归类
4. 把刚才复制的 data 文件夹粘贴,在这个文件夹底((FS)召唤流数量和时间限制修改)下
5. 在这个文件夹下新建一个叫做 mod.json 脚本,右键用 notepad-- 打开,将底下文本(包括两个花括号)复制进去,格式需要是 utf-8 编码,然后保存!{
"name": "(FS)召唤流数量和时间限制修改",
"description": "召唤流数量和时间限制修改"
}
6. 再新建一个叫做 mod.js 脚本,同样使用 notepad-- 打开,将底下文本(包括两个花括号)复制进去,格式需要是 utf-8 编码(如果不是可按下图操作步骤更改过来),然后保存!
D2RMM.copyFile('data', '', true);
7. 然后到 D2RMM 中,点击【刷新列表】,勾选【召唤流数量和时间限制修改】就能将其集成到其他 mod 里头了
8. 点击【安装已选模组】【开始游戏】,就可以愉快游戏了
【小结与答疑】
1. 上述只是一个小小的范例,这种方式制作 D2RMM 组件文件容易相互覆盖,有些功能会没法集成在一起,不过后续我们会讲讲该怎么解决这个问题
2. 还有就是由于原作者发布的文件是很早前的,后续游戏一更新,组件就会不能用,一安装就会闪退报错,后续我们会一同解决这个问题
3. 上述只是一个很小的功能项,那如果是一个包含很多功能的 mod 能用这个方法集成吗,当然可以,这也是做这篇文章最主要的目的
4. 如果是魔改的mod也可以吗,大部分情况是不行,由于魔改作者大部分采用.bin打包,文件被他们加密过,目前没有办法将他们解析回来,只能复制粘贴,不能修改
5. 后续我们将讲讲,创建 mod.js 和 mod.json 两个文件是做什么用的,这能让各位 mod 作者更好的自定义组件
【认识 mod.json】
1. 我们在上一篇幅中使用到 mod.json,并输入了{"name": "(FS)召唤流数量和时间限制修改", "description": "召唤流数量和时间限制修改"}
2. name - 组件的名称,这是最终显示在 D2RMM 中的名字,至于保存这个组件的文件夹叫什么 D2RMM 并不关心
3. description - 描述该组件是做什么用的
4. author - 组件作者名
5. website - 组件发布的网址,可以点击组件排序按钮打开对应网页
6. version - 组件版本
7. file - 组件涉及的文件,这是我自己汉化新增的字段,便于查看哪个组件与其他组件可能的冲突
8. config - 这是 D2RMM 组件能设置的关键,由于json不能注释,请查看图说明
9. 完整示例
{
"name": "(NN)组件的名称",
"description": "组件详细介绍",
"author": "组件作者",
"website": "www.xxx.com(组件发布网址)",
"version": "1.0(组件版本)",
"file": "npc.json、skill.txt...(组件涉及修改的文件)",
"config": [
{
"id": "checkbox1",
"type": "checkbox",
"name": "单项按钮1",
"description": "解释单项按钮1的作用",
"defaultValue": true
},
{
"id": "text1",
"type": "text",
"name": "文本框1",
"description": "解释文本框1的作用",
"defaultValue": "默认填写这句话"
},
{
"id": "number1",
"type": "number",
"name": "数字框1",
"description": "解释数字框1的作用",
"defaultValue": 1,
"minValue": 0,
"maxValue": 100
},
{
"id": "select1",
"type": "select",
"name": "选项框1",
"description": "解释选项框1的作用",
"defaultValue": "option1",
"options": [
{
"value": "option1",
"label": "第一个选项",
"description": "第一个选项的描述"
},
{
"value": "option2",
"label": "第二个选项",
"description": "第二个选项的描述"
}
]
}
]
}
【小结与注意项】
1. json 后缀的文件,所有你填写的字段都应该用英文双引号框起来,比如"我是一个英文双引号"
2. 例如:"name": "(AA)这是我的第一个组件" 冒号前的字段叫做键,冒号后叫值,他们组成键值对,写一个键值对的时候,需要在后面加逗号,不然会报错
【粗识 mod.js文件】
1. 在上上篇幅我们使用一句很简单的命令 D2RMM.copyFile('data', '', true );,让 D2RMM 去 copyFile(复制文件),将这个组件目录下的 data 文件夹,复制到 D2RMM/D2RMM.mpq/文件夹中,如果冲突了,那就直接覆盖掉,不覆盖就写(false)
D2RMM.copyFile(
'data', // 将组件文件夹下的 data 文件夹复制到下面的位置
'', // <游戏安装目录>\mods\D2RMM\D2RMM.mpq\
true // true 会覆盖所有冲突的文件,不覆盖就写false
);
2. 上述是 mod.js 最简单的用法,mod.js,后缀名是js,说明它本质是一个 JavaScript 的脚本,并且是 ES6 级别的。这是最难学习的部分,它需要一些编程的基础,不过我还是希望能通过一些简单的复制粘贴 MOD DIY 爱好者能自制一些常用组件
3. JavaScript(简称js) 入门到入土教程 => [【freeCodeCamp】](https://www.freecodecamp.org/chinese/learn/)
4. 开个玩笑,编程学习成本很大,有兴趣倒可以深入学习下,推荐上面的链接,全免费的。编程还是很有趣,特别是它能做游戏脚本的时候
5. 这个教程主要是让你能看得懂,别人写的脚本是在做什么,我们该如何模仿它写自己的东西
6. 不过我发现重点是得先明白为什么要这么改,改的数值是在用什么用的
7. 所以这节先搁置,后续再讲新的内容,先引入一些 mod 制作常见的工具
【小结】
一入编程深似海
【mod 开发常用工具使用】
1. 第二常用的工具一个是我们先前下载的 notepad-- 这是用来编辑 json 文件的
2. 最常用的工具是编辑和查看 txt 文件的[【AFJ Sheet】](https://bbs.3dmgame.com/thread-6174691-1-1.html)工具,先下载这个工具
3. 打开这个工具,找到zhl/zhl.mpq/data/global/exce/skills.txt,就是原先我们下载的小mod,只要一直往下点就可以了,它就只有这么一个有用的文件
4. 打开 skill.txt 我们会看到这是一个类似excel的文件,不过它需要专门的编辑,我选中这个kick 单元格,我们可以称它位置为第3行第D列,这个术语将在后面的介绍修改文件的时候用到。当然你也可以双击直接改里面的内容,不过如果你不熟悉的这个文件的话请不要这么做
5. 查找功能,点击箭头所指图标,打开搜索功能,以查找 kick字段为例,输入 kick 点击搜索/下一个即可找到这个字段。
6. 不过它有个小缺陷,如你所见,它现在选在attack上,它是位于kick之上的,这是搜索是可以搜到 kick,但一旦蓝色底框选在kick下的行,你再去搜索kick是搜不到这个单元格的,这是它很大的设计缺陷,使用的时候请注意。
7. 如上图还有替换为我就不多介绍了,就是替换功能
【小结】
这章节主要介绍 txt 文件编辑器的使用,方便我们后续查看 txt 文件
但是那些 txt 文件,每一列又是什么意思,是做什么用的,你知道吗
【txt文件详解】
如果你英语水平尚可,你可以看这个文件
[【官方英文版】【pdf】暗黑2重制版TXT文件所有列详解=TXT文件修改指南](https://bbs.3dmgame.com/thread-6431558-1-1.html)
那如果你英语像我一样惨不忍睹,请看这个文件,不过它毕竟是中文经验贴,难免没那么详细
[【简体中文】【pdf】学习制作MOD, 暗黑2常用TXT文件列详解/吐槽=TXT文件修改手册(暗黑2重制版可用)](https://bbs.3dmgame.com/thread-6436450-1-1.html)
这两个文件可以作为制作 mod 参考手册
但文字说明怎么改,难免没那么生动,我很希望你能去看看【隔壁大王】的 mod 课,这会让你的在后续的更复杂的教程中,能先系统的了解 mod 的原理和方法
[【隔壁大王 mod 课】](https://space.bilibili.com/31079 ... ondetail?sid=140238)详细且免费,推荐
【认识 D2RMM 接口,需要编程基础】
1. D2RMM.getVersion(),返回 D2RMM 版本,有些组件不适配低版本D2RMM,获取这个版本号能提示组件使用者该升级 D2RMM 了
2. D2RMM.readJson(文件路径),读取JSON文件(忽略注释、空白和D2R在JSON格式中出现的各种错误)会返回一个 js 中的字典
3. D2RMM.writeJson(文件路径,刚才返回的readJson返回的字典)
4. D2RMM.readTsv(文件路径),读取TXT文件并以JSON格式对其进行解析,返回 js 中的数组
5. D2RMM.writeTsv(文件路径),刚才返回的readreadTsv返回的数组)
6. D2RMM.readTxt(文件路径),以纯文本形式读取D2R文件
7. D2RMM.writeTxt(文件路径),纯文本写入数据目录
8. D2RMM.copyFile(从哪复制的路径,到哪去的路径,是否覆盖原有文件),将文件或目录从mod目录复制到数据目录
9. D2RMM.error(给用户报错)
【小结】
接口不多,也很简单(相对)
【自己写一个原创组件】const cubemain = D2RMM.readTsv("global\\excel\\cubemain.txt"); // 读取cubemain.txt 文件把这个文件所有的值都给 cubemain
// 添加一个盒子配方 回城卷轴 + 辨识卷轴 = 赦免徽章
cubemain.rows.push({ // 添加在 cubemain.txt 最后一行
description:
"Scroll of Town Portal + Scroll of Identify -> Token of Absolution", // 这个配方做什么的
enabled: 1, // 1=启用这个配方 0=禁用(不需要修改)
version: 100,// 0=原版, 100=资料片(不需要修改)
numinputs: 2, // 合成材料的个数
"input 1": "tsc", // 合成材料1 回城卷轴
"input 2": "isc", // 合成材料2 辨识卷轴
output: "toa",// 输出赦免徽章
"*eol\r": 0, // 结束符(不需要修改)
});
// 添加一个配方 2个回城书 = 奶牛关 + 2个回城书
cubemain.rows.push({ // 添加在 cubemain.txt 最后一行
description: "3 Tome of Town Portal -> Cow Portal", // 这个配方做什么的,可为空,中文会显示乱码但不影响使用
enabled: 1, // 1=启用这个配方 0=禁用(不需要修改)
version: 100,// 0=原版, 100=资料片(不需要修改)
numinputs: 2, // 合成材料的个数
"input 1": `"tbk,qty=2"`, // 合成材料1 2个回城书,不能写"input 1":"tbk","input 2":"tbk"
output: "Cow Portal",// 输出奶牛关红门
"output b": "tbk",// 输出回城书,不能写"tbk,qty=2"
"output c": "tbk",// 输出回城书
"*eol\r": 0, // 结束符(不需要修改)
});
// 接着进阶
// 把一些必须用的值,赋值给baseRecipe,避免重复书写
const baseRecipe = {
enabled: 1, // 1=启用这个配方 0=禁用(不需要修改)
version: 100, // 0=原版, 100=资料片(不需要修改)
'*eol\r': 0, // 结束符(不需要修改)
};
// 武器属性附魔给珠宝
cubemain.rows.push({
...baseRecipe, // 引用 baseRecipe 所有的值
description: "1 jewelry + 1 weapon -> 1 Jewelry with Weapon attribute ", // 配方描述
numinputs: 2, // 合成材料的个数
"input 1": "jew", // 合成材料1 珠宝
"input 2": "weap", // 合成材料2 武器
output: "useritem,mod",// 输出input 1物品并加上input 2属性
});
// 修改配方
cubemain.rows.forEach((row) => { // 一个row含有txt文件一行的完整数据
// 让 description 为3个蓝戒指 转化 1个蓝色项链的配方,让它输出为1个暗金项链
if (row.description === "3 Magic Rings -> Magic Amulet") {
row['output'] = `"amu,uni"`; // amu表示项链,uni表示暗金,组合就是暗金项链
}
// 让所有手工品自带属性满变量
// 此处有些漏洞,仅作演示使用,这几行代码就能将72行所有的手工品自带的属性全满变
// 即使暴雪后续有加手工品,也能让它全满变量,这就是 D2RMM 脚本的优势所在
if (config.manBian) {// 加个控制开关,mod.json id为manBian的开关控制,请自行参考mod.json部分
if (row.output === `"usetype,crf"`) { // crf 为手工品代码,手工品的output列都为"usetype,crf"
row["mod 1 min"] = row["mod 1 max"];// 把第一个变量最大值,传给最小值,物品就是满变量
row["mod 2 min"] = row["mod 2 max"];// 第二个变量
row["mod 3 min"] = row["mod 3 max"];// ...
row["mod 4 min"] = row["mod 4 max"];
row["mod 5 min"] = row["mod 5 max"];// 共5个变量,当然你会js的循环那可以写的更简洁
}
}
});
D2RMM.writeTsv("global\\excel\\cubemain.txt", cubemain); // 把所有上面改变的值,写入到 cubemain.txt,保留并会其他组件对 cubemain.txt 的修改
【小结】
以上只演示了对 cubemain.txt 增加删除修改文件的操作,但并不意味着这些操作只能改这个文件txt文件规则是一样的,不同的只是在列名称要描述要修改对于大部分 MOD 的修改无非基于以上几种方式的细化,抽象罢了加深对暗黑2 各种文件的理解才能写好 D2RMM 脚本
【结语】
MOD 应该是开放的,可供修改的
MOD 不开放,MOD 作者会越来越少,没人分享组件,MOD 会加密,开始收费
D2RMM 脚本是不加密的,数值是可自定义的,当然它是开放的,所以它是 Free 的
D2R 是一款值得一玩的老游戏,理应有很多 MOD
尝试一下吧 你也可以的~
【贴上最后的演示的脚本】
**** Hidden Message *****
卟离来顶。虽然我看不懂:lol 厉害了 学习一下
这不比玩游戏好玩 回复是为了浏览隐藏的内容 感谢分享
感谢分享 大牛hghg:)
感谢楼主分享的内容!感谢楼主分享的内容! 感谢楼主分享的内容!感谢楼主分享的内容! 这手把手教的,楼主辛苦了 感谢大神分享 不会编程,只能看看了
好东西,拿走了,临走顶个贴感谢一下楼主!感谢论坛,感谢LZ热心分享! ding xiexie louzhu
下来试试吧 十分感谢的~支持~
感谢教学,非常实用 虽然不懂,但是看着高大上 6666666666666666
666666666666666666666666666 看看隐藏的内容是什么 dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddwd
暗黑2里面是提取MPQ文件里面的各种bin文件TXT文件,重制版一直没对应上,老了。 慢慢看看看
看看看看。。。。。。。。。。。。。。。。。 6666666666666666666666666666
谢谢分享!!!!
好东西,谢谢楼主!!!!!!!!!!!!! ddddddddddddddddddddddddd