
KeylessUniversal

-- 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)No comments yet for this script.



