67public class CrazyArchaeologist
extends MultiStrategy {
68 private static RainAttack RAIN =
new RainAttack();
69 private static RangeAttack RANGE =
new RangeAttack();
70 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RAIN, RANGE, NpcMeleeStrategy.get(), RANGE, NpcMeleeStrategy.get());
71 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RAIN, RANGE, RANGE, RANGE, RANGE);
73 private static final String[] MESSAGES = {
74 "I'm Bellock - respect me!",
76 "No-one messes with Bellock's dig!",
77 "These ruins are mine!",
78 "Taste my knowledge!",
79 "You belong in a museum!",
82 public CrazyArchaeologist() {
83 currentStrategy = randomStrategy(NON_MELEE);
87 public boolean canAttack(
Npc attacker,
Mob defender) {
88 if (!currentStrategy.withinDistance(attacker, defender)) {
89 currentStrategy = randomStrategy(NON_MELEE);
91 return currentStrategy.canAttack(attacker, defender);
96 currentStrategy.block(attacker, defender, hit, combatType);
101 public void finishOutgoing(
Npc attacker,
Mob defender) {
102 currentStrategy.finishOutgoing(attacker, defender);
103 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
104 currentStrategy = randomStrategy(FULL_STRATEGIES);
106 currentStrategy = randomStrategy(NON_MELEE);
108 if (currentStrategy != RAIN) {
114 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
118 private static class RainAttack
extends NpcMagicStrategy {
125 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
127 attacker.
speak(
"Rain of knowledge!");
128 for (
int i = 0; i < 3; i++) {
129 int offsetX = defender.
getX() - attacker.
getX();
130 int offsetY = defender.
getY() - attacker.
getY();
131 if (i == 0 || i == 2) {
132 offsetX += i == 0 ? -1 : 1;
139 defender.damage(nextMagicHit(attacker, defender, 23, combatProjectile));
147 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
151 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
156 CombatHit hit = nextMagicHit(attacker, defender, 23, combatProjectile);
157 hit.setAccurate(
false);
162 public int modifyAccuracy(
Npc attacker,
Mob defender,
int roll) {
163 return roll + 50_000;
168 private static class RangeAttack
extends NpcRangedStrategy {
169 public RangeAttack() {
170 super(getDefinition(
"Archaeologist Range"));