#=========================================================================== # ◆ A1 Scripts ◆ # マップイベント(RGSS3) # # バージョン : 2.00 (2012/01/06) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・設置したマップ専用のコモンスクリプトのように動作するイベントを作ります #--------------------------------------------------------------------------- # 更新履歴   :2011/12/15 Ver1.00 リリース #    :2012/01/02 Ver1.10 A1共通スクリプトVer3.30対応 #    :2012/01/06 Ver2.00 サブイベント機能追加 #    :2012/01/06 Ver2.00 「イベントを呼び出す」機能追加 #--------------------------------------------------------------------------- # 設置場所 #  A1共通スクリプトより下 # 一部再定義メソッドがあるため、なるべく上の方 # # 必要スクリプト # A1共通スクリプトVer3.30以上 #--------------------------------------------------------------------------- # 使い方 # イベントの名前を [MapEvent] にしたイベントのイベントページが呼び出し対象 # トリガーは何でも良い # # イベントコマンド「注釈」に記述 # #  マップイベント [no],(w) # no:起動するページNo # w:イベント実行完了まで待つ # w を省略すると並列処理として動作 # # イベントの名前を [SubEvent 名前] にすると # イベントコマンド「注釈」で呼び出せるイベントになります # # サブイベント 名前,no,(w) # # イベントコマンド「注釈」に記述 # # イベントの呼び出し event_id,no,(w) # # event_id の ページ no を呼び出します #============================================================================== $imported ||= {} $imported["A1_MapEvent"] = true if $imported["A1_Common_Script"] old_common_script("マップイベント", "3.30") if common_version < 3.30 #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 #-------------------------------------------------------------------------- alias a1_gmap_common_initialize initialize def initialize a1_gmap_common_initialize @map_event = nil end #-------------------------------------------------------------------------- # ★ イベントのセットアップ #-------------------------------------------------------------------------- def setup_events @events = {} @sub_event = {} @map.events.each do |i, event| @events[i] = Game_Event.new(@map_id, event) @map_event = @events[i] if @events[i].name == "[MapEvent]" @sub_event[$1] = @events[i] if @events[i].name =~ /\[SubEvent[ ](\S+)\]/ end @common_events = parallel_common_events.collect do |common_event| Game_CommonEvent.new(common_event.id) end refresh_tile_events end #-------------------------------------------------------------------------- # ○ マップイベントの開始 #-------------------------------------------------------------------------- def start_map_event(no) @map_event.start_map_event(no) end #-------------------------------------------------------------------------- # ○ サブイベントの開始 #-------------------------------------------------------------------------- def start_sub_event(name, no) @sub_event[name].start_map_event(no) end #-------------------------------------------------------------------------- # ○ イベントの呼び出し #-------------------------------------------------------------------------- def call_event(evnet_id, no) @events[evnet_id].start_map_event(no) end #-------------------------------------------------------------------------- # ○ マップイベントの取得 #-------------------------------------------------------------------------- def map_event return @map_event end #-------------------------------------------------------------------------- # ○ サブイベントの取得 #-------------------------------------------------------------------------- def sub_event(name) return @sub_event[name] end end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ☆ フレーム更新 #-------------------------------------------------------------------------- alias a1_ge_common_update update def update a1_ge_common_update unless @event.name == "[MapEvent]" return if @map_interpreters == nil || @map_interpreters.empty? @map_interpreters.each_with_index {|interpreter, i| interpreter.update @map_interpreters.delete_at(i) unless interpreter.running? } end #-------------------------------------------------------------------------- # ☆ リフレッシュ #-------------------------------------------------------------------------- alias a1_ge_common_refresh refresh def refresh return if @event.name == "[MapEvent]" a1_ge_common_refresh end #-------------------------------------------------------------------------- # ☆ 接触イベントの起動判定 #-------------------------------------------------------------------------- alias a1_ge_common_check_event_trigger_touch check_event_trigger_touch def check_event_trigger_touch(x, y) return if @event.name == "[MapEvent]" a1_ge_common_check_event_trigger_touch(x, y) end #-------------------------------------------------------------------------- # ☆ 自動イベントの起動判定 #-------------------------------------------------------------------------- alias a1_ge_common_check_event_trigger_auto check_event_trigger_auto def check_event_trigger_auto a1_ge_common_check_event_trigger_auto unless @event.name =~ /\[SubEvent[ ](\S+)\]/ end #-------------------------------------------------------------------------- # ○ イベント名 #-------------------------------------------------------------------------- def name return @event.name end #-------------------------------------------------------------------------- # ○ マップイベントの開始 #-------------------------------------------------------------------------- def start_map_event(no) page = @event.pages[no-1] return if page == nil setup_page(page) @map_interpreters ||= [] interpreter = Game_Interpreter.new(0,true) interpreter.setup(@list, @event.id) @map_interpreters.push(interpreter) end #-------------------------------------------------------------------------- # ○ マップイベントのページを取得 #-------------------------------------------------------------------------- def map_event_page(no) return @event.pages[no-1] end end #============================================================================== # ■ A1_System::CommonModule #============================================================================== class A1_System::CommonModule #-------------------------------------------------------------------------- # ☆ 注釈コマンド定義 #-------------------------------------------------------------------------- alias a1_map_event_define_command define_command def define_command a1_map_event_define_command @cmd_108["マップイベント"] = :map_event @cmd_108["サブイベント"] = :sub_event @cmd_108["イベントの呼び出し"] = :call_event end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ マップイベント #-------------------------------------------------------------------------- def map_event(params) return $game_map.start_map_event(params[0].to_i) unless params[1] == "w" proc_map_event($game_map.map_event, params[0].to_i) end #-------------------------------------------------------------------------- # ○ サブイベント #-------------------------------------------------------------------------- def sub_event(params) return $game_map.start_sub_event(params[0], params[1].to_i) unless params[2] == "w" proc_map_event($game_map.sub_event(params[0]), params[1].to_i) end #-------------------------------------------------------------------------- # ○ イベントの呼び出し #-------------------------------------------------------------------------- def call_event(params) return $game_map.call_event(params[0].to_i, params[1].to_i) unless params[2] == "w" proc_map_event($game_map.events[params[0].to_i], params[1].to_i) end #-------------------------------------------------------------------------- # ○ イベント実行 #-------------------------------------------------------------------------- def proc_map_event(event, page_no) return unless event page = event.map_event_page(page_no) return unless page child = Game_Interpreter.new(@depth + 1) child.setup(page.list, same_map? ? @event_id : 0) child.run end end end