设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1503|回复: 1
打印 上一主题 下一主题

[已经过期] 人物跟随脚本战斗中用战斗事件附加状态、恢复时出错

[复制链接]

Lv1.梦旅人

梦石
0
星屑
180
在线时间
829 小时
注册时间
2010-6-26
帖子
671
跳转到指定楼层
1
发表于 2010-10-27 23:57:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 企鹅达达 于 2010-10-28 00:00 编辑
  1. #============================================================================
  2. #
  3. # ■パーティーメンバーの追従 □Ver.3.17 □製作者:月紳士
  4. # ・RPGツクールVX用 RGSS2スクリプト
  5. #
  6. #    ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド
  7. #
  8. #  ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。
  9. #----------------------------------------------------------------------------
  10. # 更新履歴
  11. #   Ver.3.17  メソッド整理とゲストメンバー挿入位置調整機能追加。
  12. #   Ver.3.16  隠す処理の不具合修正。
  13. #   Ver.3.12  イベントコマンド・スクリプト全回復時の更新処理を追加。
  14. #   Ver.3.11  パーティー加入時イベント用動作処理を追加。
  15. #   Ver.3.10  フォローメンバーを隠す機能の強化とゲスト表示機能を強化。
  16. #   Ver.3.01  コマンド追加。
  17. #   Ver.3.00  ゲストキャラクター表示機能を追加。
  18. #   Ver.2.03  戦闘テスト時に起きる不具合を修正。
  19. #   Ver.2.02  不具合再修正と処理軽量化。
  20. #   Ver.2.00  仕様見直しと棺桶未使用時の不具合を修正。
  21. #============================================================================
  22. =begin
  23.  このスクリプトは
  24.  パーティーのメンバーを主人公キャラ(先頭キャラ)の後に着いて歩かせる、
  25.  いわいる「隊列歩行」を実現するスクリプトです。
  26.  ・乗り物への乗り込み動作を再現。
  27.  ・簡単に表示数を増やすことができる構造になっており、
  28.   多人数パーティーなどに対応が容易。
  29.  ・某ゲームのように戦闘不能メンバーを棺おけ表示にしたり出来る。
  30.  ・パーティーには実際に参加せず、追従のみをするゲストキャラクターを設定可能。
  31.   ゲストは最後尾だけでなく、先頭にすることも可能。
  32.  以下に使い方を説明します↓
  33. #----------------------------------------------------------------------------
  34.  ●カスタマイズ項目の説明
  35.  まず、カスタマイズ項目の説明をします。

  36.   MOVE_ROUTE_FORCING_FOLLOW
  37.    移動ルートの強制時にもパーティーメンバーを追従させるか?
  38.    カスタマイズ項目での設定は初期設定となります。
  39.    ゲーム中は イベントコマンド・スクリプトにて
  40.   
  41.       $game_player.move_route_forcing_follow = true
  42.   
  43.    (もしくは = false) で変更できます。
  44.    = true で常に追従、= false でキー操作時のみとなります。
  45.   
  46.   
  47.   USE_COFFIN
  48.    戦闘不能時に棺おけにするか?
  49.   
  50.    戦闘不能メンバーは隊列が(表示だけですが)変更されます。
  51.    生存者から先頭に並びます。棺桶はその後ろです。

  52.    ちなみに生存者のうち、先頭キャラの取得の仕方は

  53.       $game_party.existing_members[0]
  54.       
  55.     IDの取得であれば
  56.    
  57.       $game_party.existing_members[0].id
  58.       
  59.     です。生存者数なら
  60.   
  61.       $game_party.existing_members[0].size
  62.       
  63.     と、なります。イベントコマンドでの変数取得や条件分岐に。
  64.   
  65.    
  66.   COFFIN_FILE_NAME
  67.    棺おけに使う画像のファイル名です。
  68.    = "$Coffin"  等と、必ず "" で囲ってください。
  69.   
  70.   
  71.   COFFIN_FILE_INDEX
  72.     棺おけに使う画像ファイルのインデックスです。
  73.    
  74.   
  75.   DISPLAY_MEMBERS
  76.     表示するメンバーの最大数です。
  77.    
  78.     多人数パーティースクリプトなどで数をカスタマイズしている場合は
  79.     戦闘メンバーの数にあわせると良いと思います。
  80.    
  81.     ゲストメンバーを使用する場合は、ゲーム中における
  82.     パーティーメンバー+ゲストメンバーの最大数にしておく必要があります。

  83. #----------------------------------------------------------------------------

  84.  ●イベント時の追従キャラクターの操作

  85.  イベントコマンド・移動ルートの設定やフキダシ表示をメンバーに行うには
  86.  「移動ルートの設定」コマンドより前にイベントコマンド・スクリプトで
  87.  
  88.      change_this_event(1)
  89.      
  90.   と実行すると、各スクリプトでの「このイベント」の対象が
  91.   指定順番(上記括弧内の 1 の部分→追従順で1番=パーティー先頭から2番目)の
  92.  キャラクターへの指示となります。
  93.   ちなみに、0 番は先頭キャラ(プレイヤーへの指示と同じ)、
  94.    -1 で元の「このイベント」に戻ります。
  95.  
  96.    ※ この対象変更設定はページ内のみ有効なので
  97.     別ページならその都度、対象を変更してから行う必要がありますが、
  98.     他ページの為に実行後にいちいち元に戻す、という手間はありません。

  99.  棺桶状態での表示(カスタマイズ項目参照)時、指定はアクターの隊列順番ではなく
  100.  生存者によって並び直した見た目の順番に対して、
  101.  単純に「先頭から何番目に表示されているか」で指定されます。
  102.  (棺桶であっても。change_this_event(1) ならとにかく先頭から2番目のキャラ)
  103.  
  104. #--------------------------------------------------------------------------
  105.  
  106.  ●追従キャラクター非表示

  107.  追従キャラクターを非表示にするには、イベントコマンド・スクリプトにて

  108.      follow_member_off
  109.      
  110.   と記入し実行します。
  111.      
  112.      follow_member_on

  113.  とすれば、追従キャラクターを表示するように戻すことが出来ます。

  114.  また、

  115.      follow_member_off(2)
  116.      
  117.   とすると、「パーティー2番目までを表示、後を隠す」という風に
  118.   指定の数を元に、隠す際の人数を調節できます。

  119.  ※ これは隠す人数を調整しているだけなので、
  120.     厳密には表示人数の変更とは違います。

  121.      後述の表示最大人数の設定を超えて表示させるような
  122.     表示人数の変更にあたる動作はできません。
  123.     隠す人数の調整ですから、その後にfollow_member_on を実行すれば、
  124.     隠された人数が何人であっても、全員表示に戻ります。

  125.    隠す人数を変更したい場合は、
  126.      改めて follow_member_off(x) を別の数で実行してください。
  127.  
  128.   ちなみに
  129.     follow_member_off(1) は follow_member_off と同機能、
  130.     follow_member_off(0) は先頭キャラを含めて全員を隠す
  131.  です。
  132.  
  133. #--------------------------------------------------------------------------

  134.  ●ゲストメンバーの表示

  135.  実際にパーティーには加入せず、
  136.  追従表示だけをおこなうキャラクターを設定できます。

  137.  加入させたい時は
  138.  イベントコマンド・スクリプトにて

  139.      add_guest_member("People1", 1)
  140.      
  141.   というようにスクリプト実行させます。

  142.   ( )内にファイル名とインデックスを記入することでキャラクター指定をします。
  143.   "People1" の部分がファイル名です。Charactersフォルダ内のファイルです。
  144.   拡張子はいりませんが、ファイル名を "" で閉じるのを忘れずに。
  145.   その後の半角数字でインデックスを記入します。例だと 1 の部分です。
  146.   
  147.   ゲストキャラクターを外す場合は、

  148.      remove_guest_member("People1", 1)
  149.  
  150.  と実行させます。このコマンドは
  151.  同名・同インデックスのゲストキャラクターがいる場合のみ有効です。
  152.  
  153.      clear_guest_member
  154.      
  155.   とすればゲストキャラクターを一括で消し、初期状態に戻せます。

  156.   ゲストキャラクターを表示できるのは
  157.   追従キャラクターの表示最大数までとなります。
  158.   
  159.   ゲストメンバーはパーティーメンバーの後ろについて行きますが
  160.   ゲストメンバーを先頭に、パーティーメンバーを後に続かせる事も出来ます。
  161.   
  162.      change_guest_member_order
  163.      
  164.   とイベントコマンド・スクリプトを実行すると
  165.   ゲストメンバーとパーティーメンバーの並びが逆転します。
  166.   (再度の実行で元にもどります)
  167.   
  168.   逆転という形でなく、次のような特別な指定も出来ます。
  169.   
  170.      change_guest_member_order(true)          # ゲストメンバーを先頭にする
  171.      change_guest_member_order(false)         # ゲストメンバーを後ろにする
  172.      change_guest_member_order(2)             # ゲストメンバーを2番目に挿入
  173.   
  174.   いずれも、
  175.      change_guest_member_order
  176.   の再実行でデフォルト(列の後ろ)に戻ります。

  177. #--------------------------------------------------------------------------

  178.  ●パーティーメンバーを個別に非表示

  179.  パーティーメンバーの歩行画像を「なし」にした場合、
  180.  そのキャラクターの隊列表示はされず、
  181.  それより後ろのパーティーメンバーやゲストが次に続きます。
  182.  
  183.  隊列に参加させたくないアクターは歩行画像を「なし」にしてみてください。

  184. =end

  185. #==============================================================================
  186. # □ カスタマイズ項目
  187. #==============================================================================

  188. module Party_Member_Follow
  189.   
  190.   MOVE_ROUTE_FORCING_FOLLOW = false
  191.   # 移動ルートの強制時にもパーティーメンバーを追従させるか?(初期設定)

  192.   USE_COFFIN = true
  193.   # 戦闘不能時に棺おけにするか?
  194.   
  195.   COFFIN_FILE_NAME = "$Coffin"
  196.   # 棺おけに使う画像のファイル名。
  197.   
  198.   COFFIN_FILE_INDEX = 0
  199.   # 棺おけに使う画像ファイルのインデックス。
  200.   
  201.   DISPLAY_MEMBERS = 5
  202.   # 表示するメンバーの最大数。
  203.   
  204. end
  205.   
  206. #==============================================================================
  207. # ■ Game_Party
  208. #------------------------------------------------------------------------------
  209. #  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
  210. # ラスのインスタンスは $game_party で参照されます。
  211. #==============================================================================

  212. class Game_Party < Game_Unit
  213.   #--------------------------------------------------------------------------
  214.   # ○ 公開インスタンス変数
  215.   #--------------------------------------------------------------------------
  216.   attr_accessor :follow_member
  217.   attr_reader   :guest_member
  218.   attr_accessor :guest_head
  219.   #--------------------------------------------------------------------------
  220.   # ◎ 初期パーティのセットアップ
  221.   #--------------------------------------------------------------------------
  222.   alias tig_pmf_setup_starting_members setup_starting_members
  223.   def setup_starting_members
  224.     tig_pmf_setup_starting_members
  225.     @guest_member = []
  226.     @guest_head = false
  227.     create_follow_member
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ○ フォローメンバーの作成
  231.   #--------------------------------------------------------------------------
  232.   def create_follow_member
  233.     @follow_member = []
  234.     (Party_Member_Follow::DISPLAY_MEMBERS - 1).times do |i|
  235.       @follow_member.push(Game_Follow_Members.new(i))
  236.     end
  237.     character_graphic_refresh
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ○ パーティーの歩行グラフィックのリフレッシュ
  241.   #--------------------------------------------------------------------------
  242.   def character_graphic_refresh
  243.     $game_player.character_graphic_refresh
  244.     @follow_member.each{|i|i.character_graphic_refresh}
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ 歩行表示させるメンバーの取得
  248.   #--------------------------------------------------------------------------
  249.   def display_follow_member
  250.     result = []
  251.     for actor in existing_members
  252.       next if actor.character_name == ""
  253.       result.push(actor)
  254.     end
  255.     if @guest_head == true
  256.       result = @guest_member + result
  257.     elsif @guest_head == false
  258.       result += @guest_member
  259.     else
  260.       result[@guest_head-1, 0] = @guest_member
  261.     end
  262.     return result
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ○ フォローメンバー追従
  266.   #--------------------------------------------------------------------------
  267.   def follow_member_target_move
  268.     gathered = true
  269.     @follow_member.each{|i|gathered = false unless i.move_toward_target_update}
  270.     if gathered  # 集合が完了した場合
  271.       $game_player.follow_member_gathering = false  # 集合中フラグのオフ
  272.     end
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ○ フォローメンバーをプレイヤーキャラクターに重ねる
  276.   #--------------------------------------------------------------------------
  277.   def follow_member_stack
  278.     @follow_member.each{|i|i.moveto_player}
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ○ ゲストキャラクターをパーティーに加入させる
  282.   #--------------------------------------------------------------------------
  283.   def add_guest_member(file_name, index)
  284.     @guest_member.push(Guest_Members.new(file_name, index))
  285.     character_graphic_refresh
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ○ ゲストキャラクターをパーティーから外す
  289.   #--------------------------------------------------------------------------
  290.   def remove_guest_member(file_name, index)
  291.     for i in 0...@guest_member.size
  292.       if @guest_member[i].character_name == file_name and
  293.          @guest_member[i].character_index == index
  294.         @guest_member[i] = nil
  295.       end
  296.     end
  297.     @guest_member.compact!
  298.     character_graphic_refresh
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ○ ゲストキャラクターをクリアする
  302.   #--------------------------------------------------------------------------
  303.   def clear_guest_member
  304.     @guest_member =[]
  305.     character_graphic_refresh
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ○ ゲストキャラクターとパーティーメンバーの並びを変更する
  309.   #--------------------------------------------------------------------------
  310.   def change_guest_member_order(order = nil)
  311.     if order == nil
  312.       @guest_head = @guest_head == false ? true : false # フラグ初期化・反転
  313.     else
  314.       @guest_head = order
  315.     end
  316.     character_graphic_refresh
  317.   end
  318. end

  319. #==============================================================================
  320. # ■ Game_Map
  321. #------------------------------------------------------------------------------
  322. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  323. # このクラスのインスタンスは $game_map で参照されます。
  324. #==============================================================================

  325. class Game_Map
  326.   #--------------------------------------------------------------------------
  327.   # ◎ リフレッシュ
  328.   #--------------------------------------------------------------------------
  329.   alias tig_pmf_refresh refresh
  330.   def refresh
  331.     tig_pmf_refresh
  332.     $game_party.character_graphic_refresh
  333.   end
  334. end
  335.   
  336. #==============================================================================
  337. # ■ Game_Character
  338. #------------------------------------------------------------------------------
  339. #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
  340. # クラスのスーパークラスとして使用されます。
  341. #==============================================================================

  342. class Game_Character
  343.   #--------------------------------------------------------------------------
  344.   # ● 通行可能判定
  345.   #     x : X 座標
  346.   #     y : Y 座標
  347.   #--------------------------------------------------------------------------
  348.   def passable?(x, y)
  349.     x = $game_map.round_x(x)                        # 横方向ループ補正
  350.     y = $game_map.round_y(y)                        # 縦方向ループ補正
  351.     return false unless $game_map.valid?(x, y)      # マップ外?
  352.     return true if @through or debug_through?       # すり抜け ON?
  353.     return false unless map_passable?(x, y)         # マップが通行不能?
  354.     return false if collide_with_characters?(x, y)  # キャラクターに衝突?
  355.     return false if collide_with_follow_member(x, y)  ## 追加部分
  356.     return true                                     # 通行可
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ○ フォローメンバーとの衝突判定
  360.   #--------------------------------------------------------------------------
  361.   def collide_with_follow_member(x, y)
  362.     return false if self == $game_player
  363.     $game_party.follow_member.each do |follow_member|
  364.       next if follow_member == self
  365.       return true if follow_member.pos_nt?(x, y)
  366.     end
  367.     return false
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ○ 指定座標に近づく
  371.   #--------------------------------------------------------------------------
  372.   def move_toward_coordinates(x, y)
  373.     sx = @x - x
  374.     if $game_map.loop_horizontal?         # 横にループしているとき
  375.       if sx.abs > $game_map.width / 2     # 絶対値がマップの半分より大きい?
  376.         sx -= $game_map.width             # マップの幅を引く
  377.       end
  378.     end
  379.     sy = @y - y
  380.     if $game_map.loop_vertical?           # 縦にループしているとき
  381.       if sy.abs > $game_map.height / 2    # 絶対値がマップの半分より大きい?
  382.         sy -= $game_map.height            # マップの高さを引く
  383.       end
  384.     end
  385.     if sx != 0 or sy != 0
  386.       if sx.abs > sy.abs                  # 横の距離のほうが長い
  387.         sx > 0 ? move_left : move_right   # 左右方向を優先
  388.         if @move_failed and sy != 0
  389.           sy > 0 ? move_up : move_down
  390.         end
  391.       else                                # 縦の距離のほうが長いか等しい
  392.         sy > 0 ? move_up : move_down      # 上下方向を優先
  393.         if @move_failed and sx != 0
  394.           sx > 0 ? move_left : move_right
  395.         end
  396.       end
  397.     end
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ○ 指定キャラクターに近づく
  401.   #--------------------------------------------------------------------------
  402.   def move_toward_pos(character)
  403.     move_toward_coordinates(character.x, character.y)
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ○ プレイヤー正面からパーティー最後尾へ
  407.   #--------------------------------------------------------------------------
  408.   # ※ イベントキャラクターをパーティーに追加する際の演出に。
  409.   #     イベントコマンド・移動ルートの設定内の、スクリプトで実行。
  410.   #     パーティー表示最大数と同じ数だけ実行設定しておく必要あり。
  411.   #     「このイベント」・「移動終了までウエイト」の設定、
  412.   #     実行前にすり抜けONにする、実行後にイベント位置を(必要なら)戻す
  413.   #     等も忘れずに。
  414.   #--------------------------------------------------------------------------
  415.   def party_join
  416.     member = $game_party.follow_member
  417.     return if @x == member[$game_party.display_follow_member.size-1].x and
  418.               @y == member[$game_party.display_follow_member.size-1].y
  419.     ($game_party.display_follow_member.size - 2).downto(0) do |i|
  420.       if @x == member[i].x and @y == member[i].y
  421.         move_toward_pos(member[i+1])
  422.         return
  423.       end
  424.     end
  425.     if @x == $game_player.x and @y == $game_player.y
  426.       move_toward_pos(member[0])
  427.       return
  428.     end
  429.     move_toward_pos($game_player)
  430.   end
  431. end
  432.   
  433. #==============================================================================
  434. # ■ Game_Player
  435. #------------------------------------------------------------------------------
  436. #  プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
  437. # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
  438. #==============================================================================

  439. class Game_Player < Game_Character
  440.   #--------------------------------------------------------------------------
  441.   # ○ 公開インスタンス変数
  442.   #--------------------------------------------------------------------------
  443.   attr_accessor :follow_member_gathering
  444.   attr_reader   :move_speed
  445.   attr_reader   :vehicle_getting_on
  446.   attr_accessor :move_route_forcing_follow
  447.   attr_accessor :follow_hide
  448.   #--------------------------------------------------------------------------
  449.   # ◎ オブジェクト初期化
  450.   #--------------------------------------------------------------------------
  451.   alias tig_pmf_initialize initialize
  452.   def initialize
  453.     tig_pmf_initialize
  454.     @follow_member_gathering = false
  455.     @move_route_forcing_follow = Party_Member_Follow::MOVE_ROUTE_FORCING_FOLLOW
  456.     @follow_hide = false
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ◎ フレーム更新
  460.   #--------------------------------------------------------------------------
  461.   alias tig_pmf_pl_update update
  462.   def update
  463.     tig_pmf_pl_update
  464.     $game_party.follow_member_target_move if moving? and @move_route_forcing_follow
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ◎ 方向ボタン入力による移動処理
  468.   #--------------------------------------------------------------------------
  469.   alias tig_pmf_move_by_input move_by_input
  470.   def move_by_input
  471.     tig_pmf_move_by_input
  472.     if Input.dir4 != 0
  473.       $game_party.follow_member_target_move if moving? and not @move_route_forcing_follow
  474.     end
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ◎ 移動可能判定
  478.   #--------------------------------------------------------------------------
  479.   alias tig_pmf_movable? movable?
  480.   def movable?
  481.     return false unless tig_pmf_movable?
  482.     return false if @follow_member_gathering
  483.     return false if @vehicle_getting_off_wait
  484.     return true
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ◎ フレーム更新
  488.   #--------------------------------------------------------------------------
  489.   alias tig_pmf_update update
  490.   def update
  491.     tig_pmf_update
  492.     if @follow_member_gathering
  493.       $game_party.follow_member_target_move
  494.     end
  495.     $game_party.follow_member.each{|i|i.update}
  496.     if @vehicle_getting_on and not moving? and
  497.        now_vehicle and now_vehicle.pos?(@x, @y)
  498.       @vehicle_hide = true
  499.     end
  500.     if @vehicle_getting_off_wait and now_vehicle == nil
  501.       $game_party.follow_member.each{|i|i.transparent = false}
  502.       $game_party.follow_member_stack
  503.       @vehicle_getting_off_wait = false
  504.     end
  505.   end
  506.   #--------------------------------------------------------------------------
  507.   # ○ 透明化の取得
  508.   #--------------------------------------------------------------------------
  509.   def transparent
  510.     return true if @vehicle_hide and not now_vehicle_riding_type?
  511.     return true if @follow_hide
  512.     return @transparent
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ○ 歩行グラフィックのリフレッシュ
  516.   #  ※ 生存者が先頭になるように歩行グラフィックを表示する機能あり。
  517.   #     全員死亡している場合は棺にする
  518.   #--------------------------------------------------------------------------
  519.   def character_graphic_refresh
  520.     @pmf_character_name = ""
  521.     @pmf_character_index = 0
  522.    
  523.     unless Party_Member_Follow::USE_COFFIN
  524.       unless $game_party.display_follow_member.empty?
  525.         @pmf_character_name = $game_party.display_follow_member[0].character_name
  526.         @pmf_character_index = $game_party.display_follow_member[0].character_index
  527.       end
  528.       return
  529.     end
  530.    
  531.     if $game_party.display_follow_member[0] == nil
  532.       if $game_party.display_follow_member.size >= 1
  533.         @pmf_character_name = Party_Member_Follow::COFFIN_FILE_NAME
  534.         @pmf_character_index = Party_Member_Follow::COFFIN_FILE_INDEX
  535.       end
  536.     else
  537.       @pmf_character_name = $game_party.display_follow_member[0].character_name
  538.       @pmf_character_index = $game_party.display_follow_member[0].character_index
  539.     end
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # ○ 歩行グラフィック ファイル名
  543.   #--------------------------------------------------------------------------
  544.   def character_name
  545.     return @pmf_character_name
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ○ 歩行グラフィック インデックス
  549.   #--------------------------------------------------------------------------
  550.   def character_index
  551.     return @pmf_character_index
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # ◎ 指定位置に移動
  555.   #     x : X 座標
  556.   #     y : Y 座標
  557.   #--------------------------------------------------------------------------
  558.   alias tig_pmf_moveto moveto
  559.   def moveto(x, y)
  560.     tig_pmf_moveto(x, y)
  561.     $game_party.follow_member_stack
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # ● 乗り物の乗降
  565.   #--------------------------------------------------------------------------
  566.   def get_on_off_vehicle
  567.     return false unless movable?
  568.     if in_vehicle?
  569.       result = get_off_vehicle                    ## 変更部分
  570.       if result                                   ##  結果に合わせてフラグオン
  571.         @vehicle_getting_off_wait = true          ##
  572.         @vehicle_hide = false                     ##
  573.       end                                         ##
  574.       return result
  575.     else
  576.       result = get_on_vehicle                     ## 変更部分
  577.       @follow_member_gathering = true if result   ##  結果に合わせてフラグオン
  578.       return result                               ##
  579.     end
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ◎ 乗り物の処理
  583.   #--------------------------------------------------------------------------
  584.   alias tig_pmf_update_vehicle update_vehicle
  585.   def update_vehicle
  586.     return if @follow_member_gathering
  587.     tig_pmf_update_vehicle
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ○ 今乗っている乗り物
  591.   #--------------------------------------------------------------------------
  592.   def now_vehicle
  593.     return nil if @vehicle_type == -1
  594.     return $game_map.vehicles[@vehicle_type]
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ○ 今乗っている乗り物が騎乗タイプか?(乗り物拡張用ダミー)
  598.   #--------------------------------------------------------------------------
  599.   def now_vehicle_riding_type?
  600.     return false
  601.   end
  602. end

  603. #==============================================================================
  604. # ■ Game_Vehicle
  605. #------------------------------------------------------------------------------
  606. #  乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
  607. # 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
  608. #==============================================================================

  609. class Game_Vehicle < Game_Character
  610.   #--------------------------------------------------------------------------
  611.   # ● フレーム更新
  612.   #--------------------------------------------------------------------------
  613.   def update
  614.     super
  615.     if @type == 2               # 飛行船の場合
  616.       if @driving
  617.         return if $game_player.follow_member_gathering  ### 追加部分
  618.         if @altitude < MAX_ALTITUDE
  619.           @altitude += 1        # 高度を上げる
  620.         end
  621.       elsif @altitude > 0
  622.         @altitude -= 1          # 高度を下げる
  623.         if @altitude == 0
  624.           @priority_type = 0    # プライオリティを「通常キャラの下」に戻す
  625.         end
  626.       end
  627.     end
  628.   end
  629. end

  630. #==============================================================================
  631. # □ Game_Follow_Members
  632. #------------------------------------------------------------------------------
  633. #  主人公キャラ(先頭キャラ)の後を追従するパーティーメンバーを扱うクラスです。
  634. #==============================================================================

  635. class Game_Follow_Members < Game_Character
  636.   #--------------------------------------------------------------------------
  637.   # ○ 公開インスタンス変数
  638.   #--------------------------------------------------------------------------
  639.   attr_reader   :index
  640.   attr_accessor :follow_hide
  641.   #--------------------------------------------------------------------------
  642.   # ○ オブジェクト初期化
  643.   #--------------------------------------------------------------------------
  644.   def initialize(order)
  645.     super()
  646.     @order = order
  647.     @target_x = $game_player.x
  648.     @target_y = $game_player.y
  649.     @next_target_x = $game_player.x
  650.     @next_target_y = $game_player.y
  651.     @follow_hide = false
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ○ 歩行グラフィックのリフレッシュ
  655.   #  ※ 生存者が先頭になるように歩行グラフィックを表示する機能あり。
  656.   #     全員死亡している場合は棺にする
  657.   #--------------------------------------------------------------------------
  658.   def character_graphic_refresh
  659.     @pmf_character_name = ""
  660.     @pmf_character_index = 0
  661.    
  662.     unless Party_Member_Follow::USE_COFFIN
  663.       if $game_party.display_follow_member[@order+1]
  664.         @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
  665.         @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
  666.       end
  667.       return
  668.     end
  669.    
  670.     if $game_party.display_follow_member[@order+1] == nil
  671.       if $game_party.display_follow_member.size >= @order+2
  672.         @pmf_character_name = Party_Member_Follow::COFFIN_FILE_NAME
  673.         @pmf_character_index = Party_Member_Follow::COFFIN_FILE_INDEX
  674.       end
  675.     else
  676.       @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
  677.       @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
  678.     end
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ○ 歩行グラフィック ファイル名
  682.   #--------------------------------------------------------------------------
  683.   def character_name
  684.     return @pmf_character_name
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ○ 歩行グラフィック インデックス
  688.   #--------------------------------------------------------------------------
  689.   def character_index
  690.     return @pmf_character_index
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ○ フレーム更新
  694.   #--------------------------------------------------------------------------
  695.   def update
  696.     if $game_player.vehicle_getting_on and not moving? and
  697.        $game_player.now_vehicle and $game_player.now_vehicle.pos?(@x, @y)
  698.       @transparent = true
  699.     end
  700.     @move_speed = $game_player.move_speed
  701.     super
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 座標一致と「すり抜け OFF」判定 (nt = No Through)
  705.   #--------------------------------------------------------------------------
  706.   def pos_nt?(x, y)
  707.     return false if @transparent
  708.     return (pos?(x, y) and not @through)
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ○ ダッシュ状態判定
  712.   #--------------------------------------------------------------------------
  713.   def dash?
  714.     return false if @move_route_forcing
  715.     return false if $game_player.follow_member_gathering
  716.     return $game_player.dash?
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ○ 透明化の取得
  720.   #--------------------------------------------------------------------------
  721.   def transparent
  722.     return true if @follow_hide
  723.     return @transparent
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ○ プレイヤーの位置とそろえる
  727.   #--------------------------------------------------------------------------
  728.   def moveto_player
  729.     moveto($game_player.x, $game_player.y)
  730.     @target_x = $game_player.x
  731.     @target_y = $game_player.y
  732.     @next_target_x = $game_player.x
  733.     @next_target_y = $game_player.y
  734.     @direction = $game_player.direction
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ○ 追従するキャラクターの取得
  738.   #--------------------------------------------------------------------------
  739.   def target_character
  740.     if @order == 0
  741.       return $game_player
  742.     else
  743.       return $game_party.follow_member[@order-1]
  744.     end
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ○ 追従の更新
  748.   #  ※ 追従が完了している場合は true を返す
  749.   #--------------------------------------------------------------------------
  750.   def move_toward_target_update
  751.     return false if moving?
  752.     if @x == target_character.x and @x == @next_target_x and
  753.        @y == target_character.y and @y == @next_target_y
  754.       return true
  755.     end
  756.     if $game_player.move_route_forcing and
  757.        not $game_player.move_route_forcing_follow
  758.       return true
  759.     end
  760.     @target_x = @next_target_x
  761.     @target_y = @next_target_y
  762.     @next_target_x = target_character.x
  763.     @next_target_y = target_character.y
  764.     if @target_x == @next_target_x and @target_y == @next_target_y
  765.       return if target_character.moving?
  766.     end      
  767.     move_toward_target
  768.     return true if character_name == ""
  769.     return true if transparent
  770.     return false
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ○ 追従すべきポイントへの X 距離計算
  774.   #--------------------------------------------------------------------------
  775.   def distance_x_target
  776.     sx = @x - @target_x
  777.     if $game_map.loop_horizontal?         # 横にループしているとき
  778.       if sx.abs > $game_map.width / 2     # 絶対値がマップの半分より大きい?
  779.         sx += $game_map.width             # マップの幅を足す
  780.       end
  781.     end
  782.     return sx
  783.   end
  784.   #--------------------------------------------------------------------------
  785.   # ○ 追従すべきポイントへの Y 距離計算
  786.   #--------------------------------------------------------------------------
  787.   def distance_y_target
  788.     sy = @y - @target_y
  789.     if $game_map.loop_vertical?           # 縦にループしているとき
  790.       if sy.abs > $game_map.height / 2    # 絶対値がマップの半分より大きい?
  791.         sy += $game_map.height            # マップの高さを足す
  792.       end
  793.     end
  794.     return sy
  795.   end
  796.   #--------------------------------------------------------------------------
  797.   # ○ 追従すべきポイントへ近づく
  798.   #--------------------------------------------------------------------------
  799.   def move_toward_target
  800.     @through = true                       # 追従歩行中はすり抜け判定
  801.     sx = distance_x_target
  802.     sy = distance_y_target
  803.     if sx != 0 or sy != 0
  804.       if sx.abs > sy.abs                  # 横の距離のほうが長い
  805.         (0..$game_map.width).include?(sx) ? move_left : move_right # 左右方向を優先                        
  806.         if @move_failed and sy != 0
  807.           (0..$game_map.height).include?(sy) ? move_up : move_down
  808.         end
  809.       else                                # 縦の距離のほうが長いか等しい
  810.         (0..$game_map.height).include?(sy) ? move_up : move_down   # 上下方向を優先
  811.         if @move_failed and sx != 0
  812.           (0..$game_map.width).include?(sx) ? move_left : move_right
  813.         end
  814.       end
  815.     end
  816.     @through = $game_player.through
  817.   end
  818.   #--------------------------------------------------------------------------
  819.   # ● 接触イベントの起動判定
  820.   #--------------------------------------------------------------------------
  821.   def check_event_trigger_touch(x, y)
  822.     return false
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ○ プレイヤーの対面に移動
  826.   #--------------------------------------------------------------------------
  827.   def set_pos_player_facing
  828.     x = $game_map.x_with_direction($game_player.x, $game_player.direction)
  829.     y = $game_map.y_with_direction($game_player.y, $game_player.direction)
  830.     moveto(x, y)
  831.     @direction = 10 - $game_player.direction
  832.   end
  833. end

  834. #==============================================================================
  835. # □ Guest_Members
  836. #------------------------------------------------------------------------------
  837. #  歩行表示のみをするゲストメンバーを扱うクラスです。
  838. #==============================================================================

  839. class Guest_Members
  840.   #--------------------------------------------------------------------------
  841.   # ○ 公開インスタンス変数
  842.   #--------------------------------------------------------------------------
  843.   attr_reader   :character_name           # 歩行グラフィック ファイル名
  844.   attr_reader   :character_index          # 歩行グラフィック インデックス
  845.   #--------------------------------------------------------------------------
  846.   # ○ オブジェクト初期化
  847.   #--------------------------------------------------------------------------
  848.   def initialize(file_name, index)
  849.     @character_name = file_name
  850.     @character_index = index
  851.   end
  852. end

  853. #==============================================================================
  854. # ■ Spriteset_Map
  855. #------------------------------------------------------------------------------
  856. #  マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
  857. # Scene_Map クラスの内部で使用されます。
  858. #==============================================================================

  859. class Spriteset_Map
  860.   #--------------------------------------------------------------------------
  861.   # ● キャラクタースプライトの作成
  862.   #--------------------------------------------------------------------------
  863.   def create_characters
  864.     @character_sprites = []
  865.     for i in $game_map.events.keys.sort
  866.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  867.       @character_sprites.push(sprite)
  868.     end
  869.     for vehicle in $game_map.vehicles
  870.       sprite = Sprite_Character.new(@viewport1, vehicle)
  871.       @character_sprites.push(sprite)
  872.     end
  873.    
  874.     create_follow_members    ### 追加部分
  875.    
  876.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  877.   end
  878.   #--------------------------------------------------------------------------
  879.   # ○ キャラクタースプライトの作成
  880.   #--------------------------------------------------------------------------
  881.   def create_follow_members
  882.     for members in $game_party.follow_member.reverse
  883.       sprite = Sprite_Character.new(@viewport1, members)
  884.       @character_sprites.push(sprite)
  885.     end
  886.   end
  887. end

  888. #==============================================================================
  889. # ■ Game_Interpreter
  890. #------------------------------------------------------------------------------
  891. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  892. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  893. #==============================================================================

  894. class Game_Interpreter
  895.   #--------------------------------------------------------------------------
  896.   # ◎ イベントのセットアップ
  897.   #     list     : 実行内容
  898.   #     event_id : イベント ID
  899.   #--------------------------------------------------------------------------
  900.   alias tig_pmf_clear clear
  901.   def clear
  902.     tig_pmf_clear
  903.     @this_event = -1
  904.   end
  905.   #--------------------------------------------------------------------------
  906.   # ◎ ステートの変更
  907.   #--------------------------------------------------------------------------
  908.   alias tig_pmf_command_313 command_313
  909.   def command_313
  910.     tig_pmf_command_313
  911.     $game_party.character_graphic_refresh
  912.     return true
  913.   end
  914.   #--------------------------------------------------------------------------
  915.   # ◎ 全回復
  916.   #--------------------------------------------------------------------------
  917.   alias tig_pmf_command_314 command_314
  918.   def command_314
  919.     tig_pmf_command_314
  920.     $game_party.character_graphic_refresh
  921.     return true
  922.   end
  923.   #--------------------------------------------------------------------------
  924.   # ● キャラクターの取得
  925.   #--------------------------------------------------------------------------
  926.   def get_character(param)
  927.     case param
  928.     when -1   # プレイヤー
  929.       return $game_player
  930.     when 0    # このイベント
  931.       case @this_event
  932.       when -1
  933.         events = $game_map.events
  934.         return events == nil ? nil : events[@event_id]
  935.       when 0
  936.         return $game_player
  937.       else
  938.         return $game_party.follow_member[@this_event-1]
  939.       end
  940.     else      # 特定のイベント
  941.       events = $game_map.events
  942.       return events == nil ? nil : events[param]
  943.     end
  944.   end
  945.   #--------------------------------------------------------------------------
  946.   # ○ 「このイベント」の対象変更
  947.   #--------------------------------------------------------------------------
  948.   def change_this_event(number)
  949.     @this_event = number
  950.   end
  951.   #--------------------------------------------------------------------------
  952.   # ○ 追従キャラクターの表示
  953.   #--------------------------------------------------------------------------
  954.   def follow_member_on
  955.     $game_player.follow_hide = false
  956.     $game_party.follow_member.each {|i|i.follow_hide = false}
  957.   end
  958.   #--------------------------------------------------------------------------
  959.   # ○ 追従キャラクターの非表示
  960.   #--------------------------------------------------------------------------
  961.   def follow_member_off(n = nil)
  962.     if n == nil
  963.       $game_player.follow_hide = false
  964.       $game_party.follow_member.each {|i|i.follow_hide = true}
  965.     else
  966.       case n
  967.       when 0
  968.         $game_player.follow_hide = true
  969.         $game_party.follow_member.each {|i|i.follow_hide = true}
  970.       when 1
  971.         $game_player.follow_hide = false
  972.         $game_party.follow_member.each {|i|i.follow_hide = true}
  973.       else
  974.         $game_player.follow_hide = false
  975.         $game_party.follow_member.each{|i|i.follow_hide = true}
  976.         for i in 0..(n-2)
  977.           $game_party.follow_member[i].follow_hide = false
  978.         end
  979.       end
  980.     end
  981.   end
  982.   #--------------------------------------------------------------------------
  983.   # ○ ゲストキャラクターをパーティーに加入させる
  984.   #--------------------------------------------------------------------------
  985.   def add_guest_member(file_name, index)
  986.     $game_party.add_guest_member(file_name, index)
  987.   end
  988.   #--------------------------------------------------------------------------
  989.   # ○ ゲストキャラクターをパーティーから外す
  990.   #--------------------------------------------------------------------------
  991.   def remove_guest_member(file_name, index)
  992.     $game_party.remove_guest_member(file_name, index)
  993.   end
  994.   #--------------------------------------------------------------------------
  995.   # ○ ゲストキャラクターをクリアする
  996.   #--------------------------------------------------------------------------
  997.   def clear_guest_member
  998.     $game_party.clear_guest_member
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ○ ゲストキャラクターとパーティーメンバーの並びを逆転する
  1002.   #--------------------------------------------------------------------------
  1003.   #  引数を省略した場合、並びが逆転。
  1004.   #   true 指定でゲストが先頭、false 指定でゲストが後ろ。
  1005.   #--------------------------------------------------------------------------
  1006.   def change_guest_member_order(order = nil)
  1007.     $game_party.change_guest_member_order(order)
  1008.   end
  1009.   #--------------------------------------------------------------------------
  1010.   # ○ 追従メンバーを集合させる
  1011.   #--------------------------------------------------------------------------
  1012.   def follow_member_gathering
  1013.     $game_player.follow_member_gathering = true
  1014.   end
  1015. end
复制代码
难得找到一个不会在循环地图里面出错而且乘降交通工具比较正常的……

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
686
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

2
发表于 2010-12-5 22:06:45 | 只看该作者
人物跟随神马的最讨厌了!一按下Shift跑步,后面的人就跨拉拉隔开好几米,再走几步就死菜了

点评

不过这是让人感觉到其他三个角色存在的最好方法 =.=  发表于 2010-12-5 22:47
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-27 14:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表