local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local localPlayer = Players.LocalPlayer local playerToFindFolder = localPlayer:WaitForChild("ToFindFolder") local workspaceToFind = Workspace:WaitForChild("ToFind") local customFont = Font.new("rbxassetid://11322590111", Enum.FontWeight.Regular, Enum.FontStyle.Normal) local function addShadow(parent) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(0, 0, 0) stroke.Thickness = 2 stroke.Transparency = 0.4 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = parent return stroke end local function addTextStroke(parent) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(0, 0, 0) stroke.Thickness = 1.5 stroke.Transparency = 0 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Contextual stroke.Parent = parent return stroke end local screenGui = Instance.new("ScreenGui") screenGui.Name = "GubbyTrackerUI" screenGui.ResetOnSpawn = false screenGui.Parent = localPlayer:WaitForChild("PlayerGui") local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 140, 0, 180) mainFrame.Position = UDim2.new(0.05, 0, 0.2, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Draggable = true mainFrame.Parent = screenGui addShadow(mainFrame) local uiCorner = Instance.new("UICorner") uiCorner.CornerRadius = UDim.new(0, 6) uiCorner.Parent = mainFrame local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 25) title.Text = "Gubby Finder" title.TextColor3 = Color3.new(1, 1, 1) title.TextSize = 12 title.FontFace = customFont title.BackgroundColor3 = Color3.fromRGB(45, 45, 45) title.Parent = mainFrame Instance.new("UICorner", title).CornerRadius = UDim.new(0, 6) addTextStroke(title) local searchBar = Instance.new("TextBox") searchBar.Size = UDim2.new(1, -10, 0, 20) searchBar.Position = UDim2.new(0, 5, 0, 28) searchBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) searchBar.TextColor3 = Color3.new(1, 1, 1) searchBar.PlaceholderText = "Search..." searchBar.PlaceholderColor3 = Color3.fromRGB(150, 150, 150) searchBar.Text = "" searchBar.TextSize = 11 searchBar.FontFace = customFont searchBar.Parent = mainFrame Instance.new("UICorner", searchBar).CornerRadius = UDim.new(0, 4) addShadow(searchBar) addTextStroke(searchBar) local filterOnlyRed = false local filterBtn = Instance.new("TextButton") filterBtn.Size = UDim2.new(1, -10, 0, 20) filterBtn.Position = UDim2.new(0, 5, 0, 51) filterBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 35) filterBtn.Text = "Filter: All" filterBtn.TextColor3 = Color3.new(1, 1, 1) filterBtn.TextSize = 10 filterBtn.FontFace = customFont filterBtn.Parent = mainFrame Instance.new("UICorner", filterBtn).CornerRadius = UDim.new(0, 4) addShadow(filterBtn) addTextStroke(filterBtn) local minBtn = Instance.new("TextButton") minBtn.Size = UDim2.new(0, 20, 0, 20) minBtn.Position = UDim2.new(1, -25, 0, 2) minBtn.Text = "-" minBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) minBtn.TextColor3 = Color3.new(1, 1, 1) minBtn.FontFace = customFont minBtn.Parent = mainFrame Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 4) addTextStroke(minBtn) local restoreBtn = Instance.new("TextButton") restoreBtn.Size = UDim2.new(0, 80, 0, 30) restoreBtn.Position = UDim2.new(0, 10, 0, 10) restoreBtn.Text = "Restore" restoreBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) restoreBtn.TextColor3 = Color3.new(1, 1, 1) restoreBtn.FontFace = customFont restoreBtn.Visible = false restoreBtn.Parent = screenGui Instance.new("UICorner", restoreBtn).CornerRadius = UDim.new(0, 6) addShadow(restoreBtn) addTextStroke(restoreBtn) local restoreStroke = Instance.new("UIStroke") restoreStroke.Color = Color3.new(1, 1, 1) restoreStroke.Thickness = 1 restoreStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border restoreStroke.Parent = restoreBtn minBtn.MouseButton1Click:Connect(function() mainFrame.Visible = false restoreBtn.Visible = true end) restoreBtn.MouseButton1Click:Connect(function() mainFrame.Visible = true restoreBtn.Visible = false end) local scrollingFrame = Instance.new("ScrollingFrame") scrollingFrame.Size = UDim2.new(1, -10, 1, -78) scrollingFrame.Position = UDim2.new(0, 5, 0, 75) scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollingFrame.ScrollBarThickness = 2 scrollingFrame.BackgroundTransparency = 1 scrollingFrame.Parent = mainFrame local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 4) layout.Parent = scrollingFrame local currentTarget = nil local currentGubbyValue = nil local distanceConnection = nil local masterHighlight = Instance.new("Highlight") masterHighlight.FillColor = Color3.fromRGB(255, 0, 0) masterHighlight.OutlineColor = Color3.new(1, 1, 1) masterHighlight.Parent = screenGui local masterBillboard = Instance.new("BillboardGui") masterBillboard.Size = UDim2.new(0, 120, 0, 40) masterBillboard.AlwaysOnTop = true masterBillboard.Enabled = false masterBillboard.Parent = screenGui local distLabel = Instance.new("TextLabel") distLabel.Size = UDim2.new(1, 0, 1, 0) distLabel.BackgroundTransparency = 1 distLabel.TextColor3 = Color3.new(1, 1, 1) distLabel.Font = Enum.Font.GothamBold distLabel.TextSize = 11 distLabel.Text = "" distLabel.Parent = masterBillboard addTextStroke(distLabel) local labelStroke = Instance.new("UIStroke") labelStroke.Color = Color3.new(0, 0, 0) labelStroke.Thickness = 2 labelStroke.Transparency = 0 labelStroke.Parent = distLabel local function clearTracking() if distanceConnection then distanceConnection:Disconnect() end masterHighlight.Adornee = nil masterBillboard.Adornee = nil masterBillboard.Enabled = false distLabel.Text = "" currentTarget = nil currentGubbyValue = nil end local function startTracking(gubbyObject) clearTracking() local name = gubbyObject.Name local target = nil for _, child in pairs(workspaceToFind:GetChildren()) do if child.Name:lower() == name:lower() then target = child break end end if not target then return end currentTarget = target currentGubbyValue = gubbyObject masterHighlight.Adornee = target masterBillboard.Adornee = target masterBillboard.Enabled = true distanceConnection = RunService.Heartbeat:Connect(function() local character = localPlayer.Character local hrp = character and character:FindFirstChild("HumanoidRootPart") if hrp and currentTarget and currentTarget.Parent then distLabel.TextColor3 = (currentGubbyValue and currentGubbyValue.Value == false) and Color3.fromRGB(255, 50, 50) or Color3.new(1, 1, 1) local dist = (hrp.Position - currentTarget:GetPivot().Position).Magnitude distLabel.Text = string.format("%s\n%.1f studs", name, dist) else clearTracking() end end) end local buttons = {} local function updateVisibility() local searchText = searchBar.Text:lower() for _, data in pairs(buttons) do local nameMatch = data.Name:lower():find(searchText) local filterMatch = (not filterOnlyRed) or (data.Object.Value == false) data.Button.Visible = nameMatch and filterMatch end end searchBar:GetPropertyChangedSignal("Text"):Connect(updateVisibility) filterBtn.MouseButton1Click:Connect(function() filterOnlyRed = not filterOnlyRed filterBtn.Text = filterOnlyRed and "Filter: Red Only" or "Filter: All" filterBtn.BackgroundColor3 = filterOnlyRed and Color3.fromRGB(100, 0, 0) or Color3.fromRGB(35, 35, 35) updateVisibility() end) for _, gubby in pairs(playerToFindFolder:GetChildren()) do if not gubby:IsA("BoolValue") then continue end local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 25) btn.Text = gubby.Name btn.TextColor3 = Color3.new(1, 1, 1) btn.FontFace = customFont btn.TextSize = 11 btn.Parent = scrollingFrame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) addShadow(btn) addTextStroke(btn) local function updateButtonStyle() btn.BackgroundColor3 = (gubby.Value == false) and Color3.fromRGB(150, 0, 0) or Color3.fromRGB(55, 55, 55) if filterOnlyRed then updateVisibility() end end gubby.Changed:Connect(updateButtonStyle) updateButtonStyle() btn.MouseButton1Click:Connect(function() startTracking(gubby) end) table.insert(buttons, {Button = btn, Name = gubby.Name, Object = gubby}) end local function updateCanvas() scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y) end layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(updateCanvas) updateCanvas()