Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
UserInputService = :()
TweenService = :()
LP = Players.LocalPlayer
PG = LP:()
following =
targetPlayer =
selectedName =
dropOpen =
guiOpen =
hue =
conns = {}
posBuf = {}
stateBuf = {}
toolBuf = {}
DELAY =
RECORD_INTERVAL = /
SG = .()
SG.Name =
SG.ResetOnSpawn =
SG.ZIndexBehavior = .ZIndexBehavior.Sibling
SG.DisplayOrder =
SG.Parent = PG
(parent, radius)
c = .()
c.CornerRadius = .(, radius)
c.Parent = parent
c
(parent, thickness, color, transparency)
s = .()
s.Thickness = thickness
s.Color = color .(, , )
s.Transparency = transparency
s.Parent = parent
s
ToggleBtn = .()
ToggleBtn.Name =
ToggleBtn.Size = .(, , , )
ToggleBtn.Position = .(, , , -)
ToggleBtn.BackgroundColor3 = .(, , )
ToggleBtn.Text =
ToggleBtn.TextColor3 = .(, , )
ToggleBtn.TextSize =
ToggleBtn.Font = .Font.GothamBold
ToggleBtn.ZIndex =
ToggleBtn.AutoButtonColor =
ToggleBtn.Parent = SG
(ToggleBtn, )
(ToggleBtn, , .(, , ), )
ToggleShadow = .()
ToggleShadow.Name =
ToggleShadow.BackgroundTransparency =
ToggleShadow.Size = .(, , , )
ToggleShadow.Position = .(, -, , -)
ToggleShadow.ZIndex =
ToggleShadow.Image =
ToggleShadow.ImageColor3 = .(, , )
ToggleShadow.ImageTransparency =
ToggleShadow.ScaleType = .ScaleType.Slice
ToggleShadow.SliceCenter = Rect.(, , , )
ToggleShadow.Parent = ToggleBtn
MainFrame = .()
MainFrame.Name =
MainFrame.Size = .(, , , )
MainFrame.Position = .(, -, , -)
MainFrame.BackgroundColor3 = .(, , )
MainFrame.BorderSizePixel =
MainFrame.Visible =
MainFrame.ZIndex =
MainFrame.Parent = SG
(MainFrame, )
(MainFrame, , .(, , ), )
TopBar = .()
TopBar.Name =
TopBar.Size = .(, , , )
TopBar.BackgroundColor3 = .(, , )
TopBar.BorderSizePixel =
TopBar.ZIndex =
TopBar.Parent = MainFrame
(TopBar, )
TopBarFill = .()
TopBarFill.Name =
TopBarFill.Size = .(, , , )
TopBarFill.Position = .(, , , -)
TopBarFill.BackgroundColor3 = .(, , )
TopBarFill.BorderSizePixel =
TopBarFill.ZIndex =
TopBarFill.Parent = TopBar
TitleLabel = .()
TitleLabel.Name =
TitleLabel.Size = .(, -, , )
TitleLabel.Position = .(, , , )
TitleLabel.BackgroundTransparency =
TitleLabel.Text =
TitleLabel.TextColor3 = .(, , )
TitleLabel.TextSize =
TitleLabel.Font = .Font.GothamBold
TitleLabel.TextXAlignment = .TextXAlignment.Left
TitleLabel.ZIndex =
TitleLabel.Parent = TopBar
AccentBar = .()
AccentBar.Name =
AccentBar.Size = .(, , , )
AccentBar.Position = .(, , , )
AccentBar.BorderSizePixel =
AccentBar.ZIndex =
AccentBar.Parent = MainFrame
ContentFrame = .()
ContentFrame.Name =
ContentFrame.Size = .(, -, , -)
ContentFrame.Position = .(, , , )
ContentFrame.BackgroundTransparency =
ContentFrame.ZIndex =
ContentFrame.Parent = MainFrame
StatusLabel = .()
StatusLabel.Name =
StatusLabel.Size = .(, , , )
StatusLabel.Position = .(, , , )
StatusLabel.BackgroundTransparency =
StatusLabel.Text =
StatusLabel.TextColor3 = .(, , )
StatusLabel.TextSize =
StatusLabel.Font = .Font.Gotham
StatusLabel.TextXAlignment = .TextXAlignment.Left
StatusLabel.ZIndex =
StatusLabel.Parent = ContentFrame
DropdownBtn = .()
DropdownBtn.Name =
DropdownBtn.Size = .(, , , )
DropdownBtn.Position = .(, , , )
DropdownBtn.BackgroundColor3 = .(, , )
DropdownBtn.Text =
DropdownBtn.TextColor3 = .(, , )
DropdownBtn.TextSize =
DropdownBtn.Font = .Font.GothamSemibold
DropdownBtn.TextXAlignment = .TextXAlignment.Left
DropdownBtn.AutoButtonColor =
DropdownBtn.ZIndex =
DropdownBtn.Parent = ContentFrame
(DropdownBtn, )
(DropdownBtn, , .(, , ), )
DropdownList = .()
DropdownList.Name =
DropdownList.Size = .(, , , )
DropdownList.Position = .(, , , )
DropdownList.BackgroundColor3 = .(, , )
DropdownList.BorderSizePixel =
DropdownList.Visible =
DropdownList.ZIndex =
DropdownList.ScrollBarThickness =
DropdownList.ScrollBarImageColor3 = .(, , )
DropdownList.CanvasSize = .(, , , )
DropdownList.AutomaticCanvasSize = .AutomaticSize.Y
DropdownList.ClipsDescendants =
DropdownList.Parent = ContentFrame
(DropdownList, )
(DropdownList, , .(, , ), )
ListLayout = .()
ListLayout.SortOrder = .SortOrder.LayoutOrder
ListLayout.Padding = .(, )
ListLayout.Parent = DropdownList
ListPad = .()
ListPad.PaddingTop = .(, )
ListPad.PaddingBottom = .(, )
ListPad.PaddingLeft = .(, )
ListPad.PaddingRight = .(, )
ListPad.Parent = DropdownList
ButtonHolder = .()
ButtonHolder.Name =
ButtonHolder.Size = .(, , , )
ButtonHolder.Position = .(, , , -)
ButtonHolder.BackgroundTransparency =
ButtonHolder.ZIndex =
ButtonHolder.Parent = ContentFrame
RandomBtn = .()
RandomBtn.Name =
RandomBtn.Size = .(, , , )
RandomBtn.Position = .(, , , )
RandomBtn.BackgroundColor3 = .(, , )
RandomBtn.Text =
RandomBtn.TextColor3 = .(, , )
RandomBtn.TextSize =
RandomBtn.Font = .Font.GothamBold
RandomBtn.AutoButtonColor =
RandomBtn.ZIndex =
RandomBtn.Parent = ButtonHolder
(RandomBtn, )
FollowBtn = .()
FollowBtn.Name =
FollowBtn.Size = .(, , , )
FollowBtn.Position = .(, , , )
FollowBtn.BackgroundColor3 = .(, , )
FollowBtn.Text =
FollowBtn.TextColor3 = .(, , )
FollowBtn.TextSize =
FollowBtn.Font = .Font.GothamBold
FollowBtn.AutoButtonColor =
FollowBtn.ZIndex =
FollowBtn.Parent = ButtonHolder
(FollowBtn, )
UnfollowBtn = .()
UnfollowBtn.Name =
UnfollowBtn.Size = .(, , , )
UnfollowBtn.Position = .(, , , )
UnfollowBtn.BackgroundColor3 = .(, , )
UnfollowBtn.Text =
UnfollowBtn.TextColor3 = .(, , )
UnfollowBtn.TextSize =
UnfollowBtn.Font = .Font.GothamBold
UnfollowBtn.AutoButtonColor =
UnfollowBtn.ZIndex =
UnfollowBtn.Parent = ButtonHolder
(UnfollowBtn, )
(gui, handle)
dragging =
dragInput =
dragStart =
startPos =
handle.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = gui.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragging =
)
)
handle.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
UserInputService.InputChanged:((input)
input == dragInput dragging
delta = input.Position - dragStart
gui.Position = .(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
)
(MainFrame, TopBar)
toggleDragging =
toggleDragStart =
toggleStartPos =
toggleDragInput =
toggleMoved =
ToggleBtn.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
toggleDragging =
toggleMoved =
toggleDragStart = input.Position
toggleStartPos = ToggleBtn.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
toggleDragging =
toggleMoved
guiOpen = guiOpen
MainFrame.Visible = guiOpen
)
)
ToggleBtn.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
toggleDragInput = input
)
UserInputService.InputChanged:((input)
input == toggleDragInput toggleDragging
delta = input.Position - toggleDragStart
delta.Magnitude >
toggleMoved =
toggleMoved
ToggleBtn.Position = .(toggleStartPos.X.Scale, toggleStartPos.X.Offset + delta.X, toggleStartPos.Y.Scale, toggleStartPos.Y.Offset + delta.Y)
)
(txt, col)
StatusLabel.Text = .. txt
StatusLabel.TextColor3 = col .(, , )
()
_, child (DropdownList:())
child:()
child:()
(name)
selectedName = name
DropdownBtn.Text = .. name ..
dropOpen =
DropdownList.Visible =
TweenService:(DropdownList, TweenInfo.(), {Size = .(, , , )}):()
()
list = {}
_, p (Players:())
p ~= LP
.(list, p)
list
()
()
count =
_, p (Players:())
p ~= LP
count = count +
btn = .()
btn.Name = p.Name
btn.Size = .(, -, , )
btn.BackgroundColor3 = .(, , )
btn.Text = p.DisplayName .. .. p.Name ..
btn.TextColor3 = .(, , )
btn.TextSize =
btn.Font = .Font.Gotham
btn.TextTruncate = .TextTruncate.AtEnd
btn.AutoButtonColor =
btn.ZIndex =
btn.LayoutOrder = count
btn.Parent = DropdownList
(btn, )
btn.MouseButton1Click:(()
(p.Name)
)
listHeight = .(count * + , )
dropOpen
DropdownList.Size = .(, , , listHeight)
DropdownBtn.MouseButton1Click:(()
dropOpen = dropOpen
dropOpen
()
DropdownList.Visible =
count = #()
listHeight = .(count * + , )
TweenService:(DropdownList, TweenInfo.(, .EasingStyle.Quad, .EasingDirection.Out), {Size = .(, , , listHeight)}):()
TweenService:(DropdownList, TweenInfo.(), {Size = .(, , , )}):()
.(, ()
dropOpen
DropdownList.Visible =
)
)
RandomBtn.MouseButton1Click:(()
others = ()
#others ==
(, .(, , ))
pick = others[.(, #others)]
(pick.Name)
( .. pick.DisplayName, .(, , ))
)
RunService.RenderStepped:((dt)
hue = (hue + dt * ) %
col = .(hue, , )
ToggleBtn.BackgroundColor3 = col
AccentBar.BackgroundColor3 = col
)
.(()
()
.()
)
(currentTime)
cutoff = currentTime - DELAY -
#posBuf > posBuf[].t < cutoff
.(posBuf, )
#stateBuf > stateBuf[].t < cutoff
.(stateBuf, )
#toolBuf > toolBuf[].t < cutoff
.(toolBuf, )
(player)
player player.Character
hrp = player.Character:()
hum = player.Character:()
hrp hum hum.Health >
player.Character, hrp, hum
, ,
(targetTime)
#posBuf ==
targetTime <= posBuf[].t
posBuf[].cf
targetTime >= posBuf[#posBuf].t
posBuf[#posBuf].cf
i = , #posBuf -
posBuf[i].t <= targetTime posBuf[i + ].t >= targetTime
alpha = (targetTime - posBuf[i].t) / (posBuf[i + ].t - posBuf[i].t)
posBuf[i].cf:(posBuf[i + ].cf, alpha)
posBuf[#posBuf].cf
(targetTime)
result =
i = #stateBuf, , -
stateBuf[i].t <= targetTime
result = stateBuf[i]
result
lastToolIndex =
(targetTime)
i = lastToolIndex + , #toolBuf
toolBuf[i].t <= targetTime
lastToolIndex = i
myChar = LP.Character
myChar
hum = myChar:()
hum
bp = LP:()
toolBuf[i].action ==
toolName = toolBuf[i].name
tool =
bp
tool = bp:(toolName)
tool
_, c (myChar:())
c:() c.Name == toolName
tool = c
tool tool.Parent ~= myChar
hum:(tool)
toolBuf[i].action ==
toolName = toolBuf[i].name
_, c (myChar:())
c:() c.Name == toolName
bp
c.Parent = bp
hum:()
()
_, c (conns)
c c.Connected
c:()
conns = {}
()
following =
targetPlayer =
()
posBuf = {}
stateBuf = {}
toolBuf = {}
lastToolIndex =
(, .(, , ))
recordAccum =
(targetChar)
_, c (targetChar:())
c:()
.(toolBuf, {t = , action = , name = c.Name})
(target)
()
targetPlayer = target
following =
posBuf = {}
stateBuf = {}
toolBuf = {}
lastToolIndex =
recordAccum =
( .. target.DisplayName, .(, , ))
startTime = ()
(char)
hrp = char:(, )
hum = char:(, )
hrp hum
(char)
.(conns, hum.StateChanged:((_, new)
following targetPlayer == target
.(stateBuf, {t = () - startTime, state = new})
))
.(conns, hum.Died:(()
following targetPlayer == target
.(DELAY, ()
following targetPlayer == target
myChar = LP.Character
myChar
myHum = myChar:()
myHum myHum.Health >
myHum.Health =
)
))
.(conns, char.ChildAdded:((child)
child:() following targetPlayer == target
.(toolBuf, {t = () - startTime, action = , name = child.Name})
))
.(conns, char.ChildRemoved:((child)
child:() following targetPlayer == target
.(toolBuf, {t = () - startTime, action = , name = child.Name})
))
target.Character
(target.Character)
.(conns, target.CharacterAdded:((char)
following targetPlayer == target
(char)
))
initialTeleported =
.(conns, RunService.Heartbeat:((dt)
following targetPlayer ~= target
now = () - startTime
tChar, tHrp, tHum = (target)
tChar tHrp
recordAccum = recordAccum + dt
recordAccum >= RECORD_INTERVAL
recordAccum = recordAccum - RECORD_INTERVAL
.(posBuf, {t = now, cf = tHrp.CFrame, mv = tHum.MoveDirection, ws = tHum.WalkSpeed})
(now)
myChar = LP.Character
myChar
myHrp = myChar:()
myHum = myChar:()
myHrp myHum myHum.Health <=
initialTeleported
tHrp
myHrp.CFrame = tHrp.CFrame * .(, , )
initialTeleported =
now < DELAY
targetTime = now - DELAY
cf = (targetTime)
cf
myHrp.CFrame = cf
stateData = (targetTime)
stateData
stateData.state == .HumanoidStateType.Jumping
myHum:(.HumanoidStateType.Jumping)
stateData.state == .HumanoidStateType.Climbing
myHum:(.HumanoidStateType.Climbing)
stateData.state == .HumanoidStateType.Swimming
myHum:(.HumanoidStateType.Swimming)
stateData.state == .HumanoidStateType.Seated
myHum:(.HumanoidStateType.Seated)
stateData.state == .HumanoidStateType.Freefall
myHum:(.HumanoidStateType.Freefall)
(targetTime)
))
.(conns, target.AncestryChanged:(()
target:(Players)
()
(, .(, , ))
))
FollowBtn.MouseButton1Click:(()
selectedName
(, .(, , ))
target = Players:(selectedName)
target
(, .(, , ))
target == LP
_, tHrp, _ = (target)
tHrp
(, .(, , ))
(target)
)
UnfollowBtn.MouseButton1Click:(()
()
)
LP.CharacterAdded:((char)
following targetPlayer
.()
following targetPlayer
tChar, tHrp, tHum = (targetPlayer)
tHrp
myHrp = char:(, )
myHrp
myHrp.CFrame = tHrp.CFrame * .(, , )
oldTarget = targetPlayer
(oldTarget)
)This is in testing btw. Select a player and click follow, it should trace the selected player.

Universal