设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1642|回复: 2
打印 上一主题 下一主题

[已经过期] 萌新请教各位仙贝,关于防护盾的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2016-8-3
帖子
15
跳转到指定楼层
1
发表于 2017-6-25 20:04:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
这是一个游戏里的固定伤害护盾,如果设定护盾为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

点评

设67号变量 使其值始终为该角色生命的10% 然后 备注栏写<無效化障壁 \v【67】>(爪机党表示很无奈) 未测试  发表于 2017-6-26 00:07

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
2
发表于 2017-6-26 15:49:19 | 只看该作者
用伤害公式的话超级简单,但是脚本有点难说明,
防具是吧: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
复制代码

评分

参与人数 1星屑 +100 收起 理由
VIPArcher + 100 塞糖

查看全部评分

P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-23 07:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表