✓ ESS21仅限 【TA】【特性】020 Power Pursuer(0624)

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
020 Example:Power Pursuer

这期教程,我们继续来讲解特性实例。

那么,这期教程我们要讲解的是追求超力量。
追求超力量(Power Pursuer)——
出场时,如果已超级进化,全能力增加2级,反之,减少1级。

这个特性来自——
1722488292204.png

ES已经编写了除5之外的所有特性,可以去看这个帖子:https://bbs.pokefans.xyz/threads/244/

这里,我们把ES没有完成的5给完成。
1722488343787.png
5: 追求超力量
此特性的宝可梦在进行超进化后会更强大(进化后攻击,防御,特攻,特防,速度各提升2级,在出场时攻击,防御,特攻,特防,速度各下降1级。)

首先是PBS部分——
1722488354688.png

接着——
1722488366956.png

这就是全部的代码了,这个特性看描述的话,可能会觉得有点复杂,但是实际上并不复杂。
其中一个重要的原因就是,在精灵进行Mega进化之后,是视为重新上场的。
所以这个特性的两个效果,并不需要写到两个地方,都写到OnSwitchIn这个Handler下就可以了。
我们只需要在特性发动的时候检查一下精灵本身是否已经是Mega进化了就可以了,根据自身是否处于Mega进化,发动不同的效果。

当然,就算知道了这点,你写的代码和我写的可能也是不一样的。
这里我再强调一遍,你现在才刚开始学,所以并不需要去考虑太多其他的东西,只需要专注于实现你想要的效果就可以了。

那么我们现在来看一下这个特性的代码——
Ruby:
Battle::AbilityEffects::OnSwitchIn.add(:POWERPURSUER,
  proc { |ability, battler, battle, switch_in|
    stats = []
    if !battler.mega?
      GameData::Stat.each_main_battle { |s| stats.push(s.id) if battler.pbCanLowerStatStage?(s.id, battler) }
    else
      GameData::Stat.each_main_battle { |s| stats.push(s.id) if battler.pbCanRaiseStatStage?(s.id, battler) }
    end
    next if stats.empty?
    battle.pbShowAbilitySplash(battler)
    anim = true
    if !battler.mega?
      stats.each do |s|
        battler.pbLowerStatStageByAbility(s, 1, battler, false, false, anim)
        anim = false
      end
    else
      stats.each do |s|
        battler.pbRaiseStatStageByAbility(s, 2, battler, false, anim)
        anim = false
      end
    end
    battle.pbHideAbilitySplash(battler)
  }
)

首先,根据精灵是否Mega,执行不同的检查。
我们可以使用mega?这个方法来检查精灵是否处于Mega。
如果精灵没有Mega,我们就把所有能减少能力等级的能力添加到stats数组中;
如果精灵Mega了,我们就把所有能增加能力等级的能力添加到stats数组中。
接着,我们检查stats数组中是否有元素,如果没有任何元素,那么这个特性就不会发动。
确定特性会发动之后,出特性条,特性效果处理,特性条消失。

其中,在特性效果处理阶段,还是需要根据精灵是否Mega分情况做不同的处理。
pbLowerStatStageByAbility用来减少能力等级,pbRaiseStatStageByAbility用来增加能力等级。
到目前为止应该都是比较简单,也没什么新花样的东西。
关键的其实是在这两个方法后面的参数,即——
pbLowerStatStageByAbility(s, 1, battler, false, false, anim)和pbRaiseStatStageByAbility(s, 2, battler, false, anim)。
当然,如果你只是这样写——
pbLowerStatStageByAbility(s, 1, battler)和pbRaiseStatStageByAbility(s, 2, battler)。
在效果实现方面没有什么问题,但是,如果你这样写的话,那么每一项能力增加,都会重新出现特性条提示,也就是说看上去像是发动了6次特性,每次发动增加或者减少一项能力。
这显然不是我们想要的,我们想要的是特性条只出现一次。
所以,你至少要这样写——
pbLowerStatStageByAbility(s, 1, battler, false)和pbRaiseStatStageByAbility(s, 2, battler, false)。
第四个参数false,就是不显示特性条的意思,我们不需要它再额外显示,我们在特性确定发动的那个时候,就已经是显示特性条了。
如果你到达了这里,那么暂且可以称为是一个合格的特性了。

但是,这个特性依然还有优化的空间。
那就是,目前,在特性发动的时候,每一次能力增加或者减少时,都会显示动画,也就是说,会显示6次能力增加或者减少的动画,这实际上是非常恼火的,更不要说现在的人连用正常速度游玩游戏都做不到。
也就是说,我们希望能力增加的动画也只显示一次。
所以——
1722488402510.png
我们在后面继续加一个参数,并且通过anim这个变量来传递这个参数。
也就是说,我们只需要在第一次能力增加时,anim是true,也就是显示动画,而后面的能力增加,不需要显示动画,所以anim都是false。

在这里,我们新增加了一个参数,用来控制是否显示能力增加的动画,true就显示,false就不显示。
但是,仅仅这样是不够的,你还需要在定义pbLowerStatStageByAbility和pbRaiseStatStageByAbility的地方同样增加上这个参数,要不然的话你只是多传递了一个true或者false。
并且,因为你多传递了一个参数,所以,在这个特性发动时,就会报错。

那么——
1722488414404.png
1722488420956.png
绿色的部分就是新增加的。
这样,动画就只会显示一次,也不会报错了。

那么,我们总结一下,关于这个特性,就是,出场时,如果自身没有Mega,那么就全能力减少1级;
如果自身已经Mega了,那么就全能力增加2级。
并且,特性发动时,特性条只会出现一次,能力增加时,能力增加的动画也只会显示一次。

那么,请自行进入游戏中测试这个特性。

那么这期教程就到此为止。

视频预览(0801)——

浏览附件2024-08-01 22-21-00.mp4

感谢阅读。
 
最后编辑:

在线成员

论坛统计

主题
474
消息
2,137
成员
2,909
最新成员
小灵喵~