- 工具010看附件
- 解包工具站内或者N网找
- 某些武器可能和本教程出入有点大,主要我只改过太刀
- 如果你的某些修改是借鉴其他招式的,注意如果修改具体的效果,如action具体效果、按键conditon的cmdtype或是startframe之类的是会连锁修改的,因为这是借的(类比 共享文档,腾讯那个)
解包工具:MHRUnpack
解包:把游戏根目录的最新(re_chunk_000.pak.patch_001.pak)拖动到解包工具窗口界面
将fsm文件打上对勾点击提取,位置任意(自己能找到就行)图中以太刀文件为例
模板路径不能有中文,否则报错
首先用010editor 打开fsm文件(自己解包),然后点击模板,运行最新的mhr模板
(方法1:可以先在状态栏找到【模板】-->【查看安装的模板】-->【添加】,打开fsm文件,之后再点击【模板】-->【运行模板】-->选择列表中的mhr模板),图中我给模板文件改了名字,默认是【RE_RSZ.bt】,模板路径一定不要有中文。
(方法2:打开fsm文件,点击【模板】-->【打开模板】-->选择mhr模板,之后再点击【模板】-->【运行模板】)
,之后等待加载(可能要几分钟加载,010太垃圾了),就会出现如图的窗口,如果没有,请右击状态栏,将【变量】打上对勾。
打开文件,并运行模板后,我们一般是改node的,而在node11的childnodes中我们能找到该武器的近乎所有的招式,当然站里也发过了个别武器的招式对应表了,自己搜索。
childnodes也经常被用来快速查找当前招式的所有派生。
但一般来说,这种[xxx]里只有三位数的并不是我们要找的地方,我们要找的一般都大于3000,图里下边再打开一层childnodes里 我圈出来下方那个才是我们的目标,你可以直接再次展开子项,或者根据[xxxx]里的数字往下拉node单独找到这个节点
像这样
或者这样
一般来说方法,这两种方法并没区别,只是方法1限于软件是不能无限展开子项的,才需要方法2。
这样我们来讲解一些大佬们改武器mod时经常用到的两个地方,action和state。
先说action,这玩意几乎就定义了这个招式的所有属性(动作值之类的不在这个文件里)。就如下面的gp失败的大居合,左边是我改的,右边是原版。(千万不要用这种方法来将某个派生修改为另一个,太麻烦了,直接state 的hashID替换更简单)
原版的action只有1条,而我改的却多达8条,这是怎么做到呢,其实就是改这里,这个数字是可以改的,目前我只会加不会减(一种方法是,将你想要减去的action替换成另一个,可以重复某个已有的action)
改了之后会弹出刷新框,点确定,然后再次点击 运行模板
刷新后,我们会得到一些空白的action属性条如下图
那么我们定义什么好呢,那么我们想要什么呢,我们怎么得到我们想要的呢?答案就是偷
暂时还是以我改的为例,那么我改的这些词条是偷谁的呢,用了我做的寂寞太刀侠的知道,大居合是可以无限用的,而且不用管什么gp不gp,这就是我偷gp成功的大居合的action的结果
下图是 gp成功大居合的node
所以我们只需要一个一个把这些action搬过去就行了,我们只需要把途中箭头指着的地方复制粘贴到空白action处,当然你也可以用来替换原来已经定义过的action处,只需要把这个地方的值替换成你想要的就行了,一般是替换teamatk或者continuecomb。(经大佬提醒:comb会影响连招计数,teamatk会影响招式的耐冲,最好的是替换UI,只和训练场的名称显示有关)
复制粘贴后
如果你这时刷新模板(再次点 运行模板),就会发现这里已经有了明确的定义了。
你可以不止是这样偷action,你还可以偷些其他的,比如 拔刀二连斩 的霸体等,也可以通过这种方法给没有 无敌 升刃 效果的招式添加 无敌 升刃之类的效果,所以 定位一个action是干什么的很重要。
讲完了如何替换/增加action,下面讲讲怎么改action的具体属性,比如无敌时间,动作速度之类的,(只要你知道该action是干什么的)
- 比如我展开的这个action,画横线的地方是定义动作速度 快慢的,默认是1.00,下图中我改成1.30也就是招式加速变成原先1.3倍
- 再比如下图中是水月之类的消耗气刃的action,默认是-1,当改成正的数值后就变为了和 开刃 类似的效果 ,还是可以自己定义升几层刃的
虫技的cd也是在action里定义的
简而言之,action就是招式的附加效果,一些招式会附加buff之类等效果,我们只要找到就可以把它移植到别的招式上,使得原先不甚令人满意的招式附加特殊效果
State
action只是管招式放出去发生的效果,那么招式之后的派生呢??那就要讲state了,修改state可以添加派生,修改派生,以及对应的招式后摇(极致就是 柔化),招式按键,以及某些gp判定
下图是纳刀时的招式派生,左边是我改的,右边是原来的,我自己添加了几个派生,添加时和action几乎差不多,所以不再讲解
一般来说我们需要偷的数值有4个,也就是下图中圈起来的
我们一个个讲
- (可以不改)mstates目前我了解的应该是控制招式派生时能不能改变方向,其实这个是可以不用添加的,后果也就是,招式只能向着面前放而已,部分是两个负责的,其中有一个里面有limitangle项负责派生可以调整的角度大小改成180就能随意转向了(因为是向左或向右180度,并不是加起来180度),当然改成360也可以。(经大佬提醒:太刀的气刃斩耗气也在这里)
我们依然需要添加mstates的数量,就和添加action和states数量一样,修改数字后重新运行模板
只需修改图中蓝色框的,找一个其他招式或者其他招式派生有转向的,这个派生是可以转向的,我们可以借鉴下来,例如下图中的见切
- mTransitions:决定了派生的招式是什么,这个直接偷其他招式派生对应地方就行了
例如我们可以把见切的招式复制粘贴过去
- conditons:派生招式是需要按条件的(不一定是按键),按键的话这个直接找游戏内是这样按才能按出来的招式派生就好了,比如 纳刀 的按键,见切的 按键或者单纯的 轻攻击 重攻击键招式派生。cmdtype是按键类型(对照序言中的 fsm表有一页是专门的数字与按键类型对应的),startframe派生延迟,endframe结束派生时间,preframe预输入时间,其它的可以自己比照下虫技的派生与普通招式派生区别,改一下就能让本来需要装备替换技的可以随意释放。
派生的招式和原版的按键并不需要像游戏内一一对应,这个看自己喜好。
- transition:不知道是干啥的,照抄就行了,貌似也是可有可无(部分招式gp,以及自动承接下一个动作有时会在这里,只需改exsitframe)
接下来讲讲还可能会修改的一些东西。
1.gp判定时间:如果这个招式有gp判定,那么一般像下图所示位置,这时transition发挥作用了,改图中数字就行了。有些gp招式是基于某个action与baseXXX的condition之间的搭配,这种改action的endframe时间就行,例如seethrough(action)与baseseethrough(state-condition)形成的像自动出招,以及片手的damagereflex(action)与basedamage(state-condition)的组合(弓箭gp不在这里,这里举例是太刀的见切),有的是直接修改transition里的existframe
2.招式后摇以及柔化:只需修改下图位置中的数字,(代称)下图是招式A派生招式B,只需减小招式B的按键条件里该位置的数字,那么招式A派生招式B时,招式A的后摇就减小了,如果把招式A的所有派生的对应这里都改小,那么体现出来的就是招式A的整体后摇变小了,如果这个地方改为0,表现出来就是可以用招式B柔化招式A(特别提醒,如果你的按键condition是从别的招式借鉴的,这是会连锁修改的,就像共享文档那种)
3.上图中的未标出来的CmdType[12]就是按键对应的代码,具体看大佬的帖子,有各个按键和对应的数值
MOTFSM文件编辑教学及示例
示例:action里的SeeThrough配合state派生条件的condition里的BaseSeeThrough可以达到【自动XX】的效果(也可以是其他XXX与BaseXXX的配合,比如damagereflex与basedamagereflex)注意我说的XXX与BaseXXX中的XXX名字应是一致的,seethrough与baseDamage搭配可不会产生对应效果
一般带盾之类的是damge的搭配,太刀老老实实用seethrough的搭配,其它武器的自己看看相应的gp是怎么搭配实现的也就能明白了
修改后,该封包封包,该放native放native
这里不再讲述修改fsm的原理,如果你看了上面的内容了,这里其实并没有什么好讲的,就和修改fsm一样,无非是添加派生state,添加action,修改一些参数等等,所以只讲了一些更基础的东西,不要指望看了这里能看明白什么
需要工具 BehaviorTree Toolkits 和 nodedisplay或者说BHVT
以及nightly版ref框架 否则BHVT不生效
可能的教程 lua菜鸟教程
可以参照我之前发的太刀的lua脚本
进入游戏,先把BHVT的view里的除了第一个对勾全部取消掉,不然很卡,想要追踪当前动作节点,再勾选follow active node,BHVT界面默认鼠标中键按下可以拖拽画面,左右下角可调整大小
然后装备你要修改的武器,进入训练场,我们开始
首先是找节点,可以用010的模板,找到每个节点前的数字,然后在BHVT中的search中输入,并按下回车,然后点击goto,就跳转到我们要去的节点了,例如
很好,你已经学会了怎么找一个节点了
不会010模板方法?那就用follow active node,此时你做出相应动作就会出现对应的节点
你也可以点击run看自己人物会不会做出相应的动作以此来验证是否找到正确节点,或者直接找母节点,后面会跟着它所有的子节点,观察做动作时节点跳转过程(一般会有一个绿色的线)
很好,你学会如何寻找节点了,还不会?老老实实加mod群问会不会!!!
很好,你终于学会了,下面我们讲解几个toolkits里的函数参数
1.null 使用的时候不用你管,可以删除
2.nodeID 点开节点,看右边有对应的,图中圈起来的就是一个nodeID,你在010模板里的一个节点的hashID和这个一样,只不过一个是十六进制,一个是十进制
3.nodeIndex或stateIndex 这个就是上图左上角的 4110 那个数字,这个一般会随着版本更新变化。
4.conditionID或conditionIndex 打开transition condition,这里面的condition的顺序和上面的派生state是一一对应的,第二个condition(编号是1,condition前的数字是从0开始的,010模板里的派生state也是)对应第二个transition state,打开一个condition,图中位置的数字就是ID
5:actionID 如图
6:action的fieldName 图中圈起来的两个都是,用的时候记得加双引号,例如
“_StartFrame"
7:FieldValue 这个一般是用来被改变的,所以只是用来验证,不太需要输入
8:condition的fieldName 图中蓝色字体的都是,同action的fieldName用法一样,需要双引号,startFrame是派生延迟时间,endFrame是这个节点开始多长时间后不能使用该派生,preFrame是按键预输入时间,cmdtype决定是什么 按键 ,剩下的几个参数你们可以看看虫技派生与普通招式的派生的有啥区别,好将虫技 按键改为不需要装备该虫技也能使用, 对应的value不再说
9:eventIndex (之前修改motfsm文件模板中的 mstates) 图中圈起来的是一个,每个state可以有不止一个event,但一般最多也就两个,更多的是一个,控制转向和气刃斩耗气,
10.event的fieldName 同样 蓝色字体就是,一般改最多的是 "_LimitAngle",也就是转向角度 value略
11.weapontype 参见toolkit的lua文件
12.剩下自己摸索或者mod群问toolkit作者
你真的准备好了吗?
首先新建一个文本文件并将后缀改为 .lua
标准的一个文件应该有这样的形式,并且加入当前武器判断以防止某些东西是公用的出错(我给的文件默认是太刀的 weaponType参见toolkits.lua的开头)。最后能在另一边打开toolkits文件,以随时寻找需要的函数(不要抄这里的test里的内容,有点问题,如果想要lua脚本模板,附件提供了最新的)
如果右边的是这样的,你应该像下面这样使用
添加一个 toolkits: 并且删除null
ok 你已经会使用函数了,那不妨养成习惯,每次写的时候加入一些注释
请使用 -- 也就是两个减号
所有代码请在 英文键盘下完成,推荐使用 vscode敲代码,标红了说明半角圆角错误。
其实和修改fsm文件一样,无非就是 增删改 三个方向,只要仔细看了toolkits文件的每个函数的注释,应该就能明白是负责什么的了
只是单纯填参数的,我们只需要找到参数 (方法在左边目录)的只需要一直填参数即可,例如
对指定node添加action 下图
对指定node添加派生,最后true是添加个默认的 编号ID为0 的event以方便后续更换event之类的 下图
修改某个见切按键(condition)的startframe为0,则是使用面向对象的方法,先定义个变量(图中 jianqie 就是我定义的变量,6760是conditionIndex , ”StartFrame“是fieldName , 0 是我修改后的 value)修改后的效果就是 可以柔化见切,其他field的修改同理
动作速度:要修改动作速度也就是修改action 里的 playmotion的某个field用如图方法【badaoerlian_obj是我定义的变量,自己随意定义变量名称,8456是拔刀二连斩action中的关于动作速度的playmotion】(加不加local就是 全局非全局变量的区别 ,具体看lua教程里的变量一讲)【此处强调,以免不知道怎么改动作速度】
其他的action的field修改如下图
这一块基础的我直接贴O佬的教程了,首先下载O佬帖子里的MotionIDBankID脚本,https://www.caimogu.cc/post/300678.html
在训练场,每次命中那个大青蛙,就会有相应的展示,如图。我们关注的是 requestSetID(因为resourceID一般都是1,_BaseDamage是你需要修改的参数)
也就是说,在函数中,param_tab像下图定义,_BaseDamage是需要修改的参数名称,90是修改后的值,图中的table就是说将动作值改为90.
然后就开始填参数,null删除,param_tab就是上图定义的table1, res_id默认1,req_id填requestSetID也就是上图的54.
那么下面玩点花的,比如像我做的那个太刀这样,在纳刀时修改水月解放斩和神威的动作值,在非纳刀时将其再改回去,以此达到特殊派生顺序增伤的效果。【这需要实时的判断,需要搭配toolkits里的getCurrentNodeID()这个函数,在我的模板里,这一块应该放在JIMOALL()这个函数内,而不是写在JIMOMAIN()区域】
再花点,不如想想怎么达到通过特殊的派生顺序,来派生一个威力巨大的招式。(比如a->a->a->切书->a->翻滚->a->纳刀->核弹威力小居合)
注意:有的招式是多段node组合,但是用bhvt等工具自己很难分析出来是哪个,比如,神威后两刀(hashID2236209221)的两刀在bhvt中都显示激活的这个节点,但是其实可能有其他节点的跳转,如果此时像我说的直接非纳刀时伤害复原就只有第一刀威力增强了,注意这种情况,并将该node加入复原情况判断中。
当然,应该不只是改动作值,其他能在rcol文件中找到的参数应该也是能改的,无非参数名称变一下。
复制函数(直接copy作者示例了)
请将自己脚本放在autorun下(平时放脚本文件的地方),然后修改完一部分后,在ref框架控制台点如图的reset,并在试验场测试,(如果用我提供的脚本模板急基础,需要将里面的变量onlytest置为true,才会在训练场生效,否则只能在任务中生效),并看下方是否报错(第一层),自己使用功能是否达到预期(第二层)
发lua时请把自己能用你脚本的 ref一起压缩进去,请把大佬的toolkits也压缩进去,建议按照ref框架路径放好(我图里只展示了 toolkits和我的脚本的相对位置关系)
如果文件特别大 使得游戏帧率下降,请用变量约束使脚本只跑一次而不是一直跑,
变量定义在re.on_frame外面
注意一些函数的生命周期不一样,如果都约束了只跑一次,你会发现切换地图后,修改数据类的全部失效,而添加数据类的依然有效,但是有时候也会有都失效,怪怪的。(我也不知道这一块我说的啥,但在游戏里确实会发生这样情况,不能理解的请跳过)
并且注意将 判断函数 重置,不然从任务返回会发现全部失效。
你可以用判断是否在任务中重置,任务外就重置为true(以上面为例),任务内允许修改fsm并且置false,注意该方法中训练场属于任务外的情况。
在任务外置true
更换武器置为true
当然也可以根据区域,就像我提供的模板里这样
当然,约束方法不止是这样!!!!也可以是其他的,比如配合是否在任务中的函数,或者其它。请开动脑筋!!!
懒得自己想的可以尝试使用我的附件lua模板
人的认知总是不断发展的
我也一样
所以有了这一板块以记载我改动了什么
0212:添加rcol用toolkits修改的教程
0212:更新了lua模板,现在模板里不再使用任务判断,而改为了区域判断,这样在训练场也能正常使用了