69public class ChaosFanatic
extends MultiStrategy {
70 private static RainAttack RAIN =
new RainAttack();
71 private static RangeAttack RANGE =
new RangeAttack();
72 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(RAIN, RANGE, NpcMeleeStrategy.get(), RANGE, NpcMeleeStrategy.get());
73 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(RAIN, RANGE, RANGE, RANGE, RANGE);
75 private static final String[] MESSAGES = {
78 "Develish Oxen Roll!",
79 "All your wilderness are belong to them!",
80 "AhehHeheuhHhahueHuUEehEahAH",
81 "I shall call him squidgy and he shall be my squidgy!",
84 public ChaosFanatic() {
85 currentStrategy = randomStrategy(NON_MELEE);
89 public boolean canAttack(
Npc attacker,
Mob defender) {
90 if (!currentStrategy.withinDistance(attacker, defender)) {
91 currentStrategy = randomStrategy(NON_MELEE);
93 return currentStrategy.canAttack(attacker, defender);
98 currentStrategy.block(attacker, defender, hit, combatType);
103 public void finishOutgoing(
Npc attacker,
Mob defender) {
104 currentStrategy.finishOutgoing(attacker, defender);
105 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
106 currentStrategy = randomStrategy(FULL_STRATEGIES);
108 currentStrategy = randomStrategy(NON_MELEE);
114 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
118 private static class RainAttack
extends NpcMagicStrategy {
119 public RainAttack() {
124 public void hit(
Npc attacker,
Mob defender,
Hit hit) { }
127 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
129 for (
int i = 0; i < 3; i++) {
130 int offsetX = defender.
getX() - attacker.
getX();
131 int offsetY = defender.
getY() - attacker.
getY();
132 if (i == 0 || i == 2) {
133 offsetX += i == 0 ? -1 : 1;
141 defender.damage(nextMagicHit(attacker, defender, 31));
143 Player player = defender.getPlayer();
144 Item[] equipment = player.equipment.toNonNullArray();
145 if (equipment.length == 0)
147 if (player.inventory.isFull()) {
153 player.equipment.unEquip(disarm);
154 player.send(
new SendMessage(
"Chaos fanatic has removed your " +
Utility.formatName(disarm.getEquipmentType().name().toLowerCase()) +
"."));
163 public void attack(
Npc attacker,
Mob defender,
Hit hit) {
168 CombatHit hit = nextMagicHit(attacker, defender, 31);
169 hit.setAccurate(
false);
174 public int modifyAccuracy(
Npc attacker,
Mob defender,
int roll) {
175 return roll + 50_000;
179 private static class RangeAttack
extends NpcRangedStrategy {
180 public RangeAttack() {
181 super(getDefinition(
"Chaos Fanatic Range"));