60public class Vetion
extends MultiStrategy {
61 private static Earthquake EARTHQUAKE =
new Earthquake();
62 private static Magic MAGIC =
new Magic();
64 private Npc pet1, pet2;
65 private boolean spawnPets, secondTrans;
68 currentStrategy = MAGIC;
72 public boolean withinDistance(
Npc attacker,
Mob defender) {
73 if (!currentStrategy.withinDistance(attacker, defender)) {
74 currentStrategy = MAGIC;
76 return currentStrategy.withinDistance(attacker, defender);
80 public boolean canAttack(
Npc attacker,
Mob defender) {
81 if (!currentStrategy.withinDistance(attacker, defender)) {
82 currentStrategy = MAGIC;
84 return currentStrategy.canAttack(attacker, defender);
88 public boolean canOtherAttack(
Mob attacker,
Npc defender) {
89 if (pet1 !=
null || pet2 !=
null) {
91 attacker.getPlayer().message(
"You must kill his hellhounds before dealing damage!");
95 return currentStrategy.canOtherAttack(attacker, defender);
99 public void onDeath(
Mob attacker,
Npc defender,
Hit hit) {
100 if (pet1 !=
null) pet1.unregister();
101 if (pet2 !=
null) pet2.unregister();
105 public void preDeath(
Mob attacker,
Npc defender,
Hit hit) {
106 super.preDeath(attacker, defender, hit);
114 defender.setDead(
false);
116 defender.transform(6612);
117 defender.
speak(
"Do it again!");
122 public void execute() {
124 if (defender.isDead())
126 defender.transform(6611);
135 public void finishIncoming(
Mob attacker,
Npc defender) {
136 if (spawnPets || defender.getCurrentHealth() > defender.getMaximumHealth() / 2) {
141 defender.
speak(defender.id == 6611 ?
"Kill, my pets!" :
"Bahh! Go, dogs!!");
145 pet1 =
new Npc(6613, RandomUtils.random(innerBoundary)) {
147 public void appendDeath() {
152 pet2 =
new Npc(6613, RandomUtils.random(innerBoundary)) {
154 public void appendDeath() {
160 pet1 =
new Npc(6614, RandomUtils.random(innerBoundary)) {
162 public void appendDeath() {
167 pet2 =
new Npc(6614, RandomUtils.random(innerBoundary)) {
169 public void appendDeath() {
177 pet1.definition.setRespawnTime(-1);
178 pet2.definition.setRespawnTime(-1);
179 pet1.speak(
"GRRRRRRRRRRRR");
180 pet2.speak(
"GRRRRRRRRRRRR");
181 pet1.getCombat().attack(attacker);
182 pet2.getCombat().attack(attacker);
187 currentStrategy.block(attacker, defender, hit, combatType);
192 public void finishOutgoing(
Npc attacker,
Mob defender) {
193 currentStrategy.finishOutgoing(attacker, defender);
194 if (!NpcMeleeStrategy.get().withinDistance(attacker, defender)) {
195 currentStrategy = MAGIC;
196 }
else if (RandomUtils.success(0.25)) {
197 currentStrategy = EARTHQUAKE;
199 currentStrategy = NpcMeleeStrategy.get();
204 public int getAttackDelay(
Npc attacker,
Mob defender,
FightType fightType) {
208 private static final class Earthquake
extends NpcMeleeStrategy {
212 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
214 player.send(
new SendMessage(
"Vet'ion pummels the ground sending a shattering earthquake shockwave through you."));
215 if (player.equals(defender)) {
216 hit.setDamage(25 + RandomUtils.inclusive(20));
230 return new CombatHit[]{nextMeleeHit(attacker, defender)};
234 private static final class Magic
extends NpcMagicStrategy {
242 public void start(
Npc attacker,
Mob defender,
Hit[] hits) {
244 LinkedList<Position> positions =
new LinkedList<>(Arrays.asList(bounds));
245 for (
int index = 0; index < 3; index++) {
247 positions.remove(bound);
248 combatProjectile.getProjectile().ifPresent(projectile ->
World.
sendProjectile(attacker, bound, projectile));
251 player.speak(
"OUCH!");
252 player.damage(new Hit(RandomUtils.inclusive(45), HitIcon.MAGIC));
258 public void hit(
Npc attacker,
Mob defender,
Hit hit) {
259 hit.setAccurate(
false);
269 return new CombatHit[]{nextMagicHit(attacker, defender)};