diff --git a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeTrade.java b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeTrade.java index 00a06f195e..e5dfe923d4 100644 --- a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeTrade.java +++ b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeTrade.java @@ -32,6 +32,7 @@ public class GrandExchangeTrade { private boolean buy; private boolean cancel; + private boolean login; private int itemId; private int quantity; private int total; diff --git a/http-service/src/main/java/net/runelite/http/service/ge/GrandExchangeController.java b/http-service/src/main/java/net/runelite/http/service/ge/GrandExchangeController.java index 2c2cc71f4c..6d4d8fd6ef 100644 --- a/http-service/src/main/java/net/runelite/http/service/ge/GrandExchangeController.java +++ b/http-service/src/main/java/net/runelite/http/service/ge/GrandExchangeController.java @@ -89,6 +89,7 @@ public class GrandExchangeController Trade trade = new Trade(); trade.setBuy(grandExchangeTrade.isBuy()); trade.setCancel(grandExchangeTrade.isCancel()); + trade.setLogin(grandExchangeTrade.isLogin()); trade.setItemId(grandExchangeTrade.getItemId()); trade.setQuantity(grandExchangeTrade.getQuantity()); trade.setTotal(grandExchangeTrade.getTotal()); diff --git a/http-service/src/main/java/net/runelite/http/service/ge/Trade.java b/http-service/src/main/java/net/runelite/http/service/ge/Trade.java index 62fa30f6ac..ff2d7be0cd 100644 --- a/http-service/src/main/java/net/runelite/http/service/ge/Trade.java +++ b/http-service/src/main/java/net/runelite/http/service/ge/Trade.java @@ -32,6 +32,7 @@ class Trade { private boolean buy; private boolean cancel; + private boolean login; private int itemId; private int quantity; private int total; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 54cc559e0a..5cddd9df7f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -116,6 +116,7 @@ import org.apache.commons.text.similarity.FuzzyScore; @Slf4j public class GrandExchangePlugin extends Plugin { + private static final int GE_SLOTS = 8; private static final int OFFER_CONTAINER_ITEM = 21; private static final int OFFER_DEFAULT_ITEM_ID = 6512; private static final OSBGrandExchangeClient CLIENT = new OSBGrandExchangeClient(); @@ -185,6 +186,7 @@ public class GrandExchangePlugin extends Plugin @Inject private GrandExchangeClient grandExchangeClient; + private boolean loginBurstGeUpdates; private static String machineUuid; private boolean wasFuzzySearch; @@ -375,6 +377,9 @@ public class GrandExchangePlugin extends Plugin final int slot = offerEvent.getSlot(); final GrandExchangeOffer offer = offerEvent.getOffer(); + log.debug("GE offer updated: state: {}, slot: {}, item: {}, qty: {}, login: {}", + offer.getState(), slot, offer.getItemId(), offer.getQuantitySold(), loginBurstGeUpdates); + ItemComposition offerItem = itemManager.getItemComposition(offer.getItemId()); boolean shouldStack = offerItem.isStackable() || offer.getTotalQuantity() > 1; BufferedImage itemImage = itemManager.getImage(offer.getItemId(), offer.getTotalQuantity(), shouldStack); @@ -383,6 +388,11 @@ public class GrandExchangePlugin extends Plugin submitTrade(slot, offer); updateConfig(slot, offer); + + if (loginBurstGeUpdates && slot == GE_SLOTS - 1) // slots are sent sequentially on login; this is the last one + { + loginBurstGeUpdates = false; + } } @VisibleForTesting @@ -407,6 +417,7 @@ public class GrandExchangePlugin extends Plugin grandExchangeTrade.setSpent(0); grandExchangeTrade.setOffer(offer.getPrice()); grandExchangeTrade.setWorldType(getGeWorldType()); + grandExchangeTrade.setLogin(loginBurstGeUpdates); log.debug("Submitting new trade: {}", grandExchangeTrade); grandExchangeClient.submit(grandExchangeTrade); @@ -436,6 +447,7 @@ public class GrandExchangePlugin extends Plugin grandExchangeTrade.setSpent(offer.getSpent()); grandExchangeTrade.setOffer(offer.getPrice()); grandExchangeTrade.setWorldType(getGeWorldType()); + grandExchangeTrade.setLogin(loginBurstGeUpdates); log.debug("Submitting cancelled: {}", grandExchangeTrade); grandExchangeClient.submit(grandExchangeTrade); @@ -457,6 +469,7 @@ public class GrandExchangePlugin extends Plugin grandExchangeTrade.setSpent(dspent); grandExchangeTrade.setOffer(offer.getPrice()); grandExchangeTrade.setWorldType(getGeWorldType()); + grandExchangeTrade.setLogin(loginBurstGeUpdates); log.debug("Submitting trade: {}", grandExchangeTrade); grandExchangeClient.submit(grandExchangeTrade); @@ -522,6 +535,7 @@ public class GrandExchangePlugin extends Plugin if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN) { panel.getOffersPanel().resetOffers(); + loginBurstGeUpdates = true; } }