#============================================================================== # スキルでの狙われやすさ変更 2011/01/07 ver.1.01 作者:chiriya #------------------------------------------------------------------------------ # ○特定のスキルで敵が攻撃した場合の、狙われやすさを変更するスクリプトです。 # #  狙われやすさは、以下の3種類を設定できます。 # #  @前ほど狙われやすいタイプ(もしくは職業のポジション順) #  A狙われやすさが均等なタイプ # B後ろほど狙われやすいタイプ(もしくは職業のポジションの逆) # # ・使い方としては、例えば、武器スキルでの攻撃は通常通りでいいが、 #  呪文での攻撃は前衛も後衛も同じ確率で狙われるようにする、とか、 #  後衛ばっかり狙ってくる敵を作る、など。 # ・各タイプのオッズのところも、細かく変更できるようにしたので、 #  自由にいじってください。 # ・仕様として、通常攻撃は変更されませんが、職業オッズ→並び順オッズへの #  変更だけは反映されます。 #============================================================================== module CHIRI # ***カスタマイズ項目*** # 職業ではなく、並び順を使う場合、true # 職業による場合、false LINE_UP_TARGET = true # <狙われやすさのタイプ> #  ※オッズの数字は、左から隊列の前です。 # @前ほど狙われやすいタイプ #  ・オッズ設定(並び順を使う場合のみ。) POSITION_ODDS = [4, 3, 2, 1] # A狙われやすさが均等なタイプ #  ・オッズ設定 EQUAL_ODDS = [1, 1, 1, 1] #  ・Aタイプに設定するスキルのID INDIRECT_SKILL_ID_RANGE = [9..12] # 例)IDが9〜12のスキル # B後ろほど狙われやすいタイプ #  ・オッズ設定(並び順を使う場合のみ。) REVERSE_ODDS = [1, 2, 3, 4] #  ・Bタイプに設定するスキルのID BACK_SNIPE_SKILL_ID_RANGE = [4..6,15,16] # 例)IDが4〜6と15と16のスキル # ※ちなみに、上記A・Bの2つのIDが重なった場合、Bが有効です。 # ***カスタマイズ項目ここまで*** end #============================================================================== # ■ Game_BattleAction #------------------------------------------------------------------------------ #  戦闘行動を扱うクラスです。このクラスは Game_Battler クラスの内部で使用され # ます。 #============================================================================== class Game_BattleAction #-------------------------------------------------------------------------- # ● ランダムターゲット(エネミー) #-------------------------------------------------------------------------- # Aの場合の敵のターゲット決定方式の決定 def decide_indirect_random_target if for_friend? target = friends_unit.random_target elsif for_dead_friend? target = friends_unit.random_dead_target else target = opponents_unit.indirect_random_target end if target == nil clear else @target_index = target.index end end # Bの場合の敵のターゲット決定方式の決定 def decide_back_snipe_random_target if for_friend? target = friends_unit.random_target elsif for_dead_friend? target = friends_unit.random_dead_target else target = opponents_unit.back_snipe_random_target end if target == nil clear else @target_index = target.index end end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 狙われやすさの取得 #-------------------------------------------------------------------------- # 通常のオッズ if CHIRI::LINE_UP_TARGET def odds return CHIRI::POSITION_ODDS[self.index] end end # Aタイプのオッズ設定 def another_odds return CHIRI::EQUAL_ODDS[self.index] end # Bタイプのオッズ設定 if CHIRI::LINE_UP_TARGET def reverse_odds return CHIRI::REVERSE_ODDS[self.index] end else def reverse_odds return 1 + self.class.position end end end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  敵キャラを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● target_odds_type = スキルのターゲット種類判定 # 1 = @タイプ。oddsが普通に影響 # 2 = Aタイプ。odds均等 # 3 = Bタイプ。oddsの影響が逆転 #-------------------------------------------------------------------------- # A狙われやすさ均等スキルの配列作成 def indirect_target_skill_list result = [] CHIRI::INDIRECT_SKILL_ID_RANGE.each { |e| if e.is_a?(Range) result |= e.to_a elsif e.is_a?(Integer) result |= [e] end } return result.sort end # B狙われやすさ逆スキルの配列作成 def back_snipe_target_skill_list result = [] CHIRI::BACK_SNIPE_SKILL_ID_RANGE.each { |e| if e.is_a?(Range) result |= e.to_a elsif e.is_a?(Integer) result |= [e] end } return result.sort end # エネミーの使用スキルはAに当てはまるか def indirect_target_skill for i in 0..indirect_target_skill_list.size return true if indirect_target_skill_list[i] == action.skill_id end return false end # エネミーの使用スキルはBに当てはまるか def back_snipe_target_skill for i in 0..back_snipe_target_skill_list.size return true if back_snipe_target_skill_list[i] == action.skill_id end return false end # スキルのターゲット種類判定 def target_odds_type if action.kind == 1 return 3 if back_snipe_target_skill return 2 if indirect_target_skill else return 1 end end #-------------------------------------------------------------------------- # ● 戦闘行動の作成(再定義) #-------------------------------------------------------------------------- alias chiri_odds_change_skill_make_action make_action def make_action chiri_odds_change_skill_make_action if target_odds_type == 1 @action.decide_random_target elsif target_odds_type == 2 @action.decide_indirect_random_target elsif target_odds_type == 3 @action.decide_back_snipe_random_target end end end #============================================================================== # ■ Game_Unit #------------------------------------------------------------------------------ #  ユニットを扱うクラスです。このクラスは Game_Party クラスと Game_Troop クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Unit #-------------------------------------------------------------------------- # ● ターゲットのランダムな決定(狙われやすさ均等&逆) #-------------------------------------------------------------------------- def indirect_random_target # A roulette = [] for member in existing_members member.another_odds.times do roulette.push(member) end end return roulette.size > 0 ? roulette[rand(roulette.size)] : nil end def back_snipe_random_target # B roulette = [] for member in existing_members member.reverse_odds.times do roulette.push(member) end end return roulette.size > 0 ? roulette[rand(roulette.size)] : nil end end