ge plugin: submit partially completed trades
This commit is contained in:
@@ -371,39 +371,88 @@ public class GrandExchangePlugin extends Plugin
|
||||
BufferedImage itemImage = itemManager.getImage(offer.getItemId(), offer.getTotalQuantity(), shouldStack);
|
||||
SwingUtilities.invokeLater(() -> panel.getOffersPanel().updateOffer(offerItem, itemImage, offer, slot));
|
||||
|
||||
submitTrades(slot, offer);
|
||||
submitTrade(slot, offer);
|
||||
|
||||
updateConfig(slot, offer);
|
||||
}
|
||||
|
||||
private void submitTrades(int slot, GrandExchangeOffer offer)
|
||||
@VisibleForTesting
|
||||
void submitTrade(int slot, GrandExchangeOffer offer)
|
||||
{
|
||||
if (offer.getState() != GrandExchangeOfferState.BOUGHT && offer.getState() != GrandExchangeOfferState.SOLD &&
|
||||
offer.getState() != GrandExchangeOfferState.CANCELLED_BUY && offer.getState() != GrandExchangeOfferState.CANCELLED_SELL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
GrandExchangeOfferState state = offer.getState();
|
||||
|
||||
// Cancelled offers may have been cancelled before buying/selling any items
|
||||
if (offer.getQuantitySold() == 0)
|
||||
if (state != GrandExchangeOfferState.CANCELLED_BUY && state != GrandExchangeOfferState.CANCELLED_SELL && state != GrandExchangeOfferState.BUYING && state != GrandExchangeOfferState.SELLING)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SavedOffer savedOffer = getOffer(slot);
|
||||
if (!shouldUpdate(savedOffer, offer))
|
||||
if (savedOffer == null && (state == GrandExchangeOfferState.BUYING || state == GrandExchangeOfferState.SELLING) && offer.getQuantitySold() == 0)
|
||||
{
|
||||
// new offer
|
||||
GrandExchangeTrade grandExchangeTrade = new GrandExchangeTrade();
|
||||
grandExchangeTrade.setBuy(state == GrandExchangeOfferState.BUYING);
|
||||
grandExchangeTrade.setItemId(offer.getItemId());
|
||||
grandExchangeTrade.setQuantity(0);
|
||||
grandExchangeTrade.setTotal(offer.getTotalQuantity());
|
||||
grandExchangeTrade.setPrice(0);
|
||||
grandExchangeTrade.setOffer(offer.getPrice());
|
||||
|
||||
log.debug("Submitting new trade: {}", grandExchangeTrade);
|
||||
grandExchangeClient.submit(grandExchangeTrade);
|
||||
return;
|
||||
}
|
||||
|
||||
if (savedOffer == null || savedOffer.getItemId() != offer.getItemId() || savedOffer.getPrice() != offer.getPrice() || savedOffer.getTotalQuantity() != offer.getTotalQuantity())
|
||||
{
|
||||
// desync
|
||||
return;
|
||||
}
|
||||
|
||||
if (savedOffer.getState() == offer.getState() && savedOffer.getQuantitySold() == offer.getQuantitySold())
|
||||
{
|
||||
// no change
|
||||
return;
|
||||
}
|
||||
|
||||
if (state == GrandExchangeOfferState.CANCELLED_BUY || state == GrandExchangeOfferState.CANCELLED_SELL)
|
||||
{
|
||||
GrandExchangeTrade grandExchangeTrade = new GrandExchangeTrade();
|
||||
grandExchangeTrade.setBuy(state == GrandExchangeOfferState.CANCELLED_BUY);
|
||||
grandExchangeTrade.setCancel(true);
|
||||
grandExchangeTrade.setItemId(offer.getItemId());
|
||||
grandExchangeTrade.setQuantity(offer.getQuantitySold());
|
||||
grandExchangeTrade.setTotal(offer.getTotalQuantity());
|
||||
grandExchangeTrade.setPrice(offer.getQuantitySold() > 0 ? offer.getSpent() / offer.getQuantitySold() : 0);
|
||||
grandExchangeTrade.setOffer(offer.getPrice());
|
||||
|
||||
log.debug("Submitting cancelled: {}", grandExchangeTrade);
|
||||
grandExchangeClient.submit(grandExchangeTrade);
|
||||
return;
|
||||
}
|
||||
|
||||
final int qty = offer.getQuantitySold() - savedOffer.getQuantitySold();
|
||||
if (qty <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// getPrice() is the price of the offer, not necessarily what the item bought at
|
||||
int priceEach = offer.getSpent() / offer.getQuantitySold();
|
||||
// offer.getPrice() is the price of the offer, not necessarily what the item bought at, so we compute it
|
||||
// based on how much was spent & the qty
|
||||
final int dspent = offer.getSpent() - savedOffer.getSpent();
|
||||
final int price = dspent / qty;
|
||||
if (price <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GrandExchangeTrade grandExchangeTrade = new GrandExchangeTrade();
|
||||
grandExchangeTrade.setBuy(offer.getState() == GrandExchangeOfferState.BOUGHT || offer.getState() == GrandExchangeOfferState.CANCELLED_BUY);
|
||||
grandExchangeTrade.setBuy(state == GrandExchangeOfferState.BUYING);
|
||||
grandExchangeTrade.setItemId(offer.getItemId());
|
||||
grandExchangeTrade.setQuantity(offer.getQuantitySold());
|
||||
grandExchangeTrade.setPrice(priceEach);
|
||||
grandExchangeTrade.setQuantity(qty);
|
||||
grandExchangeTrade.setTotal(offer.getTotalQuantity());
|
||||
grandExchangeTrade.setPrice(price);
|
||||
grandExchangeTrade.setOffer(offer.getPrice());
|
||||
|
||||
log.debug("Submitting trade: {}", grandExchangeTrade);
|
||||
grandExchangeClient.submit(grandExchangeTrade);
|
||||
@@ -430,17 +479,6 @@ public class GrandExchangePlugin extends Plugin
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldUpdate(SavedOffer savedOffer, GrandExchangeOffer grandExchangeOffer)
|
||||
{
|
||||
if (savedOffer == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only update offer if state has changed
|
||||
return savedOffer.getState() != grandExchangeOffer.getState();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChatMessage(ChatMessage event)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user