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

Project1

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

[已经解决] 关于本站的人物跟随脚本与KGC的人物仓库脚本

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
462
在线时间
1411 小时
注册时间
2010-9-23
帖子
557
跳转到指定楼层
1
发表于 2011-9-19 17:11:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
稍稍学习KGC的人物仓库脚本,结果发现与本站自编的人物跟随脚本冲突,搜索了一些帖子,发现要解决这个问题貌似很麻烦,请问有没有其他的脚本能代替KGC的人物仓库脚本呢?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1071 小时
注册时间
2011-5-12
帖子
2317

贵宾

2
发表于 2011-9-19 18:20:00 | 只看该作者
怎么不问有没有可以取代人物跟随的脚本呢?
  1. #============================================================================
  2. #
  3. # ■パーティーメンバーの追従 □Ver.3.23 □製作者:月紳士
  4. # ・RPGツクールVX用 RGSS2スクリプト
  5. #
  6. #    ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド
  7. #
  8. #  ※二次配布禁止!配布元には利用規約があります。必ずそちらを見てください。
  9. #----------------------------------------------------------------------------
  10. # 更新履歴
  11. #   Ver.3.23  棺桶表示を使用しない場合の処理を修正。
  12. #   Ver.3.22  追従キャラクター非表示の際の集合動作を改良。
  13. #   Ver.3.21  棺桶が表示されない不具合を修正。
  14. #   Ver.3.20  マップループ時の追従挙動を修正。
  15. #   Ver.3.17  メソッド整理とゲストメンバー挿入位置調整機能追加。
  16. #   Ver.3.16  隠す処理の不具合修正。
  17. #   Ver.3.12  イベントコマンド・スクリプト全回復時の更新処理を追加。
  18. #   Ver.3.11  パーティー加入時イベント用動作処理を追加。
  19. #   Ver.3.10  フォローメンバーを隠す機能の強化とゲスト表示機能を強化。
  20. #   Ver.3.01  コマンド追加。
  21. #   Ver.3.00  ゲストキャラクター表示機能を追加。
  22. #   Ver.2.03  戦闘テスト時に起きる不具合を修正。
  23. #   Ver.2.02  不具合再修正と処理軽量化。
  24. #   Ver.2.00  仕様見直しと棺桶未使用時の不具合を修正。
  25. #============================================================================
  26. =begin

  27.  このスクリプトは
  28.  パーティーのメンバーを主人公キャラ(先頭キャラ)の後に着いて歩かせる、
  29.  いわいる「隊列歩行」を実現するスクリプトです。

  30.  ・乗り物への乗り込み動作を再現。

  31.  ・簡単に表示数を増やすことができる構造になっており、
  32.   多人数パーティーなどに対応が容易。

  33.  ・某ゲームのように戦闘不能メンバーを棺おけ表示にしたり出来る。

  34.  ・パーティーには実際に参加せず、追従のみをするゲストキャラクターを設定可能。
  35.   ゲストは最後尾だけでなく、先頭にすることも可能。


  36.  以下に使い方を説明します↓

  37. #----------------------------------------------------------------------------

  38.  ●カスタマイズ項目の説明

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

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

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

  88. #----------------------------------------------------------------------------

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

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

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

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

  113.      follow_member_off
  114.      
  115.   と記入し実行します。
  116.      
  117.      follow_member_on

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

  119.  また、

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

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

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

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

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

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

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

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

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

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

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

  182. #--------------------------------------------------------------------------

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

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

  190.  ●追従キャラクターの集合

  191.  イベントコマンド・スクリプトにて

  192. follow_member_gathering

  193.  というようにスクリプト実行させると、
  194.  乗り物への乗りこみ動作のように追従キャラクターが集合します。

  195. =end

  196. #==============================================================================
  197. # □ カスタマイズ項目
  198. #==============================================================================

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

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

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

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

  337. class Game_Map
  338.   #--------------------------------------------------------------------------
  339.   # ◎ リフレッシュ
  340.   #--------------------------------------------------------------------------
  341.   alias tig_pmf_refresh refresh
  342.   def refresh
  343.     tig_pmf_refresh
  344.     $game_party.character_graphic_refresh
  345.   end
  346. end
  347.   
  348. #==============================================================================
  349. # ■ Game_Character
  350. #------------------------------------------------------------------------------
  351. #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
  352. # クラスのスーパークラスとして使用されます。
  353. #==============================================================================

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

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

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

  621. class Game_Vehicle < Game_Character
  622.   #--------------------------------------------------------------------------
  623.   # ● フレーム更新
  624.   #--------------------------------------------------------------------------
  625.   def update
  626.     super
  627.     if @type == 2               # 飛行船の場合
  628.       if @driving
  629.         return if $game_player.follow_member_gathering  ### 追加部分
  630.         if @altitude < MAX_ALTITUDE
  631.           @altitude += 1        # 高度を上げる
  632.         end
  633.       elsif @altitude > 0
  634.         @altitude -= 1          # 高度を下げる
  635.         if @altitude == 0
  636.           @priority_type = 0    # プライオリティを「通常キャラの下」に戻す
  637.         end
  638.       end
  639.     end
  640.   end
  641. end
复制代码

  1. #==============================================================================
  2. # □ Game_Follow_Members
  3. #------------------------------------------------------------------------------
  4. #  主人公キャラ(先頭キャラ)の後を追従するパーティーメンバーを扱うクラスです。
  5. #==============================================================================

  6. class Game_Follow_Members < Game_Character
  7.   #--------------------------------------------------------------------------
  8.   # ○ 公開インスタンス変数
  9.   #--------------------------------------------------------------------------
  10.   attr_reader   :index
  11.   attr_accessor :follow_hide
  12.   #--------------------------------------------------------------------------
  13.   # ○ オブジェクト初期化
  14.   #--------------------------------------------------------------------------
  15.   def initialize(order)
  16.     super()
  17.     @order = order
  18.     @target_x = $game_player.x
  19.     @target_y = $game_player.y
  20.     @next_target_x = $game_player.x
  21.     @next_target_y = $game_player.y
  22.     @follow_hide = false
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ○ 歩行グラフィックのリフレッシュ
  26.   #  ※ 生存者が先頭になるように歩行グラフィックを表示する機能あり。
  27.   #     全員死亡している場合は棺にする
  28.   #--------------------------------------------------------------------------
  29.   def character_graphic_refresh
  30.     @pmf_character_name = ""
  31.     @pmf_character_index = 0
  32.    
  33.     unless Party_Member_Follow::USE_COFFIN
  34.       if $game_party.display_follow_member[@order+1]
  35.         @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
  36.         @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
  37.       end
  38.       return
  39.     end
  40.    
  41.     if $game_party.display_follow_member[@order+1] == nil
  42.       if $game_party.display_follow_member(false).size >= @order+2
  43.         @pmf_character_name = Party_Member_Follow::COFFIN_FILE_NAME
  44.         @pmf_character_index = Party_Member_Follow::COFFIN_FILE_INDEX
  45.       end
  46.     else
  47.       @pmf_character_name = $game_party.display_follow_member[@order+1].character_name
  48.       @pmf_character_index = $game_party.display_follow_member[@order+1].character_index
  49.     end
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ○ 歩行グラフィック ファイル名
  53.   #--------------------------------------------------------------------------
  54.   def character_name
  55.     return @pmf_character_name
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ○ 歩行グラフィック インデックス
  59.   #--------------------------------------------------------------------------
  60.   def character_index
  61.     return @pmf_character_index
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ○ フレーム更新
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     if $game_player.vehicle_getting_on and not moving? and
  68.        $game_player.now_vehicle and $game_player.now_vehicle.pos?(@x, @y)
  69.       @transparent = true
  70.     end
  71.     @move_speed = $game_player.move_speed
  72.     super
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 座標一致と「すり抜け OFF」判定 (nt = No Through)
  76.   #--------------------------------------------------------------------------
  77.   def pos_nt?(x, y)
  78.     return false if @transparent
  79.     return (pos?(x, y) and not @through)
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ○ ダッシュ状態判定
  83.   #--------------------------------------------------------------------------
  84.   def dash?
  85.     return false if @move_route_forcing
  86.     return false if $game_player.follow_member_gathering
  87.     return $game_player.dash?
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ○ 透明化の取得
  91.   #--------------------------------------------------------------------------
  92.   def transparent
  93.     return true if @follow_hide
  94.     return @transparent
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ○ プレイヤーの位置とそろえる
  98.   #--------------------------------------------------------------------------
  99.   def moveto_player
  100.     moveto($game_player.x, $game_player.y)
  101.     @target_x = $game_player.x
  102.     @target_y = $game_player.y
  103.     @next_target_x = $game_player.x
  104.     @next_target_y = $game_player.y
  105.     @direction = $game_player.direction
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ○ 追従するキャラクターの取得
  109.   #--------------------------------------------------------------------------
  110.   def target_character
  111.     if @order == 0
  112.       return $game_player
  113.     else
  114.       return $game_party.follow_member[@order-1]
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ○ 追従の更新
  119.   #  ※ 追従が完了している場合は true を返す
  120.   #--------------------------------------------------------------------------
  121.   def move_toward_target_update
  122.     return false if moving?
  123.     if $game_player.follow_member_gathering and
  124.       (character_name == "" or transparent)
  125.       moveto_player
  126.       return true
  127.     end
  128.     if @x == target_character.x and @x == @next_target_x and
  129.        @y == target_character.y and @y == @next_target_y
  130.       return true
  131.     end
  132.     if $game_player.move_route_forcing and
  133.        not $game_player.move_route_forcing_follow
  134.       return true
  135.     end
  136.     @target_x = @next_target_x
  137.     @target_y = @next_target_y
  138.     @next_target_x = target_character.x
  139.     @next_target_y = target_character.y
  140.     if @target_x == @next_target_x and @target_y == @next_target_y
  141.       return if target_character.moving?
  142.     end      
  143.     move_toward_target
  144.     return true if character_name == ""
  145.     return true if transparent
  146.     return false
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ○ 追従すべきポイントへの X 距離計算
  150.   #--------------------------------------------------------------------------
  151.   def distance_x_target
  152.     sx = @x - @target_x
  153.     if $game_map.loop_horizontal?         # 横にループしているとき
  154.       if sx.abs > $game_map.width / 2     # 絶対値がマップの半分より大きい?
  155.         sx += $game_map.width             # マップの幅を足す
  156.       end
  157.     end
  158.     return sx
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ 追従すべきポイントへの Y 距離計算
  162.   #--------------------------------------------------------------------------
  163.   def distance_y_target
  164.     sy = @y - @target_y
  165.     if $game_map.loop_vertical?           # 縦にループしているとき
  166.       if sy.abs > $game_map.height / 2    # 絶対値がマップの半分より大きい?
  167.         sy += $game_map.height            # マップの高さを足す
  168.       end
  169.     end
  170.     return sy
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ○ 追従すべきポイントへ近づく
  174.   #--------------------------------------------------------------------------
  175.   def move_toward_target
  176.     @through = true                       # 追従歩行中はすり抜け判定
  177.     sx = distance_x_target
  178.     sy = distance_y_target
  179.     if sx != 0 or sy != 0
  180.       if sx.abs > sy.abs                  # 横の距離のほうが長い
  181.         (0..$game_map.width).include?(sx) ? move_left : move_right # 左右方向を優先                        
  182.         if @move_failed and sy != 0
  183.           (0..$game_map.height).include?(sy) ? move_up : move_down
  184.         end
  185.       else                                # 縦の距離のほうが長いか等しい
  186.         (0..$game_map.height).include?(sy) ? move_up : move_down   # 上下方向を優先
  187.         if @move_failed and sx != 0
  188.           (0..$game_map.width).include?(sx) ? move_left : move_right
  189.         end
  190.       end
  191.     end
  192.     @through = $game_player.through
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 接触イベントの起動判定
  196.   #--------------------------------------------------------------------------
  197.   def check_event_trigger_touch(x, y)
  198.     return false
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ○ プレイヤーの対面に移動
  202.   #--------------------------------------------------------------------------
  203.   def set_pos_player_facing
  204.     x = $game_map.x_with_direction($game_player.x, $game_player.direction)
  205.     y = $game_map.y_with_direction($game_player.y, $game_player.direction)
  206.     moveto(x, y)
  207.     @direction = 10 - $game_player.direction
  208.   end
  209. end

  210. #==============================================================================
  211. # □ Guest_Members
  212. #------------------------------------------------------------------------------
  213. #  歩行表示のみをするゲストメンバーを扱うクラスです。
  214. #==============================================================================

  215. class Guest_Members
  216.   #--------------------------------------------------------------------------
  217.   # ○ 公開インスタンス変数
  218.   #--------------------------------------------------------------------------
  219.   attr_reader   :character_name           # 歩行グラフィック ファイル名
  220.   attr_reader   :character_index          # 歩行グラフィック インデックス
  221.   #--------------------------------------------------------------------------
  222.   # ○ オブジェクト初期化
  223.   #--------------------------------------------------------------------------
  224.   def initialize(file_name, index)
  225.     @character_name = file_name
  226.     @character_index = index
  227.   end
  228. end

  229. #==============================================================================
  230. # ■ Spriteset_Map
  231. #------------------------------------------------------------------------------
  232. #  マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
  233. # Scene_Map クラスの内部で使用されます。
  234. #==============================================================================

  235. class Spriteset_Map
  236.   #--------------------------------------------------------------------------
  237.   # ● キャラクタースプライトの作成
  238.   #--------------------------------------------------------------------------
  239.   def create_characters
  240.     @character_sprites = []
  241.     for i in $game_map.events.keys.sort
  242.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  243.       @character_sprites.push(sprite)
  244.     end
  245.     for vehicle in $game_map.vehicles
  246.       sprite = Sprite_Character.new(@viewport1, vehicle)
  247.       @character_sprites.push(sprite)
  248.     end
  249.    
  250.     create_follow_members    ### 追加部分
  251.    
  252.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ○ キャラクタースプライトの作成
  256.   #--------------------------------------------------------------------------
  257.   def create_follow_members
  258.     for members in $game_party.follow_member.reverse
  259.       sprite = Sprite_Character.new(@viewport1, members)
  260.       @character_sprites.push(sprite)
  261.     end
  262.   end
  263. end

  264. #==============================================================================
  265. # ■ Game_Interpreter
  266. #------------------------------------------------------------------------------
  267. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  268. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  269. #==============================================================================

  270. class Game_Interpreter
  271.   #--------------------------------------------------------------------------
  272.   # ◎ イベントのセットアップ
  273.   #     list     : 実行内容
  274.   #     event_id : イベント ID
  275.   #--------------------------------------------------------------------------
  276.   alias tig_pmf_clear clear
  277.   def clear
  278.     tig_pmf_clear
  279.     @this_event = -1
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ◎ ステートの変更
  283.   #--------------------------------------------------------------------------
  284.   alias tig_pmf_command_313 command_313
  285.   def command_313
  286.     tig_pmf_command_313
  287.     $game_party.character_graphic_refresh
  288.     return true
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ◎ 全回復
  292.   #--------------------------------------------------------------------------
  293.   alias tig_pmf_command_314 command_314
  294.   def command_314
  295.     tig_pmf_command_314
  296.     $game_party.character_graphic_refresh
  297.     return true
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● キャラクターの取得
  301.   #--------------------------------------------------------------------------
  302.   def get_character(param)
  303.     case param
  304.     when -1   # プレイヤー
  305.       return $game_player
  306.     when 0    # このイベント
  307.       case @this_event
  308.       when -1
  309.         events = $game_map.events
  310.         return events == nil ? nil : events[@event_id]
  311.       when 0
  312.         return $game_player
  313.       else
  314.         return $game_party.follow_member[@this_event-1]
  315.       end
  316.     else      # 特定のイベント
  317.       events = $game_map.events
  318.       return events == nil ? nil : events[param]
  319.     end
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ○ 「このイベント」の対象変更
  323.   #--------------------------------------------------------------------------
  324.   def change_this_event(number)
  325.     @this_event = number
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ○ 追従キャラクターの表示
  329.   #--------------------------------------------------------------------------
  330.   def follow_member_on
  331.     $game_player.follow_hide = false
  332.     $game_party.follow_member.each {|i|i.follow_hide = false}
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ○ 追従キャラクターの非表示
  336.   #--------------------------------------------------------------------------
  337.   def follow_member_off(n = nil)
  338.     if n == nil
  339.       $game_player.follow_hide = false
  340.       $game_party.follow_member.each {|i|i.follow_hide = true}
  341.     else
  342.       case n
  343.       when 0
  344.         $game_player.follow_hide = true
  345.         $game_party.follow_member.each {|i|i.follow_hide = true}
  346.       when 1
  347.         $game_player.follow_hide = false
  348.         $game_party.follow_member.each {|i|i.follow_hide = true}
  349.       else
  350.         $game_player.follow_hide = false
  351.         $game_party.follow_member.each{|i|i.follow_hide = true}
  352.         for i in 0..(n-2)
  353.           $game_party.follow_member[i].follow_hide = false
  354.         end
  355.       end
  356.     end
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ○ ゲストキャラクターをパーティーに加入させる
  360.   #--------------------------------------------------------------------------
  361.   def add_guest_member(file_name, index)
  362.     $game_party.add_guest_member(file_name, index)
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ○ ゲストキャラクターをパーティーから外す
  366.   #--------------------------------------------------------------------------
  367.   def remove_guest_member(file_name, index)
  368.     $game_party.remove_guest_member(file_name, index)
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ○ ゲストキャラクターをクリアする
  372.   #--------------------------------------------------------------------------
  373.   def clear_guest_member
  374.     $game_party.clear_guest_member
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ○ ゲストキャラクターとパーティーメンバーの並びを逆転する
  378.   #--------------------------------------------------------------------------
  379.   #  引数を省略した場合、並びが逆転。
  380.   #   true 指定でゲストが先頭、false 指定でゲストが後ろ。
  381.   #--------------------------------------------------------------------------
  382.   def change_guest_member_order(order = nil)
  383.     $game_party.change_guest_member_order(order)
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ○ 追従メンバーを集合させる
  387.   #--------------------------------------------------------------------------
  388.   def follow_member_gathering
  389.     $game_player.follow_member_gathering = true
  390.   end
  391. end
复制代码
素材:

点评

谢谢您的帮助!虽然日文注释看起来很麻烦...  发表于 2011-9-19 21:44
找我请找芙蕾娅
顺带一提,完全看得懂我头像请捡起你自己的节操哟(自重
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
678 小时
注册时间
2010-8-11
帖子
1533
3
发表于 2011-9-19 20:23:18 | 只看该作者
月夜神音 发表于 2011-9-19 11:20
怎么不问有没有可以取代人物跟随的脚本呢?素材:

于是月绅士果断V5了=w=
小艾工作室开张= =
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
354
在线时间
1036 小时
注册时间
2011-5-19
帖子
2098
4
发表于 2011-9-19 21:42:31 | 只看该作者
月夜神音 发表于 2011-9-19 18:20
怎么不问有没有可以取代人物跟随的脚本呢?素材:

各位都是强人呀!让我等新手情何以堪~~不过该脚本与按键跳跃脚本冲突吗?XD,个人感觉跟随脚本与按键跳跃脚本是逻辑上铁定冲突(除了强人做到MM3的地步),可惜我在跟随脚本与按键跳跃脚本中只能取按键跳跃脚本了~~没办法!!月绅士大大有办法吗?=W=
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
678 小时
注册时间
2010-8-11
帖子
1533
5
发表于 2011-9-19 23:47:53 | 只看该作者
MSQ 发表于 2011-9-19 14:42
各位都是强人呀!让我等新手情何以堪~~不过该脚本与按键跳跃脚本冲突吗?XD,个人感觉跟随脚本与按键跳跃 ...

月绅士不是月音前辈= =||
月绅士是一个脚本作者……
按键跳跃和队伍跟随?
可以在跟随脚本内更改……
用按键判定,然后跟随的角色跳起来=w=
小艾工作室开张= =
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
354
在线时间
1036 小时
注册时间
2011-5-19
帖子
2098
6
发表于 2011-9-20 07:31:44 | 只看该作者
RPGmaster 发表于 2011-9-19 23:47
月绅士不是月音前辈= =||
月绅士是一个脚本作者……
按键跳跃和队伍跟随?

谢啦~~不过跟随者可能会跳到不是路的地方~~必须要有智能判定的说~~=W=
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-9 16:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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