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 0b38ca7b..4f72b1fc 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}" 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 1c02e1cd..e18e3ff7 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() } @@ -59,8 +59,8 @@ object Mimic : Module( } private fun batKilled() { - if (DungeonUtils.batKilled || !DungeonUtils.inClear) return + if (!DungeonUtils.inClear) return if (batMessageToggle) sendCommand("pc Bat Killed!") - DungeonListener.dungeonStats.batKilled = true + 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 98928730..b5e9a937 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,16 +110,20 @@ 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!", -> + + // I know people can abuse it to get multiple additional score no idc hopefully hypixel will fix it before i have to + // 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 - "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.batKilled = true + dungeonStats.batKilled++ "blaze done!", "blaze done", "blaze puzzle solved!" -> puzzles.find { it == Puzzle.BLAZE }.let { it?.status = PuzzleStatus.Completed } @@ -199,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+)$") @@ -216,7 +220,7 @@ object DungeonListener { var elapsedTime: String = "0s", private var _mimicKilled: Boolean = false, var princeKilled: Boolean = false, - var batKilled: Boolean = false, + var batKilled: Int = 0, var doorOpener: String = "Unknown", var bloodDone: Boolean = false, var puzzleCount: Int = 0, 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 7b498c0d..c38d6552 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 @@ -96,8 +96,8 @@ object DungeonUtils { inline val princeKilled: Boolean get() = DungeonListener.dungeonStats.princeKilled - inline val batKilled: Boolean - get() = DungeonListener.dungeonStats.batKilled + inline val batKilled: Int + get() = DungeonListener.dungeonStats.batKilled.coerceAtMost(dungeonTeammates.size) inline val currentRoom: DungeonRoom? get() = WorldScan.currentRoom @@ -110,7 +110,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 }