RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PresetManager.java
1package com.osroyale.content.preset;
2
3import com.osroyale.Config;
4import com.osroyale.content.achievement.AchievementHandler;
5import com.osroyale.content.achievement.AchievementKey;
6import com.osroyale.content.dialogue.DialogueFactory;
7import com.osroyale.game.world.entity.combat.magic.Autocast;
8import com.osroyale.game.world.entity.mob.UpdateFlag;
9import com.osroyale.game.world.entity.mob.player.Player;
10import com.osroyale.game.world.entity.mob.player.PlayerRight;
11import com.osroyale.game.world.entity.mob.prayer.Prayer;
12import com.osroyale.game.world.entity.mob.prayer.PrayerBook;
13import com.osroyale.game.world.entity.skill.Skill;
14import com.osroyale.game.world.items.Item;
15import com.osroyale.net.packet.out.SendItemOnInterface;
16import com.osroyale.net.packet.out.SendMessage;
17import com.osroyale.net.packet.out.SendString;
18
19import java.util.ArrayList;
20import java.util.List;
21
63
64public class PresetManager {
65
67 public static final int SIZE = 10;
68
70 private final Player player;
71
73 public Preset[] preset = new Preset[SIZE];
74
76 public boolean deathOpen;
77
79 public boolean autoDeposit;
80
82 private boolean permitted;
83
85 public PresetManager(Player player) {
86 this.player = player;
87 }
88
90 public void open() {
91 open(getSlot());
92 }
93
95 public void open(int slot) {
96 if (valid(true)) {
97 permitted = slot <= PlayerRight.getPresetAmount(player);
98
99 if (!permitted) {
100 player.dialogueFactory.sendStatement("You need to be a donator for more preset slots!").execute();
101 return;
102 }
103
104 player.attributes.set("PRELOADING_SLOT_KEY", slot);
105 refresh();
106 player.interfaceManager.open(57_000);
107 }
108 }
109
111 public void refresh() {
112 int slot = getSlot();
113 int slotId = 57049;
114 for (int i = 0; i < SIZE; i++) {
115 boolean locked = i >= PlayerRight.getPresetAmount(player);
116 String defaultName = locked ? "<col=F23030>Locked" : (preset[i] == null ? "---" : preset[i].getName());
117 String name = (i == slot ? "<col=ffffff>" : "<col=39BF5B>") + defaultName;
118 player.send(new SendString(name, slotId));
119 slotId += 4;
120 }
121
122 int attack = preset[slot] == null ? 1 : player.skills.get(Skill.ATTACK).getMaxLevel();
123 int strength = preset[slot] == null ? 1 : player.skills.get(Skill.STRENGTH).getMaxLevel();
124 int defence = preset[slot] == null ? 1 : player.skills.get(Skill.DEFENCE).getMaxLevel();
125 int hitpoints = preset[slot] == null ? 10 : player.skills.get(Skill.HITPOINTS).getMaxLevel();
126 int prayer = preset[slot] == null ? 1 : player.skills.get(Skill.PRAYER).getMaxLevel();
127 int ranged = preset[slot] == null ? 1 : player.skills.get(Skill.RANGED).getMaxLevel();
128 int magic = preset[slot] == null ? 1 : player.skills.get(Skill.MAGIC).getMaxLevel();
129 player.send(new SendString(attack, 57014));
130 player.send(new SendString(strength, 57015));
131 player.send(new SendString(defence, 57016));
132 player.send(new SendString(hitpoints, 57017));
133 player.send(new SendString(prayer, 57018));
134 player.send(new SendString(ranged, 57019));
135 player.send(new SendString(magic, 57020));
136 player.send(new SendString("Cmb Lvl: " + player.skills.getCombatLevel(), 57041));
137
138 boolean prayers = preset[slot] == null || preset[slot].getPrayer() == null;
139 player.send(new SendString("<col=99E823>" + (prayers ? "Not " : "") + "Set!", 57013));
140 player.send(new SendString("<col=BD23E8>" + (preset[slot] == null ? "Not Set!" : preset[slot].getSpellbook().getName()), 57011));
141 player.send(new SendString("Available " + getTaken() + "/" + PlayerRight.getPresetAmount(player), 57024));
142 player.send(new SendItemOnInterface(57023, preset[slot] == null ? new Item[0] : preset[slot].getInventory()));
143 player.send(new SendItemOnInterface(57022, preset[slot] == null ? new Item[0] : preset[slot].getEquipment()));
144 }
145
147 public void name(String name) {
148 int slot = getSlot();
149
150 if (!permitted && slot >= 5) {
151 player.dialogueFactory.sendStatement("You need to be a donator for more preset slots!").execute();
152 return;
153 }
154
155 if (preset[slot] == null) {
156 preset[slot] = new Preset(name);
157 } else {
158 preset[slot].setName(name);
159 }
160 refresh();
161 player.send(new SendMessage("You have successfully titles preset #" + (slot + 1) + " to " + name + "."));
162 }
163
165 public void upload() {
166 if (!valid(false))
167 return;
168
169 int slot = getSlot();
170
171 if (!permitted && slot >= 5) {
172 player.dialogueFactory.sendStatement("You need to be a donator for more preset slots!").execute();
173 return;
174 }
175
176 if (preset[slot] == null) {
177 player.dialogueFactory.sendStatement("Please name your preset before uploading your gear!").execute();
178 return;
179 }
180
181 player.dialogueFactory.sendOption("Upload preset", () -> {
182 PrayerBook prayerBook = new PrayerBook();
183 if (player.quickPrayers != null) {
184 prayerBook.only(player.quickPrayers.getEnabled().toArray(new Prayer[0]));
185 }
186 preset[slot] = new Preset(preset[slot].getName(), player.inventory.toArray(), player.equipment.getEquipment(), prayerBook, player.spellbook);
187 player.send(new SendMessage("You have successfully uploaded your preset."));
188 refresh();
189 AchievementHandler.activate(player, AchievementKey.PRELOAD_SETUP, 1);
190 player.dialogueFactory.clear();
191 }, "Nevermind", () -> player.dialogueFactory.clear()).execute();
192 }
193
195 public void activate() {
196 if (!valid(false))
197 return;
198
199 int slot = getSlot();
200
201 if (preset[slot] == null) {
202 player.send(new SendMessage("You have nothing assigned to this preset!"));
203 return;
204 }
205
206 if (autoDeposit) {
207 player.bank.depositeInventory(false);
208 player.bank.depositeEquipment(false);
209 }
210
211 if (!player.inventory.isEmpty() || !player.equipment.isEmpty()) {
212 player.send(new SendMessage("Please deposit all items from your inventory and equipment."));
213 return;
214 }
215
216 player.updateFlags.add(UpdateFlag.APPEARANCE);
217
218 equipment(preset[slot]);
219 inventory(preset[slot]);
220
221 Autocast.reset(player);
222 player.prayer.reset();
223 player.equipment.login();
224 player.inventory.refresh();
225 player.quickPrayers.only(preset[slot].getPrayer().getEnabled().toArray(new Prayer[0]));
226 player.spellbook = preset[slot].getSpellbook();
227 player.interfaceManager.setSidebar(Config.MAGIC_TAB, player.spellbook.getInterfaceId());
228 player.send(new SendMessage("<col=ff0000>" + preset[slot].getName() + "</col> has been activated."));
229
230 if (player.pvpInstance) {
231 player.playerAssistant.setValueIcon();
232 }
233 }
234
235 private void equipment(Preset preset) {
236 List<String> requirements = new ArrayList<>();
237 for (Item item : preset.getEquipment()) {
238 if (item == null)
239 continue;
240
241 if (!hasItemRequirements(player, item.getRequirements())) {
242 requirements.add(item.getName());
243 continue;
244 }
245
246 int tabSlot = player.bank.computeIndexForId(item.getId());
247 if (tabSlot <= -1)
248 continue;
249
250 int tab = player.bank.tabForSlot(tabSlot);
251 if (tab <= -1)
252 continue;
253
254 int amount = player.bank.get(tabSlot).getAmount();
255 if (amount <= 0)
256 continue;
257
258 if (item.getAmount() > amount) {
259 item = item.copy();
260 item.setAmount(amount);
261 }
262
263 if (player.bank.remove(item.unnoted(), tabSlot, false)) {
264 if (!player.bank.indexOccupied(tabSlot)) {
265 player.bank.changeTabAmount(tab, -1);
266 player.bank.shift();
267 }
268
269 player.equipment.manualWear(item.copy());
270 }
271 }
272
273 if (!requirements.isEmpty()) {
274 player.send(new SendMessage("<col=ff0000>Some items could not be equipped due to not having the skill requirements."));
275 }
276 }
277
278 private void inventory(Preset preset) {
279 Item[] inventory = preset.getInventory();
280 for (int index = 0; index < inventory.length; index++) {
281 Item item = inventory[index];
282
283 if (item == null)
284 continue;
285
286 int tabSlot = player.bank.computeIndexForId(item.getId());
287 if (tabSlot <= -1)
288 continue;
289
290 int tab = player.bank.tabForSlot(tabSlot);
291 if (tab <= -1)
292 continue;
293
294 int amount = player.bank.get(tabSlot).getAmount();
295 if (amount <= 0)
296 continue;
297
298 if (item.getAmount() > amount) {
299 item = item.copy();
300 item.setAmount(amount);
301 }
302
303 if (player.bank.remove(item.unnoted(), tabSlot, false)) {
304 if (!player.bank.indexOccupied(tabSlot)) {
305 player.bank.changeTabAmount(tab, -1);
306 player.bank.shift();
307 }
308
309 player.inventory.set(index, item.copy(), false);
310 }
311 }
312 }
313
315 public void delete() {
316 if (!valid(false))
317 return;
318 int slot = getSlot();
319 if (preset[slot] == null)
320 return;
321 player.dialogueFactory.sendOption("Delete " + preset[slot].getName() + " (<col=f44259>CANT BE UNDONE</col>)", () -> {
322 preset[slot] = null;
323 refresh();
324 player.send(new SendMessage("You have successfully cleared preset #" + (slot + 1) + "."));
325 player.dialogueFactory.clear();
326 }, "Nevermind", () -> player.dialogueFactory.clear()).execute();
327 }
328
330 public void openSettings() {
331 DialogueFactory factory = player.dialogueFactory;
332 factory.sendOption("View current settings", () -> {
333 factory.onAction(() -> {
334 factory.sendInformationBox("<col=3E74B8>Preset Settings", "</col>Open on death: " + (deathOpen ? "<col=0E8716>Enabled" : "<col=F01818>Disabled"), "</col>Automatic deposit: " + (autoDeposit ? "<col=0E8716>Enabled" : "<col=F01818>Disabled")).execute();
335 });
336 }, "Toggle open on death", () -> factory.onAction(() -> {
338 factory.sendStatement("The preset interface will now " + (deathOpen ? "" : "<col=F01818>not</col> ") + "open on death", "automatically.").execute();
339 }), "Toggle automatic deposit", () -> {
340 factory.onAction(() -> {
342 factory.sendStatement("Your items will now " + (autoDeposit ? "" : "<col=F01818>not</col> ") + "automatically deposit on activation.").execute();
343 });
344 }, "Nevermind", () -> factory.onAction(factory::clear)).execute();
345 }
346
348 private boolean valid(boolean open) {
349 if (!open && !player.interfaceManager.isInterfaceOpen(57_000))
350 return false;
351 if (player.getCombat().inCombat()) {
352 player.send(new SendMessage("You can not do this while in combat!"));
353 return false;
354 }
355
356 return !player.positionChange;
357 }
358
360 private int getTaken() {
361 int taken = SIZE;
362 for (int i = 0; i < SIZE; i++) {
363 if (preset[i] != null || i >= PlayerRight.getPresetAmount(player)) {
364 taken--;
365 }
366 }
367 return taken;
368 }
369
371 private int getSlot() {
372 return player.attributes.get("PRELOADING_SLOT_KEY", Integer.class);
373 }
374
375 private boolean hasItemRequirements(Player player, int[] requirements) {
376 for (int i = 0; i < requirements.length; i++) {
377 int level = player.skills.getMaxLevel(i);
378 int required = requirements[i];
379
380 if (level < required) {
381 return false;
382 }
383 }
384 return true;
385 }
386}
static void activate(Player player, AchievementKey achievement)
final DialogueFactory sendStatement(String... lines)
final DialogueFactory sendOption(String option1, Runnable action1, String option2, Runnable action2)
final DialogueFactory onAction(Runnable action)