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

Project1

 找回密码
 注册会员
搜索
查看: 2478|回复: 11

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3082
在线时间
205 小时
注册时间
2019-9-16
帖子
224
发表于 2020-1-1 22:23:06 | 显示全部楼层 |阅读模式

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

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

x
RUBY 代码复制
  1. def self.f                       
  2.     if $game_variables[4]==0
  3.       $game_switches[3886]=false   
  4.     end
  5.     true #测试
  6.     #测试
  7.     return false #测试
  8.     #测试
  9.     true#测试
  10.   end



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

QQ图片20200101222215.png

评分

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

查看全部评分

Lv5.捕梦者

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

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● スクリプト
  3.   # イベントコマンドの「スクリプト」の一行目がfalseになると
  4.   # フリーズするバグの修正
  5.   #--------------------------------------------------------------------------
  6.   def command_355
  7.     # script に 1 行目を設定
  8.     script = @list[@index].parameters[0] + "\n"
  9.     # インデックスを増やす(修正)
  10.     @index += 1
  11.     # ループ
  12.     loop do
  13.       # 次のイベントコマンドがスクリプト 2 行目以降の場合(修正)
  14.       if @list[@index].code == 655
  15.         # script に 2 行目以降を追加
  16.         script += @list[@index].parameters[0] + "\n"
  17.         # インデックスを進める
  18.         @index += 1
  19.       # イベントコマンドがスクリプト 2 行目以降ではない場合
  20.       else
  21.         # ループ中断
  22.         break
  23.       end
  24.     end
  25.     # 評価
  26.     result = eval(script)
  27.     # 戻り値が false の場合
  28.     if result == false
  29.       # 終了
  30.       return false
  31.     end
  32.     # 戻り値がfalseでない場合、インデックスを戻す
  33.     @index -= 1
  34.     # 継続
  35.     return true
  36.   end

国外的修BUG脚本...不过你这个我觉得无关..
BUG是事件脚本才有的..你写的应该没BUG?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3082
在线时间
205 小时
注册时间
2019-9-16
帖子
224
 楼主| 发表于 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吗?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

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

这样啊..应该可以吧?

点评

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

使用道具 举报

Lv3.寻梦者

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

RUBY 代码复制
  1. def command_355
  2.     # script 设置第一行
  3.     script = @list[@index].parameters[0] + "\n"
  4.     # 循环
  5.     loop do
  6.       # 下一个事件指令在脚本 2 行以上的情况下
  7.       if @list[@index+1].code == 655
  8.         # 添加到 script 2 行以后
  9.         script += @list[@index+1].parameters[0] + "\n"
  10.       # 事件指令不在脚本 2 行以上的情况下
  11.       else
  12.         # 中断循环
  13.         break
  14.       end
  15.       # 推进索引
  16.       @index += 1
  17.     end
  18.     # 评价
  19.     result = eval(script)
  20.  
  21.     $arpg_actor.visible = $game_system.arpg_ing unless $arpg_actor.nil?
  22.  
  23.     # 返回值为 false 的情况下
  24.     if result == false
  25.       # 结束
  26.       @index += 1            #################唯一修改的地方,增加了这行代码
  27.       return false
  28.     end
  29.     # 继续
  30.     return true
  31.   end


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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

发表于 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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-19 09:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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