60public class Wyrm
extends MultiStrategy {
61 private static final Melee MELEE =
new Melee();
62 private static final Magic MAGIC =
new Magic();
64 private static final CombatStrategy<Npc>[] STRATEGIES = createStrategyArray(MAGIC, MELEE);
65 private int attackCount = 0;
68 this.currentStrategy = randomStrategy(STRATEGIES);
72 public boolean withinDistance(
Npc attacker,
Mob defender) {
73 if (!currentStrategy.withinDistance(attacker, defender)) {
74 currentStrategy = MAGIC;
76 return currentStrategy.withinDistance(attacker, defender);
81 if (defender.definition.getId() == 8610) {
84 protected void execute() {
85 defender.transform(8611);
92 public boolean canAttack(
Npc attacker,
Mob defender) {
93 if (!currentStrategy.canAttack(attacker, defender)) {
94 currentStrategy = MAGIC;
95 }
else currentStrategy = MELEE;
96 return currentStrategy.canAttack(attacker, defender);
99 public void finishOutgoing(
Npc attacker,
Mob defender) {
100 currentStrategy.finishOutgoing(attacker, defender);
101 if (NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
102 currentStrategy = MELEE;
104 currentStrategy = MAGIC;
109 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
110 super.hit(attacker, defender, hit);
114 public int modifyDefensive(
Mob attacker,
Npc defender,
int roll) {
115 return (
int) (roll * 2.3);
118 private static final class Melee
extends NpcMeleeStrategy {
122 public int getAttackDistance(
Npc attacker,
FightType fightType) {
133 return new CombatHit[]{nextMeleeHit(attacker, defender)};
137 private static class Magic
extends NpcMagicStrategy {
141 super(getDefinition(
"Wyrm Magic"));
146 CombatHit combatHit = nextMagicHit(attacker, defender, 31);
147 combatHit.setAccurate(
true);
157 public int getAttackDistance(
Npc attacker,
FightType fightType) {