✓ ESS21仅限 【TA】【特性】006 Call More(0701)

TAAAAAAA

天王
管理成员
2024/06/16
241
4
36
1,270
006 Call More

这期教程,我们再来做一个接入新的Handler的实践。

网站里有个凤凰涅槃的特性,原地址:https://bbs.pokefans.xyz/threads/244/,这个特性我个人不是很满意,因为这个特性只有在被技能打死时才会发动,由于其他原因濒死时并不会发动。
我现在想要修改这个特性,让这个特性只要是在濒死时,就会发动,无论造成濒死的原因是什么。

那么我们现在就要思考,这个特性应该放到哪个Handler下?
很容易就能想到,应该是当自身濒死时,怎么怎么样的这样一个Handler下。

那么我们就去找一下,是否已有这样效果的Handler。
1719833567331.png
经过查找,跟濒死相关的Handler有两个,一个是魂心所用到的OnBattlerFainting,另一个是化学之力所用到的ChangeOnBattlerFainting。

这两个Handler实际上都不能满足我们的要求,为什么?
我们可以来看一下,魂心的效果是,当场上有精灵濒死时,自身的特攻增加1级。
所以OnBattlerFainting里面的battler,指的就是场上的精灵,ChangeOnBattlerFainting也是同理,而我现在想要的,是自身濒死时。
所以,我们可以这样加一个新的Handler——
1719833584201.png
OnSelfFainting,这样就是当自身濒死时,怎么怎么样了。

接着,我们就再找一下OnBattlerFainting对应的参数方法——
1719833600624.png
这样,增加上OnSelfFainting的参数方法——
1719833612545.png
OnSelfFainting只需要ability、battler和battle这3个参数就够了,并不需要其他参数。

接着,我们再搜索一下triggerOnBattlerFainting,看一下OnBattlerFainting是怎么接入到战斗系统中的——
1719833626443.png
1719833636244.png
我们找到了pbAbilitiesOnFainting方法,可以看到“Self fainted; check all other battlers to see if their abilities trigger”这么一行字,这一行字的意思是说当自身濒死时,检查其他精灵是否有特性要发动。
而我们要的是,当自身濒死时,检查自身是否要特性要发动,这并不是我们要的,所以我们还要继续搜索,我们现在搜索一下pbAbilitiesOnFainting,看一下这个方法在哪里被调用了——
1719833650836.png
1719833659999.png
我们找到了一个叫做pbFaint的方法,这个方法是处理精灵濒死时调用的方法,显然这就是我们需要的。

我们看这个方法的最前面——
1719833682296.png
显然我们只需要把OnSelfFainting接入到这个if前面就好了。

那我们就模仿pbAbilitiesOnFainting,也新写一个叫做pbAbilitiesOnSelfFainting的方法。
1719833701392.png

接着再回到def pbAbilitiesOnFainting,在它的上面定义我们的pbAbilitiesOnSelfFainting——
1719833745781.png
 

TAAAAAAA

天王
管理成员
2024/06/16
241
4
36
1,270
那么,这样就好了吗?
并不是,眼尖的同学可能发现了,其他两个Handler接入的时候都有检查abilityActive?,那我们这个Handler需不需要呢?
实际上,到底需不需要取决于意图。

那么,abilityActive?是检查什么呢?
这个问题我在之前的教程中已经说过该如何寻找答案了,请自行思考,这里我就不说答案了。

这里的话就我个人来说,我倾向于这样——
1719833809797.png
那这样,我们就把OnSelfFainting接入到战斗系统中了。

接着只需要在特性效果文件里写好特性的代码就好了——
这个涅槃的代码我已经经过简化了,并且我#了两行,分别是next if battler.reborn?和battler.setReborn,这个时候可能就会有同学问了,#是什么意思啊?
#的意思就是添加注释,注释就是解释,有时候我们会在代码的后面加上一些说明性的文字,用来更好的理解这段代码做了什么,当然了,这些文字只是用来说明的,它并不是实际代码的一部分。
比如说我们前面看到的“Self fainted; check all other battlers to see if their abilities trigger”,这就是一段注释。
也就是说呢,程序在运行的时候,会自动忽略#后面的内容。

那么为什么要注释掉那两行呢?
这个问题我们下期教程再说。

那么,代码写好了之后,也别忘了在PBS里添加上特性——
1719833850873.png

然后,我们打开游戏测试一下这个特性是否生效——
1719833865152.png
1719833872348.png
让皮卡丘中毒,只保留1HP,并且确保对手没有攻击技能,让皮卡丘毒死,看特性是否会发动。
1719833885966.png
对手的妙蛙种子只有一个叫声。
1719833898366.png
1719833908061.png
1719833918797.png
1719833927612.png
1719833936861.png
1719833944221.png
成功了,特性运行没有问题。

视频预览(0701)——

浏览附件2024-07-01 21-38-13.mp4

那么这期教程就到此为止,下期教程我们将会讲解如何使用外部变量。

感谢阅读。
 

Lrh666

宝可梦训练家
2023/10/15
11
0
230
20
北京
battle和battler里的方法也要记吗,写特性效果应该要很熟悉它们吧?
 

TAAAAAAA

天王
管理成员
2024/06/16
241
4
36
1,270
battle和battler里的方法也要记吗,写特性效果应该要很熟悉它们吧?
就我个人来说不太需要刻意去记,写得多了自然就知道有哪些方法了;
你如果想要写得快的话,肯定要很熟悉;
但是你就算不熟悉,也可以通过从已有的效果开始着手,所以熟悉方法并不是必要条件。
 

在线成员

现在没有成员在线。

最新帖子

论坛统计

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