::ge commands now use book interface to support more than 300 listings

This commit is contained in:
Player Name 2024-07-13 04:24:13 +00:00 committed by Ryan
parent 5ed3cafc4a
commit 81495ab8a8

View file

@ -1,6 +1,6 @@
package core.game.system.command.sets package core.game.system.command.sets
import content.global.handlers.iface.RulesAndInfo import content.global.handlers.iface.*
import content.global.skill.farming.timers.* import content.global.skill.farming.timers.*
import content.minigame.fishingtrawler.TrawlerLoot import content.minigame.fishingtrawler.TrawlerLoot
import content.region.misthalin.draynor.quest.anma.AnmaCutscene import content.region.misthalin.draynor.quest.anma.AnmaCutscene
@ -189,13 +189,9 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
when(mode){ when(mode){
"buying" -> showGeBuy(player) "buying" -> showGeBuy(player)
"selling" -> showGeSell(player) "selling" -> showGeSell(player)
"search" -> sendInputDialogue(player, InputType.STRING_LONG, "Enter search term:"){value -> "search" -> showGeInputDialogue(player, args, ::showOffers)
showOffers(player, value as String)
}
"bots" -> showGeBots(player) "bots" -> showGeBots(player)
"botsearch" -> sendInputDialogue(player, InputType.STRING_LONG, "Enter search term:"){value -> "botsearch" -> showGeInputDialogue(player, args, ::showGeBotsearch)
showGeBotsearch(player, value as String)
}
else -> reject(player, "Invalid mode used. Available modes are: buying, selling, search") else -> reject(player, "Invalid mode used. Available modes are: buying, selling, search")
} }
} }
@ -688,18 +684,13 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
} }
val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) })
var lineId = 11 val leftLines = ArrayList<String>(entries.size)
val rightLines = ArrayList<String>(entries.size)
closeInterface(player) for (entry in entries) {
setScrollTitle(player, "Bot Stock - \"$searchTerm\"") leftLines.add("${getItemName(entry.key)} (<col=357f44>x${entry.value}</col>)")
for(i in 0..299) { rightLines.add("Price: <col=3a3414>${offerPrice[entry.key]}</col>gp")
val offer = entries.elementAtOrNull(i)
if (offer != null)
setInterfaceText(player, "${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Price: <col=e8d151>${offerPrice[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
else
setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++)
} }
openInterface(player, Components.QUESTJOURNAL_SCROLL_275) showGeBook(player, "Bot Stock - \"$searchTerm\"", leftLines, rightLines)
} }
fun showGeBots(player: Player) fun showGeBots(player: Player)
@ -716,18 +707,13 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
} }
val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) })
var lineId = 11 val leftLines = ArrayList<String>(entries.size)
val rightLines = ArrayList<String>(entries.size)
closeInterface(player) for (entry in entries) {
setScrollTitle(player, "Bot Stock") leftLines.add("${getItemName(entry.key)} (<col=357f44>x${entry.value}</col>)")
for(i in 0..299) { rightLines.add("Price: <col=3a3414>${offerPrice[entry.key]}</col>gp")
val offer = entries.elementAtOrNull(i)
if (offer != null)
setInterfaceText(player, "${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Price: <col=e8d151>${offerPrice[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
else
setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++)
} }
openInterface(player, Components.QUESTJOURNAL_SCROLL_275) showGeBook(player, "Bot Stock", leftLines, rightLines)
} }
fun showGeSell(player: Player){ fun showGeSell(player: Player){
@ -750,18 +736,13 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
} }
val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) })
var lineId = 11 val leftLines = ArrayList<String>(entries.size)
val rightLines = ArrayList<String>(entries.size)
closeInterface(player) for (entry in entries) {
setScrollTitle(player, "Active Sell Offers") leftLines.add("${getItemName(entry.key)} (<col=357f44>x${entry.value}</col>)")
for(i in 0..299) { rightLines.add("Price: <col=3a3414>${lowestPrice[entry.key]}</col>gp")
val offer = entries.elementAtOrNull(i)
if (offer != null)
setInterfaceText(player, "${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Lowest: <col=e8d151>${lowestPrice[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
else
setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++)
} }
openInterface(player, Components.QUESTJOURNAL_SCROLL_275) showGeBook(player, "Active Sell Offers", leftLines, rightLines)
} }
fun showGeBuy(player: Player){ fun showGeBuy(player: Player){
@ -784,27 +765,26 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
} }
val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) })
var lineId = 11 val leftLines = ArrayList<String>(entries.size)
val rightLines = ArrayList<String>(entries.size)
closeInterface(player) for (entry in entries) {
setScrollTitle(player, "Active Buy Offers") leftLines.add("${getItemName(entry.key)} (<col=357f44>x${entry.value}</col>)")
for(i in 0..299) { rightLines.add("Highest: <col=3a3414>${highestPrice[entry.key]}</col>gp")
val offer = entries.elementAtOrNull(i)
if (offer != null)
setInterfaceText(player, "${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Highest: <col=e8d151>${highestPrice[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
else
setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++)
} }
openInterface(player, Components.QUESTJOURNAL_SCROLL_275) showGeBook(player, "Active Buy Offers", leftLines, rightLines)
} }
fun showOffers(player: Player, searchTerm: String){ fun showOffers(player: Player, searchTerm: String){
val offers = GrandExchange.getValidOffers().filter { getItemName(it.itemID).contains(searchTerm, true) || getItemName(it.itemID).equals(searchTerm, true) } val offers = GrandExchange.getValidOffers().filter { getItemName(it.itemID).contains(searchTerm, true) || getItemName(it.itemID).equals(searchTerm, true) }
if (offers.isEmpty()) {
sendMessage(player, "No results.")
return
}
val buyingAmount = HashMap<Int, Int>() val buyingAmount = HashMap<Int, Int>()
val buyingHighest = HashMap<Int, Int>() val buyingHighest = HashMap<Int, Int>()
val sellingAmount = HashMap<Int,Int>() val sellingAmount = HashMap<Int,Int>()
val sellingLowest = HashMap<Int,Int>() val sellingLowest = HashMap<Int,Int>()
for(offer in offers) for(offer in offers)
{ {
if(offer.sell) if(offer.sell)
@ -831,39 +811,64 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
} }
} }
val numLines = offers.size + 1
val leftLines = ArrayList<String>(numLines)
val rightLines = ArrayList<String>(numLines)
for (i in 0..numLines) {
if (i < buyingAmount.keys.size) {
val offer = buyingAmount.entries.elementAtOrNull(i) ?: continue
leftLines.add("[BUYING] ${getItemName(offer.key)} (<col=357f44>x${offer.value}</col>)")
rightLines.add("Highest: <col=3a3414>${buyingHighest[offer.key]}</col>gp")
} else if (i == buyingAmount.keys.size) {
leftLines.add("")
rightLines.add("")
} else {
val offer = sellingAmount.entries.elementAtOrNull(i - buyingAmount.keys.size - 1) ?: continue
leftLines.add("[SELLING] ${getItemName(offer.key)} (<col=357f44>x${offer.value}</col>)")
rightLines.add("Lowest: <col=3a3414>${sellingLowest[offer.key]}</col>gp")
}
}
showGeBook(player, "Results for \"$searchTerm\"", leftLines, rightLines)
}
private fun showGeInputDialogue(player: Player, args: Array<String>, op: (Player, String) -> (Unit)) {
if (args.size > 2) {
val target = args.copyOfRange(2, args.size).joinToString(" ").lowercase()
op(player, target)
} else {
sendInputDialogue(player, InputType.STRING_LONG, "Enter search term:",) { value ->
op(player, value as String)
}
}
}
private fun showGeBook(player: Player, title: String, leftLines: ArrayList<String>, rightLines: ArrayList<String>) {
if (leftLines.size == 0) {
sendMessage(player, "No results.")
return
}
val lineIds = BookInterface.FANCY_BOOK_26_LINE_IDS
val contents = ArrayList<PageSet>()
val leftChunks = leftLines.chunked(15)
val rightChunks = rightLines.chunked(15)
for (i in leftChunks.indices) {
val size = leftChunks[i].size
val leftPageLines = ArrayList<BookLine>(size)
val rightPageLines = ArrayList<BookLine>(size)
for (j in leftChunks[i].indices) {
leftPageLines.add(BookLine(leftChunks[i][j], lineIds[j+3])) //+3 to skip title and buttons
rightPageLines.add(BookLine(rightChunks[i][j], lineIds[j+3+15])) //+15 because right pages have different ids
}
val leftPage = Page(*leftPageLines.toTypedArray())
val rightPage = Page(*rightPageLines.toTypedArray())
contents.add(PageSet(leftPage, rightPage))
}
closeInterface(player) closeInterface(player)
setScrollTitle(player, "Results for \"$searchTerm\"") fun display(player: Player, pageNum: Int, buttonID: Int): Boolean {
BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_26, title, contents.toTypedArray())
var lineId = 11 return true
for(i in 0..299) {
if(i > buyingAmount.keys.size)
{
val offer = sellingAmount.entries.elementAtOrNull(i - buyingAmount.keys.size)
if(offer != null) {
setInterfaceText(player, "[SELLING] ${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Lowest: <col=e8d151>${sellingLowest[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
continue
} }
BookInterface.openBook(player, BookInterface.FANCY_BOOK_26, ::display)
} }
else if(i < buyingAmount.keys.size)
{
val offer = buyingAmount.entries.elementAtOrNull(i)
if(offer != null) {
setInterfaceText(player, "[BUYING] ${getItemName(offer.key)} (<col=6bff89>x${offer.value}</col>) -> Highest: <col=e8d151>${buyingHighest[offer.key]}</col>gp", Components.QUESTJOURNAL_SCROLL_275, lineId++)
continue
}
}
else {
setInterfaceText(player, "<str> </str>", Components.QUESTJOURNAL_SCROLL_275, lineId++)
continue
}
setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++)
}
openInterface(player, Components.QUESTJOURNAL_SCROLL_275)
}
fun setScrollTitle(player: Player, text: String){
setInterfaceText(player, text, Components.QUESTJOURNAL_SCROLL_275, 2)
}
} }