RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
RecipeForDisaster.java
1package com.osroyale.content.activity.impl.recipefordisaster;
2
3import com.osroyale.content.activity.Activity;
4import com.osroyale.content.activity.ActivityDeathType;
5import com.osroyale.content.activity.ActivityType;
6import com.osroyale.content.activity.panel.ActivityPanel;
7import com.osroyale.game.Animation;
8import com.osroyale.game.Graphic;
9import com.osroyale.game.world.World;
10import com.osroyale.game.world.entity.mob.Mob;
11import com.osroyale.game.world.entity.mob.npc.Npc;
12import com.osroyale.game.world.entity.mob.npc.NpcDeath;
13import com.osroyale.game.world.entity.mob.player.Player;
14import com.osroyale.game.world.items.Item;
15import com.osroyale.game.world.items.ground.GroundItem;
16import com.osroyale.game.world.position.Area;
17import com.osroyale.game.world.position.Position;
18import com.osroyale.net.packet.out.SendEntityHintArrow;
19import com.osroyale.net.packet.out.SendMessage;
20import com.osroyale.util.RandomUtils;
21import com.osroyale.util.Utility;
22
65
66public class RecipeForDisaster extends Activity {
67
69 private final Player player;
70
72 private Npc monster;
73
75 private RecipeForDisasterData wave = RecipeForDisasterData.AGRITH_NA_NA;
76
78 private RecipeForDisaster(Player player, int instance) {
79 super(10, instance);
80 this.player = player;
81 }
82
84 public static RecipeForDisaster create(Player player) {
85 RecipeForDisaster minigame = new RecipeForDisaster(player, player.playerAssistant.instance());
86 ActivityPanel.update(player, -1, "Recipe For Disaster", "Good Luck, " + player.getName() + "!", "Wave starting in 6 seconds");
87 player.move(new Position(1899, 5356, 2));
88 GroundItem.create(player, new Item(1580), player.getPosition());
89 player.message("Ice gloves have been dropped for you to fight Flambleed!");
90 player.gameRecord.start();
91 player.playerAssistant.restore();
92 minigame.add(player);
93 minigame.resetCooldown();
94 GroundItem.create(player, new Item(1580), player.getPosition());
95 return minigame;
96 }
97
98 @Override
99 public void update() {
100 if (wave == null) {
101 ActivityPanel.update(player, 100, "Recipe For Disaster", new Item(7462), "</col>Wave: <col=FF5500>" + RecipeForDisasterData.values().length + "/" + RecipeForDisasterData.values().length, "</col>Boss: <col=FF5500>None!", "</col>Time: <col=FF5500>" + Utility.getTime(System.currentTimeMillis() - player.gameRecord.time));
102 return;
103 }
104 int progress = (int) Utility.getPercentageAmount(wave.ordinal(), RecipeForDisasterData.values().length);
105 int display = 7453 + wave.gloves;
106 String npc = monster == null ? "" : monster.getName();
107 ActivityPanel.update(player, progress, "Recipe For Disaster", new Item(display), "</col>Wave: <col=FF5500>" + wave.ordinal() + "/" + RecipeForDisasterData.values().length, "</col>Boss: <col=FF5500>" + npc, "</col>Time: <col=FF5500>" + Utility.getTime(System.currentTimeMillis() - player.gameRecord.time));
108 }
109
110 @Override
111 protected void start() {
112 if (wave == null) {
114 return;
115 }
116 if (player.locking.locked()) {
117 return;
118 }
119 Position spawn = new Position(1899, 5356, 2);
120 Position[] boundaries = Utility.getInnerBoundaries(spawn, 5, 5);
121
122 Npc npc = new Npc(wave.npc, RandomUtils.random(boundaries));
123 npc.owner = player;
124 add(monster = npc);
125
126 player.send(new SendEntityHintArrow(npc));
127 monster.getCombat().attack(player);
128 pause();
129 }
130
131 @Override
132 public void finish() {
133 cleanup();
134 int reward;
135 if (wave == null) {
136 long time = player.gameRecord.end(ActivityType.RECIPE_FOR_DISASTER);
137 reward = RecipeForDisasterData.CULINAROMANCER.gloves;
138 player.send(new SendMessage("You have completed the Recipe For Disaster activity. Final time: @red@" + Utility.getTime(time) + "</col>."));
139 } else {
140 reward = wave.gloves;
141 player.send(new SendMessage("RIP"));
142 }
143 if (reward > player.glovesTier) {
144 player.glovesTier = reward;
145 }
146 player.move(new Position(3080, 3498, 0));
147 player.dialogueFactory.sendNpcChat(6526, "You have been rewarded for your efforts.", "Check my store to see your available gloves.").execute();
148 remove(player);
149 }
150
151 @Override
152 public void cleanup() {
153 if (monster != null) {
154 player.send(new SendEntityHintArrow(monster, true));
155 remove(monster);
156 }
157 ActivityPanel.clear(player);
158 }
159
160 @Override
161 public boolean canTeleport(Player player) {
162 return true;
163 }
164
165 @Override
166 public void onRegionChange(Player player) {
167 if (!Area.inRFD(player)) {
168 cleanup();
169 remove(player);
170 }
171 }
172
173 @Override
174 public boolean canUsePrayer(Player player) {
175 player.message("You can not use prayers here!");
176 return false;
177 }
178
179 @Override
180 public void onLogout(Player player) {
181 finish();
182 }
183
184
185 @Override
186 public ActivityDeathType deathType() {
187 return ActivityDeathType.PURCHASE;
188 }
189
190 @Override
191 public void onDeath(Mob mob) {
192 if (mob.isPlayer()) {
193 cleanup();
194 remove(mob);
195 mob.move(new Position(3080, 3498, 0));
196 mob.animate(Animation.RESET, true);
197 mob.graphic(Graphic.RESET, true);
198 return;
199 }
200 if (mob.isNpc()) {
201 player.send(new SendEntityHintArrow(mob, true));
202 World.schedule(new NpcDeath(mob.getNpc()));
203 wave = wave.getNext();
205 }
206 }
207
208 @Override
209 public ActivityType getType() {
210 return ActivityType.RECIPE_FOR_DISASTER;
211 }
212}
Activity(int cooldown, int instance)
Definition Activity.java:92
static void update(Player player, int amount, String title, String footer, String... strings)
static void schedule(Task task)
Definition World.java:284
void move(Position position)
Definition Mob.java:377
static GroundItem create(Player player, Item item)
static String getTime()
Definition Utility.java:178
static double getPercentageAmount(int progress, int total)
Definition Utility.java:73