| 
 
| 赞 | 1 |  
| VIP | 0 |  
| 好人卡 | 85 |  
| 积分 | 1 |  
| 经验 | 41098 |  
| 最后登录 | 2015-3-17 |  
| 在线时间 | 1071 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间1071 小时注册时间2011-5-12帖子2317 
 | 
| 怎么不问有没有可以取代人物跟随的脚本呢? 复制代码#============================================================================
#
# ■パーティーメンバーの追従 □Ver.3.23 □製作者:月紳士
# ・RPGツクールVX用 RGSS2スクリプト
#
#    ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド
#
#  ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。
#----------------------------------------------------------------------------
# 更新履歴
#   Ver.3.23  棺桶表示を使用しない場合の処理を修正。
#   Ver.3.22  追従キャラクター非表示の際の集合動作を改良。
#   Ver.3.21  棺桶が表示されない不具合を修正。
#   Ver.3.20  マップループ時の追従挙動を修正。
#   Ver.3.17  メソッド整理とゲストメンバー挿入位置調整機能追加。
#   Ver.3.16  隠す処理の不具合修正。
#   Ver.3.12  イベントコマンド・スクリプト全回復時の更新処理を追加。
#   Ver.3.11  パーティー加入時イベント用動作処理を追加。
#   Ver.3.10  フォローメンバーを隠す機能の強化とゲスト表示機能を強化。
#   Ver.3.01  コマンド追加。
#   Ver.3.00  ゲストキャラクター表示機能を追加。
#   Ver.2.03  戦闘テスト時に起きる不具合を修正。
#   Ver.2.02  不具合再修正と処理軽量化。
#   Ver.2.00  仕様見直しと棺桶未使用時の不具合を修正。
#============================================================================
=begin
 このスクリプトは
 パーティーのメンバーを主人公キャラ(先頭キャラ)の後に着いて歩かせる、
 いわいる「隊列歩行」を実現するスクリプトです。
 ・乗り物への乗り込み動作を再現。
 ・簡単に表示数を増やすことができる構造になっており、
  多人数パーティーなどに対応が容易。
 ・某ゲームのように戦闘不能メンバーを棺おけ表示にしたり出来る。
 ・パーティーには実際に参加せず、追従のみをするゲストキャラクターを設定可能。
  ゲストは最後尾だけでなく、先頭にすることも可能。
 以下に使い方を説明します↓
#----------------------------------------------------------------------------
 ●カスタマイズ項目の説明
 まず、カスタマイズ項目の説明をします。
  
  MOVE_ROUTE_FORCING_FOLLOW
   移動ルートの強制時にもパーティーメンバーを追従させるか?
   カスタマイズ項目での設定は初期設定となります。
   ゲーム中は イベントコマンド・スクリプトにて
  
      $game_player.move_route_forcing_follow = true
  
   (もしくは = false) で変更できます。
   = true で常に追従、= false でキー操作時のみとなります。
  
  
  USE_COFFIN 
   戦闘不能時に棺おけにするか?
  
   戦闘不能メンバーは隊列が(表示だけですが)変更されます。
   生存者から先頭に並びます。棺桶はその後ろです。
   ちなみに生存者のうち、先頭キャラの取得の仕方は
      $game_party.existing_members[0]
      
    IDの取得であれば
    
      $game_party.existing_members[0].id
      
    です。生存者数なら
  
      $game_party.existing_members[0].size
      
    と、なります。イベントコマンドでの変数取得や条件分岐に。
  
    
  COFFIN_FILE_NAME 
   棺おけに使う画像のファイル名です。
   = "$Coffin"  等と、必ず "" で囲ってください。
  
  
  COFFIN_FILE_INDEX
    棺おけに使う画像ファイルのインデックスです。
    
  
  DISPLAY_MEMBERS
    表示するメンバーの最大数です。
    
    多人数パーティースクリプトなどで数をカスタマイズしている場合は
    戦闘メンバーの数にあわせると良いと思います。
    
    ゲストメンバーを使用する場合は、ゲーム中における
    パーティーメンバー+ゲストメンバーの最大数にしておく必要があります。
#----------------------------------------------------------------------------
 ●イベント時の追従キャラクターの操作
 イベントコマンド・移動ルートの設定やフキダシ表示をメンバーに行うには
 「移動ルートの設定」コマンドより前にイベントコマンド・スクリプトで
 
     change_this_event(1)
     
  と実行すると、各スクリプトでの「このイベント」の対象が
  指定順番(上記括弧内の 1 の部分→追従順で1番=パーティー先頭から2番目)の
 キャラクターへの指示となります。
  ちなみに、0 番は先頭キャラ(プレイヤーへの指示と同じ)、
   -1 で元の「このイベント」に戻ります。
 
   ※ この対象変更設定はページ内のみ有効なので
    別ページならその都度、対象を変更してから行う必要がありますが、
    他ページの為に実行後にいちいち元に戻す、という手間はありません。
 棺桶状態での表示(カスタマイズ項目参照)時、指定はアクターの隊列順番ではなく
 生存者によって並び直した見た目の順番に対して、
 単純に「先頭から何番目に表示されているか」で指定されます。
 (棺桶であっても。change_this_event(1) ならとにかく先頭から2番目のキャラ)
 
#--------------------------------------------------------------------------
 
 ●追従キャラクター非表示
 追従キャラクターを非表示にするには、イベントコマンド・スクリプトにて
     follow_member_off
     
  と記入し実行します。
     
     follow_member_on
 とすれば、追従キャラクターを表示するように戻すことが出来ます。
 また、
     follow_member_off(2)
     
  とすると、「パーティー2番目までを表示、後を隠す」という風に
  指定の数を元に、隠す際の人数を調節できます。
 ※ これは隠す人数を調整しているだけなので、
    厳密には表示人数の変更とは違います。
     後述の表示最大人数の設定を超えて表示させるような
    表示人数の変更にあたる動作はできません。
    隠す人数の調整ですから、その後にfollow_member_on を実行すれば、
    隠された人数が何人であっても、全員表示に戻ります。
   隠す人数を変更したい場合は、
     改めて follow_member_off(x) を別の数で実行してください。
 
  ちなみに
    follow_member_off(1) は follow_member_off と同機能、
    follow_member_off(0) は先頭キャラを含めて全員を隠す
 です。
 
#--------------------------------------------------------------------------
 ●ゲストメンバーの表示
 実際にパーティーには加入せず、
 追従表示だけをおこなうキャラクターを設定できます。
 加入させたい時は
 イベントコマンド・スクリプトにて
     add_guest_member("People1", 1)
     
  というようにスクリプト実行させます。
  ( )内にファイル名とインデックスを記入することでキャラクター指定をします。
  "People1" の部分がファイル名です。Charactersフォルダ内のファイルです。
  拡張子はいりませんが、ファイル名を "" で閉じるのを忘れずに。
  その後の半角数字でインデックスを記入します。例だと 1 の部分です。
  
  ゲストキャラクターを外す場合は、
     remove_guest_member("People1", 1)
 
 と実行させます。このコマンドは
 同名・同インデックスのゲストキャラクターがいる場合のみ有効です。
 
     clear_guest_member
     
  とすればゲストキャラクターを一括で消し、初期状態に戻せます。
 
  ゲストキャラクターを表示できるのは
  追従キャラクターの表示最大数までとなります。
  
  ゲストメンバーはパーティーメンバーの後ろについて行きますが
  ゲストメンバーを先頭に、パーティーメンバーを後に続かせる事も出来ます。
  
     change_guest_member_order
     
  とイベントコマンド・スクリプトを実行すると
  ゲストメンバーとパーティーメンバーの並びが逆転します。
  (再度の実行で元にもどります)
  
  逆転という形でなく、次のような特別な指定も出来ます。
  
     change_guest_member_order(true)          # ゲストメンバーを先頭にする
     change_guest_member_order(false)         # ゲストメンバーを後ろにする
     change_guest_member_order(2)             # ゲストメンバーを2番目に挿入
  
  いずれも、
     change_guest_member_order
  の再実行でデフォルト(列の後ろ)に戻ります。
#--------------------------------------------------------------------------
 ●パーティーメンバーを個別に非表示
 パーティーメンバーの歩行画像を「なし」にした場合、
 そのキャラクターの隊列表示はされず、
 それより後ろのパーティーメンバーやゲストが次に続きます。
 
 隊列に参加させたくないアクターは歩行画像を「なし」にしてみてください
#--------------------------------------------------------------------------
 ●追従キャラクターの集合
 イベントコマンド・スクリプトにて
follow_member_gathering
 というようにスクリプト実行させると、
 乗り物への乗りこみ動作のように追従キャラクターが集合します。
=end
#==============================================================================
# □ カスタマイズ項目
#==============================================================================
module Party_Member_Follow
  
  MOVE_ROUTE_FORCING_FOLLOW = false
  # 移動ルートの強制時にもパーティーメンバーを追従させるか?(初期設定)
  USE_COFFIN = true
  # 戦闘不能時に棺おけにするか?
  
  COFFIN_FILE_NAME = "$Coffin"
  # 棺おけに使う画像のファイル名。
  
  COFFIN_FILE_INDEX = 0
  # 棺おけに使う画像ファイルのインデックス。
  
  DISPLAY_MEMBERS = 5
  # 表示するメンバーの最大数。
  
end
  
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :follow_member
  attr_reader   :guest_member
  attr_accessor :guest_head
  #--------------------------------------------------------------------------
  # ◎ 初期パーティのセットアップ
  #--------------------------------------------------------------------------
  alias tig_pmf_setup_starting_members setup_starting_members
  def setup_starting_members
    tig_pmf_setup_starting_members
    @guest_member = []
    @guest_head = false
    create_follow_member
  end
  #--------------------------------------------------------------------------
  # ○ フォローメンバーの作成
  #--------------------------------------------------------------------------
  def create_follow_member
    @follow_member = []
    (Party_Member_Follow::DISPLAY_MEMBERS - 1).times do |i|
      @follow_member.push(Game_Follow_Members.new(i))
    end
    character_graphic_refresh
  end
  #--------------------------------------------------------------------------
  # ○ パーティーの歩行グラフィックのリフレッシュ
  #--------------------------------------------------------------------------
  def character_graphic_refresh 
    $game_player.character_graphic_refresh
    @follow_member.each{|i|i.character_graphic_refresh}
  end
  #--------------------------------------------------------------------------
  # ○ 歩行表示させるメンバーの取得
  #--------------------------------------------------------------------------
  def display_follow_member(exist = true)
    result = []
    actors = (exist and Party_Member_Follow::USE_COFFIN ) ? existing_members : members
    for actor in actors
      next if actor.character_name == ""
      result.push(actor)
    end
    if @guest_head == true
      result = @guest_member + result
    elsif @guest_head == false
      result += @guest_member
    else
      result[@guest_head-1, 0] = @guest_member
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ○ フォローメンバー追従
  #--------------------------------------------------------------------------
  def follow_member_target_move
    gathered = true
    @follow_member.each{|i|gathered = false unless i.move_toward_target_update}
    if gathered  # 集合が完了した場合
      $game_player.follow_member_gathering = false  # 集合中フラグのオフ
    end
  end
  #--------------------------------------------------------------------------
  # ○ フォローメンバーをプレイヤーキャラクターに重ねる
  #--------------------------------------------------------------------------
  def follow_member_stack
    @follow_member.each{|i|i.moveto_player}
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをパーティーに加入させる
  #--------------------------------------------------------------------------
  def add_guest_member(file_name, index)
    @guest_member.push(Guest_Members.new(file_name, index))
    character_graphic_refresh
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをパーティーから外す
  #--------------------------------------------------------------------------
  def remove_guest_member(file_name, index)
    for i in 0...@guest_member.size
      if @guest_member[i].character_name == file_name and
         @guest_member[i].character_index == index
        @guest_member[i] = nil
      end
    end
    @guest_member.compact!
    character_graphic_refresh
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをクリアする
  #--------------------------------------------------------------------------
  def clear_guest_member
    @guest_member =[]
    character_graphic_refresh
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターとパーティーメンバーの並びを変更する
  #--------------------------------------------------------------------------
  def change_guest_member_order(order = nil)
    if order == nil
      @guest_head = @guest_head == false ? true : false # フラグ初期化・反転
    else
      @guest_head = order
    end
    character_graphic_refresh
  end
end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
# このクラスのインスタンスは $game_map で参照されます。
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ◎ リフレッシュ
  #--------------------------------------------------------------------------
  alias tig_pmf_refresh refresh
  def refresh
    tig_pmf_refresh
    $game_party.character_graphic_refresh
  end
end
  
#==============================================================================
# ■ Game_Character
#------------------------------------------------------------------------------
#  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。
#==============================================================================
class 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 false if collide_with_follow_member(x, y)  ## 追加部分
    return true                                     # 通行可
  end
  #--------------------------------------------------------------------------
  # ○ フォローメンバーとの衝突判定
  #--------------------------------------------------------------------------
  def collide_with_follow_member(x, y)
    return false if self == $game_player
    $game_party.follow_member.each do |follow_member|
      next if follow_member == self
      return true if follow_member.pos_nt?(x, y)
    end
    return false 
  end
  #--------------------------------------------------------------------------
  # ○ 指定座標に近づく
  #--------------------------------------------------------------------------
  def move_toward_coordinates(x, y)
    sx = @x - x
    if $game_map.loop_horizontal?         # 横にループしているとき
      if sx.abs > $game_map.width / 2     # 絶対値がマップの半分より大きい?
        sx -= $game_map.width             # マップの幅を引く
      end
    end
    sy = @y - y
    if $game_map.loop_vertical?           # 縦にループしているとき
      if sy.abs > $game_map.height / 2    # 絶対値がマップの半分より大きい?
        sy -= $game_map.height            # マップの高さを引く
      end
    end
    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
  #--------------------------------------------------------------------------
  # ○ 指定キャラクターに近づく
  #--------------------------------------------------------------------------
  def move_toward_pos(character)
    move_toward_coordinates(character.x, character.y)
  end
  #--------------------------------------------------------------------------
  # ○ プレイヤー正面からパーティー最後尾へ
  #--------------------------------------------------------------------------
  # ※ イベントキャラクターをパーティーに追加する際の演出に。
  #     イベントコマンド・移動ルートの設定内の、スクリプトで実行。
  #     パーティー表示最大数と同じ数だけ実行設定しておく必要あり。
  #     「このイベント」・「移動終了までウエイト」の設定、
  #     実行前にすり抜けONにする、実行後にイベント位置を(必要なら)戻す
  #     等も忘れずに。
  #--------------------------------------------------------------------------
  def party_join
    member = $game_party.follow_member
    return if @x == member[$game_party.display_follow_member.size-1].x and
              @y == member[$game_party.display_follow_member.size-1].y
    ($game_party.display_follow_member.size - 2).downto(0) do |i|
      if @x == member[i].x and @y == member[i].y
        move_toward_pos(member[i+1])
        return
      end
    end
    if @x == $game_player.x and @y == $game_player.y
      move_toward_pos(member[0])
      return
    end
    move_toward_pos($game_player)
  end
end
  
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :follow_member_gathering
  attr_reader   :move_speed
  attr_reader   :vehicle_getting_on
  attr_accessor :move_route_forcing_follow
  attr_accessor :follow_hide
  #--------------------------------------------------------------------------
  # ◎ オブジェクト初期化
  #--------------------------------------------------------------------------
  alias tig_pmf_initialize initialize
  def initialize
    tig_pmf_initialize
    @follow_member_gathering = false
    @move_route_forcing_follow = Party_Member_Follow::MOVE_ROUTE_FORCING_FOLLOW
    @follow_hide = false
  end
  #--------------------------------------------------------------------------
  # ◎ フレーム更新
  #--------------------------------------------------------------------------
  alias tig_pmf_pl_update update
  def update
    tig_pmf_pl_update
    $game_party.follow_member_target_move if moving? and @move_route_forcing_follow
  end
  #--------------------------------------------------------------------------
  # ◎ 方向ボタン入力による移動処理
  #--------------------------------------------------------------------------
  alias tig_pmf_move_by_input move_by_input
  def move_by_input
    tig_pmf_move_by_input
    if Input.dir4 != 0
      $game_party.follow_member_target_move if moving? and not @move_route_forcing_follow
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 移動可能判定
  #--------------------------------------------------------------------------
  alias tig_pmf_movable? movable?
  def movable?
    return false unless tig_pmf_movable?
    return false if @follow_member_gathering
    return false if @vehicle_getting_off_wait
    return true
  end
  #--------------------------------------------------------------------------
  # ◎ フレーム更新
  #--------------------------------------------------------------------------
  alias tig_pmf_update update
  def update
    tig_pmf_update
    if @follow_member_gathering
      $game_party.follow_member_target_move
    end
    $game_party.follow_member.each{|i|i.update}
    if @vehicle_getting_on and not moving? and
       now_vehicle and now_vehicle.pos?(@x, @y)
      @vehicle_hide = true
    end
    if @vehicle_getting_off_wait and now_vehicle == nil
      $game_party.follow_member.each{|i|i.transparent = false}
      $game_party.follow_member_stack
      @vehicle_getting_off_wait = false
    end
  end
  #--------------------------------------------------------------------------
  # ○ 透明化の取得
  #--------------------------------------------------------------------------
  def transparent
    return true if @vehicle_hide and not now_vehicle_riding_type?
    return true if @follow_hide
    return @transparent
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィックのリフレッシュ
  #  ※ 生存者が先頭になるように歩行グラフィックを表示する機能あり。
  #     全員死亡している場合は棺にする
  #--------------------------------------------------------------------------
  def character_graphic_refresh
    @pmf_character_name = "" 
    @pmf_character_index = 0
    
    unless Party_Member_Follow::USE_COFFIN
      unless $game_party.display_follow_member.empty?
        @pmf_character_name = $game_party.display_follow_member[0].character_name
        @pmf_character_index = $game_party.display_follow_member[0].character_index
      end
      return
    end
    
    if $game_party.display_follow_member[0] == nil
      if $game_party.display_follow_member(false).size >= 1
        @pmf_character_name = Party_Member_Follow::COFFIN_FILE_NAME
        @pmf_character_index = Party_Member_Follow::COFFIN_FILE_INDEX
      end
    else
      @pmf_character_name = $game_party.display_follow_member[0].character_name
      @pmf_character_index = $game_party.display_follow_member[0].character_index
    end
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィック ファイル名
  #--------------------------------------------------------------------------
  def character_name
    return @pmf_character_name
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィック インデックス
  #--------------------------------------------------------------------------
  def character_index
    return @pmf_character_index
  end
  #--------------------------------------------------------------------------
  # ◎ 指定位置に移動
  #     x : X 座標
  #     y : Y 座標
  #--------------------------------------------------------------------------
  alias tig_pmf_moveto moveto
  def moveto(x, y)
    tig_pmf_moveto(x, y)
    $game_party.follow_member_stack
  end
  #--------------------------------------------------------------------------
  # ● 乗り物の乗降
  #--------------------------------------------------------------------------
  def get_on_off_vehicle
    return false unless movable?
    if in_vehicle?
      result = get_off_vehicle                    ## 変更部分
      if result                                   ##  結果に合わせてフラグオン
        @vehicle_getting_off_wait = true          ##
        @vehicle_hide = false                     ##
      end                                         ##
      return result
    else
      result = get_on_vehicle                     ## 変更部分
      @follow_member_gathering = true if result   ##  結果に合わせてフラグオン
      return result                               ##
    end
  end
  #--------------------------------------------------------------------------
  # ◎ 乗り物の処理
  #--------------------------------------------------------------------------
  alias tig_pmf_update_vehicle update_vehicle
  def update_vehicle
    return if @follow_member_gathering
    tig_pmf_update_vehicle
  end
  #--------------------------------------------------------------------------
  # ○ 今乗っている乗り物
  #--------------------------------------------------------------------------
  def now_vehicle
    return nil if @vehicle_type == -1
    return $game_map.vehicles[@vehicle_type]
  end
  #--------------------------------------------------------------------------
  # ○ 今乗っている乗り物が騎乗タイプか?(乗り物拡張用ダミー)
  #--------------------------------------------------------------------------
  def now_vehicle_riding_type?
    return false
  end
end
#==============================================================================
# ■ Game_Vehicle
#------------------------------------------------------------------------------
#  乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
# 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
#==============================================================================
class Game_Vehicle < Game_Character
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if @type == 2               # 飛行船の場合
      if @driving
        return if $game_player.follow_member_gathering  ### 追加部分
        if @altitude < MAX_ALTITUDE
          @altitude += 1        # 高度を上げる
        end
      elsif @altitude > 0
        @altitude -= 1          # 高度を下げる
        if @altitude == 0
          @priority_type = 0    # プライオリティを「通常キャラの下」に戻す
        end
      end
    end
  end
end
素材:复制代码
#==============================================================================
# □ Game_Follow_Members
#------------------------------------------------------------------------------
#  主人公キャラ(先頭キャラ)の後を追従するパーティーメンバーを扱うクラスです。
#==============================================================================
class Game_Follow_Members < Game_Character
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :index
  attr_accessor :follow_hide
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(order)
    super()
    @order = order
    @target_x = $game_player.x
    @target_y = $game_player.y
    @next_target_x = $game_player.x
    @next_target_y = $game_player.y
    @follow_hide = false
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィックのリフレッシュ
  #  ※ 生存者が先頭になるように歩行グラフィックを表示する機能あり。
  #     全員死亡している場合は棺にする
  #--------------------------------------------------------------------------
  def character_graphic_refresh
    @pmf_character_name = "" 
    @pmf_character_index = 0
    
    unless Party_Member_Follow::USE_COFFIN
      if $game_party.display_follow_member[@order+1]
        @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
        @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
      end
      return
    end
    
    if $game_party.display_follow_member[@order+1] == nil
      if $game_party.display_follow_member(false).size >= @order+2
        @pmf_character_name = Party_Member_Follow::COFFIN_FILE_NAME
        @pmf_character_index = Party_Member_Follow::COFFIN_FILE_INDEX
      end
    else
      @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
      @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
    end
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィック ファイル名
  #--------------------------------------------------------------------------
  def character_name
    return @pmf_character_name
  end
  #--------------------------------------------------------------------------
  # ○ 歩行グラフィック インデックス
  #--------------------------------------------------------------------------
  def character_index
    return @pmf_character_index
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    if $game_player.vehicle_getting_on and not moving? and 
       $game_player.now_vehicle and $game_player.now_vehicle.pos?(@x, @y)
      @transparent = true
    end
    @move_speed = $game_player.move_speed
    super
  end
  #--------------------------------------------------------------------------
  # ● 座標一致と「すり抜け OFF」判定 (nt = No Through)
  #--------------------------------------------------------------------------
  def pos_nt?(x, y)
    return false if @transparent
    return (pos?(x, y) and not @through)
  end
  #--------------------------------------------------------------------------
  # ○ ダッシュ状態判定
  #--------------------------------------------------------------------------
  def dash?
    return false if @move_route_forcing
    return false if $game_player.follow_member_gathering
    return $game_player.dash?
  end
  #--------------------------------------------------------------------------
  # ○ 透明化の取得
  #--------------------------------------------------------------------------
  def transparent
    return true if @follow_hide
    return @transparent
  end
  #--------------------------------------------------------------------------
  # ○ プレイヤーの位置とそろえる
  #--------------------------------------------------------------------------
  def moveto_player
    moveto($game_player.x, $game_player.y)
    @target_x = $game_player.x
    @target_y = $game_player.y
    @next_target_x = $game_player.x
    @next_target_y = $game_player.y
    @direction = $game_player.direction
  end
  #--------------------------------------------------------------------------
  # ○ 追従するキャラクターの取得
  #--------------------------------------------------------------------------
  def target_character
    if @order == 0
      return $game_player
    else
      return $game_party.follow_member[@order-1]
    end 
  end
  #--------------------------------------------------------------------------
  # ○ 追従の更新
  #  ※ 追従が完了している場合は true を返す
  #--------------------------------------------------------------------------
  def move_toward_target_update
    return false if moving?
    if $game_player.follow_member_gathering and
      (character_name == "" or transparent)
      moveto_player
      return true
    end
    if @x == target_character.x and @x == @next_target_x and
       @y == target_character.y and @y == @next_target_y
      return true
    end
    if $game_player.move_route_forcing and 
       not $game_player.move_route_forcing_follow
      return true
    end
    @target_x = @next_target_x
    @target_y = @next_target_y
    @next_target_x = target_character.x
    @next_target_y = target_character.y
    if @target_x == @next_target_x and @target_y == @next_target_y
      return if target_character.moving?
    end       
    move_toward_target
    return true if character_name == ""
    return true if transparent
    return false
  end
  #--------------------------------------------------------------------------
  # ○ 追従すべきポイントへの X 距離計算
  #--------------------------------------------------------------------------
  def distance_x_target
    sx = @x - @target_x
    if $game_map.loop_horizontal?         # 横にループしているとき
      if sx.abs > $game_map.width / 2     # 絶対値がマップの半分より大きい?
        sx += $game_map.width             # マップの幅を足す
      end
    end
    return sx
  end
  #--------------------------------------------------------------------------
  # ○ 追従すべきポイントへの Y 距離計算
  #--------------------------------------------------------------------------
  def distance_y_target
    sy = @y - @target_y
    if $game_map.loop_vertical?           # 縦にループしているとき
      if sy.abs > $game_map.height / 2    # 絶対値がマップの半分より大きい?
        sy += $game_map.height            # マップの高さを足す
      end
    end
    return sy
  end
  #--------------------------------------------------------------------------
  # ○ 追従すべきポイントへ近づく
  #--------------------------------------------------------------------------
  def move_toward_target
    @through = true                       # 追従歩行中はすり抜け判定
    sx = distance_x_target
    sy = distance_y_target
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # 横の距離のほうが長い
        (0..$game_map.width).include?(sx) ? move_left : move_right # 左右方向を優先                         
        if @move_failed and sy != 0
          (0..$game_map.height).include?(sy) ? move_up : move_down
        end
      else                                # 縦の距離のほうが長いか等しい
        (0..$game_map.height).include?(sy) ? move_up : move_down   # 上下方向を優先
        if @move_failed and sx != 0
          (0..$game_map.width).include?(sx) ? move_left : move_right
        end
      end
    end
    @through = $game_player.through
  end
  #--------------------------------------------------------------------------
  # ● 接触イベントの起動判定
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    return false
  end
  #--------------------------------------------------------------------------
  # ○ プレイヤーの対面に移動
  #--------------------------------------------------------------------------
  def set_pos_player_facing
    x = $game_map.x_with_direction($game_player.x, $game_player.direction)
    y = $game_map.y_with_direction($game_player.y, $game_player.direction)
    moveto(x, y)
    @direction = 10 - $game_player.direction
  end
end
#==============================================================================
# □ Guest_Members
#------------------------------------------------------------------------------
#  歩行表示のみをするゲストメンバーを扱うクラスです。
#==============================================================================
class Guest_Members
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :character_name           # 歩行グラフィック ファイル名
  attr_reader   :character_index          # 歩行グラフィック インデックス
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(file_name, index)
    @character_name = file_name
    @character_index = index
  end
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
#  マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● キャラクタースプライトの作成
  #--------------------------------------------------------------------------
  def create_characters
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    for vehicle in $game_map.vehicles
      sprite = Sprite_Character.new(@viewport1, vehicle)
      @character_sprites.push(sprite)
    end
    
    create_follow_members    ### 追加部分
    
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  end
  #--------------------------------------------------------------------------
  # ○ キャラクタースプライトの作成
  #--------------------------------------------------------------------------
  def create_follow_members
    for members in $game_party.follow_member.reverse
      sprite = Sprite_Character.new(@viewport1, members)
      @character_sprites.push(sprite)
    end
  end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ◎ イベントのセットアップ
  #     list     : 実行内容
  #     event_id : イベント ID
  #--------------------------------------------------------------------------
  alias tig_pmf_clear clear
  def clear
    tig_pmf_clear
    @this_event = -1
  end
  #--------------------------------------------------------------------------
  # ◎ ステートの変更
  #--------------------------------------------------------------------------
  alias tig_pmf_command_313 command_313
  def command_313
    tig_pmf_command_313
    $game_party.character_graphic_refresh
    return true
  end
  #--------------------------------------------------------------------------
  # ◎ 全回復
  #--------------------------------------------------------------------------
  alias tig_pmf_command_314 command_314
  def command_314
    tig_pmf_command_314
    $game_party.character_graphic_refresh
    return true
  end
  #--------------------------------------------------------------------------
  # ● キャラクターの取得
  #--------------------------------------------------------------------------
  def get_character(param)
    case param
    when -1   # プレイヤー
      return $game_player
    when 0    # このイベント
      case @this_event
      when -1
        events = $game_map.events
        return events == nil ? nil : events[@event_id]
      when 0
        return $game_player
      else
        return $game_party.follow_member[@this_event-1]
      end
    else      # 特定のイベント
      events = $game_map.events
      return events == nil ? nil : events[param]
    end
  end
  #--------------------------------------------------------------------------
  # ○ 「このイベント」の対象変更
  #--------------------------------------------------------------------------
  def change_this_event(number)
    @this_event = number
  end
  #--------------------------------------------------------------------------
  # ○ 追従キャラクターの表示
  #--------------------------------------------------------------------------
  def follow_member_on
    $game_player.follow_hide = false
    $game_party.follow_member.each {|i|i.follow_hide = false}
  end
  #--------------------------------------------------------------------------
  # ○ 追従キャラクターの非表示
  #--------------------------------------------------------------------------
  def follow_member_off(n = nil)
    if n == nil
      $game_player.follow_hide = false
      $game_party.follow_member.each {|i|i.follow_hide = true}
    else
      case n
      when 0
        $game_player.follow_hide = true
        $game_party.follow_member.each {|i|i.follow_hide = true}
      when 1
        $game_player.follow_hide = false
        $game_party.follow_member.each {|i|i.follow_hide = true}
      else 
        $game_player.follow_hide = false
        $game_party.follow_member.each{|i|i.follow_hide = true}
        for i in 0..(n-2)
          $game_party.follow_member[i].follow_hide = false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをパーティーに加入させる
  #--------------------------------------------------------------------------
  def add_guest_member(file_name, index)
    $game_party.add_guest_member(file_name, index)
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをパーティーから外す
  #--------------------------------------------------------------------------
  def remove_guest_member(file_name, index)
    $game_party.remove_guest_member(file_name, index)
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターをクリアする
  #--------------------------------------------------------------------------
  def clear_guest_member
    $game_party.clear_guest_member
  end
  #--------------------------------------------------------------------------
  # ○ ゲストキャラクターとパーティーメンバーの並びを逆転する
  #--------------------------------------------------------------------------
  #  引数を省略した場合、並びが逆転。
  #   true 指定でゲストが先頭、false 指定でゲストが後ろ。
  #--------------------------------------------------------------------------
  def change_guest_member_order(order = nil)
    $game_party.change_guest_member_order(order)
  end
  #--------------------------------------------------------------------------
  # ○ 追従メンバーを集合させる
  #--------------------------------------------------------------------------
  def follow_member_gathering
    $game_player.follow_member_gathering = true
  end
end
   | 
 |