查看: 3101|回复: 11

[已经解决] 请问怎么让该方法返回false还不卡死?

[复制链接]
梦石
0
星屑
3242
在线时间
205 小时
注册时间
2019-9-16
回帖
195
发表于 2020-1-1 22:23:06 | 显示全部楼层 |阅读模式

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

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

×
[pre lang="ruby"]  def self.f                       
    if $game_variables[4]==0
      $game_switches[3886]=false   
    end
    true #测试
    #测试
    return false #测试
    #测试
    true#测试
  end[/pre]


老手都知道,XP有时候返回false时会卡死。
听大神说加个true或者加个注释就不没事了。可是我加了好多true和注释还是不行,如果非要返回false的话,有没有办法不卡死?
@灯笼菜刀王

QQ图片20200101222215.png

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2020-1-1 22:48:34 | 显示全部楼层
本帖最后由 soulsaga 于 2020-1-1 22:50 编辑

[pre lang="ruby"]#--------------------------------------------------------------------------
  # ● スクリプト
  # イベントコマンドの「スクリプト」の一行目がfalseになると
  # フリーズするバグの修正
  #--------------------------------------------------------------------------
  def command_355
    # script に 1 行目を設定
    script = @list[@index].parameters[0] + "\n"
    # インデックスを増やす(修正)
    @index += 1
    # ループ
    loop do
      # 次のイベントコマンドがスクリプト 2 行目以降の場合(修正)
      if @list[@index].code == 655
        # script に 2 行目以降を追加
        script += @list[@index].parameters[0] + "\n"
        # インデックスを進める
        @index += 1
      # イベントコマンドがスクリプト 2 行目以降ではない場合
      else
        # ループ中断
        break
      end
    end
    # 評価
    result = eval(script)
    # 戻り値が false の場合
    if result == false
      # 終了
      return false
    end
    # 戻り値がfalseでない場合、インデックスを戻す
    @index -= 1
    # 継続
    return true
  end[/pre]
国外的修BUG脚本...不过你这个我觉得无关..
BUG是事件脚本才有的..你写的应该没BUG?
回复

使用道具 举报

梦石
0
星屑
3242
在线时间
205 小时
注册时间
2019-9-16
回帖
195
 楼主| 发表于 2020-1-1 23:40:31 | 显示全部楼层
本帖最后由 寒凌天 于 2020-1-1 23:43 编辑
soulsaga 发表于 2020-1-1 22:48
#--------------------------------------------------------------------------
  # ● スクリプト
  # イ ...


我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名)
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。

代码为了方便看,我删除了一些,但是删了的那些全都是“开关XX = false”的代码,没其他复杂的代码。所以想代码本身应该是没问题的。

如果我使用了你的修复代码,能解决这种脚本调用脚本编辑器代码的BUG吗?
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2020-1-1 23:46:49 | 显示全部楼层
寒凌天 发表于 2020-1-1 23:40
我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名) ...

这样啊..应该可以吧?

点评

我已经试过了,可以!并且把修改的结果写在了5楼。主要重写一遍加深印象。  发表于 2020-1-2 00:16
回复

使用道具 举报

梦石
0
星屑
3242
在线时间
205 小时
注册时间
2019-9-16
回帖
195
 楼主| 发表于 2020-1-1 23:57:57 | 显示全部楼层
本帖最后由 寒凌天 于 2020-1-2 15:54 编辑

[pre lang="ruby"]  def command_355
    # script 设置第一行
    script = @list[@index].parameters[0] + "\n"
    # 循环
    loop do
      # 下一个事件指令在脚本 2 行以上的情况下
      if @list[@index+1].code == 655
        # 添加到 script 2 行以后
        script += @list[@index+1].parameters[0] + "\n"
      # 事件指令不在脚本 2 行以上的情况下
      else
        # 中断循环
        break
      end
      # 推进索引
      @index += 1
    end
    # 评价
    result = eval(script)
   
    $arpg_actor.visible = $game_system.arpg_ing unless $arpg_actor.nil?
   
    # 返回值为 false 的情况下
    if result == false
      # 结束
      @index += 1            #################唯一修改的地方,增加了这行代码
      return false
    end
    # 继续
    return true
  end[/pre]

感谢两位猫斑竹和二楼三位大神的技术贡献,我把代码重新修改了下,只要加了注释行代码,就不会出此BUG了。
(该BUG会在脚本编辑框内仅有一行代码,且代码返回值为false时无限死循环。经过测试,如果脚本编辑框内拥有两行以上的内容,无论最后一行返回结果是不是false都不会死循环。至于原因,猫斑竹的帖子里也给出了答案。)

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 大神威武!受教了!

查看全部评分

回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2020-1-2 02:31:28 | 显示全部楼层
本帖最后由 guoxiaomi 于 2020-1-2 06:46 编辑
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。

事件脚本指令的最后一行不能返回false,所以你需要在后面添加true或者注释

点评

哈哈,猫大的更厉害了,只加了一行就解决了,收藏了,非常感谢。还有我明白你的意思了,是在脚本编辑框的中不能是false返回值,我懂了。  发表于 2020-1-2 15:47
你有一些误解,事件脚本的最后一行返回false会导致事件阻塞,所以事件脚本最后一行写一句注释就行。这和函数/方法的返回值无关  发表于 2020-1-2 06:46
原理在此贴https://rpg.blue/thread-404592-1-1.html  发表于 2020-1-2 06:44
我把自己修改后的发到了五楼,暂时未发现任何BUG,有的话我会跟帖回复。  发表于 2020-1-2 03:34
但是有些方法就是需要判断返回值是true还是false啊,虽然可以用别的代替但比较麻烦。我根据2楼大神提供的方案改写后返回false也不卡了  发表于 2020-1-2 03:33

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 我很赞同

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 1 0

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部