=begin
      RGSS3
      
   ★ ゲーム内共有変数 ★
 
      設定箇所で指定したスイッチと変数をゲーム全体で共有します。
      
      ● 仕様 ●==========================================================
      スクリプト導入後にセーブするとゲームフォルダ内に新しく
      "PublicData"
      というrvdata2ファイルが自動的に作成されます。
      --------------------------------------------------------------------
      共有データセーブのタイミングは、通常のセーブ時
      共有データロードのタイミングは、通常のロード時&ゲーム立ち上げ時です。
      ====================================================================
      
      ● イベントについて ●==============================================
      イベントコマンドのスクリプトに、
        write_public_data
      と記述すると、任意のタイミングで共有データのセーブを行うことができます。
      エンディング時などにどうぞ。
      ====================================================================
      
      ver1.00
 
      Last Update : 2011/12/17
      12/17 : RGSS2からの移植
      
      ろかん   [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
=end
 
 
 
module PUBLIC_DATA
#----------------------------------------------------------------------------
# ● 設定箇所ここから
#----------------------------------------------------------------------------
  # 共有するスイッチ番号 (例 : SWITCH = [3, 7, 12])
  SWITCH = []
  # 共有する変数番号 (例 : VARIABLE = [1, 6])
  VARIABLE = []
  # 通常のセーブと同時に共有データのセーブも行うかどうか(true/ false)
  S_AUTOSAVE = true
#----------------------------------------------------------------------------
# ● 設定箇所ここまで
#----------------------------------------------------------------------------
end
 
$rsi ||= {}
$rsi["ゲーム内共有変数"] = true
 
$public = [{}, {}]
#==============================================================================
# ■ PUBLIC_DATA
#------------------------------------------------------------------------------
#  共有データの書き込み、読み込みを実行するモジュール
#==============================================================================
module PUBLIC_DATA
  # 共有データファイル名
  FILE_NAME = "PublicData.rvdata2"
  #--------------------------------------------------------------------------
  # ● 共有データの書き込み
  #--------------------------------------------------------------------------
  def self.write_public_data
    SWITCH.each{|i| $public[0][i] = $game_switches[i]}
    VARIABLE.each{|i| $public[1][i] = $game_variables[i]}
    save_data($public, FILE_NAME)
  end
  #--------------------------------------------------------------------------
  # ● 共有データの読み込み
  #--------------------------------------------------------------------------
  def self.read_public_data
    if File.exist?(FILE_NAME)
      $public = load_data(FILE_NAME)
      $public[0].each_pair{|key, value|
        $game_switches[key] = value if SWITCH.include?(key)
      }
      $public[1].each_pair{|key, value|
        $game_variables[key] = value if VARIABLE.include?(key)
      }
    end
  end
end
 
class << DataManager
  #--------------------------------------------------------------------------
  # ● 各種ゲームオブジェクトの作成
  #--------------------------------------------------------------------------
  alias public_data_create_game_objects create_game_objects
  def create_game_objects
    public_data_create_game_objects
    PUBLIC_DATA.read_public_data
  end
  #--------------------------------------------------------------------------
  # ● セーブの実行
  #--------------------------------------------------------------------------
  alias public_data_save_game save_game
  def save_game(index)
    if public_data_save_game(index)
      PUBLIC_DATA.write_public_data
      true
    else
      false
    end
  end
  #--------------------------------------------------------------------------
  # ● ロードの実行
  #--------------------------------------------------------------------------
  alias public_data_load_game load_game
  def load_game(index)
    if public_data_load_game(index)
      PUBLIC_DATA.read_public_data
      true
    else
      false
    end
  end
end
 
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 共有データの保存
  #--------------------------------------------------------------------------
  def write_public_data
    PUBLIC_DATA.write_public_data
  end
end