#=============================================================================== # 全局变量开关 # 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 = [1,2,3] # 新游戏/读档时载入的变量 SW = [1,2,3] # 新游戏/读档时载入的开关 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