Show standard offer text when reopening already-made offers

Fixed grand exchange offers disappearing on login
Don't show withdraw items with amount 0
This commit is contained in:
Ceikry
2022-04-23 14:11:48 +00:00
committed by Ryan
parent 0812cfa0c7
commit 4979c8438a
3 changed files with 43 additions and 42 deletions
@@ -60,6 +60,7 @@ class GrandExchangeOffer() {
fun addWithdrawItem(id: Int, amount: Int) fun addWithdrawItem(id: Int, amount: Int)
{ {
if(amount == 0) return
//loop checking if the item is already present first //loop checking if the item is already present first
for(item in withdraw) for(item in withdraw)
if(item != null && item.id == id) if(item != null && item.id == id)
@@ -47,6 +47,45 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer,
getInstance(player).history[i] = o getInstance(player).history[i] = o
} }
} }
/**
* Read offers from the database
*/
val conn = GEDB.connect()
val stmt = conn.createStatement()
val offer_records = stmt.executeQuery("SELECT * from player_offers where player_uid = ${player.details.uid} AND offer_state < 6")
val instance = getInstance(player)
val needsIndex = ArrayDeque<GrandExchangeOffer>()
while (offer_records.next()) {
val offer = GrandExchangeOffer.fromQuery(offer_records)
if (offer.index == -1) //used to index old (converted from JSON) offers
needsIndex.push(offer)
else
instance.offerRecords[offer.index] = OfferRecord(offer.uid, offer.index)
}
stmt.close()
if (needsIndex.isNotEmpty()) {
for ((index, offer) in offerRecords.withIndex()) {
if (offer == null) {
val o = needsIndex.pop()
o.index = index
instance.offerRecords[o.index] = OfferRecord(o.uid, o.index)
o.update() //write the new index to the database
}
}
while(needsIndex.isNotEmpty()) //If we enter this loop, there were more offers than can fit inside the 6 slots. This should never happen - at least, not anymore. Can't speak for JSON offers.
{
val o = needsIndex.pop()
SystemLogger.logGE("[WARN] PLAYER HAD EXTRA OFFER - RECOMMEND IMMEDIATE REFUND OF CONTENTS -> OFFER UID: ${o.uid}")
SystemLogger.logGE("[WARN] AS PER ABOVE MESSAGE, REFUND CONTENTS OF OFFER AND MANUALLY SET offer_state = 6")
}
}
instance.visualizeRecords()
} }
override fun savePlayer(player: Player, save: JSONObject) { override fun savePlayer(player: Player, save: JSONObject) {
@@ -92,8 +131,6 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer,
val conn = GEDB.connect() val conn = GEDB.connect()
val stmt = conn.createStatement() val stmt = conn.createStatement()
val sb = StringBuilder()
for (record in offerRecords) { for (record in offerRecords) {
if (record != null) { if (record != null) {
val offer_raw = stmt.executeQuery("select * from player_offers where uid = ${record.uid}") val offer_raw = stmt.executeQuery("select * from player_offers where uid = ${record.uid}")
@@ -160,46 +197,6 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer,
} }
} }
fun parse(geData: JSONObject) {
/**
* Read offers from the database
*/
val conn = GEDB.connect()
val stmt = conn.createStatement()
val offer_records = stmt.executeQuery("SELECT * from player_offers where player_uid = ${player!!.details.uid} AND offer_state < 6")
val needsIndex = ArrayDeque<GrandExchangeOffer>()
while (offer_records.next()) {
val offer = GrandExchangeOffer.fromQuery(offer_records)
if (offer.index == -1) //used to index old (converted from JSON) offers
needsIndex.push(offer)
else
offerRecords[offer.index] = OfferRecord(offer.uid, offer.index)
}
stmt.close()
if (needsIndex.isNotEmpty()) {
for ((index, offer) in offerRecords.withIndex()) {
if (offer == null) {
val o = needsIndex.pop()
o.index = index
offerRecords[o.index] = OfferRecord(o.uid, o.index)
o.update() //write the new index to the database
}
}
while(needsIndex.isNotEmpty()) //If we enter this loop, there were more offers than can fit inside the 6 slots. This should never happen - at least, not anymore. Can't speak for JSON offers.
{
val o = needsIndex.pop()
SystemLogger.logGE("[WARN] PLAYER HAD EXTRA OFFER - RECOMMEND IMMEDIATE REFUND OF CONTENTS -> OFFER UID: ${o.uid}")
SystemLogger.logGE("[WARN] AS PER ABOVE MESSAGE, REFUND CONTENTS OF OFFER AND MANUALLY SET offer_state = 6")
}
}
visualizeRecords()
}
/** /**
* Initializes the grand exchange. * Initializes the grand exchange.
*/ */
@@ -108,6 +108,9 @@ class StockMarket : InterfaceListener {
openedOffer = GrandExchangeRecords.getInstance(player).getOffer(openedIndex) openedOffer = GrandExchangeRecords.getInstance(player).getOffer(openedIndex)
if(op == 205) abortOffer(player, openedOffer) if(op == 205) abortOffer(player, openedOffer)
else updateVarbits(player, openedOffer, openedIndex) else updateVarbits(player, openedOffer, openedIndex)
if(openedOffer != null) {
player.packetDispatch.sendString(GrandExchange.getOfferStats(openedOffer.itemID, openedOffer.sell), 105, 142)
}
} }
30,46,62,81,100,119 -> { 30,46,62,81,100,119 -> {
openedIndex = (button - 30) shr 4 openedIndex = (button - 30) shr 4