=begin
RGSS3
★ イベント座標保持 ★
指定イベントの座標を保存することで、
マップ切り替え後のイベント座標リセットが発生しなくなります。
● 使い方 ●========================================================
座標を保持しておきたいイベントの名前に
「#KEEP」という文字列を含ませてください。
====================================================================
● イベントコマンド ●==============================================
イベントコマンドのスクリプトからイベント座標保持のクリアを行えます。
--------------------------------------------------------------------
keep_event_clear(map_id)
--------------------------------------------------------------------
map_idにはリセット対象のマップID。
引数は省略可能で、省略時は全てのマップが対象になります。
====================================================================
ver1.00
Last Update : 2011/12/18
12/18 : 新規
ろかん [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
=end
$rsi ||= {}
$rsi["イベント座標保持"] = true
class RPG::Event
def keep_position?
self.name.include?("#KEEP")
end
end
class Game_System
#--------------------------------------------------------------------------
# ● 座標を保持するイベントの登録
#--------------------------------------------------------------------------
def set_keep_event_position(map_id, event)
@keep_event_position ||= {}
@keep_event_position[map_id] ||= {}
@keep_event_position[map_id][event.event.id] = [event.x, event.y, event.direction]
end
#--------------------------------------------------------------------------
# ● 保持されているイベントの座標取得
#--------------------------------------------------------------------------
def get_keep_event_position(map_id, event_id, keep)
return nil unless @keep_event_position
return nil unless @keep_event_position[map_id]
if keep
@keep_event_position[map_id][event_id]
else
@keep_event_position[map_id].delete(event_id)
nil
end
end
#--------------------------------------------------------------------------
# ● 指定マップのイベント座標の登録情報をクリア
#--------------------------------------------------------------------------
def clear_keep_position(map_id)
if @keep_event_position
if map_id.zero?
@keep_event_position.clear
elsif @keep_event_position[map_id]
@keep_event_position[map_id].clear
end
end
end
end
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :event # イベント
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias _revision_position initialize
def initialize(map_id, event)
@keep = event.keep_position?
get_position = get_save_position(map_id, event)
event.x = get_position[0]
event.y = get_position[1]
_revision_position(map_id, event)
@direction = get_position[2] if get_position[2]
end
#--------------------------------------------------------------------------
# ● 現在座標を保持する
#--------------------------------------------------------------------------
def save_position
$game_system.set_keep_event_position(@map_id, self) if @keep
end
#--------------------------------------------------------------------------
# ● 保持座標を返す(保持されていないイベントの場合は初期座標を返します)
#--------------------------------------------------------------------------
def get_save_position(map_id, event)
sp = $game_system.get_keep_event_position(map_id, event.id, @keep)
sp ? sp : [event.x, event.y, nil]
end
end
class Game_Map
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias _keep_event_setup setup
def setup(map_id)
save_event_position
_keep_event_setup(map_id)
end
#--------------------------------------------------------------------------
# ● イベント座標の保持
#--------------------------------------------------------------------------
def save_event_position
@events.each_value{|event| event.save_position}
end
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 保持しているイベント座標のクリア
#--------------------------------------------------------------------------
def keep_event_clear(map_id = 0)
$game_system.clear_keep_position(map_id)
end
end