#==============================================================================
# 「イベントセパレーター」(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