-- Roblox ESP with Inventory Check local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- Configuration: Add the names of tools/items you want to detect local TARGET_ITEMS = { "Gun", "AK-47", "Shotgun", "Sword", "Knife", "Rifle" } -- GUI for settings local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ESPGui" ScreenGui.Parent = game.CoreGui ScreenGui.ResetOnSpawn = false local MainFrame = Instance.new("Frame") MainFrame.Size = UDim2.new(0, 250, 0, 200) MainFrame.Position = UDim2.new(0, 10, 0, 10) MainFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) MainFrame.BorderSizePixel = 0 MainFrame.Parent = ScreenGui local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, 0, 0, 30) Title.Position = UDim2.new(0, 0, 0, 0) Title.BackgroundColor3 = Color3.fromRGB(30, 30, 30) Title.BorderSizePixel = 0 Title.Text = "Inventory ESP" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.Font = Enum.Font.SourceSansBold Title.TextSize = 16 Title.Parent = MainFrame local ToggleButton = Instance.new("TextButton") ToggleButton.Size = UDim2.new(0.9, 0, 0, 30) ToggleButton.Position = UDim2.new(0.05, 0, 0, 40) ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80) ToggleButton.BorderSizePixel = 0 ToggleButton.Text = "ESP: OFF" ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.Font = Enum.Font.SourceSans ToggleButton.TextSize = 14 ToggleButton.Parent = MainFrame local ItemList = Instance.new("TextLabel") ItemList.Size = UDim2.new(0.9, 0, 0, 100) ItemList.Position = UDim2.new(0.05, 0, 0, 80) ItemList.BackgroundColor3 = Color3.fromRGB(50, 50, 50) ItemList.BorderSizePixel = 0 ItemList.Text = "Tracking: " .. table.concat(TARGET_ITEMS, ", ") ItemList.TextColor3 = Color3.fromRGB(200, 200, 200) ItemList.Font = Enum.Font.SourceSans ItemList.TextSize = 12 ItemList.TextWrapped = true ItemList.Parent = MainFrame -- State variables local espEnabled = false local trackedPlayers = {} local highlightParts = {} -- Function to check if a player has target items function playerHasTargetItems(player) if not player.Character then return false end -- Check backpack local backpack = player:FindFirstChild("Backpack") if backpack then for _, itemName in ipairs(TARGET_ITEMS) do if backpack:FindFirstChild(itemName) then return true, itemName end end end -- Check character local character = player.Character for _, itemName in ipairs(TARGET_ITEMS) do if character:FindFirstChild(itemName) then return true, itemName end end return false end -- Function to create ESP for a player function createESP(player, itemName) if trackedPlayers[player] then return end local highlight = Instance.new("Highlight") highlight.Name = "InventoryESP" highlight.FillColor = Color3.fromRGB(255, 0, 0) highlight.OutlineColor = Color3.fromRGB(255, 255, 0) highlight.FillTransparency = 0.5 highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = player.Character local billboard = Instance.new("BillboardGui") billboard.Name = "ESPLabel" billboard.Size = UDim2.new(0, 200, 0, 50) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.Parent = player.Character local label = Instance.new("TextLabel") label.Size = UDim2.new(1, 0, 1, 0) label.BackgroundTransparency = 1 label.Text = player.Name .. "\nHas: " .. itemName label.TextColor3 = Color3.fromRGB(255, 255, 255) label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) label.TextStrokeTransparency = 0 label.TextSize = 14 label.Font = Enum.Font.SourceSansBold label.Parent = billboard trackedPlayers[player] = { Highlight = highlight, Billboard = billboard, Label = label } end -- Function to remove ESP from a player function removeESP(player) if not trackedPlayers[player] then return end if trackedPlayers[player].Highlight then trackedPlayers[player].Highlight:Destroy() end if trackedPlayers[player].Billboard then trackedPlayers[player].Billboard:Destroy() end trackedPlayers[player] = nil end -- Function to update all ESPs function updateESPs() for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local hasItem, itemName = playerHasTargetItems(player) if hasItem then createESP(player, itemName) else removeESP(player) end end end end -- Function to check characters when they're added function monitorPlayer(player) player.CharacterAdded:Connect(function(character) if espEnabled then wait(1) -- Wait for character to fully load local hasItem, itemName = playerHasTargetItems(player) if hasItem then createESP(player, itemName) end end end) player.CharacterRemoving:Connect(function() removeESP(player) end) end -- Initialize player monitoring for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then monitorPlayer(player) end end Players.PlayerAdded:Connect(function(player) monitorPlayer(player) end) Players.PlayerRemoving:Connect(function(player) removeESP(player) end) -- Toggle functionality ToggleButton.MouseButton1Click:Connect(function() espEnabled = not espEnabled if espEnabled then ToggleButton.Text = "ESP: ON" ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 150, 0) updateESPs() else ToggleButton.Text = "ESP: OFF" ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80) -- Remove all ESPs for player, _ in pairs(trackedPlayers) do removeESP(player) end end end) -- Make the GUI draggable for both mouse and touch local dragging = false local dragInput, dragStart, startPos -- Function to handle input began local function onInputBegan(input) if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end -- Function to handle input changed local function onInputChanged(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end -- Connect events for both mouse and touch Title.InputBegan:Connect(onInputBegan) Title.InputChanged:Connect(onInputChanged) -- Also allow dragging by touching anywhere on the frame for mobile users MainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch then onInputBegan(input) end end) MainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch then onInputChanged(input) end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) -- Periodic update RunService.Heartbeat:Connect(function() if espEnabled then updateESPs() end end) print("Inventory ESP script loaded!") print("Tracking items: " .. table.concat(TARGET_ITEMS, ", "))