Home All Scripts Trending Forum Upload Script Login with Google
Arena of Survival script keyless Kill aura, ESP 🔓 Keyless

Arena of Survival script keyless Kill aura, ESP

48 views  •  3 weeks ago
A
Arena of Survival
48 views 3 weeks ago #ArenaofSurvival

Step into the ultimate battleground with the Arena of Survival script, designed to give you an unmatched tactical advantage over every opponent in the arena. This powerful, keyless utility eliminates tedious key bypasses, letting you dive straight into the action with dominant combat enhancements instantly. Whether you are hunting down hidden players or sweeping up valuable loot, this script ensures you remain the last warrior standing.

Key Features

  • Kill Aura & Auto Pickup: Unleash devastating automatic attacks on nearby enemies while instantly vacuuming up dropped loot to maximize your combat efficiency.
  • ESP & Full Bright: Keep track of every player’s exact location through solid walls and illuminate the darkest corners of the map for flawless visibility.
  • Speed & Jump Customization: Effortlessly outmaneuver threats with adjustable walk speed and jump height modifications that allow you to traverse the battlefield in seconds.
  • Free & Keyless Access: Enjoy unrestricted access to all premium combat features without dealing with annoying linkvertises, key systems, or hidden advertisements.
  • Optimized & Mobile-Friendly: Experience lag-free gameplay with lightweight code that runs flawlessly across mobile executors like Delta, Codex, and Hydrogen, as well as PC clients.

How to Use the Script

  1. Launch the Roblox application and join the Arena of Survival game.
  2. Open your trusted Roblox executor client, such as Delta, Codex, Hydrogen, or Wave.
  3. Copy the official Arena of Survival Pastebin loadstring code.
  4. Paste the copied script into your executor’s code execution box and click “Execute”.
  5. Configure your preferences on the clean in-game GUI menu to start dominating the battlefield.
Compatible Executors: Codex, Delta, Hydro, Potassium, Volt, Wave, Xeno
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 <= range then
				table.insert(out, { char = npc.char, player = nil })
			end
		end
	end
	return out
end

local function applyExtender(size)
	if not weaponSettings then
		return false
	end
	local sizeVec = Vector3.new(size, size, size)
	local offVec = Vector3.new(0, 0, 0)
	for name, data in pairs(weaponSettings) do
		if type(data) == "table" and (data.HitboxSize ~= nil or data.Attack1 ~= nil) then
			if originalStats[name] == nil then
				local saved = { size = data.HitboxSize, offset = data.HitboxOffset, a = {} }
				for i = 1, 3 do
					local atk = data["Attack" .. i]
					if type(atk) == "table" then
						saved.a[i] = { size = atk.HitboxSize, offset = atk.HitboxOffset, dt = atk.DamageTime }
					end
				end
				originalStats[name] = saved
			end
			data.HitboxSize = sizeVec
			data.HitboxOffset = offVec
			for i = 1, 3 do
				local atk = data["Attack" .. i]
				if type(atk) == "table" then
					atk.HitboxSize = sizeVec
					atk.HitboxOffset = offVec
					atk.DamageTime = 1.5
				end
			end
		end
	end
	return true
end

local function restoreExtender()
	if not weaponSettings then
		return
	end
	for name, saved in pairs(originalStats) do
		local data = weaponSettings[name]
		if type(data) == "table" then
			data.HitboxSize = saved.size
			data.HitboxOffset = saved.offset
			for i = 1, 3 do
				if saved.a[i] then
					local atk = data["Attack" .. i]
					if type(atk) == "table" then
						atk.HitboxSize = saved.a[i].size
						atk.HitboxOffset = saved.a[i].offset
						atk.DamageTime = saved.a[i].dt
					end
				end
			end
		end
	end
	originalStats = {}
end

local function updateExtender()
	if not weaponSettings then
		return
	end
	if State.KillAura then
		applyExtender(KA_HITBOX)
	else
		restoreExtender()
	end
end

local function doKillAura()
	local char = LocalPlayer.Character
	local hum = char and char:FindFirstChildOfClass("Humanoid")
	local hrp = char and char:FindFirstChild("HumanoidRootPart")
	if not (hum and hrp and hum.Health > 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 <= PICKUP_RANGE then
				collectPickup(target)
			end
		end
	end
end

local function cleanup()
	for _, c in ipairs(connections) do
		pcall(function()
			c:Disconnect()
		end)
	end
	for target, entry in pairs(esp) do
		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
	for plr in pairs(playerEsp) do
		removePlayerEsp(plr)
	end
	pcall(restoreExtender)
	applyFullbright(false)
	applyClearView(false)
	restoreWalkSpeed()
	pcall(function()
		espFolder:Destroy()
	end)
end

task.spawn(function()
	local ms = ReplicatedStorage:WaitForChild("MeleeSystem", 10)
	if ms then
		local ev = ms:WaitForChild("Events", 10)
		if ev then
			MeleeHit = ev:WaitForChild("MeleeHit", 10)
		end
	end
end)

task.spawn(function()
	local ws = ReplicatedStorage:WaitForChild("Weapon Settings", 10)
	if ws and ws:IsA("ModuleScript") then
		local ok, res = pcall(require, ws)
		if ok and type(res) == "table" then
			weaponSettings = res
			updateExtender()
		end
	end
end)

tryWatchAll()

local arena = Workspace:FindFirstChild("Arena")
if arena then
	local ac = arena.ChildAdded:Connect(function()
		task.defer(tryWatchAll)
	end)
	table.insert(connections, ac)
end

local wc = Workspace.ChildAdded:Connect(function()
	task.defer(tryWatchAll)
end)
table.insert(connections, wc)

task.spawn(function()
	while espFolder.Parent do
		task.wait(3)
		tryWatchAll()
	end
end)

for _, plr in ipairs(Players:GetPlayers()) do
	setupPlayer(plr)
end

local paConn = Players.PlayerAdded:Connect(function(plr)
	setupPlayer(plr)
end)
table.insert(connections, paConn)

local prConn = Players.PlayerRemoving:Connect(function(plr)
	removePlayerEsp(plr)
end)
table.insert(connections, prConn)

local jumpConn = UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if not State.Jump then
		return
	end
	if gameProcessed then
		return
	end
	if input.KeyCode == Enum.KeyCode.Space or input.KeyCode == Enum.KeyCode.ButtonA then
		local char = LocalPlayer.Character
		local hum = char and char:FindFirstChildOfClass("Humanoid")
		if hum and hum.Health > 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)
💬 Comments 0
You

No comments yet. Be the first!