#============================================================================== # 「イベントセパレーター」(ACE) Ver.1.0 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇利用規約 # この素材はフリーゲームにのみご利用頂けます。 # シェアウェア、販売作品への利用は原則として禁止します。(詳細はブログ参照) # 利用される場合はスクリプト作成者として「奈々」とURLを明記し # 配布時にブログで利用規約の確認と、利用報告を行って下さい。 # #------------------------------------------------------------------------------ # # マップイベントを複数のイベントに分割します。 # これにより、1マスに1つのイベントしか配置できない仕様を回避します。 # (例えば、机のイベントとコーヒーのイベントを重ねることができます) # # 使い方は、イベントページの最初に注釈で # <イベント分割> # を記入します。 # # 記入したページ以降が、新しいイベントとして分割されます。 # 複数のページに記入して、何個でも分割することができます。 # (分割したイベントは、新しいイベントIDを持ちます) # #============================================================================== #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ # マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== #※イベントの作成メソッドで、cloneが未完全(pagesは参照先?)なので #切り取り処理が後の判定に影響を与えてしまっている。 #マーシャルを使った複製を調べる? class Game_Map #-------------------------------------------------------------------------- # ● イベントのセットアップ #-------------------------------------------------------------------------- def setup_events #新規イベントのID割り振り用 new_event_id = @map.events.size + 1 @events = {} @map.events.each_value do |event| first_page = 0 last_page = 0 event.pages.each.with_index(0) do |page, i| #セパレータータグの1つ前まで分割 if page.n7_event_separate? && i != 0 last_page = i - 1 new_event_id = n7_create_event(event, new_event_id, first_page, last_page) first_page = i end #最後のページなら残りを1つに if i == event.pages.size - 1 last_page = i new_event_id = n7_create_event(event, new_event_id, first_page, last_page) end end end @common_events = parallel_common_events.collect do |common_event| Game_CommonEvent.new(common_event.id) end refresh_tile_events end #-------------------------------------------------------------------------- # ● イベントの作成(戻り値:new_event_id) #-------------------------------------------------------------------------- def n7_create_event(event, new_event_id, first_page, last_page) #イベント情報を複製し、不要なページを削る #参照先の@pagesを編集するため、深いコピーにする copy_event = Marshal.load(Marshal.dump(event)) while copy_event.pages[last_page + 1] != nil copy_event.pages.pop end while copy_event.pages.size > last_page - first_page + 1 copy_event.pages.shift end #1ページ目を含まない=新しいイベントとして配置する if first_page > 0 copy_event.id = new_event_id new_event_id += 1 end @events[copy_event.id] = Game_Event.new(@map_id, copy_event) return new_event_id end end #============================================================================== # ■ RPG::Event::Page #------------------------------------------------------------------------------ # イベントページのデータクラス。 #============================================================================== class RPG::Event::Page #-------------------------------------------------------------------------- # ● 注釈コマンド「<イベント分割>」のサーチ #-------------------------------------------------------------------------- def n7_event_separate? @list.each do |command| #注釈以外のコマンドが来たらサーチを終える break unless command.code == 108 || command.code == 408 return true if command.parameters[0][/\s*\<\s*イベント分割\s*\>\s*/] end return false end end