Project1

标题: 萌新请教各位仙贝,关于防护盾的问题 [打印本页]

作者: 本子喵    时间: 2017-6-25 20:04
标题: 萌新请教各位仙贝,关于防护盾的问题
这是一个游戏里的固定伤害护盾,如果设定护盾为50,那么伤害低于50以下的攻击都会无效化,伤害高于50的攻击会无视护盾。
但是由于人物和敌人等级、属性都不断提升,如果初始设定太低,中后期护盾便完全变成鸡肋,太高的话前中期又会造成敌人无法对人物造成伤害。
萌新想请问怎么能把这个护盾修改成按百分比防御,比如设定护盾为10%,那么造成HP10%以下的伤害无效化,而不是固定10点伤害无效。
下面是这个护盾的介绍和脚本

無効化障壁
アクター、職業、装備品、エネミー、ステートのメモ欄に「<無効化障壁 50>」と書いて設定します。
例の場合、設定されたアクター、エネミーはダメージが50以下であれば無効化します。

  # ☆ 無効化障壁のメッセージの表示
  #--------------------------------------------------------------------------
  def display_invalidatewall_message(target)
    return unless target.result.invalidate
    fmt = Vocab::Invalidate
    add_text(sprintf(fmt, target.name))
    wait
  end

  # ☆ 無効化障壁の判定(追加定義)
  #--------------------------------------------------------------------------
  def invalidate_wall
    read = battler_add_ability(11)
    return false if read == 0
    return read
  end

      # 11は無効化障壁
      value = all_list.max
    when 6
      value = Array.new
      for list in 0..all_list.size - 1
        if list % 2 == 0
          if all_list[list] && all_list[list + 1]
            value[all_list[list]] = 0 unless value[all_list[list]]
            value[all_list[list]] = [value[all_list[list]],all_list[list + 1]].max
          end
        end
      end

  # ☆ 無効化障壁の適用
  #--------------------------------------------------------------------------
  def apply_invalidate_wall(damage, item)
    return damage unless self.invalidate_wall
    return damage if item.damage.recover?
    return damage if damage <= 0
    return damage if damage > self.invalidate_wall
   
    @result.invalidate = true
    return 0
  end

      #無効化障壁
      read_arr = Array.new
      while cheak_note do
        value = 0
        cheak_note.match(/<無効化障壁\s?(\d+)\s?>/)
        value = $1.to_i if $1
        read_arr.push(value)
        cheak_note = $'
      end
      battler_add = read_arr.max


作者: 300英雄    时间: 2017-6-26 15:49
用伤害公式的话超级简单,但是脚本有点难说明,
防具是吧:if self.armors.include?($data_armors[107]) 受击者装备107时
if value <= self.hp * 0.1
value = 0
end
end
说明一下:受击者装备了107号防具时,受到伤害小于等于最大血量10%,伤害为0,否则此防具效果无效(自己说的,否则无视护盾效果) 还有一点,记得打上伤害公式脚本
我上面那段打在脚本很空白的地区,脚本我给你空格区域特别大。插入value = apply_guard(value)下     @result.make_damage(value.to_i, item)上面
下面是脚本
  1. class Game_Battler < Game_BattlerBase
  2. def make_damage_value(user, item)
  3.     value = item.damage.eval(user, self, $game_variables)
  4.     value *= item_element_rate(user, item)
  5.     value *= pdr if item.physical?
  6.     value *= mdr if item.magical?
  7.     value *= rec if item.damage.recover?
  8.     value = apply_critical(value) if @result.critical
  9.     value = apply_variance(value, item.damage.variance)
  10.     value = apply_guard(value)















  11.     @result.make_damage(value.to_i, item)
  12.   end
  13. end
复制代码






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1