66public class Callisto
extends MultiStrategy {
68 private static Roar ROAR =
new Roar();
69 private static Shockwave SHOCKWAVE =
new Shockwave();
70 private static Melee MELEE =
new Melee();
71 private static final CombatStrategy<Npc>[] FULL = createStrategyArray(MELEE, MELEE, MELEE, SHOCKWAVE);
74 currentStrategy = SHOCKWAVE;
78 public boolean canAttack(
Npc attacker,
Mob defender) {
79 if (!currentStrategy.withinDistance(attacker, defender)) {
80 if (RandomUtils.success(0.10)) {
81 currentStrategy = ROAR;
83 currentStrategy = SHOCKWAVE;
86 return currentStrategy.canAttack(attacker, defender);
91 currentStrategy.block(attacker, defender, hit, combatType);
96 public void finishOutgoing(
Npc attacker,
Mob defender) {
97 currentStrategy.finishOutgoing(attacker, defender);
98 if (RandomUtils.success(0.10)) {
99 currentStrategy = ROAR;
101 currentStrategy = randomStrategy(FULL);
106 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
110 private static class Roar
extends NpcMagicStrategy {
116 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
123 int dx = current.
getX() - best.
getX();
124 int dy = current.
getY() - best.
getY();
128 int y = dy / (dx == 0 ? dy : dx);
131 current = destination;
133 defender.damage(
new Hit(
Utility.random(1, 3)));
135 defender.getPlayer().send(
new SendMessage(
"Callisto's roar throws you backwards."));
140 int anim = defender.mobAnimation.getWalk();
143 protected void onSchedule() {
145 defender.mobAnimation.setWalk(1157);
146 defender.locking.lock();
150 protected void onCancel(
boolean logout) {
151 super.onCancel(logout);
152 defender.mobAnimation.setWalk(anim);
153 defender.locking.
unlock();
161 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
165 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
170 CombatHit hit = nextMagicHit(attacker, defender, 3);
171 hit.setAccurate(
true);
176 private static class Shockwave
extends NpcMagicStrategy {
180 super(getDefinition(
"Callisto Shockwave"));
184 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
185 super.hit(attacker, defender, hit);
187 defender.getPlayer().send(
new SendMessage(
"Callisto's fury sends an almighty shockwave through you."));
188 defender.graphic(
new Graphic(80,
true));
194 CombatHit hit = nextMagicHit(attacker, defender, 23);
195 hit.setAccurate(
true);
205 private static final class Melee
extends NpcMeleeStrategy {
206 private static final Animation ANIMATION =
new Animation(4925, UpdatePriority.HIGH);
209 public int getAttackDistance(Npc attacker, FightType fightType) {
214 public Animation getAttackAnimation(Npc attacker, Mob defender) {
219 public CombatHit[] getHits(Npc attacker, Mob defender) {
220 return new CombatHit[]{nextMeleeHit(attacker, defender)};