60public class TzTokJad
extends MultiStrategy {
61 private static MeleeAttack MELEE =
new MeleeAttack();
62 private static RangedAttack RANGED =
new RangedAttack();
63 private static MagicAttack MAGIC =
new MagicAttack();
64 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(MELEE, RANGED, MAGIC);
65 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RANGED, MAGIC);
68 currentStrategy = randomStrategy(NON_MELEE);
72 public boolean withinDistance(
Npc attacker,
Mob defender) {
73 if (!currentStrategy.withinDistance(attacker, defender)) {
74 currentStrategy = randomStrategy(NON_MELEE);
76 return currentStrategy.withinDistance(attacker, defender);
80 public boolean canAttack(
Npc attacker,
Mob defender) {
81 if (!currentStrategy.canAttack(attacker, defender)) {
82 currentStrategy = randomStrategy(NON_MELEE);
84 return currentStrategy.canAttack(attacker, defender);
89 currentStrategy.block(attacker, defender, hit, combatType);
94 public void finishOutgoing(
Npc attacker,
Mob defender) {
95 currentStrategy.finishOutgoing(attacker, defender);
96 if (MELEE.withinDistance(attacker, defender)) {
97 currentStrategy = randomStrategy(FULL_STRATEGIES);
99 currentStrategy = randomStrategy(NON_MELEE);
104 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
108 private static class MeleeAttack
extends NpcMeleeStrategy {
116 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
118 hit.modifyDamage(damage -> 0);
124 return new CombatHit[]{nextMeleeHit(attacker, defender, 97, 0, 0,
false)};
128 private static class RangedAttack
extends NpcRangedStrategy {
131 super(getDefinition(
"EMPTY"));
140 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
144 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
149 hit.modifyDamage(damage -> 0);
154 public void hitsplat(
Npc attacker,
Mob defender,
Hit hit) {
156 hit.modifyDamage(damage -> 0);
162 return new CombatHit[]{nextRangedHit(attacker, defender, 97, 0, 4)};
166 private static class MagicAttack
extends NpcMagicStrategy {
168 public MagicAttack() {
169 super(getDefinition(
"EMPTY"));
178 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
182 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
191 public void hitsplat(
Npc attacker,
Mob defender,
Hit hit) {
193 hit.modifyDamage(damage -> 0);
199 CombatHit hit = nextMagicHit(attacker, defender, 97, 0, 4);
200 hit.setAccurate(
true);