=begin ★ks_インタプリタ機能追加 制作 MaidensnowOnline 暴兎 イベントコマンド"スクリプト"や"移動ルートの指定"に 書き込む事を前提とした、ちょっと便利なメソッド集。 ただの便利小物集なので、このスクリプトの著作権表記は必要ありません。 使用報告はしてくれると喜びます。 "スクリプト"内に記述するもの キャラクター from から target への距離を取得する from と target にはキャラクターオブジェクトを直接指定する事も、 event_id=-1 プレイヤー event_id=0 このイベント の形で指定する事もできる。 distance_x_from_a_to_b(from, target) distance_y_from_a_to_b(from, target) 指定座標に画面の中心を移動する scroll_map_to_xy(スクロール速度, 目標X座標, 目標Y座標) X=変数1 Y=変数2 に画面の中心を移動する scroll_map_to_xy(スクロール速度, 1) プレイヤーに画面の中心を移動する scroll_map_to_xy(スクロール速度) スクロールが終了するまでウェイト wait_for_scroll 指定したイベントの移動が終了するまでウェイト event_id=-1 プレイヤー event_id=0 このイベント wait_for_move(event_id) BGMの記憶 save_bgm 記憶したBGMの演奏 restore_bgm また、イベントコマンドで呼び出すスクリプト中で、実行を待ちたい場合に @wait_for_script = true を立てる事で、他のイベントコマンドと同様に実行待ちをすることができます。 (例・画面をスクロールさせるスクリプトで、スクロール中だったら実行待ちをする) という動作が可能になります。 イベント内向け各種省略表記 gpr => $game_party gpl => $game_player gmp => $game_map gs => $game_switches gv => $game_variables "移動ルート"内に記述するもの 向いている方向にdistマスジャンプする jump_front(dist) 向かって右に移動 move_right_90 向かって左に移動 move_left_90 指定した対象に近づく event_id=-1 プレイヤー event_id=0 このイベント move_to_char(event_id) =end class Game_Interpreter def gpr ; return $game_party ; end def gpl ; return $game_player ; end def gmp ; return $game_map ; end def gs return $game_switches end def gs=(val) return $game_switches = val end def gv return $game_variables end def gv=(val) return $game_variables = val end def event return get_character(@event_id) end def wait_for_move(id) @moving_character = get_character(id) end #-------------------------------------------------------------------------- # ● キャラクター from から target までの x距離を取得 #-------------------------------------------------------------------------- def distance_x_from_a_to_b(from, target) if from.is_a?(Numeric) from = get_character(target) end return from.distance_x_from_target(target) end #-------------------------------------------------------------------------- # ● キャラクター from から target までの y距離を取得 #-------------------------------------------------------------------------- def distance_y_from_a_to_b(from, target) if from.is_a?(Numeric) from = get_character(target) end return from.distance_y_from_target(target) end #-------------------------------------------------------------------------- # ● スクリプト #-------------------------------------------------------------------------- alias command_355_for_wait_script command_355 def command_355 @wait_for_script = false command_355_for_wait_script return false if @wait_for_script return true end #-------------------------------------------------------------------------- # ● マップのスクロール #-------------------------------------------------------------------------- def wait_for_scroll return true if $game_temp.in_battle if $game_map.scrolling? @wait_for_script = true return false end return true end def scroll_map_to_xy(speed, tar_x = nil, tar_y = nil) return true if $game_temp.in_battle if $game_map.scrolling? @wait_for_script = true return false end if !tar_x tar_x = $game_player.x tar_y = $game_player.y elsif !tar_y tar_y = $game_variables[tar_x + 1] tar_x = $game_variables[tar_x] end cx = Game_Player.center_x# / 8# + 16 - 16 tar_x = (tar_x << 8) - cx gx = $game_map.display_x sx = gx - tar_x if $game_map.loop_horizontal? # 横にループしているとき if sx.abs > $game_map.width << 7 # 絶対値がマップの半分より大きい? alter_x = sx.abs - ($game_map.width << 8) sx = alter_x * (sx >= 0 ? 1 : -1) end end sx = sx >> 8 if sx > 0 $game_map.start_scroll(4, sx.abs, speed) return elsif sx < 0 $game_map.start_scroll(6, sx.abs, speed) return end cy = Game_Player.center_y# / 8# + 16 - 16 tar_y = (tar_y << 8) - cy gy = $game_map.display_y sy = gy - tar_y if $game_map.loop_vertical? # 縦にループしているとき if sy.abs > $game_map.height << 7 # 絶対値がマップの半分より大きい? alter_y = sy.abs - ($game_map.height << 8) sy = alter_y * (sy >= 0 ? 1 : -1) end end sy = sy >> 8 if sy > 0 $game_map.start_scroll(8, sy.abs, speed) elsif sy < 0 $game_map.start_scroll(2, sy.abs, speed) end return true end #BGMの記憶 def save_bgm @eve_last_bgm = RPG::BGM::last end #記憶したBGMの演奏 def restore_bgm return unless @eve_last_bgm @eve_last_bgm.play remove_instance_variable(:@eve_last_bgm) end end class Game_Player def self.center_x ; return CENTER_X ; end def self.center_y ; return CENTER_Y ; end end class Game_Character def jump_front(dist = 1) xx = direction.shift_x * dist yy = direction.shift_y * dist jump(xx,yy) end def move_right_90 case @direction when 2; move_left when 4; move_up when 6; move_down when 8; move_right end end def move_left_90 case @direction when 8; move_left when 6; move_up when 4; move_down when 2; move_right end end def move_to_char(event_id) target = $game_map.interpreter.get_character(event_id) sx = distance_x_from_x(target.x) sy = distance_y_from_y(target.y) if sx != 0 or sy != 0 if sx.abs > sy.abs # 横の距離のほうが長い sx > 0 ? move_left : move_right # 左右方向を優先 if @move_failed and sy != 0 sy > 0 ? move_up : move_down end else # 縦の距離のほうが長いか等しい sy > 0 ? move_up : move_down # 上下方向を優先 if @move_failed and sx != 0 sx > 0 ? move_left : move_right end end end end end