diff --git a/Server/src/main/core/game/system/command/sets/MiscCommandSet.kt b/Server/src/main/core/game/system/command/sets/MiscCommandSet.kt index 224f66638..9893a25a8 100644 --- a/Server/src/main/core/game/system/command/sets/MiscCommandSet.kt +++ b/Server/src/main/core/game/system/command/sets/MiscCommandSet.kt @@ -1,6 +1,6 @@ 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.minigame.fishingtrawler.TrawlerLoot import content.region.misthalin.draynor.quest.anma.AnmaCutscene @@ -189,13 +189,9 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ when(mode){ "buying" -> showGeBuy(player) "selling" -> showGeSell(player) - "search" -> sendInputDialogue(player, InputType.STRING_LONG, "Enter search term:"){value -> - showOffers(player, value as String) - } + "search" -> showGeInputDialogue(player, args, ::showOffers) "bots" -> showGeBots(player) - "botsearch" -> sendInputDialogue(player, InputType.STRING_LONG, "Enter search term:"){value -> - showGeBotsearch(player, value as String) - } + "botsearch" -> showGeInputDialogue(player, args, ::showGeBotsearch) else -> reject(player, "Invalid mode used. Available modes are: buying, selling, search") } } @@ -687,19 +683,14 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ offerPrice[offer.itemID] = offer.offeredValue } - val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) - var lineId = 11 - - closeInterface(player) - setScrollTitle(player, "Bot Stock - \"$searchTerm\"") - for(i in 0..299) { - val offer = entries.elementAtOrNull(i) - if (offer != null) - setInterfaceText(player, "${getItemName(offer.key)} (x${offer.value}) -> Price: ${offerPrice[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - else - setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++) + val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) + val leftLines = ArrayList(entries.size) + val rightLines = ArrayList(entries.size) + for (entry in entries) { + leftLines.add("${getItemName(entry.key)} (x${entry.value})") + rightLines.add("Price: ${offerPrice[entry.key]}gp") } - openInterface(player, Components.QUESTJOURNAL_SCROLL_275) + showGeBook(player, "Bot Stock - \"$searchTerm\"", leftLines, rightLines) } fun showGeBots(player: Player) @@ -715,19 +706,14 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ offerPrice[offer.itemID] = offer.offeredValue } - val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) - var lineId = 11 - - closeInterface(player) - setScrollTitle(player, "Bot Stock") - for(i in 0..299) { - val offer = entries.elementAtOrNull(i) - if (offer != null) - setInterfaceText(player, "${getItemName(offer.key)} (x${offer.value}) -> Price: ${offerPrice[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - else - setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++) + val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) + val leftLines = ArrayList(entries.size) + val rightLines = ArrayList(entries.size) + for (entry in entries) { + leftLines.add("${getItemName(entry.key)} (x${entry.value})") + rightLines.add("Price: ${offerPrice[entry.key]}gp") } - openInterface(player, Components.QUESTJOURNAL_SCROLL_275) + showGeBook(player, "Bot Stock", leftLines, rightLines) } fun showGeSell(player: Player){ @@ -749,19 +735,14 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ lowestPrice[offer.itemID] = price } - val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) - var lineId = 11 - - closeInterface(player) - setScrollTitle(player, "Active Sell Offers") - for(i in 0..299) { - val offer = entries.elementAtOrNull(i) - if (offer != null) - setInterfaceText(player, "${getItemName(offer.key)} (x${offer.value}) -> Lowest: ${lowestPrice[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - else - setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++) + val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) + val leftLines = ArrayList(entries.size) + val rightLines = ArrayList(entries.size) + for (entry in entries) { + leftLines.add("${getItemName(entry.key)} (x${entry.value})") + rightLines.add("Price: ${lowestPrice[entry.key]}gp") } - openInterface(player, Components.QUESTJOURNAL_SCROLL_275) + showGeBook(player, "Active Sell Offers", leftLines, rightLines) } fun showGeBuy(player: Player){ @@ -783,28 +764,27 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ highestPrice[offer.itemID] = price } - val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) - var lineId = 11 - - closeInterface(player) - setScrollTitle(player, "Active Buy Offers") - for(i in 0..299) { - val offer = entries.elementAtOrNull(i) - if (offer != null) - setInterfaceText(player, "${getItemName(offer.key)} (x${offer.value}) -> Highest: ${highestPrice[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - else - setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++) + val entries = offerAmounts.entries.sortedBy({ e -> getItemName(e.key) }) + val leftLines = ArrayList(entries.size) + val rightLines = ArrayList(entries.size) + for (entry in entries) { + leftLines.add("${getItemName(entry.key)} (x${entry.value})") + rightLines.add("Highest: ${highestPrice[entry.key]}gp") } - openInterface(player, Components.QUESTJOURNAL_SCROLL_275) + showGeBook(player, "Active Buy Offers", leftLines, rightLines) } fun showOffers(player: Player, searchTerm: String){ val offers = GrandExchange.getValidOffers().filter { getItemName(it.itemID).contains(searchTerm, true) || getItemName(it.itemID).equals(searchTerm, true) } - val buyingAmount = HashMap() + if (offers.isEmpty()) { + sendMessage(player, "No results.") + return + } + + val buyingAmount = HashMap() val buyingHighest = HashMap() val sellingAmount = HashMap() val sellingLowest = HashMap() - for(offer in offers) { if(offer.sell) @@ -831,39 +811,64 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ } } - closeInterface(player) - setScrollTitle(player, "Results for \"$searchTerm\"") - - var lineId = 11 - 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)} (x${offer.value}) -> Lowest: ${sellingLowest[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - continue - } + val numLines = offers.size + 1 + val leftLines = ArrayList(numLines) + val rightLines = ArrayList(numLines) + for (i in 0..numLines) { + if (i < buyingAmount.keys.size) { + val offer = buyingAmount.entries.elementAtOrNull(i) ?: continue + leftLines.add("[BUYING] ${getItemName(offer.key)} (x${offer.value})") + rightLines.add("Highest: ${buyingHighest[offer.key]}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)} (x${offer.value})") + rightLines.add("Lowest: ${sellingLowest[offer.key]}gp") } - else if(i < buyingAmount.keys.size) - { - val offer = buyingAmount.entries.elementAtOrNull(i) - if(offer != null) { - setInterfaceText(player, "[BUYING] ${getItemName(offer.key)} (x${offer.value}) -> Highest: ${buyingHighest[offer.key]}gp", Components.QUESTJOURNAL_SCROLL_275, lineId++) - continue - } - } - else { - setInterfaceText(player, " ", Components.QUESTJOURNAL_SCROLL_275, lineId++) - continue - } - - setInterfaceText(player, "", Components.QUESTJOURNAL_SCROLL_275, lineId++) } - openInterface(player, Components.QUESTJOURNAL_SCROLL_275) + showGeBook(player, "Results for \"$searchTerm\"", leftLines, rightLines) } - fun setScrollTitle(player: Player, text: String){ - setInterfaceText(player, text, Components.QUESTJOURNAL_SCROLL_275, 2) + private fun showGeInputDialogue(player: Player, args: Array, 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, rightLines: ArrayList) { + if (leftLines.size == 0) { + sendMessage(player, "No results.") + return + } + val lineIds = BookInterface.FANCY_BOOK_26_LINE_IDS + val contents = ArrayList() + val leftChunks = leftLines.chunked(15) + val rightChunks = rightLines.chunked(15) + for (i in leftChunks.indices) { + val size = leftChunks[i].size + val leftPageLines = ArrayList(size) + val rightPageLines = ArrayList(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) + fun display(player: Player, pageNum: Int, buttonID: Int): Boolean { + BookInterface.pageSetup(player, BookInterface.FANCY_BOOK_26, title, contents.toTypedArray()) + return true + } + BookInterface.openBook(player, BookInterface.FANCY_BOOK_26, ::display) + } }