Ace 스크립트

#==============================================================================
# # 전역 저장 시스템 [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

Who's 미루

?

< 제작한 게임 >

- 피그렛 (Piglet) [완성] : 링크 내림

- 파라딜루전 (Paradelusion) [미완성] : 링크 내림

- 주인잃은 공책 [완성] : http://avangs.info/1090264


< 연구실 홈페이지 >

http://mirulab.xo.st/


< 아방스 게임 실황 방송국 >

http://afreeca.com/miru3137

  • ?
    미루 2013.07.11 05:52
    <주의사항>
    load_data 와 save_data 메소드를 사용한 스크립트가 아니예요.
    전역 저장 파일을 데이터 폴더 내의 파일들과 같이 암호화 하면 작동 안될거예요.
    전역 저장 파일은 되도록 프로젝트 폴더에 존재하도록 설정해주세요.
  • ?
    Roam 2013.07.11 14:38
    2회차 요소가 있는 게임을 만들때 좋겠군요 번역 감사드립니다 ^^
  • ?
    태그6 2013.07.11 21:34
    감사합니다
  • ?
    가시밭 2015.05.28 15:51
    이걸로 갤러리 만드는 데에 성공했어요!! 와와 ㅠㅠ 감사합니다.
  • ?
    IZEN 2015.08.24 23:18
    안녕하세요.. 오래 됐지만, 혹시 질문드리면 답변 해주시나요? 이 스크립트를 쓰는데 잘 안되서요

    다 true로 했고, 스크립트의 전역 저장할 변수 ID에도 21..23 이런식으로 넣어줬습니다
    이후, 특정 이벤트에서 전역변수를 대입하고 global_save 이후 타이틀로 자동으로 나가지게끔 해 놨는데,
    새로 게임을 시작하고 global_load를 해도 그 변수가 저장되어있질 않더군요...

    이 경우 뭐가 문제일까요?
    그리고, global.rvdata2는 어디에 저장되나요?
  • ?
    IZEN 2015.08.24 23:22
    혹시 플레이어가 직접 세이브하지 않으면, 전역변수도 저장되지 않는건가요?
    세이브 기능이 없는 게임이라서요...
  • profile
    게임잘날아가는닝겐 2015.09.19 15:48
    저도 마찬가지입니다. 저는 타이틀에다 스페셜 커멘드를 하나 더 만들어서 특정 스위치가 켜저있으면 내용이 달라지는 그런 식입니다. 그런데 타이틀에서는 안먹네요... 강제로 전역정보를 불러올 수 있으면 좋은데 말이죠...