[Batalha Padrão/ ACBS]Dano Avançado Para Armas
Sex Jan 14, 2011 2:35 pm
Dano Avançado para Armas v1.0
por:Alucard_2
por:Alucard_2
Introdução:
Comecei a fazer este script como um add-on para o ACBS (e deu certo). Depois, decidi colocá-lo para as batalhas padrões.
Características:
Este script muda a forma do dano para cada arma, com várias funções, tais quais:
- Taxa Crítica especial para as armas desejadas. Caso não seja definido, o padrão é utilizado;
- Multiplicação do dano quando é um Dano Crítico;
- Multiplicação variada do dano comum;
- Dano Fixo para Dano Crítico;
- Dano Fixo para golpes comuns;
- Dano Fixo para golpes comuns, porém só acontece em uma certa porcentagem (definida por você).
Para todas as informações acima, é definido a função desejada para as armas desejadas, podendo utilizar mais de uma função em uma arma só. Caso não seja definido a função, o padrão é utilizado.
Eis uma lista de Funcionamento para a batalha padrão:
- Código:
################################################################################
############################ Lista de funcionamento ############################
################################################################################
#
# 'CRTRATE/**' - OK
# 'CRTMULT/**' - OK
# 'DMGRANDMULT/[**]' - OK
# 'CRTAUTODMG/**' - OK
# 'AUTODAMAGE/**' - OK
# 'AUTODAMAGECHANCE/[**, Y]' - OK
#
#-------------------------------------------------------------------------------
# Legenda:
#-------------------------------------------------------------------------------
# OK > Funciona
#
################################################################################
- Código:
################################################################################
############################ Lista de funcionamento ############################
################################################################################
#
# 'CRTRATE/**' - OK
# 'CRTMULT/**' - OK
# 'DMGRANDMULT/[**]' - OK
# 'CRTAUTODMG/**' - OK[1]
# 'AUTODAMAGE/**' - OK[1]
# 'AUTODAMAGECHANCE/[**, Y]' - OK
# 'LETALDAMAGECHANCE/**' - Retirado -NF-. Pode ser feito pelo Database
#
#-------------------------------------------------------------------------------
# Legenda:
#-------------------------------------------------------------------------------
# OK > Funciona
# NF > Não Funciona
# [1] > Defesa do inimigo não é ignorada. Random de dano não é ignorado.
#
################################################################################
Screenshots:
Efeito não perceptível por SS.
Como usar:
Apenas cole-o acima do script Main. O resto está no script
Script:
Versão |Batalha Padrão|:
- Código:
################################################################################
# Dano Avançado V.1.0
#-------------------------------------------------------------------------------
# Por Alucard_2
#===============================================================================
# Este add-on permite adicionar novas funções de dano para as armas.
#===============================================================================
################################################################################
################################################################################
############################ Lista de funcionamento ############################
################################################################################
#
# 'CRTRATE/**' - OK
# 'CRTMULT/**' - OK
# 'DMGRANDMULT/[**]' - OK
# 'CRTAUTODMG/**' - OK
# 'AUTODAMAGE/**' - OK
# 'AUTODAMAGECHANCE/[**, Y]' - OK
#
#-------------------------------------------------------------------------------
# Legenda:
#-------------------------------------------------------------------------------
# OK > Funciona
# NF > Não Funciona
#
################################################################################
module Alucard_2
# Não altere ou apague estas linhas
Weapon_NewSettings = []
# Não altere ou apague estas linhas
# Multiplicação padrão do dano caso seja um ataque crítico
Multiply_CrtDamage_Base = 2
#=============================================================================
# Configurações das armas
#=============================================================================
# Para adicionar uma nova configuração de dano para uma arma, basta adicionar
# o seguinte comando:
#
# Weapon_NewSettings[ID] = [X]
# onde:
#
# ID = ID da arma com a nova configuração
# X = Efeito da configuração. Este efeito pode ser:
#
# 'CRTRATE/**' para alterar a taxa crítica da arma. Troque ** pela porcentagem
# de chances que a arma fará um golpe crítico.
#
# 'CRTMULT/**' para alterar a multiplição de dano ao causar um dano crítico
# para o valor definido em **.
# Caso a arma possua este efeito, o Multiply_CrtDamage_Base será
# ignorado para ela.
#
# 'DMGRANDMULT/[**]' para que a arma tenha um dano variado. Por exemplo, se
# for colocado:
# Weapon_NewSettings[4] = ['DMGRANDMULT/[0.1, 0.5, 1, 2, 3]']
# Significa que a arma de ID 4 terá seu dano comum variado entre
# 0.1x, 0.5x, 1x, 2x e 3x.
#
# 'CRTAUTODMG/**' para alterar o dano causado em ataques críticos para um
# valor fixo. Troque ** pelo dano fixo para ataques críticos.
#
# 'AUTODAMAGE/**' para alterar o dano causado em ataques comuns para um valor
# fixo. Troque ** pelo dano fixo para ataques comuns.
#
# 'AUTODAMAGECHANCE/[**, Y]' para alterar o dano causado em ataques comuns
# para um valor fixo. Similar ao 'AUTODAMAGE/**', porém, este
# dano fixo só acontecerá com Y% de chances.
#
#=============================================================================
Weapon_NewSettings[1] = ['CRTMULT/2', 'CRTRATE/100']
Weapon_NewSettings[2] = ['AUTODAMAGE/220']
Weapon_NewSettings[3] = ['AUTODAMAGECHANCE/[9999, 100]']
Weapon_NewSettings[4] = ['CRTRATE/1','DMGRANDMULT/[0.1, 0.5, 1, 2, 3]']
Weapon_NewSettings[5] = ['CRTAUTODMG/2000', 'CRTRATE/100']
end
#-------------------------------=Fim das Configurações=------------------------#
#==============================================================================
# Game_Battler (4)
#------------------------------------------------------------------------------
# Esta classe contém os dados dos lutadores. Esta classe modifica o dano das
# armas.
#==============================================================================
class Game_Battler
include Alucard_2
# Checar Extensão
def check_extensions(target, extension)
return nil if target.nil?
id = target
settings = eval("Weapon_NewSettings[#{id}]")
if settings != nil
for ext in settings
return ext.dup if ext.include?(extension)
end
end
return nil
end
# Colocar Multiplicador de Dano
def set_critical_mult(attacker)
ext = check_extensions(attacker.weapon_id, 'CRTMULT/')
if ext != nil
ext.slice!('CRTMULT/')
type = eval(ext)
self.damage *= type
else
self.damage *= Multiply_CrtDamage_Base
end
# Dano automático (Crítico)
ext = check_extensions(attacker.weapon_id, 'CRTAUTODMG/')
if ext != nil
ext.slice!('CRTAUTODMG/')
type = eval(ext)
self.damage = type
end
end
# Checar dano
def attack_alucard(attacker)
# É um Game_Actor agindo?
if attacker.is_a?(Game_Actor)
# Multiplicado de Dano aleatório?
ext = check_extensions(attacker.weapon_id, 'DMGRANDMULT/')
if ext != nil
ext.slice!('DMGRANDMULT/')
type = eval(ext)
multiply = rand(type.size)
tipo = type[multiply]
damage = self.damage*tipo
self.damage = damage.to_i#-self.damage
end
# Dano fixo para ataques comuns
ext = check_extensions(attacker.weapon_id, 'AUTODAMAGE/')
if ext != nil
ext.slice!('AUTODAMAGE/')
type = eval(ext)
self.damage = type
end
# Dano fixo nem sempre acontece?
ext = check_extensions(attacker.weapon_id, 'AUTODAMAGECHANCE/')
if ext != nil
ext.slice!('AUTODAMAGECHANCE/')
type = eval(ext)
naigo = type[1]
chances = rand(100)
damage = type[0]
if chances <= type[1]
self.damage = damage.to_i
end
end
end
end
#--------------------------------------------------------------------------
# ● 通常攻撃の効果適用
# attacker : 攻撃者 (バトラー)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# クリティカルフラグをクリア
self.critical = false
# 第一命中判定
hit_result = (rand(100) < attacker.hit)
# 命中の場合
if hit_result == true
# 基本ダメージを計算
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# ダメージの符号が正の場合
if self.damage > 0 # cacnabucho
# クリティカル修正
# Checar Se tem 'CRTRATE/**'
ext = check_extensions(attacker.weapon_id, 'CRTRATE/')
if ext != nil
ext.slice!('CRTRATE/')
type = eval(ext)
if rand(100) <= type and attacker != nil
set_critical_mult(attacker)
self.critical = true
end
# Não é personalizada?
else
if rand(100) < 4 * attacker.dex / self.agi
set_critical_mult(attacker)
self.critical = true
end
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.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
attack_alucard(attacker)
# 命中の場合
if hit_result == true
# ステート衝撃解除
remove_states_shock
# HP からダメージを減算
self.hp -= self.damage
# ステート変化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# ミスの場合
else
# ダメージに "Miss" を設定
self.damage = "Errou"
# クリティカルフラグをクリア
self.critical = false
end
# メソッド終了
return true
end
end
- Código:
################################################################################
# Dano Avançado
#-------------------------------------------------------------------------------
# Por Alucard_2
#===============================================================================
# Este add-on permite adicionar novas funções de dano para as armas.
#===============================================================================
################################################################################
################################################################################
############################ Lista de funcionamento ############################
################################################################################
#
# 'CRTRATE/**' - OK
# 'CRTMULT/**' - OK
# 'DMGRANDMULT/[**]' - OK
# 'CRTAUTODMG/**' - OK[1]
# 'AUTODAMAGE/**' - OK[1]
# 'AUTODAMAGECHANCE/[**, Y]' - OK
# 'LETALDAMAGECHANCE/**' - Retirado -NF-. Pode ser feito pelo Database
#
#-------------------------------------------------------------------------------
# Legenda:
#-------------------------------------------------------------------------------
# OK > Funciona
# NF > Não Funciona
# [1] > Defesa do inimigo não é ignorada. Random de dano não é ignorado.
#
################################################################################
module Atoa
# Não altere ou apague estas linhas
Weapon_NewSettings = []
# Não altere ou apague estas linhas
# Multiplicação padrão do dano caso seja um ataque crítico
Multiply_CrtDamage_Base = 2
#=============================================================================
# Configurações das armas
#=============================================================================
# Para adicionar uma nova configuração de dano para uma arma, basta adicionar
# o seguinte comando:
#
# Weapon_NewSettings[ID] = [X]
# onde:
#
# ID = ID da arma com a nova configuração
# X = Efeito da configuração. Este efeito pode ser:
#
# 'CRTRATE/**' para alterar a taxa crítica da arma. Troque ** pela porcentagem
# de chances que a arma fará um golpe crítico.
#
# 'CRTMULT/**' para alterar a multiplição de dano ao causar um dano crítico
# para o valor definido em **.
# Caso a arma possua este efeito, o Multiply_CrtDamage_Base será
# ignorado para ela.
#
# 'DMGRANDMULT/[**]' para que a arma tenha um dano variado. Por exemplo, se
# for colocado:
# Weapon_NewSettings[4] = ['DMGRANDMULT/[0.1, 0.5, 1, 2, 3]']
# Significa que a arma de ID 4 terá seu dano comum variado entre
# 0.1x, 0.5x, 1x, 2x e 3x.
#
# 'CRTAUTODMG/**' para alterar o dano causado em ataques críticos para um
# valor fixo. Troque ** pelo dano fixo para ataques críticos.
#
# 'AUTODAMAGE/**' para alterar o dano causado em ataques comuns para um valor
# fixo. Troque ** pelo dano fixo para ataques comuns.
#
# 'AUTODAMAGECHANCE/[**, Y]' para alterar o dano causado em ataques comuns
# para um valor fixo. Similar ao 'AUTODAMAGE/**', porém, este
# dano fixo só acontecerá com Y% de chances.
#
#=============================================================================
Weapon_NewSettings[1] = ['CRTMULT/4', 'CRTRATE/100']
Weapon_NewSettings[2] = ['AUTODAMAGE/220']
Weapon_NewSettings[3] = ['AUTODAMAGECHANCE/[9999, 14]']
Weapon_NewSettings[43] = ['CRTRATE/40','DMGRANDMULT/[0.1, 0.5, 1, 2, 3]']
Weapon_NewSettings[70] = ['CRTAUTODMG/2000', 'CRTRATE/100']
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
# Novo modo de checar
def check_extensions(target, extension)
return nil if target.nil?
id = target
settings = eval("Weapon_NewSettings[#{id}]")
if settings != nil
for ext in settings
return ext.dup if ext.include?(extension)
end
end
return nil
end
# Sem alterações na taxa crítica
def noaltcrt(target)
atk_crt = Damage_Algorithm_Type > 1 ? self.agi : self.dex
critical = self.critical_hit = rand(100) < 5 * atk_crt / target.agi
end
# Ataque é crítico?
def set_attack_critical(target, attacker = nil)
# É um Game_Actor agindo?
if self.is_a?(Game_Actor)
# Chance crítica personalizada
ext = check_extensions(self.weapon_id, 'CRTRATE/')
if ext != nil
ext.slice!('CRTRATE/')
type = eval(ext)
critical = self.critical_hit = rand(100) < type if attacker != nil
# Não é personalizada?
else
noaltcrt(target)
end
# Não é um Game_Actor agindo?
else
noaltcrt(target)
end
target.critical = critical
self.critical_hit |= critical
return self.critical_hit
end
# Valor do dano Crítico
def set_critical_damage(attacker)
ext = check_extensions(attacker.weapon_id, 'CRTMULT/')
if ext != nil
ext.slice!('CRTMULT/')
type = eval(ext)
self.damage *= type
else
self.damage *= Atoa::Multiply_CrtDamage_Base
end
# Dano automático (Crítico)
ext = check_extensions(attacker.weapon_id, 'CRTAUTODMG/')
if ext != nil
ext.slice!('CRTAUTODMG/')
type = eval(ext)
self.damage = type
end
end
# Valor do dano Comum
def set_attack_damage_value(attacker)
# cálculo de dano (Damage_Algorithm_Type)
case Damage_Algorithm_Type
when 0
atk = weapon_attack(attacker) - (battler_defense(attacker) / 2)
str = 20 + battler_strength(attacker)
when 1
atk = weapon_attack(attacker) - ((weapon_attack(attacker) *
battler_defense(attacker)) / 1000)
str = 20 + battler_strength(attacker)
when 2
atk = 20
str = [(battler_strength(attacker) * 4) - (self.dex * 2) , 0].max
when 3
atk = (10 + weapon_attack(attacker)) - (battler_defense(attacker) / 2)
str = (20 + battler_strength(attacker)) - (self.dex / 2)
when 4
atk = 20
value = Custom_Attack_Algorithm.dup
value.gsub!(/{atk}/i) {"weapon_attack(attacker)"}
value.gsub!(/{str}/i) {"battler_strength(attacker)"}
value.gsub!(/{def}/i) {"battler_defense(attacker)"}
str = eval(value)
end
# Base do dano
self.damage = atk + str
self.damage = 1 if self.damage == 0 and (rand(100) > 40)
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# É um Game_Actor agindo?
if attacker.is_a?(Game_Actor)
# Multiplicado de Dano aleatório?
ext = check_extensions(attacker.weapon_id, 'DMGRANDMULT/')
if ext != nil
ext.slice!('DMGRANDMULT/')
type = eval(ext)
multiply = rand(type.size)
tipo = type[multiply]
damage = self.damage*tipo
self.damage += damage.to_i#-self.damage
end
# Dano fixo para ataques comuns
ext = check_extensions(attacker.weapon_id, 'AUTODAMAGE/')
if ext != nil
ext.slice!('AUTODAMAGE/')
type = eval(ext)
self.damage = type
end
# Dano fixo nem sempre acontece?
ext = check_extensions(attacker.weapon_id, 'AUTODAMAGECHANCE/')
if ext != nil
ext.slice!('AUTODAMAGECHANCE/')
type = eval(ext)
naigo = type[1]
chances = rand(100)
damage = type[0]
if chances <= type[1]
self.damage = damage.to_i
end
end
end
end
end
class Scene_Battle
def check_extensions(target, extension)
return nil if target.nil?
id = target
settings = eval("Weapon_NewSettings[#{id}]")
if settings != nil
for ext in settings
return ext.dup if ext.include?(extension)
end
end
return nil
end
end
- [b]Alucard_2 - Por criar, [s]queimar neurônios[/s] e disponibilizar;
- Atoa - Pelo ACBS, e de onde tirei o check_extensions
Permissões neste sub-fórum
Não podes responder a tópicos