Tracer GUI
Key RequiredUniversal

Tracer GUI

Universal Scriptlucobruco11lucobruco11 250 views 69 executesUpdated Mar 1, 2026
Unrated
00
Lua Script•735 lines (20789 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local LP = Players.LocalPlayer
local PG = LP:WaitForChild("PlayerGui")

local following = false
local targetPlayer = nil
local selectedName = nil
local dropOpen = false
local guiOpen = false
local hue = 0
local conns = {}
local posBuf = {}
local stateBuf = {}
local toolBuf = {}
local DELAY = 1
local RECORD_INTERVAL = 1 / 30

local SG = Instance.new("ScreenGui")
SG.Name = "FollowTraceGui"
SG.ResetOnSpawn = false
SG.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
SG.DisplayOrder = 999
SG.Parent = PG

local function createCorner(parent, radius)
	local c = Instance.new("UICorner")
	c.CornerRadius = UDim.new(0, radius)
	c.Parent = parent
	return c
end

local function createStroke(parent, thickness, color, transparency)
	local s = Instance.new("UIStroke")
	s.Thickness = thickness
	s.Color = color or Color3.new(1, 1, 1)
	s.Transparency = transparency or 0
	s.Parent = parent
	return s
end

local ToggleBtn = Instance.new("TextButton")
ToggleBtn.Name = "RGBToggle"
ToggleBtn.Size = UDim2.new(0, 52, 0, 52)
ToggleBtn.Position = UDim2.new(0, 16, 0.5, -26)
ToggleBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
ToggleBtn.Text = "F"
ToggleBtn.TextColor3 = Color3.new(1, 1, 1)
ToggleBtn.TextSize = 24
ToggleBtn.Font = Enum.Font.GothamBold
ToggleBtn.ZIndex = 100
ToggleBtn.AutoButtonColor = false
ToggleBtn.Parent = SG
createCorner(ToggleBtn, 26)
createStroke(ToggleBtn, 2.5, Color3.new(1, 1, 1), 0.2)

local ToggleShadow = Instance.new("ImageLabel")
ToggleShadow.Name = "Shadow"
ToggleShadow.BackgroundTransparency = 1
ToggleShadow.Size = UDim2.new(1, 16, 1, 16)
ToggleShadow.Position = UDim2.new(0, -8, 0, -8)
ToggleShadow.ZIndex = 99
ToggleShadow.Image = "rbxassetid://6015897843"
ToggleShadow.ImageColor3 = Color3.new(0, 0, 0)
ToggleShadow.ImageTransparency = 0.5
ToggleShadow.ScaleType = Enum.ScaleType.Slice
ToggleShadow.SliceCenter = Rect.new(49, 49, 450, 450)
ToggleShadow.Parent = ToggleBtn

local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, 240, 0, 350)
MainFrame.Position = UDim2.new(0.5, -120, 0.5, -175)
MainFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 30)
MainFrame.BorderSizePixel = 0
MainFrame.Visible = false
MainFrame.ZIndex = 50
MainFrame.Parent = SG
createCorner(MainFrame, 12)
createStroke(MainFrame, 1.5, Color3.fromRGB(60, 60, 80), 0)

local TopBar = Instance.new("Frame")
TopBar.Name = "TopBar"
TopBar.Size = UDim2.new(1, 0, 0, 38)
TopBar.BackgroundColor3 = Color3.fromRGB(30, 30, 42)
TopBar.BorderSizePixel = 0
TopBar.ZIndex = 51
TopBar.Parent = MainFrame
createCorner(TopBar, 12)

local TopBarFill = Instance.new("Frame")
TopBarFill.Name = "Fill"
TopBarFill.Size = UDim2.new(1, 0, 0, 16)
TopBarFill.Position = UDim2.new(0, 0, 1, -16)
TopBarFill.BackgroundColor3 = Color3.fromRGB(30, 30, 42)
TopBarFill.BorderSizePixel = 0
TopBarFill.ZIndex = 51
TopBarFill.Parent = TopBar

local TitleLabel = Instance.new("TextLabel")
TitleLabel.Name = "Title"
TitleLabel.Size = UDim2.new(1, -16, 1, 0)
TitleLabel.Position = UDim2.new(0, 12, 0, 0)
TitleLabel.BackgroundTransparency = 1
TitleLabel.Text = "Follow Trace"
TitleLabel.TextColor3 = Color3.new(1, 1, 1)
TitleLabel.TextSize = 16
TitleLabel.Font = Enum.Font.GothamBold
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
TitleLabel.ZIndex = 52
TitleLabel.Parent = TopBar

local AccentBar = Instance.new("Frame")
AccentBar.Name = "Accent"
AccentBar.Size = UDim2.new(1, 0, 0, 2)
AccentBar.Position = UDim2.new(0, 0, 0, 38)
AccentBar.BorderSizePixel = 0
AccentBar.ZIndex = 52
AccentBar.Parent = MainFrame

local ContentFrame = Instance.new("Frame")
ContentFrame.Name = "Content"
ContentFrame.Size = UDim2.new(1, -24, 1, -52)
ContentFrame.Position = UDim2.new(0, 12, 0, 46)
ContentFrame.BackgroundTransparency = 1
ContentFrame.ZIndex = 51
ContentFrame.Parent = MainFrame

local StatusLabel = Instance.new("TextLabel")
StatusLabel.Name = "Status"
StatusLabel.Size = UDim2.new(1, 0, 0, 18)
StatusLabel.Position = UDim2.new(0, 0, 0, 0)
StatusLabel.BackgroundTransparency = 1
StatusLabel.Text = "Status: Idle"
StatusLabel.TextColor3 = Color3.fromRGB(160, 160, 180)
StatusLabel.TextSize = 13
StatusLabel.Font = Enum.Font.Gotham
StatusLabel.TextXAlignment = Enum.TextXAlignment.Left
StatusLabel.ZIndex = 52
StatusLabel.Parent = ContentFrame

local DropdownBtn = Instance.new("TextButton")
DropdownBtn.Name = "DropdownBtn"
DropdownBtn.Size = UDim2.new(1, 0, 0, 36)
DropdownBtn.Position = UDim2.new(0, 0, 0, 24)
DropdownBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
DropdownBtn.Text = "  Select Player ▼"
DropdownBtn.TextColor3 = Color3.fromRGB(200, 200, 210)
DropdownBtn.TextSize = 14
DropdownBtn.Font = Enum.Font.GothamSemibold
DropdownBtn.TextXAlignment = Enum.TextXAlignment.Left
DropdownBtn.AutoButtonColor = false
DropdownBtn.ZIndex = 53
DropdownBtn.Parent = ContentFrame
createCorner(DropdownBtn, 8)
createStroke(DropdownBtn, 1, Color3.fromRGB(55, 55, 75), 0)

local DropdownList = Instance.new("ScrollingFrame")
DropdownList.Name = "DropdownList"
DropdownList.Size = UDim2.new(1, 0, 0, 0)
DropdownList.Position = UDim2.new(0, 0, 0, 62)
DropdownList.BackgroundColor3 = Color3.fromRGB(30, 30, 44)
DropdownList.BorderSizePixel = 0
DropdownList.Visible = false
DropdownList.ZIndex = 60
DropdownList.ScrollBarThickness = 4
DropdownList.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 140)
DropdownList.CanvasSize = UDim2.new(0, 0, 0, 0)
DropdownList.AutomaticCanvasSize = Enum.AutomaticSize.Y
DropdownList.ClipsDescendants = true
DropdownList.Parent = ContentFrame
createCorner(DropdownList, 8)
createStroke(DropdownList, 1, Color3.fromRGB(55, 55, 75), 0)

local ListLayout = Instance.new("UIListLayout")
ListLayout.SortOrder = Enum.SortOrder.LayoutOrder
ListLayout.Padding = UDim.new(0, 2)
ListLayout.Parent = DropdownList

local ListPad = Instance.new("UIPadding")
ListPad.PaddingTop = UDim.new(0, 3)
ListPad.PaddingBottom = UDim.new(0, 3)
ListPad.PaddingLeft = UDim.new(0, 3)
ListPad.PaddingRight = UDim.new(0, 3)
ListPad.Parent = DropdownList

local ButtonHolder = Instance.new("Frame")
ButtonHolder.Name = "Buttons"
ButtonHolder.Size = UDim2.new(1, 0, 0, 90)
ButtonHolder.Position = UDim2.new(0, 0, 1, -90)
ButtonHolder.BackgroundTransparency = 1
ButtonHolder.ZIndex = 52
ButtonHolder.Parent = ContentFrame

local RandomBtn = Instance.new("TextButton")
RandomBtn.Name = "Random"
RandomBtn.Size = UDim2.new(1, 0, 0, 38)
RandomBtn.Position = UDim2.new(0, 0, 0, 0)
RandomBtn.BackgroundColor3 = Color3.fromRGB(100, 60, 180)
RandomBtn.Text = "🎲  Random Player"
RandomBtn.TextColor3 = Color3.new(1, 1, 1)
RandomBtn.TextSize = 14
RandomBtn.Font = Enum.Font.GothamBold
RandomBtn.AutoButtonColor = true
RandomBtn.ZIndex = 53
RandomBtn.Parent = ButtonHolder
createCorner(RandomBtn, 8)

local FollowBtn = Instance.new("TextButton")
FollowBtn.Name = "Follow"
FollowBtn.Size = UDim2.new(0.48, 0, 0, 42)
FollowBtn.Position = UDim2.new(0, 0, 0, 46)
FollowBtn.BackgroundColor3 = Color3.fromRGB(40, 160, 80)
FollowBtn.Text = "Follow"
FollowBtn.TextColor3 = Color3.new(1, 1, 1)
FollowBtn.TextSize = 15
FollowBtn.Font = Enum.Font.GothamBold
FollowBtn.AutoButtonColor = true
FollowBtn.ZIndex = 53
FollowBtn.Parent = ButtonHolder
createCorner(FollowBtn, 8)

local UnfollowBtn = Instance.new("TextButton")
UnfollowBtn.Name = "Unfollow"
UnfollowBtn.Size = UDim2.new(0.48, 0, 0, 42)
UnfollowBtn.Position = UDim2.new(0.52, 0, 0, 46)
UnfollowBtn.BackgroundColor3 = Color3.fromRGB(180, 45, 45)
UnfollowBtn.Text = "Unfollow"
UnfollowBtn.TextColor3 = Color3.new(1, 1, 1)
UnfollowBtn.TextSize = 15
UnfollowBtn.Font = Enum.Font.GothamBold
UnfollowBtn.AutoButtonColor = true
UnfollowBtn.ZIndex = 53
UnfollowBtn.Parent = ButtonHolder
createCorner(UnfollowBtn, 8)

local function makeDraggable(gui, handle)
	local dragging = false
	local dragInput = nil
	local dragStart = nil
	local startPos = nil

	handle.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
			dragging = true
			dragStart = input.Position
			startPos = gui.Position
			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragging = false
				end
			end)
		end
	end)

	handle.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
			dragInput = input
		end
	end)

	UserInputService.InputChanged:Connect(function(input)
		if input == dragInput and dragging then
			local delta = input.Position - dragStart
			gui.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
		end
	end)
end

makeDraggable(MainFrame, TopBar)

local toggleDragging = false
local toggleDragStart = nil
local toggleStartPos = nil
local toggleDragInput = nil
local toggleMoved = false

ToggleBtn.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		toggleDragging = true
		toggleMoved = false
		toggleDragStart = input.Position
		toggleStartPos = ToggleBtn.Position
		input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then
				toggleDragging = false
				if not toggleMoved then
					guiOpen = not guiOpen
					MainFrame.Visible = guiOpen
				end
			end
		end)
	end
end)

ToggleBtn.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
		toggleDragInput = input
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if input == toggleDragInput and toggleDragging then
		local delta = input.Position - toggleDragStart
		if delta.Magnitude > 6 then
			toggleMoved = true
		end
		if toggleMoved then
			ToggleBtn.Position = UDim2.new(toggleStartPos.X.Scale, toggleStartPos.X.Offset + delta.X, toggleStartPos.Y.Scale, toggleStartPos.Y.Offset + delta.Y)
		end
	end
end)

local function setStatus(txt, col)
	StatusLabel.Text = "Status: " .. txt
	StatusLabel.TextColor3 = col or Color3.fromRGB(160, 160, 180)
end

local function clearPlayerList()
	for _, child in ipairs(DropdownList:GetChildren()) do
		if child:IsA("TextButton") then
			child:Destroy()
		end
	end
end

local function selectPlayer(name)
	selectedName = name
	DropdownBtn.Text = "  " .. name .. " ▼"
	dropOpen = false
	DropdownList.Visible = false
	TweenService:Create(DropdownList, TweenInfo.new(0.15), {Size = UDim2.new(1, 0, 0, 0)}):Play()
end

local function getOtherPlayers()
	local list = {}
	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= LP then
			table.insert(list, p)
		end
	end
	return list
end

local function refreshPlayerList()
	clearPlayerList()
	local count = 0
	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= LP then
			count = count + 1
			local btn = Instance.new("TextButton")
			btn.Name = p.Name
			btn.Size = UDim2.new(1, -6, 0, 30)
			btn.BackgroundColor3 = Color3.fromRGB(42, 42, 60)
			btn.Text = p.DisplayName .. " (@" .. p.Name .. ")"
			btn.TextColor3 = Color3.fromRGB(210, 210, 220)
			btn.TextSize = 13
			btn.Font = Enum.Font.Gotham
			btn.TextTruncate = Enum.TextTruncate.AtEnd
			btn.AutoButtonColor = true
			btn.ZIndex = 61
			btn.LayoutOrder = count
			btn.Parent = DropdownList
			createCorner(btn, 6)
			btn.MouseButton1Click:Connect(function()
				selectPlayer(p.Name)
			end)
		end
	end
	local listHeight = math.min(count * 32 + 6, 130)
	if dropOpen then
		DropdownList.Size = UDim2.new(1, 0, 0, listHeight)
	end
end

DropdownBtn.MouseButton1Click:Connect(function()
	dropOpen = not dropOpen
	if dropOpen then
		refreshPlayerList()
		DropdownList.Visible = true
		local count = #getOtherPlayers()
		local listHeight = math.min(count * 32 + 6, 130)
		TweenService:Create(DropdownList, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(1, 0, 0, listHeight)}):Play()
	else
		TweenService:Create(DropdownList, TweenInfo.new(0.15), {Size = UDim2.new(1, 0, 0, 0)}):Play()
		task.delay(0.15, function()
			if not dropOpen then
				DropdownList.Visible = false
			end
		end)
	end
end)

RandomBtn.MouseButton1Click:Connect(function()
	local others = getOtherPlayers()
	if #others == 0 then
		setStatus("No other players", Color3.fromRGB(255, 180, 60))
		return
	end
	local pick = others[math.random(1, #others)]
	selectPlayer(pick.Name)
	setStatus("Picked " .. pick.DisplayName, Color3.fromRGB(180, 140, 255))
end)

RunService.RenderStepped:Connect(function(dt)
	hue = (hue + dt * 0.4) % 1
	local col = Color3.fromHSV(hue, 0.8, 1)
	ToggleBtn.BackgroundColor3 = col
	AccentBar.BackgroundColor3 = col
end)

task.spawn(function()
	while true do
		refreshPlayerList()
		task.wait(5)
	end
end)

local function cleanBuffers(currentTime)
	local cutoff = currentTime - DELAY - 2
	while #posBuf > 0 and posBuf[1].t < cutoff do
		table.remove(posBuf, 1)
	end
	while #stateBuf > 0 and stateBuf[1].t < cutoff do
		table.remove(stateBuf, 1)
	end
	while #toolBuf > 0 and toolBuf[1].t < cutoff do
		table.remove(toolBuf, 1)
	end
end

local function getCharacter(player)
	if player and player.Character then
		local hrp = player.Character:FindFirstChild("HumanoidRootPart")
		local hum = player.Character:FindFirstChildOfClass("Humanoid")
		if hrp and hum and hum.Health > 0 then
			return player.Character, hrp, hum
		end
	end
	return nil, nil, nil
end

local function getLerpedCFrame(targetTime)
	if #posBuf == 0 then
		return nil
	end
	if targetTime <= posBuf[1].t then
		return posBuf[1].cf
	end
	if targetTime >= posBuf[#posBuf].t then
		return posBuf[#posBuf].cf
	end
	for i = 1, #posBuf - 1 do
		if posBuf[i].t <= targetTime and posBuf[i + 1].t >= targetTime then
			local alpha = (targetTime - posBuf[i].t) / (posBuf[i + 1].t - posBuf[i].t)
			return posBuf[i].cf:Lerp(posBuf[i + 1].cf, alpha)
		end
	end
	return posBuf[#posBuf].cf
end

local function getStateAtTime(targetTime)
	local result = nil
	for i = #stateBuf, 1, -1 do
		if stateBuf[i].t <= targetTime then
			result = stateBuf[i]
			break
		end
	end
	return result
end

local lastToolIndex = 0

local function processToolBuffer(targetTime)
	for i = lastToolIndex + 1, #toolBuf do
		if toolBuf[i].t <= targetTime then
			lastToolIndex = i
			local myChar = LP.Character
			if not myChar then
				continue
			end
			local hum = myChar:FindFirstChildOfClass("Humanoid")
			if not hum then
				continue
			end
			local bp = LP:FindFirstChild("Backpack")
			if toolBuf[i].action == "equip" then
				local toolName = toolBuf[i].name
				local tool = nil
				if bp then
					tool = bp:FindFirstChild(toolName)
				end
				if not tool then
					for _, c in ipairs(myChar:GetChildren()) do
						if c:IsA("Tool") and c.Name == toolName then
							tool = c
							break
						end
					end
				end
				if tool and tool.Parent ~= myChar then
					hum:EquipTool(tool)
				end
			elseif toolBuf[i].action == "unequip" then
				local toolName = toolBuf[i].name
				for _, c in ipairs(myChar:GetChildren()) do
					if c:IsA("Tool") and c.Name == toolName then
						if bp then
							c.Parent = bp
						else
							hum:UnequipTools()
						end
						break
					end
				end
			end
		else
			break
		end
	end
end

local function disconnectAll()
	for _, c in ipairs(conns) do
		if c and c.Connected then
			c:Disconnect()
		end
	end
	conns = {}
end

local function stopFollowing()
	following = false
	targetPlayer = nil
	disconnectAll()
	posBuf = {}
	stateBuf = {}
	toolBuf = {}
	lastToolIndex = 0
	setStatus("Idle", Color3.fromRGB(160, 160, 180))
end

local recordAccum = 0

local function captureInitialTools(targetChar)
	for _, c in ipairs(targetChar:GetChildren()) do
		if c:IsA("Tool") then
			table.insert(toolBuf, {t = 0, action = "equip", name = c.Name})
		end
	end
end

local function startFollowing(target)
	stopFollowing()
	targetPlayer = target
	following = true
	posBuf = {}
	stateBuf = {}
	toolBuf = {}
	lastToolIndex = 0
	recordAccum = 0
	setStatus("Following " .. target.DisplayName, Color3.fromRGB(80, 220, 120))

	local startTime = tick()

	local function onTargetCharacterAdded(char)
		local hrp = char:WaitForChild("HumanoidRootPart", 10)
		local hum = char:WaitForChild("Humanoid", 10)
		if not hrp or not hum then
			return
		end

		captureInitialTools(char)

		table.insert(conns, hum.StateChanged:Connect(function(_, new)
			if following and targetPlayer == target then
				table.insert(stateBuf, {t = tick() - startTime, state = new})
			end
		end))

		table.insert(conns, hum.Died:Connect(function()
			if following and targetPlayer == target then
				task.delay(DELAY, function()
					if following and targetPlayer == target then
						local myChar = LP.Character
						if myChar then
							local myHum = myChar:FindFirstChildOfClass("Humanoid")
							if myHum and myHum.Health > 0 then
								myHum.Health = 0
							end
						end
					end
				end)
			end
		end))

		table.insert(conns, char.ChildAdded:Connect(function(child)
			if child:IsA("Tool") and following and targetPlayer == target then
				table.insert(toolBuf, {t = tick() - startTime, action = "equip", name = child.Name})
			end
		end))

		table.insert(conns, char.ChildRemoved:Connect(function(child)
			if child:IsA("Tool") and following and targetPlayer == target then
				table.insert(toolBuf, {t = tick() - startTime, action = "unequip", name = child.Name})
			end
		end))
	end

	if target.Character then
		onTargetCharacterAdded(target.Character)
	end
	table.insert(conns, target.CharacterAdded:Connect(function(char)
		if following and targetPlayer == target then
			onTargetCharacterAdded(char)
		end
	end))

	local initialTeleported = false

	table.insert(conns, RunService.Heartbeat:Connect(function(dt)
		if not following or targetPlayer ~= target then
			return
		end
		local now = tick() - startTime
		local tChar, tHrp, tHum = getCharacter(target)
		if tChar and tHrp then
			recordAccum = recordAccum + dt
			if recordAccum >= RECORD_INTERVAL then
				recordAccum = recordAccum - RECORD_INTERVAL
				table.insert(posBuf, {t = now, cf = tHrp.CFrame, mv = tHum.MoveDirection, ws = tHum.WalkSpeed})
			end
		end

		cleanBuffers(now)

		local myChar = LP.Character
		if not myChar then
			return
		end
		local myHrp = myChar:FindFirstChild("HumanoidRootPart")
		local myHum = myChar:FindFirstChildOfClass("Humanoid")
		if not myHrp or not myHum or myHum.Health <= 0 then
			return
		end

		if not initialTeleported then
			if tHrp then
				myHrp.CFrame = tHrp.CFrame * CFrame.new(0, 0, 3)
				initialTeleported = true
			end
			return
		end

		if now < DELAY then
			return
		end

		local targetTime = now - DELAY
		local cf = getLerpedCFrame(targetTime)
		if cf then
			myHrp.CFrame = cf
		end

		local stateData = getStateAtTime(targetTime)
		if stateData then
			if stateData.state == Enum.HumanoidStateType.Jumping then
				myHum:ChangeState(Enum.HumanoidStateType.Jumping)
			elseif stateData.state == Enum.HumanoidStateType.Climbing then
				myHum:ChangeState(Enum.HumanoidStateType.Climbing)
			elseif stateData.state == Enum.HumanoidStateType.Swimming then
				myHum:ChangeState(Enum.HumanoidStateType.Swimming)
			elseif stateData.state == Enum.HumanoidStateType.Seated then
				myHum:ChangeState(Enum.HumanoidStateType.Seated)
			elseif stateData.state == Enum.HumanoidStateType.Freefall then
				myHum:ChangeState(Enum.HumanoidStateType.Freefall)
			end
		end

		processToolBuffer(targetTime)
	end))

	table.insert(conns, target.AncestryChanged:Connect(function()
		if not target:IsDescendantOf(Players) then
			stopFollowing()
			setStatus("Target left", Color3.fromRGB(255, 100, 100))
		end
	end))
end

FollowBtn.MouseButton1Click:Connect(function()
	if not selectedName then
		setStatus("No player selected", Color3.fromRGB(255, 180, 60))
		return
	end
	local target = Players:FindFirstChild(selectedName)
	if not target then
		setStatus("Player not found", Color3.fromRGB(255, 100, 100))
		return
	end
	if target == LP then
		return
	end
	local _, tHrp, _ = getCharacter(target)
	if not tHrp then
		setStatus("Target has no character", Color3.fromRGB(255, 180, 60))
		return
	end
	startFollowing(target)
end)

UnfollowBtn.MouseButton1Click:Connect(function()
	stopFollowing()
end)

LP.CharacterAdded:Connect(function(char)
	if following and targetPlayer then
		task.wait(1)
		if following and targetPlayer then
			local tChar, tHrp, tHum = getCharacter(targetPlayer)
			if tHrp then
				local myHrp = char:WaitForChild("HumanoidRootPart", 10)
				if myHrp then
					myHrp.CFrame = tHrp.CFrame * CFrame.new(0, 0, 3)
				end
			end
			local oldTarget = targetPlayer
			startFollowing(oldTarget)
		end
	end
end)

Features & Information

This is in testing btw. Select a player and click follow, it should trace the selected player.
#Follow

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts