#==============================================================================
# ** Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
def skill_effect(user, skill)
self.critical = false
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
return false
end
effective = false
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 == true
power = skill.power + ((user.atk + 20) * skill.atk_f / 100)
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
rate = 50
rate -= (self.dex / 2 * skill.pdef_f / 200)
rate -= ((self.dex +
self.int)/ 4 * skill.mdef_f / 200)
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (
user.int *
skill.int_f / 100)
self.damage = power * rate / 20
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
if self.damage > 0
if self.guarding?
self.damage /= 2
end
end
if self.damage == 0
dmg1 = (rand(100) < 40)
self.damage = 1 if dmg1
end
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
eva = 8 * self.agi / user.agi + self.eva
hit = self.damage < 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 == true
if
user.is_a?(Game_Actor)
for materia in user.weapon_materia + user.armor1_materia + user.armor2_materia + user.armor3_materia + user.armor4_materia
unless materia.nil?
self.damage += (self.damage * materia.level * 0.2).to_i if self.damage != 0 and materia.type == 'Summon'
end
end
materia_set = user.return_paired_materia
for paired_set in materia_set
materia = paired_set[2]
other_materia = paired_set[3]
if materia.special_effect == 'MP Turbo'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
unless skill.element_set.include?(Materia_Config::Negate_Turbo_ID)
self.damage += (self.damage * materia.level * 0.2).to_i if self.damage != 0
end
end
end
end
end
if materia.special_effect =='Absorb HP'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill and $game_
temp.in_battle
unless skill.element_set.include?(Materia_Config::Negate_Absorb_ID)
if self.damage > 0
dreno = materia.level * 2
hp = (self.damage * dreno / 100).to_i
user.hp += [hp, user.maxhp - hp].min
end
end
end
end
end
end
if materia.special_effect =='Absorb MP'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill and $game_
temp.in_battle
unless skill.element_set.include?(Materia_Config::Negate_Absorb_ID)
if self.damage > 0
dreno = materia.level
sp = (self.damage * dreno / 100).to_i
user.sp += [sp, user.maxsp - sp].min
end
end
end
end
end
end
end
end
if skill.power != 0 and skill.atk_f > 0
remove_states_shock
effective = true
end
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
@state_changed = false
effective |= states_plus(
skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
if skill.power == 0
self.damage = ""
unless @state_changed
self.damage = "Miss"
end
end
else
self.damage = "Miss"
end
unless $game_
temp.in_battle
self.damage = nil
end
return effective
end
#--------------------------------------------------------------------------
def attack_effect(attacker)
self.critical = false
hit_result = (rand(100) < attacker.hit)
if hit_result == true
atk = [20 + attacker.atk - self.pdef / 2, 1].max
str = [40 + attacker.str - self.dex / 2, 1].max
self.damage = atk * str / 20
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
if self.damage == 0
dmg1 = (rand(100) < 40)
self.damage = 1 if dmg1
end
if self.damage > 0
if rand(100) < ((4 * attacker.agi / self.agi) + attacker.critrateplus)
self.damage += ((self.damage * (100 + attacker.critdmgplus)) / 100)
self.critical = true
end
if self.guarding?
self.damage /= 2
end
end
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
eva = 8 * self.agi / attacker.agi + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
if hit_result == true
remove_states_shock
self.hp -= self.damage
@state_changed = false
states_plus(
attacker.plus_state_set)
states_minus(attacker.minus_state_set)
else
self.damage = "Miss"
self.critical = false
end
return true
end
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
skill = $data_skills[skill_id]
return false if calc_sp_cost(self, skill) > self.sp
return false if dead?
return false if skill.atk_f == 0 and self.restriction == 1
occasion = skill.occasion
return (occasion == 0 or occasion == 1) if $game_
temp.in_battle
return (occasion == 0 or occasion == 2)
end
#--------------------------------------------------------------------------
def calc_sp_cost(user, skill)
cost = skill.sp_cost
if
user.is_a?(Game_Actor)
materia_set = user.return_paired_materia
for paired_set in materia_set
materia = paired_set[2]
other_materia = paired_set[3]
if materia.special_effect == 'MP Turbo'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill and !skill.element_set.include?(Materia_Config::Negate_Turbo_ID)
cost = (cost + (cost * materia.level * 0.2)).to_i
end
end
end
end
if materia.special_effect == 'Reduce Cost'
for skill_id in other_materia.skills
unless skill_id == 0
m_skill = $data_skills[skill_id]
if skill == m_skill
cost = (cost - (cost * materia.level * 0.1)).to_i
end
end
end
end
end
end
return cost
end
#--------------------------------------------------------------------------
def consum_skill_cost(skill)
return false unless skill_can_use?(
skill.id)
cost = calc_sp_cost(self, skill)
return self.sp -= cost
end
end