# ▼▲▼ No17. 詳細設定、スリップ防御/効果量 ▼▲▼ # # update 2005/ 4/10 # #============================================================================== # --- スリップダメージ詳細設定 --- #============================================================================== module XRXS17 #-------------------------------------------------------------------------- # ○ 指定バトラーのスリップダメージの効果量の取得 #-------------------------------------------------------------------------- def self.slip_amount(battler) # 数値の初期化 slip_damage_percent = 0 slip_damage_plus = 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 =~ /^スリップ([0-9]+)(%|%)/ slip_damage_percent += $1.to_i elsif plus_state.name =~ /^スリップ([0-9]+)$/ slip_damage_plus += $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 =~ /^スリップ([0-9]+)(%|%)/ slip_damage_percent -= $1.to_i elsif minus_state.name =~ /^スリップ([0-9]+)$/ slip_damage_plus -= $1.to_i end end end end end # 防具がスリップ防御がある場合を判定 if self.is_a?(Game_Actor) for i in self.armor_ids # 防具の取得 armor = $data_armors[i] # 防具が無い場合は次へ next if armor == nil # 防御属性を検索 for j in armor.guard_state_set if $data_states[j] != nil if $data_states[j].name =~ /^スリップ([0-9]+)(%|%)/ if slip_damage_percent > 0 slip_damage_percent = [slip_damage_percent - $1.to_i, 0].max end end if $data_states[j].name =~ /^スリップ([0-9]+)$/ if slip_damage_plus > 0 slip_damage_plus = [slip_damage_plus - $1.to_i, 0].max end end end end end end # ダメージを計算 damage = battler.maxhp * slip_damage_percent / 100 + slip_damage_plus return damage end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● スリップダメージの効果適用 [条件付再定義] #-------------------------------------------------------------------------- alias xrxs17_slip_damage_effect slip_damage_effect def slip_damage_effect # スリップ効果量の取得 slip_damage = XRXS17.slip_amount(self) # スリップダメージが指定されていなかった場合 if slip_damage == 0 return xrxs17_slip_damage_effect else # ダメージを設定 self.damage = slip_damage # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # HP からダメージを減算 self.hp -= self.damage # メソッド終了 return true end end #-------------------------------------------------------------------------- # ● ステート [スリップダメージ] 判定 #-------------------------------------------------------------------------- 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 return false end end # 呼び戻す return xrxs17_slip_damage? end #-------------------------------------------------------------------------- # ○ 回復スリップをスリップダメージ判定から一時的に除外 #-------------------------------------------------------------------------- def xrxs17_minus_slip_check_ban=(b) @xrxs17_minus_slip_check_ban = b end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● スリップダメージチェック (マップ用) #-------------------------------------------------------------------------- alias xrxs17_check_map_slip_damage check_map_slip_damage def check_map_slip_damage # 回復スリップをスリップダメージ判定から一時的に除外 @actors.each {|actor| actor.xrxs17_minus_slip_check_ban = true} # 呼び戻す xrxs17_check_map_slip_damage # 回復スリップをスリップダメージ判定へ復帰 @actors.each {|actor| actor.xrxs17_minus_slip_check_ban = nil} end end