查看: 2652|回复: 13

[已经解决] 标题画面新增选项的脚本开始奇怪地报错!

[复制链接]
梦石
0
星屑
50
在线时间
72 小时
注册时间
2013-3-2
回帖
13
发表于 2017-7-4 20:35:43 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 我的目标丁马克 于 2017-7-4 21:09 编辑

使用了喵呜喵5桑的“标题画面新增选项”和“全局变量”的脚本,做了个通关后添加附赠房间的玩意儿...
但...说来也怪!今天发现通关之后关闭游戏,再次运行游戏然后再次通关后就会弹出报错...
新建图像.png
如上图!
奇怪的是,如果通关之后没有关闭游戏并且再次通关的话,就不会发生这样的问题...
而且,本来还能用的...加了几句指令(显示图片和条件分歧)后就崩了...
我也很绝望...不知道该怎么办...



全局变量↓

[pre lang="ruby"]=begin
================================================================================
  全局变量 By 喵呜喵5
================================================================================

【说明】

  在事件中使用脚本命令 save_var 可以把设置好的变量单独储存到一个新文件中

  在事件中使用脚本命令 load_var 可以在其他地方
  (例如其他存档、或者开始新游戏时……)载入保存了的变量的值

  使用全局变量可以用来制作类似记录通关次数或者进入二周目这样的功能

=end
$m5script ||= {};$m5script[:M5GV20140811] = 20151106
$m5script[:ScriptData] ||= {}
module M5GV20140811
#==============================================================================
#  设定部分
#==============================================================================

  VAR = [13]

  # 在这里设置需要储存的全局变量ID

  FILENAME = "Study.rvdata2"

  # 在这里设置储存全局变量的文件名

  AUTO = true

  # 设置为 true 的话,变量的值发生改变时自动保存全局变量

  LOAD = true

  # 设置为 true 的话,开始新游戏或者读取存档时,自动读取保存的全局变量

#==============================================================================
#  设定结束
#==============================================================================
class << self
  def load
    $m5script[:ScriptData][:M5GV20140811] =
      (load_data(FILENAME) rescue [nil, {}])
  end
  def save; save_data($m5script[:ScriptData][:M5GV20140811], FILENAME); end
  def load_var
    var = $m5script[:ScriptData][:M5GV20140811][0]
    return unless var
    var.each_with_index{|v,i| $game_variables.m5_20140811_set(VAR, v)}
  end
  def current_var
    var = []
    VAR.each {|index| var << $game_variables[index] }
    return var
  end
  def save_var
    $m5script[:ScriptData][:M5GV20140811][0] = current_var
    save
  end
  def get_ext; $m5script[:ScriptData][:M5GV20140811][1]; end
  def save_ext; save; end
  def set_ext(key, value)
    get_ext[key] = value
    save
  end
end # class << self
end

class Game_Variables
  alias m5_20140811_set []=
  def []=(variable_id, value)
    m5_20140811_set(variable_id, value)
    return unless M5GV20140811::AUTO
    M5GV20140811.save_var if M5GV20140811::VAR.include?(variable_id)
  end
end
class << DataManager
  alias m5_20150320_load_game load_game
  def load_game(index)
    result = m5_20150320_load_game(index)
    return result unless result && M5GV20140811::LOAD
    M5GV20140811.load_var
    result
  end
  alias m5_20150320_create_game_objects create_game_objects
  def create_game_objects
    m5_20150320_create_game_objects
    return unless M5GV20140811::LOAD
    M5GV20140811.load_var
  end
end
class Game_Interpreter
  def save_var; M5GV20140811.save_var; end
  def load_var; M5GV20140811.load_var; end
end
M5GV20140811.load[/pre]



标题画面新增选项↓

[pre lang="ruby"]=begin
===============================================================================
标题画面新增选项 By喵呜喵5
===============================================================================


【说明】


在标题画面增加新的选项


玩家选择了这个选项后可以从另外一张地图开始新游戏
在这张新地图上可以用事件指令之类的东西做出类似CG欣赏之类的功能


=end
$m5script ||= {};$m5script[:M5NTC20140811] = 20150319
module M5NTC20140811
COMMAND = [
#==============================================================================
# 设定部分
#==============================================================================



{
:text => "附赠",
:map => 1,
:x => 0,
:y => 7,
:opt => true,
:ext => 37,
:show => false,
:pos => 4,
},



# 在这上方追加新的选项,一条设置对应一个显示在标题画面的选项
# 设置格式为 :
# {
# 要设置的属性 => 设置的内容,
# },
#
#(不要忘记前后的中括号以及中间和结尾的英文冒号、英文逗号)
#
# 可以设置的属性如下(未设置的属性将使用 F9 数据库中默认的设置):
#
# :text 设置选项在菜单中的名称(前后加上英文引号)
# :pos 设置这个选项出现在选项窗口中的位置
#
# :map 设置选择这个选项后移动到的地图ID
# :x 设置选择这个选项后移到到对应地图的X坐标
# :y 设置选择这个选项后移到到对应地图的Y坐标
# :opt 设置选择这个选项后移到到对应地图时是否透明,true 为透明,false 为不透明
#
# :ext 设置选项是否显示的标志,请参考下方的详细说明
# :show 填写 true 时,显示无法选择的选项,搭配上方的 ext 共同使用
#
# ===========================================================================
#
# 【关于选项是否显示标志的详细说明】
#
# 这个功能需要搭配我的全局变量脚本共同使用,可以实现类似通关后出现新选项的效果
#
# 下面以通关后出现 “观看CG” 选项为例:
# 首先插入我的全局变量脚本,脚本的位置应该放在本脚本之上
# 在设定部分新增一个跳转到执行“观看CG”地图的选项
# 设置观看CG选项里 ext 的值,例如:
# ext : 233,
#
# 当游戏通关的时候在事件的脚本中执行下面的代码
# m5_20140811_ntc(233)
# 之后,再次打开游戏时标题画面中就会出现“观看CG”的选项了
#
# 如果希望删除已经出现的“观看CG”这个选项的话,在事件的脚本中执行下面的代码
# m5_20140811_ntc(233,false)
# 观看CG的选项便再次被消除了
#
# 如果观看CG这个选项还增加了下面的设置
# show : true,
# 在游戏通关前标题画面也会显示这个选项,但是玩家无法选择


#==============================================================================
# 设定结束
#==============================================================================
]
end
class Window_TitleCommand
alias m5_20140206_make_command_list make_command_list
def make_command_list
m5_20140206_make_command_list
base = $m5script[:M5GV20140811]
ext = (base && base >= 20140811) ? M5GV20140811.get_ext : {}
ext = ext[:M5NTC20140811] || {}
M5NTC20140811::COMMAND.each do |c|
if c[:ext]
enable = ext[ c[:ext] ]
( next unless c[:show] ) if !enable
else
enable = true
end
@list.insert( c[:pos] || -1 ,
{
:name => c[:text], :symbol => :m520140811ntc,
:ext => c, :enabled => enable
})
end
@list.compact!
end
end
class Scene_Title
alias m5_20140206_create_command_window create_command_window
def create_command_window
temp_data = load_data("Data/System.rvdata2")
$data_system.start_map_id = temp_data.start_map_id
$data_system.start_x = temp_data.start_x
$data_system.start_y = temp_data.start_y
$data_system.opt_transparent = temp_data.opt_transparent
m5_20140206_create_command_window
proc = Proc.new do
command = @command_window.current_ext
$data_system.start_map_id = command[:map] if command[:map]
$data_system.start_x = command[:x] if command[:x]
$data_system.start_y = command[:y] if command[:y]
$data_system.opt_transparent = command[:opt] if command[:opt]
command_new_game
end
@command_window.set_handler(:m520140811ntc, proc)
end
end
class Game_Interpreter
def m5_20140811_ntc(flag, value = true)
base = $m5script[:M5GV20140811]
raise "本功能需要新版喵呜喵5全局变量脚本的支持" if !base || base < 20150319
ext = M5GV20140811.get_ext
ext[:M5NTC20140811] ||= {}
ext[:M5NTC20140811][flag] = value
M5GV20140811.save_ext
end
end[/pre]
梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-7-4 20:58:02 | 显示全部楼层
希望可以把脚本发出来。。。这样才可以解答你的问题

点评

save_var保存后,关闭游戏,进游戏load_var读取是吗,没问题啊  发表于 2017-7-4 21:13
吼 加上了!  发表于 2017-7-4 21:07
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2017-7-4 21:09:01 | 显示全部楼层
Study.rvdata2 这个文件是不是被你设置成只读了?
回复

使用道具 举报

梦石
0
星屑
50
在线时间
72 小时
注册时间
2013-3-2
回帖
13
 楼主| 发表于 2017-7-4 21:10:28 | 显示全部楼层
喵呜喵5 发表于 2017-7-4 21:09
Study.rvdata2 这个文件是不是被你设置成只读了?

没有啊...我没有动过它来着。而且如果把它删掉之后再通关创建一个新的Study.rvdata2也会发生这样的问题...
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2017-7-4 21:13:54 | 显示全部楼层
我的目标丁马克 发表于 2017-7-4 21:10
没有啊...我没有动过它来着。而且如果把它删掉之后再通关创建一个新的Study.rvdata2也会发生这样的问题.. ...

这个提示按照字面意思上来看意思是没有权限访问这个文件,但是除了这个文件被设置为只读以外我还没有想到会有其他什么情况会造成这个问题……我自己测试时也没有遇到……我再想想看……
回复

使用道具 举报

梦石
0
星屑
50
在线时间
72 小时
注册时间
2013-3-2
回帖
13
 楼主| 发表于 2017-7-6 16:49:20 | 显示全部楼层
这几天一直折腾、一直弹错、完全没有下手的地方...
今天猛然发现,有几个版本(我备份了好多)的居然能正常运行。
心想妈呀总算修好了终于可以打包上传更新了,于是复制了一份没出bug的文件夹。
结果测试那个复制文档时...啪!这个窗户又跳出来了!
难道是我复制的姿势错误了?
我又试着建了一个新工程,把 data 什么的都移过去然后再测试。结果还是会报错!

而且...今天在玩别人的游戏时,玩到一半居然也跳出了同样的窗口!
因为游戏是开源的,就翻了翻,发现对方也用了同样的脚本。报错的地方执行的指令是脚本指令 save_var
(至于我的游戏,报错的那块地方的指令是 m5_20140811_ntc(37))
不过,去运行喵呜喵5桑的范例的话却不会报错...
真是太奇怪了!明明有的时候可以用...但为什么有的时候就崩掉了呢...

点评

你就是想做二周目吧,可以简单的自己读写创建个文件判断啊,我用那脚本读写都很正常  发表于 2017-7-7 16:21
两个报错应该都是同一个问题,全局变量脚本在保存数据的时候没法在你的电脑中创建文件,但是我没弄懂为什么……  发表于 2017-7-7 12:54
为什么咱测试你的脚本没问题,难!!难道亲的电脑有剧毒!!!  发表于 2017-7-7 09:14
回复

使用道具 举报

梦石
1
星屑
22083
在线时间
4885 小时
注册时间
2014-12-22
回帖
1509

开拓者

发表于 2017-7-7 09:46:38 | 显示全部楼层
本帖最后由 shencao 于 2017-7-7 10:09 编辑

这⋯⋯我也不懂程序不过⋯⋯如果范例完全不会报错⋯⋯
是不是还是跟什么脚本冲突了啊?
你要不要新建一个工程只用这个脚本,看它还报错不?
如果不报错那大概率还是脚本冲突,之后你把要用的脚本一个一个的复制进去(别全部复制),每复制一个就测试一下,如果它报错就是那个脚本的问题。
然而如果只是这个脚本也还报错⋯⋯但是范例却不报错?嗯⋯⋯仔细对比一下你跟范例的不同在哪?

另外感觉lz问题有点眼熟悉就翻了一下帖子,之前那帖子就是以前都好的然后莫名报错再然后复制一份就好了是不是,那贴我也跟过。
这么一看,感觉又不太像是某个脚本的问题,更像是你的电脑环境哪里不太对⋯⋯?
你把工程发给小伙伴测试看看别人是什么情况,多发几个人,如果别人也有问题,那大概还是工程的问题;如果别人都没有问题⋯⋯那就是你的电脑的问题otz
可以考虑一下工程之外的因素,比如:
以兼容模式/管理员权限运行va(也许va和你的电脑合不来)
关闭某些实时监控的杀毒软件(可能会误判某些文件)
或者全盘杀个毒看看
不要把工程放在u盘里测试
也许正好碰到硬盘坏道了呢,检查/修复一下?
重新安装一下va(虽然我觉得应该不至于,不过实在不行了也可以试试?再不行还有重装系统的选项(不)
⋯⋯我实在想不出还能怎样了otz,供参考吧。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
72 小时
注册时间
2013-3-2
回帖
13
 楼主| 发表于 2017-7-11 13:57:05 | 显示全部楼层
shencao 发表于 2017-7-7 09:46
这⋯⋯我也不懂程序不过⋯⋯如果范例完全不会报错⋯⋯
是不是还是跟什么脚本冲突了啊?
你要不要新建一个工 ...


给小伙伴测试了,似乎没有问题...看来确实是我的电脑有猫饼_(:зゝ∠)_
不过,用管理员模式试了试,似乎可行!!感谢!希望它能一直不出错下去(......)

点评

电脑有时候出的问题就是这么奇葩没道理otz⋯⋯希望能好!  发表于 2017-7-11 14:52
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部