#---------------------------------------------------------------------------- # ダメージ吸収 貪藻矢射妥←カスタム by 貪藻矢射妥← # 微妙に使いづらいです・・・多分(をひ) #---------------------------------------------------------------------------- # 原作: ◆ ダメージ吸収 - KGC_AbsorbDamage ◆ # ◇ Last update : 2008/06/07 ◇ # 原作者: TOMY様 # HP: KGC Software # アドレス: http://ytomy.sakura.ne.jp/ # # 改造内容: # ・ダメージ吸収○%の廃止(ダメージ吸収は常に100%) # ・通常攻撃にSP吸収を追加 # ・シフトダメージの実装 # # ※SPダメージと併用することで以下のスキルを作成可能です # ・SP吸収 # ・HPにダメージを与え、SPをHPダメージ分回復 # ・SPにダメージを与え、HPをSPダメージ分回復 # # ※なお、ダメージ吸収○%を復活させるかもしれないのでその関数などは残したまま # となっております。 # #============================================================================ # 変更点 # 2009:09:14 # ・通常攻撃のシフトダメージが実装されていなかったミスを修正 # ・通常攻撃でSP吸収を設定してもHPにダメージを与えていたバグを修正 #============================================================================== # ★ カスタマイズ項目 ★ #============================================================================== module KGC # ◆吸収量制限 # true にすると、相手の残存HP/SPを超える量は吸収しない。 ABSDMG_RESTRICT = true # ◆吸収属性 ABSORB = 28 # ◆Recover Inverce属性 RECV_INV = 51 end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ $imported = {} if $imported == nil $imported["AbsorbDamage"] = true #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler attr_accessor :prev_hp, :prev_sp #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_KGC_AbsorbDamage initialize def initialize initialize_KGC_AbsorbDamage @prev_hp = nil @prev_sp = nil end #-------------------------------------------------------------------------- # ● 吸収率取得 # elements : 属性配列 #-------------------------------------------------------------------------- def absorbency(elements) n = 0 elements.each { |element| if $game_special_elements["absorb"] =~ $data_system.elements[element] n += $1.to_i end } return n end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 #-------------------------------------------------------------------------- alias attack_effect_KGC_AbsorbDamage attack_effect def attack_effect(attacker) result = attack_effect_KGC_AbsorbDamage(attacker) # ダメージ判定 #r = absorbency(attacker.element_set) if result && attacker.element_set.include?(KGC::ABSORB)# && r > 0 # 吸収量を算出 if $imported["SPDamage"] && attacker.element_set.include?(KGC::SP_DAMAGE) recover_sp = self.damage.to_i# * r / 100 recover_sp = [recover_sp, self.prev_sp].min if KGC::ABSDMG_RESTRICT # シフトダメージの場合HP/SPの回復を反転する if attacker.element_set.include?(KGC::RECV_INV) attacker.hp += recover_sp attacker.damage = -recover_sp else attacker.sp += recover_sp attacker.damage2 = -recover_sp end self.damage2 = self.damage self.damage = nil else recover_hp = self.damage.to_i# * r / 100 recover_hp = [recover_hp, self.prev_hp].min if KGC::ABSDMG_RESTRICT # シフトダメージの場合HP/SPの回復を反転する if attacker.element_set.include?(KGC::RECV_INV) attacker.sp += recover_hp attacker.damage2 = -recover_hp else attacker.hp += recover_hp attacker.damage = -recover_hp end end end return result end #-------------------------------------------------------------------------- # ● スキルの効果適用 #-------------------------------------------------------------------------- alias skill_effect_KGC_AbsorbDamage skill_effect def skill_effect(user, skill) result = skill_effect_KGC_AbsorbDamage(user, skill) # ダメージ判定 #r = absorbency(skill.element_set) if result && skill.element_set.include?(KGC::ABSORB)# && r > 0 if $imported["SPDamage"] && self.damage2.is_a?(Numeric) # SP吸収量を算出 recover_sp = self.damage2.to_i# * r / 100 recover_sp = [recover_sp, self.prev_sp].min if KGC::ABSDMG_RESTRICT # シフトダメージの場合HP/SPの回復を反転する if skill.element_set.include?(KGC::RECV_INV) user.hp += recover_sp user.damage = -recover_sp else user.sp += recover_sp user.damage2 = -recover_sp end end if self.damage.is_a?(Numeric) # HP吸収量を算出 recover_hp = self.damage.to_i# * r / 100 recover_hp = [recover_hp, self.prev_hp].min if KGC::ABSDMG_RESTRICT # シフトダメージの場合HP/SPの回復を反転する if skill.element_set.include?(KGC::RECV_INV) user.sp += recover_hp user.damage2 = -recover_hp else user.hp += recover_hp user.damage = -recover_hp end end end return result end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Battle (分割定義 4) #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias update_phase4_step2_KGC_AbsorbDamage update_phase4_step2 def update_phase4_step2 # 元のHPを保存 ($game_party.actors + $game_troop.enemies).each { |battler| battler.prev_hp = battler.hp battler.prev_sp = battler.sp } update_phase4_step2_KGC_AbsorbDamage end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias update_phase4_step5_KGC_AbsorbDamage update_phase4_step5 def update_phase4_step5 update_phase4_step5_KGC_AbsorbDamage # 行動者もダメージ表示 @active_battler.damage_pop |= (@active_battler.damage != nil && @active_battler.damage != "Miss") || ($imported["SPDamage"] && @active_battler.damage2 != nil) end end |