grandexchange: Shows the quantity you can buy on the GE WIP (#1042)
* Add measures to ensure positions of strings when togg:ling configItem change method of gathering price per item change math.round to math.floor, errors when certain numbers are rounded fix * implement geBuilt script event, clear values when item isn't visible * Update * Update pos number * Update
This commit is contained in:
@@ -49,6 +49,11 @@ public enum Varbits
|
|||||||
*/
|
*/
|
||||||
CHAT_SCROLLBAR_ON_LEFT(6374),
|
CHAT_SCROLLBAR_ON_LEFT(6374),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Grand Exchange
|
||||||
|
*/
|
||||||
|
GRAND_EXCHANGE_PRICE_PER_ITEM(4398),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runepouch
|
* Runepouch
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -96,4 +96,15 @@ public interface GrandExchangeConfig extends Config
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
position = 7,
|
||||||
|
keyName = "enableAfford",
|
||||||
|
name = "Enable Afford quantity on GE",
|
||||||
|
description = "Shows the quantity you can buy on the GE"
|
||||||
|
)
|
||||||
|
default boolean enableAfford()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,14 +48,18 @@ import net.runelite.api.Client;
|
|||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.GrandExchangeOffer;
|
import net.runelite.api.GrandExchangeOffer;
|
||||||
import net.runelite.api.GrandExchangeOfferState;
|
import net.runelite.api.GrandExchangeOfferState;
|
||||||
|
import net.runelite.api.InventoryID;
|
||||||
|
import net.runelite.api.Item;
|
||||||
|
import net.runelite.api.ItemContainer;
|
||||||
import net.runelite.api.ItemDefinition;
|
import net.runelite.api.ItemDefinition;
|
||||||
|
import static net.runelite.api.ItemID.COINS_995;
|
||||||
import net.runelite.api.MenuAction;
|
import net.runelite.api.MenuAction;
|
||||||
import net.runelite.api.MenuEntry;
|
import net.runelite.api.MenuEntry;
|
||||||
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
import net.runelite.api.events.FocusChanged;
|
import net.runelite.api.events.FocusChanged;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
|
||||||
import net.runelite.api.events.GrandExchangeOfferChanged;
|
import net.runelite.api.events.GrandExchangeOfferChanged;
|
||||||
import net.runelite.api.events.MenuEntryAdded;
|
import net.runelite.api.events.MenuEntryAdded;
|
||||||
import net.runelite.api.events.ScriptCallbackEvent;
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
@@ -99,7 +103,8 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
private static final OSBGrandExchangeClient CLIENT = new OSBGrandExchangeClient();
|
private static final OSBGrandExchangeClient CLIENT = new OSBGrandExchangeClient();
|
||||||
private static final String OSB_GE_TEXT = "<br>OSBuddy Actively traded price: ";
|
private static final String OSB_GE_TEXT = "<br>OSBuddy Actively traded price: ";
|
||||||
|
|
||||||
private static final String BUY_LIMIT_GE_TEXT = "<br>Buy limit: ";
|
private static final String BUY_LIMIT_GE_TEXT = "Buy limit: ";
|
||||||
|
private static final String AFFORD_GE_TEXT = "<br>Afford: ";
|
||||||
private static final Gson GSON = new Gson();
|
private static final Gson GSON = new Gson();
|
||||||
private static final TypeToken<Map<Integer, Integer>> BUY_LIMIT_TOKEN = new TypeToken<Map<Integer, Integer>>()
|
private static final TypeToken<Map<Integer, Integer>> BUY_LIMIT_TOKEN = new TypeToken<Map<Integer, Integer>>()
|
||||||
{
|
{
|
||||||
@@ -162,6 +167,13 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
|
|
||||||
private GrandExchangeClient grandExchangeClient;
|
private GrandExchangeClient grandExchangeClient;
|
||||||
|
|
||||||
|
private int coins = 0;
|
||||||
|
private int lastAmount = -1;
|
||||||
|
private int lastItem = -1;
|
||||||
|
|
||||||
|
private int osbItem = -1;
|
||||||
|
private String osbText = "";
|
||||||
|
|
||||||
private SavedOffer getOffer(int slot)
|
private SavedOffer getOffer(int slot)
|
||||||
{
|
{
|
||||||
String offer = configManager.getConfiguration("geoffer." + client.getUsername().toLowerCase(), Integer.toString(slot));
|
String offer = configManager.getConfiguration("geoffer." + client.getUsername().toLowerCase(), Integer.toString(slot));
|
||||||
@@ -186,6 +198,7 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
private boolean enableNotifications;
|
private boolean enableNotifications;
|
||||||
private boolean enableOsbPrices;
|
private boolean enableOsbPrices;
|
||||||
private boolean enableGELimits;
|
private boolean enableGELimits;
|
||||||
|
private boolean enableAfford;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
GrandExchangeConfig provideConfig(ConfigManager configManager)
|
GrandExchangeConfig provideConfig(ConfigManager configManager)
|
||||||
@@ -244,7 +257,6 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
private void addSubscriptions()
|
private void addSubscriptions()
|
||||||
{
|
{
|
||||||
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
|
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
|
||||||
eventBus.subscribe(GameTick.class, this, this::onGameTick);
|
|
||||||
eventBus.subscribe(ChatMessage.class, this, this::onChatMessage);
|
eventBus.subscribe(ChatMessage.class, this, this::onChatMessage);
|
||||||
eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen);
|
eventBus.subscribe(SessionOpen.class, this, this::onSessionOpen);
|
||||||
eventBus.subscribe(SessionClose.class, this, this::onSessionClose);
|
eventBus.subscribe(SessionClose.class, this, this::onSessionClose);
|
||||||
@@ -254,7 +266,6 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged);
|
eventBus.subscribe(FocusChanged.class, this, this::onFocusChanged);
|
||||||
eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded);
|
eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded);
|
||||||
eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent);
|
eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent);
|
||||||
eventBus.subscribe(GameTick.class, this, this::onGameTick);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSessionOpen(SessionOpen sessionOpen)
|
private void onSessionOpen(SessionOpen sessionOpen)
|
||||||
@@ -276,6 +287,7 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
this.enableNotifications = config.enableNotifications();
|
this.enableNotifications = config.enableNotifications();
|
||||||
this.enableOsbPrices = config.enableOsbPrices();
|
this.enableOsbPrices = config.enableOsbPrices();
|
||||||
this.enableGELimits = config.enableGELimits();
|
this.enableGELimits = config.enableGELimits();
|
||||||
|
this.enableAfford = config.enableAfford();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSessionClose(SessionClose sessionClose)
|
private void onSessionClose(SessionClose sessionClose)
|
||||||
@@ -465,6 +477,11 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
|
|
||||||
private void onScriptCallbackEvent(ScriptCallbackEvent event)
|
private void onScriptCallbackEvent(ScriptCallbackEvent event)
|
||||||
{
|
{
|
||||||
|
if (event.getEventName().equals("geBuilt"))
|
||||||
|
{
|
||||||
|
rebuildGeText();
|
||||||
|
}
|
||||||
|
|
||||||
if (!event.getEventName().equals("setGETitle") || !config.showTotal())
|
if (!event.getEventName().equals("setGETitle") || !config.showTotal())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -505,7 +522,7 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
stringStack[stringStackSize - 1] += titleBuilder.toString();
|
stringStack[stringStackSize - 1] += titleBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGameTick(GameTick event)
|
public void rebuildGeText()
|
||||||
{
|
{
|
||||||
if (grandExchangeText == null || grandExchangeItem == null || grandExchangeItem.isHidden())
|
if (grandExchangeText == null || grandExchangeItem == null || grandExchangeItem.isHidden())
|
||||||
{
|
{
|
||||||
@@ -513,34 +530,74 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Widget geText = grandExchangeText;
|
final Widget geText = grandExchangeText;
|
||||||
final String geTextString = geText.getText();
|
|
||||||
final int itemId = grandExchangeItem.getItemId();
|
final int itemId = grandExchangeItem.getItemId();
|
||||||
|
|
||||||
if (itemId == OFFER_DEFAULT_ITEM_ID || itemId == -1)
|
if (itemId == OFFER_DEFAULT_ITEM_ID || itemId == -1)
|
||||||
{
|
{
|
||||||
|
lastAmount = osbItem = lastItem = -1;
|
||||||
// This item is invalid/nothing has been searched for
|
// This item is invalid/nothing has been searched for
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.enableGELimits && itemGELimits != null && !geTextString.contains(BUY_LIMIT_GE_TEXT))
|
final int currentItemPrice = client.getVar(Varbits.GRAND_EXCHANGE_PRICE_PER_ITEM);
|
||||||
|
|
||||||
|
if (lastItem == itemId && lastAmount == currentItemPrice )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastItem = itemId;
|
||||||
|
lastAmount = currentItemPrice;
|
||||||
|
|
||||||
|
String[] texts = geText.getText().split("<br>");
|
||||||
|
String text = texts[0];
|
||||||
|
|
||||||
|
if (this.enableAfford)
|
||||||
|
{
|
||||||
|
final ItemContainer itemContainer = client.getItemContainer(InventoryID.INVENTORY);
|
||||||
|
final Item[] items = itemContainer.getItems();
|
||||||
|
for (Item item : items)
|
||||||
|
{
|
||||||
|
if (item.getId() == COINS_995)
|
||||||
|
{
|
||||||
|
coins = item.getQuantity();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text += AFFORD_GE_TEXT + StackFormatter.formatNumber(coins / currentItemPrice) + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.enableGELimits && itemGELimits != null)
|
||||||
{
|
{
|
||||||
final Integer itemLimit = itemGELimits.get(itemId);
|
final Integer itemLimit = itemGELimits.get(itemId);
|
||||||
|
|
||||||
// If we have item buy limit, append it
|
// If we have item buy limit, append it
|
||||||
if (itemLimit != null)
|
if (itemLimit != null)
|
||||||
{
|
{
|
||||||
final String text = geText.getText() + BUY_LIMIT_GE_TEXT + StackFormatter.formatNumber(itemLimit);
|
text += (!this.enableAfford ? "<br>" : "") + BUY_LIMIT_GE_TEXT + StackFormatter.formatNumber(itemLimit);
|
||||||
geText.setText(text);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.enableOsbPrices || geTextString.contains(OSB_GE_TEXT))
|
if (!this.enableOsbPrices)
|
||||||
|
|
||||||
{
|
{
|
||||||
// OSB prices are disabled or price was already looked up, so no need to set it again
|
geText.setText(text);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geText.setText(text + osbText);
|
||||||
|
|
||||||
log.debug("Looking up OSB item price {}", itemId);
|
log.debug("Looking up OSB item price {}", itemId);
|
||||||
|
if (osbItem == lastItem)
|
||||||
|
{
|
||||||
|
// OSB Item was already looked up
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
osbItem = lastItem;
|
||||||
|
|
||||||
|
final String str = text;
|
||||||
|
|
||||||
executorService.submit(() ->
|
executorService.submit(() ->
|
||||||
{
|
{
|
||||||
@@ -550,13 +607,8 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
.subscribe(
|
.subscribe(
|
||||||
(osbresult) ->
|
(osbresult) ->
|
||||||
{
|
{
|
||||||
final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average());
|
osbText = OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average());
|
||||||
if (geText.getText().contains(OSB_GE_TEXT))
|
geText.setText(str + osbText);
|
||||||
{
|
|
||||||
// If there are multiple tasks queued and one of them have already added the price
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
geText.setText(text);
|
|
||||||
},
|
},
|
||||||
(e) -> log.debug("Error getting price of item {}", itemId, e)
|
(e) -> log.debug("Error getting price of item {}", itemId, e)
|
||||||
);
|
);
|
||||||
@@ -570,4 +622,4 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
log.debug("Loaded {} limits", itemGELimits.size());
|
log.debug("Loaded {} limits", itemGELimits.size());
|
||||||
return itemGELimits;
|
return itemGELimits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user