RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
VorkathActivity.java
1package com.osroyale.content.activity.impl;
2
3import com.osroyale.content.ActivityLog;
4import com.osroyale.content.achievement.AchievementHandler;
5import com.osroyale.content.achievement.AchievementKey;
6import com.osroyale.content.activity.Activity;
7import com.osroyale.content.activity.ActivityDeathType;
8import com.osroyale.content.activity.ActivityType;
9import com.osroyale.content.event.impl.NpcInteractionEvent;
10import com.osroyale.game.world.World;
11import com.osroyale.game.world.entity.mob.Mob;
12import com.osroyale.game.world.entity.mob.npc.Npc;
13import com.osroyale.game.world.entity.mob.npc.NpcDeath;
14import com.osroyale.game.world.entity.mob.player.Player;
15import com.osroyale.game.world.position.Area;
16import com.osroyale.game.world.position.Position;
17import com.osroyale.util.Utility;
18
59
60public class VorkathActivity extends Activity {
61
63 private final Player player;
64
66 private Npc vorkath = new Npc(8059, new Position(2269, 4062));
67
69 private boolean summoned;
70
72 private VorkathActivity(Player player, int instance) {
73 super(1, instance);
74 this.player = player;
75 }
76
78 public static VorkathActivity create(Player player) {
79 VorkathActivity activity = new VorkathActivity(player, player.playerAssistant.instance());
80 activity.pause();
81 activity.add(player);
82 activity.add(activity.vorkath);
83 activity.vorkath.blockInteract = true;
84 activity.vorkath.blockFace = true;
85 activity.vorkath.locking.lock();
86 return activity;
87 }
88
89 @Override
90 protected void start() {
91 }
92
93 @Override
94 public void finish() {
95 boolean successfull = vorkath.isDead();
96
97 cleanup();
98 remove(player);
99
100 if (successfull) {
101 player.activityLogger.add(ActivityLog.VORKATH);
103 player.message("Congratulations, you have killed the Vorkath. Fight duration: @red@" + Utility.getTime(player.gameRecord.end(ActivityType.VORKATH)) + "</col>.");
104
105
106 restart(10, () -> {
107 if (Area.inVorkath(player)) {
108 create(player);
109 } else {
110 remove(player);
111 }
112 });
113 }
114 }
115
116 @Override
117 public void cleanup() {
118 remove(vorkath);
119 }
120
121 @Override
122 protected boolean clickNpc(Player player, NpcInteractionEvent event) {
123 if (event.getOpcode() == 0 && event.getNpc().id == 8059 && !summoned) {
124 summoned = true;
125 player.animate(827);
126 vorkath.animate(7950);
127
128 World.schedule(7, () -> {
129 vorkath.transform(8060, true);
130 World.schedule(1, () -> {
131 vorkath.face(player);
132 vorkath.blockInteract = false;
133 vorkath.blockFace = false;
134 vorkath.locking.unlock();
135 player.gameRecord.start();
136 });
137
138 });
139 return true;
140 }
141 return false;
142 }
143
144 @Override
145 public void onLogout(Player player) {
146 cleanup();
147 remove(player);
148 }
149
150 @Override
151 public void onDeath(Mob mob) {
152 if (mob.isNpc() && mob.getNpc().equals(vorkath)) {
153 World.schedule(new NpcDeath(mob.getNpc(), this::finish));
154 return;
155 }
156
157 super.onDeath(mob);
158 }
159
160 @Override
161 public void onRegionChange(Player player) {
162 if (!Area.inVorkath(player)) {
163 cleanup();
164 remove(player);
165 }
166 }
167
168 @Override
169 public ActivityDeathType deathType() {
170 return ActivityDeathType.PURCHASE;
171 }
172
173 @Override
174 public boolean canTeleport(Player player) {
175 return true;
176 }
177
178 @Override
179 public ActivityType getType() {
180 return ActivityType.VORKATH;
181 }
182}
static void activate(Player player, AchievementKey achievement)
Activity(int cooldown, int instance)
Definition Activity.java:92
static VorkathActivity create(Player player)
static void schedule(Task task)
Definition World.java:284
void face(GameObject object)
Definition Mob.java:326
static String getTime()
Definition Utility.java:178