From 1ba2086c10a16b839e737c84b395100225d81a3a Mon Sep 17 00:00:00 2001 From: tako <74718793+TakoTheDev@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:19:25 +0200 Subject: [PATCH] stuff --- .../gg/skytils/skytilsmod/core/Config.kt | 10 ++++++ .../skytilsmod/listeners/DungeonListener.kt | 35 ++++++++++++++++++- .../skytils/skytilsws/client/PacketHandler.kt | 10 ++++++ .../resources/assets/skytils/lang/en_US.lang | 1 + 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/gg/skytils/skytilsmod/core/Config.kt b/src/main/kotlin/gg/skytils/skytilsmod/core/Config.kt index 95c78ca81..03069c5f9 100644 --- a/src/main/kotlin/gg/skytils/skytilsmod/core/Config.kt +++ b/src/main/kotlin/gg/skytils/skytilsmod/core/Config.kt @@ -313,6 +313,16 @@ object Config : Vigilant( ) var partyFinderStats = false + @Property( + type = PropertyType.SWITCH, name = "Run Breakdown", + description = "§b[WIP] Shows a Breakdown on what players did in the dungeon.", + category = "Dungeons", subcategory = "Miscellaneous", + i18nName = "skytils.config.dungeons.miscellaneous.run_breakdown", + i18nCategory = "skytils.config.dungeons", + i18nSubcategory = "skytils.config.dungeons.miscellaneous" + ) + var runBreakdown = false + @Property( type = PropertyType.SWITCH, name = "Dungeon Chest Profit", description = "Shows the estimated profit for items from chests in dungeons.", diff --git a/src/main/kotlin/gg/skytils/skytilsmod/listeners/DungeonListener.kt b/src/main/kotlin/gg/skytils/skytilsmod/listeners/DungeonListener.kt index 2690a4a92..6db90307b 100644 --- a/src/main/kotlin/gg/skytils/skytilsmod/listeners/DungeonListener.kt +++ b/src/main/kotlin/gg/skytils/skytilsmod/listeners/DungeonListener.kt @@ -113,6 +113,7 @@ object DungeonListener { private val secretsRegex = Regex("\\s*§7(?\\d+)\\/(?\\d+) Secrets") private val keyPickupRegex = Regex("§r§e§lRIGHT CLICK §r§7on §r§7.+?§r§7 to open it\\. This key can only be used to open §r§a(?\\d+)§r§7 door!§r") private val witherDoorOpenedRegex = Regex("^(?:\\[.+?] )?(?\\w+) opened a WITHER door!$") + private val terminalCompletedRegex = Regex("§r§.(?\\w+)§r§a (?:activated|completed) a (?device|terminal|lever)! \\(§r§c(?\\d)§r§a\\/(?\\d)\\)§r") private const val bloodOpenedString = "§r§cThe §r§c§lBLOOD DOOR§r§c has been opened!§r" val outboundRoomQueue = ConcurrentLinkedQueue() var isSoloDungeon = false @@ -150,7 +151,7 @@ object DungeonListener { if (room.foundSecrets != sec) { room.foundSecrets = sec if (team.size > 1) - WSClient.sendPacketAsync(C2SPacketDungeonRoomSecret(SBInfo.server ?: return@setFoundSecrets, room.mainRoom.data.name, sec)) + WSClient.sendPacketAsync(C2SPacketDungeonRoomSecret(SBInfo.server ?: return@setFoundSecrets, room.mainRoom.data.name, sec, mc.thePlayer.name)) } } } @@ -160,6 +161,17 @@ object DungeonListener { DungeonFeatures.DungeonSecretDisplay.maxSecrets = -1 } } else { + terminalCompletedRegex.find(text)?.let { + val completer = team[it.groups["username"]?.value] + val type = it.groups["type"]?.value + + if (completer != null && type != null) { + when (type) { + "lever" -> completer.leversDone++ + "terminal", "device" -> completer.terminalsDone++ + } + } + } if (text.stripControlCodes() .trim() == "> EXTRA STATS <" ) { @@ -181,6 +193,22 @@ object DungeonListener { if (Skytils.config.autoRepartyOnDungeonEnd) { RepartyCommand.processCommand(mc.thePlayer, emptyArray()) } + if (Skytils.config.runBreakdown) { + tickTimer(6) { + val output = team.map { + //TODO: Maybe also save the rank color? + var output = "§6${it.key}§a | Secrets: §6${it.value.secretsDone}§a | Rooms: §6${it.value.roomsDone}§a | Deaths: §6${it.value.deaths}" + + if (DungeonFeatures.dungeonFloorNumber == 7) { + output += "§a | Terminals: §6${it.value.terminalsDone}§a | Levers: §6${it.value.leversDone}" + } + + output + } + + UChat.chat(output.joinToString("\n")) + } + } } else if (text.startsWith("§r§c ☠ ")) { if (text.endsWith(" §r§7reconnected§r§7.§r")) { val match = reconnectedRegex.find(text) ?: return @@ -510,6 +538,11 @@ object DungeonListener { } var dead = false var deaths = 0 + var secretsDone = 0 + var roomsDone = 0 + var terminalsDone = 0 + var leversDone = 0 + var lastLivingStateChange: Long? = null val mapPlayer = DungeonMapPlayer(this, skin) diff --git a/src/main/kotlin/gg/skytils/skytilsws/client/PacketHandler.kt b/src/main/kotlin/gg/skytils/skytilsws/client/PacketHandler.kt index 1a0837375..29301c1f5 100644 --- a/src/main/kotlin/gg/skytils/skytilsws/client/PacketHandler.kt +++ b/src/main/kotlin/gg/skytils/skytilsws/client/PacketHandler.kt @@ -29,6 +29,7 @@ import gg.skytils.skytilsmod.features.impl.dungeons.catlas.utils.ScanUtils import gg.skytils.skytilsmod.features.impl.mining.CHWaypoints import gg.skytils.skytilsmod.features.impl.mining.CHWaypoints.CHInstance import gg.skytils.skytilsmod.features.impl.mining.CHWaypoints.chWaypointsList +import gg.skytils.skytilsmod.listeners.DungeonListener.team import gg.skytils.skytilsmod.utils.SBInfo import gg.skytils.skytilsws.shared.IPacketHandler import gg.skytils.skytilsws.shared.SkytilsWS @@ -62,6 +63,15 @@ object PacketHandler : IPacketHandler { DungeonInfo.uniqueRooms.find { it.mainRoom.data.name == packet.roomId }?.let { if (packet.secretCount > (it.foundSecrets ?: -1)) { it.foundSecrets = packet.secretCount + val finder = team[packet.finder] + + if (finder != null) { + finder.secretsDone++ + + if (packet.secretCount == it.mainRoom.data.secrets) { + finder.roomsDone++ + } + } } } } diff --git a/src/main/resources/assets/skytils/lang/en_US.lang b/src/main/resources/assets/skytils/lang/en_US.lang index c64d5306d..13affca83 100644 --- a/src/main/resources/assets/skytils/lang/en_US.lang +++ b/src/main/resources/assets/skytils/lang/en_US.lang @@ -23,6 +23,7 @@ skytils.config.dungeons.miscellaneous.auto_copy_fails_to_clipboard=Auto Copy Fai skytils.config.dungeons.quality_of_life.autoreparty_on_dungeon_ending=Auto-Reparty on Dungeon Ending skytils.config.dungeons.miscellaneous.death_counter=Death Counter skytils.config.dungeons.party_finder.party_finder_stats=Party Finder Stats +skytils.config.dungeons.miscellaneous.run_breakdown=Run Breakdown skytils.config.dungeons.miscellaneous.dungeon_chest_profit=Dungeon Chest Profit skytils.config.dungeons.miscellaneous.dungeon_chest_profit_includes_essence=Dungeon Chest Profit Includes Essence skytils.config.dungeons.miscellaneous.highlight_unopened_croesus_chests=Highlight Unopened Croesus Chests