查看: 4295|回复: 2

[已经解决] 为什么这个物理反弹的脚本会出错?

[复制链接]
梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
发表于 2020-9-9 15:36:01 | 显示全部楼层 |阅读模式
悬赏50星屑已解决
本帖最后由 fbeds 于 2020-9-9 15:48 编辑

我使用了以下脚本实现物理反弹的效果,不过当使用原来的“反击”效果时会出错。我方角色可以正常发动原来的反击,但是敌人发动反击时却会出现错误。请问到底是怎么回事?
[pre lang="ruby"]=begin
===============================================================================
  物理伤害反弹
===============================================================================

【说明】
  
  当满足条件时,角色原本应该发动的物理反击效果会变成物理反弹
  物理反弹效果是指敌人无法攻击自己同时自己会用相同的技能进行反击
  与物理反击不同,攻击方和防御方的各项能力仍然沿用原来的数据
  即
  用敌人的攻击力和自己的防御力计算敌人所受到的伤害

=end
$m5script = {} if $m5script.nil?
$m5script["M5Reflect"] = true
module M5Reflect
#==============================================================================
#  设定部分
#==============================================================================
  
  HINT = "%s反弹了物理伤害!"
  
  #这里设置物理反弹时的提示文字
  # %s 表示对象的名字
  
  STATE = [49]
  
  #当角色处于上面数字对应ID的状态时,物理反击的效果变成物理反弹的效果
  
  WEAPON = []
  
  #当角色装备上面数字对应ID的武器时,物理反击的效果变成物理反弹的效果
  
  ARMOR = []
  
  #当角色装备上面数字对应ID的防具时,物理反击的效果变成物理反弹的效果

#==============================================================================
#  设定结束
#==============================================================================
end
class Window_BattleLog < Window_Selectable
  def display_m5_reflection(target, item)
    Sound.play_evasion
    add_text(sprintf(M5Reflect::HINT , target.name))
    wait
    back_one
  end
end
class Scene_Battle < Scene_Base
  alias m5_20131123_invoke_counter_attack invoke_counter_attack
  def invoke_counter_attack(target, item)   
    if (m5_state_include(target.states)) or (m5_equip_include(target))
      @log_window.display_m5_reflection(target, item)
      apply_item_effects(@subject, item)
    else
      m5_20131123_invoke_counter_attack(target, item)
    end
  end  
  def m5_state_include(state)
    state = state.collect {|state| state.id }
    (state | M5Reflect::STATE).size != state.size + M5Reflect::STATE.size
  end
  def m5_equip_include(actor)
    weapon = actor.weapons.collect {|weapons| weapons.id }
    armor = actor.armors.collect {|armors| armors.id }
    (weapon | M5Reflect::WEAPON).size != weapon.size + M5Reflect::WEAPON.size or\
    (armor | M5Reflect::ARMOR).size != armor.size + M5Reflect::ARMOR.size
  end
end[/pre]

最佳答案

查看完整内容

敌人没装备, 就是这么简单的一回事 def m5_equip_include(actor)的下一行加句 return false if actor.is_a?(Game_Enemy) 试试?
梦石
0
星屑
29901
在线时间
5734 小时
注册时间
2016-3-8
回帖
1653
发表于 2020-9-9 15:36:02 | 显示全部楼层
本帖最后由 alexncf125 于 2020-9-9 16:10 编辑
请问到底是怎么回事?

敌人没装备, 就是这么简单的一回事

def m5_equip_include(actor)的下一行加句
return false if actor.is_a?(Game_Enemy)
试试?
回复

使用道具 举报

梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
 楼主| 发表于 2020-9-10 12:08:46 | 显示全部楼层
alexncf125 发表于 2020-9-9 16:07
敌人没装备, 就是这么简单的一回事

def m5_equip_include(actor)的下一行加句

谢谢,问题已解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部