67 public static final int SIZE = 10;
70 private final Player player;
82 private boolean permitted;
95 public void open(
int slot) {
97 permitted = slot <=
PlayerRight.getPresetAmount(player);
100 player.dialogueFactory.sendStatement(
"You need to be a donator for more preset slots!").execute();
104 player.attributes.set(
"PRELOADING_SLOT_KEY", slot);
106 player.interfaceManager.open(57_000);
112 int slot = getSlot();
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;
122 int attack =
preset[slot] ==
null ? 1 : player.skills.get(
Skill.
ATTACK).getMaxLevel();
124 int defence =
preset[slot] ==
null ? 1 : player.skills.get(
Skill.
DEFENCE).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();
132 player.send(
new SendString(hitpoints, 57017));
136 player.send(
new SendString(
"Cmb Lvl: " + player.skills.getCombatLevel(), 57041));
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));
148 int slot = getSlot();
150 if (!permitted && slot >= 5) {
151 player.dialogueFactory.sendStatement(
"You need to be a donator for more preset slots!").execute();
155 if (
preset[slot] ==
null) {
161 player.send(
new SendMessage(
"You have successfully titles preset #" + (slot + 1) +
" to " +
name +
"."));
169 int slot = getSlot();
171 if (!permitted && slot >= 5) {
172 player.dialogueFactory.sendStatement(
"You need to be a donator for more preset slots!").execute();
176 if (
preset[slot] ==
null) {
177 player.dialogueFactory.sendStatement(
"Please name your preset before uploading your gear!").execute();
181 player.dialogueFactory.sendOption(
"Upload preset", () -> {
183 if (player.quickPrayers !=
null) {
184 prayerBook.
only(player.quickPrayers.getEnabled().toArray(
new Prayer[0]));
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."));
190 player.dialogueFactory.clear();
191 },
"Nevermind", () -> player.dialogueFactory.clear()).execute();
199 int slot = getSlot();
201 if (
preset[slot] ==
null) {
202 player.send(
new SendMessage(
"You have nothing assigned to this preset!"));
207 player.bank.depositeInventory(
false);
208 player.bank.depositeEquipment(
false);
211 if (!player.inventory.isEmpty() || !player.equipment.isEmpty()) {
212 player.send(
new SendMessage(
"Please deposit all items from your inventory and equipment."));
216 player.updateFlags.add(
UpdateFlag.APPEARANCE);
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."));
230 if (player.pvpInstance) {
231 player.playerAssistant.setValueIcon();
235 private void equipment(
Preset preset) {
236 List<String> requirements =
new ArrayList<>();
237 for (Item item : preset.getEquipment()) {
241 if (!hasItemRequirements(player, item.getRequirements())) {
242 requirements.add(item.getName());
250 int tab = player.bank.tabForSlot(tabSlot);
254 int amount = player.bank.
get(tabSlot).getAmount();
258 if (item.getAmount() > amount) {
260 item.setAmount(amount);
263 if (player.bank.
remove(item.unnoted(), tabSlot,
false)) {
273 if (!requirements.isEmpty()) {
274 player.send(
new SendMessage(
"<col=ff0000>Some items could not be equipped due to not having the skill requirements."));
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];
286 int tabSlot = player.bank.computeIndexForId(item.getId());
290 int tab = player.bank.tabForSlot(tabSlot);
294 int amount = player.bank.get(tabSlot).getAmount();
298 if (item.getAmount() > amount) {
300 item.setAmount(amount);
303 if (player.bank.remove(item.unnoted(), tabSlot,
false)) {
304 if (!player.bank.indexOccupied(tabSlot)) {
305 player.bank.changeTabAmount(tab, -1);
309 player.inventory.set(index, item.copy(),
false);
318 int slot = getSlot();
321 player.dialogueFactory.sendOption(
"Delete " +
preset[slot].getName() +
" (<col=f44259>CANT BE UNDONE</col>)", () -> {
324 player.send(
new SendMessage(
"You have successfully cleared preset #" + (slot + 1) +
"."));
325 player.dialogueFactory.clear();
326 },
"Nevermind", () -> player.dialogueFactory.clear()).execute();
332 factory.
sendOption(
"View current settings", () -> {
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();
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", () -> {
348 private boolean valid(
boolean open) {
352 player.send(
new SendMessage(
"You can not do this while in combat!"));
356 return !player.positionChange;
360 private int getTaken() {
362 for (
int i = 0; i <
SIZE; i++) {
363 if (
preset[i] !=
null || i >= PlayerRight.getPresetAmount(player)) {
371 private int getSlot() {
372 return player.attributes.get(
"PRELOADING_SLOT_KEY", Integer.class);
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];
380 if (level < required) {
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)
final DialogueFactory execute()
PresetManager(Player player)