Arena of Survival script keyless – Kill aura, ESP
Arena of Survival Keyless
Arena of Survival script keyless – Kill aura, ESP
👤 alexriderr 👁 122 views ❤️ 0 likes ⏱ Jul 25, 2026
This is a **simple, open-source** script for **Arena of Survival** that includes a variety of useful gameplay enhancement features. It offers **ESP**, **local player movement** options, and several **combat** utilities to improve your overall gameplay experience. Since the script is **open source**, you can freely inspect, modify, and customize it to suit your own preferences or add additional functionality.
✨ Features
ESP FullBright Jump Power Speed Walk Speed Kill Aura Auto Pickup
📋 Script Code
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Lighting = game:GetService("Lighting")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer

local oldGui = CoreGui:FindFirstChild("UniverseESPGui")
if oldGui then
	pcall(function()
		oldGui:Destroy()
	end)
end

local oldFolder = CoreGui:FindFirstChild("UniverseHighlights")
if oldFolder then
	pcall(function()
		oldFolder:Destroy()
	end)
end

local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()

Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true

local Window = Library:CreateWindow({
	Title = "Arena of Survival",
	Footer = "Arena of Survival",
	AutoShow = true,
	NotifySide = "Right",
	ShowCustomCursor = false,
})

local espFolder = Instance.new("Folder")
espFolder.Name = "UniverseHighlights"
pcall(function()
	espFolder.Parent = CoreGui
end)

local ESP_FONT = Enum.Font.LuckiestGuy
local KA_RANGE = 60
local KA_DELAY = 0.1
local KA_HITBOX = 60
local PICKUP_RANGE = 30
local DEFAULT_SPEED = 16

local State = {
	Master = false,
	Fill = true,
	SeeThrough = true,
	FillTransparency = 1,
	OutlineTransparency = 0,
	KillAura = false,
	AutoPickup = false,
	Jump = false,
	Fullbright = false,
	ClearView = false,
	SpeedEnabled = false,
	Speed = 28,
}

local whitelist = {}

local function isWhitelisted(plr)
	if not plr then
		return false
	end
	if whitelist[plr.Name:lower()] then
		return true
	end
	if whitelist[plr.DisplayName:lower()] then
		return true
	end
	return false
end

local function restoreWalkSpeed()
	pcall(function()
		local char = LocalPlayer.Character
		local hum = char and char:FindFirstChildOfClass("Humanoid")
		if hum and hum.Health > 0 then
			hum.WalkSpeed = DEFAULT_SPEED
		end
	end)
end

local fbSaved = nil

local function applyFullbright(on)
	if on then
		if not fbSaved then
			fbSaved = {
				Brightness = Lighting.Brightness,
				ClockTime = Lighting.ClockTime,
				FogEnd = Lighting.FogEnd,
				FogStart = Lighting.FogStart,
				GlobalShadows = Lighting.GlobalShadows,
				Ambient = Lighting.Ambient,
				OutdoorAmbient = Lighting.OutdoorAmbient,
				ExposureCompensation = Lighting.ExposureCompensation,
			}
		end
		pcall(function()
			if Lighting.Brightness ~= 2 then
				Lighting.Brightness = 2
			end
			if Lighting.ClockTime ~= 14 then
				Lighting.ClockTime = 14
			end
			if Lighting.FogEnd ~= 1e9 then
				Lighting.FogEnd = 1e9
			end
			if Lighting.FogStart ~= 0 then
				Lighting.FogStart = 0
			end
			if Lighting.GlobalShadows ~= false then
				Lighting.GlobalShadows = false
			end
			if Lighting.Ambient ~= Color3.fromRGB(178, 178, 178) then
				Lighting.Ambient = Color3.fromRGB(178, 178, 178)
			end
			if Lighting.OutdoorAmbient ~= Color3.fromRGB(178, 178, 178) then
				Lighting.OutdoorAmbient = Color3.fromRGB(178, 178, 178)
			end
			if Lighting.ExposureCompensation ~= 0 then
				Lighting.ExposureCompensation = 0
			end
		end)
	else
		if fbSaved then
			pcall(function()
				Lighting.Brightness = fbSaved.Brightness
				Lighting.ClockTime = fbSaved.ClockTime
				Lighting.FogEnd = fbSaved.FogEnd
				Lighting.FogStart = fbSaved.FogStart
				Lighting.GlobalShadows = fbSaved.GlobalShadows
				Lighting.Ambient = fbSaved.Ambient
				Lighting.OutdoorAmbient = fbSaved.OutdoorAmbient
				Lighting.ExposureCompensation = fbSaved.ExposureCompensation
			end)
			fbSaved = nil
		end
	end
end

local cvFog = nil
local cvObjs = {}

local function cvRecordAndDisable()
	for _, d in ipairs(Lighting:GetDescendants()) do
		if d:IsA("BlurEffect") or d:IsA("DepthOfFieldEffect") then
			if cvObjs[d] == nil then
				cvObjs[d] = { kind = "effect", enabled = d.Enabled }
			end
			if d.Enabled ~= false then
				pcall(function()
					d.Enabled = false
				end)
			end
		elseif d:IsA("Atmosphere") then
			if cvObjs[d] == nil then
				cvObjs[d] = { kind = "atmo", density = d.Density }
			end
			if d.Density ~= 0 then
				pcall(function()
					d.Density = 0
				end)
			end
		end
	end
	local cam = Workspace.CurrentCamera
	if cam then
		for _, d in ipairs(cam:GetChildren()) do
			if d:IsA("BlurEffect") or d:IsA("DepthOfFieldEffect") then
				if cvObjs[d] == nil then
					cvObjs[d] = { kind = "effect", enabled = d.Enabled }
				end
				if d.Enabled ~= false then
					pcall(function()
						d.Enabled = false
					end)
				end
			end
		end
	end
end

local function applyClearView(on)
	if on then
		if cvFog == nil then
			cvFog = { FogEnd = Lighting.FogEnd, FogStart = Lighting.FogStart }
		end
		pcall(function()
			if Lighting.FogEnd ~= 1e9 then
				Lighting.FogEnd = 1e9
			end
			if Lighting.FogStart ~= 0 then
				Lighting.FogStart = 0
			end
		end)
		cvRecordAndDisable()
	else
		if cvFog then
			pcall(function()
				Lighting.FogEnd = cvFog.FogEnd
				Lighting.FogStart = cvFog.FogStart
			end)
			cvFog = nil
		end
		for obj, info in pairs(cvObjs) do
			if obj and obj.Parent then
				if info.kind == "effect" then
					pcall(function()
						obj.Enabled = info.enabled
					end)
				elseif info.kind == "atmo" then
					pcall(function()
						obj.Density = info.density
					end)
				end
			end
		end
		cvObjs = {}
	end
end

local Categories = {
	{ key = "Fish", color = Color3.fromRGB(30, 144, 255) },
	{ key = "Crabs", color = Color3.fromRGB(255, 69, 0) },
	{ key = "Boars", color = Color3.fromRGB(139, 0, 0) },
	{ key = "Deer", color = Color3.fromRGB(144, 238, 144) },
	{ key = "Wasps", color = Color3.fromRGB(255, 255, 0) },
	{ key = "Wolves", color = Color3.fromRGB(128, 128, 128) },
	{ key = "Snakes", color = Color3.fromRGB(50, 205, 50) },
	{ key = "Alligator", color = Color3.fromRGB(85, 107, 47) },
	{ key = "MosquitoHive", color = Color3.fromRGB(255, 105, 180) },
	{ key = "Zombies", color = Color3.fromRGB(0, 100, 0) },
	{ key = "Trunks", color = Color3.fromRGB(139, 90, 43) },
	{ key = "Herbs", color = Color3.fromRGB(34, 139, 34) },
	{ key = "Stones", color = Color3.fromRGB(169, 169, 169) },
	{ key = "Coconuts", color = Color3.fromRGB(210, 180, 140) },
	{ key = "BerryBushes", color = Color3.fromRGB(138, 43, 226) },
	{ key = "Weapons", color = Color3.fromRGB(255, 215, 0) },
	{ key = "Caches", color = Color3.fromRGB(0, 191, 255) },
	{ key = "LootContainers", color = Color3.fromRGB(255, 178, 102) },
	{ key = "Food", color = Color3.fromRGB(255, 127, 80) },
	{ key = "Healing", color = Color3.fromRGB(0, 255, 127) },
	{ key = "Utility", color = Color3.fromRGB(176, 196, 222) },
	{ key = "Ammo", color = Color3.fromRGB(192, 192, 192) },
	{ key = "AirDrop", color = Color3.fromRGB(255, 0, 0) },
	{ key = "Water", color = Color3.fromRGB(0, 105, 148) },
	{ key = "Campfire", color = Color3.fromRGB(255, 165, 0) },
	{ key = "CaveZone", color = Color3.fromRGB(101, 67, 33) },
	{ key = "Players", color = Color3.fromRGB(255, 255, 255) },
}

local ColorByKey = {}
for _, cat in ipairs(Categories) do
	ColorByKey[cat.key] = cat.color
end

local WeaponNames = {
	"Battle Axe", "Battleaxe", "Sword", "Mace", "Hatchet", "Hammer", "Flail",
	"Katana", "Falchion", "Trident", "Kunai", "Knife", "Bow",
	"Spear", "Axe", "Machete", "Tomahawk", "Stone-Headed", "Stone-Tipped",
}

local CacheNames = {
	"Cache", "Survival Table", "Supplies",
}

local LootContainerNames = {
	"Small Crate", "Survival Bag",
}

local FoodNames = {
	"Apple", "Bread", "Corn", "Meat", "Berry", "Grape", "Coconut",
}

local HealingNames = {
	"Medkit", "Poultice", "Bandage",
}

local UtilityNames = {
	"Torch", "Bottle", "Disguise",
}

local AmmoNames = {
	"ArrowsDrop", "KnivesDrop", "Arrows", "Knives",
}

local WaterPickupNames = {
	"Bottle", "Canteen", "Waterskin", "Water Bottle", "Flask",
}

local esp = {}
local playerEsp = {}
local connections = {}
local watched = {}
local npcCache = {}
local MeleeHit
local weaponSettings
local originalStats = {}

local function applyVisualToHighlight(hl)
	hl.FillTransparency = State.Fill and State.FillTransparency or 1
	hl.OutlineTransparency = State.OutlineTransparency
	hl.DepthMode = State.SeeThrough and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded
end

local function updateEntry(entry)
	if entry.hl then
		entry.hl.Enabled = State.Master
	end
end

local function refreshVisual()
	for _, entry in pairs(esp) do
		if entry.hl then
			applyVisualToHighlight(entry.hl)
		end
	end
	for _, e in pairs(playerEsp) do
		if e.hl then
			applyVisualToHighlight(e.hl)
		end
	end
end

local function refreshAll()
	for _, entry in pairs(esp) do
		updateEntry(entry)
	end
end

local function removeEntry(target)
	local entry = esp[target]
	if not entry then
		return
	end
	if entry.conn then
		pcall(function()
			entry.conn:Disconnect()
		end)
	end
	if entry.hl then
		pcall(function()
			entry.hl:Destroy()
		end)
	end
	esp[target] = nil
end

local function getTarget(inst)
	if inst:IsA("Model") then
		return inst
	elseif inst:IsA("BasePart") then
		if inst:FindFirstAncestorWhichIsA("Model") then
			return nil
		end
		return inst
	end
	return nil
end

local function matchesAny(name, list)
	for _, entry in ipairs(list) do
		if name:find(entry, 1, true) then
			return true
		end
	end
	return false
end

local function classify(inst)
	local name = inst.Name
	local path = inst:GetFullName()
	if path:find("SpawnedTrunks") or name == "Trunk" or name == "Firewood" or name == "Stump" then
		return "Trunks"
	end
	if path:find("SpawnedHerbs") or name == "Herb" then
		return "Herbs"
	end
	if path:find("Stones") and name:find("Stone") then
		return "Stones"
	end
	if path:find("SpawnedCoconuts") or name == "Coconut" then
		return "Coconuts"
	end
	if path:find("SpawnedBerryBushes") and name:find("Bush") then
		return "BerryBushes"
	end
	if path:find("SpawnedDeer") or name == "Deer" then
		return "Deer"
	end
	if path:find("SpawnedWasps") then
		return "Wasps"
	end
	if path:find("Wolves") or name == "Wolf" then
		return "Wolves"
	end
	if path:find("Snakes", 1, true) and name == "Rabid Snake" then
		return "Snakes"
	end
	if path:find("Alligator") then
		return "Alligator"
	end
	if path:find("Mosquito Hive") then
		return "MosquitoHive"
	end
	if path:find("Sewer Zombies") or name == "Zombie" then
		return "Zombies"
	end
	if path:find("Fauna") and name == "Fish" then
		return "Fish"
	end
	if path:find("SpawnedCrabs") or name == "Crab" then
		return "Crabs"
	end
	if path:find("SpawnedBoars") or name == "Boar" then
		return "Boars"
	end
	if name == "AirDrop" then
		return "AirDrop"
	end
	if path:find("Loot") then
		if matchesAny(name, LootContainerNames) then
			return "LootContainers"
		end
		if matchesAny(name, AmmoNames) then
			return "Ammo"
		end
		if matchesAny(name, HealingNames) then
			return "Healing"
		end
		if matchesAny(name, FoodNames) then
			return "Food"
		end
		if matchesAny(name, CacheNames) then
			return "Caches"
		end
		if matchesAny(name, WeaponNames) then
			return "Weapons"
		end
		if matchesAny(name, UtilityNames) then
			return "Utility"
		end
	end
	if path:find("Sewer Water") then
		return "Water"
	end
	if (path:find("SaltWater") or path:find("WaterZone")) and name == "Water" then
		return "Water"
	end
	if path:find("Campfire") then
		return "Campfire"
	end
	if path:find("CaveZone") and name == "Cave" then
		return "CaveZone"
	end
	return nil
end

local function addHighlight(target, cat)
	if esp[target] then
		return
	end
	local hl = Instance.new("Highlight")
	hl.Name = "UniverseESP"
	hl.Adornee = target
	hl.FillColor = ColorByKey[cat]
	hl.OutlineColor = ColorByKey[cat]
	hl.Enabled = false
	hl.Parent = espFolder
	applyVisualToHighlight(hl)
	local entry = { hl = hl, cat = cat, target = target }
	entry.conn = target.Destroying:Connect(function()
		removeEntry(target)
	end)
	esp[target] = entry
	updateEntry(entry)
end

local function process(inst)
	local target = getTarget(inst)
	if not target then
		return
	end
	if esp[target] then
		return
	end
	local cat = classify(target)
	if not cat then
		return
	end
	addHighlight(target, cat)
end

local function resolvePath(segments)
	local cur = Workspace
	for _, seg in ipairs(segments) do
		if not cur then
			return nil
		end
		cur = cur:FindFirstChild(seg)
	end
	return cur
end

local function watchContainer(container)
	for _, d in ipairs(container:GetDescendants()) do
		process(d)
	end
	process(container)
	local c = container.DescendantAdded:Connect(function(d)
		task.defer(process, d)
	end)
	table.insert(connections, c)
end

local containerSpecs = {
	{ "Arena", "Resources" },
	{ "Arena", "Edible Foliage" },
	{ "Arena", "Fauna" },
	{ "Arena", "Fauna", "Snakes" },
	{ "Arena", "Snakes" },
	{ "Snakes" },
	{ "Arena", "Environmental Traps" },
	{ "Arena", "Sewer" },
	{ "Loot" },
	{ "SaltWater" },
	{ "WaterZone" },
	{ "Campfire" },
	{ "CaveZone" },
}

local function tryWatchAll()
	for _, spec in ipairs(containerSpecs) do
		local c = resolvePath(spec)
		if c and not watched[c] then
			watched[c] = true
			watchContainer(c)
		end
	end
end

local function makeLabel(parent, size, color, height, order)
	local label = Instance.new("TextLabel")
	label.BackgroundTransparency = 1
	label.Size = UDim2.new(1, 0, 0, height)
	label.LayoutOrder = order
	label.Font = ESP_FONT
	label.TextSize = size
	label.TextColor3 = color or ColorByKey.Players
	label.TextStrokeTransparency = 1
	label.TextXAlignment = Enum.TextXAlignment.Center
	label.TextYAlignment = Enum.TextYAlignment.Center
	label.Text = ""
	local stroke = Instance.new("UIStroke")
	stroke.Thickness = 2
	stroke.Color = Color3.fromRGB(0, 0, 0)
	stroke.Transparency = 0
	stroke.LineJoinMode = Enum.LineJoinMode.Round
	stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Contextual
	stroke.Parent = label
	local gradient = Instance.new("UIGradient")
	gradient.Rotation = 90
	gradient.Color = ColorSequence.new({
		ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
		ColorSequenceKeypoint.new(1, Color3.fromRGB(200, 200, 200)),
	})
	gradient.Parent = label
	label.Parent = parent
	return label
end

local function destroyBillboards(e)
	if e.billboard then
		pcall(function()
			e.billboard:Destroy()
		end)
		e.billboard = nil
		e.nameLabel = nil
		e.distLabel = nil
	end
end

local function buildBillboards(e, hrp)
	local bb = Instance.new("BillboardGui")
	bb.Name = "UniversePlayer"
	bb.Size = UDim2.fromOffset(240, 44)
	bb.StudsOffset = Vector3.new(0, -6.2, 0)
	bb.AlwaysOnTop = true
	bb.ResetOnSpawn = false
	bb.Adornee = hrp
	bb.Enabled = false
	bb.Parent = hrp
	local holder = Instance.new("Frame")
	holder.BackgroundTransparency = 1
	holder.Size = UDim2.fromScale(1, 1)
	holder.Parent = bb
	local layout = Instance.new("UIListLayout")
	layout.FillDirection = Enum.FillDirection.Vertical
	layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
	layout.VerticalAlignment = Enum.VerticalAlignment.Top
	layout.SortOrder = Enum.SortOrder.LayoutOrder
	layout.Padding = UDim.new(0, 3)
	layout.Parent = holder
	e.billboard = bb
	e.nameLabel = makeLabel(holder, 16, Color3.fromRGB(255, 255, 255), 22, 1)
	e.distLabel = makeLabel(holder, 13, Color3.fromRGB(190, 210, 255), 18, 2)
end

local function createPlayerVisuals(plr, e)
	local color = ColorByKey.Players
	local hl = Instance.new("Highlight")
	hl.Name = "UniverseESP"
	hl.FillColor = color
	hl.OutlineColor = color
	hl.Enabled = false
	hl.Parent = espFolder
	applyVisualToHighlight(hl)
	e.hl = hl
end

local function removePlayerEsp(plr)
	local e = playerEsp[plr]
	if not e then
		return
	end
	if e.hl then
		pcall(function()
			e.hl:Destroy()
		end)
	end
	destroyBillboards(e)
	playerEsp[plr] = nil
end

local function setupPlayer(plr)
	if plr == LocalPlayer then
		return
	end
	if playerEsp[plr] then
		return
	end
	local e = {}
	playerEsp[plr] = e
	createPlayerVisuals(plr, e)
end

local function updatePlayers()
	local myChar = LocalPlayer.Character
	local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
	for plr, e in pairs(playerEsp) do
		local char = plr.Character
		local hrp = char and char:FindFirstChild("HumanoidRootPart")
		local hum = char and char:FindFirstChildOfClass("Humanoid")
		local alive = hum ~= nil and hum.Health > 0
		local valid = State.Master and char ~= nil and hrp ~= nil and alive and hrp:IsDescendantOf(Workspace)
		if e.hl then
			e.hl.Adornee = valid and char or nil
			e.hl.Enabled = valid
		end
		if hrp then
			if (not e.billboard) or e.billboard.Parent ~= hrp then
				destroyBillboards(e)
				buildBillboards(e, hrp)
			end
		else
			if e.billboard then
				destroyBillboards(e)
			end
		end
		if e.billboard then
			e.billboard.Enabled = valid
		end
		if valid then
			if e.nameLabel then
				e.nameLabel.Text = plr.DisplayName
			end
			if e.distLabel then
				local d = 0
				if myRoot then
					d = math.floor((hrp.Position - myRoot.Position).Magnitude)
				end
				e.distLabel.Text = d .. " studs"
			end
		end
	end
end

local function enforceSpeed()
	if not State.SpeedEnabled then
		return
	end
	local char = LocalPlayer.Character
	local hum = char and char:FindFirstChildOfClass("Humanoid")
	if hum and hum.Health > 0 then
		if hum.WalkSpeed ~= State.Speed then
			hum.WalkSpeed = State.Speed
		end
	end
end

local function getWeaponTool()
	local char = LocalPlayer.Character
	if not char then
		return nil
	end
	for _, t in ipairs(char:GetChildren()) do
		if t:IsA("Tool") and t:GetAttribute("WeaponName") then
			return t
		end
	end
	return nil
end

local function fireMeleeHit(targetChar, targetPlayer, weaponName, attackIndex)
	if not MeleeHit then
		return
	end
	pcall(function()
		MeleeHit:FireServer({
			Type = "Hit",
			Attacker = LocalPlayer,
			WeaponName = weaponName,
			AttackIndex = attackIndex,
			TargetModel = targetChar,
			TargetPlayer = targetPlayer,
			HitPartName = "HumanoidRootPart",
		})
	end)
end

local function rebuildNpcCache()
	local list = {}
	for _, d in ipairs(Workspace:GetDescendants()) do
		if d:IsA("Humanoid") and d.Health > 0 then
			local model = d.Parent
			if model and not Players:GetPlayerFromCharacter(model) then
				local root = model:FindFirstChild("HumanoidRootPart") or model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")
				if root then
					table.insert(list, { char = model, root = root })
				end
			end
		end
	end
	npcCache = list
end

local function collectTargets(range)
	local out = {}
	local myChar = LocalPlayer.Character
	local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
	if not myRoot then
		return out
	end
	for _, plr in ipairs(Players:GetPlayers()) do
		if plr ~= LocalPlayer and plr.Character then
			local hum = plr.Character:FindFirstChildOfClass("Humanoid")
			local hrp = plr.Character:FindFirstChild("HumanoidRootPart")
			if hum and hrp and hum.Health > 0 then
				if (hrp.Position - myRoot.Position).Magnitude <= range then
					table.insert(out, { char = plr.Character, player = plr })
				end
			end
		end
	end
	for _, npc in ipairs(npcCache) do
		if npc.char and npc.char.Parent and npc.root and npc.root.Parent then
			if (npc.root.Position - myRoot.Position).Magnitude  0) then
		return
	end
	local tool = getWeaponTool()
	if not tool then
		return
	end
	local weaponName = tool:GetAttribute("WeaponName")
	if not weaponName then
		return
	end
	local targets = collectTargets(KA_RANGE)
	for _, t in ipairs(targets) do
		if not (t.player and isWhitelisted(t.player)) then
			for i = 1, 3 do
				fireMeleeHit(t.char, t.player, weaponName, i)
			end
		end
	end
end

local function isConsumable(target, cat)
	if cat == "Food" or cat == "Healing" then
		return true
	end
	if matchesAny(target.Name, WaterPickupNames) then
		return true
	end
	return false
end

local function getPickupPart(target)
	if target:IsA("BasePart") then
		return target
	end
	if target:IsA("Model") then
		if target.PrimaryPart then
			return target.PrimaryPart
		end
		return target:FindFirstChildWhichIsA("BasePart", true)
	end
	return nil
end

local function collectPickup(target)
	local prompt = target:FindFirstChildWhichIsA("ProximityPrompt", true)
	if prompt and fireproximityprompt then
		pcall(fireproximityprompt, prompt)
		return
	end
	local btn = target:FindFirstChildWhichIsA("ClickDetector", true)
	if btn and fireclickdetector then
		pcall(fireclickdetector, btn)
		return
	end
	if firetouchinterest then
		local char = LocalPlayer.Character
		local hrp = char and char:FindFirstChild("HumanoidRootPart")
		local part = getPickupPart(target)
		if hrp and part then
			pcall(firetouchinterest, hrp, part, 0)
			pcall(firetouchinterest, hrp, part, 1)
		end
	end
end

local function doAutoPickup()
	local char = LocalPlayer.Character
	local hrp = char and char:FindFirstChild("HumanoidRootPart")
	if not hrp then
		return
	end
	for target, entry in pairs(esp) do
		if target and target.Parent and isConsumable(target, entry.cat) then
			local part = getPickupPart(target)
			if part and (part.Position - hrp.Position).Magnitude  0 then
			hum:ChangeState(Enum.HumanoidStateType.Jumping)
		end
	end
end)
table.insert(connections, jumpConn)

local tagAcc = 0
local kaAcc = 0
local npcAcc = 0
local extAcc = 0
local pickupAcc = 0
local mainLoop = RunService.Heartbeat:Connect(function(dt)
	enforceSpeed()

	if State.Fullbright then
		applyFullbright(true)
	end

	if State.ClearView then
		applyClearView(true)
	end

	tagAcc = tagAcc + dt
	if tagAcc >= 0.05 then
		tagAcc = 0
		updatePlayers()
	end

	npcAcc = npcAcc + dt
	if npcAcc >= 1 then
		npcAcc = 0
		if State.KillAura then
			rebuildNpcCache()
		end
	end

	extAcc = extAcc + dt
	if extAcc >= 1 then
		extAcc = 0
		if State.KillAura then
			updateExtender()
		end
	end

	kaAcc = kaAcc + dt
	if kaAcc >= KA_DELAY then
		kaAcc = 0
		if State.KillAura then
			doKillAura()
		end
	end

	pickupAcc = pickupAcc + dt
	if pickupAcc >= 0.2 then
		pickupAcc = 0
		if State.AutoPickup then
			doAutoPickup()
		end
	end
end)
table.insert(connections, mainLoop)

local MainTab = Window:AddTab("Main", "sparkles")

local VisualsBox = MainTab:AddLeftGroupbox("Visuals", "eye")

local MasterToggle = VisualsBox:AddToggle("ESP_Master", {
	Text = "ESP",
	Default = false,
})
MasterToggle:OnChanged(function()
	State.Master = MasterToggle.Value
	refreshAll()
end)

local FullbrightToggle = VisualsBox:AddToggle("Fullbright", {
	Text = "Fullbright",
	Default = false,
})
FullbrightToggle:OnChanged(function()
	State.Fullbright = FullbrightToggle.Value
	applyFullbright(State.Fullbright)
end)

local ClearViewToggle = VisualsBox:AddToggle("ClearView", {
	Text = "Clear View (No Fog / Blur)",
	Default = false,
})
ClearViewToggle:OnChanged(function()
	State.ClearView = ClearViewToggle.Value
	applyClearView(State.ClearView)
end)

local MovementBox = MainTab:AddLeftGroupbox("Movement", "footprints")

local JumpToggle = MovementBox:AddToggle("JumpMod", {
	Text = "Jump (No CD / Stackable)",
	Default = false,
})
JumpToggle:OnChanged(function()
	State.Jump = JumpToggle.Value
end)

local SpeedToggle = MovementBox:AddToggle("SpeedEnabled", {
	Text = "Speed",
	Default = false,
})
SpeedToggle:OnChanged(function()
	State.SpeedEnabled = SpeedToggle.Value
	if not State.SpeedEnabled then
		restoreWalkSpeed()
	end
end)

MovementBox:AddSlider("Speed", {
	Text = "Walk Speed",
	Default = 28,
	Min = 1,
	Max = 40,
	Rounding = 0,
	Callback = function(value)
		State.Speed = value
	end,
})

local CombatBox = MainTab:AddRightGroupbox("Combat", "swords")

local KAToggle = CombatBox:AddToggle("KA_Enabled", {
	Text = "Kill Aura",
	Default = false,
})
KAToggle:OnChanged(function()
	State.KillAura = KAToggle.Value
	if State.KillAura then
		rebuildNpcCache()
	end
	updateExtender()
end)

CombatBox:AddDivider()

local function getWhitelistDisplayNames()
	local values = {}
	for _, plr in ipairs(Players:GetPlayers()) do
		if plr ~= LocalPlayer then
			table.insert(values, plr.DisplayName)
		end
	end
	table.sort(values, function(a, b)
		return a:lower() < b:lower()
	end)
	return values
end

local WLDropdown = CombatBox:AddDropdown("KA_Whitelist", {
	Text = "Don't damage",
	Values = getWhitelistDisplayNames(),
	Multi = true,
	Default = {},
})
WLDropdown:OnChanged(function(value)
	local set = {}
	for name, selected in pairs(value or {}) do
		if selected then
			set[tostring(name):lower()] = true
		end
	end
	whitelist = set
end)

local function refreshWhitelistDisplayNames()
	local selected = WLDropdown.Value or {}
	local values = getWhitelistDisplayNames()
	local available = {}
	local preserved = {}
	for _, name in ipairs(values) do
		available[name] = true
	end
	for name, enabled in pairs(selected) do
		if enabled and available[name] then
			preserved[name] = true
		end
	end
	WLDropdown:SetValues(values)
	WLDropdown:SetValue(preserved)
end

local wlAddedConn = Players.PlayerAdded:Connect(function()
	task.defer(refreshWhitelistDisplayNames)
end)
table.insert(connections, wlAddedConn)

local wlRemovingConn = Players.PlayerRemoving:Connect(function()
	task.defer(refreshWhitelistDisplayNames)
end)
table.insert(connections, wlRemovingConn)

CombatBox:AddLabel("Select in-match players to protect from Kill Aura.", true)

local UtilityBox = MainTab:AddRightGroupbox("Utility", "package")

local PickupToggle = UtilityBox:AddToggle("AutoPickup", {
	Text = "Auto Pickup (Food & Health)",
	Default = false,
})
PickupToggle:OnChanged(function()
	State.AutoPickup = PickupToggle.Value
end)

local SettingsTab = Window:AddTab("Settings", "sliders-horizontal")

SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetFolder("Arena of Survival")
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })

ThemeManager:SetLibrary(Library)
ThemeManager:SetFolder("Arena of Survival")

local ConfigGroupbox = SettingsTab:AddLeftGroupbox("Configuration", "folder-cog")

ConfigGroupbox:AddInput("SaveManager_ConfigName", {
	Text = "Config name",
	Placeholder = "My Config",
})

ConfigGroupbox:AddButton("Create config", function()
	local name = Library.Options.SaveManager_ConfigName.Value
	if name:gsub(" ", "") == "" then
		Library:Notify("Invalid config name (empty)", 2)
		return
	end
	local success, err = SaveManager:Save(name)
	if not success then
		Library:Notify("Failed to create config: " .. err)
		return
	end
	Library:Notify(string.format("Created config %q", name))
	Library.Options.SaveManager_ConfigList:SetValues(SaveManager:RefreshConfigList())
	Library.Options.SaveManager_ConfigList:SetValue(nil)
end)

ConfigGroupbox:AddDivider()

ConfigGroupbox:AddDropdown("SaveManager_ConfigList", {
	Text = "Config list",
	Values = SaveManager:RefreshConfigList(),
	AllowNull = true,
})

ConfigGroupbox:AddButton("Load config", function()
	local name = Library.Options.SaveManager_ConfigList.Value
	local success, err = SaveManager:Load(name)
	if not success then
		Library:Notify("Failed to load config: " .. err)
		return
	end
	Library:Notify(string.format("Loaded config %q", name))
end)

ConfigGroupbox:AddButton("Overwrite config", function()
	local name = Library.Options.SaveManager_ConfigList.Value
	local success, err = SaveManager:Save(name)
	if not success then
		Library:Notify("Failed to overwrite config: " .. err)
		return
	end
	Library:Notify(string.format("Overwrote config %q", name))
end)

ConfigGroupbox:AddButton("Refresh list", function()
	Library.Options.SaveManager_ConfigList:SetValues(SaveManager:RefreshConfigList())
	Library.Options.SaveManager_ConfigList:SetValue(nil)
end)

local AutoloadLabel = ConfigGroupbox:AddLabel("Current autoload config: " .. SaveManager:GetAutoloadConfig(), true)

ConfigGroupbox:AddButton("Set as autoload", function()
	local name = Library.Options.SaveManager_ConfigList.Value
	local success, err = SaveManager:SaveAutoloadConfig(name)
	if not success then
		Library:Notify("Failed to set autoload config: " .. err)
		return
	end
	Library:Notify(string.format("Set %q to auto load", name))
	AutoloadLabel:SetText("Current autoload config: " .. name)
end)

ConfigGroupbox:AddButton("Reset autoload", function()
	local success, err = SaveManager:DeleteAutoLoadConfig()
	if not success then
		Library:Notify("Failed to reset autoload config: " .. err)
		return
	end
	Library:Notify("Set autoload to none")
	AutoloadLabel:SetText("Current autoload config: none")
end)

local MenuGroup = SettingsTab:AddRightGroupbox("Menu", "wrench")

MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", {
	Default = "RightControl",
	NoUI = true,
	Text = "Menu keybind",
})

MenuGroup:AddButton("Unload", function()
	Library:Unload()
end)

SaveManager:SetIgnoreIndexes({ "SaveManager_ConfigList", "SaveManager_ConfigName", "MenuKeybind", "KA_Whitelist" })

Library.ToggleKeybind = Library.Options.MenuKeybind
ThemeManager:ApplyToTab(SettingsTab)

SaveManager:LoadAutoloadConfig()

task.defer(function()
	refreshVisual()
	refreshAll()
	updatePlayers()
end)

Library:OnUnload(function()
	cleanup()
	print("Script unloaded successfully.")
end)
🎮 Similar Scripts
💬 Comments (0)
Login to post a comment
No comments yet. Be the first!
Script Info
Game Arena of Survival
TypeKeyless
Authoralexriderr
Views122
Likes0
PublishedJul 25, 2026
🎮 Play Game on Roblox
🕐 Recent Scripts
Monochrome script keyless | esp: off/on, refresh code
Monochrome script keyless | esp: off/on, refresh code
MONOCHROME👁️ • 👁 6
Keyless
Pull an egg script keyless | auto train, auto dumbells
Pull an egg script keyless | auto train, auto dumbells
Pull An Egg • 👁 7
Keyless
Anime dice script keyless | auto roll, auto collect money,
Anime dice script keyless | auto roll, auto collect money,
Anime Dice • 👁 9
Keyless
The veil [BETA] script keyless | auto farm npcs, auto equip weapon
The veil [BETA] script keyless | auto farm npcs, auto equip weapon
The Veil • 👁 10
Keyless
Merge an SCP script keyless | auto merge, auto rebirth
Merge an SCP script keyless | auto merge, auto rebirth
Merge an SCP • 👁 12
Keyless