54public class JalAk
extends MultiStrategy {
56 private static final CrushMelee MELEE =
new CrushMelee();
57 private static final Mage MAGE =
new Mage();
58 private static final Ranged RANGE =
new Ranged();
60 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RANGE, MAGE, MELEE);
61 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGE, MAGE);
64 currentStrategy = randomStrategy(NON_MELEE);
68 public boolean withinDistance(
Npc attacker,
Mob defender) {
69 if (!currentStrategy.withinDistance(attacker, defender)) {
70 currentStrategy = randomStrategy(NON_MELEE);
72 return currentStrategy.withinDistance(attacker, defender);
76 public boolean canAttack(
Npc attacker,
Mob defender) {
77 if (!currentStrategy.canAttack(attacker, defender)) {
78 currentStrategy = randomStrategy(NON_MELEE);
80 return currentStrategy.canAttack(attacker, defender);
85 currentStrategy.block(attacker, defender, hit, combatType);
90 public void finishOutgoing(
Npc attacker,
Mob defender) {
91 currentStrategy.finishOutgoing(attacker, defender);
92 if (MELEE.withinDistance(attacker, defender)) {
93 currentStrategy = randomStrategy(FULL_STRATEGIES);
95 currentStrategy = randomStrategy(NON_MELEE);
100 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
105 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
106 super.hit(attacker, defender, hit);
110 Player player = defender.getPlayer();
112 if (currentStrategy.getCombatType().equals(
CombatType.MELEE)
115 }
else if (currentStrategy.getCombatType().equals(
CombatType.RANGED)
118 }
else if (currentStrategy.getCombatType().equals(
CombatType.MAGIC)
124 private static final class CrushMelee
extends NpcMeleeStrategy {
128 public int getAttackDistance(
Npc attacker,
FightType fightType) {
139 return new CombatHit[] { nextMeleeHit(attacker, defender, 29) };
143 private static class Mage
extends NpcMagicStrategy {
147 super(getDefinition(
"jalak mage"));
152 return new CombatHit[] { nextMagicHit(attacker, defender, 29) };
161 private static class Ranged
extends NpcRangedStrategy {
165 super(getDefinition(
"jalak range"));
170 return new CombatHit[] { nextRangedHit(attacker, defender, 29) };