From f6530f43d2d815ea0ef0f44c483bf830ae4eecbd Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Thu, 13 Aug 2026 23:49:19 -0400 Subject: [PATCH 1/9] almost working --- .../odin/features/impl/dungeon/MapInfo.kt | 20 +++++++++++--- .../odin/features/impl/dungeon/Mimic.kt | 6 ++--- .../utils/skyblock/dungeon/DungeonListener.kt | 27 +++++++++++++++++-- .../utils/skyblock/dungeon/DungeonUtils.kt | 4 +-- 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt index 492252eb6..d0b995146 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt @@ -41,7 +41,8 @@ object MapInfo : Module( private var cachedKnownSecrets = 0 private var cachedMimicKilled = false private var cachedPrinceKilled = false - private var cachedBatKilled = false + private var cachedBatKilled = 0 + private var cachedPlayerCount=0 private var cachedCryptCount = 0 private var cachedDeathCount = 0 @@ -55,6 +56,7 @@ object MapInfo : Module( val mimicKilled = cachedMimicKilled val princeKilled = cachedPrinceKilled val batKilled = cachedBatKilled + val playerCount = cachedPlayerCount val cryptCount = cachedCryptCount val showRemaining = fullAddRemaining && alternate @@ -93,7 +95,7 @@ object MapInfo : Module( val mimicText = buildString { append("${if (mimicKilled) "§a" else "§c"}\uD83D\uDCE6") append(" §8| ${if (princeKilled) "§a" else "§c"}\uD83E\uDD34") - append(" §8| ${if (batKilled) "§a" else "§c"}\uD83E\uDD87") + append(" §8| ${colorizeBats(playerCount-batKilled)}\uD83E\uDD87$batKilled") } val cryptText = buildString { @@ -174,8 +176,9 @@ object MapInfo : Module( val mimicKilled = cachedMimicKilled val princeKilled = cachedPrinceKilled val batKilled = cachedBatKilled + val playerCount = cachedPlayerCount - val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (if (batKilled) 0 else 1) + val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (playerCount-batKilled) val scoreText = buildString { append("§7Score: ") @@ -238,6 +241,7 @@ object MapInfo : Module( cachedMimicKilled = DungeonUtils.mimicKilled cachedPrinceKilled = DungeonUtils.princeKilled cachedBatKilled = DungeonUtils.batKilled + cachedPlayerCount = DungeonUtils.dungeonTeammates.size cachedCryptCount = DungeonUtils.cryptCount.coerceAtMost(5) cachedDeathCount = DungeonUtils.deathCount } @@ -274,7 +278,15 @@ object MapInfo : Module( portalAABB = null } } - + + private fun colorizeBats(score: Int): String { + return when { + score > 2 -> "§c" + score > 0 -> "§e" + else -> "§a" + } + } + private fun colorizeCrypts(count: Int): String { return when { count < 3 -> "§c${count}" diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt index 1c02e1cd1..8ace0c45f 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt @@ -59,8 +59,8 @@ object Mimic : Module( } private fun batKilled() { - if (DungeonUtils.batKilled || !DungeonUtils.inClear) return - if (batMessageToggle) sendCommand("pc Bat Killed!") - DungeonListener.dungeonStats.batKilled = true + if(!DungeonUtils.inClear) return + if (batMessageToggle) sendCommand("pc Bat Killed (${DungeonUtils.batKilled})") + DungeonListener.dungeonStats.batKilled += 1 } } \ No newline at end of file diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index a40d2e90e..ed99aac96 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -8,6 +8,7 @@ import com.odtheking.odin.events.core.onReceive import com.odtheking.odin.features.impl.dungeon.LeapMenu import com.odtheking.odin.features.impl.dungeon.LeapMenu.odinSorting import com.odtheking.odin.features.impl.dungeon.map.DungeonScan +import com.odtheking.odin.utils.handlers.schedule import com.odtheking.odin.utils.network.WebUtils.hasBonusPaulScore import com.odtheking.odin.utils.noControlCodes import com.odtheking.odin.utils.romanToInt @@ -112,7 +113,14 @@ object DungeonListener { dungeonStats.princeKilled = true "bat killed", "bat slain", "bat killed!", "bat dead", "bat dead!" -> - dungeonStats.batKilled = true + dungeonStats.batKilled=-1 + + "bat killed (1)" -> + dungeonStats.batKilled=1 + "bat killed (2)" -> + dungeonStats.batKilled=2 + "bat killed (3)" -> + dungeonStats.batKilled=3 "blaze done!", "blaze done", "blaze puzzle solved!" -> puzzles.find { it == Puzzle.BLAZE }.let { it?.status = PuzzleStatus.Completed } @@ -206,7 +214,8 @@ object DungeonListener { var elapsedTime: String = "0s", private var _mimicKilled: Boolean = false, var princeKilled: Boolean = false, - var batKilled: Boolean = false, + private var _batKilled: Int = 0, + private var batCd:Boolean = false, var doorOpener: String = "Unknown", var bloodDone: Boolean = false, var puzzleCount: Int = 0, @@ -219,5 +228,19 @@ object DungeonListener { } _mimicKilled = value } + var batKilled: Int + get()=_batKilled + set(value) { + if(value==-1){ + if(!batCd) { + _batKilled++ + batCd=true + schedule(10,true){batCd=false} + } + return + } + if(value>=_batKilled)return + _batKilled++ + } } } \ No newline at end of file diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt index 3367a0992..b9034e091 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt @@ -95,7 +95,7 @@ object DungeonUtils { inline val princeKilled: Boolean get() = DungeonListener.dungeonStats.princeKilled - inline val batKilled: Boolean + inline val batKilled: Int get() = DungeonListener.dungeonStats.batKilled inline val currentRoom: DungeonRoom? @@ -109,7 +109,7 @@ object DungeonUtils { var score = cryptCount.coerceAtMost(5) if (mimicKilled) score += 2 if (princeKilled) score += 1 - if (batKilled) score += 1 + score += batKilled if ((isPaul && togglePaul == 0) || togglePaul == 2) score += 10 return score } From e497509cf8f051ba8c0c477b76b2c325a6e6fb4b Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Fri, 14 Aug 2026 00:13:49 -0400 Subject: [PATCH 2/9] split bat score set into its own function --- .../odin/features/impl/dungeon/Mimic.kt | 4 +-- .../utils/skyblock/dungeon/DungeonListener.kt | 32 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt index 8ace0c45f..b309e8b2c 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt @@ -18,7 +18,7 @@ object Mimic : Module( description = "Announces Mimic, Prince and Bat kills in dungeons." ) { private val mimicMessageToggle by BooleanSetting("Send Mimic Message", true, desc = "Toggles the mimic killed message.") - private val reset by ActionSetting("Mimic Killed", desc = "Sends Mimic killed message in party chat.") { mimicKilled() } + private val mimicReset by ActionSetting("Mimic Killed", desc = "Sends Mimic killed message in party chat.") { mimicKilled() } private val princeMessageToggle by BooleanSetting("Send Prince Message", true, desc = "Toggles the prince killed message.") private val princeReset by ActionSetting("Prince Killed", desc = "Sends Prince killed message in party chat.") { princeKilled() } @@ -61,6 +61,6 @@ object Mimic : Module( private fun batKilled() { if(!DungeonUtils.inClear) return if (batMessageToggle) sendCommand("pc Bat Killed (${DungeonUtils.batKilled})") - DungeonListener.dungeonStats.batKilled += 1 + DungeonListener.dungeonStats.incBat(-1) } } \ No newline at end of file diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index ed99aac96..84e9303b8 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -113,14 +113,14 @@ object DungeonListener { dungeonStats.princeKilled = true "bat killed", "bat slain", "bat killed!", "bat dead", "bat dead!" -> - dungeonStats.batKilled=-1 + dungeonStats.incBat(-1) "bat killed (1)" -> - dungeonStats.batKilled=1 + dungeonStats.incBat(1) "bat killed (2)" -> - dungeonStats.batKilled=2 + dungeonStats.incBat(2) "bat killed (3)" -> - dungeonStats.batKilled=3 + dungeonStats.incBat(3) "blaze done!", "blaze done", "blaze puzzle solved!" -> puzzles.find { it == Puzzle.BLAZE }.let { it?.status = PuzzleStatus.Completed } @@ -228,19 +228,21 @@ object DungeonListener { } _mimicKilled = value } - var batKilled: Int + + val batKilled: Int get()=_batKilled - set(value) { - if(value==-1){ - if(!batCd) { - _batKilled++ - batCd=true - schedule(10,true){batCd=false} - } - return + + fun incBat(value:Int){ + if(value==-1){ + if(!batCd) { + _batKilled++ + batCd=true + schedule(10,true){batCd=false} } - if(value>=_batKilled)return - _batKilled++ + return } + if(value>=_batKilled)return + _batKilled++ + } } } \ No newline at end of file From 6ffae30c4dedf75fad45ce7a6ec8e80a9cce2d4d Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Fri, 14 Aug 2026 00:21:24 -0400 Subject: [PATCH 3/9] Bat Killed (0) --- .../kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt index b309e8b2c..81ee1f84a 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt @@ -60,7 +60,7 @@ object Mimic : Module( private fun batKilled() { if(!DungeonUtils.inClear) return - if (batMessageToggle) sendCommand("pc Bat Killed (${DungeonUtils.batKilled})") DungeonListener.dungeonStats.incBat(-1) + if (batMessageToggle) sendCommand("pc Bat Killed (${DungeonUtils.batKilled})") } } \ No newline at end of file From 294624c5f96d53172d4fdce7fb15de4b72b0712d Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Fri, 14 Aug 2026 11:08:26 -0400 Subject: [PATCH 4/9] update to latest odin action --- .../odin/features/impl/dungeon/MapInfo.kt | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt index 0b38ca7be..6d11e2b57 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt @@ -9,11 +9,9 @@ import com.odtheking.odin.events.ScoreUpdateEvent import com.odtheking.odin.events.core.on import com.odtheking.odin.events.core.onReceive import com.odtheking.odin.features.Module -import com.odtheking.odin.features.impl.dungeon.map.tile.RoomType import com.odtheking.odin.utils.Color.Companion.withAlpha import com.odtheking.odin.utils.Colors import com.odtheking.odin.utils.alert -import com.odtheking.odin.utils.handlers.TickTask import com.odtheking.odin.utils.modMessage import com.odtheking.odin.utils.noControlCodes import com.odtheking.odin.utils.render.drawFilledBox @@ -71,10 +69,11 @@ object MapInfo : Module( } } + val batKilled=DungeonUtils.batKilled val mimicText = buildString { append("${if (DungeonUtils.mimicKilled) "§a" else "§c"}\uD83D\uDCE6") append(" §8| ${if (DungeonUtils.princeKilled) "§a" else "§c"}\uD83E\uDD34") - append(" §8| ${if (DungeonUtils.batKilled) "§a" else "§c"}\uD83E\uDD87") + append(" §8| ${colorizeBats(DungeonUtils.dungeonTeammates.size-batKilled)}\uD83E\uDD87$batKilled") } val cryptText = buildString { @@ -151,9 +150,10 @@ object MapInfo : Module( val mimicKilled = DungeonUtils.mimicKilled val princeKilled = DungeonUtils.princeKilled val batKilled = DungeonUtils.batKilled + val playerCount =DungeonUtils.dungeonTeammates.size - val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (if (batKilled) 0 else 1) - + val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (playerCount-batKilled) + val scoreText = buildString { append("§7Score: ") append(colorizeScore(score)) @@ -234,7 +234,15 @@ object MapInfo : Module( portalAABB = null } } - + + private fun colorizeBats(score: Int): String { + return when { + score > 2 -> "§c" + score > 0 -> "§e" + else -> "§a" + } + } + private fun colorizeCrypts(count: Int): String { return when { count < 3 -> "§c${count}" From 86e22fb3e437b3520450016b588369188857d441 Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Fri, 14 Aug 2026 17:04:06 -0400 Subject: [PATCH 5/9] bat message only shows for killing player --- .../odin/features/impl/dungeon/Mimic.kt | 4 +- .../utils/skyblock/dungeon/DungeonListener.kt | 41 ++++--------------- 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt index 81ee1f84a..d8e6a0fc8 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt @@ -60,7 +60,7 @@ object Mimic : Module( private fun batKilled() { if(!DungeonUtils.inClear) return - DungeonListener.dungeonStats.incBat(-1) - if (batMessageToggle) sendCommand("pc Bat Killed (${DungeonUtils.batKilled})") + if (batMessageToggle) sendCommand("pc Bat Killed!") + DungeonListener.dungeonStats.batKilled++ } } \ No newline at end of file diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index d5526a852..4fe37824f 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -8,7 +8,6 @@ import com.odtheking.odin.events.core.onReceive import com.odtheking.odin.features.impl.dungeon.LeapMenu import com.odtheking.odin.features.impl.dungeon.LeapMenu.odinSorting import com.odtheking.odin.features.impl.dungeon.map.DungeonScan -import com.odtheking.odin.utils.handlers.schedule import com.odtheking.odin.utils.network.WebUtils.hasBonusPaulScore import com.odtheking.odin.utils.noControlCodes import com.odtheking.odin.utils.romanToInt @@ -111,23 +110,18 @@ object DungeonListener { teammate.name == (match.groupValues[1].takeUnless { it == "You" } ?: mc.player?.name?.string) }?.deaths?.inc() } - - when (partyMessageRegex.find(value)?.groupValues?.get(1)?.lowercase() ?: return@on) { - "mimic killed", "mimic slain", "mimic killed!", "mimic dead", "mimic dead!", -> + + val partyMessage=partyMessageRegex.find(value)?.groupValues ?: return@on + if(partyMessage[1]==DungeonUtils.currentDungeonPlayer.name) + when (partyMessage[2].lowercase()) { + "mimic killed", "mimic slain", "mimic killed!", "mimic dead", "mimic dead!" -> if (DungeonUtils.isFloor(6, 7)) dungeonStats.mimicKilled = true - "prince killed", "prince slain", "prince killed!", "prince dead", "prince dead!", -> + "prince killed", "prince slain", "prince killed!", "prince dead", "prince dead!" -> dungeonStats.princeKilled = true "bat killed", "bat slain", "bat killed!", "bat dead", "bat dead!" -> - dungeonStats.incBat(-1) - - "bat killed (1)" -> - dungeonStats.incBat(1) - "bat killed (2)" -> - dungeonStats.incBat(2) - "bat killed (3)" -> - dungeonStats.incBat(3) + dungeonStats.batKilled ++ "blaze done!", "blaze done", "blaze puzzle solved!" -> puzzles.find { it == Puzzle.BLAZE }.let { it?.status = PuzzleStatus.Completed } @@ -207,7 +201,7 @@ object DungeonListener { private val secretCountRegex = Regex("^ Secrets Found: (\\d+)$") private val openedRoomsRegex = Regex("^ Opened Rooms: (\\d+)$") private val floorRegex = Regex("The Catacombs \\((\\w+)\\)$") - private val partyMessageRegex = Regex("^Party > .*?: (.+)$") + private val partyMessageRegex = Regex("^Party > (.*?): (.+)$") private val puzzleCountRegex = Regex("^Puzzles: \\((\\d+)\\)$") private val deathsRegex = Regex("^Team Deaths: (\\d+)$") private val cryptRegex = Regex("^ Crypts: (\\d+)$") @@ -224,8 +218,7 @@ object DungeonListener { var elapsedTime: String = "0s", private var _mimicKilled: Boolean = false, var princeKilled: Boolean = false, - private var _batKilled: Int = 0, - private var batCd:Boolean = false, + var batKilled: Int = 0, var doorOpener: String = "Unknown", var bloodDone: Boolean = false, var puzzleCount: Int = 0, @@ -238,21 +231,5 @@ object DungeonListener { } _mimicKilled = value } - - val batKilled: Int - get()=_batKilled - - fun incBat(value:Int){ - if(value==-1){ - if(!batCd) { - _batKilled++ - batCd=true - schedule(10,true){batCd=false} - } - return - } - if(value>=_batKilled)return - _batKilled++ - } } } \ No newline at end of file From 7153f06e7c422695ddd7a61d922e19b26989a052 Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Fri, 14 Aug 2026 17:10:47 -0400 Subject: [PATCH 6/9] formatting --- .../com/odtheking/odin/features/impl/dungeon/MapInfo.kt | 8 ++++---- .../odin/utils/skyblock/dungeon/DungeonListener.kt | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt index 6d11e2b57..4f72b1fc3 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/MapInfo.kt @@ -69,11 +69,11 @@ object MapInfo : Module( } } - val batKilled=DungeonUtils.batKilled + val batKilled = DungeonUtils.batKilled val mimicText = buildString { append("${if (DungeonUtils.mimicKilled) "§a" else "§c"}\uD83D\uDCE6") append(" §8| ${if (DungeonUtils.princeKilled) "§a" else "§c"}\uD83E\uDD34") - append(" §8| ${colorizeBats(DungeonUtils.dungeonTeammates.size-batKilled)}\uD83E\uDD87$batKilled") + append(" §8| ${colorizeBats(DungeonUtils.dungeonTeammates.size - batKilled)}\uD83E\uDD87$batKilled") } val cryptText = buildString { @@ -150,9 +150,9 @@ object MapInfo : Module( val mimicKilled = DungeonUtils.mimicKilled val princeKilled = DungeonUtils.princeKilled val batKilled = DungeonUtils.batKilled - val playerCount =DungeonUtils.dungeonTeammates.size + val playerCount = DungeonUtils.dungeonTeammates.size - val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (playerCount-batKilled) + val missing = (if (mimicKilled) 0 else 2) + (if (princeKilled) 0 else 1) + (playerCount - batKilled) val scoreText = buildString { append("§7Score: ") diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index 4fe37824f..5e5e866c3 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -111,8 +111,8 @@ object DungeonListener { }?.deaths?.inc() } - val partyMessage=partyMessageRegex.find(value)?.groupValues ?: return@on - if(partyMessage[1]==DungeonUtils.currentDungeonPlayer.name) + val partyMessage = partyMessageRegex.find(value)?.groupValues ?: return@on + if(partyMessage[1] == DungeonUtils.currentDungeonPlayer.name) when (partyMessage[2].lowercase()) { "mimic killed", "mimic slain", "mimic killed!", "mimic dead", "mimic dead!" -> if (DungeonUtils.isFloor(6, 7)) dungeonStats.mimicKilled = true @@ -121,7 +121,7 @@ object DungeonListener { dungeonStats.princeKilled = true "bat killed", "bat slain", "bat killed!", "bat dead", "bat dead!" -> - dungeonStats.batKilled ++ + dungeonStats.batKilled++ "blaze done!", "blaze done", "blaze puzzle solved!" -> puzzles.find { it == Puzzle.BLAZE }.let { it?.status = PuzzleStatus.Completed } From 4e50440498c52a593aa08fb74bf75679e8611aa7 Mon Sep 17 00:00:00 2001 From: odtheking Date: Sat, 15 Aug 2026 18:37:32 +0300 Subject: [PATCH 7/9] Cleanup impl --- .../com/odtheking/odin/features/impl/dungeon/Mimic.kt | 2 +- .../odin/utils/skyblock/dungeon/DungeonListener.kt | 8 +++----- .../odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt index d8e6a0fc8..e18e3ff7f 100644 --- a/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt +++ b/src/main/kotlin/com/odtheking/odin/features/impl/dungeon/Mimic.kt @@ -59,7 +59,7 @@ object Mimic : Module( } private fun batKilled() { - if(!DungeonUtils.inClear) return + if (!DungeonUtils.inClear) return if (batMessageToggle) sendCommand("pc Bat Killed!") DungeonListener.dungeonStats.batKilled++ } diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index 5e5e866c3..b39248cf2 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -110,10 +110,8 @@ object DungeonListener { teammate.name == (match.groupValues[1].takeUnless { it == "You" } ?: mc.player?.name?.string) }?.deaths?.inc() } - - val partyMessage = partyMessageRegex.find(value)?.groupValues ?: return@on - if(partyMessage[1] == DungeonUtils.currentDungeonPlayer.name) - when (partyMessage[2].lowercase()) { + // I know people can abuse it to get multiple additional score no idc hopefully hypixel will fix it before i have to + when (partyMessageRegex.find(value)?.groupValues?.get(1)?.lowercase() ?: return@on) { "mimic killed", "mimic slain", "mimic killed!", "mimic dead", "mimic dead!" -> if (DungeonUtils.isFloor(6, 7)) dungeonStats.mimicKilled = true @@ -201,7 +199,7 @@ object DungeonListener { private val secretCountRegex = Regex("^ Secrets Found: (\\d+)$") private val openedRoomsRegex = Regex("^ Opened Rooms: (\\d+)$") private val floorRegex = Regex("The Catacombs \\((\\w+)\\)$") - private val partyMessageRegex = Regex("^Party > (.*?): (.+)$") + private val partyMessageRegex = Regex("^Party > .*?: (.+)$") private val puzzleCountRegex = Regex("^Puzzles: \\((\\d+)\\)$") private val deathsRegex = Regex("^Team Deaths: (\\d+)$") private val cryptRegex = Regex("^ Crypts: (\\d+)$") diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt index 4783cb37a..c38d65528 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonUtils.kt @@ -97,7 +97,7 @@ object DungeonUtils { get() = DungeonListener.dungeonStats.princeKilled inline val batKilled: Int - get() = DungeonListener.dungeonStats.batKilled + get() = DungeonListener.dungeonStats.batKilled.coerceAtMost(dungeonTeammates.size) inline val currentRoom: DungeonRoom? get() = WorldScan.currentRoom From 0d3d48b576b8f9aad8a2e0130d56c3afb81fe3d4 Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Sat, 15 Aug 2026 23:47:09 -0400 Subject: [PATCH 8/9] prevent self double count --- .../odin/utils/skyblock/dungeon/DungeonListener.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index b39248cf2..753548f35 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -110,8 +110,12 @@ object DungeonListener { teammate.name == (match.groupValues[1].takeUnless { it == "You" } ?: mc.player?.name?.string) }?.deaths?.inc() } + // I know people can abuse it to get multiple additional score no idc hopefully hypixel will fix it before i have to - when (partyMessageRegex.find(value)?.groupValues?.get(1)?.lowercase() ?: return@on) { + // the check is to make sure that its not proccing off your own party chat message, forgot the return@on before + val partyMessage = partyMessageRegex.find(value)?.groupValues ?: return@on + if (partyMessage.get(1) == DungeonUtils.currentDungeonPlayer.name) return@on + when (partyMessage.get(2).lowercase()) { "mimic killed", "mimic slain", "mimic killed!", "mimic dead", "mimic dead!" -> if (DungeonUtils.isFloor(6, 7)) dungeonStats.mimicKilled = true From 78f7e48c4d60ed3febdcc5aedf17617e4924b58a Mon Sep 17 00:00:00 2001 From: poisonous888 Date: Sat, 15 Aug 2026 23:48:36 -0400 Subject: [PATCH 9/9] prevent self double count --- .../odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt index 753548f35..b5e9a937c 100644 --- a/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt +++ b/src/main/kotlin/com/odtheking/odin/utils/skyblock/dungeon/DungeonListener.kt @@ -203,7 +203,7 @@ object DungeonListener { private val secretCountRegex = Regex("^ Secrets Found: (\\d+)$") private val openedRoomsRegex = Regex("^ Opened Rooms: (\\d+)$") private val floorRegex = Regex("The Catacombs \\((\\w+)\\)$") - private val partyMessageRegex = Regex("^Party > .*?: (.+)$") + private val partyMessageRegex = Regex("^Party > (.*?): (.+)$") private val puzzleCountRegex = Regex("^Puzzles: \\((\\d+)\\)$") private val deathsRegex = Regex("^Team Deaths: (\\d+)$") private val cryptRegex = Regex("^ Crypts: (\\d+)$")