=begin RGSS3 ★ イベント座標保持 ★ 指定イベントの座標を保存することで、 マップ切り替え後のイベント座標リセットが発生しなくなります。 ● 使い方 ●======================================================== 座標を保持しておきたいイベントの名前に 「#KEEP」という文字列を含ませてください。 ==================================================================== ● イベントコマンド ●============================================== イベントコマンドのスクリプトからイベント座標保持のクリアを行えます。 -------------------------------------------------------------------- keep_event_clear(map_id) -------------------------------------------------------------------- map_idにはリセット対象のマップID。 引数は省略可能で、省略時は全てのマップが対象になります。 ==================================================================== ver1.00 Last Update : 2011/12/18 12/18 : 新規 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =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