Update main.lua
This commit is contained in:
159
main.lua
159
main.lua
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user