#◆◇◆◇◆ 場所移動補助スクリプトVX ver 1.01 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ 2009/02/01 ver1.01 更新 グラフィックが設定されていないと 機能しないミスを修正 ○ 2009/01/31 ver1.00 公開 ■ 説明 イベントの 場所移動 を補助するスクリプトです。 通常では、マップの角などに移動イベントを置く場合、 マスの分だけ置かなければならず、移動ポイントの修正も面倒です。 このスクリプトは、その作業の簡易化を図ります。 設定にはイベントの内容に「どこでもいいので」注釈を置きます。 そして、注釈の内容を MX1 MY2 等と記入することにより、接触範囲をそのマス分拡張します。 上記の例なら、"右"に1マス、"下"に2マス、接触範囲を拡張します。 また、注釈の内容にさらに 場所移動修正 と記入することにより、 移動ポイントも本来のポイントから自動でずらしてくれます。 (MX1と記入し、1マスずれた位置から接触すれば場所移動の位置も1マスずらす) 原則、接触範囲を拡張するイベントは、 トリガーを「イベントから接触」にする必要があります。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 場所移動補助スクリプトVXを有効化 ( true で有効 / false で無効 ) RGSS["場所移動補助"] = true end # 場所移動補助スクリプトVXが有効な場合に以降の処理を実行する if MINTO::RGSS["場所移動補助"] == true then #============================================================================== # ☆ Add_Game_Event #------------------------------------------------------------------------------ # Game_Eventクラスに機能を追加するモジュールです。 # イベントの接触範囲を拡張します。 #============================================================================== module Add_Game_Event #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize # スーパークラスの処理に移行 super @x_puls = {} @y_puls = {} @ex_move = {} @move_puls = {} @last_page = {} end #-------------------------------------------------------------------------- # ● 拡張データの取得 #-------------------------------------------------------------------------- def get_extra_data # イベントページが更新されていない場合 if @last_page[self] == @page then # メソッドを返す return end # 最新のイベントページを記憶 @last_page[self] = @page # 拡張データを初期化 @x_puls[self] = 0 @y_puls[self] = 0 @ex_move[self] = false @move_puls[self] = false # イベントページが有効な場合 if @page != nil then # イベントページに内容が存在する場合 if @page.list != nil then # ループ処理(ページ内容) (0...@page.list.size).each do |i| # 注釈の場合 if @page.list[i].code == 108 or @page.list[i].code == 408 then # 注釈内ループ処理 (0...@page.list[i].parameters.size).each do |id| # 注釈のコードを取得 code = @page.list[i].parameters[id].dup # 拡張座標が未設定の場合 if @x_puls[self] == 0 then # X座標拡張幅を取得 @x_puls[self] = code.dup.split(/MX/)[1].to_i end if @y_puls[self] == 0 then # Y座標拡張幅を取得 @y_puls[self] = code.dup.split(/MY/)[1].to_i end # 場所移動修正フラグを取得 @move_puls[self] |= (code == "場所移動修正") # 接触範囲拡張フラグを設定 @ex_move[self] |= (@x_puls[self] >= 1) @ex_move[self] |= (@y_puls[self] >= 1) # 拡張場所移動が有効な場合 if @ex_move[self] == true then # 起動判定を正面にする @priority_type = 1 end end end end end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # 拡張データを取得 get_extra_data # 拡張接触範囲を更新 update_extra_move # スーパークラスの処理に移行 super end #-------------------------------------------------------------------------- # ● フレーム更新(拡張接触判定) #-------------------------------------------------------------------------- def update_extra_move # 接触判定拡張フラグが有効な場合 if @ex_move[self] == true then # ループ処理(X座標計算) (0..@x_puls[self]).each do |i| # 接触イベントの起動判定 check_event_trigger_touch(@x+i, @y) end # ループ処理(Y座標計算) (0..@y_puls[self]).each do |i| # 接触イベントの起動判定 check_event_trigger_touch(@x, @y+i) end end end end #============================================================================== # ■ Game_Temp #------------------------------------------------------------------------------ #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン # スタンスは $game_temp で参照されます。 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :exmove # 場所移動拡張 end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(Add_Game_Event) # 接触範囲拡張モジュール #-------------------------------------------------------------------------- # ● 接触イベントの起動判定 # x : X座標 # y : Y座標 #-------------------------------------------------------------------------- alias :extra_move_check_event_trigger_touch :check_event_trigger_touch def check_event_trigger_touch(x, y) # イベント実行中の場合 if $game_map.interpreter.running? == true then # メソッドを返す return end # トリガーが [イベントから接触] の場合 if @trigger == 2 then # イベントの座標とプレイヤーの座標が等しい場合 if $game_player.pos?(x, y) == true then # ジャンプ中以外で、起動判定が正面のイベントの場合 if ((jumping? == false) and (@priority_type == 1)) then # 場所移動修正フラグが有効な場合 if @move_puls[self] == true then $game_temp.exmove = [0, 0] # 場所移動拡張座標を取得 $game_temp.exmove[0] = $game_player.x - @x $game_temp.exmove[1] = $game_player.y - @y end end end end # 元の処理を実行 return extra_move_check_event_trigger_touch(x, y) end end #============================================================================== # ■ Game_Player #------------------------------------------------------------------------------ #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。 #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● 場所移動の予約(拡張) #-------------------------------------------------------------------------- def reserve_transfer_puls @new_x += $game_temp.exmove.to_a[0].to_i @new_y += $game_temp.exmove.to_a[1].to_i $game_temp.exmove = [0, 0] end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 場所移動 #-------------------------------------------------------------------------- alias :extra_move_command_201 :command_201 def command_201 # 元の処理を実行 bool = extra_move_command_201 # 移動ポイントを修正 $game_player.reserve_transfer_puls # フラグを返す return bool end end end