Project1

标题: 请问怎么让该方法返回false还不卡死? [打印本页]

作者: 寒凌天    时间: 2020-1-1 22:23
标题: 请问怎么让该方法返回false还不卡死?
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的话,有没有办法不卡死?
@灯笼菜刀王


作者: soulsaga    时间: 2020-1-1 22:48
本帖最后由 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?
作者: 寒凌天    时间: 2020-1-1 23:40
本帖最后由 寒凌天 于 2020-1-1 23:43 编辑
soulsaga 发表于 2020-1-1 22:48
#--------------------------------------------------------------------------
  # ● スクリプト
  # イ ...


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

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

如果我使用了你的修复代码,能解决这种脚本调用脚本编辑器代码的BUG吗?
作者: soulsaga    时间: 2020-1-1 23:46
寒凌天 发表于 2020-1-1 23:40
我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名) ...

这样啊..应该可以吧?
作者: 寒凌天    时间: 2020-1-1 23: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都不会死循环。至于原因,猫斑竹的帖子里也给出了答案。)
作者: guoxiaomi    时间: 2020-1-2 02:31
本帖最后由 guoxiaomi 于 2020-1-2 06:46 编辑
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。

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




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1