#============================================================================== # ■ RGSS3 エネミー特定ステート優先ターゲット Ver2.01 by 星潟 #------------------------------------------------------------------------------ # エネミーがスキル使用時、特定のステートの対象を優先的に選択するようになります。 # これにより、毒にかかっていない対象にキュアをかけて # 本当にかけるべき対象にキュアがかからない……といった現象を回避できます。 # 当方のアイテム/スキルターゲット拡張と併用する場合 # このスクリプトを下側に配置してください。 #============================================================================== # スキルのメモ欄で設定 #============================================================================== # <優先対象ステート:2> # # このスキルはステートID2の対象を優先ターゲットとする。 #------------------------------------------------------------------------------ # <優先対象ステート:2,3,4,5> # # このスキルはステートID2・3・4・5の # どれかにかかっている対象を優先ターゲットとする。 #============================================================================== module IS_PRS Word = "優先対象ステート" end class Game_Action #-------------------------------------------------------------------------- # 敵に対するターゲット #-------------------------------------------------------------------------- alias targets_for_opponents_target_state targets_for_opponents def targets_for_opponents $game_party.target_state_item = priority_state_target_item r = targets_for_opponents_target_state $game_party.target_state_item = nil r end #-------------------------------------------------------------------------- # 味方に対するターゲット #-------------------------------------------------------------------------- alias targets_for_friends_target_state targets_for_friends def targets_for_friends $game_party.target_state_item = priority_state_target_item r = targets_for_friends_target_state $game_party.target_state_item = nil r end #-------------------------------------------------------------------------- # ランダムターゲット #-------------------------------------------------------------------------- alias decide_random_target_target_state decide_random_target def decide_random_target $game_party.target_state_item = priority_state_target_item r = decide_random_target_target_state $game_party.target_state_item = nil r end #-------------------------------------------------------------------------- # 特定ステート優先ターゲット発動対象アイテムか #-------------------------------------------------------------------------- def priority_state_target_item (!@subject.actor? && !item.priority_state_data.empty?) ? item : nil end end class Game_Unit #-------------------------------------------------------------------------- # ターゲットのランダムな決定 #-------------------------------------------------------------------------- alias random_target_target_state random_target def random_target i = $game_party.target_state_item $game_party.target_state_flag = i if i r = random_target_target_state $game_party.target_state_flag = nil r end #-------------------------------------------------------------------------- # ターゲットのランダムな決定(戦闘不能) #-------------------------------------------------------------------------- alias random_dead_target_target_state random_dead_target def random_dead_target i = $game_party.target_state_item $game_party.target_state_flag = i if i r = random_dead_target_target_state $game_party.target_state_flag = nil r end #-------------------------------------------------------------------------- # 生存しているメンバーの配列取得 #-------------------------------------------------------------------------- alias alive_members_target_state alive_members def alive_members r1 = alive_members_target_state if $game_party.target_state_flag a = $game_party.target_state_item.priority_state_data r2 = r1.select {|e| a.any? {|s| e.state?(s)}} return r2 if !r2.empty? end r1 end #-------------------------------------------------------------------------- # 戦闘不能のメンバーの配列取得 #-------------------------------------------------------------------------- alias dead_members_target_state dead_members def dead_members r1 = dead_members_target_state if $game_party.target_state_flag a = $game_party.target_state_item.priority_state_data r2 = r1.select {|e| a.any? {|s| e.state?(s)}} return r2 if !r2.empty? end r1 end end class Game_Party < Game_Unit attr_accessor :target_state_item attr_accessor :target_state_flag end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 優先対象ステート #-------------------------------------------------------------------------- def priority_state_data @priority_state_data ||= create_priority_state_data end #-------------------------------------------------------------------------- # 優先対象ステートデータ作成 #-------------------------------------------------------------------------- def create_priority_state_data (/<#{IS_PRS::Word}[::](\S+)>/ =~ note ? $1.to_s : "" ).split(/\s*,\s*/).inject([]) {|r,t| r.push(t.to_i)} end end