=begin 行動バトラー情報取得 ver 0.1.0.0         by 半生 http://www.tktkgame.com/ 最後に行動した(行動中)のバトラー情報を取得できるようにします。 最後に行動したActorのID 最後に行動したEnemyのID 最後に行動したActorのパーティ内での順番(1〜) 最後に行動したEnemyのトループ内での順番(1〜) 最後に行動したバトラーの順番を格納 最後にターゲットになったバトラーの順番を格納(単体の時のみ) を変数に格納します。 またスクリプトからは $game_temp.last_action_battler で最後に行動したバトラー $game_temp.last_targets で最後に行動したバトラーのターゲットの配列にアクセスできるようになります。 ■ 他  ・下の方に配置した方が競合しにくいかもしれません。 ■ 更新履歴 ver 0.1.0.0 (2010/04/25)  公開。 =end module HNActiveBattlerInfo # 最後に行動したActorのID VAR_LA_ACTOR_ID = 21 #最後に行動したEnemyのID VAR_LA_ENEMY_ID = 22 # 最後に行動したActorのパーティ内での順番(1〜) VAR_LA_ACTOR_INDEX = 23 # 最後に行動したEnemyのトループ内での順番(1〜) VAR_LA_ENEMY_INDEX = 24 # 最後に行動したバトラーの順番を格納 # Actorの場合はパーティー内での順番(1〜), Enemyの場合はトループ内での順番 + 100 VAR_LA_BATTLER_INDEX = 25 # 最後にターゲットになったバトラーの順番を格納(単体の時のみ) # 対象がいないときは0,対象が一人の時はVAR_LA_BATTLER_INDEXと同じ # 複数の時は最初のターゲットの順番をマイナスにしたものが入ります VAR_LAST_TARGET_INDEX = 26 module_function # 指定されたバトラーのグループ内の順番を返す def index_number(battler) index = 0 if battler.is_a?(Game_Actor) bindex = $game_party.members.index(battler) index = bindex + 1 unless bindex.nil? else return 0 unless $game_temp.in_battle bindex = $game_troop.members.index(battler) index = bindex + 1 unless bindex.nil? end return index end def set_la_battler_info(battler) return unless battler.is_a?(Game_Battler) $game_temp.last_action_battler = battler if battler.is_a?(Game_Actor) $game_variables[VAR_LA_ACTOR_ID] = battler.id bindex = index_number(battler) $game_variables[VAR_LA_ACTOR_INDEX] = bindex $game_variables[VAR_LA_BATTLER_INDEX] = bindex else $game_variables[VAR_LA_ENEMY_ID] = battler.enemy_id bindex = index_number(battler) $game_variables[VAR_LA_ENEMY_INDEX] = bindex if bindex == 0 $game_variables[VAR_LA_BATTLER_INDEX] = 0 else $game_variables[VAR_LA_BATTLER_INDEX] = bindex + 100 end end end def set_last_target(targets) $game_temp.last_targets = targets uniq_targets_size = targets.uniq.size if uniq_targets_size > 0 target = targets.first bindex = index_number(target) # Enemyの場合は+100 if bindex !=0 and target.is_a?(Game_Enemy) bindex += 100 end # 対象が複数の時はマイナスに if uniq_targets_size > 1 bindex *= -1 end $game_variables[VAR_LAST_TARGET_INDEX] = bindex else $game_variables[VAR_LAST_TARGET_INDEX] = 0 end end # Scene_BattleへのMix-in用 module MISceneBattle # ● 開始処理 def start $game_temp.last_action_battler = nil $game_temp.last_targets = [] $game_party.members.each do |actor| actor.action.clear_reserved_targets end $game_variables[VAR_LA_ACTOR_ID] = 0 $game_variables[VAR_LA_ENEMY_ID] = 0 $game_variables[VAR_LA_ACTOR_INDEX] = 0 $game_variables[VAR_LA_BATTLER_INDEX] = 0 $game_variables[VAR_LA_ENEMY_INDEX] = 0 $game_variables[VAR_LA_BATTLER_INDEX] = 0 super end # ● 終了処理 def terminate $game_temp.last_action_battler = nil $game_temp.last_targets = [] super end end end class Game_Temp attr_accessor :last_action_battler # 戦闘中最後に行動したバトラー attr_accessor :last_targets # 最後に選ばれたターゲットの配列 end class Scene_Battle include HNActiveBattlerInfo::MISceneBattle #-------------------------------------------------------------------------- # ● 戦闘行動の実行 #-------------------------------------------------------------------------- alias :_hn_binfo__execute_action :execute_action unless method_defined?(:_hn_binfo__execute_action) def execute_action HNActiveBattlerInfo.set_la_battler_info(@active_battler) HNActiveBattlerInfo.set_last_target(@active_battler.action.make_targets_before) _hn_binfo__execute_action end end class Game_BattleAction alias :_hn_binfo__make_targets :make_targets unless method_defined?(:_hn_binfo__make_targets) #-------------------------------------------------------------------------- # ● ターゲットの配列作成 #-------------------------------------------------------------------------- # 予約済みのターゲットがいたら def make_targets if @reserved_targets != nil targets = @reserved_targets @reserved_targets = nil return targets end _hn_binfo__make_targets end # ターゲットを先に決めて予約しておく def make_targets_before @reserved_targets = _hn_binfo__make_targets if @reserved_targets.nil? return [] else return @reserved_targets end end # 予約済みのターゲットを消去する def clear_reserved_targets @reserved_targets = nil end end