#============================================================================ # # ■乗り物拡張×隊列歩行スクリプト 併用スクリプト # # □作成時バージョン:乗り物拡張 Ver2.61 #           隊列歩行スクリプト Last update : 2008/3/16 # □製作者:月紳士 # ・RPGツクールVX用 RGSS2スクリプト # # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド #  ○●…月紳士の新規メソッドをさらに書き換えた物 #  ○◎…月紳士の新規メソッドに対してのエイリアス #  ◎●…すでにエイリアス定義済みのメソッドをさらに書き換えた物 #============================================================================ =begin  月紳士のスクリプト「乗り物拡張」と  HARTS HORN様の「隊列歩行スクリプト」を併用する為の追加スクリプトです。  ※このスクリプトと、   月紳士のスクリプト「乗り物拡張」   に関する問題報告や質問は、HARTS HORN様へは絶対になさらないでください。   使用は自己責任で。   「HARTS HORN様へご迷惑をお掛けしない」これを必ず守ってください。  導入順   隊列歩行スクリプト   乗り物拡張   このスクリプト  の順で導入してください。 =end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ○◎ イベント乗り物のリフレッシュ #-------------------------------------------------------------------------- alias tig_evo_event_vehicle_refresh event_vehicle_refresh def event_vehicle_refresh tig_evo_event_vehicle_refresh $game_subplayer1.transparent = false # 透明を解除 $game_subplayer2.transparent = false # 透明を解除 $game_subplayer3.transparent = false # 透明を解除 $game_subplayer1.set_direction($game_player.direction) # 向きを合わせる $game_subplayer2.set_direction($game_player.direction) # 向きを合わせる $game_subplayer3.set_direction($game_player.direction) # 向きを合わせる end end #============================================================================== # ■ Game_Vehicle #------------------------------------------------------------------------------ #  乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。 # 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。 #============================================================================== class Game_Vehicle < Game_Character #-------------------------------------------------------------------------- # ○● フレーム更新 #-------------------------------------------------------------------------- # パーティーが集合してから飛行船が上昇するように。 #-------------------------------------------------------------------------- def update super if [2, 4, 5].include?(@type) # 飛行船・大型飛行船・魔法の絨毯の場合 case @type # タイプに合わせた最頂点の高さの取得 when 2 ; height = 1 when 4 ; height = 2 when 5 ; height = 1 end if @driving return if not $game_player.party_getting_on ## 変更部分 if @altitude < MAX_ALTITUDE * height @altitude += 1 # 高度を上げる end elsif @altitude > 0 @altitude -= 1 # 高度を下げる if @altitude == 0 @priority_type = vehicle_priority # 待機時のプライオリティに $game_player.ride_off_character $game_player.turn_down update_bush_depth turn_left end end end end end #============================================================================== # ■ Game_Player #------------------------------------------------------------------------------ #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。 #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ○● 乗り物の処理 #-------------------------------------------------------------------------- # 後続キャラの動作処理の追加。 #-------------------------------------------------------------------------- def update_vehicle return unless in_vehicle? vehicle = $game_map.vehicles[@vehicle_type] if @vehicle_getting_on # 乗る途中? vehicle.moveto(@x, @y) # 乗っている間に自律移動してしまうのを防ぐ if not moving? and not @follow_member_gathering if vehicle.riding_type? unless [2, 4].include?(@vehicle_type) vehicle.priority_type = 1 end gather ## 追加部分 return unless party_getting_on ## ride_on(vehicle) else @transparent = true # 透明化 gather ## 追加部分 return unless party_getting_on ## end @direction = vehicle.direction # 向きを変更 @move_speed = vehicle.speed # 移動速度を変更 @vehicle_getting_on = false # 乗る動作終了 end elsif @vehicle_getting_off # 降りる途中? if not moving? and vehicle.altitude == 0 @vehicle_getting_off = false # 降りる動作終了 if vehicle.riding_type? vehicle.priority_type = vehicle.vehicle_priority else @transparent = false # 透明を解除 end $game_subplayer1.transparent = false # 透明を解除 ## 追加部分 $game_subplayer2.transparent = false # 透明を解除 ## $game_subplayer3.transparent = false # 透明を解除 ## $game_subplayer1.through = false # すり抜けを解除 ## $game_subplayer2.through = false # すり抜けを解除 ## $game_subplayer3.through = false # すり抜けを解除 ## $game_subplayer1.moveto($game_player.x,$game_player.y) ## $game_subplayer2.moveto($game_player.x,$game_player.y) ## $game_subplayer3.moveto($game_player.x,$game_player.y) ## $game_subplayer1.set_direction($game_player.direction) # 向き ## $game_subplayer2.set_direction($game_player.direction) # 向き ## $game_subplayer3.set_direction($game_player.direction) # 向き ## if vehicle.instant vehicle.instant = false vehicle.set_location(0, 0, 0) end @vehicle_type = -1 # 乗り物タイプ消去 update_bush_depth end else # 乗り物に乗っている vehicle.sync_with_player # プレイヤーと同時に動かす end end #-------------------------------------------------------------------------- # ○● イベント乗り物の処理 #-------------------------------------------------------------------------- # 後続キャラの処理の追加。 #-------------------------------------------------------------------------- def update_event_vehicle return unless in_event_vehicle? vehicle = $game_map.events[@vehicle_event_data[3]] key = [vehicle.character_name, vehicle.character_index] if @vehicle_getting_on # 乗る途中? if not moving? and not @follow_member_gathering if @vehicle_event_data[4] != nil vehicle.priority_type = 1 end if vehicle.riding_type? if $riding_data.data_object_type[key] vehicle.set_direction(@direction) else ## 追加部分 gather ## return unless party_getting_on ## end ride_on(vehicle) else @transparent = true # 透明化 gather ## 追加部分 return unless party_getting_on ## end @vehicle_getting_on = false # 乗る動作終了 @through = false end elsif @vehicle_getting_off # 降りる途中? if not moving? if @vehicle_event_data[4] != nil vehicle.priority_type = @vehicle_event_data[4] end @vehicle_getting_off = false # 降りる動作終了 unless vehicle.riding_type? and $riding_data.data_object_type[key] ## 追加部分 $game_subplayer1.moveto($game_player.x,$game_player.y) ## $game_subplayer2.moveto($game_player.x,$game_player.y) ## $game_subplayer3.moveto($game_player.x,$game_player.y) ## $game_subplayer1.transparent = false # 透明を解除 ## $game_subplayer2.transparent = false # 透明を解除 ## $game_subplayer3.transparent = false # 透明を解除 ## $game_subplayer1.through = false # すり抜けを解除 ## $game_subplayer2.through = false # すり抜けを解除 ## $game_subplayer3.through = false # すり抜けを解除 ## $game_subplayer1.set_direction($game_player.direction) # 向き ## $game_subplayer2.set_direction($game_player.direction) # 向き ## $game_subplayer3.set_direction($game_player.direction) # 向き ## end key = [$game_map.map_id, @vehicle_event_data[3], "D"] $game_self_switches[key] = true $game_map.need_refresh = true $game_player.vehicle_event_data = nil update_bush_depth end else vehicle.sync_with_player # イベント位置を同期 end end #-------------------------------------------------------------------------- # ○● イベントからの強制離脱 #-------------------------------------------------------------------------- # 後続キャラの処理の追加。 #-------------------------------------------------------------------------- def compulsory_off_event_vehicle(erase = false) vehicle = $game_map.event_vehicle if vehicle and vehicle.riding_type? ride_off_character else @transparent = false # 透明を解除 $game_subplayer1.transparent = false # 透明を解除 ## 追加部分 $game_subplayer2.transparent = false # 透明を解除 ## $game_subplayer3.transparent = false # 透明を解除 ## $game_subplayer1.through = false # すり抜けを解除 ## $game_subplayer2.through = false # すり抜けを解除 ## $game_subplayer3.through = false # すり抜けを解除 ## $game_subplayer1.moveto($game_player.x,$game_player.y) ## $game_subplayer2.moveto($game_player.x,$game_player.y) ## $game_subplayer3.moveto($game_player.x,$game_player.y) ## $game_subplayer1.set_direction($game_player.direction) # 向き ## $game_subplayer2.set_direction($game_player.direction) # 向き ## $game_subplayer3.set_direction($game_player.direction) # 向き ## end # @vehicle_getting_off_wait = true # パーティー追従併用時用 # @vehicle_hide = false # パーティー追従併用時用 $game_player.vehicle_event_data = nil update_bush_depth vehicle.erase if erase end #-------------------------------------------------------------------------- # ○ パーティーの乗り物への乗り込み処理 #-------------------------------------------------------------------------- # 乗り降り処理の為に新期作成。 #-------------------------------------------------------------------------- def party_getting_on if $game_party.members.size >= 2 $game_subplayer1.through = true return false if $game_subplayer1.moving? return false unless $game_subplayer1.pos?(@x, @y) $game_subplayer1.transparent = true # 透明化 if $game_party.members.size >= 3 $game_subplayer2.through = true return false if $game_subplayer2.moving? return false unless $game_subplayer2.pos?(@x, @y) $game_subplayer2.transparent = true # 透明化 if $game_party.members.size >= 4 $game_subplayer3.through = true return false if $game_subplayer3.moving? return false unless $game_subplayer3.pos?(@x, @y) $game_subplayer3.transparent = true # 透明化 end end end return true end end #============================================================================== # ■ Game_Subplayer #------------------------------------------------------------------------------ #  サブプレイヤーを扱うクラスです。 # このクラスのインスタンスは $game_subplayer1〜3で参照されます。 # Game_Playerクラスを元に作っています #============================================================================== class Game_Subplayer < Game_Character #-------------------------------------------------------------------------- # ● 通行可能判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- # サブキャラからは物に衝突しないように。 #-------------------------------------------------------------------------- def passable?(x, y) x = $game_map.round_x(x) # 横方向ループ補正 y = $game_map.round_y(y) # 縦方向ループ補正 return false unless $game_map.valid?(x, y) # マップ外? return true if @through or debug_through? # すり抜け ON? # return false unless map_passable?(x, y) # マップが通行不能? return false if collide_with_characters?(x, y) # キャラクターに衝突? return true # 通行可 end #-------------------------------------------------------------------------- # ● キャラクター衝突判定 # x : X 座標 # y : Y 座標 # サブキャラからはイベントに衝突しないように。 #-------------------------------------------------------------------------- def collide_with_characters?(x, y) return false end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 場所移動 #-------------------------------------------------------------------------- # 移動後の向きが「そのまま」の際に、パーティー全員を先頭の向きにそろえる。 #-------------------------------------------------------------------------- def command_201 return true if $game_temp.in_battle if $game_player.transfer? or # 場所移動中 $game_message.visible # メッセージ表示中 return false end if @params[0] == 0 # 直接指定 map_id = @params[1] x = @params[2] y = @params[3] direction = @params[4] else # 変数で指定 map_id = $game_variables[@params[1]] x = $game_variables[@params[2]] y = $game_variables[@params[3]] direction = @params[4] end $game_player.reserve_transfer(map_id, x, y, direction) direction = $game_player.direction if direction == 0 ## 追加部分 $game_subplayer1.reserve_transfer(map_id, x, y, direction) $game_subplayer2.reserve_transfer(map_id, x, y, direction) $game_subplayer3.reserve_transfer(map_id, x, y, direction) @index += 1 return false end end #============================================================================== # ■ Scene_Map #------------------------------------------------------------------------------ #  マップ画面の処理を行うクラスです。 #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● 場所移動の処理 #-------------------------------------------------------------------------- # マップ移動後のパーティーの向きと重なり順を調節。 #-------------------------------------------------------------------------- def update_transfer_player return unless $game_player.transfer? fade = (Graphics.brightness > 0) fadeout(30) if fade @spriteset.dispose # スプライトセットを解放 $game_subplayer3.perform_transfer # 場所移動の実行    ## ↓順番変更 $game_subplayer2.perform_transfer # 場所移動の実行    ## $game_subplayer1.perform_transfer # 場所移動の実行    ## $game_player.perform_transfer # 場所移動の実行 ## ↑順番変更 $game_subplayer1.set_direction($game_player.direction) # 向き ## 追加部分 $game_subplayer2.set_direction($game_player.direction) # 向き ## $game_subplayer3.set_direction($game_player.direction) # 向き ## $game_map.autoplay # BGM と BGS の自動切り替え $game_map.update Graphics.wait(15) @spriteset = Spriteset_Map.new # スプライトセットを再作成 fadein(30) if fade Input.update end end