package com.aionemu.gameserver.controllers.attack;
/**
* @author ATracer
*/
public enum AttackStatus {
DODGE(0, true, false),
OFFHAND_DODGE(1, true, false),
PARRY(2, true, false),
OFFHAND_PARRY(3, true, false),
BLOCK(4, true, false),
OFFHAND_BLOCK(5, true, false),
RESIST(6, true, false),
OFFHAND_RESIST(7, true, false),
BUF(8), // ??
OFFHAND_BUF(9),
NORMALHIT(10),
OFFHAND_NORMALHIT(11),
CRITICAL_DODGE(-64, true, true),
CRITICAL_PARRY(-62, true, true),
CRITICAL_BLOCK(-60, true, true),
CRITICAL_RESIST(-58, true, true),
CRITICAL(-54, false, true),
OFFHAND_CRITICAL_DODGE(-47, true, true),
OFFHAND_CRITICAL_PARRY(-45, true, true),
OFFHAND_CRITICAL_BLOCK(-43, true, true),
OFFHAND_CRITICAL_RESIST(-41, true, true),
OFFHAND_CRITICAL(-37, false, true);
private final int id;
private final boolean counterSkill;
private final boolean isCritical;
AttackStatus(int id) {
this(id, false, false);
}
AttackStatus(int id, boolean counterSkill, boolean isCritical) {
this.id = id;
this.counterSkill = counterSkill;
this.isCritical = isCritical;
}
public final int getId() {
return id;
}
public final boolean isCounterSkill() {
return counterSkill;
}
public final boolean isCritical() {
return isCritical;
}
public static final AttackStatus getOffHandStats(AttackStatus mainHandStatus) {
switch (mainHandStatus) {
case DODGE:
return OFFHAND_DODGE;
case PARRY:
return OFFHAND_PARRY;
case BLOCK:
return OFFHAND_BLOCK;
case RESIST:
return OFFHAND_RESIST;
case BUF:
return OFFHAND_BUF;
case NORMALHIT:
return OFFHAND_NORMALHIT;
case CRITICAL:
return OFFHAND_CRITICAL;
case CRITICAL_DODGE:
return OFFHAND_CRITICAL_DODGE;
case CRITICAL_PARRY:
return OFFHAND_CRITICAL_PARRY;
case CRITICAL_BLOCK:
return OFFHAND_CRITICAL_BLOCK;
case CRITICAL_RESIST:
return OFFHAND_CRITICAL_RESIST;
}
throw new IllegalArgumentException("Invalid mainHandStatus " + mainHandStatus);
}
public static final AttackStatus getBaseStatus(AttackStatus status) {
switch (status) {
case DODGE:
case CRITICAL_DODGE:
case OFFHAND_DODGE:
case OFFHAND_CRITICAL_DODGE:
return AttackStatus.DODGE;
case RESIST:
case CRITICAL_RESIST:
case OFFHAND_RESIST:
case OFFHAND_CRITICAL_RESIST:
return AttackStatus.RESIST;
case PARRY:
case CRITICAL_PARRY:
case OFFHAND_PARRY:
case OFFHAND_CRITICAL_PARRY:
return AttackStatus.PARRY;
case BLOCK:
case CRITICAL_BLOCK:
case OFFHAND_BLOCK:
case OFFHAND_CRITICAL_BLOCK:
return AttackStatus.BLOCK;
default:
return status;
}
}
public static final AttackStatus getCriticalStatusFor(AttackStatus status) {
switch (status) {
case DODGE:
return AttackStatus.CRITICAL_DODGE;
case OFFHAND_DODGE:
return AttackStatus.OFFHAND_CRITICAL_DODGE;
case PARRY:
return AttackStatus.CRITICAL_PARRY;
case OFFHAND_PARRY:
return AttackStatus.OFFHAND_CRITICAL_PARRY;
case BLOCK:
return AttackStatus.CRITICAL_BLOCK;
case OFFHAND_BLOCK:
return AttackStatus.OFFHAND_CRITICAL_BLOCK;
case NORMALHIT:
return AttackStatus.CRITICAL;
case OFFHAND_NORMALHIT:
return AttackStatus.OFFHAND_CRITICAL;
default:
return status;
}
}
}