From 95bf0473f3f2fafcb8c26fb7c242ea552b437247 Mon Sep 17 00:00:00 2001 From: Matthew Hinds Date: Mon, 29 May 2023 14:32:01 +1200 Subject: [PATCH] Adjusted based on feedback --- .../processor/npc/StorageProcessor.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/client/processor/npc/StorageProcessor.java b/src/main/java/client/processor/npc/StorageProcessor.java index 6bfc55f001..6fa24a7399 100644 --- a/src/main/java/client/processor/npc/StorageProcessor.java +++ b/src/main/java/client/processor/npc/StorageProcessor.java @@ -50,14 +50,9 @@ public class StorageProcessor { ItemInformationProvider ii = ItemInformationProvider.getInstance(); Character chr = c.getPlayer(); Storage storage = chr.getStorage(); - byte mode = p.readByte(); + String gmBlockedStorageMessage = "You cannot use the storage as a GM of this level."; - if (chr.isGM() && chr.gmLevel() < YamlConfig.config.server.MINIMUM_GM_LEVEL_TO_USE_STORAGE) { - chr.dropMessage(1, "You cannot use the storage as a GM of this level."); - log.info(String.format("GM %s blocked from placing items in storage", chr.getName())); - c.sendPacket(PacketCreator.enableActions()); - return; - } + byte mode = p.readByte(); if (chr.getLevel() < 15) { chr.dropMessage(1, "You may only use the storage once you have reached level 15."); @@ -68,7 +63,7 @@ public class StorageProcessor { if (c.tryacquireClient()) { try { switch (mode) { - case 4: { // take out + case 4: { // Take out byte type = p.readByte(); byte slot = p.readByte(); if (slot < 0 || slot > storage.getSlots()) { // removal starts at zero @@ -77,8 +72,17 @@ public class StorageProcessor { c.disconnect(true, false); return; } + slot = storage.getSlot(InventoryType.getByType(type), slot); Item item = storage.getItem(slot); + + if (hasGMRestrictions(chr)) { + chr.dropMessage(1, gmBlockedStorageMessage); + log.info(String.format("GM %s blocked from using storage", chr.getName())); + chr.sendPacket(PacketCreator.enableActions()); + return; + } + if (item != null) { if (ii.isPickupRestricted(item.getItemId()) && chr.haveItemWithId(item.getItemId(), true)) { c.sendPacket(PacketCreator.getStorageError((byte) 0x0C)); @@ -114,7 +118,7 @@ public class StorageProcessor { } break; } - case 5: { // store + case 5: { // Store short slot = p.readShort(); int itemId = p.readInt(); short quantity = p.readShort(); @@ -127,6 +131,14 @@ public class StorageProcessor { c.disconnect(true, false); return; } + + if (hasGMRestrictions(chr)) { + chr.dropMessage(1, gmBlockedStorageMessage); + log.info(String.format("GM %s blocked from using storage", chr.getName())); + chr.sendPacket(PacketCreator.enableActions()); + return; + } + if (quantity < 1) { c.sendPacket(PacketCreator.enableActions()); return; @@ -180,16 +192,24 @@ public class StorageProcessor { } break; } - case 6: // arrange items + case 6: // Arrange items if (YamlConfig.config.server.USE_STORAGE_ITEM_SORT) { storage.arrangeItems(c); } c.sendPacket(PacketCreator.enableActions()); break; - case 7: { // meso + case 7: { // Mesos int meso = p.readInt(); int storageMesos = storage.getMeso(); int playerMesos = chr.getMeso(); + + if (hasGMRestrictions(chr)) { + chr.dropMessage(1, gmBlockedStorageMessage); + log.info(String.format("GM %s blocked from using storage", chr.getName())); + chr.sendPacket(PacketCreator.enableActions()); + return; + } + if ((meso > 0 && storageMesos >= meso) || (meso < 0 && playerMesos >= -meso)) { if (meso < 0 && (storageMesos - meso) < 0) { meso = Integer.MIN_VALUE + storageMesos; @@ -215,7 +235,7 @@ public class StorageProcessor { } break; } - case 8: // close... unless the player decides to enter cash shop! + case 8: // Close (unless the player decides to enter cash shop) storage.close(); break; } @@ -224,4 +244,8 @@ public class StorageProcessor { } } } + + private static boolean hasGMRestrictions(Character character) { + return character.isGM() && character.gmLevel() < YamlConfig.config.server.MINIMUM_GM_LEVEL_TO_USE_STORAGE; + } }