这个帖子我们来看一下这个技能该如何实现。
招式:冰钩 属性:冰 物理
威力:90 pp:10 命中:100
被命中的宝可梦进行替换时会再受到一次此招式的伤害
参考:https://bbs.pokefans.cn/threads/230/
关于这个技能,总得来说的话,难点就在于技能的效果,而不在于技能本身,所以我们也就不新创建技能了。
我们只需要把这个效果做出来,接着给需要这个效果的技能分配这个效果就好了。
这个效果是——被该技能命中的精灵替换时,会再受到一次这个技能的伤害。
我们从描述入手,大概可以预见,我们需要新增加两个基于battler的变量。
一个用于记录被这个技能命中的精灵,另一个用于记录这个技能造成的伤害。
所以,新增加变量——
![1721484059543.png 1721484059543.png](https://bbs.pokefans.cn/data/attachments/2/2477-43c09f36bb3198671eeb0e5f1298a092.jpg)
初始化——
![1721484118380.png 1721484118380.png](https://bbs.pokefans.cn/data/attachments/2/2478-55485250554350eec2853abe9330e396.jpg)
接着,搜索pbEffectsAfterMove,并修改代码如下——
![1721484239032.png 1721484239032.png](https://bbs.pokefans.cn/data/attachments/2/2479-6535ae6925ea0c9e8b1db835772c2a5a.jpg)
这里是在技能成功造成伤害之后,记录精灵被这个技能造成了伤害。
也就是说,具有这个“标记”的精灵,才会在替换时再次受到伤害。
这里用了一个新方法switchSoftLockMove?,我们需要给它定义一下,搜索pbInflictHPDamage,在上方增加如下代码——
![1721484508129.png 1721484508129.png](https://bbs.pokefans.cn/data/attachments/2/2480-aa1efa18e6c023dd69d1e496ef1dc896.jpg)
这个方法用于检查哪些技能具有这个效果。
目前还有没任何技能具有这个效果,那我们就把电光加进去,让电光具有这个效果——
接着,搜索pbReduceDamage——
![1721484756195.png 1721484756195.png](https://bbs.pokefans.cn/data/attachments/2/2481-f63510ed4bf57ff944f75e438d2fd10a.jpg)
找到这个方法的最后面,加上一行——
![1721484789826.png 1721484789826.png](https://bbs.pokefans.cn/data/attachments/2/2482-251c3b06b57eb6a1d6851ddb9a6384f9.jpg)
这里记录下这个技能造成的实际伤害。
到目前为止,我们达成了——
1.哪些技能具有这个效果
2.哪些精灵会受到这个效果
3.这个效果生效时会造成的伤害
也就是说,我们还需要最后一步,那就是,在受到这个效果的精灵替换时,应用伤害。
搜索pbAttackPhaseSwitch,并增加一行代码——
![1721485176625.png 1721485176625.png](https://bbs.pokefans.cn/data/attachments/2/2483-6a58268f93eccf28611df932e31d98da.jpg)
在上方新增加一个pbSwitchLockedCost方法——
![1721485599305.png 1721485599305.png](https://bbs.pokefans.cn/data/attachments/2/2485-f8f3172f811e12471e5a80e60e3b01f5.jpg)
这里是应用伤害。
这样就好了。
视频预览——
浏览附件2024-07-20 22-30-04.mp4
感谢阅读。
招式:冰钩 属性:冰 物理
威力:90 pp:10 命中:100
被命中的宝可梦进行替换时会再受到一次此招式的伤害
参考:https://bbs.pokefans.cn/threads/230/
关于这个技能,总得来说的话,难点就在于技能的效果,而不在于技能本身,所以我们也就不新创建技能了。
我们只需要把这个效果做出来,接着给需要这个效果的技能分配这个效果就好了。
这个效果是——被该技能命中的精灵替换时,会再受到一次这个技能的伤害。
我们从描述入手,大概可以预见,我们需要新增加两个基于battler的变量。
一个用于记录被这个技能命中的精灵,另一个用于记录这个技能造成的伤害。
所以,新增加变量——
![1721484059543.png 1721484059543.png](https://bbs.pokefans.cn/data/attachments/2/2477-43c09f36bb3198671eeb0e5f1298a092.jpg)
Ruby:
attr_accessor :switchSoftLock
attr_accessor :switchCost
![1721484118380.png 1721484118380.png](https://bbs.pokefans.cn/data/attachments/2/2478-55485250554350eec2853abe9330e396.jpg)
Ruby:
@switchSoftLock = false
@switchCost = 0
接着,搜索pbEffectsAfterMove,并修改代码如下——
![1721484239032.png 1721484239032.png](https://bbs.pokefans.cn/data/attachments/2/2479-6535ae6925ea0c9e8b1db835772c2a5a.jpg)
Ruby:
if move.switchSoftLockMove?
targets.each do |b|
next if b.damageState.unaffected || b.damageState.substitute
@battle.pbDisplay(_INTL("{1}受到了重创!", b.pbThis))
b.switchSoftLock = true
end
end
也就是说,具有这个“标记”的精灵,才会在替换时再次受到伤害。
这里用了一个新方法switchSoftLockMove?,我们需要给它定义一下,搜索pbInflictHPDamage,在上方增加如下代码——
![1721484508129.png 1721484508129.png](https://bbs.pokefans.cn/data/attachments/2/2480-aa1efa18e6c023dd69d1e496ef1dc896.jpg)
Ruby:
def switchSoftLockMove?
[].include?(@id)
end
目前还有没任何技能具有这个效果,那我们就把电光加进去,让电光具有这个效果——
Ruby:
def switchSoftLockMove?
[:SPARK].include?(@id)
end
接着,搜索pbReduceDamage——
![1721484756195.png 1721484756195.png](https://bbs.pokefans.cn/data/attachments/2/2481-f63510ed4bf57ff944f75e438d2fd10a.jpg)
找到这个方法的最后面,加上一行——
![1721484789826.png 1721484789826.png](https://bbs.pokefans.cn/data/attachments/2/2482-251c3b06b57eb6a1d6851ddb9a6384f9.jpg)
Ruby:
target.switchCost = damage if switchSoftLockMove?
到目前为止,我们达成了——
1.哪些技能具有这个效果
2.哪些精灵会受到这个效果
3.这个效果生效时会造成的伤害
也就是说,我们还需要最后一步,那就是,在受到这个效果的精灵替换时,应用伤害。
搜索pbAttackPhaseSwitch,并增加一行代码——
![1721485176625.png 1721485176625.png](https://bbs.pokefans.cn/data/attachments/2/2483-6a58268f93eccf28611df932e31d98da.jpg)
Ruby:
pbSwitchLockedCost(b)
![1721485599305.png 1721485599305.png](https://bbs.pokefans.cn/data/attachments/2/2485-f8f3172f811e12471e5a80e60e3b01f5.jpg)
Ruby:
def pbSwitchLockedCost(battler)
return if !battler.switchSoftLock
@switching = true
pbDisplay(_INTL("{1}受到了2次伤害!", battler.name))
battler.switchSoftLock = false
@scene.pbDamageAnimation(battler)
battler.pbReduceHP(battler.switchCost, false)
battler.pbFaint if battler.fainted?
@switching = false
end
这样就好了。
视频预览——
浏览附件2024-07-20 22-30-04.mp4
感谢阅读。
最后编辑: