✓ ESS21仅限 【TA】【技能】三重攻击 EX

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
技能名 三重攻击 EX
属性 一般
类型 特殊
威力 30
命中 95

效果——
1.为3段攻击的多段攻击技能。
2.第一击的属性为火,有30%概率烧伤目标,第二击的属性为冰,有30%概率冰冻/冻伤目标,第三击的属性为电,有30%概率麻痹目标。
3.本系加成为一般系(拥有一般属性的精灵使用这个技能伤害增加50%)。
4.每一击都会显示效果拔群或者效果不好等。
5.每一击都有可能Miss或被免疫。
6.每一击都会执行(前一击没有造成伤害时,后一击会继续执行而不是直接中断技能)。
7*.(额外优化)最后显示总共打了几下只统计实际造成伤害的下数。(预览视频未做这一条)

例子:
3D龙使用这个技能打地面系时,第三击会被免疫,第一击和第二击如果没有Miss就会正常造成伤害。
3D龙使用这个技能打引火的地面系时,第一击和第三击会被免疫,第二击如果没有Miss就会正常造成伤害。

或者,也可以使用特性来控制,比如——
特性名 数据升级
效果 将三重攻击升级为EX,大幅强化三重攻击的技能效果。

一个有挑战性的技能效果。
 
最后编辑:

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
揭秘时间——
这个技能的效果很多很复杂,但是其实真正有难点的是第二点和第六点。
其他的一些的话我相信你自己好好稍微琢磨一下也都是能够实现的。
所以后面我们就来说一下第二点和第六点。
当然说是这么说,但我其实并不会解释的非常详细,只会大概说一下思路,剩下的就是你自己去动手实践了。
 

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
1724480520097.png
Ruby:
class Battle::Move::HitThreeTimesParalyzeBurnOrFreezeTarget < Battle::Move
  def multiHitMove?;            return true; end
  def pbNumHits(user, targets); return 3;    end

  def pbOnStartUse(user, targets)
    user.check_every_hit = true
  end
 
  def pbEffectAgainstTarget(user, target)
    return if target.damageState.substitute
    return if @battle.pbRandom(100) >= 20
    case user.current_hit
    when 0 then target.pbBurn(user) if target.pbCanBurn?(user, false, self)
    when 1 then target.pbFreeze if target.pbCanFreeze?(user, false, self)
    when 2 then target.pbParalyze(user) if target.pbCanParalyze?(user, false, self)
    end
  end

  def pbEffectAfterAllHits(user, target)
    user.check_every_hit = false
    user.current_hit = 0
  end
end
这是三重攻击的代码,简单的说就是需要额外加两个变量。
第一个变量是check_every_hit,用来标记是否应该对每一击都单独计算属性和免疫;
第二个变量是current_hit,用来标记当前正在执行的是哪一击。
 
最后编辑:

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
找到这个方法——
1724480886997.png
Ruby:
  def pbSuccessCheckAgainstTarget(move, user, target, targets, hitNum = 0)
    show_message = move.pbShowFailMessages?(targets)
  
    if user.check_every_hit
      user.current_hit = hitNum
      case hitNum
      when 0 then move.calcType = :FIRE
      when 1 then move.calcType = :ICE
      when 2 then move.calcType = :ELECTRIC
      end
    end
你的这个方法可能跟我的很不一样,这其实不重要,重点是我上面代码的这部分,请自行对比研究。
这里是根据当前是哪一击,然后对这一击应用不同的属性。

但是,我们看这个方法上面的注释就会发现,这个方法只会在最开始检查一次,所以我们还需要找到调用这个方法的地方,让这个方法在每一击执行时都检查。
 
最后编辑:

TAAAAAAA

天王
管理成员
2024/06/16
200
3
27
1,210
找到这个方法——
1724481621435.png
Ruby:
    if user.check_every_hit
      targets.each do |b|
        b.damageState.reset
        next if pbSuccessCheckAgainstTarget(move, user, b, targets, hitNum)
        b.damageState.unaffected = true
      end
    end

以及这里——
1724482516082.png
这里是自由者的代码下面一点点的地方。

这样就会每一击都会执行了。

简单的说就是——
1.每一击都会执行;
2.每一击执行时会都重新检查当前击的属性。

感谢阅读。
 

在线成员

论坛统计

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