-- GPS Radar System V10 (Smooth Borders & Containment) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local targetParent = LocalPlayer:FindFirstChild("PlayerGui") or game:GetService("CoreGui") if targetParent:FindFirstChild("GPS_Radar_V10") then targetParent:FindFirstChild("GPS_Radar_V10"):Destroy() end -- UI Setup local ScreenGui = Instance.new("ScreenGui", targetParent) ScreenGui.Name = "GPS_Radar_V10" ScreenGui.ResetOnSpawn = false -- Clipping Frame (Keeps everything inside) local RadarFrame = Instance.new("Frame", ScreenGui) RadarFrame.Size = UDim2.new(0, 230, 0, 230) RadarFrame.Position = UDim2.new(1, -250, 0, 50) RadarFrame.BackgroundColor3 = Color3.fromRGB(10, 10, 10) RadarFrame.ClipsDescendants = true -- Fix: Lines will NOT leave the radar RadarFrame.Active = true RadarFrame.Draggable = true local UICorner = Instance.new("UICorner", RadarFrame) local MainBorder = Instance.new("UIStroke", RadarFrame) MainBorder.Color = Color3.new(1, 1, 1) MainBorder.Thickness = 2 local Canvas = Instance.new("Frame", RadarFrame) Canvas.Size = UDim2.new(1, 0, 1, 0) Canvas.BackgroundTransparency = 1 -- Control Panel local Controls = Instance.new("Frame", ScreenGui) Controls.Size = UDim2.new(0, 230, 0, 45) Controls.Position = UDim2.new(1, -250, 0, 285) Controls.BackgroundColor3 = Color3.fromRGB(20, 20, 20) Instance.new("UICorner", Controls) local ControlStroke = Instance.new("UIStroke", Controls) ControlStroke.Color = Color3.new(1, 1, 1) -- Settings local Config = { Scale = 1.5, PathLifetime = 100, ShowNames = true, Visible = true } -- Buttons local function CreateBtn(pos, text, callback) local btn = Instance.new("TextButton", Controls) btn.Size = UDim2.new(0, 100, 0, 30) btn.Position = pos btn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) btn.Text = text btn.TextColor3 = Color3.new(1, 1, 1) btn.Font = Enum.Font.GothamBold btn.TextSize = 11 Instance.new("UICorner", btn) btn.MouseButton1Click:Connect(function() callback(btn) end) return btn end local NameBtn = CreateBtn(UDim2.new(0, 10, 0, 8), "Names: ON", function(btn) Config.ShowNames = not Config.ShowNames btn.Text = "Names: " .. (Config.ShowNames and "ON" or "OFF") end) local VisBtn = CreateBtn(UDim2.new(0, 120, 0, 8), "Hide Radar", function(btn) Config.Visible = not Config.Visible RadarFrame.Visible = Config.Visible btn.Text = Config.Visible and "Hide Radar" or "Show Radar" end) local PlayerData = {} -- Function to draw a line segment with NO internal gaps local function DrawSmoothSegment(p1, p2, color) local diff = p2 - p1 local dist = diff.Magnitude local angle = math.deg(math.atan2(diff.Y, diff.X)) -- Background Line (White Border) local bgLine = Instance.new("Frame", Canvas) bgLine.BackgroundColor3 = Color3.new(1, 1, 1) bgLine.BorderSizePixel = 0 bgLine.Size = UDim2.new(0, dist + 2, 0, 6) -- Slightly thicker and longer bgLine.AnchorPoint = Vector2.new(0, 0.5) bgLine.Position = UDim2.new(0, p1.X, 0, p1.Y) bgLine.Rotation = angle bgLine.ZIndex = 2 -- Foreground Line (Color) local fgLine = Instance.new("Frame", bgLine) fgLine.BackgroundColor3 = color fgLine.BorderSizePixel = 0 fgLine.Size = UDim2.new(1, 0, 0, 3) -- Thinner to show the white as border fgLine.Position = UDim2.new(0, 0, 0.5, 0) fgLine.AnchorPoint = Vector2.new(0, 0.5) fgLine.ZIndex = 3 return bgLine end -- Update Loop RunService.RenderStepped:Connect(function() if not Config.Visible then return end local char = LocalPlayer.Character if not (char and char:FindFirstChild("HumanoidRootPart")) then return end local myPos = char.HumanoidRootPart.Position for _, player in pairs(Players:GetPlayers()) do local pChar = player.Character if pChar and pChar:FindFirstChild("HumanoidRootPart") then local root = pChar.HumanoidRootPart local worldPos = root.Position if not PlayerData[player.UserId] then PlayerData[player.UserId] = { Color = (player == LocalPlayer) and Color3.new(0, 1, 1) or Color3.fromHSV(math.random(), 0.7, 1), LastWorldPos = worldPos, Dot = nil } end local data = PlayerData[player.UserId] local rel = worldPos - myPos local rx = (rel.X * Config.Scale) + 115 local ry = (rel.Z * Config.Scale) + 115 local currentRadarPos = Vector2.new(rx, ry) -- Player Dot if not data.Dot or not data.Dot.Parent then local d = Instance.new("Frame", Canvas) d.Size = UDim2.new(0, 10, 0, 10) d.AnchorPoint = Vector2.new(0.5, 0.5) d.BackgroundColor3 = data.Color d.ZIndex = 10 Instance.new("UICorner", d).CornerRadius = UDim.new(1,0) Instance.new("UIStroke", d).Color = Color3.new(1,1,1) local l = Instance.new("TextLabel", d) l.Size = UDim2.new(0, 80, 0, 20) l.Position = UDim2.new(0.5, -40, 0, -22) l.BackgroundTransparency = 1 l.TextColor3 = Color3.new(1,1,1) l.Font = Enum.Font.GothamBold l.TextSize = 10 data.Dot = d data.Label = l end data.Dot.Position = UDim2.new(0, rx, 0, ry) data.Label.Text = player.DisplayName data.Label.Visible = Config.ShowNames -- GPS Path Creation if (worldPos - data.LastWorldPos).Magnitude > 2.5 then local startW = data.LastWorldPos local endW = worldPos local p1Rel = startW - myPos local p1Radar = Vector2.new((p1Rel.X * Config.Scale) + 115, (p1Rel.Z * Config.Scale) + 115) local segment = DrawSmoothSegment(p1Radar, currentRadarPos, data.Color) if segment then local moveConn moveConn = RunService.RenderStepped:Connect(function() if not segment or not segment.Parent then moveConn:Disconnect() return end local curMyPos = (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")) and LocalPlayer.Character.HumanoidRootPart.Position or myPos local p1R = startW - curMyPos local p2R = endW - curMyPos local pos1 = Vector2.new((p1R.X * Config.Scale) + 115, (p1R.Z * Config.Scale) + 115) local pos2 = Vector2.new((p2R.X * Config.Scale) + 115, (p2R.Z * Config.Scale) + 115) local diff = pos2 - pos1 segment.Size = UDim2.new(0, diff.Magnitude + 2, 0, 6) segment.Position = UDim2.new(0, pos1.X, 0, pos1.Y) segment.Rotation = math.deg(math.atan2(diff.Y, diff.X)) end) task.delay(Config.PathLifetime, function() segment:Destroy() end) end data.LastWorldPos = worldPos end end end end)