#==============================================================================
# # 전역 저장 시스템 [v1.0]
# # By Skul_
# # 번역 : 미루
#==============================================================================
# # 재정의:
# # in module DataManager:
# # # self.load_game(index)
# # # self.save_game(index)
# # # self.setup_new_game
#==============================================================================
# ---사용법---
# 저장할 변수와 스위치의 ID 를 각각
# VARIABLES_TO_SAVE 배열, the SWITCHES_TO_SAVE 배열에 적어주세요.
# 전역 저장 데이터를 자동으로 저장되고 불러오게 하고 싶으시면,
# SAVE_ON_SAVE LOAD_ON_LOAD 와 LOAD_ON_NEW 를 true 로 설정해주세요.
#------------------------------------------------------------------------------
# 이벤트 내의 실행항목 [주석]에 다음과 같이 입력하여, 전역 저장 데이터를
# 저장하거나 불러올 수 있습니다.
# => "global_save" 또는 "global_load" (큰따옴표 제외)
#==============================================================================
#==============================================================================
# # LGlobalSave
#==============================================================================
module LGlobalSave
#==============================================================================
# 설정 부분 시작
#==============================================================================
# 플레이어가 게임을 저장할 때,
# 지정된 변수와 스위치의 정보가 자동으로 전역 저장되게 설정합니다.
SAVE_ON_SAVE = true
# 플레이어가 게임을 불러올 때,
# 지정된 변수와 스위치의 정보가 자동으로 불러와지도록 설정합니다.
LOAD_ON_LOAD = true
# 플레이어가 새 게임을 시작할 때,
# 지정된 변수와 스위치의 정보가 자동으로 불러와지도록 설정합니다.
LOAD_ON_NEW = true
# 전역 저장할 변수 ID 와 스위치 ID 의 배열을 설정합니다.
# ID 를 콤마로 구분하여 나열해주세요.
#
# 연속되는 여러 숫자를 입력하고 싶으시다면, '..' 을 사용하시면 됩니다.
# 예 : 15..42
# 15 부터 42 까지의 숫자를 말합니다. ( 15 와 42 포함 )
#
# 기능을 사용하고 싶으시지 않는다면, 공백으로 남겨두시면 됩니다.
#
# 전역 저장할 변수 ID
VARIABLES_TO_SAVE = []
# 전역 저장할 스위치 ID
SWITCHES_TO_SAVE = []
# 변수와 스위치의 정보를 전역 저장할 파일 명을 설정합니다.
FILE_NAME = "global.rvdata2"
#==============================================================================
# 설정 부분 끝
#==============================================================================
def self.saveTheFile(f)
File.open(FILE_NAME, "wb") do |file|
Marshal.dump(f, file)
end
end
def self.loadTheFile
if !File.exists?(LGlobalSave::FILE_NAME)
f = makeNewFile
return f
else
f = nil
File.open(FILE_NAME, "rb") do |file|
f = Marshal.load(file)
end
return f
end
end
def self.makeNewFile
return LGlobalSaveFile.new
end
def self.loadVariables(f)
for i in VARIABLES_TO_SAVE
$game_variables[i]= f.getVar(i)
end
end
def self.loadSwitches(f)
for i in SWITCHES_TO_SAVE
$game_switches[i]= f.getSwitch(i)
end
end
def self.saveVariables(f)
for i in VARIABLES_TO_SAVE
f.setVar(i, $game_variables[i])
end
end
def self.saveSwitches(f)
for i in SWITCHES_TO_SAVE
f.setSwitch(i, $game_switches[i])
end
end
def self.save
f = makeNewFile
saveVariables(f)
saveSwitches(f)
saveTheFile(f)
end
def self.load
f = loadTheFile
loadVariables(f)
loadSwitches(f)
end
end # end of module LGlobalSave
#==============================================================================
# ** LGlobalSaveFile
#------------------------------------------------------------------------------
# 이 클래스의 모든 오브젝트는 global.sav 에 저장됩니다.
# 모든 전역저장된 변수와 스위치를 포함합니다.
#==============================================================================
class LGlobalSaveFile
def initialize # 오브젝트 초기화
@var = []
@switch = []
end
# @var 는 전역 저장 변수의 데이터가 저장됩니다.
# 메소드 getVar 과 setVar :
def getVar(id)
return @var[id]
end
def setVar(id, val)
@var[id] = val
end
# @switch 는 전역 저장 스위치의 데이터가 저장됩니다.
# 메소드 getSwitch 와 setSwitch :
def getSwitch(id)
return @switch[id]
end
def setSwitch(id, val)
@switch[id] = val
end
end # end of class LGlobalSaveFile
#==============================================================================
# 이 메소드는 이벤트 내에서 전역 저장 및 불러오기 기능을 정의합니다.
#==============================================================================
def global_save
LGlobalSave.save
end
def global_load
LGlobalSave.load
end
#==============================================================================
# ** DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# 메소드 재정의 : self.setup_new_game
#--------------------------------------------------------------------------
def self.setup_new_game
create_game_objects
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
Graphics.frame_count = 0
LGlobalSave.load if LGlobalSave::LOAD_ON_NEW
end
#--------------------------------------------------------------------------
# 메소드 재정의 : self.save_game(index)
#--------------------------------------------------------------------------
def self.save_game(index)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
LGlobalSave.save if LGlobalSave::SAVE_ON_SAVE
end
#--------------------------------------------------------------------------
# 메소드 재정의 : self.load_game(index)
#--------------------------------------------------------------------------
def self.load_game(index)
load_game_without_rescue(index) rescue false
LGlobalSave.load if LGlobalSave::LOAD_ON_LOAD
end
end # end of module DataManager