查看: 2562|回复: 8

[已经解决] 关于血量影响防御的问题

[复制链接]
梦石
0
星屑
2970
在线时间
390 小时
注册时间
2010-12-4
回帖
104
发表于 2017-2-22 17:26:04 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 letppigogo 于 2017-2-22 22:18 编辑

这是我自己做的脚本,目的是当目标的力量大于等于300时,血量小于最高血量的25% 受到的伤害会降低50%,但单进入测试会出错。请哪位高手帮我看下是哪里有问题。
     if self.str >=300 and self.hp < self.maxhp / 4
        a = 0.5
      end  
      atk = [a * (attacker.atk - self.pdef / 2), 0].max
      self.damage = atk * (20 + attacker.str) / 20
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-2-22 21:38:19 | 显示全部楼层
虽然不知道你改了哪里,也不知道报的什么错。

但是,是不是应该把乘号后面的部分用小括号括起来:

  1. atk = [a * (attacker.atk - self.pdef / 2), 0].max
复制代码
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
2970
在线时间
390 小时
注册时间
2010-12-4
回帖
104
 楼主| 发表于 2017-2-22 22:17:34 | 显示全部楼层
guoxiaomi 发表于 2017-2-22 21:38
虽然不知道你改了哪里,也不知道报的什么错。

但是,是不是应该把乘号后面的部分用小括号括起来:

这个代码是我手打的,忘了吧括号加进去了

点评

建议把你这段代码替换后的内容,以及具体的报错方式给出来  发表于 2017-2-22 22:18
回复

使用道具 举报

梦石
0
星屑
2970
在线时间
390 小时
注册时间
2010-12-4
回帖
104
 楼主| 发表于 2017-2-23 08:32:38 | 显示全部楼层
letppigogo 发表于 2017-2-22 22:17
这个代码是我手打的,忘了吧括号加进去了

这是原代码:
  #--------------------------------------------------------------------------
  # ● 应用通常攻击效果
  #     attacker : 攻击者 (battler)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # 清除会心一击标志
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    # 命中的情况下
    if hit_result == true
      # 计算基本伤害
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100

这是修改后的代码:
  #--------------------------------------------------------------------------
  # ● 应用通常攻击效果
  #     attacker : 攻击者 (battler)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # 清除会心一击标志
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    # 命中的情况下
    if hit_result == true
      # 计算基本伤害
      if self.hp < self.maxhp / 4
        a = 0.1
      end  
      atk = [a * (attacker.atk - self.pdef / 2), 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100   

修改后进入正常进入战斗,选择目标后,开始攻击时弹框出错
attachimg]323164[/attachimg]

感觉是不是 if self.hp < self.maxhp / 4这句话的语法有问题,但是不知道错在哪
小Q截图-20170223082844.png

点评

在你的if前面添上 a = 1  发表于 2017-2-23 08:55
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2017-2-23 08:44:51 | 显示全部楼层
[pre lang="Ruby"]if self.str >=300 and self.hp < self.maxhp / 4
  a = 0.5
end  
atk = [a * (attacker.atk - self.pdef / 2), 0].max
self.damage = atk * (20 + attacker.str) / 20
[/pre]
如果目标不满足第一行的条件,导致第二行不执行,此时变量 a 无定义。如果再执行第四行就会报找不到 a 的错误。

点评

其实,报错原因是没有对nil定义 "*" 方法^_^  发表于 2017-2-23 09:18
回复

使用道具 举报

梦石
0
星屑
2970
在线时间
390 小时
注册时间
2010-12-4
回帖
104
 楼主| 发表于 2017-2-23 09:01:48 | 显示全部楼层
RyanBern 发表于 2017-2-23 08:44
if self.str >=300 and self.hp < self.maxhp / 4
  a = 0.5
end  

不亏是版主,一句话就让我茅塞顿开。
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部