From 0bc95fa61eaaeb8783d48f4fb2643830bb135641 Mon Sep 17 00:00:00 2001 From: Adam <Adam@sigterm.info> Date: Thu, 4 Jun 2020 12:12:55 -0400 Subject: [PATCH] ge plugin: ignore offers being cleared on logout --- .../grandexchange/GrandExchangePlugin.java | 7 +++++++ .../GrandExchangePluginTest.java | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) 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 8e5e0793ce4..9de2574fc77 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 @@ -377,6 +377,13 @@ public void onGrandExchangeOfferChanged(GrandExchangeOfferChanged offerEvent) final int slot = offerEvent.getSlot(); final GrandExchangeOffer offer = offerEvent.getOffer(); + if (offer.getState() == GrandExchangeOfferState.EMPTY && client.getGameState() != GameState.LOGGED_IN) + { + // Trades are cleared by the client during LOGIN_SCREEN/HOPPING/LOGGING_IN, ignore those so we don't + // zero and re-submit the trade on login as an update + return; + } + log.debug("GE offer updated: state: {}, slot: {}, item: {}, qty: {}, login: {}", offer.getState(), slot, offer.getItemId(), offer.getQuantitySold(), loginBurstGeUpdates); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java index 4b513f4fa22..1f7e4d19931 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java @@ -33,10 +33,12 @@ import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import net.runelite.api.Client; +import net.runelite.api.GameState; import net.runelite.api.GrandExchangeOffer; import net.runelite.api.GrandExchangeOfferState; import net.runelite.api.ItemID; import net.runelite.api.WorldType; +import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.client.Notifier; import net.runelite.client.account.SessionManager; import net.runelite.client.config.ConfigManager; @@ -55,6 +57,7 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import org.mockito.Mock; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; @@ -218,4 +221,20 @@ public void testCancelTrade() assertEquals(10, trade.getTotal()); assertEquals(25, trade.getSpent()); } + + @Test + public void testHop() + { + when(client.getGameState()).thenReturn(GameState.HOPPING); + + GrandExchangeOffer grandExchangeOffer = mock(GrandExchangeOffer.class); + when(grandExchangeOffer.getState()).thenReturn(GrandExchangeOfferState.EMPTY); + + GrandExchangeOfferChanged grandExchangeOfferChanged = new GrandExchangeOfferChanged(); + grandExchangeOfferChanged.setOffer(grandExchangeOffer); + + grandExchangePlugin.onGrandExchangeOfferChanged(grandExchangeOfferChanged); + + verify(configManager, never()).unsetConfiguration(anyString(), anyString()); + } } \ No newline at end of file