#============================================================================== # RGSS2_SRPG2拡張 敵ユニット行動順 ランダム化 # 2011/09/02公開 # 2011/10/01ランダム化機能を追加 # C Winter (http://ccwinter.blog.fc2.com/) # # ・「移動不可スキル敵対応」より下に入れてください #============================================================================== #============================================================================== # ■ 設定項目 #============================================================================== module TSRPG #行動順をランダム化する機能 falseで無効 ENEMY_ACT_RANDOM = true end module TSRPG module Pattern ACT_PRIORITY = //i end end #============================================================================== # ■ Game_SrpgEvent #============================================================================== class Game_SrpgEvent < Game_Character #-------------------------------------------------------------------------- # ○ ユニットの行動優先度を取得する #-------------------------------------------------------------------------- def act_priority event_act = (@event.name =~ TSRPG::Pattern::ACT_PRIORITY ? $1.to_i : nil) enemy_act = ($data_enemies[@enemy_id].note =~ TSRPG::Pattern::ACT_PRIORITY ? $1.to_i : 0) if event_act == nil return enemy_act end return event_act end end #============================================================================== # ■ Game_Srpg #============================================================================== class Game_Srpg < Game_Map attr_accessor :in_enemy_update alias act_random_initialize initialize def initialize act_random_initialize @random_alive_enemy_list = [] end #-------------------------------------------------------------------------- # ○ 生存しているエネミーユニットの配列を返す #-------------------------------------------------------------------------- def alive_enemy_list result = [] for event in @enemy_list result.push(event) unless event.unit.dead? end if @in_enemy_update == true and TSRPG::ENEMY_ACT_RANDOM #敵ターン更新 @in_enemy_update = false if @random_alive_enemy_list == [] #ターン最初の呼び出しならリスト作成 result = result.sort_by{rand} #ランダムソート result.sort! do |a, b| #行動優先度で並べ替え if a.act_priority != b.act_priority b.act_priority <=> a.act_priority else a.act_priority <=> b.act_priority end end @random_alive_enemy_list = result end #ランダムリスト内の敵がターン中に死んだ(→resultに含まれない)場合外す @random_alive_enemy_list = @random_alive_enemy_list & result return @random_alive_enemy_list else result.sort! do |a, b| if a.act_priority != b.act_priority b.act_priority <=> a.act_priority else a.act_priority <=> b.act_priority end end return result end end #-------------------------------------------------------------------------- # ○ ターンの切り替え #-------------------------------------------------------------------------- alias act_random_change_turn change_turn def change_turn @random_alive_enemy_list = [] #ランダム順リストを空にする act_random_change_turn end end #============================================================================== # ■ Scene_Srpg #============================================================================== class Scene_Srpg < Scene_Base #-------------------------------------------------------------------------- # ● 敵ターン更新 #-------------------------------------------------------------------------- alias act_random_update_turn_enemy update_turn_enemy def update_turn_enemy $game_srpg.in_enemy_update = true #敵ターン更新フラグ act_random_update_turn_enemy end end