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

Project1

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

[已经解决] 关于老鹰大大的暴击与暴击伤害脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
328
在线时间
49 小时
注册时间
2021-3-27
帖子
18
跳转到指定楼层
1
发表于 2021-4-12 21:42:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
应该是一个很不错的暴击与暴击伤害的脚本,但是有一个奇怪的问题:
我设定了暴击伤害是50,也就是非暴击的1.5倍,但不知为什么会被自动变成1倍——就是暴击与非暴击没区别。

再往上也是,设定成120的时候,打出的伤害其实是2倍而非2.2倍。设定成270的时候,打出的伤害其实是3倍而非3.7倍。

……似乎是把所有X00~X99的数都约到了X00?

脚本:
#==============================================================================
# ■ 暴击与暴击伤害  by 老鹰
#------------------------------------------------------------------------------
#   - 新增对暴击、暴击造成的伤害的修改
#   - 调整默认的暴击伤害为 100 ,即普通伤害的 2 倍;被暴击伤害为 0 ,即不修改
#   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对暴击进行修改
#      <Certain Crit>      效果: 必定暴击
#      <Certain Be Crited> 效果: 必定被暴击(免疫暴击无效)
#      <Resist Crit>       效果: 免疫暴击
#      - 注:当攻击者为必定暴击,被攻击者为免疫暴击时,按通常暴击概率计算
#   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对暴击伤害进行修改
#      <Crit Damage: 数字> 或 <Crit Damage: 数字%>
#        作用:造成的暴击伤害增加 数字/100 的比例(全部之间为加法叠加)
#      <Be Crited Damage: 数字> 或 <Be Crited Damage: 数字%>
#        作用:被造成的暴击伤害增加 数字/100 的比例(全部之间为加法叠加)
#      - 注:数字可为负数,若最终计算的暴击伤害加成结果为负数,则直接算作普通攻击伤害
#   - 举例:
#       1号护甲的备注中填入 <Crit Damage: 200>,1号角色装备中
#       1号状态的备注中填入 <Crit Damage: -100%>,1号角色被附加了该状态
#       1号敌人的备注中填入 <Be Crited Damage: 300>,1号角色暴击了1号敌人
#       效果:其造成的暴击伤害为 普通伤害的 (100 + 200 - 100 + 300)/100 倍,即5倍
#
#   - 实质:给战斗者新增了两个实例方法,用于获取 暴击伤害加成 和 被暴击伤害加成
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ○ 必定暴击?
  #--------------------------------------------------------------------------
  def certain_crit?
    @crit_params[0]
  end
  #--------------------------------------------------------------------------
  # ○ 必定被暴击?
  #--------------------------------------------------------------------------
  def certain_be_crited?
    @crit_params[1]
  end
  #--------------------------------------------------------------------------
  # ○ 免疫暴击?
  #--------------------------------------------------------------------------
  def resist_crit?
    @crit_params[2]
  end
  #--------------------------------------------------------------------------
  # ○ 暴击伤害加成(百分数)
  #--------------------------------------------------------------------------
  def crit_damage
    @crit_params[3]
  end
  #--------------------------------------------------------------------------
  # ○ 被暴击伤害加成(百分数)
  #--------------------------------------------------------------------------
  def be_crited_damage
    @crit_params[4]
  end
  #--------------------------------------------------------------------------
  # ○ 获取用于计算暴击伤害的数组
  #--------------------------------------------------------------------------
  def get_crit_damage_array
    []
  end
  #--------------------------------------------------------------------------
  # ○ 重新获取暴击各项参数值
  #--------------------------------------------------------------------------
  def reget_crit_params
    # [必定暴击?, 必定被暴击?, 免疫暴击?, 暴击伤害, 被暴击伤害]
    @crit_params = [false, false, false, 50, 0]
    get_crit_damage_array.each do |a|
      next if a == nil
      @crit_params[0] = true if a.note =~ /<Certain Crit>/
      @crit_params[1] = true if a.note =~ /<Certain Be Crited>/
      @crit_params[2] = true if a.note =~ /<Resist Crit>/
      @crit_params[3] += $1.to_i if a.note =~ /<Crit Damage: *(-?\d+)%?>/
      @crit_params[4] += $1.to_i if a.note =~ /<Be Crited Damage: *(-?\d+)%?>/
    end
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 计算伤害
  #--------------------------------------------------------------------------
  alias eagle_crit_damage_make_damage_value make_damage_value
  def make_damage_value(user, item)
    @skill_user = user
    @skill_user.reget_crit_params
    reget_crit_params
    unless @skill_user.certain_crit? && resist_crit?
      @result.critical = true  if @skill_user.certain_crit?
      @result.critical = false if resist_crit?
    end
    @result.critical = true if certain_be_crited?
    eagle_crit_damage_make_damage_value(user, item)
  end
  #--------------------------------------------------------------------------
  # ● 应用关键一击
  #--------------------------------------------------------------------------
  def apply_critical(damage)
    damage * (1 + calc_crit_damage)
  end
  #--------------------------------------------------------------------------
  # ○ 计算最终的暴击伤害加成
  #--------------------------------------------------------------------------
  def calc_crit_damage
    value = (@skill_user.crit_damage + self.be_crited_damage) / 100
    return value < 0 ? 0 : value
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 获取用于计算暴击伤害的数组
  #--------------------------------------------------------------------------
  def get_crit_damage_array
    [actor, self.class] + equips + states
  end
end

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 获取用于计算暴击伤害的数组
  #--------------------------------------------------------------------------
  def get_crit_damage_array
    [enemy] + states
  end
end

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
2
发表于 2021-4-12 21:58:41 | 只看该作者
本帖最后由 alexncf125 于 2021-4-12 22:24 编辑

应该得把
1.第68行的50改成100
2.第106行的100改成100.0
不知是不是正解, 还是等老鹰来解答吧
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
328
在线时间
49 小时
注册时间
2021-3-27
帖子
18
3
 楼主| 发表于 2021-4-12 22:14:38 | 只看该作者
alexncf125 发表于 2021-4-12 21:58
应该得把
1.第68行的50改成0
2.第106行的100改成100.0

第68行是暴击的伤害,可以自己设置的,如果是0的话,那就是暴击与非暴击没区别了。

第106行的改动是问题症结——虽然我不知道为什么,但改动后就可以了。这时候再去随便替换第68行的数字,测试过都是没问题的。

谢谢您的帮助。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
4
发表于 2021-4-12 22:24:17 | 只看该作者
本帖最后由 alexncf125 于 2021-4-12 22:26 编辑
Muguafeifei 发表于 2021-4-12 22:14
第68行是暴击的伤害,可以自己设置的,如果是0的话,那就是暴击与非暴击没区别了。

第106行的改动是问题 ...


喔...我错了...第68行的50应该改成100才对

至于第106行的改动, 只能说是ruby的机制了
就是a除以b(a,b均是整数)得出的会是整数, a除以b(a,b均是浮点数/其一是浮点数)得出的才会是浮点数
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
328
在线时间
49 小时
注册时间
2021-3-27
帖子
18
5
 楼主| 发表于 2021-4-12 22:31:32 | 只看该作者
alexncf125 发表于 2021-4-12 22:24
喔...我错了...第68行的50应该改成100才对

至于第106行的改动, 只能说是ruby的机制了

原来如此,怪不得暴击伤害倍率只有1、2、3、4这些整数了。

再一次谢谢您的帮助!
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
34720
在线时间
6739 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

6
发表于 2021-4-13 10:04:10 | 只看该作者

已经忘记这个了()

的确是 / 100 的问题,应该改成 / 100.0

点评

令人回想起了RMXP的一个著名BUG……命中率低于100 = 无法命中,原因就是hit_rate的计算有个 / 100  发表于 2021-4-13 22:00
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

7
发表于 2021-4-13 22:02:31 | 只看该作者
令人回想起了RMXP的一个著名BUG……命中率低于100 = 无法命中,原因就是hit_rate的计算有个 / 100

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 02:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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