Radar made by scriptruimgemini
Key RequiredUniversal

Radar made by scriptruimgemini

Universal ScriptScriptRuimGeminiScriptRuimGemini 900 views 918 executesUpdated Jan 11, 2026
Unrated
00
Lua Script•192 lines (7529 chars)
-- 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)

Features & Information

Mark
#Mark#Choose#TCS#Game#Hub

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts