#============================================================================== # ■ 命令の対象を変更 (VX Ace用) #------------------------------------------------------------------------------ # 製作者 : CanariAlternate # サイト名 : カルトの鳥篭 # サイトURL : http://canarialt.blog.fc2.com #------------------------------------------------------------------------------ # ■ 概要 : 変数でイベントコマンドが操作するキャラクターを指定可能にする。 # # ■ 必須 : 「共有変数スクリプト」 # # ■ 位置 : 「イベント起動判定拡張」より下 # 「マルチレイヤーシステム」より下 # 「フィールド並行戦闘」より下 #------------------------------------------------------------------------------ # ■ 機能 : 1. イベントコマンドで操作するキャラクターを変更する機能 # 2. 機能 1 を補佐する機能 # # ■ スクリプト(イベントコマンド) : # 1. overwrite_char(index) # イベントコマンドによる命令の対象を実行後1回だけ変更します。 # ※「移動ルートの設定」などのキャラクターに関連するコマンドで # 操作する対象を1回だけ変更します。以下のコマンドが該当します。 # # ☆条件分岐(キャラクターの向き) # ☆変数の操作(キャラクターの座標の取得など) # ☆イベントの位置設定 # ☆移動ルートの設定 # ☆アニメーションの表示 # ☆フキダシアイコンの表示 # ☆その他("get_character"メソッドを使用したスクリプト) # # どのキャラクターに変更するかは index で指定します。 # index = 0 : このイベント # index = -1 : プレイヤー # index = -2 : 隊列の2人目 ※隊列1人目はプレイヤー # index = -3 : 隊列の3人目 # index = -4 : 隊列の4人目 ※5人目以降も指定可能だがAceのデフォルトでは隊列は4人まで # index = イベントID : IDに対応するイベント # index = nil : 変更しない(通常の状態) ※falseでもnilと同じ # # 使用例 : ◆スクリプト : overwrite_char(-2) # ◆フキダシアイコンの表示 : プレイヤー, びっくり # 結果 : 本来はプレイヤーに表示されるフキダシアイコン「びっくり」が # 隊列の2人目に表示される。 # # ----------------------------------------------------------------- # 2. not_follow # 隊列のキャラクターの追従と同期を禁止します。 # ※上記の overwrite_char(index) で隊列を操作する際に # 同期と追従を禁止しないと上手く動かない可能性があります。 # # 追従 : プレイヤーが移動すると隊列のキャラクターが # それについて行こうとして移動すること。 # # 同期 : 隊列のキャラクターがプレイヤーと同じ移動速度になること。 # ※速度以外にも色々と同期しています。 # # ----------------------------------------------------------------- # 2. follow # 隊列キャラクターの追従と同期を許可します。 # # ----------------------------------------------------------------- # 2. how_many_followers? # 隊列の人数を取得する。※プレイヤーは数えないので注意 # # 使用例 : ◆変数の操作 : [0060:隊列の人数] = how_many_followers? # ◆変数の操作 : [0061:繰り返し回数] = 0 # ◆ループ # ◆スクリプト : overwrite_char( -(1 + $game_variables[61]) ) # ◆フキダシアイコンの表示 : このイベント, びっくり # ◆変数の操作 : [0061:繰り返し回数] += 1 # ◆条件分岐 : 変数 [0060:隊列の人数] < 変数 [0061:繰り返し回数] # ◆ループの中断 # ◆ # :分岐終了 # ◆ # :以上繰り返し # ◆ # 結果 : 隊列の全員(プレイヤー含む)にフキダシアイコンが表示される。 # # ------------------------------------------------------------------ # 2. where_actor?(actor_id) # actor_id で指定したIDのアクターが隊列にいるか調べる。 # 例 : 隊列に居ない場合は false を返す。 # 隊列の2人目に居たなら -2 を返す。 # 隊列の1人目(プレイヤー)に居たなら -1 を返す。 # # 使用例 : ◆条件分岐 : スクリプト : overwrite_char( where_actor?(2) ) # ◆フキダシアイコンの表示 : プレイヤー, びっくり # ◆ # :分岐終了 # ◆ # 結果 : 隊列にIDが2番のアクターがいるならそれにフキダシアイコンが表示される。 # #------------------------------------------------------------------------------ # 更新履歴 : 2012/09/14 Ver1.00 スクリプトを作成した。 # 2012/10/01 Ver1.01 共通処理スクリプトに対応 # 2013/02/19 Ver1.02 共通処理スクリプトの廃止による変更を施した。 # 2013/05/12 Ver1.03 共有変数スクリプトの変更に対応した。 # スペルミスを修正した。一部仕様を微妙に変更した。 #============================================================================== $imported ||= {} $imported[:CanariAlternate_OverwriteCharacter] = true #============================================================================== # ■ Calt #------------------------------------------------------------------------------ #  CanariAlternateが製作したスクリプト用のモジュールです。 #============================================================================== module Calt #----------------------------------------------------------------------------- # 隊列の追従と同期を禁止する機能を有効にする。基本的には true で大丈夫です。 # ※もし、この部分の処理が他のスクリプトと競合する際には false に設定する。 FOLLOWER_FUNCTION_INSTALL = true #----------------------------------------------------------------------------- end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 次に実行するイベントコマンドの対象を index で指定したIDに変更 [新規] #-------------------------------------------------------------------------- def overwrite_char(index = false) @overwrite_character_id = index end #-------------------------------------------------------------------------- # ● キャラクターの取得 [追加] #-------------------------------------------------------------------------- alias get_character_OverwriteCharacter get_character def get_character(param) if @overwrite_character_id param = @overwrite_character_id # 対象を変更 @overwrite_character_id = false # 対象の変更の予約を解除 end if param <= -2 $game_player.followers[-(param + 2)] # 対象が隊列の場合 else get_character_OverwriteCharacter(param) end end #-------------------------------------------------------------------------- # ● アクターIDに対応する隊員の位置を取得 [新規] #-------------------------------------------------------------------------- def where_actor?(actor_id) followers = $game_player.followers index = -2 followers.each do |follower| return index if follower.actor && follower.actor.id == actor_id index -= 1 end return -1 if $game_player.actor && $game_player.actor.id == actor_id return false end #-------------------------------------------------------------------------- # ● 隊員数を取得 [新規] #-------------------------------------------------------------------------- def how_many_followers? num = 0 $game_player.followers.each {|follower| num += 1 if follower.actor } return num end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  旧バージョンとの互換用の定義 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 旧バージョンのスペルミスに互換 [新規] #-------------------------------------------------------------------------- def how_many_folloers? return how_many_followers? end end if Calt::FOLLOWER_FUNCTION_INSTALL #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 追従と同期を禁止 [新規] #-------------------------------------------------------------------------- def not_follow $game_player.followers.follow_disable end #-------------------------------------------------------------------------- # ● 追従と同期を許可 [新規] #-------------------------------------------------------------------------- def follow $game_player.followers.follow_enable end end #============================================================================== # ■ Game_Followers #------------------------------------------------------------------------------ #  フォロワーの配列のラッパーです。このクラスは Game_Player クラスの内部で使 # 用されます。 #============================================================================== class Game_Followers #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :follow_disable # 追従禁止 #-------------------------------------------------------------------------- # ● オブジェクト初期化 [追加] #-------------------------------------------------------------------------- alias initialize_OverwriteCharacter initialize def initialize(*args) initialize_OverwriteCharacter(*args) @follow_disable = false # 初期状態は許可 end #-------------------------------------------------------------------------- # ● 移動 [追加] #-------------------------------------------------------------------------- alias move_OverwriteCharacter move def move move_OverwriteCharacter unless @follow_disable end #-------------------------------------------------------------------------- # ● 追従と同期を許可 [新規] #-------------------------------------------------------------------------- def follow_enable @follow_disable = false each {|follower| follower.synchronisation_disable = false } end #-------------------------------------------------------------------------- # ● 追従と同期を禁止 [新規] #-------------------------------------------------------------------------- def follow_disable @follow_disable = true each {|follower| follower.synchronisation_disable = true } end end #============================================================================== # ■ Game_Follower #------------------------------------------------------------------------------ #  フォロワーを扱うクラスです。フォロワーとは、隊列歩行で表示する、先頭以外の # 仲間キャラクターのことです。Game_Followers クラスの内部で参照されます。 #============================================================================== class Game_Follower < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :synchronisation_disable # 同期禁止 #-------------------------------------------------------------------------- # ● オブジェクト初期化 [追加] #-------------------------------------------------------------------------- alias initialize_OverwriteCharacter initialize def initialize(*args) initialize_OverwriteCharacter(*args) @synchronisation_disable = false # 初期状態は許可 end #-------------------------------------------------------------------------- # ● 同期の処理 [新規] #-------------------------------------------------------------------------- def synchronisation @move_speed = $game_player.real_move_speed @transparent = $game_player.transparent @walk_anime = $game_player.walk_anime @step_anime = $game_player.step_anime @direction_fix = $game_player.direction_fix @opacity = $game_player.opacity @blend_type = $game_player.blend_type end #-------------------------------------------------------------------------- # ● フレーム更新 [◆再定義] #-------------------------------------------------------------------------- def update synchronisation unless @synchronisation_disable super end end end