Skip to content

Commit

Permalink
fix: use client info instead
Browse files Browse the repository at this point in the history
  • Loading branch information
TakoTheDev committed Sep 14, 2024
1 parent d50554f commit b9bafde
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 40 deletions.
2 changes: 1 addition & 1 deletion src/main/kotlin/gg/skytils/skytilsmod/core/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ object Config : Vigilant(

@Property(
type = PropertyType.SELECTOR, name = "Run Breakdown",
description = "§b[WIP] Shows a Breakdown on what players did in the dungeon.",
description = "§b[WIP] Shows a Breakdown on what players did in the dungeon.\n§eNote: Requires teammates to use Skytils Websocket otherwise it's highly inaccurate.",
options = ["Disabled", "Enabled", "Enabled + Terminals"],
category = "Dungeons", subcategory = "Miscellaneous",
i18nName = "skytils.config.dungeons.miscellaneous.run_breakdown",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@

package gg.skytils.skytilsmod.features.impl.dungeons.catlas.core

import gg.skytils.skytilsmod.features.impl.dungeons.catlas.handlers.DungeonScanner
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.utils.MapUtils
import gg.skytils.skytilsmod.listeners.DungeonListener
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.entity.player.EnumPlayerModelParts
import net.minecraft.util.BlockPos
import net.minecraft.util.ResourceLocation

data class DungeonMapPlayer(val teammate: DungeonListener.DungeonTeammate, val skin: ResourceLocation) {
Expand All @@ -41,4 +44,15 @@ data class DungeonMapPlayer(val teammate: DungeonListener.DungeonTeammate, val s
uuid = player.uniqueID.toString()
playerLoaded = true
}

fun getBlockPos(): BlockPos {
val playerPos = this.teammate.player?.playerLocation
if (playerPos != null) return playerPos

val x = (this.mapX.toFloat() - MapUtils.startCorner.first) / MapUtils.coordMultiplier + DungeonScanner.startX - 15
val y = 0.0
val z = (this.mapZ.toFloat() - MapUtils.startCorner.second) / MapUtils.coordMultiplier + DungeonScanner.startZ - 15

return BlockPos(x, y, z)
}
}
63 changes: 52 additions & 11 deletions src/main/kotlin/gg/skytils/skytilsmod/listeners/DungeonListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import gg.skytils.skytilsmod.features.impl.dungeons.ScoreCalculation
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.core.DungeonMapPlayer
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.core.map.Room
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.core.map.RoomType
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.core.map.UniqueRoom
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.handlers.DungeonInfo
import gg.skytils.skytilsmod.features.impl.dungeons.catlas.utils.ScanUtils
import gg.skytils.skytilsmod.features.impl.handlers.CooldownTracker
Expand Down Expand Up @@ -150,6 +151,8 @@ object DungeonListener {
val room = tile.uniqueRoom ?: return@setFoundSecrets
if (room.foundSecrets != sec) {
room.foundSecrets = sec
updateSecrets(room)

if (team.size > 1)
WSClient.sendPacketAsync(C2SPacketDungeonRoomSecret(SBInfo.server ?: return@setFoundSecrets, room.mainRoom.data.name, sec))
}
Expand All @@ -172,9 +175,7 @@ object DungeonListener {
}
}
}
if (text.stripControlCodes()
.trim() == "> EXTRA STATS <"
) {
if (text.stripControlCodes().trim() == "> EXTRA STATS <") {
if (team.size > 1) {
SBInfo.server?.let {
WSClient.sendPacketAsync(C2SPacketDungeonEnd(it))
Expand All @@ -196,16 +197,21 @@ object DungeonListener {
if (Skytils.config.runBreakdown != 0) {
tickTimer(6) {
val output = team.map {
val secretsDone = "§aSecrets: §6${if (it.value.minimumSecretsDone == it.value.maximumSecretsDone) {
"${it.value.minimumSecretsDone}"
} else "${it.value.minimumSecretsDone}§a - §6${it.value.maximumSecretsDone}"}"

val roomsDone = "§aRooms: §6${if (it.value.minimumRoomsDone == it.value.maximumRoomsDone) {
"${it.value.minimumRoomsDone}"
} else "${it.value.minimumRoomsDone}§a - §6${it.value.maximumRoomsDone}"}"
val secretsDone = "§aSecrets: §6${
if (it.value.minimumSecretsDone == it.value.maximumSecretsDone) {
"${it.value.minimumSecretsDone}"
} else "${it.value.minimumSecretsDone}§a - §6${it.value.maximumSecretsDone}"
}"

val roomsDone = "§aRooms: §6${
if (it.value.minimumRoomsDone == it.value.maximumRoomsDone) {
"${it.value.minimumRoomsDone}"
} else "${it.value.minimumRoomsDone}§a - §6${it.value.maximumRoomsDone}"
}"

//TODO: Maybe also save the rank color?
var output = "§6${it.key}§a | $secretsDone§a | $roomsDone§a | Deaths: §6${it.value.deaths}"
var output =
"§6${it.key}§a | $secretsDone§a | $roomsDone§a | Deaths: §6${it.value.deaths}"

if (Skytils.config.runBreakdown == 2 && DungeonFeatures.dungeonFloorNumber == 7) {
output += "§a | Terminals: §6${it.value.terminalsDone}§a | Levers: §6${it.value.leversDone}"
Expand Down Expand Up @@ -530,6 +536,41 @@ object DungeonListener {
}
}

fun updateSecrets(room: UniqueRoom) {
if (room.mainRoom.data.secrets < 1 || (room.foundSecrets ?: -1) < 1) return

val finders = team.filter { entry ->
val location = entry.value.mapPlayer.getBlockPos()
val playerRoom = ScanUtils.getRoomFromPos(location)?.uniqueRoom

playerRoom != null && playerRoom.name != "Unknown" && room.mainRoom.data.name == playerRoom.name
}

if (finders.size >= 2) {
finders.forEach {
team[it.key]?.let { member ->
member.maximumSecretsDone++

if (room.foundSecrets == room.mainRoom.data.secrets) {
member.maximumRoomsDone++
}
}
}
} else if (finders.size == 1) {
finders.forEach {
team[it.key]?.let { member ->
member.minimumSecretsDone++
member.maximumSecretsDone++

if (room.foundSecrets == room.mainRoom.data.secrets) {
member.minimumRoomsDone++
member.maximumRoomsDone++
}
}
}
}
}

data class DungeonTeammate(
val playerName: String,
val dungeonClass: DungeonClass,
Expand Down
29 changes: 2 additions & 27 deletions src/main/kotlin/gg/skytils/skytilsws/client/PacketHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +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.listeners.DungeonListener.updateSecrets
import gg.skytils.skytilsmod.utils.SBInfo
import gg.skytils.skytilsws.shared.IPacketHandler
import gg.skytils.skytilsws.shared.SkytilsWS
Expand Down Expand Up @@ -63,32 +63,7 @@ object PacketHandler : IPacketHandler {
DungeonInfo.uniqueRooms.find { it.mainRoom.data.name == packet.roomId }?.let { room ->
if (packet.secretCount > (room.foundSecrets ?: -1)) {
room.foundSecrets = packet.secretCount
val finders = team.filter { entry ->
val location = entry.value.player?.playerLocation ?: return@filter false
val tile = ScanUtils.getRoomFromPos(location)

tile != null && tile.data.name != "Unknown" && room.mainRoom.data.name == tile.data.name
}

if (finders.size >= 2) {
finders.forEach {
it.value.maximumSecretsDone++

if (packet.secretCount == room.mainRoom.data.secrets) {
it.value.maximumRoomsDone++
}
}
} else if (finders.size == 1) {
finders.forEach {
it.value.minimumSecretsDone++
it.value.maximumSecretsDone++

if (packet.secretCount == room.mainRoom.data.secrets) {
it.value.minimumRoomsDone++
it.value.maximumRoomsDone++
}
}
}
updateSecrets(room)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion ws-shared

0 comments on commit b9bafde

Please sign in to comment.