Run it
Copy the script and paste it into your executor.
Players = :();
RunService = :();
UserInputService = :();
TweenService = :();
LocalPlayer = Players.LocalPlayer;
Workspace = ;
UPDATE_INTERVAL = ;
LIST_REFRESH = ;
BEHIND_STUDS = ;
HEIGHT_OFFSET = ;
TOGGLE_KEY = .KeyCode.G;
TWEEN_DURATION_FACTOR = ;
TWEEN_EASING_STYLE = .EasingStyle.Sine;
TWEEN_EASING_DIR = .EasingDirection.Out;
PLAYER_SMOOTH_SPEED = ;
CAMERA_ASSIST = ;
CAMERA_MIN_ASSIST = ;
CAMERA_ASSIST_SCALE = ;
MOUSE_OVERRIDE_WINDOW = ;
targetPlayer = ;
running = ;
lastTpTick = ;
lastListTick = ;
lastMouseMove = ;
cameraSaved = ;
activeTween = ;
(p)
(p p.Character) ;
(character)
character
;
character:();
(character)
character
;
character:();
(p)
myChar = (LocalPlayer);
myHRP = myChar (myChar);
theirHRP = ((p));
(myHRP theirHRP)
.huge;
(theirHRP.Position - myHRP.Position).Magnitude;
()
cam = Workspace.CurrentCamera;
cam
;
cameraSaved = {Type=cam.CameraType,Subject=cam.CameraSubject,=cam.CFrame};
()
cam = Workspace.CurrentCamera;
( cam cameraSaved)
;
(()
cam.CameraType = cameraSaved.Type .CameraType.Custom;
cam.CameraSubject = cameraSaved.Subject;
cameraSaved.CFrame
cam.CFrame = cameraSaved.CFrame;
);
cameraSaved = ;
(speed, dt)
.( - .(-speed * dt), , );
ScreenGui = .();
ScreenGui.Name = ;
ScreenGui.ResetOnSpawn = ;
ScreenGui.Parent = LocalPlayer:();
Window = .();
Window.Name = ;
Window.Size = .(, );
Window.Position = .(, );
Window.BackgroundColor3 = .(, , );
Window.BorderSizePixel = ;
Window.Parent = ScreenGui;
.(, Window).CornerRadius = .(, );
Header = .(, Window);
Header.Size = .(, , , );
Header.BackgroundTransparency = ;
Title = .(, Header);
Title.Size = .(, -, , );
Title.Position = .(, );
Title.BackgroundTransparency = ;
Title.Font = .Font.GothamBold;
Title.TextSize = ;
Title.TextColor3 = .(, , );
Title.TextXAlignment = .TextXAlignment.Left;
Title.Text = ;
MinBtn = .(, Header);
MinBtn.Size = .(, );
MinBtn.Position = .(, -, , );
MinBtn.Text = ;
MinBtn.Font = .Font.Gotham;
MinBtn.TextSize = ;
MinBtn.BackgroundColor3 = .(, , );
MinBtn.TextColor3 = .(, , );
.(, MinBtn).CornerRadius = .(, );
ToggleBtn = .(, Header);
ToggleBtn.Size = .(, );
ToggleBtn.Position = .(, -, , );
ToggleBtn.Text = ;
ToggleBtn.Font = .Font.GothamBold;
ToggleBtn.TextSize = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.TextColor3 = .(, , );
.(, ToggleBtn).CornerRadius = .(, );
targetLabel = .(, Window);
targetLabel.Size = .(, -, , );
targetLabel.Position = .(, );
targetLabel.BackgroundTransparency = ;
targetLabel.Font = .Font.Gotham;
targetLabel.TextSize = ;
targetLabel.TextXAlignment = .TextXAlignment.Left;
targetLabel.TextColor3 = .(, , );
targetLabel.Text = ;
LeftColumn = .(, Window);
LeftColumn.Size = .(, -, , -);
LeftColumn.Position = .(, );
LeftColumn.BackgroundTransparency = ;
ListFrame = .(, LeftColumn);
ListFrame.Name = ;
ListFrame.Size = .(, , , );
ListFrame.Position = .(, );
ListFrame.CanvasSize = .(, , , );
ListFrame.ScrollBarThickness = ;
ListFrame.BorderSizePixel = ;
ListFrame.BackgroundTransparency = ;
ListFrame.BackgroundColor3 = .(, , );
.(, ListFrame).CornerRadius = .(, );
UIListLayout = .(, ListFrame);
UIListLayout.Padding = .(, );
UIListLayout.SortOrder = .SortOrder.LayoutOrder;
minimized = ;
MinBtn.MouseButton1Click:(()
minimized = minimized;
minimized
Window.Size = .(, );
ListFrame.Visible = ;
targetLabel.Visible = ;
MinBtn.Text = ;
Window.Size = .(, );
ListFrame.Visible = ;
targetLabel.Visible = ;
MinBtn.Text = ;
);
dragging, dragStartPos, windowStartPos = , , ;
Header.InputBegan:((input)
(input.UserInputType == .UserInputType.MouseButton1)
dragging = ;
dragStartPos = input.Position;
windowStartPos = Window.Position;
);
Header.InputEnded:((input)
(input.UserInputType == .UserInputType.MouseButton1)
dragging = ;
);
UserInputService.InputChanged:((input)
(dragging (input.UserInputType == .UserInputType.MouseMovement))
delta = input.Position - dragStartPos;
Window.Position = .(windowStartPos.X.Scale, windowStartPos.X.Offset + delta.X, windowStartPos.Y.Scale, windowStartPos.Y.Offset + delta.Y);
);
buttons = {};
()
userId, rec (buttons)
(targetPlayer ((userId) == targetPlayer.UserId))
rec.btn.BackgroundColor3 = .(, , );
rec.btn.BackgroundColor3 = .(, , );
(p)
targetPlayer = p;
p
targetLabel.Text = ():(p.DisplayName p.Name);
targetLabel.Text = ;
();
(p)
b = .();
b.Name = .. (p.UserId);
b.Size = .(, -, , );
b.BackgroundColor3 = .(, , );
b.TextColor3 = .(, , );
b.Font = .Font.Gotham;
b.TextSize = ;
b.AutoButtonColor = ;
b.Parent = ListFrame;
.(, b).CornerRadius = .(, );
conn = b.MouseButton1Click:(()
(p);
);
buttons[(p.UserId)] = {btn=b,conn=conn};
b;
()
out = {};
_, p (Players:())
(p ~= LocalPlayer)
.(out, {p=p,d=(p)});
.(out, (a, b)
(a.d == b.d)
(a.p.DisplayName a.p.Name) < (b.p.DisplayName b.p.Name);
a.d < b.d;
);
out;
()
sorted = ();
seen = {};
i, item (sorted)
p = item.p;
key = (p.UserId);
seen[key] = ;
brec = buttons[key];
brec
newBtn = (p);
buttons[key].btn = newBtn;
brec = buttons[key];
(brec brec.btn)
txt = .(, p.DisplayName p.Name, item.d);
brec.btn.Text = txt;
brec.btn.LayoutOrder = i;
userId, rec (buttons)
found = seen[userId];
found
rec.conn
rec.conn:();
rec.btn
rec.btn:();
buttons[userId] = ;
itemHeight = ;
padding = UIListLayout.Padding.Offset;
count = #sorted;
ListFrame.CanvasSize = .(, , , (count * (itemHeight + padding)) + );
( targetPlayer (#sorted > ))
(sorted[].p);
();
Players.PlayerAdded:((p)
();
);
Players.PlayerRemoving:((p)
key = (p.UserId);
(targetPlayer == p)
();
running = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
();
();
);
UserInputService.InputBegan:((input, gameProcessed)
gameProcessed
;
(input.KeyCode == TOGGLE_KEY)
running = running;
running
();
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
();
);
ToggleBtn.MouseButton1Click:(()
running = running;
running
();
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
();
);
UserInputService.InputChanged:((input)
(input.UserInputType == .UserInputType.MouseMovement)
lastMouseMove = ();
);
(targetHRP)
look = targetHRP.CFrame.LookVector;
behindPos = targetHRP.Position - (look * BEHIND_STUDS);
behindPos = behindPos + .(, HEIGHT_OFFSET, );
frontPoint = behindPos + look;
.(behindPos, frontPoint);
(myHRP, targetHRP)
(myHRP targetHRP)
;
desiredCf = (targetHRP);
activeTween
(()
activeTween:();
);
activeTween = ;
duration = .(, UPDATE_INTERVAL * TWEEN_DURATION_FACTOR);
info = TweenInfo.(duration, TWEEN_EASING_STYLE, TWEEN_EASING_DIR, , , );
success, tween = (()
TweenService:(myHRP, info, {=desiredCf});
);
(success tween)
activeTween = tween;
(()
tween:();
);
tween.Completed:(()
(activeTween == tween)
activeTween = ;
);
cam = Workspace.CurrentCamera;
RunService:(, .RenderPriority.Camera.Value + , (dt)
cam = Workspace.CurrentCamera;
running
;
targetPlayer
;
tChar = (targetPlayer);
tHRP = (tChar);
(tChar tHRP (tChar) ((tChar).Health > ))
;
desiredHrpCf = (tHRP);
look = tHRP.CFrame.LookVector;
camOffset = -(look * ) + .(, , );
camPos = desiredHrpCf.Position + camOffset;
lookAt = tHRP.Position + .(, , );
desiredCamCf = .(camPos, lookAt);
timeSinceMouse = () - lastMouseMove;
assist = ((timeSinceMouse > MOUSE_OVERRIDE_WINDOW) CAMERA_ASSIST) CAMERA_MIN_ASSIST;
alpha = (CAMERA_ASSIST_SCALE * assist, dt);
(()
cam.CameraType = .CameraType.Custom;
cam.CFrame = cam.CFrame:(desiredCamCf, alpha);
);
);
RunService.Heartbeat:((dt)
lastListTick = lastListTick + dt;
(lastListTick >= LIST_REFRESH)
lastListTick = ;
();
targetPlayer
tChar = (targetPlayer);
tHRP = (tChar);
tHum = (tChar);
(tChar tHRP tHum (tHum.Health > ))
running = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
();
running
;
targetPlayer
;
myChar = (LocalPlayer);
myChar
;
myHRP = (myChar);
myHum = (myChar);
( (myHRP myHum) (myHum.Health <= ))
;
tChar = (targetPlayer);
tHRP = (tChar);
tHum = (tChar);
(tChar tHRP tHum (tHum.Health > ))
running = ;
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;
();
;
lastTpTick = lastTpTick + dt;
(lastTpTick >= UPDATE_INTERVAL)
lastTpTick = ;
(()
myHum.PlatformStand = ;
(myHRP, tHRP);
);
);
();
ToggleBtn.BackgroundColor3 = .(, , );
ToggleBtn.Text = ;Auto-Follow – keeps you fixed directly behind the target player Smooth Tweening – natural movement, no snapping Dynamic Distance – constantly updates spacing to stay consistent Back Lock – always faces the target’s back automatically Sorted Player List – nearest to furthest, updates in real time GUI Controls – draggable, minimizable interface Real-Time Tracking – stays locked even if the target runs or teleports Toggle On/Off – quick control to enable or disable at will

Universal