Bueno este scritp Aplicar el efecto de un ataque... funciona con el NP ^^)
Tradução e interpretação da administração da Aldeiarpg:
Esse script aplica um efeito de ataque
Créditos:
??
Tradução e interpretação da administração da Aldeiarpg:
Esse script aplica um efeito de ataque
- Código:
#==============================================================================
# Game_Battler (3)
#------------------------------------------------------------------------------
# Esta classe considera os jogadores da batalha.
# Esta classe identifica os Aliados ou Heróis como (Game_Actor) e
# os Inimigos como (Game_Enemy).
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# - Aplicar o Efeito de um Ataque
#
# attacker : Atacante
#--------------------------------------------------------------------------
def attack_effect(attacker)
# Esvaziar a flag de ataque crítico
self.critical = false
# Verificação do primeiro ataque
hit_result = (rand(100) < attacker.hit)
# Em caso de ataque á distância
if hit_result == true
# Cálculo ddos danos básicos
# n = $APS.random(attacker.min_strike,attacker.max_strike)
# atk = [n-(self.pdef/2),0].max
self.damage = atk
# Calcular atributo
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# Se o dano for positivo
if self.damage > 0
# Calcular dano crítico
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
# calcular defesa
if self.guarding?
self.damage /= 2
end
end
# Aplicar dano
if self.damage.abs > 0
amp = [self.damage.abs * 10 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# Se for dano duplicado
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# Caso de ataque á distância
if hit_result == true
# Aplicar dano se for choque
remove_states_shock
# Subtrair dano do HP
self.hp -= self.damage
# Trocar status
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# Se houver falha
else
# Ao tentar o ataque, exibir a palavra...
self.damage = "Miss!"
# Esvaziar a Flag de ataque crítico
self.critical = false
end
# Fim
return true
end
#--------------------------------------------------------------------------
# - Aplicar o Efeito da Habilidade
#
# user : Jogador que utiliza a Habilidade
# skill : Habilidade
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# Esvaziar a Flag de ataque crítico
self.critical = false
# O alcance da Habilidade é um aliado com 1 de HP
# Ou efeito da Habilidade em um aliado de HP 0.
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# Fim
return false
end
# Esvaziar Flag de efeito
effective = false
# Flag de efeito quanto houver um evento comum
effective |= skill.common_event_id > 0
# Verificar o primeiro ataque
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# Se a Habilidade não for efetiva
effective |= hit < 100
# Se acertar
if hit_result == true
# Cálculo do Dano
power = skill.power + user.atk * 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
# Calcular amplificação
rate = 20
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)
# Cálculo do dano básico
self.damage = power * rate / 20
# Correccion de Atributo
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# Quando o dano for positivo
if self.damage > 0
# Calcular defesa
if self.guarding?
self.damage /= 2
end
end
# Aplicação do dano
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
# Verificar segundo ataque
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# Se a Habilidade não for efetiva
effective |= hit < 100
end
# Se acertar
if hit_result == true
# Força
if skill.power != 0 and skill.atk_f > 0
# Aplicação do status de choque
remove_states_shock
# Aplicar Flag de efeito
effective = true
end
# Subtrair dano do HP
last_hp = self.hp
self.hp -= self.damage
if user == $game_actor
self.sta -= skill.sp_cost
end
effective |= self.hp != last_hp
# Troca de status
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# Se a Força for 0
if skill.power == 0
# Uma sequencia de caracteres vazios é exibida como dano
self.damage = ""
# Quando o status não é alterado
unless @state_changed
# Ao errar exibir...
self.damage = "Miss!"
end
end
# Em caso de Erro
else
# Ao errar exibir...
self.damage = "Miss!"
end
# Quando não se está em batalha
unless $game_temp.in_battle
# Ao errar não colocar nada
self.damage = nil
end
# Fim
return effective
end
end
Créditos:
??