骑砍2mod教程-武器-单手左右挥砍以及上下刺的短矛
路过的罗格
2022年12月25日 05:26

好的各位,因为网上找到的教程是在太少,所以我自己整出点名堂后,会来记录一下是怎么做的,勉强当一个教程了。

首先是咱们的武器系统,咱们来简单实现一个需求,然后再做详细的讲解。比如说我的需求是:一个能单手左右挥砍以及上下刺,双手默认双手长杆动作的短矛,它属于双手长杆的分类,但可以单手配盾使用。


简介一下骑砍2的mod。骑砍2的mod与砍1完全不同,砍1每一个mod都是一个完整的剧本,不同mod之间功能互相独立。而砍2的mod则类似于老滚辐射,允许你给一个主剧本添加各式各样的插件。比如原版单人剧本,核心是三个mod:Native、SandBox、SandBoxCore,咱们这一次的需求只用改Native就足够了,但是如果想让这次改了的装备,给小兵也用上,则需要改后两个沙盒mod相关的文件。还要就是,xml基本是在ModuleData文件夹里,翻译文本则是在ModuleData\Languages\CNs下。

接着是单个mod的组成部分。以Native这样的大型mod为例,大致可以分为三个部分:主要由程序负责的dll,东西基本是在mod目录下bin文件夹里、主要由策划负责的xml,东西基本是在mod目录下ModuleData文件夹里、和主要由美术负责的模型贴图资源等。美术那边我一点不懂,dll现在也还没整明白,所以先说xml。xml可以粗暴的理解为一个表格,但是它是有语法限制的,随便搜一个看看就行https://www.runoob.com/xml/xml-syntax.html。挑几个重要的说一下。xml必须要用根标签/根元素,根标签就是告诉程序我这个xml是给哪个功能配置的表格,比如物品类xml根标签是<Items>。xml的元素/标签必须要有关闭标签。关闭标签有两种写法,一种是和开启标签分开的,关闭标签为开启标签前打个/,如<p>内容</p>;另一种是如果没有内容,可以直接在开启标签最后打一个/进行关闭。如<br 属性="&#​34; 属性="&#​34;  />。xml的属性要带英文引号。以上三点都可以在Native的\crafting_pieces.xml看到。


说完那些不知道就没法开始改的东西后,来完成咱们的需求,首先确定要整那些文件。

<CraftingPieces>根标签的文件,比如Modules\Native\ModuleData\crafting_pieces.xml,武器的配件表,可以修改配件的数据。因为原本矛和标枪是基本没有添加挥砍相关的数据的,所以需要手动加一下伤害。

<CraftingTemplates>根标签的文件,比如Modules\Native\ModuleData\crafting_templates.xml,武器的模板表,里面有定义哪类武器可以用哪些配件,咱们要的短矛,需要整一个标枪杆放到双手长杆里。

<WeaponDescriptions>根标签的文件,比如Modules\Native\ModuleData\weapon_descriptions.xml,武器的描述?说明?表,主要是可以定义那些配件可以使用哪个攻击模组,在给双手长杆添加了标枪柄后,需要给他赋予攻击模组才能正常使用。这里可以将双手长杆的单手攻击模组替换为单手剑的攻击模组来达到挥砍矛的效果,但是不能进行更多的自定义,比如会保留剑的竖劈而不是需求的上刺,所以武器动作不在这里改。

<item_usage_sets>根标签的文件,比如Modules\Native\ModuleData\item_usage_sets.xml,物品的使用设定?表,这边可以对攻击模组进行高度的自定义,然后再让WeaponDescriptions去调用这些修改过的武器模组即可使用上下刺左右砍。


然后是这些文件的使用。咱们以优质钢劈砍矛头这个配件举例,这东西说好了是劈砍矛,但是实际只给了刺的攻击模组,很不能忍啊。

所以呢,咱们先找到这个配件的代码。对这种游戏里有明确翻译的东西,通常会直接在翻译xml里找到他的id,然后再拿这个翻译id去找到配件xml里谁用了这个id。具体下来就是在std_crafting_pieces_xml-zho-CN.xml搜优质钢劈砍矛头,然后拿S75vUGzK这个id去在crafting_pieces.xml搜,然后就定位到了。

看一下他的数值,重量长度伤害都对应的上,那就开始改吧。首先先删掉excluded_item_usage_features这一个属性,这个东西会屏蔽掉挥砍伤害的显示,然后再找着Thrust标签抄一个Swing标签就行了,这样就简单的给这个配件加上了挥砍伤害的数值。但是现在他还没有挥砍动作,所以有伤害也用不出来。

矛头已经改好了,然后是给他安上短杆,直接进crafting_templates.xml里,先给他来个折叠,稍微好看一点。折叠之后我们就发现啊,这个文件里的12个id,好像就对应的是锻造里的12个大类啊,那咱们直接把标枪里的东西复制一点过来不就行了。

确实如此啊,咱们直接把标枪UsablePieces里面的几个杆复制到双手长杆的UsablePieces标签下,就能看到双手长杆里多出了这些短杆。当然,如果你真的像这样一次复制了所有的标枪杆到双手长杆下,基本肯定是会在点了锻造的双手长杆后发生闪退的,这大概是因为他会一次性读取完CraftingPieces、CraftingTemplates、WeaponDescriptions三个文件的数据,而现在因为没有改WeaponDescriptions,导致有一部分数据错乱,他就给你闪退了。

图错了,复制到双手锤里面了,改到双手长杆里

那就来改WeaponDescriptions吧,首先来看一下他标枪这边怎么写的,

好的知道格式了,直接把刚才复制的几个杆,标签和属性名做一个替换即可,

但问题来了,这些杆要加到什么地方?其实没啥好办法,大致就是你看一下这里面有哪些配件,然后看一下他的攻击模组之类的设定,来大致确认。比如这次肯定要在OneHandedPolearm和OneHandedPolearm_JavelinAlternative里面选一个加到他们的AvailablePieces标签里,来让他有单手使用的能力。然后还要在TwoHandedPolearm里面加,来保证他在锻造界面别闪退。当然,OneHandedPolearm_JavelinAlternative里面是可以不加的,这个看配件可以知道是单手标枪用的(而且攻击模组已经让我改过了)。现在,不出意外的话,你已经有了一个可以打造出来的,有挥砍面板的,短杆矛了

然后是最后一步,给他整一个单手挥砍的攻击模组。我们在weapon_descriptions.xml里可以看到WeaponDescription标签下有一个item_usage_features属性,这个属性就是控制他使用的动作模板的。而这个属性具体的编辑xml则是叫item_usage_sets.xml。然后我们直接把原版单手长杆的动作模组丢进去搜一下,啊很强啊,直接搜不到。

我都服了,这个破文件我是真找了半天,文件名和属性名有差别就不说了,id还不一致,需要把冒号转换成下划线。进行了一下替换后,我们终于搜到了他的动作模组,

然后直接去单手剑那边复制一下左右挥砍的数据粘贴到这边,进行一个草草的了事,啊对了,这边本来是没有<usages>标签的,需要手动建一个……

按理说应该就可以这样结束了,但是现在不知道原因是啥,经过两次base_set后,第三个item_usage_set就加不上动作了,所以咱们只能去onehanded_polearm_block_long_rshield_thrust的上一级也就是onehanded_polearm_block_rshield_thrust里面加,

把单手的挥砍<usages>复制过来后,终于完事了……进游戏也正常,无非就是挥砍速度慢,伤害低。

这个已经找到在dll里改啥了,但还没什么好的想法。