#=========================================================================== # ◆ A1 Scripts ◆ # セルフスイッチ拡張(RGSS2/RGSS3共用) # # バージョン : 4.00 (2014/02/11) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・注釈や「移動ルートの設定」からセルフスイッチを操作します #--------------------------------------------------------------------------- # 更新履歴   :2011/12/15 Ver1.00 リリース #    :2011/12/30 Ver1.10 まとめてセルフスイッチ機能追加 #    :2011/12/30 Ver1.10 RGSS2対応 #    :2012/01/02 Ver2.00 まとめてセルフスイッチ機能強化 #    :2012/01/02 Ver2.00 マップID 0 で「現在マップ」のセルフスイッチを操作 #    :2012/01/12 Ver3.00 A〜D以外のセルフスイッチIDに対応 #    :2014/02/11 Ver4.00 on off 以外の値に対応 #    :2014/02/11 Ver4.00 イベント名からの設定に対応 #--------------------------------------------------------------------------- # 設置場所 #  A1共通スクリプトより下 # # 必要スクリプト # A1共通スクリプトVer3.30以上 #--------------------------------------------------------------------------- # 使い方 # イベントコマンド「注釈」で指定するセルフスイッチの on/off を切り替えます # #  セルフスイッチ マップ_ID,イベントID,スイッチ,on|off # 例: # セルフスイッチ 5,12,A,on ※マップID 5 のイベントID 12 のセルフスイッチA がonになる # # 例: # セルフスイッチ 0,7,A,on ※現在マップのイベントID 7 のセルフスイッチA がonになる # # イベントコマンド「移動ルートの設定」「スクリプト」で # セルフスイッチを設定します # # self_switch([スイッチ],[true|false]) # 例: # self_switch("A",true) ※該当するイベントのセルフスイッチA がonになる #--------------------------------------------------------------------------- # まとめてセルフスイッチ # イベントコマンド「注釈」で指定するセルフスイッチの on/off を切り替えます # #  セルフスイッチ マップ_ID,イベントID-イベントID,スイッチ,on|off # 例: # セルフスイッチ 5,12-51,A,on # ※マップID 5 のイベントID 12から51までのセルフスイッチA がonになる #--------------------------------------------------------------------------- # まとめてセルフスイッチ2 # イベントコマンド「注釈」で指定するセルフスイッチの on/off を切り替えます # #  セルフスイッチ マップ_ID,[イベントID,イベントID・・・],スイッチ,on|off # 例: # セルフスイッチ 5,[10,12-51,55-71],A,on # ※マップID 5 のイベントID 10 12から51 55から71までの # セルフスイッチA がonになる #--------------------------------------------------------------------------- # A〜D以外のセルフスイッチを使う # イベントの名前にページの起動条件を設定 # # [P(no) SSW,sw_id] # # 例:イベント名[P3 SSW,E] ※このイベントの、イベントページ3の起動条件が # セルフスイッチ E が on の時 になります # # セルフスイッチのID名は何でもOKです # 「魔王」でも「把握」でも通ります #============================================================================== $imported ||= {} $imported["A1_Self_Switch"] = true if $imported["A1_Common_Script"] old_common_script("セルフスイッチ拡張", "3.30") if common_version < 3.30 #============================================================================== # ■ RPG::Event #============================================================================== class RPG::Event #-------------------------------------------------------------------------- # ○ セルフスイッチ条件のセットアップ #-------------------------------------------------------------------------- def setup_self_switch_condition @name.scan(/\[P(\d+)[ ]SSW[,](\S+)\]/).each {|info| set_condition(@pages[info[0].to_i - 1], info[1]) } end #-------------------------------------------------------------------------- # ○ 条件を設定 #-------------------------------------------------------------------------- def set_condition(page, self_switch) return if page == nil page.condition.self_switch_valid = true page.condition.self_switch_ch = self_switch end end #============================================================================== # ■ Game_SelfSwitches #------------------------------------------------------------------------------ #  セルフスイッチを扱うクラスです。組み込みクラス Hash のラッパーです。このク # ラスのインスタンスは $game_self_switches で参照されます。 #============================================================================== class Game_SelfSwitches #-------------------------------------------------------------------------- # ○ セルフスイッチの取得 #-------------------------------------------------------------------------- def [](key) @data[key] ||= false return @data[key] end end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 # event : RPG::Event #-------------------------------------------------------------------------- alias a1_self_ge_switch_initialize initialize def initialize(map_id, event) event.setup_self_switch_condition a1_self_ge_switch_initialize(map_id, event) end #-------------------------------------------------------------------------- # ☆ イベントページの条件合致判定 #-------------------------------------------------------------------------- alias a1_self_ge_switch_conditions_met? conditions_met? def conditions_met?(page) c = page.condition return $game_self_switches[c.self_switch_ch] if c.self_switch_valid && c.self_switch_ch.is_a?(Array) return a1_self_ge_switch_conditions_met?(page) end #-------------------------------------------------------------------------- # ○ 起動条件の設定 #-------------------------------------------------------------------------- def set_proc_condition(self_switch, map_id = nil, event_id = nil) key = [map_id ? map_id.to_i : @map_id, event_id ? event_id.to_i : @event.id, self_switch] condition_key = (@map_id == key[0] && @event.id == key[1]) ? self_switch : key return $game_self_switches[key] if @page.condition.self_switch_ch == condition_key @event.set_condition(@page, condition_key) refresh return $game_self_switches[key] end #-------------------------------------------------------------------------- # ☆ ロック解除 #-------------------------------------------------------------------------- alias a1_self_ge_switch_unlock unlock def unlock return @unlock_lock = false if @unlock_lock a1_self_ge_switch_unlock end #-------------------------------------------------------------------------- # ○ ロック解除のロック設定 #-------------------------------------------------------------------------- def unlock_lock=(value) @unlock_lock = value end #-------------------------------------------------------------------------- # ○ ロック解除のロック取得 #-------------------------------------------------------------------------- def unlock_lock @unlock_lock ||= false return @unlock_lock end end #============================================================================== # ■ Game_Character #------------------------------------------------------------------------------ #  主に移動ルートなどの処理を追加したキャラクターのクラスです。Game_Player、 # Game_Follower、GameVehicle、Game_Event のスーパークラスとして使用されます。 #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ○ セルフスイッチの操作 #-------------------------------------------------------------------------- def self_switch(switch, flg) $game_temp.self_switch($game_map.map_id, self.id,switch,flg) self.refresh end end #============================================================================== # ■ Game_Temp #------------------------------------------------------------------------------ #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン # スタンスは $game_temp で参照されます。 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ○ セルフスイッチの操作 #-------------------------------------------------------------------------- def self_switch(map, id, switch, flg) key = [map, id, switch] $game_self_switches[key] = flg return if $game_map.map_id != map return unless $game_map.events[id] $game_map.events[id].refresh end end #============================================================================== # ■ A1_System::CommonModule #============================================================================== class A1_System::CommonModule #-------------------------------------------------------------------------- # ☆ 注釈コマンド定義 #-------------------------------------------------------------------------- alias a1_self_switch_define_command define_command def define_command a1_self_switch_define_command @cmd_108["セルフスイッチ"] = :a1_self_switch @cmd_108["起動条件設定"] = :set_proc_condition end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ セルフスイッチの処理 #-------------------------------------------------------------------------- def a1_self_switch(params) map_id = params[0].to_i map_id = $game_map.map_id if map_id == 0 ev_id = params[1] sw = params[2] case params[3] when "on"; flag = true when "off"; flag = false else; flag = params[3] end return proc_self_switch(map_id, ev_id, sw, flag) unless ev_id.is_a?(Array) ev_id.each {|id| proc_self_switch(map_id, id, sw, flag) } end #-------------------------------------------------------------------------- # ○ セルフスイッチの処理 #-------------------------------------------------------------------------- def proc_self_switch(map_id, ev_id, sw, flag) return chain_proc_self_switch(map_id, $1.to_i, $2.to_i, sw, flag) if ev_id =~ /(\d+)-(\d+)/ return event_name_proc_self_switch(map_id, $1, sw, flag) if ev_id =~ /^[\!](.*)/ $game_temp.self_switch(map_id, ev_id.to_i, sw, flag) end #-------------------------------------------------------------------------- # ○ イベント名を探してセルフスイッチの処理 #-------------------------------------------------------------------------- def event_name_proc_self_switch(map_id, ev_name, sw, flag) tmp_map = load_data(sprintf("Data/Map%03d.rvdata2", map_id)) tmp_map.events.each { |i, event| if event.name == ev_name proc_self_switch(map_id, event.id, sw, flag) break end } tmp_map = nil end #-------------------------------------------------------------------------- # ○ セルフスイッチの連続処理 #-------------------------------------------------------------------------- def chain_proc_self_switch(map_id, from, to, sw, flag) (from..to).each {|id| $game_temp.self_switch(map_id, id, sw, flag) } end #-------------------------------------------------------------------------- # ○ 起動条件の設定 #-------------------------------------------------------------------------- def set_proc_condition(params) event = get_character(0) return if event.set_proc_condition(params[0], params[1], params[2]) event.unlock_lock = true @index = @list.size @retstart_event = event event.start end end end