写在前面:自己挖的坑哭着也要填完(不是)
好吧开个玩笑,类似的想法很早以前就有了,这次也算是一个整理吧,而我也确实希望能帮到更多的人,为社区做出一份贡献,也算是我对这段经历的一个交代——起码我想留下点自己的痕迹。
没有头图,没有碎碎念,没有格式排版……这次的东西只是一篇单纯的教学。
希望这对你有所帮助。
1. 在教程开始之前,请确保你了解有关json格式的基础知识,有能力自己动手或使用网页/其他工具排查格式错误。
2. 请确保你了解超级模组的独立物品安装过程,能够自行完成安装、卸载。
3. 请确保你已经了解VSCode的基础使用方法,知晓创建、保存、搜索等操作的使用过程。
4. 请确保你拥有基础的电脑知识,能够理解根目录、文件夹、复制粘贴覆盖、解压缩文件等基础电脑操作概念并知晓具体操作方式。
5. 不满足以上四条或者询问有关以上四条的问题,我将不予回答。
6. 我希望你在寻找想要修改的内容时先自己动手尝试,而不是来问我;诸如“xxx物品的ID是多少”这种问题我不会回答。
7. 我发这篇教程的目的只是为了让更多的玩家能够满足自己的需求,而不必去修改服务端数据,MOD总归是比直接修改服务端方便的。
需要准备的工具:VSCode(不要问我去哪里下载)
教程中用到的索引、参考文件:
链接:https://pan.baidu.com/s/13gAzCDLQRB6sBGrCIOFZTA?pwd=MHWI
提取码:MHWI
接下来让我们进入正题:
打开VSCode,新建文件,并把超级模组本身附带的玩家大锤拖入工作区。
可以看到以下几个属性:tpl,items, Buffs,handbook, assort。
对于一个普通的物品来说,一般只需要tpl、items、handbook和assort四个部分。
tpl:物品的源ID,也就是你想要在这个物品上制作新物品的物品的ID
items:物品详细数据,这里包含了物品的具体数据,也是物品的关键部分
Buffs:如果你想要制作注射器/医疗品,这个参数允许你创建一个独立的Buff组并在你的物品中引用
handbook:物品的跳蚤市场分类、价格参数
assort:自定义商品数据,可以留空,这部分内容允许你自定义神秘商人出售物品的各种限制,你也可以用这个属性实现完整的武器出售,但是结构较为复杂
接下来让我们用一个实例演示tpl、items和handbook的实际应用。
举个栗子,我想制作一个独立的Salewa药包。
首先我们找到Salewa药包的ID,然后在之前新建的文本中键入如下内容:
保存为Salewa.json,建议保存到桌面。
随后在物品ID索引中找到Salewa的ID
在你的独立物品中输入如下内容:
此处的tpl即为Salewa血包的ID,之后我们将填写数据,在你的独立物品中创建items属性:
关于json中逗号、括号的使用等基础知识此处不再过多赘述,接下来在数据索引中找到Salewa的具体数据:
复制整个属性块,注意不要选到下一个物品里去,也不要多复制右大括号
随后将复制的内容粘贴到独立物品的items属性中:
此时我们需要修改一部分内容,首先将_id修改为你想创建的物品ID,每一个物品的ID不可重复,由于其本质是字符串,对格式并无需求,中英文皆可,此处我使用CustomSalewaMedicKit作为ID
随后我们看到_props,这里是物品数据的核心所在,对物品的修改大多也在这里进行;将Name、ShortName和Description分别修改为你想要的效果,其中Name为物品名,ShortName为物品缩略名,也就是右上角那个小名字,Description为物品介绍;这三个文本支持一部分HTML标签,比如加粗,倾斜,下划线,字体大小设置,左中右格式,十六进制颜色等等……我会在后面补充
随后我们需要在Description后面添加一条原版物品所没有的额外属性——CreditsPrice,这个属性是供神秘商人所读取的,也就是物品的售价
接下来我们创建handbook属性
(由于个人疏忽,items属性忘了加冒号,现已更正,也希望各位在制作物品时细心检查格式)可以看到handbook属性有三个属性值,分别是Id、ParentId和Price,分别对应物品ID、跳蚤市场分类ID和物品价格,物品ID即为前面items属性里的_id,ParentId可在ID索引中进行查询,Price即为前面加入的CreditsPrice的值,完成后如下:
(ID索引中的查询结果)
最后我们创建assort属性,其属性值为空(注意!assort属性使用的是中括号,即数组,请不要弄混):
此时我们已经完成了一个基础独立物品的制作,保存文件,并将Salewa.json作为独立物品安装,进入游戏查看。
可以看到服务端的超级模组提示正常输出(低版本为蓝色),接下来进入游戏
物品已经正常添加:
至此,我们已经完成了一个物品的复制,如果你使用过修改服务端的方式进行过数据调整,那么接下来的内容你应该已经猜到了
让我们回到items属性:
首先我们讲解一下物品通用属性:长宽、重量、堆叠数目以及背景颜色,英语比较好的同学可能已经知道对应哪些属性了,前面我们讲过_props是物品数据的核心,决定了物品的所有属性
Weight对应物品重量,Width为物品占地宽度,Height为物品占地高度,BackgroundColor表示背景色,StackMaxSize表示最大堆叠数量
我们将重量改为0.2,背景色改为蓝色
接下来我们向下拉,这里就是Salewa本身的数据了
MaxHpResource为耐久度,hpResourceRate为回复量,StimulatorBuffs为Buff组调用,effects_health和effects_damage分别为健康效果和效果,这里的两个属性对应治疗小出血和大出血对血包本身的耐久度消耗,medUseTime为使用时间,不能超过原有时间,可以缩短;我们对数据进行如下改动:
保存,覆盖安装,进入游戏查看(注:每次修改请记得清除启动器缓存,这个很重要)
可以看到,修改已经正常生效,而对于其他物品,制作流程也是一样的,对于其他物品的属性修改,还请自行探索,这也算是我留下的一个作业吧,或许以后我会把这些东西整理出来,或许不会……谁知道呢。
基础教程到此结束。
进阶教程一:精简你的物品文件
让我们回到items属性,是不是觉得下面这么多没有做出改动的参数有点碍眼?
那我们为什么不把它们删掉呢?就像这样……
这样看起来是不是就一目了然了?重新安装,进入游戏,经过“压缩”的物品文件依然是正常的,当然,这种精简仅限于_props属性
至于是选择精简还是选择保留,这个就看个人了,毕竟物品本身的字节也不会很大,这种优进阶教程二:Buff组的运用
让我们把目光放到一些其他的东西上——还记得我之前提到的么?Buff组引用,原版的Buff组位于Aki_Data/Server/database/globals.json内:
这里存储了原版所有提供Buff增益的物品的Buff组,你可以选择一个原版的Buff组进行引用,或者在物品中创建一个新的Buff组,也就是前面的Buffs属性——还记得StimulatorBuffs属性么?希望你没有把它精简掉……
在items后创建Buffs属性
创建你想要在物品里调用的Buff组ID:
也许有人已经注意到了,这里的格式和原版的Buff组是一样的,所以我们可以从原版Buff组中拆分数据,编写自己的Buff组,我这里写入的是生命回复、健康技能等级和活力技能等级:
随后在StimulatorBuffs属性中进行调用:
可以看到效果如下:
而关于Buff本身的具体使用、编写以及修改,我这里就不再细讲了,都是复制粘贴的东西,原版的Buff组所在位置我也提供了,就把这也当成一个作业吧(笑)自己去大胆的多尝试,有付出终究会有收获的。
进阶教程三:基于assort属性构建武器
首先我们还是按照普通物品的方式制作一个独立的枪械,任何枪械都可以,我为了方便选择了手枪P226R,也是塔科夫官方小说里主角最趁手的一把手枪
而作为一个普通的物品,这把枪自然是只有本体而没有其他配件的,超级模组自然已经考虑到了这一点——接下来我们讲解assort属性的用法
让我们解析一下assort的构建
每一个对象依然是逗号分隔,这种基础知识不再讲述,_id依然是唯一ID,不可重复,_tpl则是配件本体的ID,parentId需和你的主物品ID相同,编辑哪个物品的assort,这里就填写哪个物品的ID,slotId为配件位置ID,在武器本身的数据中存在
如果你有mod开发经历,或者研究过塔科夫本身的枪械/预设/枪械商品的数据结构,你会发现其实格式是一样的,不同的只是parentId,超级模组会在内部指向生成的哈希ID,这里理论上可以任意填写,但我没有测试
可以看到已经有了配件
那么关于超级模组物品的教学,就到此告一段落了,这个教学教的更多只是基础的东西,而就像我签名所写的:我只不过是站在巨人的肩膀上——感谢_物是人非制作了超级模组,让更多的玩家有机会创作自己的物品;感谢AT在我这两个月的MOD探索中提供的帮助;种种经历和个人所学的结合让我最终写下了这篇教程,我希望这篇教学能帮到更多想要创造一个属于自己的世界,但又苦于能力的人,这次的教学也不再有支持链接,而相对的,我希望——
如果这篇教学帮到你,希望你能在评论里留下自己的作业,如果你能在教程的基础上推陈出新,那就是对我最好的支持了。
——千叶玲花,于2022年9月7日
大佬NB,虽然4个基础要求基本不具备,也感谢大佬的分享。同时拉过板凳做好,看楼下
慕名前来上课