====== Mecânica de Habilidade de Ataque ======
A Habilidade de Ataque é uma mecânica de combate fundamental no Remixed Dungeon que determina a chance de acertar com sucesso um ataque a um inimigo.
==== Fórmula da Habilidade de Ataque ====
A habilidade de ataque é calculada no arquivo ''Char.java'' como parte do método ''attackSkill'':
public int attackSkill(Char target) {
int[] bf = {0};
forEachBuff(b -> bf[0] += b.attackSkillBonus(this));
int bonus = bf[0];
float accuracy = (float) Math.pow(1.4, bonus);
if (target == null) { // Principalmente para mascarar bug no Remixed RPG
target = CharsList.DUMMY;
}
if (rangedWeapon.valid() && level().distance(getPos(), target.getPos()) == 1) {
accuracy *= 0.5f;
}
float mainAccuracyFactor = getActiveWeapon().accuracyFactor(this);
float secondaryAccuracyFactor = getSecondaryWeapon().accuracyFactor(this);
float skillFactor = Utils.min(20f, mainAccuracyFactor, secondaryAccuracyFactor);
int aSkill = (int) ((baseAttackSkill + lvl()) * accuracy * skillFactor);
GLog.debug("%s atacando %s com fator %2.2f, habilidade resultante %d", getEntityKind(), target.getEntityKind(), skillFactor, aSkill);
return aSkill;
}
==== Componentes da Habilidade de Ataque ====
==== Habilidade de Ataque Base ====
* **Definição**: O valor base da habilidade de ataque do personagem
* **Armazenamento**: Campo ''baseAttackSkill'' na classe Char
* **Exemplos**:
* Rato: 8
* Guerreiro: 10 (na classe Herói)
* Ladrão: 12
* Goo: 11
* Rei: 32
* Coração de Yog: 26
* **Função**: Fornece o valor de ataque fundamental antes dos modificadores
==== Bônus de Nível ====
* **Fórmula**: ''baseAttackSkill + lvl()''
* **Efeito**: Cada nível aumenta a habilidade de ataque em 1 ponto
* **Implementação**: ''baseAttackSkill + lvl()'' no cálculo
==== Bônus de Buffs ====
* **Mecanismo**: Cada buff com ''attackSkillBonus'' aumenta a habilidade
* **Fórmula**: Bônus são somados e aplicados como modificador exponencial à precisão: ''Math.pow(1.4, bonus)''
* **Exemplos**:
* [[pt:rpd:ring_of_accuracy_item|Anel da Precisão]] aumenta o bônus da habilidade de ataque igual ao seu nível
* [[pt:rpd:blessed_buff|Buff Abençoado]] fornece bônus de habilidade de ataque
* [[pt:rpd:hero_subclass|Subclasses de Herói]] podem fornecer bônus de habilidade de ataque
==== Fatores de Precisão ====
* **Precisão de Armas**: ''getActiveWeapon().accuracyFactor(this)'' e ''getSecondaryWeapon().accuracyFactor(this)''
* **Cálculo**: O menor dos dois fatores de precisão de armas é usado, limitado a 20.0
* **Exemplos**:
* **[[pt:rpd:ring_of_accuracy_item|Anel da Precisão]]**: Fornece bônus de precisão
* **[[pt:rpd:weightstone_item|Pedra de Equilíbrio]]**: Pode imbuir armas com precisão
* **[[pt:rpd:compound_bow_item|Arco Composto]]**: Tem precisão melhorada em relação ao arco de madeira
==== Penalidade à Distância ====
* **Condição**: Quando se usa uma arma à distância em alcance corpo a corpo (distância = 1)
* **Efeito**: A precisão é reduzida pela metade (multiplicador 0.5f)
* **Propósito**: Desencoraja o uso de armas à distância em alcance curto
==== Comparação de Defesa ====
* **Uso**: A habilidade de ataque é comparada com a habilidade de defesa do alvo para determinar a probabilidade de acerto
* **Implementação**: Em ''CharUtils.java'', ''Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))''
==== Melhoria da Habilidade de Ataque do Herói ====
A classe Herói tem um cálculo especial de habilidade de ataque que pode ser aprimorado pela configuração de dificuldade:
// Em Hero.java
public int attackSkill(Char target) {
float attackSkillFactor = 1;
if (getDifficulty() == 0) {
attackSkillFactor *= 1.2;
}
return (int) (super.attackSkill(target) * attackSkillFactor);
}
==== Habilidade de Ataque em Combate ====
* **Chance de Acerto**: A habilidade de ataque do atacante é comparada com a habilidade de defesa do defensor
* **Cálculo**: ''Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))''
* **Resultado**: Se verdadeiro, o ataque acerta; se falso, o ataque erra
==== Referência de Código ====
* Java: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/Char.java|Char.java]]
* Java: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/hero/Hero.java|Hero.java]]
* Java: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/CharUtils.java|CharUtils.java]]
* Java: [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/buffs/Blessed.java|Blessed.java]]
==== Relacionado ====
* [[pt:rpd:defense_mechanic|Mecânica de Defesa]]
* [[pt:rpd:accuracy_mechanic|Mecânica de Precisão]]
* [[pt:rpd:combat_mechanic|Mecânica de Combate]]
* [[pt:rpd:evasion_mechanic|Mecânica de Evasão]]
* [[pt:rpd:ring_of_accuracy_item|Anel da Precisão]]
{{tag> rpd mechanics combat attack skill }}