Update main.lua

This commit is contained in:
2026-02-24 15:03:10 +00:00
parent b2193cc038
commit e3f8291d75

159
main.lua
View File

@@ -106,6 +106,7 @@ local DEFAULT_SETTINGS = {
espRefreshMs = 150,
espMaxDistance = 1500,
espInactiveDetection = false,
multiSelectMode = false,
teleportViewKey = "V",
teleportPointKey = "Equals",
@@ -238,6 +239,7 @@ local function loadSettings()
settings.espRefreshMs = math.floor(clampNumber(parsed.espRefreshMs, 33, 500, settings.espRefreshMs) + 0.5)
settings.espMaxDistance = math.floor(clampNumber(parsed.espMaxDistance, 50, 10000, settings.espMaxDistance) + 0.5)
settings.espInactiveDetection = readBoolean(parsed.espInactiveDetection, settings.espInactiveDetection)
settings.multiSelectMode = readBoolean(parsed.multiSelectMode, settings.multiSelectMode)
settings.teleportViewKey = normaliseKeyName(parsed.teleportViewKey, settings.teleportViewKey)
settings.teleportPointKey = normaliseKeyName(parsed.teleportPointKey, settings.teleportPointKey)
@@ -727,6 +729,7 @@ refreshKeyObjects()
local trackedPlayers = {}
local selectedTeleportPlayerUserId = nil
local selectedTeleportPlayerUserIds = {}
local function rebuildTrackedPlayers()
trackedPlayers = {}
@@ -742,6 +745,10 @@ local function removeTrackedPlayer(player)
selectedTeleportPlayerUserId = nil
end
if player then
selectedTeleportPlayerUserIds[player.UserId] = nil
end
for index = #trackedPlayers, 1, -1 do
if trackedPlayers[index] == player then
table.remove(trackedPlayers, index)
@@ -913,7 +920,12 @@ local function getSelectedTeleportPlayerLabel()
return "No players"
end
return string.format("%d/%d %s", index, #trackedPlayers, player.Name)
local suffix = ""
if settings.multiSelectMode and selectedTeleportPlayerUserIds[player.UserId] then
suffix = " [Selected]"
end
return string.format("%d/%d %s%s", index, #trackedPlayers, player.Name, suffix)
end
local function cycleTeleportPlayer()
@@ -929,6 +941,93 @@ local function cycleTeleportPlayer()
selectedTeleportPlayerUserId = selectedPlayer and selectedPlayer.UserId or nil
end
local function isTeleportPlayerInSelection(player)
if not player then
return false
end
return selectedTeleportPlayerUserIds[player.UserId] == true
end
local function toggleSelectedTeleportPlayerInSelection()
local player = getSelectedTeleportPlayer()
if not player then
return false
end
local userId = player.UserId
if selectedTeleportPlayerUserIds[userId] then
selectedTeleportPlayerUserIds[userId] = nil
else
selectedTeleportPlayerUserIds[userId] = true
end
return true
end
local function clearTeleportPlayerSelection()
selectedTeleportPlayerUserIds = {}
end
local function getMultiSelectedTeleportPlayers()
local selectedPlayers = {}
for _, player in ipairs(trackedPlayers) do
if selectedTeleportPlayerUserIds[player.UserId] then
selectedPlayers[#selectedPlayers + 1] = player
end
end
return selectedPlayers
end
local function getMultiSelectedTeleportPlayersLabel()
if not settings.multiSelectMode then
return "Mode Off"
end
local selectedPlayers = getMultiSelectedTeleportPlayers()
if #selectedPlayers < 1 then
return "None"
end
if #selectedPlayers == 1 then
return selectedPlayers[1].Name
end
return tostring(#selectedPlayers) .. " players"
end
local function getCurrentSelectionActionLabel()
if not settings.multiSelectMode then
return "Mode Off"
end
local player = getSelectedTeleportPlayer()
if not player then
return "No players"
end
if isTeleportPlayerInSelection(player) then
return "Remove"
end
return "Add"
end
local function getSniperTargetPlayers()
if settings.multiSelectMode then
return getMultiSelectedTeleportPlayers()
end
local selectedPlayer = getSelectedTeleportPlayer()
if selectedPlayer then
return {selectedPlayer}
end
return {}
end
local function teleportToSelectedPlayer()
local player = getSelectedTeleportPlayer()
if not player then
@@ -1005,12 +1104,11 @@ local function fireSingleShot()
return ok
end
local function sniperKillSelectedPlayer()
local function sniperKillPlayer(player)
if birdTeleportActive then
return false
end
local player = getSelectedTeleportPlayer()
if not player then
return false
end
@@ -1090,6 +1188,22 @@ local function sniperKillSelectedPlayer()
return shotCount > 0
end
local function sniperKillSelectedPlayers()
local targetPlayers = getSniperTargetPlayers()
if #targetPlayers < 1 then
return false
end
local didAny = false
for _, player in ipairs(targetPlayers) do
if sniperKillPlayer(player) then
didAny = true
end
end
return didAny
end
local function teleportToView()
local hit = Mouse and Mouse.Hit
if not hit then
@@ -1909,6 +2023,11 @@ local function updateEsp()
local useDistanceIndicator = showTracers and settings.espDistanceIndicator
local nowTime = os.clock()
local inactivePlayers = settings.espInactiveDetection and {} or nil
local trackedLookup = {}
for _, trackedPlayer in ipairs(trackedPlayers) do
trackedLookup[trackedPlayer] = true
end
local nearestDistance = nil
local furthestDistance = nil
@@ -2036,6 +2155,12 @@ local function updateEsp()
end
end
end
for player in pairs(espEntries) do
if not trackedLookup[player] or player.Parent ~= Players then
destroyEspEntry(player)
end
end
end
local function isSameTeam(otherPlayer)
@@ -2267,6 +2392,13 @@ end, function(state)
saveSettings()
end)
addToggleRow(PlayersPage, "Multi Select Mode", function()
return settings.multiSelectMode
end, function(state)
settings.multiSelectMode = state
saveSettings()
end)
if not hasDrawing then
addActionRow(PlayersPage, "Drawing API", "Unavailable", function()
end)
@@ -2311,12 +2443,28 @@ end, function()
cycleTeleportPlayer()
end)
addDynamicActionRow(TeleportPage, "Selection Action", function()
return getCurrentSelectionActionLabel()
end, function()
if settings.multiSelectMode then
toggleSelectedTeleportPlayerInSelection()
end
end)
addDynamicActionRow(TeleportPage, "Selected Players", function()
return getMultiSelectedTeleportPlayersLabel()
end, function()
if settings.multiSelectMode then
clearTeleportPlayerSelection()
end
end)
addActionRow(TeleportPage, "Teleport to Selected Player", "Teleport", function()
teleportToSelectedPlayer()
end)
addActionRow(TeleportPage, "Sniper Kill Selected Player", "Execute", function()
task.spawn(sniperKillSelectedPlayer)
task.spawn(sniperKillSelectedPlayers)
end)
addToggleRow(TeleportPage, "Sniper Stay Hidden", function()
@@ -2402,6 +2550,7 @@ addActionRow(ConfigPage, "Reset", "Defaults", function()
selectedTeleportPointIndex = 1
selectedTeleportPlayerIndex = 1
selectedTeleportPlayerUserId = nil
selectedTeleportPlayerUserIds = {}
MainFrame.Visible = settings.uiVisible
applyCameraMode()
@@ -2496,7 +2645,7 @@ trackConnection(UserInputService.InputBegan:Connect(function(input, gameProcesse
end
if input.UserInputType == Enum.UserInputType.Keyboard and isBoundKeyPressed(input.KeyCode, currentSniperKillKey) then
task.spawn(sniperKillSelectedPlayer)
task.spawn(sniperKillSelectedPlayers)
return
end