From 4979c8438a6b1425024fa4c8b5d7ee95b6369271 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Sat, 23 Apr 2022 14:11:48 +0000 Subject: [PATCH] Show standard offer text when reopening already-made offers Fixed grand exchange offers disappearing on login Don't show withdraw items with amount 0 --- .../kotlin/rs09/game/ge/GrandExchangeOffer.kt | 1 + .../rs09/game/ge/GrandExchangeRecords.kt | 81 +++++++++---------- .../game/interaction/inter/ge/StockMarket.kt | 3 + 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeOffer.kt b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeOffer.kt index ad8b8f2b8..5e20a77d0 100644 --- a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeOffer.kt +++ b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeOffer.kt @@ -60,6 +60,7 @@ class GrandExchangeOffer() { fun addWithdrawItem(id: Int, amount: Int) { + if(amount == 0) return //loop checking if the item is already present first for(item in withdraw) if(item != null && item.id == id) diff --git a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt index 2a8c43471..e1e3ded55 100644 --- a/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt +++ b/Server/src/main/kotlin/rs09/game/ge/GrandExchangeRecords.kt @@ -47,6 +47,45 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer, 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() + + 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) { @@ -92,8 +131,6 @@ class GrandExchangeRecords(private val player: Player? = null) : PersistPlayer, val conn = GEDB.connect() val stmt = conn.createStatement() - val sb = StringBuilder() - for (record in offerRecords) { if (record != null) { 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() - - 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. */ diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt index d5ee5b2d4..b2e553765 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt @@ -108,6 +108,9 @@ class StockMarket : InterfaceListener { openedOffer = GrandExchangeRecords.getInstance(player).getOffer(openedIndex) if(op == 205) abortOffer(player, openedOffer) 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 -> { openedIndex = (button - 30) shr 4