Project1

标题: 标题画面新增选项的脚本开始奇怪地报错! [打印本页]

作者: 我的目标丁马克    时间: 2017-7-4 20:35
标题: 标题画面新增选项的脚本开始奇怪地报错!
本帖最后由 我的目标丁马克 于 2017-7-4 21:09 编辑

使用了喵呜喵5桑的“标题画面新增选项”和“全局变量”的脚本,做了个通关后添加附赠房间的玩意儿...
但...说来也怪!今天发现通关之后关闭游戏,再次运行游戏然后再次通关后就会弹出报错...

如上图!
奇怪的是,如果通关之后没有关闭游戏并且再次通关的话,就不会发生这样的问题...
而且,本来还能用的...加了几句指令(显示图片和条件分歧)后就崩了...
我也很绝望...不知道该怎么办...



全局变量↓

RUBY 代码复制
  1. =begin
  2. ================================================================================
  3.   全局变量 By 喵呜喵5
  4. ================================================================================
  5.  
  6. 【说明】
  7.  
  8.   在事件中使用脚本命令 save_var 可以把设置好的变量单独储存到一个新文件中
  9.  
  10.   在事件中使用脚本命令 load_var 可以在其他地方
  11.   (例如其他存档、或者开始新游戏时……)载入保存了的变量的值
  12.  
  13.   使用全局变量可以用来制作类似记录通关次数或者进入二周目这样的功能
  14.  
  15. =end
  16. $m5script ||= {};$m5script[:M5GV20140811] = 20151106
  17. $m5script[:ScriptData] ||= {}
  18. module M5GV20140811
  19. #==============================================================================
  20. #  设定部分
  21. #==============================================================================
  22.  
  23.   VAR = [13]
  24.  
  25.   # 在这里设置需要储存的全局变量ID
  26.  
  27.   FILENAME = "Study.rvdata2"
  28.  
  29.   # 在这里设置储存全局变量的文件名
  30.  
  31.   AUTO = true
  32.  
  33.   # 设置为 true 的话,变量的值发生改变时自动保存全局变量
  34.  
  35.   LOAD = true
  36.  
  37.   # 设置为 true 的话,开始新游戏或者读取存档时,自动读取保存的全局变量
  38.  
  39. #==============================================================================
  40. #  设定结束
  41. #==============================================================================
  42. class << self
  43.   def load
  44.     $m5script[:ScriptData][:M5GV20140811] =
  45.       (load_data(FILENAME) rescue [nil, {}])
  46.   end
  47.   def save; save_data($m5script[:ScriptData][:M5GV20140811], FILENAME); end
  48.   def load_var
  49.     var = $m5script[:ScriptData][:M5GV20140811][0]
  50.     return unless var
  51.     var.each_with_index{|v,i| $game_variables.m5_20140811_set(VAR[i], v)}
  52.   end
  53.   def current_var
  54.     var = []
  55.     VAR.each {|index| var << $game_variables[index] }
  56.     return var
  57.   end
  58.   def save_var
  59.     $m5script[:ScriptData][:M5GV20140811][0] = current_var
  60.     save
  61.   end
  62.   def get_ext; $m5script[:ScriptData][:M5GV20140811][1]; end
  63.   def save_ext; save; end
  64.   def set_ext(key, value)
  65.     get_ext[key] = value
  66.     save
  67.   end
  68. end # class << self
  69. end
  70.  
  71. class Game_Variables
  72.   alias m5_20140811_set []=
  73.   def []=(variable_id, value)
  74.     m5_20140811_set(variable_id, value)
  75.     return unless M5GV20140811::AUTO
  76.     M5GV20140811.save_var if M5GV20140811::VAR.include?(variable_id)
  77.   end
  78. end
  79. class << DataManager
  80.   alias m5_20150320_load_game load_game
  81.   def load_game(index)
  82.     result = m5_20150320_load_game(index)
  83.     return result unless result && M5GV20140811::LOAD
  84.     M5GV20140811.load_var
  85.     result
  86.   end
  87.   alias m5_20150320_create_game_objects create_game_objects
  88.   def create_game_objects
  89.     m5_20150320_create_game_objects
  90.     return unless M5GV20140811::LOAD
  91.     M5GV20140811.load_var
  92.   end
  93. end
  94. class Game_Interpreter
  95.   def save_var; M5GV20140811.save_var; end
  96.   def load_var; M5GV20140811.load_var; end
  97. end
  98. M5GV20140811.load




标题画面新增选项↓

RUBY 代码复制
  1. =begin
  2. ===============================================================================
  3. 标题画面新增选项 By喵呜喵5
  4. ===============================================================================
  5.  
  6.  
  7. 【说明】
  8.  
  9.  
  10. 在标题画面增加新的选项
  11.  
  12.  
  13. 玩家选择了这个选项后可以从另外一张地图开始新游戏
  14. 在这张新地图上可以用事件指令之类的东西做出类似CG欣赏之类的功能
  15.  
  16.  
  17. =end
  18. $m5script ||= {};$m5script[:M5NTC20140811] = 20150319
  19. module M5NTC20140811
  20. COMMAND = [
  21. #==============================================================================
  22. # 设定部分
  23. #==============================================================================
  24.  
  25.  
  26.  
  27. {
  28. :text => "附赠",
  29. :map => 1,
  30. :x => 0,
  31. :y => 7,
  32. :opt => true,
  33. :ext => 37,
  34. :show => false,
  35. :pos => 4,
  36. },
  37.  
  38.  
  39.  
  40. # 在这上方追加新的选项,一条设置对应一个显示在标题画面的选项
  41. # 设置格式为 :
  42. # {
  43. # 要设置的属性 => 设置的内容,
  44. # },
  45. #
  46. #(不要忘记前后的中括号以及中间和结尾的英文冒号、英文逗号)
  47. #
  48. # 可以设置的属性如下(未设置的属性将使用 F9 数据库中默认的设置):
  49. #
  50. # :text 设置选项在菜单中的名称(前后加上英文引号)
  51. # :pos 设置这个选项出现在选项窗口中的位置
  52. #
  53. # :map 设置选择这个选项后移动到的地图ID
  54. # :x 设置选择这个选项后移到到对应地图的X坐标
  55. # :y 设置选择这个选项后移到到对应地图的Y坐标
  56. # :opt 设置选择这个选项后移到到对应地图时是否透明,true 为透明,false 为不透明
  57. #
  58. # :ext 设置选项是否显示的标志,请参考下方的详细说明
  59. # :show 填写 true 时,显示无法选择的选项,搭配上方的 ext 共同使用
  60. #
  61. # ===========================================================================
  62. #
  63. # 【关于选项是否显示标志的详细说明】
  64. #
  65. # 这个功能需要搭配我的全局变量脚本共同使用,可以实现类似通关后出现新选项的效果
  66. #
  67. # 下面以通关后出现 “观看CG” 选项为例:
  68. # 首先插入我的全局变量脚本,脚本的位置应该放在本脚本之上
  69. # 在设定部分新增一个跳转到执行“观看CG”地图的选项
  70. # 设置观看CG选项里 ext 的值,例如:
  71. # ext : 233,
  72. #
  73. # 当游戏通关的时候在事件的脚本中执行下面的代码
  74. # m5_20140811_ntc(233)
  75. # 之后,再次打开游戏时标题画面中就会出现“观看CG”的选项了
  76. #
  77. # 如果希望删除已经出现的“观看CG”这个选项的话,在事件的脚本中执行下面的代码
  78. # m5_20140811_ntc(233,false)
  79. # 观看CG的选项便再次被消除了
  80. #
  81. # 如果观看CG这个选项还增加了下面的设置
  82. # show : true,
  83. # 在游戏通关前标题画面也会显示这个选项,但是玩家无法选择
  84.  
  85.  
  86. #==============================================================================
  87. # 设定结束
  88. #==============================================================================
  89. ]
  90. end
  91. class Window_TitleCommand
  92. alias m5_20140206_make_command_list make_command_list
  93. def make_command_list
  94. m5_20140206_make_command_list
  95. base = $m5script[:M5GV20140811]
  96. ext = (base && base >= 20140811) ? M5GV20140811.get_ext : {}
  97. ext = ext[:M5NTC20140811] || {}
  98. M5NTC20140811::COMMAND.each do |c|
  99. if c[:ext]
  100. enable = ext[ c[:ext] ]
  101. ( next unless c[:show] ) if !enable
  102. else
  103. enable = true
  104. end
  105. @list.insert( c[:pos] || -1 ,
  106. {
  107. :name => c[:text], :symbol => :m520140811ntc,
  108. :ext => c, :enabled => enable
  109. })
  110. end
  111. @list.compact!
  112. end
  113. end
  114. class Scene_Title
  115. alias m5_20140206_create_command_window create_command_window
  116. def create_command_window
  117. temp_data = load_data("Data/System.rvdata2")
  118. $data_system.start_map_id = temp_data.start_map_id
  119. $data_system.start_x = temp_data.start_x
  120. $data_system.start_y = temp_data.start_y
  121. $data_system.opt_transparent = temp_data.opt_transparent
  122. m5_20140206_create_command_window
  123. proc = Proc.new do
  124. command = @command_window.current_ext
  125. $data_system.start_map_id = command[:map] if command[:map]
  126. $data_system.start_x = command[:x] if command[:x]
  127. $data_system.start_y = command[:y] if command[:y]
  128. $data_system.opt_transparent = command[:opt] if command[:opt]
  129. command_new_game
  130. end
  131. @command_window.set_handler(:m520140811ntc, proc)
  132. end
  133. end
  134. class Game_Interpreter
  135. def m5_20140811_ntc(flag, value = true)
  136. base = $m5script[:M5GV20140811]
  137. raise "本功能需要新版喵呜喵5全局变量脚本的支持" if !base || base < 20150319
  138. ext = M5GV20140811.get_ext
  139. ext[:M5NTC20140811] ||= {}
  140. ext[:M5NTC20140811][flag] = value
  141. M5GV20140811.save_ext
  142. end
  143. end

作者: 张咚咚    时间: 2017-7-4 20:58
希望可以把脚本发出来。。。这样才可以解答你的问题
作者: 喵呜喵5    时间: 2017-7-4 21:09
Study.rvdata2 这个文件是不是被你设置成只读了?
作者: 我的目标丁马克    时间: 2017-7-4 21:10
喵呜喵5 发表于 2017-7-4 21:09
Study.rvdata2 这个文件是不是被你设置成只读了?

没有啊...我没有动过它来着。而且如果把它删掉之后再通关创建一个新的Study.rvdata2也会发生这样的问题...
作者: 喵呜喵5    时间: 2017-7-4 21:13
我的目标丁马克 发表于 2017-7-4 21:10
没有啊...我没有动过它来着。而且如果把它删掉之后再通关创建一个新的Study.rvdata2也会发生这样的问题.. ...

这个提示按照字面意思上来看意思是没有权限访问这个文件,但是除了这个文件被设置为只读以外我还没有想到会有其他什么情况会造成这个问题……我自己测试时也没有遇到……我再想想看……
作者: 我的目标丁马克    时间: 2017-7-6 16:49
这几天一直折腾、一直弹错、完全没有下手的地方...
今天猛然发现,有几个版本(我备份了好多)的居然能正常运行。
心想妈呀总算修好了终于可以打包上传更新了,于是复制了一份没出bug的文件夹。
结果测试那个复制文档时...啪!这个窗户又跳出来了!
难道是我复制的姿势错误了?
我又试着建了一个新工程,把 data 什么的都移过去然后再测试。结果还是会报错!

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

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

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


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




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