63public class LizardShaman
extends MultiStrategy {
64 private static final MagicAttack MAGIC =
new MagicAttack();
65 private static final AcidAttack ACID =
new AcidAttack();
66 private static final MinionsAttack MINION =
new MinionsAttack();
67 private static final JumpAttack JUMP =
new JumpAttack();
68 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(NpcMeleeStrategy.get(), ACID, MAGIC, MAGIC, MAGIC, MINION, JUMP);
69 private static final CombatStrategy<Npc>[] MAGIC_STRATEGIES = createStrategyArray(ACID, MAGIC, MAGIC, MAGIC, MINION);
70 private static final CombatStrategy<Npc>[] BASIC_STRATEGIES = createStrategyArray(ACID, MAGIC, MAGIC, MAGIC, JUMP);
72 public LizardShaman() {
73 currentStrategy = NpcMeleeStrategy.get();
77 public boolean canAttack(
Npc attacker,
Mob defender) {
78 if (NpcMeleeStrategy.get().canAttack(attacker, defender)) {
79 currentStrategy = randomStrategy(FULL_STRATEGIES);
81 currentStrategy = randomStrategy(MAGIC_STRATEGIES);
84 boolean spawned = attacker.attributes.is(
"LIZARD_SPAWNED");
86 if (currentStrategy == MINION && spawned) {
87 currentStrategy = randomStrategy(BASIC_STRATEGIES);
90 return currentStrategy.canAttack(attacker, defender);
93 private static class JumpAttack
extends NpcMagicStrategy {
99 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
107 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
115 protected void execute() {
119 attacker.setVisible(
false);
120 }
else if (count == 3) {
121 attacker.
move(position);
122 }
else if (count == 4) {
123 attacker.setVisible(
true);
125 }
else if (count == 5) {
127 if (actor.getPosition().equals(position)) {
129 actor.movement.reset();
137 protected void onCancel(
boolean logout) {
138 attacker.attack(defender);
149 private static class MinionsAttack
extends NpcMagicStrategy {
155 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
163 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
164 attacker.attributes.set(
"LIZARD_SPAWNED", Boolean.TRUE);
165 for (
int index = 0; index < 3; index++) {
168 minion.follow(defender);
174 defender.damage(
new Hit(
Utility.random(8) + 2));
178 attacker.attributes.set(
"LIZARD_SPAWNED", Boolean.FALSE);
189 private static class MagicAttack
extends NpcMagicStrategy {
201 CombatHit combatHit = nextMagicHit(attacker, defender, 31);
202 combatHit.setAccurate(
true);
207 private static class AcidAttack
extends NpcMagicStrategy {
219 CombatHit combatHit = nextMagicHit(attacker, defender);
222 combatHit.setAccurate(
false);
224 for (
int index = 0; index < SHAYZIEN_PIECES.length; index++) {
225 if (defender.getPlayer().equipment.contains(SHAYZIEN_PIECES[index][0])) {
229 int damage = (itemCount == SHAYZIEN_PIECES.length) ? 0 :
Utility.random(25 - 5 * itemCount, 30 - 5 * itemCount);