57public class Venenatis
extends MultiStrategy {
58 private static final PrayerDrain PRAYER_DRAIN =
new PrayerDrain();
59 private static final Magic MAGIC =
new Magic();
60 private static final Web WEB =
new Web();
62 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(NpcMeleeStrategy.get(), NpcMeleeStrategy.get(), MAGIC, MAGIC, PRAYER_DRAIN, WEB);
63 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(MAGIC, MAGIC, PRAYER_DRAIN, WEB);
66 currentStrategy = MAGIC;
70 public boolean withinDistance(
Npc attacker,
Mob defender) {
71 if (currentStrategy == NpcMeleeStrategy.get() && !currentStrategy.withinDistance(attacker, defender) && !defender.prayer.
isActive(
Prayer.PROTECT_FROM_MAGIC)) {
72 currentStrategy = randomStrategy(NON_MELEE);
74 return currentStrategy.withinDistance(attacker, defender);
78 public boolean canAttack(
Npc attacker,
Mob defender) {
79 if (!currentStrategy.canAttack(attacker, defender)) {
80 currentStrategy = randomStrategy(FULL_STRATEGIES);
82 return currentStrategy.canAttack(attacker, defender);
91 currentStrategy.block(attacker, defender, hit, combatType);
96 public void finishOutgoing(
Npc attacker,
Mob defender) {
97 CombatStrategy<Npc> strategy = currentStrategy;
98 currentStrategy.finishOutgoing(attacker, defender);
100 if (strategy != currentStrategy)
103 if (!NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
104 currentStrategy = randomStrategy(NON_MELEE);
106 currentStrategy = randomStrategy(FULL_STRATEGIES);
110 private static final class Magic
extends NpcMagicStrategy {
124 return new CombatHit[]{nextMagicHit(attacker, defender)};
128 private static final class Web
extends NpcMagicStrategy {
137 public boolean canAttack(
Npc attacker,
Mob defender) {
138 return !defender.locking.
locked() && super.canAttack(attacker, defender);
142 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
143 super.hit(attacker, defender, hit);
144 if (!hit.isAccurate())
147 defender.getPlayer().message(
"Venenatis hurls her web at you, sticking you to the ground.");
148 defender.graphic(GRAPHIC);
149 defender.locking.lock(5,
LockType.WALKING);
153 public void finishOutgoing(
Npc attacker,
Mob defender) {
155 ((Venenatis) attacker.
getStrategy()).currentStrategy = RandomUtils.randomExclude(FULL_STRATEGIES, WEB);
159 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
170 return new CombatHit[]{nextMagicHit(attacker, defender, 50)};
174 private static final class PrayerDrain
extends NpcMagicStrategy {
180 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
181 if (!hit.isAccurate())
return;
184 protected void tick() {
191 defender.getPlayer().message(
"Your prayer has been drained!");
193 if (tick == ((
CombatHit) hit).getHitsplatDelay() - 1)
201 int hitDelay = getHitDelay(attacker, defender,
CombatType.MAGIC);
202 return new CombatHit[]{nextMagicHit(attacker, defender, 50, hitDelay, RandomUtils.inclusive(1, 3))};