RPG Maker Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Alucard_2
Alucard_2
Administrador
Administrador
Masculino Mensagens : 823
Reputação : 57
http://www.não tenho site ainda.com.nada

[Batalha Padrão/ ACBS]Dano Avançado Para Armas Empty [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

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:

  1. Taxa Crítica especial para as armas desejadas. Caso não seja definido, o padrão é utilizado;
  2. Multiplicação do dano quando é um Dano Crítico;
  3. Multiplicação variada do dano comum;
  4. Dano Fixo para Dano Crítico;
  5. Dano Fixo para golpes comuns;
  6. 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
#
################################################################################
Eis uma lista de funcionamento para o ACBS:
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
Versão |Atoa Custom Battle System (ACBS)|:
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
Créditos e Agradecimentos:

  • [b]Alucard_2 - Por criar, [s]queimar neurônios[/s] e disponibilizar;
  • Atoa - Pelo ACBS, e de onde tirei o check_extensions
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos