Project1
标题: 请问怎么让该方法返回false还不卡死? [打印本页]
作者: 寒凌天 时间: 2020-1-1 22:23
标题: 请问怎么让该方法返回false还不卡死?
def self.f
if $game_variables[4]==0
$game_switches[3886]=false
end
true #测试
#测试
return false #测试
#测试
true#测试
end
def self.f
if $game_variables[4]==0
$game_switches[3886]=false
end
true #测试
#测试
return false #测试
#测试
true#测试
end
老手都知道,XP有时候返回false时会卡死。
听大神说加个true或者加个注释就不没事了。可是我加了好多true和注释还是不行,如果非要返回false的话,有没有办法不卡死?
@灯笼菜刀王
作者: soulsaga 时间: 2020-1-1 22:48
本帖最后由 soulsaga 于 2020-1-1 22:50 编辑
#--------------------------------------------------------------------------
# ● スクリプト
# イベントコマンドの「スクリプト」の一行目が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
#--------------------------------------------------------------------------
# ● スクリプト
# イベントコマンドの「スクリプト」の一行目が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
国外的修BUG脚本...不过你这个我觉得无关..
BUG是事件脚本才有的..你写的应该没BUG?
作者: 寒凌天 时间: 2020-1-1 23:40
本帖最后由 寒凌天 于 2020-1-1 23:43 编辑
我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名)
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。
代码为了方便看,我删除了一些,但是删了的那些全都是“开关XX = false”的代码,没其他复杂的代码。所以想代码本身应该是没问题的。
如果我使用了你的修复代码,能解决这种脚本调用脚本编辑器代码的BUG吗?
作者: soulsaga 时间: 2020-1-1 23:46
这样啊..应该可以吧?
作者: 寒凌天 时间: 2020-1-1 23:57
本帖最后由 寒凌天 于 2020-1-2 15:54 编辑
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
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
感谢两位猫斑竹和二楼三位大神的技术贡献,我把代码重新修改了下,只要加了注释行代码,就不会出此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 |