local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local camera = workspace.CurrentCamera local gui = Instance.new("ScreenGui") gui.Name = "Tracer GUI" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.DisplayOrder = -2147483648 gui.Parent = playerGui local tracers = {} local function getHRP(targetPlayer) if not targetPlayer or not targetPlayer.Parent then return nil end local char = targetPlayer.Character if not char or not char.Parent then return nil end local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp or not hrp:IsA("BasePart") then return nil end return hrp end local function removeTracer(targetPlayer) local data = tracers[targetPlayer] if not data then return end if data.pivot then data.pivot:Destroy() end tracers[targetPlayer] = nil end local function addTracer(targetPlayer) if targetPlayer == player then return end if tracers[targetPlayer] then return end local pivot = Instance.new("Frame") pivot.Name = "Tracer_" .. targetPlayer.UserId pivot.AnchorPoint = Vector2.new(0.5, 0.5) pivot.Position = UDim2.fromScale(0.5, 1) pivot.Size = UDim2.fromOffset(1, 1) pivot.BackgroundTransparency = 1 pivot.Visible = false pivot.ZIndex = -2147483648 pivot.Parent = gui local line = Instance.new("Frame") line.Name = "Line" line.AnchorPoint = Vector2.new(0.5, 1) line.Position = UDim2.fromScale(0.5, 0.5) line.Size = UDim2.fromOffset(2, 0) line.BackgroundColor3 = Color3.fromRGB(255, 0, 0) line.BorderSizePixel = 0 line.ZIndex = -2147483648 line.Parent = pivot tracers[targetPlayer] = { pivot = pivot, line = line, lastPos = nil, } end local function hookPlayer(targetPlayer) if targetPlayer == player then return end targetPlayer.CharacterAdded:Connect(function() addTracer(targetPlayer) end) targetPlayer.CharacterRemoving:Connect(function() local data = tracers[targetPlayer] if data then data.lastPos = nil data.pivot.Visible = false end end) addTracer(targetPlayer) end for _, other in ipairs(Players:GetPlayers()) do hookPlayer(other) end Players.PlayerAdded:Connect(hookPlayer) Players.PlayerRemoving:Connect(removeTracer) RunService.RenderStepped:Connect(function() local viewport = camera.ViewportSize local originX = viewport.X * 0.5 local originY = viewport.Y for targetPlayer, data in pairs(tracers) do if not targetPlayer.Parent then removeTracer(targetPlayer) else local hrp = getHRP(targetPlayer) local worldv Pos = nil if hrp then worldPos = hrp.Position data.lastPos = worldPos else worldPos = data.lastPos end if not worldPos then data.pivot.Visible = false else local screenPos = camera:WorldToViewportPoint(worldPos) local dirX = screenPos.X - originX local dirY = screenPos.Y - originY if screenPos.Z < 0 then dirX = -dirX dirY = -dirY end if dirX ~= dirX or dirY ~= dirY then data.pivot.Visible = false else data.pivot.Visible = true data.pivot.Rotation = math.deg(math.atan2(dirX, -dirY)) data.line.Size = UDim2.fromOffset(2, math.sqrt(dirX * dirX + dirY * dirY)) end end end end end)