#============================================================================== # ■ RGSS3 一定割合ダメージ共有特徴 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 戦闘中のみ、ダメージを受けた際、相手にもダメージを与える特徴を作成します。 # HP版とMP版をそれぞれ利用できます。 # なお、ダメージが負の値(回復)の際には効果を発揮しません。 #============================================================================== # 特徴(アクター/エネミー/ステート/装備品)設定例 #============================================================================== # # 25%の確率で受けたHPダメージの50%分のHPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 50%の確率で受けたMPダメージの100%分のMPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 65%の確率で受けたHPダメージの75%分のMPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 100%の確率で受けたMPダメージの25%分のHPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 25%の確率で受けたHPダメージの # 攻撃を受けた側の攻撃力の値%分のHPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 攻撃した側の防御力%の確率で # 受けたMPダメージの100%分のMPダメージを相手に返す。 #------------------------------------------------------------------------------ # # 100から攻撃した側の魔法防御を引いた値%の確率で受けたHPダメージの # 攻撃を受けた側の魔法力の値%分のMPダメージを相手に返す。 #------------------------------------------------------------------------------ # <ダメージ共有無効特徴:100> # 100%の確率で、相手のダメージ共有効果を無効化します。 #------------------------------------------------------------------------------ # <ダメージ共有無効特徴:a.mat-b.mdf> # 自分の魔法力から相手の魔法防御を引いた値%の確率で # 相手のダメージ共有効果を無効化します。 #============================================================================== # アイテム/スキル設定例 #============================================================================== # <ダメージ共有無効特徴:50> # 100%の確率で、相手のダメージ共有効果を無効化します。 #------------------------------------------------------------------------------ # <ダメージ共有無効特徴:a.mat-b.mdf> # 自分の魔法力から相手の魔法防御を引いた値%の確率で # 相手のダメージ共有効果を無効化します。 #============================================================================== # ももまるLabs様のXPスタイルバトルを使用されている方は # 他サイト対応素材ページから一定割合ダメージ共有特徴XPSも併せて使用してください。 #============================================================================== # Ver1.01 処理を効率化しました。 # ダメージ共有を一定確率で無効化する特徴と # ダメージ共有を一定確率で無効化するアイテム/スキルを # 作成できるようにしました。 # 回復効果まで共有していた不具合を修正しました。 # また、計算式を以て処理を行えるように変更しました。 #============================================================================== module PAINBOND #HPダメージをHPダメージで返す場合のキーワードを設定します。 WORD1 = "HPDB" #MPダメージをMPダメージで返す場合のキーワードを設定します。 WORD2 = "MPDB" #HPダメージをMPダメージで返す場合のキーワードを設定します。 WORD3 = "HPDBR" #MPダメージをHPダメージで返す場合のキーワードを設定します。 WORD4 = "MPDBR" #共有無効スキル設定用のキーワードを設定します。 WORD5 = "ダメージ共有無効" #共有無効特徴設定用のキーワードを設定します。 WORD6 = "ダメージ共有無効特徴" #使用者と対象者が同じ場合に共有効果を有効にするかどうかを指定。 #trueで有効、falseで無効。 SELF_FLAG = false end module Vocab #アクターがHPダメージを返された場合のメッセージを設定します。 ActorHPB = "呪いにより%sは %s のダメージを受けた!" #エネミーがHPダメージを返された場合のメッセージを設定します。 EnemyHPB = "呪いにより%sは %s のダメージを受けた!" #アクターがMPダメージを返された場合のメッセージを設定します。 ActorMPB = "呪いにより%sの%sが %s 減った!" #エネミーがMPダメージを返された場合のメッセージを設定します。 EnemyMPB = "呪いにより%sの%sが %s 減った!" end class Game_Temp attr_accessor :pbd_user attr_accessor :pbd_target end class Game_ActionResult attr_reader :hpb_star attr_reader :mpb_star #-------------------------------------------------------------------------- # ダメージ値のクリア #-------------------------------------------------------------------------- alias clear_damage_values_painbond clear_damage_values def clear_damage_values #本来の処理を実行。 clear_damage_values_painbond #ダメージ共有用変数の初期化。 @hpb_star = 0 @mpb_star = 0 end #-------------------------------------------------------------------------- # ダメージの作成 #-------------------------------------------------------------------------- def make_pb_damage #使用失敗時は処理を中断する。 return if !@success #ダメージ共有の値を作成。 make_pb_hpdamage(@hp_damage) make_pb_mpdamage(@mp_damage) #値を整数にする。 @hpb_star = @hpb_star.to_i @mpb_star = @mpb_star.to_i end #-------------------------------------------------------------------------- # HP ダメージ共有の計算 #-------------------------------------------------------------------------- def make_pb_hpdamage(damage) #ダメージ量が0以下の時は処理を行わない。 return unless damage > 0 #HPダメージからデータを作成する。 @hpb_star += damage * @battler.hpb_star / 100 @mpb_star += damage * @battler.hpbr_star / 100 end #-------------------------------------------------------------------------- # MP ダメージ共有の計算 #-------------------------------------------------------------------------- def make_pb_mpdamage(damage) #ダメージ量が0以下の時は処理を行わない。 return unless damage > 0 #MPダメージからデータを作成する。 @mpb_star += damage * @battler.mpb_star / 100 @hpb_star += damage * @battler.mpbr_star / 100 end #-------------------------------------------------------------------------- # HP ダメージ共有の文章を取得 #-------------------------------------------------------------------------- def hpb_text(damage) #フォーマットを取得し、文章を作成する。 fmt = @battler.actor? ? Vocab::ActorHPB : Vocab::EnemyHPB sprintf(fmt, @battler.name, damage) end #-------------------------------------------------------------------------- # MP ダメージ共有の文章を取得 #-------------------------------------------------------------------------- def mpb_text(damage) #フォーマットを取得し、文章を作成する。 fmt = @battler.actor? ? Vocab::ActorMPB : Vocab::EnemyMPB sprintf(fmt, @battler.name, Vocab::mp, damage) end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_painbond item_user_effect def item_user_effect(user, item) @result.make_pb_damage item_user_effect_painbond(user, item) end #-------------------------------------------------------------------------- # ダメージ共有無効発動率を作成 #-------------------------------------------------------------------------- def painbond_break(item) #戦闘中でなければ0を返す。 return 0 unless SceneManager.scene_is?(Scene_Battle) #使用者と対象をそれぞれ取得。 a = self b = $game_temp.pbd_target #アイテム/スキルのダメージ共有無効発動率を取得。 number = eval(item.i_painbond_break) #各特徴のダメージ共有無効率を加算する。 feature_objects.each {|object| number += eval(object.f_painbond_break)} #ダメージ共有無効率を返す。 number end #-------------------------------------------------------------------------- # HPダメージをHPダメージで返す #-------------------------------------------------------------------------- def hpb_star #戦闘中でなければ0を返す。 return 0 unless SceneManager.scene_is?(Scene_Battle) #使用者と対象をそれぞれ取得。 a = self b = $game_temp.pbd_user #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。 return 0 if a == b && !PAINBOND::SELF_FLAG #初期値を0とする。 number = 0 #特徴別にデータを取得し、ダメージ共有効果を判定する。 feature_objects.each {|object| number += eval(object.hpb_star[0]) if eval(object.hpb_star[1]) > rand(100)} #値を返す。 return number end #-------------------------------------------------------------------------- # MPダメージをMPダメージで返す #-------------------------------------------------------------------------- def mpb_star #戦闘中でなければ0を返す。 return 0 unless SceneManager.scene_is?(Scene_Battle) #使用者と対象をそれぞれ取得。 a = self b = $game_temp.pbd_user #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。 return 0 if a == b && !PAINBOND::SELF_FLAG #初期値を0とする。 number = 0 #特徴別にデータを取得し、ダメージ共有効果を判定する。 feature_objects.each {|object| number += eval(object.mpb_star[0]) if eval(object.mpb_star[1]) > rand(100)} #値を返す。 return number end #-------------------------------------------------------------------------- # HPダメージをMPダメージで返す #-------------------------------------------------------------------------- def hpbr_star #戦闘中でなければ0を返す。 return 0 unless SceneManager.scene_is?(Scene_Battle) #使用者と対象をそれぞれ取得。 a = self b = $game_temp.pbd_user #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。 return 0 if a == b && !PAINBOND::SELF_FLAG #初期値を0とする。 number = 0 #特徴別にデータを取得し、ダメージ共有効果を判定する。 feature_objects.each {|object| number += eval(object.hpbr_star[0]) if eval(object.hpbr_star[1]) > rand(100)} #値を返す。 return number end #-------------------------------------------------------------------------- # MPダメージをHPダメージで返す #-------------------------------------------------------------------------- def mpbr_star #戦闘中でなければ0を返す。 return 0 unless SceneManager.scene_is?(Scene_Battle) #使用者と対象をそれぞれ取得。 a = self b = $game_temp.pbd_user #使用者と対象者が同じ場合は処理を行わない場合、それに該当するなら0を返す。 return 0 if a == b && !PAINBOND::SELF_FLAG #初期値を0とする。 number = 0 #特徴別にデータを取得し、ダメージ共有効果を判定する。 feature_objects.each {|object| number += eval(object.mpbr_star[0]) if eval(object.mpbr_star[1]) > rand(100)} #値を返す。 return number end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # スキル/アイテムの効果を適用 #-------------------------------------------------------------------------- alias apply_item_effects_painbond apply_item_effects def apply_item_effects(target, item) $game_temp.pbd_user = @subject $game_temp.pbd_target = target a = @subject b = target #本来の処理を実行。 apply_item_effects_painbond(target, item) #リフレッシュする。 refresh_status #行動主体が存在しないか #行動主体かアイテムのダメージ共有効果無効判定に成功した場合は飛ばす。 if !@subject or @subject.painbond_break(item) > rand(100) $game_temp.pbd_user = nil $game_temp.pbd_target = nil return end #HPダメージ共有効果が有効かつ、HPが0より大きいなら実行する。 if target.result.hpb_star > 0 && @subject.hp > 0 @subject.hp -= target.result.hpb_star refresh_status @log_window.display_hpb(@subject, item, target.result.hpb_star) @log_window.display_added_states(@subject) if @subject.dead? end #MPダメージ共有効果が有効かつ、MPが0より大きいなら実行する。 if target.result.mpb_star > 0 && @subject.mp > 0 @subject.mp -= target.result.mpb_star refresh_status @log_window.display_mpb(@subject, item, target.result.mpb_star) end $game_temp.pbd_user = nil $game_temp.pbd_target = nil end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # HP ダメージ共有表示 #-------------------------------------------------------------------------- def display_hpb(target, item, hpb_star) #ダメージエフェクト実行。 target.perform_damage_effect #メッセージの表示。 add_text(target.result.hpb_text(hpb_star)) #ウェイト wait end #-------------------------------------------------------------------------- # MP ダメージ共有表示 #-------------------------------------------------------------------------- def display_mpb(target, item, mpb_star) #メッセージの表示。 add_text(target.result.mpb_text(mpb_star)) #ウェイト wait end end class RPG::BaseItem #-------------------------------------------------------------------------- # HPダメージをHPダメージで返す #-------------------------------------------------------------------------- def hpb_star #キャッシュが存在する場合はキャッシュを返す。 @hpb_star ||= hmpbr_star_common(PAINBOND::WORD1,0) end #-------------------------------------------------------------------------- # MPダメージをMPダメージで返す #-------------------------------------------------------------------------- def mpb_star #キャッシュが存在する場合はキャッシュを返す。 @mpb_star ||= hmpbr_star_common(PAINBOND::WORD2,0) end #-------------------------------------------------------------------------- # HPダメージをMPダメージで返す #-------------------------------------------------------------------------- def hpbr_star #キャッシュが存在する場合はキャッシュを返す。 @hpbr_star ||= hmpbr_star_common(PAINBOND::WORD3,0) end #-------------------------------------------------------------------------- # MPダメージをHPダメージで返す #-------------------------------------------------------------------------- def mpbr_star #キャッシュが存在する場合はキャッシュを返す。 @mpbr_star ||= hmpbr_star_common(PAINBOND::WORD4,0) end #-------------------------------------------------------------------------- # 特徴のダメージ共有無効確率 #-------------------------------------------------------------------------- def f_painbond_break #キャッシュが存在する場合はキャッシュを返す。 @f_painbond_break ||= hmpbr_star_common(PAINBOND::WORD6,1) end #-------------------------------------------------------------------------- # 共通処理 #-------------------------------------------------------------------------- def hmpbr_star_common(word,type) case type when 0;/<#{word}[::](\S+),(\S+)>/ =~ note ? [$1.to_s,$2.to_s] : ["0","0"] when 1;/<#{word}[::](\S+)>/ =~ note ? $1.to_s : "0" end end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # アイテム/スキルのダメージ共有無効確率 #-------------------------------------------------------------------------- def i_painbond_break #キャッシュが存在する場合はキャッシュを返す。 @i_painbond_break ||= hmpbr_star_common(PAINBOND::WORD5,1) end end