#---------------------------------------------------------------------------- # スリップダメージ改造 By 貪藻矢射妥← #---------------------------------------------------------------------------- # 原作: ▼▲▼ XRXS17. スリップダメージ防御/効果量詳細化 ver.2 ▼▲▼ built101021 # 原作者: 森穂様、XRXS.様 # HP: 小さな本屋 # アドレス: http://xrxs.at-ninja.jp/ # # 必須ライブラリ # XRXS. 装備属性取得機構 # # 改造内容: # (・マップでのスリップダメージ(回復)ができるように改良) # ・SPのスリップダメージも設定できるように改良 #============================================================================== # 更新っぽいもの # 2007:02:13 # ・スリップダメージ防御/効果量詳細化 ver.2に対応(というかそれを改造) # ・ややこしかったマップでのスリップダメージの設定を簡略化(と、いうか省略化) # # 2007:02:15 # ・微修正 # # 2007:04:23 # ・SPスリップ回復のみを設定するとSPスリップダメージになるバグを修正 # # 2012:03:03 # ・スリップダメージ用文字列を直値から定数に変更 # # 2015:10:01 # ・VXA風Sound対応 #============================================================================== # --- XRXS. スリップダメージ詳細化 --- #============================================================================== module XRXS17 HP_SLIP_WD = "HPスリップ" SP_SLIP_WD = "SPスリップ" #-------------------------------------------------------------------------- # ○ 指定バトラーのスリップダメージの効果量の取得 #-------------------------------------------------------------------------- def self.slip_amount(battler) # 数値の初期化 slip_damage_HP = 0 slip_damage_SP = 0 slip_damage_H_Val = 0 slip_damage_S_Val = 0 # バトラーのステートを取得 for state_id in battler.states # ステートの取得 state = $data_states[state_id] # スリップダメージ有りの場合 if state.slip_damage # そのステートが持っているスリップダメージの # LvプラスステートまたはLvマイナスステートを判定。 for j in state.plus_state_set # プラスステートの取得 plus_state = $data_states[j] if plus_state != nil if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/ slip_damage_HP += $1.to_i end if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/ slip_damage_SP += $1.to_i end if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/ slip_damage_H_Val += $1.to_i end if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/ slip_damage_S_Val += $1.to_i end end end for j in state.minus_state_set # マイナスステートの取得 minus_state = $data_states[j] if minus_state != nil if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/ slip_damage_HP -= $1.to_i end if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/ slip_damage_SP -= $1.to_i end if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/ slip_damage_H_Val -= $1.to_i end if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/ slip_damage_S_Val -= $1.to_i end end end end end # スリップの設定を特にしなかった場合デフォルトのHPスリップダメージ10%に設定する if slip_damage_HP == 0 && slip_damage_H_Val == 0 && slip_damage_SP == 0 && slip_damage_S_Val slip_damage_HP = 10 else # ダメージを計算 damage = battler.maxhp * slip_damage_HP / 100 + slip_damage_H_Val damage2 = battler.maxsp * slip_damage_SP / 100 + slip_damage_S_Val return damage, damage2 end end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :states # ステート attr_accessor :damage # HPダメージ値 attr_accessor :damage2 # SPダメージ値 #-------------------------------------------------------------------------- # ● スリップダメージの効果適用 [条件付再定義] #-------------------------------------------------------------------------- alias xrxs17_slip_damage_effect slip_damage_effect def slip_damage_effect # スリップ効果量の取得 slip_damage = XRXS17.slip_amount(self) # スリップダメージが指定されていなかった場合 if slip_damage[0] == 0 && slip_damage[1] == 0 return xrxs17_slip_damage_effect else # ダメージを設定 self.damage = slip_damage[0] self.damage2 = slip_damage[1] # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end if self.damage2.abs > 0 amp = [self.damage2.abs * 15 / 100, 1].max self.damage2 += rand(amp+1) + rand(amp+1) - amp end # HP&SP からダメージを減算 if self.damage != 0 self.hp -= self.damage end if self.damage2 != 0 self.sp -= self.damage2 end # メソッド終了 return true end end =begin #-------------------------------------------------------------------------- # ● ステート [スリップダメージ] 判定 #-------------------------------------------------------------------------- alias xrxs17_slip_damage? slip_damage? def slip_damage? if @xrxs17_minus_slip_check_ban # スリップ効果量の取得 slip_damage = XRXS17.slip_amount(self) # HPが減少しないスリップタメージの場合 if slip_damage[0] <= 0# || slip_damage[1] <= 0 return false end end # 呼び戻す return xrxs17_slip_damage? end #-------------------------------------------------------------------------- # ○ 回復スリップをスリップダメージ判定から一時的に除外 #-------------------------------------------------------------------------- def xrxs17_minus_slip_check_ban=(b) @xrxs17_minus_slip_check_ban = b end =end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :actors # アクター attr_reader :states # ステート #-------------------------------------------------------------------------- # ● スリップダメージチェック (マップ用) #-------------------------------------------------------------------------- include BM alias xrxs17_check_map_slip_damage check_map_slip_damage def check_map_slip_damage for actor in @actors if actor.hp > 0 and actor.slip_damage? # 初期化 slip_damage = XRXS17.slip_amount(actor) #HPのスリップダメージを実行 actor.hp -= slip_damage[0] if slip_damage[0] > 0 if actor.hp == 0 Sound.play_actor_collapse end $game_screen.start_flash(Color.new(255, 0, 0, HARF8BIT), 4) $game_temp.gameover = $game_party.all_dead? end #SPのスリップダメージを実行 actor.sp -= slip_damage[1] end end end end |