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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2949
在线时间
389 小时
注册时间
2010-12-4
帖子
141
跳转到指定楼层
1
发表于 2017-2-22 17:26:04 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 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

Lv3.寻梦者

梦石
0
星屑
2949
在线时间
389 小时
注册时间
2010-12-4
帖子
141
6
 楼主| 发表于 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  

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

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2017-2-23 08:44:51 | 只看该作者
RUBY 代码复制
  1. if self.str >=300 and self.hp < self.maxhp / 4
  2.   a = 0.5
  3. end  
  4. atk = [a * (attacker.atk - self.pdef / 2), 0].max
  5. self.damage = atk * (20 + attacker.str) / 20

如果目标不满足第一行的条件,导致第二行不执行,此时变量 a 无定义。如果再执行第四行就会报找不到 a 的错误。

点评

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2949
在线时间
389 小时
注册时间
2010-12-4
帖子
141
4
 楼主| 发表于 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 (8.8 KB, 下载次数: 26)

小Q截图-20170223082844.png

点评

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2949
在线时间
389 小时
注册时间
2010-12-4
帖子
141
3
 楼主| 发表于 2017-2-22 22:17:34 | 只看该作者
guoxiaomi 发表于 2017-2-22 21:38
虽然不知道你改了哪里,也不知道报的什么错。

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

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

点评

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

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-2-22 21:38:19 | 只看该作者
虽然不知道你改了哪里,也不知道报的什么错。

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 00:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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