# encoding: utf-8 #============================================================================== # ■ 共有スイッチ・変数スクリプトさん #------------------------------------------------------------------------------ # 2021/12/15 Ruたん #------------------------------------------------------------------------------ # 指定のスイッチ・変数をゲーム全体で共有するようにします。 # # 共有されたスイッチ・変数は、値が変更されると、 # オートセーブのように直ちに共有セーブに反映されます。 # (正確には約1/60秒後に保存されます) #------------------------------------------------------------------------------ # 【更新履歴】 # 2021/12/15 作成 #============================================================================== #============================================================================== # ● 設定項目 #============================================================================== module Torigoya module SharedData module Config # 共有セーブのファイル名 FILENAME = 'shared.rvdata2' # 共有するスイッチのID(複数登録する場合はカンマ区切り) SWITCH_IDS = [ 1, 2 ] # 共有する変数のID(複数登録する場合はカンマ区切り) VARIABLE_IDS = [ 1, 2 ] end end end #============================================================================== # ↑   ここまで設定   ↑ # ↓ 以下、スクリプト部 ↓ #============================================================================== #============================================================================== # ■ Shared #============================================================================== module Torigoya module SharedData #-------------------------------------------------------------------------- # ● 共有データ #-------------------------------------------------------------------------- class Item attr_accessor :changed #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize(default_value = 0) @data = {} @default_value = default_value @changed = false end #-------------------------------------------------------------------------- # ● データの取得 #-------------------------------------------------------------------------- def [](id) @data[id] || @default_value end #-------------------------------------------------------------------------- # ● データの登録 #-------------------------------------------------------------------------- def []=(id, value) return if @data[id] == value @changed = true @data[id] = value end #-------------------------------------------------------------------------- # ● 内容に変更があるか? #-------------------------------------------------------------------------- def changed? !!@changed end end #-------------------------------------------------------------------------- # ● 共有データセット(スイッチ・変数) #-------------------------------------------------------------------------- class ItemSet attr_reader :shared_switch attr_reader :shared_variable #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize @shared_switch = Item.new(false) @shared_variable = Item.new(0) end #-------------------------------------------------------------------------- # ● 内容に変更があるか? #-------------------------------------------------------------------------- def changed? @shared_switch.changed? || @shared_variable.changed? end alias changed changed? #-------------------------------------------------------------------------- # ● 内容変更フラグの設定 #-------------------------------------------------------------------------- def changed=(value) @shared_switch.changed = @shared_variable.changed = value end end class << self #-------------------------------------------------------------------------- # ● 共有データの取得 #-------------------------------------------------------------------------- def data @data ||= begin File.open(filename, 'rb') { |f| Marshal.load(f) }.tap do |data| raise unless data.kind_of?(Torigoya::SharedData::ItemSet) end rescue => e puts e.inspect Torigoya::SharedData::ItemSet.new end end #-------------------------------------------------------------------------- # ● 共有データの保存 # 内容に変更がない場合は保存処理を行わない #-------------------------------------------------------------------------- def save return unless data.changed? data.changed = false File.open(filename, 'wb') { |f| f.write Marshal.dump(data) } end #-------------------------------------------------------------------------- # ● 共有データのファイル名 #-------------------------------------------------------------------------- def filename Torigoya::SharedData::Config::FILENAME end end end end #============================================================================== # ■ Game_Switches #============================================================================== class Game_Switches #-------------------------------------------------------------------------- # ● スイッチの取得(エイリアス) #-------------------------------------------------------------------------- alias torigoya_shared_data__get [] def [](switch_id) if Torigoya::SharedData::Config::SWITCH_IDS.include?(switch_id) return Torigoya::SharedData.data.shared_switch[switch_id] end torigoya_shared_data__get(switch_id) end #-------------------------------------------------------------------------- # ● スイッチの設定(エイリアス) #-------------------------------------------------------------------------- alias torigoya_shared_data__set []= def []=(switch_id, value) if Torigoya::SharedData::Config::SWITCH_IDS.include?(switch_id) Torigoya::SharedData.data.shared_switch[switch_id] = value end torigoya_shared_data__set(switch_id, value) end end #============================================================================== # ■ Game_Variables #============================================================================== class Game_Variables #-------------------------------------------------------------------------- # ● 変数の取得(エイリアス) #-------------------------------------------------------------------------- alias torigoya_shared_data__get [] def [](variable_id) if Torigoya::SharedData::Config::VARIABLE_IDS.include?(variable_id) return Torigoya::SharedData.data.shared_variable[variable_id] end torigoya_shared_data__get(variable_id) end #-------------------------------------------------------------------------- # ● 変数の設定(エイリアス) #-------------------------------------------------------------------------- alias torigoya_shared_data__set []= def []=(variable_id, value) if Torigoya::SharedData::Config::VARIABLE_IDS.include?(variable_id) Torigoya::SharedData.data.shared_variable[variable_id] = value end torigoya_shared_data__set(variable_id, value) end end #============================================================================== # ■ Scene_Base #============================================================================== class Scene_Base #-------------------------------------------------------------------------- # ● フレーム更新(基本)(エイリアス) #-------------------------------------------------------------------------- alias torigoya_shared_data__update_basic update_basic def update_basic Torigoya::SharedData.save torigoya_shared_data__update_basic end end