#=========================================================================== # ◆ A1 Scripts ◆ # ふっ飛ばし(RGSS3) # # バージョン : 2.00 (2012/01/02) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・ランダムで斜め方向にイベントを移動させます #--------------------------------------------------------------------------- # 更新履歴   :2011/12/15 Ver1.00 リリース #    :2012/01/02 Ver2.00 まとめてふっ飛ばし機能追加 #    :2012/01/02 Ver2.00 変動式経験値獲得機能追加 #    :2012/01/02 Ver2.00 A1共通スクリプトVer3.30対応 #--------------------------------------------------------------------------- # 設置場所 #  A1共通スクリプトより下 # # 必要スクリプト # A1共通スクリプトVer3.30以上 #--------------------------------------------------------------------------- # 使い方 # イベントコマンド「移動ルートの設定」「スクリプト」に記述します # # start_fly_away(ssw, direction, exp) # ssw :ふっ飛ばし終了後にonになるセルフスイッチ 省略時は A # direction:ふっ飛ばす方向 省略時はランダム # 0:左下 1:右下 2:左上 3:右上 # exp :ふっ飛ばしで得られる経験値 省略時は 0 # 例: # start_fly_away("A") ※斜め移動し、画面端になったらセルフスイッチAをonにします # # イベントコマンド「注釈」に記述します # # ふっ飛ばし ev_id,spd,ssw,direction # ev_id  :イベントID [ ] での配列や ev_id-ev-id のまとめて対応 # spd    :ふっ飛ばしの速度 # ssw   :ふっ飛ばし終了後にonになるセルフスイッチ 省略時は A # direction:C と記述すると、まとめてふっ飛ばし時にバラバラに飛びます # :省略すると「まとめて」で指定したイベント全て同方向に飛びます # # ふっ飛ばし経験 map_id # 指定したmap_idでの経験値レートが減少します # start_fly_away で設定した経験値 / 同マップでのふっ飛ばし経験回数 #============================================================================== $imported ||= {} $imported["A1_Fly_Away"] = true if $imported["A1_Common_Script"] old_common_script("ふっ飛ばし", "3.30") if common_version < 3.30 #============================================================================== # ■ Game_Character #------------------------------------------------------------------------------ #  主に移動ルートなどの処理を追加したキャラクターのクラスです。Game_Player、 # Game_Follower、GameVehicle、Game_Event のスーパークラスとして使用されます。 #============================================================================== class Game_Character < Game_CharacterBase #-------------------------------------------------------------------------- # ○ 定数 #-------------------------------------------------------------------------- FLY_AWAY_DIRECTION = {0 => [4, 2], 1 => [6, 2], 2 => [4, 8], 3 => [6, 8] } #-------------------------------------------------------------------------- # ☆ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :fly_away # ふっ飛ばしフラグ attr_reader :fly_away_direction # ふっ飛ばし方向 #-------------------------------------------------------------------------- # ☆ 公開メンバ変数の初期化 #-------------------------------------------------------------------------- alias a1_moshimo_ge_init_public_members init_public_members def init_public_members a1_moshimo_ge_init_public_members @fly_away = false @fly_away_direction = 0 @self_switch = "A" end #-------------------------------------------------------------------------- # ☆ フレーム更新 #-------------------------------------------------------------------------- alias a1_moshimo_ge_update update def update a1_moshimo_ge_update update_fly_away if @fly_away end #-------------------------------------------------------------------------- # ○ ふっ飛ばし更新 #-------------------------------------------------------------------------- def update_fly_away unless in_screen? @fly_away = false key = [$game_map.map_id, self.id, @self_switch] $game_self_switches[key] = true refresh end move_diagonal(@horz_direction, @vart_direction) end #-------------------------------------------------------------------------- # ○ 画面の可視領域付近にいるか判定 #-------------------------------------------------------------------------- def near_the_screen?(dx = 12, dy = 8) ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32 ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32 ax >= -dx && ax <= dx && ay >= -dy && ay <= dy end #-------------------------------------------------------------------------- # ○ 画面内? #-------------------------------------------------------------------------- def in_screen? return false if @x <= 0 return false if @y <= 0 return false if @x >= $game_map.width - 1 return false if @y >= $game_map.height - 1 return true return near_the_screen? end #-------------------------------------------------------------------------- # ○ ふっ飛ばし開始 #-------------------------------------------------------------------------- def start_fly_away(self_switch = "A", direction = nil, exp = 0) @self_switch = self_switch @fly_away_direction = direction @fly_away_direction = rand(4) if direction == nil @fly_away = true @through = true @step_anime = false @direction_fix = true fa_direction = FLY_AWAY_DIRECTION[@fly_away_direction] @horz_direction = fa_direction[0] @vart_direction = fa_direction[1] if exp > 0 value = exp / $game_temp.fly_away_exp $game_party.members.each {|actor| actor.change_exp(actor.exp + value, false) } end end end #============================================================================== # ■ Game_System #------------------------------------------------------------------------------ #  システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存 # します。このクラスのインスタンスは $game_system で参照されます。 #============================================================================== class Game_System #-------------------------------------------------------------------------- # ○ ふっ飛ばしマップに来た回数 #-------------------------------------------------------------------------- def map_fly_away(map_id) @map_fly_away ||= {} @map_fly_away[map_id] ||= 0 @map_fly_away[map_id] += 1 end end #============================================================================== # ■ Game_Temp #------------------------------------------------------------------------------ #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン # スタンスは $game_temp で参照されます。 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :fly_away_exp #-------------------------------------------------------------------------- # ☆ オブジェクト初期化 #-------------------------------------------------------------------------- alias a1_fly_away_gt_initialize initialize def initialize a1_fly_away_gt_initialize @fly_away_exp = 0 end end #============================================================================== # ■ A1_System::CommonModule #============================================================================== class A1_System::CommonModule #-------------------------------------------------------------------------- # ☆ 注釈コマンド定義 #-------------------------------------------------------------------------- alias a1_fly_away_define_command define_command def define_command a1_fly_away_define_command @cmd_108["ふっ飛ばし"] = :fly_away @cmd_108["ふっ飛ばし経験"] = :fly_away_exp end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ ふっ飛ばし #-------------------------------------------------------------------------- def fly_away(params) ev_id = params[0] spd = params[1].to_i ssw = params[2] direction = params[3] == "C" ? nil : rand(4) return setup_fly_away(ev_id, spd, ssw, direction) unless ev_id.is_a?(Array) ev_id.each {|id| setup_fly_away(ev_id, spd, ssw, direction) } end #-------------------------------------------------------------------------- # ○ ふっ飛ばしのセットアップ #-------------------------------------------------------------------------- def setup_fly_away(ev_id, spd, ssw, direction) return chain_setup_fly_away($1.to_i, $2.to_i, spd, ssw, direction) if ev_id =~ /(\d+)-(\d+)/ proc_fly_away(ev_id.to_i, spd, ssw, direction) end #-------------------------------------------------------------------------- # ○ ふっ飛ばしの連続セットアップ #-------------------------------------------------------------------------- def chain_setup_fly_away(from, to, spd, ssw, direction) (from..to).each {|id| proc_fly_away(id, spd, ssw, direction) } end #-------------------------------------------------------------------------- # ○ ふっ飛ばしの実行 #-------------------------------------------------------------------------- def proc_fly_away(ev_id, spd, ssw, direction) $game_map.events[ev_id].move_speed(spd) $game_map.events[ev_id].start_fly_away(ssw, direction) end #-------------------------------------------------------------------------- # ○ ふっ飛ばし経験 #-------------------------------------------------------------------------- def fly_away_exp(params) $game_temp.fly_away_exp = $game_system.map_fly_away(params[0].to_i) end end end