72public class JalTokJad
extends MultiStrategy {
73 private static RangedAttack RANGED =
new RangedAttack();
74 private static MagicAttack MAGIC =
new MagicAttack();
75 private static MeleeAttack MELEE =
new MeleeAttack();
76 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RANGED, MAGIC, MELEE);
77 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGED, MAGIC);
80 currentStrategy = randomStrategy(NON_MELEE);
84 public boolean canAttack(
Npc attacker,
Mob defender) {
85 if (!currentStrategy.withinDistance(attacker, defender)) {
86 currentStrategy = randomStrategy(NON_MELEE);
88 return currentStrategy.canAttack(attacker, defender);
93 currentStrategy.block(attacker, defender, hit, combatType);
97 private boolean hasGuardians;
98 private static int OBJECT = 1;
99 public static int POS1 = 2274;
100 public static int POS2 = 5337;
103 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
104 super.hit(attacker, defender, hit);
108 Player player = defender.getPlayer();
110 if (currentStrategy.getCombatType().equals(
CombatType.MELEE)
113 }
else if (currentStrategy.getCombatType().equals(
CombatType.RANGED)
116 }
else if (currentStrategy.getCombatType().equals(
CombatType.MAGIC)
121 if (hasGuardians || attacker.getCurrentHealth() >= 175) {
126 for (
int i = 0; i <= 2; i++) {
127 Position spawn = RandomUtils.random(
Utility.getInnerBoundaries(attacker));
128 Npc guardian =
new Guardian(spawn, attacker);
130 guardian.definition.setRespawnTime(-1);
133 World.sendGraphic(new Graphic(1460, true), guardian.getPosition());
134 defender.damage(new Hit(10 * guardian.getCurrentHealth() / guardian.getMaximumHealth()));
135 World.schedule(new CeillingCollapseTask(defender.getPlayer()));
141 public void finishOutgoing(
Npc attacker,
Mob defender) {
142 currentStrategy.finishOutgoing(attacker, defender);
143 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
144 currentStrategy = randomStrategy(FULL_STRATEGIES);
146 currentStrategy = randomStrategy(NON_MELEE);
151 public int modifyAccuracy(
Npc attacker,
Mob defender,
int roll) {
152 return roll + 150_000;
155 private static class RangedAttack
extends NpcRangedStrategy {
164 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
165 attacker.animate(ANIMATION,
true);
168 protected void execute() {
174 protected void execute() {
183 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
188 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
192 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
197 return new CombatHit[] { nextRangedHit(attacker, defender, 97, 2, 2) };
206 private static class MagicAttack
extends NpcMagicStrategy {
209 public MagicAttack() {
210 super(getDefinition(
"jal jad Magic"));
215 CombatHit hit = nextMagicHit(attacker, defender, 97, 2, 2);
216 hit.setAccurate(
true);
221 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
230 private class Guardian
extends Npc {
236 setWaypoint(
new Waypoint(
this, healer) {
238 protected void onDestination() {
240 .ifPresent(projectile -> projectile.send(mob, healer));
252 long millis = TimeUnit.MILLISECONDS.convert(System.nanoTime(), TimeUnit.NANOSECONDS);
253 if (millis > 15_000) {
259 private static class MeleeAttack
extends NpcMeleeStrategy {
264 CombatHit hit = nextMeleeHit(attacker, defender, 97, 5, 2);
265 hit.setAccurate(
true);