#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆割合ダメ?ジ - KGC_RateDamage◆
#_/----------------------------------------------------------------------------
#_/ 割合ダメ?ジ機能を追加します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$imported = {} if $imported == nil
$imported["RateDamage"] = true
if $game_special_elements == nil
$game_special_elements = {}
$data_system = load_data("Data/System.rxdata")
end
# 割合ダメ?ジ?性
$game_special_elements["rate_damage"] = /(MAXHP|HP|MAXSP|SP)割合ダメ?ジ/i
module KGC
#--------------------------------------------------------------------------
# ● ダメ?ジ割合計算
# skill : スキル
#--------------------------------------------------------------------------
def self.check_damage_rate(skill)
skill.element_set.compact.each { |element|
element_name = $data_system.elements[element]
# 割合ダメ?ジ?性を持っている場合
if $game_special_elements["rate_damage"] =~ element_name
# 割合ダメ?ジの設定を返す
return [$1.upcase, element]
end
}
# 割合ダメ?ジではない場合は nil を返す
return nil
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● スキルの?果適用
#--------------------------------------------------------------------------
alias skill_effect_KGC_RateDamage skill_effect
def skill_effect(user, skill)
# 無敵判定
if $imported["Invincible"] && self.invincible?(skill)
self.damage = "Miss"
self.critical = false
return false
end
# 割合ダメ?ジ判定
rate_damage = KGC.check_damage_rate(skill)
# 割合ダメ?ジではない場合
if rate_damage == nil
# 元の?理を?行
return skill_effect_KGC_RateDamage(user, skill)
end
# クリティカルフラグをクリア
self.critical = false
# スキルの?果範?が HP 1 以上の味方で、自分の HP が 0、
# またはスキルの?果範?が HP 0 の味方で、自分の HP が 1 以上の場合
if ((skill.scope == 3 || skill.scope == 4) && self.hp == 0) ||
((skill.scope == 5 || skill.scope == 6) && self.hp >= 1)
# メソッド終了
return false
end
# 有?フラグをクリア
@effective = false
# コモンイベント ID が有?の場合は有?フラグをセット
@effective |= skill.common_event_id > 0
# 第一命中判定
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不確?なスキルの場合は有?フラグをセット
@effective |= hit < 100
# 命中の場合
if hit_result
# 第二命中判定
eva = 8 * self.agi / user.dex + self.eva
hit = skill.power < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不確?なスキルの場合は有?フラグをセット
@effective |= hit < 100
end
# 命中の場合
if hit_result
case rate_damage[0]
when "MAXHP" # 最大HPの場合
self.damage = self.maxhp * skill.power / 100
# 基本ダメ?ジ値を保存
@base_damage = self.damage
# ?性有?度を適用
self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
hp_dmg = self.damage
when "HP" # 現在HPの場合
self.damage = self.hp * skill.power / 100
@base_damage = self.damage
self.damage = self.damage * self.element_rate(rate_damage[1]) / 100
hp_dmg = self.damage
when "MAXSP" # 最大SPの場合
sp_dmg = self.maxsp * skill.power / 100
@base_damage = sp_dmg
sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
self.sp_damage = sp_dmg if $imported["SPDamage"]
self.damage = ""
when "SP" # 現在SPの場合
sp_dmg = self.sp * skill.power / 100
@base_damage = sp_dmg
sp_dmg = sp_dmg * self.element_rate(rate_damage[1]) / 100
self.sp_damage = sp_dmg if $imported["SPDamage"]
self.damage = ""
end
# HP/SPを減算
self.hp -= hp_dmg if hp_dmg != nil
self.sp -= sp_dmg if sp_dmg != nil
# ステ?ト?化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
return true
end
return false
end
end
http://avangs.info/rgss_xp/252656에서 가져온건데, 제가 잘못 이해한건지 8%로 맞춰도 데미지가 체력이 92만인 적에게 100밖에 안 들어가네요.(적은 방어력이 1입니다.)
새벽에 이거 맞추려고 몇 시간 보냈는데, 이해를 못해서 질문 올려봅니다.