#============================================================================== # ■ RGSS3 ダメージリミット Ver2.01 by 星潟 #------------------------------------------------------------------------------ # スキルやアイテムによるダメージを個別に制限します。 # この効果によるダメージ修正は防御効果の計算の部位で行われます。 # つまり、使用効果などには効果が及びませんので注意して下さい。 # # スキル設定例(メモ欄) # # このスキルによるHPダメージは999が限界値となります。 # # # このスキルによるMPダメージは99が限界値となります。 # # ステート・装備・アクター・職業・エネミー設定例(メモ欄) # # HPダメージ限界値を5%増加させます。 # # # HPダメージ限界値を30増加させます。 # # # HPダメージ限界値を使用者の運の値分増加させます。 # # # MPダメージ限界値を3%増加させます。 # # # MPダメージ限界値を15増加させます。 #------------------------------------------------------------------------------ # Ver1.01 防御の効果がなくなる不具合を修正しました。 # Ver1.02 負の値を返す時、正常に動作しない不具合を修正しました。 # また、データのキャッシュ化により、処理を大幅に軽量化しました。 # Ver2.00 一部処理でスクリプト文による計算が可能になりました。 #============================================================================== module D_LIMIT #このスキルのHPダメージ限界値を指定する為の設定用ワードを指定。 HPDL_W = "HPDL" #このスキルのMPダメージ限界値を指定する為の設定用ワードを指定。 MPDL_W = "MPDL" #HPダメージ限界値を割合増加(数値%分増加)させる為の #特徴を有する項目のメモ欄設定用ワードを指定。 HPPE_W = "HPDL割合増加" #HPダメージ限界値を増加(数値分増加)させる為の #特徴を有する項目のメモ欄設定用ワードを指定。 HPPL_W = "HPDL増加" #MPダメージ限界値を割合増加(数値%分増加)させる為の #特徴を有する項目のメモ欄設定用ワードを指定。 MPPE_W = "MPDL割合増加" #MPダメージ限界値を増加(数値分増加)させる為の #特徴を有する項目のメモ欄設定用ワードを指定。 MPPL_W = "MPDL増加" #何も指定しない場合の最大HPダメージを指定。 #nilで無制限・文字列による記述でスクリプトとして処理 HPDL = "999 + user.luk" #何も指定しない場合の最大MPダメージを指定。 #nilで無制限・文字列による記述でスクリプトとして処理 MPDL = "999 + user.luk" #限界値変更後の最大HPダメージを指定。 #nilで無制限・入力する場合は数字限定。 MHPDL = nil #限界値変更後の最大MPダメージを指定。 #nilで無制限・入力する場合は数字限定。 MMPDL = nil #パッシブスキル効果を有効にするかを指定。 #(trueの時、覚えているスキルを参照。スキル設定はステート等と同じ。 # スキルに設定しない場合はfalseにした方が軽いと思います) S_VAL = true end class RPG::UsableItem < RPG::BaseItem def hpdl @hpdl ||= /<#{D_LIMIT::HPDL_W}[::](\S+)>/ =~ note ? $1.to_s : "" end def mpdl @mpdl ||= /<#{D_LIMIT::MPDL_W}[::](\S+)>/ =~ note ? $1.to_s : "" end end class RPG::BaseItem def hppe @hppe ||= /<#{D_LIMIT::HPPE_W}[::](\S+)>/ =~ note ? $1.to_s : "" end def hppl @hppl ||= /<#{D_LIMIT::HPPL_W}[::](\S+)>/ =~ note ? $1.to_s : "" end def mppe @mppe ||= /<#{D_LIMIT::MPPE_W}[::](\S+)>/ =~ note ? $1.to_s : "" end def mppl @mppl ||= /<#{D_LIMIT::MPPL_W}[::](\S+)>/ =~ note ? $1.to_s : "" end end class Game_Battler #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_damage_limit initialize def initialize initialize_damage_limit @user_data = nil @user_item = nil end #-------------------------------------------------------------------------- # ダメージ計算 #-------------------------------------------------------------------------- alias make_damage_value_damage_limit make_damage_value def make_damage_value(user, item) @user_data = user @user_item = item make_damage_value_damage_limit(user, item) @user_data = nil @user_item = nil end #-------------------------------------------------------------------------- # 防御修正の適用 #-------------------------------------------------------------------------- alias apply_guard_damage_limit apply_guard def apply_guard(damage) damage = apply_guard_damage_limit(damage) damage = damage_limit(@user_data, @user_item, damage) damage end #-------------------------------------------------------------------------- # ダメージリミット #-------------------------------------------------------------------------- def damage_limit(user, item, damage) return damage if damage <= 0 if item.damage.to_hp? hpdl = item.damage.to_hp? && !item.hpdl.empty? ? eval(item.hpdl.to_s) : nil hpdl = eval(D_LIMIT::HPDL) if D_LIMIT::HPDL && !hpdl if hpdl != nil hpdl = hpdl_plus(user, hpdl) damage = hpdl if damage > hpdl end damage = D_LIMIT::MHPDL if D_LIMIT::MHPDL && damage > D_LIMIT::MHPDL end if item.damage.to_mp? mpdl = item.damage.to_mp? && !item.mpdl.empty? ? eval(item.mpdl.to_s) : nil mpdl = eval(D_LIMIT::MPDL) if D_LIMIT::MPDL && !mpdl if mpdl != nil mpdl = mpdl_plus(user, mpdl) damage = mpdl if damage > mpdl end damage = D_LIMIT::MMPDL if D_LIMIT::MMPDL && damage > D_LIMIT::MMPDL end damage end #-------------------------------------------------------------------------- # HPダメージリミット変更 #-------------------------------------------------------------------------- def hpdl_plus(user, data) pec = 100 num = 0 user.feature_objects.each do |i| pec += eval(i.hppe) if !i.hppe.empty? num += eval(i.hppl) if !i.hppl.empty? end if user.actor? && D_LIMIT::S_VAL == true && user.skills.size != 0 user.skills.each do |skill| next if skill == nil pec += eval(skill.hppe) if !skill.hppe.empty? num += eval(skill.hppl) if !skill.hppe.empty? end end data += num data *= pec data /= 100 data end #-------------------------------------------------------------------------- # MPダメージリミット変更 #-------------------------------------------------------------------------- def mpdl_plus(user, data) pec = 100 num = 0 user.feature_objects.each do |i| pec += eval(i.mppe) if !i.mppe.empty? num += eval(i.mppl) if !i.mppl.empty? end if user.actor? && D_LIMIT::S_VAL == true && user.skills.size != 0 user.skills.each do |skill| next if skill == nil pec += eval(skill.mppe) if !skill.mppe.empty? num += eval(skill.mppl) if !skill.mppl.empty? end end data += num data *= pec data /= 100 data end end