#============================================================================== # ■効果範囲拡張 for RGSS3 Ver1.01-β # □作成者 kure # # スキルのメモ欄に「<効果範囲 x>」で設定 # 設定したスキルのツクール側の攻撃範囲は「なし」に設定の事 # # ID12 敵味方全体 # ID13 敵味方全体からランダム1体 # ID14 敵味方全体からランダム2体 # ID15 敵味方全体からランダム3体 # ID16 敵味方全体からランダム4体 # ID17 敵味方全体(戦闘不能) # ID18 味方全体からランダム1体 # ID19 味方全体からランダム2体 # ID20 味方全体からランダム3体 # ID21 味方全体からランダム4体 # #============================================================================== #============================================================================== # ●■ RPG::UsableItem(追加定義集積) #============================================================================== class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # ★ 効果範囲(再定義) #-------------------------------------------------------------------------- def scope @note.match(/<効果範囲\s?(\d+)\s?>/) return $1 ? $1.to_i : @scope end #-------------------------------------------------------------------------- # ★ バトラーが攻撃範囲か(追加定義) #-------------------------------------------------------------------------- def for_battler? [12, 13, 14, 15, 16].include?(scope) end #-------------------------------------------------------------------------- # ★ 戦闘不能を含むか(追加定義) #-------------------------------------------------------------------------- def for_dead_member? scope == 17 end #-------------------------------------------------------------------------- # ★ ランダムか(再定義) #-------------------------------------------------------------------------- def for_random? [3, 4, 5, 6, 13, 14, 15, 16, 18, 19, 20, 21].include?(scope) end #-------------------------------------------------------------------------- # ★ ターゲット数(再定義) #-------------------------------------------------------------------------- def number_of_targets return 0 unless for_random? return scope - 2 if scope < 10 return scope - 12 if scope > 10 && scope < 17 return scope - 17 if scope > 17 end #-------------------------------------------------------------------------- # ★ 全体か(再定義) #-------------------------------------------------------------------------- def for_all? [2, 8, 10, 12, 17].include?(scope) end #-------------------------------------------------------------------------- # ★ 対象選択が必要か(再定義) #-------------------------------------------------------------------------- def need_selection? [1, 7, 9].include?(scope) end end #============================================================================== # ■ Game_Action #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ● 全体のユニットを取得 #-------------------------------------------------------------------------- def battler_unit $game_troop.members + $game_party.members end #-------------------------------------------------------------------------- # ● ランダムターゲット(再定義) #-------------------------------------------------------------------------- def decide_random_target if item.for_dead_member? target = battler_unit.select{|battler| battler.dead?} elsif item.for_battler? target = set_random_target(battler_unit) end if item.for_dead_friend? target = friends_unit.random_dead_target elsif item.for_friend? target = friends_unit.random_target else target = opponents_unit.random_target end if target @target_index = target.index else clear end end #-------------------------------------------------------------------------- # ● ターゲットのランダムな決定(追加定義) #-------------------------------------------------------------------------- def set_random_target(battlers) tgr_sum = battlers.inject(0) {|r, member| r + member.tgr } tgr_rand = rand * tgr_sum battlers.each{|member| tgr_rand -= member.tgr return member if tgr_rand < 0} battlers[0] end #-------------------------------------------------------------------------- # ● ターゲットの配列作成(再定義) #-------------------------------------------------------------------------- def make_targets if !forcing && subject.confusion? [confusion_target] #敵味方範囲の追加部分(1.00) elsif item.for_battler? targets_for_battlers elsif item.for_opponent? targets_for_opponents elsif item.for_friend? targets_for_friends else [] end end #-------------------------------------------------------------------------- # ● 味方に対するターゲット #-------------------------------------------------------------------------- def targets_for_friends #処理追加(1.01) if item.for_random? Array.new(item.number_of_targets) { friends_unit.random_target } elsif item.for_user? [subject] elsif item.for_dead_friend? if item.for_one? [friends_unit.smooth_dead_target(@target_index)] else friends_unit.dead_members end elsif item.for_friend? if item.for_one? [friends_unit.smooth_target(@target_index)] else friends_unit.alive_members end end end #-------------------------------------------------------------------------- # ● バトラーに対するターゲット(追加定義) #-------------------------------------------------------------------------- def targets_for_battlers if item.for_random? Array.new(item.number_of_targets) { set_random_target(battler_unit) } elsif item.for_dead_member? battler_unit.select{|battler| battler.dead?} elsif item.for_all? battler_unit.select{|battler| battler.alive?} else [] end end #-------------------------------------------------------------------------- # ● スキル/アイテムの使用対象候補を取得(再定義) #-------------------------------------------------------------------------- def item_target_candidates #追加部分(1.00) if item.for_battler? battler_unit.select{|battler| battler.alive?} elsif item.for_dead_member? battler_unit.select{|battler| battler.dead?} elsif item.for_opponent? opponents_unit.alive_members elsif item.for_user? [subject] elsif item.for_dead_friend? friends_unit.dead_members else friends_unit.alive_members end end end