local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local espEnabled = { Zombie = false, Heals = false, Food = false, Gas = false, Armor = false, Weapon = false, Scrap = false, } local espDistance = 150 local ESP_COLORS = { Zombie = Color3.fromRGB(255, 60, 60), Heals = Color3.fromRGB( 80, 255, 160), Food = Color3.fromRGB( 80, 255, 80), Gas = Color3.fromRGB(220, 100, 255), Armor = Color3.fromRGB( 80, 150, 255), Weapon = Color3.fromRGB(255, 140, 0), Scrap = Color3.fromRGB(200, 160, 70), } local TAG_MAP = { Zombie = {"zombie","undead","infected","walker","crawler","ghoul","zomb"}, Heals = { "medkit", "med kit", "firstaid", "first aid", "medbox", "health kit", "bandage", "gauze", "wrap", }, Food = { "food","cola","soda","water bottle","can of","canned","snack","bloxy", "chips","candy","juice","coffee","energy drink","apple","banana","pizza", "burger","soup","meal","ration","hearts","heart","bread","beef", }, Gas = {"gas can","gascan","gas_can","jerry can","jerrycan","fuel can","fuelcan","canister","fuel jug","fuel"}, Armor = { "light armor","lightarmor","light_armor","medium armor","mediumarmor","medium_armor", "heavy armor","heavyarmor","heavy_armor","power arm","powerarm","power_arm", "power core","powercore","power_core","vest","helmet","plate carrier","body armor","armor","armour", }, Weapon = { "heavy sniper","heavysniper","uzi","pistol","revolver","rifle","shotgun","smg","sniper", "carbine","assault","lmg","dmr","ak","m4","m16","m1911","mp5","mp40","ump", "deagle","glock","beretta","colt","awp","awm","kar98","mosin","barrett", "remington","winchester","spas","aa12","rpg","crossbow","flamethrower", "crowbar","hammer","wrench","bat","knife","machete","hatchet","axe","sword","katana","gun","weapon","firearm", "pistol ammo","medium ammo","long ammo","shotgun ammo","sniper ammo", "rifle ammo","shells","shell","ammo","rounds","bullets","magazine","mag", }, Scrap = {"scrap","scraps","metal scrap","junk","salvage","batteries","battery"}, } local function matchItem(name) local low = name:lower() for item, kws in pairs(TAG_MAP) do for _, kw in ipairs(kws) do if low:find(kw, 1, true) then return item end end end end local cachedObjects = {} for item in pairs(TAG_MAP) do cachedObjects[item] = {} end local function alreadyCached(obj, item) for _, v in ipairs(cachedObjects[item]) do if v == obj then return true end end end local function tryRegister(obj) local parent = obj.Parent if not parent then return end if parent.Name == "DroppedItems" or (parent.Parent and parent.Parent.Name == "DroppedItems") then local item = matchItem(obj.Name) if item and not alreadyCached(obj, item) then table.insert(cachedObjects[item], obj) end elseif parent.Name == "Characters" then local isPlayer = false for _, p in ipairs(Players:GetPlayers()) do if p.Character == obj then isPlayer = true; break end end if not isPlayer and not alreadyCached(obj, "Zombie") then table.insert(cachedObjects["Zombie"], obj) end end end local function unregister(obj) for _, list in pairs(cachedObjects) do for i = #list, 1, -1 do if list[i] == obj then table.remove(list, i) end end end end local function scanFolder(name) local folder = workspace:FindFirstChild(name) if not folder then return end for _, obj in ipairs(folder:GetChildren()) do tryRegister(obj) for _, child in ipairs(obj:GetChildren()) do tryRegister(child) end end folder.ChildAdded:Connect(tryRegister) folder.ChildRemoved:Connect(unregister) end scanFolder("DroppedItems") scanFolder("Characters") task.delay(3, function() scanFolder("DroppedItems"); scanFolder("Characters") end) local CAR_EXACT = { ["Crashed Car 1"] = true, ["Crashed Car 2"] = true, } local CAR_CONTAINS = {"vehicle","truck","van","sedan","suv"} local function isCarName(name) if CAR_EXACT[name] then return true end local low = name:lower() for _, kw in ipairs(CAR_CONTAINS) do if low:find(kw, 1, true) then return true end end return false end local function tryRegisterCar(obj) if not (obj:IsA("Model") or obj:IsA("BasePart")) then return end if isCarName(obj.Name) and not alreadyCached(obj, "Scrap") then table.insert(cachedObjects["Scrap"], obj) end end local function scanCars() for _, obj in ipairs(workspace:GetDescendants()) do tryRegisterCar(obj) end end scanCars() task.delay(3, scanCars) workspace.DescendantAdded:Connect(tryRegisterCar) workspace.DescendantRemoving:Connect(unregister) local activeESP = {} local function getBasePart(obj) if obj:IsA("BasePart") then return obj end if obj:IsA("Model") and obj.PrimaryPart then return obj.PrimaryPart end return obj:FindFirstChildWhichIsA("BasePart", true) end local function getPosition(obj) local bp = getBasePart(obj) return bp and bp.Position end local function showESP(obj, item, dist) local color = ESP_COLORS[item] local data = activeESP[obj] if not data then local h = Instance.new("Highlight") h.FillColor = color h.OutlineColor = color h.FillTransparency = 0.45 h.OutlineTransparency = 0 h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop h.Adornee = obj h.Parent = obj local adornee = getBasePart(obj) local bb if adornee then bb = Instance.new("BillboardGui") bb.Size = UDim2.new(0, 140, 0, 40) bb.StudsOffset = Vector3.new(0, 4.5, 0) bb.AlwaysOnTop = true bb.LightInfluence = 0 bb.Adornee = adornee bb.Parent = obj local nameLbl = Instance.new("TextLabel", bb) nameLbl.Size = UDim2.new(1, 0, 0.55, 0) nameLbl.BackgroundTransparency = 1 nameLbl.Text = obj.Name nameLbl.TextColor3 = color nameLbl.Font = Enum.Font.GothamBold nameLbl.TextSize = 13 nameLbl.TextXAlignment = Enum.TextXAlignment.Center nameLbl.TextStrokeTransparency = 0.3 nameLbl.TextStrokeColor3 = Color3.new(0, 0, 0) local distLbl = Instance.new("TextLabel", bb) distLbl.Name = "DistLabel" distLbl.Size = UDim2.new(1, 0, 0.45, 0) distLbl.Position = UDim2.new(0, 0, 0.55, 0) distLbl.BackgroundTransparency = 1 distLbl.Text = math.floor(dist) .. " m" distLbl.TextColor3 = Color3.fromRGB(220, 220, 220) distLbl.Font = Enum.Font.Gotham distLbl.TextSize = 11 distLbl.TextXAlignment = Enum.TextXAlignment.Center distLbl.TextStrokeTransparency = 0.3 distLbl.TextStrokeColor3 = Color3.new(0, 0, 0) end activeESP[obj] = { highlight = h, billboard = bb } else if data.billboard then local distLbl = data.billboard:FindFirstChild("DistLabel") if distLbl then distLbl.Text = math.floor(dist) .. " m" end end end end local function hideESP(obj) local data = activeESP[obj] if not data then return end if data.highlight and data.highlight.Parent then data.highlight:Destroy() end if data.billboard and data.billboard.Parent then data.billboard:Destroy() end activeESP[obj] = nil end local TICK_RATE = 0.1 local ticker = 0 RunService.Heartbeat:Connect(function(dt) ticker = ticker + dt if ticker < TICK_RATE then return end ticker = 0 local char = LocalPlayer.Character local root = char and char:FindFirstChild("HumanoidRootPart") local origin = root and root.Position local shouldShow = {} if origin then for item, enabled in pairs(espEnabled) do if enabled then for _, obj in ipairs(cachedObjects[item]) do if obj and obj.Parent then local pos = getPosition(obj) if pos then local d = (pos - origin).Magnitude if d <= espDistance then shouldShow[obj] = {item = item, dist = d} end end end end end end end for obj, info in pairs(shouldShow) do showESP(obj, info.item, info.dist) end for obj in pairs(activeESP) do if not shouldShow[obj] then hideESP(obj) end end end) _G.SurviveESP_Debug = function() print("=== Survive ESP Cache ===") for item, list in pairs(cachedObjects) do print(item .. ": " .. #list) for _, obj in ipairs(list) do print(" " .. obj.Name) end end local di = workspace:FindFirstChild("DroppedItems") if di then print("--- DroppedItems ---") for _, c in ipairs(di:GetChildren()) do print(" " .. c.Name) end end print("=========================") end local BLACK = Color3.fromRGB(0, 0, 0) local ORANGE = Color3.fromRGB(255, 140, 0) local DARK_GREY = Color3.fromRGB(18, 18, 18) local MID_GREY = Color3.fromRGB(45, 45, 45) local WHITE = Color3.fromRGB(255, 255, 255) local gui = Instance.new("ScreenGui") gui.Name = "SurviveESP_GUI" gui.ResetOnSpawn = false gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.Parent = (gethui and gethui()) or game:GetService("CoreGui") local outerFrame = Instance.new("Frame") outerFrame.Name = "OuterBorder" outerFrame.Size = UDim2.new(0, 220, 0, 100) outerFrame.Position = UDim2.new(0, 40, 0, 80) outerFrame.BackgroundColor3 = ORANGE outerFrame.BorderSizePixel = 0 outerFrame.Active = true outerFrame.Draggable = true outerFrame.Parent = gui Instance.new("UICorner", outerFrame).CornerRadius = UDim.new(0, 6) local main = Instance.new("Frame") main.Name = "Main" main.Size = UDim2.new(1, -4, 1, -4) main.Position = UDim2.new(0, 2, 0, 2) main.BackgroundColor3 = BLACK main.BorderSizePixel = 0 main.Parent = outerFrame Instance.new("UICorner", main).CornerRadius = UDim.new(0, 5) local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -50, 0, 32) title.Position = UDim2.new(0, 0, 0, 6) title.BackgroundTransparency = 1 title.Text = "Survive The Apocalypse" title.TextColor3 = ORANGE title.Font = Enum.Font.GothamBold title.TextSize = 14 title.Parent = main local toggleHint = Instance.new("TextLabel") toggleHint.Size = UDim2.new(0, 44, 0, 32) toggleHint.Position = UDim2.new(1, -46, 0, 6) toggleHint.BackgroundTransparency = 1 toggleHint.Text = "[P]" toggleHint.TextColor3 = Color3.fromRGB(100, 100, 100) toggleHint.Font = Enum.Font.Gotham toggleHint.TextSize = 10 toggleHint.TextXAlignment = Enum.TextXAlignment.Right toggleHint.TextYAlignment = Enum.TextYAlignment.Top toggleHint.Parent = main local function makeDivider(y) local d = Instance.new("Frame") d.Size = UDim2.new(1, -16, 0, 1) d.Position = UDim2.new(0, 8, 0, y) d.BackgroundColor3 = Color3.fromRGB(60, 60, 60) d.BorderSizePixel = 0 d.Parent = main end makeDivider(40) local distLabel = Instance.new("TextLabel") distLabel.Size = UDim2.new(1, -16, 0, 16) distLabel.Position = UDim2.new(0, 8, 0, 48) distLabel.BackgroundTransparency = 1 distLabel.Text = "ESP Distance: 150 m" distLabel.TextColor3 = Color3.fromRGB(200, 200, 200) distLabel.Font = Enum.Font.Gotham distLabel.TextSize = 11 distLabel.TextXAlignment = Enum.TextXAlignment.Left distLabel.Parent = main local sliderTrack = Instance.new("Frame") sliderTrack.Size = UDim2.new(1, -16, 0, 4) sliderTrack.Position = UDim2.new(0, 8, 0, 68) sliderTrack.BackgroundColor3 = MID_GREY sliderTrack.BorderSizePixel = 0 sliderTrack.Parent = main Instance.new("UICorner", sliderTrack).CornerRadius = UDim.new(1, 0) local sliderFill = Instance.new("Frame") sliderFill.Size = UDim2.new((espDistance - 10) / 490, 0, 1, 0) sliderFill.BackgroundColor3 = ORANGE sliderFill.BorderSizePixel = 0 sliderFill.Parent = sliderTrack Instance.new("UICorner", sliderFill).CornerRadius = UDim.new(1, 0) local sliderHandle = Instance.new("TextButton") sliderHandle.Size = UDim2.new(0, 12, 0, 12) sliderHandle.Position = UDim2.new((espDistance - 10) / 490, -6, 0.5, -6) sliderHandle.BackgroundColor3 = WHITE sliderHandle.BorderSizePixel = 0 sliderHandle.Text = "" sliderHandle.Parent = sliderTrack Instance.new("UICorner", sliderHandle).CornerRadius = UDim.new(1, 0) local dragging = false sliderHandle.MouseButton1Down:Connect(function() dragging = true end) UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UserInputService.InputChanged:Connect(function(i) if not dragging or i.UserInputType ~= Enum.UserInputType.MouseMovement then return end local ratio = math.clamp((i.Position.X - sliderTrack.AbsolutePosition.X) / sliderTrack.AbsoluteSize.X, 0, 1) espDistance = math.floor(10 + ratio * 490) distLabel.Text = "ESP Distance: " .. espDistance .. " m" sliderFill.Size = UDim2.new(ratio, 0, 1, 0) sliderHandle.Position = UDim2.new(ratio, -6, 0.5, -6) end) makeDivider(80) local espHeader = Instance.new("TextLabel") espHeader.Size = UDim2.new(1, -16, 0, 16) espHeader.Position = UDim2.new(0, 8, 0, 86) espHeader.BackgroundTransparency = 1 espHeader.Text = "ESP" espHeader.TextColor3 = ORANGE espHeader.Font = Enum.Font.GothamBold espHeader.TextSize = 11 espHeader.TextXAlignment = Enum.TextXAlignment.Left espHeader.Parent = main local ITEMS = {"Zombie","Heals","Food","Gas","Armor","Weapon","Scrap"} local BASE_Y = 106 local ROW_H = 26 local toggleBtns = {} local dots = {} local function rebuildLayout() local y = BASE_Y for _, item in ipairs(ITEMS) do toggleBtns[item].Position = UDim2.new(0, 8, 0, y) dots[item].Position = UDim2.new(1, -22, 0, y + 7) y = y + ROW_H end local totalH = y + 10 main.Size = UDim2.new(1, -4, 0, totalH) outerFrame.Size = UDim2.new(0, 220, 0, totalH + 4) end for _, item in ipairs(ITEMS) do local col = ESP_COLORS[item] local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, -16, 0, 22) btn.BackgroundColor3 = DARK_GREY btn.BorderSizePixel = 0 btn.Text = item btn.TextColor3 = Color3.fromRGB(210, 210, 210) btn.Font = Enum.Font.Gotham btn.TextSize = 12 btn.TextXAlignment = Enum.TextXAlignment.Left btn.AutoButtonColor = false btn.Parent = main Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) local pad = Instance.new("UIPadding", btn) pad.PaddingLeft = UDim.new(0, 10) toggleBtns[item] = btn local accent = Instance.new("Frame") accent.Name = "Accent" accent.Size = UDim2.new(0, 3, 1, -6) accent.Position = UDim2.new(0, 0, 0, 3) accent.BackgroundColor3 = col accent.BorderSizePixel = 0 accent.Visible = false accent.Parent = btn Instance.new("UICorner", accent).CornerRadius = UDim.new(1, 0) local dot = Instance.new("Frame") dot.Size = UDim2.new(0, 8, 0, 8) dot.BackgroundColor3 = Color3.fromRGB(55, 55, 55) dot.BorderSizePixel = 0 dot.Parent = main Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0) dots[item] = dot btn.MouseButton1Click:Connect(function() espEnabled[item] = not espEnabled[item] local on = espEnabled[item] dot.BackgroundColor3 = on and col or Color3.fromRGB(55, 55, 55) accent.Visible = on btn.TextColor3 = on and col or Color3.fromRGB(210, 210, 210) if not on then for _, obj in ipairs(cachedObjects[item]) do hideESP(obj) end end rebuildLayout() end) btn.MouseEnter:Connect(function() btn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) end) btn.MouseLeave:Connect(function() btn.BackgroundColor3 = DARK_GREY end) end rebuildLayout() UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.KeyCode == Enum.KeyCode.P then outerFrame.Visible = not outerFrame.Visible end end)