【MHRS】ref新手教程 第三期:method
引言

前两期主要对修改field做了初步介绍,但field的功能限制于它的数量

而这期介绍的method/方法可以实现的功能远比field强大的多

在思考一个东西怎么实现的时候,第一想法应该是找有没有现成的method可以使用,找到一个适合的method可以省下一堆事

GIF 

至于method是什么,可以简单理解为函数


这里给常见的方法类型分个类,当然这个分类是完全不准的

主要是对常见的几种方法留个大概印象

方法调用的简例

call就是调用的意思

refbook里关于调用obj下面的method是这么写的

对于method,大致用法有三类:拿数据,直接调用,hook

如果你对第一期还有印象的话,应该记得有一个种可以类比指针的方法,就是get类,它一般指向一个特定的field

以上期的技能参数的field来说

我们是使用了get_field来拿到技能参数

对method进行检索

可以发现一个get_RefSkillParameter的方法

等等,名字都对不上啊,你怎么知道这个方法拿的东西是什么?

这时候你只需要看看方法左边的白字,这个就是它的拿到的那个类,这个类和field里的技能参数的类是一样的

所以我们调用这个方法也可以拿到技能参数

这里再给个小技巧,右键这个方法,点击copy name可以直接复制这个方法的名称(field不行)

因此对于拿到技能参数,也可以这么写,和那句get_field是完全等价的

括号可有可无

总结就是,对于一些我们想要的数据,并不一定能在field里找到,或者说一些时候通过field找不如method方便,此时方法是更优解

举个比较经典的例子

sdk.get_managed_singleton("snow.player.PlayerManager"):call("findMasterPlayer")

tip:manager经常被缩写为man,不要想当然认为是男人

就是这个你几乎会在所有mod里见到的findMasterPlayer

它指向的是本地玩家的PlayerBase,也就是玩家列表里index为0的那个

根据武器的不同这个也会相应变化,要找本地玩家的数据,call这个方法是最简单的

至于masterPlayer这个,后面单独开一期来讲,因为很实用

至于set型,如果你懂了get型是直接拿到一个类,那你也会懂set型就是直接对那个类进行操作

例如弓下面的这个方法,设置当前蓄力等级

使用的话,看好括号内的输入参数类型,他不是一般的Int或者float,所以我们去看看snow.player.Bow.ChargeLevel到底是个什么

到搜索框里搜索这个类名,可以发现它是Enum,也就是枚举类型,这意味着他只能取一些特定的值(还有种是位枚举,到时再开一期单独讲),并且这个值的输入类型是System.Int32(value__),可以看到四个蓄力等级Lv1到Lv4,取Lv4,它的值是3

所以要使用这个方法把蓄力等级设置为Lv4的话,这么写(为什么要知道它的取值范围呢,因为像一些数值超出范围,轻则报错重则闪退,平常需要多注意)

而像设置太刀气刃槽数值的话

他只需要输入一个System.Single(单精度浮点型),所以这里输入数值就随意(不过还是得注意,原本的气刃槽数值范围是0~100,至于超出了原本的上限会怎么样,我也不知道)

结尾

如果觉得有疑问,欢迎在评论区提问

这期到此结束,我们下期再见

GIF 

by 乐小乐 更新于 2024-05-01
若有附件,打赏后可直接下载 赠人玫瑰 手留余香
默认
最新


1