✓ ESS21仅限 【TA】【特性】003 Argument(0618)

TAAAAAAA

天王
管理成员
2024/06/16
241
4
36
1,270
003 Argument

那么我们现在来看第二个板块。

说实话,如果要详细解释第二个板块的内容的话,其实是比较复杂的,而且也并不是很有必要。

我们只需要知道一点——
第二个板块决定了第一个板块中的Handler的可用的参数,也就是Argument。

第二个板块它其实是一系列的Method,也就是方法,每一个方法对应了一个Handler,这些方法传递了一些参数,而这些参数就是对应的Handler的可用参数,我们暂且把这些方法称为参数方法。
如果你理解不了“方法”这两个字的话,实际上也没关系,并不需要深入了解,它仅仅就是一个名字而已。

你在写对应的特性的代码的时候,只允许使用参数方法提供的参数,也就是说,方法里没有的参数,你是用不了的。
不要自创参数!
不要自创参数!
不要自创参数!
重要的事情说三遍。

那么你用了参数方法里没有的参数会怎么办?
那么在你运行到相应的代码的时候就会报错!

到目前为止的话,我们已经是大概知道了,第一个板块是决定了有哪些Handler,而第二个板块是决定了每一个Handler的可用参数。
那第三个板块的作用呢?
大家现在其实已经可以猜一下了。

那么,我们现在来看一下EndOfRoundEffect这个Handler,先找到EndOfRoundEffect对应的参数方法——
1719732482022.png
那么这个方法传递了什么参数呢?
传递了什么参数就只需要看括号里的内容!

这个时候可能有同学就会说了,这里有两个括号啊,因为我发现有些参数方法里面两个括号的内容是不一样的,一样的那很简单,如果是不一样的,那应该看哪个括号呢?
1719732495004.png
看第一个括号,也就是第一行的括号!

也就是说,对于EndOfRoundEffect这个参数方法,它传递了,或者说提供了3个参数,分别是ability、battler和battle这3个参数。

我们再来看一个,往上找到OnBeingHit的参数方法——
1719732512067.png
那么OnBeingHit这个方法传递了什么参数呢?
这个参数方法传递了5个参数,分别是ability、user、target、move和battle。

我们在上一期教程中新建了一个StartOfRoundEffect,那么现在我们就可以给它补上对应的参数方法。
因为StartOfRoundEffect和EndOfRoundEffect是一样的,它们仅仅只是发动的时机不同,一个是回合开始时,一个是回合结束时,所以它们的参数也是一样的。
那么,这里我们只需要复制粘贴EndOfRoundEffect的参数方法,接着再照着格式修改一下就好了——
1719732538013.png
那是不是StartOfRoundEffect这样就可以用了呢?
实际上并不是,不信的话你可以自己动手试一试。

你要让StartOfRoundEffect可以使用,实际上还是比较复杂的,至少目前还是不能用,是无效的。
你其实可以想一下,StartOfRoundEffect和EndOfRoundEffect,目前除了名字之外是一模一样的,可是EndOfRoundEffect是有效的,而StartOfRoundEffect却是无效的,这就说明还有其他的什么地方需要完善代码之后,才能使StartOfRoundEffect生效。

最后,我们再来看一个这个参数方法——
1719732553807.png
这是CriticalCalcFromUser的参数方法,CriticalCalcFromUser是计算命中要害时的Handler。
这个参数方法传递了4个参数,分别是ability,user,target,crit_stage。
接着你就会神奇的发现,这个参数方法竟然没有传递move,move就是技能。
这个Handler是在使用技能进行攻击,计算是否命中要害时发动的,那么传递当前正在使用的技能应该是必要且应当的,但是它却没有。

这也引出了一个问题,那就是,我要完成的代码需要使用到参数方法没有提供的参数该怎么办?

比如说,我现在有这么一个特性——自身使用的基础威力60以下的技能必定会命中要害。
暂且把这个特性叫做猛击吧,也就是说,猛击应当是放到CriticalCalcFromUser里的,但是因为CriticalCalcFromUser没有传递move这个参数,所以猛击的代码在CriticalCalcFromUser里是无法完成的。

那这个时候该怎么办呢?
有两种办法,第一种,把猛击写到其他地方;
第二种,扩展CriticalCalcFromUser的参数方法,使其传递move。

第一种我们暂且就不说了,我们来看一下第二种方法,可能有同学会这样做——
1719732567900.png
既然它没有move,那我给他加上move不就好了吗?
遗憾的是,事情远没有这么简单,你如果只是在参数方法里加上了move的话,那么在运行时只会报错。
实际上,在你没有深入了解和理解代码时,我也不推荐你去扩展参数,它提供了什么,你就用什么,不要乱加参数,也不要自创参数。

那么到底该怎么才能新加一个参数呢?
实际上,你需要全局搜索triggerCriticalCalcFromUser,并在每一个搜索到的结果里都加上你要加的参数。
然而,就算你不怕麻烦想要新加参数,我也不推荐你去加,因为这可能会产生一系列的潜在兼容性问题,尤其是在涉及到AI和装其他插件的时候,甚至是你搜索到的那个地方都不允许你加你想要加的那个参数。
参数不仅不是你想加就能加,而且也不是什么参数都可以加,只有某些特定的参数才能加。
比如说,你想要加一个参数,这个参数叫ass,你觉得你能加成功吗?

下一期教程,我们将会讲解第三个板块的相关内容。

感谢阅读。
 

在线成员

现在没有成员在线。

最新帖子

论坛统计

主题
517
消息
2,352
成员
3,007
最新成员
ZQLdw