#============================================================================== # ■ RGSS3 フェイタルミラー Ver2.01 by 星潟 #------------------------------------------------------------------------------ # 味方がフェイタルミラー状態の場合、同士討ちさせます。 # # 対象→味方単体×n回 # フェイタルミラー状態の味方単体にn回発動。 # # 対象→味方ランダム×n回(デフォルトでは存在しませんが) # フェイタルミラー状態の味方をn回選んで発動。 # # 対象→味方全体×n回 # フェイタルミラー状態でない味方も含め味方全体にn回発動。 # # 対象→使用者×n回 # 使用者のみにn回発動。 # # 対象→敵単体×n回 # フェイタルミラー状態の味方単体にn回発動。 # # 対象→敵ランダム×n回 # フェイタルミラー状態の味方をn回選んで発動。 # # 対象→敵全体×n回 # フェイタルミラー状態でない味方も含め味方全体にn回発動。 #============================================================================== # ★フェイタルミラー特徴設定例 #------------------------------------------------------------------------------ # <フェイタルミラー:$game_variables[1]> # 自分を含む味方キャラクターの攻撃は、変数1の値%の確率で # このキャラクターへの攻撃に変化します。 #------------------------------------------------------------------------------ # <フェイタルミラー:100> # 自分を含む味方キャラクターの攻撃は、100%の確率で # このキャラクターへの攻撃に変化します。 #============================================================================== # ★フェイタルミラー無効特徴設定例 #------------------------------------------------------------------------------ # <フェイタルミラー無効:self.tp> # このキャラクターのアイテム/スキルは自らのTPの値%の確率で # フェイタルミラー特徴の効果を無視します。 #------------------------------------------------------------------------------ # <フェイタルミラー無効:100> # このキャラクターのアイテム/スキルは100%の確率で # フェイタルミラー特徴の効果を無視します。 #============================================================================== # ★フェイタルミラー無効アイテム/スキル設定例 #------------------------------------------------------------------------------ # <フェイタルミラー無効:self.mp_rate*100> # このアイテム/スキルは自らのMP割合分の値の確率で # フェイタルミラー特徴の効果を無視します。 #------------------------------------------------------------------------------ # <フェイタルミラー無効:100> # このアイテム/スキルは100%の確率で # フェイタルミラー特徴の効果を無視します。 #============================================================================== # Ver2.00 # - 注釈を大幅加筆しました。 # - 処理形式を全面的に見直し、キャッシュ化による軽量化と競合対策を施しました。 # - フェイタルミラーの判定率にスクリプトを用いる事が可能になりました。 # - フェイタルミラー無効特徴が設定できるようになりました。 # - アイテム/スキルのフェイタルミラー無効率が設定できるようになりました。 # この確率は特徴と合算されます。 # - 味方への行動に対してもフェイタルミラーの判定が行われるようになりました。 #============================================================================== module F_MIRROR #フェイタルミラー設定用キーワードを指定。 WORD1 = "フェイタルミラー" #フェイタルミラー無効特徴設定用キーワードを指定。 WORD2 = "フェイタルミラー無効" #フェイタルミラー無効スキル設定用キーワードを指定。 WORD3 = "フェイタルミラー無効" end class Game_Temp attr_accessor :fatal_mirror_array end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 敵ユニットを取得 #-------------------------------------------------------------------------- alias opponents_unit_fatal_mirror opponents_unit def opponents_unit #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合は味方ユニットを返す。 $game_temp.fatal_mirror_array ? friends_unit : opponents_unit_fatal_mirror end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 敵ユニットを取得 #-------------------------------------------------------------------------- alias opponents_unit_fatal_mirror opponents_unit def opponents_unit #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合は味方ユニットを返す。 $game_temp.fatal_mirror_array ? friends_unit : opponents_unit_fatal_mirror end end class Game_Unit #-------------------------------------------------------------------------- # ターゲットのランダムな決定 #-------------------------------------------------------------------------- alias random_target_fatal_mirror random_target def random_target #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合はフェイタルミラー処理を実行する。 $game_temp.fatal_mirror_array ? f_m_random_target($game_temp.fatal_mirror_array) : random_target_fatal_mirror end #-------------------------------------------------------------------------- # ターゲットのランダムな決定(戦闘不能) #-------------------------------------------------------------------------- alias random_dead_target_fatal_mirror random_dead_target def random_dead_target #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合はフェイタルミラー処理を実行する。 $game_temp.fatal_mirror_array ? f_m_random_target($game_temp.fatal_mirror_array) : random_dead_target_fatal_mirror end #-------------------------------------------------------------------------- # ターゲットのスムーズな決定 #-------------------------------------------------------------------------- alias smooth_target_fatal_mirror smooth_target def smooth_target(index) #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合はフェイタルミラー処理を実行する。 $game_temp.fatal_mirror_array ? f_m_random_target($game_temp.fatal_mirror_array) : smooth_target_fatal_mirror(index) end #-------------------------------------------------------------------------- # ターゲットのスムーズな決定(戦闘不能) #-------------------------------------------------------------------------- alias smooth_dead_target_fatal_mirror smooth_dead_target def smooth_dead_target(index) #フェイタルミラー用配列が存在しない場合は本来の処理を実行し #そうでない場合はフェイタルミラー処理を実行する。 $game_temp.fatal_mirror_array ? f_m_random_target($game_temp.fatal_mirror_array) : smooth_dead_target_fatal_mirror(index) end #-------------------------------------------------------------------------- # フェイタルミラーターゲットの決定 #-------------------------------------------------------------------------- def f_m_random_target(fmrt) #通常のランダムターゲットの対象を #引数のターゲットに差し替えた物を実行。 tgr_rand = rand * tgr_sum fmrt.each {|member| tgr_rand -= member.tgr return member if tgr_rand < 0} fmrt[0] end end class Game_Action #-------------------------------------------------------------------------- # ターゲットの配列作成 #-------------------------------------------------------------------------- alias make_targets_f_mirror make_targets def make_targets #アイテム/スキルがフェイタルミラー無効でなく #使用者のみを対象とする物ではない場合は分岐。 if !item.for_user? && !@subject.unti_fm?(item) #配列を作成。 f_m_target = [] #フェイタルミラー状態の味方を配列に加える。 @subject.friends_unit.members.each {|members| f_m_target.push(members) if members.f_mirror?} #フェイタルミラー状態の味方が存在する場合のみ分岐。 $game_temp.fatal_mirror_array = f_m_target if f_m_target.size > 0 end #本来の処理を実行。 array = make_targets_f_mirror #フェイタルミラー用の配列を消去する。 $game_temp.fatal_mirror_array = nil array end end class Game_BattlerBase #-------------------------------------------------------------------------- # フェイタルミラー判定 #-------------------------------------------------------------------------- def f_mirror? #特徴別に判定率を元に判定し、一つでも該当した場合はtrueを返す。 #どれも該当しない場合はfalseを返す。 feature_objects.any? {|feature| eval(feature.f_mirror_rate) > rand(100)} end #-------------------------------------------------------------------------- # フェイタルミラー無効判定 #-------------------------------------------------------------------------- def unti_fm?(item) #特徴別にフェイタルミラー無効率を加える。 data = feature_objects.inject(0) {|result, feature| result += eval(feature.unti_fm)} #アイテム/スキルのフェイタルミラー無効率を加える。 data += eval(item.unti_fm_is) #フェイタルミラー無効率で判定し、結果を返す。 data > rand(100) ? true : false end end class RPG::BaseItem #-------------------------------------------------------------------------- # フェイタルミラー判定率 #-------------------------------------------------------------------------- def f_mirror_rate #キャッシュが存在する場合はキャッシュを返す。 @f_mirror_rate ||= /<#{F_MIRROR::WORD1}[::](\S+)>/ =~ note ? $1.to_s : "0" end #-------------------------------------------------------------------------- # 特徴のフェイタルミラー無効判定率 #-------------------------------------------------------------------------- def unti_fm #キャッシュが存在する場合はキャッシュを返す。 @unti_fm ||= /<#{F_MIRROR::WORD2}[::](\S+)>/ =~ note ? $1.to_s : "0" end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # アイテム/スキルのフェイタルミラー無効判定率 #-------------------------------------------------------------------------- def unti_fm_is #キャッシュが存在する場合はキャッシュを返す。 @unti_fm_is ||= /<#{F_MIRROR::WORD3}[::](\S+)>/ =~ note ? $1.to_s : "0" end end