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