查看: 2851|回复: 2

[已经解决] 关于全局变量脚本的读档时的问题

[复制链接]
梦石
6
星屑
3071
在线时间
1825 小时
注册时间
2014-8-20
回帖
233

开拓者剧作品鉴家

发表于 2017-9-2 08:31:46 | 显示全部楼层 |阅读模式

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

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

×
脚本
[pre lang="ruby"]#===============================================================================
# 全局变量开关
#  By:VIPArcher [email: VIPArcher@sina.com]
#  -- 本脚本来自 https://rpg.blue 使用或转载请保留以上信息。
#===============================================================================
# 说明:
#   把所有开关变量储存到一个文件中,开始新游戏时或者读档时自动载入该文件中设定好的
#   某些开关变量,应该也可以用于制作多结局多周目之类的功能。通关一个结局时事件脚本
#   调用 save_vs_data 一下就可以把当前的开关变量储存到一个文件中。
#===============================================================================
$VIPArcherScript ||= {};$VIPArcherScript[:save_varsw] = 20150121
#-------------------------------------------------------------------------------
module VIPArcher end
#==============================================================================
#  ☆ 设定部分 ☆
#==============================================================================
module VIPArcher::GLOBAL
  FILEURL = "Saves"             #储存数据的文件夹
  NAME = "System_Save.rvdata2"  #储存数据的文件名
  VAR = [99]   # 新游戏/读档时载入的变量
  SW  = [100]   # 新游戏/读档时载入的开关
end
#==============================================================================
#  ★ 设定结束 ★
#==============================================================================
module VIPArcher::GLOBAL
  FILENAME = FILEURL + "/" + NAME
  #--------------------------------------------------------------------------
  # ● 储存开关变量数据
  #--------------------------------------------------------------------------
  def self.save_data
    Dir.mkdir(FILEURL) unless FileTest.exist?(FILEURL)
    File.open(FILENAME , "wb") do |file|
      Marshal.dump(make_contents, file)
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取开关变量数据
  #--------------------------------------------------------------------------
  def self.make_contents
    contents = {}
    contents[:switches] = $game_switches
    contents[:variable] = $game_variables
    contents
  end
  #--------------------------------------------------------------------------
  # ● 读取变量数据
  #--------------------------------------------------------------------------
  def self.load_var(id)
    File.open(FILENAME , "rb") do |file|
      game_variables = Marshal.load(file)[:variable]
      $game_variables[id] = game_variables[id]
    end ; rescue
  end
  #--------------------------------------------------------------------------
  # ● 读取开关数据
  #--------------------------------------------------------------------------
  def self.load_sw(id)
    File.open(FILENAME , "rb") do |file|
      game_switches = Marshal.load(file)[:switches]
      $game_switches[id] = game_switches[id]
    end ; rescue
  end
  #--------------------------------------------------------------------------
  # ● 载入 VAR 和 SW 的开关和变量
  #--------------------------------------------------------------------------
  def self.load_game_versw
    VAR.each { |id| load_var(id) } ; SW.each { |id| load_sw(id) }
  end
end
#-------------------------------------------------------------------------------
class << DataManager
  #--------------------------------------------------------------------------
  # ● 设置新游戏
  #--------------------------------------------------------------------------
  alias_method :new_game_data , :setup_new_game
  def setup_new_game
    new_game_data ; VIPArcher::GLOBAL.load_game_versw
  end
end
#-------------------------------------------------------------------------------
class Game_System
  #--------------------------------------------------------------------------
  # ● 读档后的处理
  #--------------------------------------------------------------------------
  alias_method :after_load_data , :on_after_load
  def on_after_load
    after_load_data ; VIPArcher::GLOBAL.load_game_versw
  end
end
#-------------------------------------------------------------------------------
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 储存开关变量数据
  #--------------------------------------------------------------------------
  def save_vs_data ; VIPArcher::GLOBAL.save_data end
  #--------------------------------------------------------------------------
  # ● 读取变量数据
  #--------------------------------------------------------------------------
  def load_var(*args)
    args.each { |id| VIPArcher::GLOBAL.load_var(id) }
  end
  #--------------------------------------------------------------------------
  # ● 读取开关数据
  #--------------------------------------------------------------------------
  def load_sw(*args)
    args.each { |id| VIPArcher::GLOBAL.load_sw(id)  }
  end
end[/pre]


正常开始游戏的话,是没问题的
但是用     DataManager.load_game(1)   读档的话,保存的全局变量就不会读取了
这个要怎么解决呢?

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2017-9-2 08:35:11 | 显示全部楼层
使用 DataManager.load_game(1) 读档之后在额外执行一次 VIPArcher::GLOBAL.load_game_versw

点评

啊,多谢,解决了  发表于 2017-9-2 08:39

评分

参与人数 1星屑 +60 收起 理由
真_真空 + 60 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部