RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
Scorpia.java
1package com.osroyale.game.world.entity.combat.strategy.npc.boss.scorpia;
2
3import com.google.common.base.Stopwatch;
4import com.osroyale.game.Animation;
5import com.osroyale.game.world.entity.combat.CombatType;
6import com.osroyale.game.world.entity.combat.attack.FightType;
7import com.osroyale.game.world.entity.combat.hit.CombatHit;
8import com.osroyale.game.world.entity.combat.hit.Hit;
9import com.osroyale.game.world.entity.combat.projectile.CombatProjectile;
10import com.osroyale.game.world.entity.combat.strategy.npc.MultiStrategy;
11import com.osroyale.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
12import com.osroyale.game.world.entity.mob.Mob;
13import com.osroyale.game.world.entity.mob.movement.waypoint.Waypoint;
14import com.osroyale.game.world.entity.mob.npc.Npc;
15import com.osroyale.game.world.position.Position;
16import com.osroyale.util.RandomUtils;
17import com.osroyale.util.Utility;
18
48
49public class Scorpia extends MultiStrategy {
50 private boolean hasGuardians;
51
52 public Scorpia() {
53 currentStrategy = new Melee();
54 }
55
56 @Override
57 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
58 currentStrategy.block(attacker, defender, hit, combatType);
59 defender.getCombat().attack(attacker);
60 }
61
62 @Override
63 public void hit(Npc attacker, Mob defender, Hit hit) {
64 super.hit(attacker, defender, hit);
65 if (hasGuardians || attacker.getCurrentHealth() >= 100) {
66 return;
67 }
68 hasGuardians = true;
69 for (int i = 0; i < 2; i++) {
70 Position spawn = RandomUtils.random(Utility.getInnerBoundaries(attacker));
71 Npc guardian = new Guardian(spawn, attacker);
72 guardian.register();
73 guardian.definition.setRespawnTime(-1);
74 }
75 }
76
77 @Override
78 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
79 return attacker.definition.getAttackDelay();
80 }
81
82 private class GuardianWaypoint extends Waypoint {
83 final Npc scorpia;
84
85 GuardianWaypoint(Guardian guardian, Npc scorpia) {
86 super(guardian, scorpia);
87 this.scorpia = scorpia;
88 }
89
90 @Override
91 protected void onDestination() {
92 CombatProjectile.getDefinition("Scorpia guardian").getProjectile().ifPresent(projectile -> projectile.send(mob, scorpia));
93 mob.animate(new Animation(6261));
94 scorpia.heal(2);
95 ((Guardian) mob).lastHeal.reset();
96 }
97 }
98
99 private class Guardian extends Npc {
100 private final Stopwatch lastHeal = Stopwatch.createStarted();
101
102 private Guardian(Position spawn, Npc scorpia) {
103 super(6617, spawn);
104 setWaypoint(new Waypoint(this, scorpia) {
105 @Override
106 protected void onDestination() {
107 CombatProjectile.getDefinition("Scorpia guardian").getProjectile().ifPresent(projectile -> projectile.send(mob, scorpia));
108 lastHeal.reset();
109 lastHeal.start();
110 mob.animate(new Animation(6261));
111 scorpia.heal(2);
112 }
113 });
114 }
115
116 @Override
117 public void sequence() {
118 super.sequence();
119 long millis = lastHeal.elapsed().toMillis();
120 if (millis > 15_000) {
121 unregister();
122 }
123 }
124 }
125
126 private static final class Melee extends NpcMeleeStrategy {
127 @Override
128 public CombatHit[] getHits(Npc attacker, Mob defender) {
129 return new CombatHit[]{nextMeleeHit(attacker, defender, 16)};
130 }
131 }
132}