006 Call More
这期教程,我们再来做一个接入新的Handler的实践。
网站里有个凤凰涅槃的特性,原地址:https://bbs.pokefans.xyz/threads/244/,这个特性我个人不是很满意,因为这个特性只有在被技能打死时才会发动,由于其他原因濒死时并不会发动。
我现在想要修改这个特性,让这个特性只要是在濒死时,就会发动,无论造成濒死的原因是什么。
那么我们现在就要思考,这个特性应该放到哪个Handler下?
很容易就能想到,应该是当自身濒死时,怎么怎么样的这样一个Handler下。
那么我们就去找一下,是否已有这样效果的Handler。
经过查找,跟濒死相关的Handler有两个,一个是魂心所用到的OnBattlerFainting,另一个是化学之力所用到的ChangeOnBattlerFainting。
这两个Handler实际上都不能满足我们的要求,为什么?
我们可以来看一下,魂心的效果是,当场上有精灵濒死时,自身的特攻增加1级。
所以OnBattlerFainting里面的battler,指的就是场上的精灵,ChangeOnBattlerFainting也是同理,而我现在想要的,是自身濒死时。
所以,我们可以这样加一个新的Handler——
OnSelfFainting,这样就是当自身濒死时,怎么怎么样了。
接着,我们就再找一下OnBattlerFainting对应的参数方法——
这样,增加上OnSelfFainting的参数方法——
OnSelfFainting只需要ability、battler和battle这3个参数就够了,并不需要其他参数。
接着,我们再搜索一下triggerOnBattlerFainting,看一下OnBattlerFainting是怎么接入到战斗系统中的——
我们找到了pbAbilitiesOnFainting方法,可以看到“Self fainted; check all other battlers to see if their abilities trigger”这么一行字,这一行字的意思是说当自身濒死时,检查其他精灵是否有特性要发动。
而我们要的是,当自身濒死时,检查自身是否要特性要发动,这并不是我们要的,所以我们还要继续搜索,我们现在搜索一下pbAbilitiesOnFainting,看一下这个方法在哪里被调用了——
我们找到了一个叫做pbFaint的方法,这个方法是处理精灵濒死时调用的方法,显然这就是我们需要的。
我们看这个方法的最前面——
显然我们只需要把OnSelfFainting接入到这个if前面就好了。
那我们就模仿pbAbilitiesOnFainting,也新写一个叫做pbAbilitiesOnSelfFainting的方法。
接着再回到def pbAbilitiesOnFainting,在它的上面定义我们的pbAbilitiesOnSelfFainting——
这期教程,我们再来做一个接入新的Handler的实践。
网站里有个凤凰涅槃的特性,原地址:https://bbs.pokefans.xyz/threads/244/,这个特性我个人不是很满意,因为这个特性只有在被技能打死时才会发动,由于其他原因濒死时并不会发动。
我现在想要修改这个特性,让这个特性只要是在濒死时,就会发动,无论造成濒死的原因是什么。
那么我们现在就要思考,这个特性应该放到哪个Handler下?
很容易就能想到,应该是当自身濒死时,怎么怎么样的这样一个Handler下。
那么我们就去找一下,是否已有这样效果的Handler。
经过查找,跟濒死相关的Handler有两个,一个是魂心所用到的OnBattlerFainting,另一个是化学之力所用到的ChangeOnBattlerFainting。
这两个Handler实际上都不能满足我们的要求,为什么?
我们可以来看一下,魂心的效果是,当场上有精灵濒死时,自身的特攻增加1级。
所以OnBattlerFainting里面的battler,指的就是场上的精灵,ChangeOnBattlerFainting也是同理,而我现在想要的,是自身濒死时。
所以,我们可以这样加一个新的Handler——
OnSelfFainting,这样就是当自身濒死时,怎么怎么样了。
接着,我们就再找一下OnBattlerFainting对应的参数方法——
这样,增加上OnSelfFainting的参数方法——
OnSelfFainting只需要ability、battler和battle这3个参数就够了,并不需要其他参数。
接着,我们再搜索一下triggerOnBattlerFainting,看一下OnBattlerFainting是怎么接入到战斗系统中的——
我们找到了pbAbilitiesOnFainting方法,可以看到“Self fainted; check all other battlers to see if their abilities trigger”这么一行字,这一行字的意思是说当自身濒死时,检查其他精灵是否有特性要发动。
而我们要的是,当自身濒死时,检查自身是否要特性要发动,这并不是我们要的,所以我们还要继续搜索,我们现在搜索一下pbAbilitiesOnFainting,看一下这个方法在哪里被调用了——
我们找到了一个叫做pbFaint的方法,这个方法是处理精灵濒死时调用的方法,显然这就是我们需要的。
我们看这个方法的最前面——
显然我们只需要把OnSelfFainting接入到这个if前面就好了。
那我们就模仿pbAbilitiesOnFainting,也新写一个叫做pbAbilitiesOnSelfFainting的方法。
接着再回到def pbAbilitiesOnFainting,在它的上面定义我们的pbAbilitiesOnSelfFainting——