【教程】 唯的小白Lua教学 第四期:Lua控制台信息的使用

大家好,这里是唯。

这一期讲完我们就正式进入实战环节了。还记得第一期的Lua控制台吗?那个其实是我们在写Lua的Mod的时候很常用的辅助工具。如果你熟悉Efx,Shlp,Fsm,Lmt等游戏文件,那么,Lua控制台能给你提供更多的帮助。好了,话不多说,我们开始。

一、观察Lua控制台

安装第一期里的Lua控制台脚本,进入游戏,去训练场最好,因为后面我会提一些东西训练场才容易观察。你会发现这个控制台是可以拖动和放大缩小的。我们稍微拖动一下,如图。

我们可以看到这里有丰富的信息,从游戏数据一级一级往下点,就可以变成我图里的样子,下三角表示展开,右三角表示有可展开内容。

当然,你也可以通过这里查看你安装了哪些LuaMod,它们的名字叫什么。

打开派生信息,你也可以看到更详细的动作内容。


那么,到这里,大家应该发现了几个关键的信息,我们一一解释一下它们的作用。

先附上LuaScript的网站地址:

https://docs.alcedogroup.com/


1、地图id:对应函数为:

回忆一下我们第三期有关函数的内容,这个函数翻译过来的意思是获取游戏里的地图id,获取的函数,自然有个返回值,示例用一个局部变量local MapId来接收。

比如截图里,训练场地图id是504,我们就可以写一写简单的判断了,比如,我们这个脚本想要在训练场才触发,那么我们可以这样写:

我这里还没想好具体要做什么,所以暂时没写if里边的内容。是不是很简单呢?


2、武器类型:MHWI有14把武器,对应0 - 13

这里我装备的武器是太刀,对应3,不信的话可以拆包看一下,太刀的文件都是wp03。

这里放一张对照表:

wp00:大剑 wp01:片手 wp02:双刀 wp03:太刀 wp04:大锤

wp05:狩猎笛 wp06:长枪 wp07:铳枪 wp08:斩斧 wp09:盾斧

wp10:操虫棍 wp11:弓箭 wp12:重弩 wp13:轻弩

对应函数为:


3、武器id:武器id是指具体是哪一把武器。通过武器类型我们可以知道3是太刀,而武器id则具体到是哪一把太刀。这里是241,也就是

(注:我这里用了三天刀的幻化)

对应函数为:

他们的用法和前边的地图id用法是一致的。那么,刚才的代码,我们是不是可以做进一步,更精确的限制了呢?我们可以再加上限制,比如,它必须是太刀,并且是黑龙歼灭刀,请看:

(注:变量要先赋值了才能用,所以我这里是先获取了3个函数值,再使用)

这种写法和下边这种:

是等价的。

哪一种更好呢?其实各有千秋。

前者简单,判断也只需要单次,相对快捷。

后者复杂,判断需要多次,但是想要调整的话修改简单。

具体看个人喜好,如果是简单问题,推荐前者,也便于Lua脚本的快速响应。


4、动作id:MHWI有很多动作,这些动作有自己的编号,这个编号和Lmt文件挂钩。我们可以在游戏里用太刀右键打一个突刺,看一下它的动作id。

对应函数为:

用法和地图id的一致,不多赘述了。

那么它怎么和Lmt文件挂钩呢?(这部分内容选看,有Lmt基础者优先)

用在线网站:https://tool.oschina.net/hexconvert/

把49257转换成十六进制:

可以看到转换结果是c069。这里c指的是战斗动作,我们无视它。

把069转换回十进制:


转换结果105,开太刀的lmt文件,运行模板,找到第105号头偏移,这个,就是突刺动作的头偏移。

看到这里,你应该明白了,为什么后期动作类作者不再更新lmt表格。

一方面,吃力不讨好;另一方面,Lua控制台更直观。

通过头偏移的指针,我们可以轻松找到动画块头的地址,通过动画块头,我们可以很轻松的继续找到骨骼区(也就是动画)和判定区,然后其实一切都联系上了。

注:这个转换方法并非我原创,来自南风焓。


5、当前Fsm:

同样,我们再用一下突刺,看一下它的当前Fsm。

是3-79。同理,3指的是战斗动作的fsm,-后边的79,指的是Fsm的绝对id。

对应函数:


怎么和Fsm内容联系上呢?(这部分内容选看,有Fsm基础者优先)

我们知道,MHWI的文件大都是十六进制文件,那么Fsm里的那个绝对id自然也是十六进制。道理就很简单了,把79转换为十六进制:

是4f。那么,突刺在fsm里的绝对id就是4f。

注:这部分内容同样是南风焓的,我只是转述一下当时学的内容。

和Lmt是个包含了动画 + 判定的文件不同,Fsm是个派生表,因此工作人员很懒,他们只写有派生的动作。所以有的fsm id在Fsm里找不到,这不奇怪。想用的话自己加上就可以了(钩爪不行)。如果不会的话可以看我的fsm重置版教程。


其实还有很多有趣的东西,比如重力加速度,下落速率之类的,但是篇幅有限,正所谓:话多不甜,胶多不粘,多说无益,还是需要大家自己去了解,探索,实践。

LuaScript里还有很多函数,比如Efx的,Shlp的,可以做特效,做剑气,等等。


对了,不知道大家发现没有,其实我只讲了一半。

既然有Get(获取),那么,对应的肯定也有一组Set(设置)。代码其实都是这样的结构,一组获取值,一组设置值。

题外话,这样的一组结构,加上属性(描述一些特性的变量)和方法(函数)的公有私有,在Java里被称为JavaBean。

最后,第三期好像没作业是吧?我们留这样一份代码:


它的逻辑各位应该清楚了,如果是训练场,武器类型是太刀,且是黑龙歼灭刀,那么执行突刺动作。

请大家思考,这份代码能否在游戏里顺利运行?是否会有问题?如果有问题,为什么?怎么解决?

可以实际写写看。下一期,我们转入正式的Lua脚本编写环节,基础请一定巩固。

好的,那么,我们下期见。

by 爱尔斯蒂亚 更新于 2022-01-23
打赏后可直接下载附件 赠人玫瑰 手留余香
默认
最新
1