RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
NpcDeath.java
1package com.osroyale.game.world.entity.mob.npc;
2
3import com.osroyale.content.ActivityLog;
4import com.osroyale.content.achievement.AchievementHandler;
5import com.osroyale.content.achievement.AchievementKey;
6import com.osroyale.content.activity.impl.warriorguild.WarriorGuildUtility;
7import com.osroyale.content.clanchannel.content.ClanTaskKey;
8import com.osroyale.content.collectionlog.CollectionLog;
9import com.osroyale.content.event.EventDispatcher;
10import com.osroyale.content.event.impl.OnKillEvent;
11import com.osroyale.game.Animation;
12import com.osroyale.game.UpdatePriority;
13import com.osroyale.game.world.World;
14import com.osroyale.game.world.entity.combat.strategy.npc.boss.skotizo.SkotizoUtility;
15import com.osroyale.game.world.entity.mob.Mob;
16import com.osroyale.game.world.entity.mob.MobDeath;
17import com.osroyale.game.world.entity.mob.npc.drop.NpcDropManager;
18import com.osroyale.game.world.entity.mob.player.Player;
19import com.osroyale.game.world.items.Item;
20import com.osroyale.game.world.items.ground.GroundItem;
21import com.osroyale.util.Utility;
22
23import java.util.Arrays;
24
31public final class NpcDeath extends MobDeath<Npc> {
32 private Runnable runnable;
33
35 public NpcDeath(Npc mob) {
36 this(mob, () -> {
37 });
38 }
39
40 public NpcDeath(Npc mob, Runnable runnable) {
41 super(mob, mob.getDeathTime());
42 this.runnable = runnable;
43 }
44
45 @Override
46 public void preDeath(Mob killer) {
47 if (mob.definition == null) {
48 return;
49 }
50
51 mob.animate(new Animation(mob.definition.getDeathAnimation(), UpdatePriority.VERY_HIGH));
52 }
53
54 @Override
55 public void death() {
56 if (mob.owner != null || mob.definition == null || mob.definition.getRespawnTime() == -1) {
57 mob.unregister();
58 return;
59 }
60
61 mob.setVisible(false);
62 World.schedule(mob.definition.getRespawnTime(), () -> {
63 mob.move(mob.spawnPosition);
64 mob.npcAssistant.respawn();
65 mob.unvenom();
66 mob.unpoison();
67 });
68 }
69
70 @Override
71 public void postDeath(Mob killer) {
72 if (killer == null)
73 return;
74
75 /* Npc name. */
76 String name = mob.getName().toUpperCase().replace(" ", "_");
77
78 runnable.run();
79
80 switch (killer.getType()) {
81 case PLAYER:
82 Player playerKiller = killer.getPlayer();
83
84 CollectionLog.onNpcKill(playerKiller, mob.id);
85
86 /* Npc drop. */
87 NpcDropManager.drop(playerKiller, mob);
88
89 /* The slayer kill activator. */
90 playerKiller.slayer.activate(mob, 1);
91
92 /* The followers. */
93 if (playerKiller.followers.contains(mob.getNpc())) {
94 playerKiller.followers.remove(mob);
95 }
96
97 /* Activity. */
98 EventDispatcher.execute(playerKiller, new OnKillEvent(mob));
99
100 /* Warrior Guild */
101 if (Arrays.stream(WarriorGuildUtility.CYCLOPS).anyMatch(cyclop -> cyclop == mob.id) && (Utility.random(20) == 0)) {
102 Item defender = new Item(WarriorGuildUtility.getDefender(playerKiller), 1);
103 GroundItem.create(playerKiller, defender, mob.getPosition());
104 return;
105 }
106
107 /* Switch statement. */
108 switch (name) {
109 case "SKOTIZO":
110 SkotizoUtility.defeated(mob, playerKiller);
111 playerKiller.activityLogger.add(ActivityLog.SKOTIZO);
112 return;
113
114 case "ZULRAH":
115 playerKiller.activityLogger.add(ActivityLog.ZULRAH);
116 AchievementHandler.activate(playerKiller, AchievementKey.ZULRAH, 1);
117 return;
118
119 case "CERBERUS":
120 playerKiller.activityLogger.add(ActivityLog.CERBERUS);
121 AchievementHandler.activate(playerKiller, AchievementKey.CERBERUS, 1);
122 return;
123
124 case "GENERAL_GRAARDOR":
125 playerKiller.activityLogger.add(ActivityLog.GENERAL_GRAARDOR);
126 AchievementHandler.activate(playerKiller, AchievementKey.GRAARDOR, 1);
127 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.GENERAL_GRAARDOR, playerKiller.getName()));
128 return;
129
130 case "LAVA_DRAGON":
131 playerKiller.activityLogger.add(ActivityLog.LAVA_DRAGON);
132 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLACK_DRAGON, playerKiller.getName()));
133 return;
134
135 case "KRAKEN":
136 playerKiller.activityLogger.add(ActivityLog.KRAKEN);
137 return;
138
139 case "COMMANDER_ZILYANA":
140 playerKiller.activityLogger.add(ActivityLog.COMMANDER_ZILYANA);
142 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.COMMANDER_ZILYANA, playerKiller.getName()));
143 return;
144
145 case "KREE'ARRA":
146 playerKiller.activityLogger.add(ActivityLog.KREE_ARRA);
147 AchievementHandler.activate(playerKiller, AchievementKey.KREE, 1);
148 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.KREEARRA, playerKiller.getName()));
149 return;
150
151 case "K'RIL TSUTSAROTH":
152 playerKiller.activityLogger.add(ActivityLog.KRIL_TSUTSAROTH);
153 AchievementHandler.activate(playerKiller, AchievementKey.KRIL, 1);
154 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.KRIL_TSUTSAROTH, playerKiller.getName()));
155 return;
156
157 case "CORPOREAL_BEAST":
158 playerKiller.activityLogger.add(ActivityLog.CORPOREAL_BEAST);
159 return;
160
161 case "LIZARD_SHAMAN":
162 playerKiller.activityLogger.add(ActivityLog.LIZARD_SHAMAN);
163 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.LIZARD_SHAMAN, playerKiller.getName()));
164 return;
165
166 case "MITHRIL_DRAGON":
167 playerKiller.activityLogger.add(ActivityLog.MITHRIL_DRAGON);
168 return;
169
170 case "DARK_BEAST":
171 playerKiller.activityLogger.add(ActivityLog.DARK_BEAST);
172 return;
173
174 case "ANGRY_BARBARIAN_SPIRIT":
175 GroundItem.create(playerKiller, new Item(2404));
176 return;
177
178 case "HILL_GIANT":
179 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.HILL_GIANT, playerKiller.getName()));
180 return;
181
182 case "BLACK_DEMON":
183 case "BLACK_DEMONS":
184 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLACK_DEMON, playerKiller.getName()));
185 return;
186
187 case "GREATER_DEMON":
188 case "GREATER_DEMONS":
189 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.GREATER_DEMON, playerKiller.getName()));
190 return;
191
192 case "ROCK_CRAB":
193 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.ROCK_CRAB, playerKiller.getName()));
194 return;
195
196 case "SAND_CRAB":
197 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SAND_CRAB, playerKiller.getName()));
198 return;
199
200 case "BLUE_DRAGON":
201 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLUE_DRAGON, playerKiller.getName()));
202 return;
203
204 case "RED_DRAGON":
205 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.RED_DRAGON, playerKiller.getName()));
206 return;
207
208 case "GREEN_DRAGON":
209 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.GREEN_DRAGON, playerKiller.getName()));
210 return;
211
212 case "BLACK_DRAGON":
213 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLACK_DRAGON, playerKiller.getName()));
214 return;
215
216 case "KING_BLACK_DRAGON":
217 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLACK_DRAGON, playerKiller.getName()));
218 playerKiller.activityLogger.add(ActivityLog.KING_BLACK_DRAGON);
219 AchievementHandler.activate(playerKiller, AchievementKey.KING_BLACK_DRAGON);
220 return;
221
222 case "CHAOS_ELEMENTAL":
223 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CHAOS_ELEMENTAL, playerKiller.getName()));
224 playerKiller.activityLogger.add(ActivityLog.CHAOS_ELEMENTAL);
225 return;
226
227 case "CHAOS_FANATIC":
228 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CHAOS_FANATIC, playerKiller.getName()));
229 playerKiller.activityLogger.add(ActivityLog.CHAOS_FANATIC);
230 return;
231
232 case "CRAZY_ARCHAEOLOGIST":
233 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CRAZY_ARCHAEOLOGIST, playerKiller.getName()));
234 playerKiller.activityLogger.add(ActivityLog.CRAZY_ARCHAEOLOGIST);
235 return;
236
237 case "CALLISTO":
238 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CALLISTO, playerKiller.getName()));
239 playerKiller.activityLogger.add(ActivityLog.CALLISTO);
240 return;
241
242 case "SCORPIA":
243 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SCORPIA, playerKiller.getName()));
244 playerKiller.activityLogger.add(ActivityLog.SCORPIA);
245 return;
246
247 case "VET'ION":
248 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.VETION, playerKiller.getName()));
249 playerKiller.activityLogger.add(ActivityLog.VETION);
250 return;
251
252 case "VENANTIS":
253 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.VENNANTIS, playerKiller.getName()));
254 playerKiller.activityLogger.add(ActivityLog.VENANTIS);
255 return;
256
257 case "SKELETAL_WYVERN":
258 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SKELETAL_WYVERN, playerKiller.getName()));
259 playerKiller.activityLogger.add(ActivityLog.SKELETAL_WYVERN);
260 return;
261
262 case "ABYSSAL_DEMON":
263 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.ABYSSAL_DEMON, playerKiller.getName()));
264 playerKiller.activityLogger.add(ActivityLog.ABYSSAL_DEMON);
265 return;
266
267 case "GHOST":
268 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.GHOST, playerKiller.getName()));
269 return;
270
271 case "SKELETON":
272 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SKELETON, playerKiller.getName()));
273 return;
274
275 case "BLACK_KNIGHT":
276 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLACK_KNIGHT, playerKiller.getName()));
277 return;
278
279 case "BABY_BLUE_DRAGON":
280 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BABY_BLUE_DRAGON, playerKiller.getName()));
281 return;
282
283 case "BAT":
284 case "GIANT_BAT":
285 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BAT, playerKiller.getName()));
286 return;
287
288 case "CHAOS_DWARF":
289 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CHAOS_DWARF, playerKiller.getName()));
290 return;
291
292 case "MAGIC_AXE":
293 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.MAGIC_AXE, playerKiller.getName()));
294 return;
295
296 case "CAVE_CRAWLER":
297 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CAVE_CRAWLER, playerKiller.getName()));
298 return;
299
300 case "CRAWLING_HAND":
301 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CRAWLING_HAND, playerKiller.getName()));
302 return;
303
304 case "BANSHEE":
305 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BANSHEE, playerKiller.getName()));
306 return;
307
308 case "ICE_FIEND":
309 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.ICE_FIEND, playerKiller.getName()));
310 return;
311
312 case "HELLHOUND":
313 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.HELLHOUND, playerKiller.getName()));
314 return;
315
316 case "CAVE_HORROR":
317 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.CAVE_HORROR, playerKiller.getName()));
318 return;
319
320 case "STEEL_DRAGON":
321 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.STEEL_DRAGON, playerKiller.getName()));
322 return;
323
324 case "PYRE_FIEND":
325 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.PYRE_FIEND, playerKiller.getName()));
326 return;
327
328 case "FIRE_GIANT":
329 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.FIRE_GIANT, playerKiller.getName()));
330 return;
331
332 case "BASILISK":
333 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BASILISK, playerKiller.getName()));
334 return;
335
336 case "COCKATRICE":
337 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.COCKATRICE, playerKiller.getName()));
338 return;
339
340 case "DUST_DEVIL":
341 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.DUST_DEVIL, playerKiller.getName()));
342 return;
343
344 case "SPIRITUAL_RANGER":
345 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SPIRITUAL_RANGER, playerKiller.getName()));
346 return;
347
348 case "SPIRITUAL_WARRIOR":
349 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SPIRITUAL_WARRIOR, playerKiller.getName()));
350 return;
351
352 case "BLOODVELD":
353 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.BLOODVELD, playerKiller.getName()));
354 return;
355
356 case "SPIRITUAL_MAGE":
357 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SPIRITUAL_MAGE, playerKiller.getName()));
358 return;
359
360 case "NECHRYAEL":
361 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.NECHRYAEL, playerKiller.getName()));
362 return;
363
364 case "SMOKE_DEVIL":
365 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.SMOKE_DEVIL, playerKiller.getName()));
366 return;
367 case "REVENANT_IMP":
368 case "REVENANT_GOBLIN":
369 case "REVENANT_PYREFIEND":
370 case "REVENANT_HOBGOBLIN":
371 case "REVENANT_CYCLOPS":
372 case "REVENANT_HELLHOUND":
373 case "REVENANT_DEMON":
374 case "REVENANT_ORK":
375 case "REVENANT_DARK_BEAST":
376 case "REVENANT_DRAGON":
377 AchievementHandler.activate(playerKiller, AchievementKey.REVS);
378 return;
379 case "DEMONIC_GORILLA":
380 playerKiller.forClan(channel -> channel.activateTask(ClanTaskKey.DEMONIC_GORILLA, playerKiller.getName()));
381 return;
382 }
383 break;
384 case NPC:
385// Npc npcKiller = killer.getNpc();
386 break;
387 }
388 }
389}
static void activate(Player player, AchievementKey achievement)
void activate(Npc npc, int killAmount)
Definition Slayer.java:208
static void schedule(Task task)
Definition World.java:284
static GroundItem create(Player player, Item item)