赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 1 |
经验 | 7594 |
最后登录 | 2024-10-13 |
在线时间 | 92 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 134
- 在线时间
- 92 小时
- 注册时间
- 2009-4-9
- 帖子
- 10
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
在日网找到的人物跟随脚本,不知道有没高手帮汉化下- #============================================================================
- #
- # ■パーティーメンバーの追従 □Ver.3.12 □製作者:月紳士
- # ・RPGツクールVX用 RGSS2スクリプト
- #
- # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド
- #
- # ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。
- #----------------------------------------------------------------------------
- # 更新履歴
- # 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_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
-
- とイベントコマンド・スクリプトを実行すると
- ゲストメンバーとパーティーメンバーの並びが逆転します。
- (再度の実行で元にもどります)
- #--------------------------------------------------------------------------
- ●パーティーメンバーを個別に非表示
- パーティーメンバーの歩行画像を「なし」にした場合、
- そのキャラクターの隊列表示はされず、
- それより後ろのパーティーメンバーやゲストが次に続きます。
-
- 隊列に参加させたくないアクターは歩行画像を「なし」にしてみてください。
- =end
- #==============================================================================
- # □ カスタマイズ項目
- #==============================================================================
- module Party_Member_Follow
-
- MOVE_ROUTE_FORCING_FOLLOW = false
- # 移動ルートの強制時にもパーティーメンバーを追従させるか?(初期設定)
- USE_COFFIN = true
- # 戦闘不能時に棺おけにするか?
-
- COFFIN_FILE_NAME = "$Coffin"
- # 棺おけに使う画像のファイル名。
-
- COFFIN_FILE_INDEX = 0
- # 棺おけに使う画像ファイルのインデックス。
-
- DISPLAY_MEMBERS = 4
- # 表示するメンバーの最大数。
-
- 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
- result = []
- for actor in existing_members
- next if actor.character_name == ""
- result.push(actor)
- end
- if @guest_head
- result = @guest_member + result
- else
- result += @guest_member
- end
- return result
- end
- #--------------------------------------------------------------------------
- # ○ 表示させるメンバーサイズの取得
- #--------------------------------------------------------------------------
- def display_member_size
- result = []
- for actor in members
- next if actor.character_name == ""
- result.push(actor)
- end
- result += @guest_member
- return result.size
- 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 # フラグ反転
- 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
- #--------------------------------------------------------------------------
- # ◎ オブジェクト初期化
- #--------------------------------------------------------------------------
- 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
- 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 @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_member_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
- #--------------------------------------------------------------------------
- # ○ オブジェクト初期化
- #--------------------------------------------------------------------------
- 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
- 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_member_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 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 @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 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 # 横の距離のほうが長い
- 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
- @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.transparent = false
- $game_party.follow_member.each{|i|i.transparent = false}
- end
- #--------------------------------------------------------------------------
- # ○ 追従キャラクターの非表示
- #--------------------------------------------------------------------------
- def follow_member_off(n = nil)
- if n == nil
- $game_player.transparent = false
- $game_party.follow_member.each{|i|i.transparent = true}
- else
- case n
- when 0
- $game_player.transparent = true
- $game_party.follow_member.each{|i|i.transparent = true}
- when 1
- $game_player.transparent = false
- $game_party.follow_member.each{|i|i.transparent = true}
- else
- $game_player.transparent = false
- $game_party.follow_member.each{|i|i.transparent = true}
- for i in 0..(n-2)
- $game_party.follow_member[i].transparent = 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
复制代码 |
|