RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
KrakenActivity.java
1package com.osroyale.content.activity.impl.kraken;
2
3
4import com.osroyale.Config;
5import com.osroyale.content.achievement.AchievementHandler;
6import com.osroyale.content.achievement.AchievementKey;
7import com.osroyale.content.activity.Activity;
8import com.osroyale.content.activity.ActivityType;
9import com.osroyale.content.event.impl.ObjectInteractionEvent;
10import com.osroyale.content.skill.impl.magic.teleport.Teleportation;
11import com.osroyale.content.skill.impl.magic.teleport.TeleportationData;
12import com.osroyale.game.Animation;
13import com.osroyale.game.UpdatePriority;
14import com.osroyale.game.world.World;
15import com.osroyale.game.world.entity.mob.Mob;
16import com.osroyale.game.world.entity.mob.npc.Npc;
17import com.osroyale.game.world.entity.mob.npc.NpcDeath;
18import com.osroyale.game.world.entity.mob.player.Player;
19import com.osroyale.game.world.position.Area;
20import com.osroyale.game.world.position.Position;
21import com.osroyale.net.packet.out.SendMessage;
22import com.osroyale.util.Utility;
23
24import java.util.HashSet;
25import java.util.Iterator;
26import java.util.Optional;
27import java.util.Set;
28
70
71public class KrakenActivity extends Activity {
72
74 private final Player player;
75
77 public Npc kraken = null;
78
80 public int count = 0;
81
83 private boolean completed;
84
86 private Set<Npc> tentacles = new HashSet<>();
87
89 private final KrakenActivityListener listener = new KrakenActivityListener(this);
90
92 private static final int[][] SPAWN = {
93 {493, 2276, 10038},
94 {493, 2276, 10034},
95 {496, 2278, 10035},
96 {493, 2283, 10038},
97 {493, 2283, 10034},
98 };
99
101 private KrakenActivity(Player player, int instance) {
102 super(1, instance);
103 this.player = player;
104 }
105
107 public static KrakenActivity create(Player player) {
108 KrakenActivity minigame = new KrakenActivity(player, player.playerAssistant.instance());
109 minigame.add(player);
110 player.gameRecord.start();
111 minigame.count = 0;
112 return minigame;
113 }
114
116 public void transform(Npc npc, int transform) {
117 npc.transform(transform);
118 npc.npcAssistant.login();
119 if (transform == 5535)
120 count++;
121 if (transform == 494)
122 npc.animate(new Animation(7135, UpdatePriority.HIGH));
123 npc.getCombat().attack(player);
124 }
125
126 @Override
127 public void onDeath(Mob mob) {
128 if (mob.isPlayer() && mob.equals(player)) {
129 player.send(new SendMessage("Better luck next time old chap!"));
130 cleanup();
131 remove(player);
132 return;
133 }
134 if (mob.isNpc() && mob.getNpc().id == 494) {
135 World.schedule(new NpcDeath(mob.getNpc(), () -> {
136 completed = true;
137 finish();
138 }));
139 return;
140 }
141 super.onDeath(mob);
142 }
143
144 @Override
145 public void add(Mob mob) {
146 super.add(mob);
147 if (mob.isNpc()) {
148 if (mob.getNpc().id == 496) {
149 kraken = mob.getNpc();
150 } else {
151 tentacles.add(mob.getNpc());
152 }
153 mob.locking.lock();
154 }
155 }
156
157 @Override
158 public void remove(Mob mob) {
159 if (!mob.isNpc()) {
160 super.remove(mob);
161 return;
162 }
163 int id = mob.getNpc().id;
164 if (id == 496) {
165 kraken = null;
166 } else {
167 tentacles.remove(mob.getNpc());
168 }
169 super.remove(mob);
170 }
171
172 @Override
173 protected void start() {
174 for (int[] aSPAWN : SPAWN) {
175 Npc npc = new Npc(aSPAWN[0], new Position(aSPAWN[1], aSPAWN[2]));
176 npc.owner = player;
177 add(npc);
178 }
179 player.face(kraken.getPosition());
180 pause();
181 }
182
183 @Override
184 public void onLogout(Player player) {
185 player.move(Config.DEFAULT_POSITION);
186 cleanup();
187 finish();
188 }
189
190 @Override
191 public void onRegionChange(Player player) {
192 if (!Area.inKraken(player)) {
193 cleanup();
194 finish();
195 }
196 }
197
198 @Override
199 public boolean canTeleport(Player player) {
200 return true;
201 }
202
203 @Override
204 public void finish() {
205 cleanup();
206
207 if (completed) {
209 player.send(new SendMessage("Congratulations, you have killed the Kraken. Fight duration: @red@" + Utility.getTime(player.gameRecord.end(ActivityType.KRAKEN)) + "</col>."));
210 } else {
211 player.gameRecord.end(ActivityType.KRAKEN, false);
212 }
213
214 remove(player);
215 World.schedule(10, () -> {
216 if(Area.inKraken(player)) {
217 KrakenActivity.create(player);
218 }
219 });
220 }
221
222 @Override
223 public void cleanup() {
224 count = 0;
225 if (kraken != null && kraken.isRegistered())
226 kraken.unregister();
227 Iterator<Npc> it = tentacles.iterator();
228 while (it.hasNext()) {
229 Npc npc = it.next();
230 npc.animate(npc.definition.getDeathAnimation());
231 World.schedule(3, npc::unregister);
232 it.remove();
233 }
234 }
235
236 @Override
237 protected boolean clickObject(Player player, ObjectInteractionEvent event) {
238 if (event.getObject().getId() != 538)
239 return false;
240 player.dialogueFactory.sendOption("Restart Kraken instance", () -> {
241 remove(player);
242 Teleportation.teleport(player, new Position(2280, 10031, 0), TeleportationData.CREVICE, () -> KrakenActivity.create(player));
243 }, "Leave Kraken Instance", () -> {
244 remove(player);
245 Teleportation.activateOverride(player, Config.DEFAULT_POSITION, TeleportationData.CREVICE);
246 }).execute();
247 return true;
248 }
249
250 @Override
251 public ActivityType getType() {
252 return ActivityType.KRAKEN;
253 }
254
255 @Override
256 protected Optional<KrakenActivityListener> getListener() {
257 return Optional.of(listener);
258 }
259}
static final Position DEFAULT_POSITION
Definition Config.java:235
static void activate(Player player, AchievementKey achievement)
Activity(int cooldown, int instance)
Definition Activity.java:92
final DialogueFactory sendOption(String option1, Runnable action1, String option2, Runnable action2)
static void schedule(Task task)
Definition World.java:284
static String getTime()
Definition Utility.java:178