====== Mecánica de Habilidad de Ataque ======
La Habilidad de Ataque es una mecánica de combate principal en Remixed Dungeon que determina la probabilidad de acertar exitosamente un ataque a un enemigo.
==== Fórmula de Habilidad de Ataque ====
La habilidad de ataque se calcula en el archivo ''Char.java'' como parte del 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 ocultar errores en 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 con factor %2.2f, habilidad resultante %d", getEntityKind(), target.getEntityKind(), skillFactor, aSkill);
return aSkill;
}
==== Componentes de la Habilidad de Ataque ====
==== Habilidad de Ataque Base ====
* **Definición**: El valor base de habilidad de ataque del personaje
* **Almacenamiento**: Campo ''baseAttackSkill'' en la clase Char
* **Ejemplos**:
* Rata: 8
* Guerrero: 10 (en la clase Heroe)
* Ladrón: 12
* Goo: 11
* Rey: 32
* Corazón de Yog: 26
* **Función**: Proporciona el valor de ataque fundamental antes de modificadores
==== Bonificación de Nivel ====
* **Fórmula**: ''baseAttackSkill + lvl()''
* **Efecto**: Cada nivel aumenta la habilidad de ataque en 1 punto
* **Implementación**: ''baseAttackSkill + lvl()'' en el cálculo
==== Bonificaciones de Buff ====
* **Mecanismo**: Cada buff con ''attackSkillBonus'' aumenta la habilidad
* **Fórmula**: Los bonos se suman y aplican como modificador exponencial a la precisión: ''Math.pow(1.4, bonus)''
* **Ejemplos**:
* [[es:rpd:ring_of_accuracy_item|Anillo de Puntería]] aumenta el bono de habilidad de ataque igual a su nivel
* [[es:rpd:blessed_buff|Buff Bendecido]] proporciona bono de habilidad de ataque
* [[es:rpd:hero_subclass|Subclases de Héroe]] pueden proporcionar bonos de habilidad de ataque
==== Factores de Precisión ====
* **Precisión de Armas**: ''getActiveWeapon().accuracyFactor(this)'' y ''getSecondaryWeapon().accuracyFactor(this)''
* **Cálculo**: Se utiliza el mínimo de ambos factores de precisión de armas, limitado a 20.0
* **Ejemplos**:
* **[[es:rpd:ring_of_accuracy_item|Anillo de Puntería]]**: Proporciona bonificación de precisión
* **[[es:rpd:weightstone_item|Piedra de Equilibrio]]**: Puede imbuir armas con precisión
* **[[es:rpd:compound_bow_item|Arco Compuesto]]**: Tiene mejor precisión que arco de madera
==== Penalización a Distancia ====
* **Condición**: Al usar un arma a distancia en combate cuerpo a cuerpo (distancia = 1)
* **Efecto**: La precisión se reduce a la mitad (multiplicador 0.5f)
* **Propósito**: Desincentiva el uso de armas a distancia a corta distancia
==== Comparación de Defensa ====
* **Uso**: La habilidad de ataque se compara con la habilidad de defensa del objetivo para determinar la probabilidad de impacto
* **Implementación**: En ''CharUtils.java'', ''Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))''
==== Mejora de Habilidad de Ataque del Héroe ====
La clase Héroe tiene un cálculo especial de habilidad de ataque que puede ser mejorado por configuración de dificultad:
// En Hero.java
public int attackSkill(Char target) {
float attackSkillFactor = 1;
if (getDifficulty() == 0) {
attackSkillFactor *= 1.2;
}
return (int) (super.attackSkill(target) * attackSkillFactor);
}
==== Habilidad de Ataque en Combate ====
* **Probabilidad de Impacto**: La habilidad de ataque del atacante se compara con la habilidad de defensa del defensor
* **Cálculo**: ''Random.Float(attacker.attackSkill(defender)) > Random.Float(defender.defenseSkill(attacker))''
* **Resultado**: Si es verdadero, el ataque impacta; si es falso, el ataque falla
==== Referencia 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 ====
* [[es:rpd:defense_mechanic|Mecánica de Defensa]]
* [[es:rpd:accuracy_mechanic|Mecánica de Precisión]]
* [[es:rpd:combat_mechanic|Mecánica de Combate]]
* [[es:rpd:evasion_mechanic|Mecánica de Evasión]]
* [[es:rpd:ring_of_accuracy_item|Anillo de Puntería]]
{{tag> rpd mechanics combat attack skill }}