Run it
Copy the script and paste it into your executor.
Players = :()
TweenService = :()
CoreGui = :()
player = Players.LocalPlayer
GUI_NAME =
USE_SPEED_MODE =
STUDS_PER_SECOND =
FIXED_TWEEN_TIME =
MIN_TWEEN_TIME =
MAX_TWEEN_TIME =
EASING_STYLE = .EasingStyle.Sine
EASING_DIR = .EasingDirection.InOut
WAIT_AT_POINT =
CONTROL_AUTOROTATE =
old = CoreGui:(GUI_NAME)
old old:()
()
player.Character player.CharacterAdded:()
(char)
char
char:() char.PrimaryPart
(char)
char char:()
(x, a, b)
x < a a
x > b b
x
(fromPos: , toPos: )
USE_SPEED_MODE
(FIXED_TWEEN_TIME, MIN_TWEEN_TIME, MAX_TWEEN_TIME)
dist = (toPos - fromPos).Magnitude
t = dist / .(STUDS_PER_SECOND, )
(t, MIN_TWEEN_TIME, MAX_TWEEN_TIME)
(frame, handle)
handle = handle frame
dragging =
dragStart, startPos
(input)
delta = input.Position - dragStart
frame.Position = .(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
handle.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = frame.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragging =
)
)
handle.InputChanged:((input)
(input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch) dragging
(input)
)
gui = .()
gui.Name = GUI_NAME
gui.ResetOnSpawn =
gui.Parent = CoreGui
main = .()
main.Name =
main.Size = .(, , , )
main.Position = .(, , , )
main.BackgroundColor3 = .(, , )
main.BorderSizePixel =
main.Parent = gui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = main
header = .()
header.Name =
header.Size = .(, , , )
header.BackgroundColor3 = .(, , )
header.BorderSizePixel =
header.Text =
header.Font = .Font.GothamBold
header.TextSize =
header.TextColor3 = .(, , )
header.AutoButtonColor =
header.Parent = main
headerCorner = .()
headerCorner.CornerRadius = .(, )
headerCorner.Parent = header
headerMask = .()
headerMask.Size = .(, , , )
headerMask.Position = .(, , , -)
headerMask.BackgroundColor3 = header.BackgroundColor3
headerMask.BorderSizePixel =
headerMask.Parent = header
(name, text, posY, height)
height = height
b = .()
b.Name = name
b.Size = .(, -, , height)
b.Position = .(, , , posY)
b.BackgroundColor3 = .(, , )
b.BorderSizePixel =
b.Text = text
b.Font = .Font.Gotham
b.TextSize =
b.TextColor3 = .(, , )
b.Parent = main
c = .()
c.CornerRadius = .(, )
c.Parent = b
b
btnAdd = (, , )
btnRemove = (, , )
btnClear = (, , )
btnLoop = (, , )
listLabel = .()
listLabel.Size = .(, -, , )
listLabel.Position = .(, , , )
listLabel.BackgroundTransparency =
listLabel.Text =
listLabel.Font = .Font.GothamBold
listLabel.TextSize =
listLabel.TextColor3 = .(, , )
listLabel.TextXAlignment = .TextXAlignment.Left
listLabel.Parent = main
list = .()
list.Name =
list.Size = .(, -, , -)
list.Position = .(, , , )
list.BackgroundColor3 = .(, , )
list.BorderSizePixel =
list.ScrollBarThickness =
list.CanvasSize = .(, , , )
list.Parent = main
listCorner = .()
listCorner.CornerRadius = .(, )
listCorner.Parent = list
layout = .()
layout.Padding = .(, )
layout.SortOrder = .SortOrder.LayoutOrder
layout.Parent = list
pad = .()
pad.PaddingTop = .(, )
pad.PaddingBottom = .(, )
pad.PaddingLeft = .(, )
pad.PaddingRight = .(, )
pad.Parent = list
(main, header)
waypoints = {} :: {}
loopEnabled =
loopToken =
(on)
btnLoop.Text = on
btnLoop.BackgroundColor3 = on .(, , ) .(, , )
()
_, child (list:())
child:()
child:()
(i: number, cf: )
row = .()
row.Size = .(, , , )
row.BackgroundColor3 = .(, , )
row.BorderSizePixel =
row.LayoutOrder = i
row.Parent = list
rc = .()
rc.CornerRadius = .(, )
rc.Parent = row
txt = .()
txt.BackgroundTransparency =
txt.Size = .(, -, , )
txt.Position = .(, , , )
txt.Font = .Font.Gotham
txt.TextSize =
txt.TextColor3 = .(, , )
txt.TextXAlignment = .TextXAlignment.Left
p = cf.Position
txt.Text = .(, i, p.X, p.Y, p.Z)
txt.Parent = row
()
()
i, cf (waypoints)
(i, cf)
.(()
total = layout.AbsoluteContentSize.Y +
list.CanvasSize = .(, , , total)
)
(root: BasePart, target: )
t = (root.Position, target.Position)
ti = TweenInfo.(t, EASING_STYLE, EASING_DIR)
tw = TweenService:(root, ti, { = target})
tw:()
tw
(myToken: number)
savedAutoRotate: boolean? =
loopEnabled loopToken == myToken
#waypoints <
.()
char = player.Character
root = (char)
hum = (char)
(char root)
.()
CONTROL_AUTOROTATE hum
savedAutoRotate = hum.AutoRotate
hum.AutoRotate =
i = , #waypoints
(loopEnabled loopToken == myToken)
i > #waypoints
target = waypoints[i]
tw = (root, target)
tw.Completed:()
(loopEnabled loopToken == myToken)
.(WAIT_AT_POINT)
char = player.Character
root = (char)
hum = (char)
(char root)
char = player.Character
hum = (char)
CONTROL_AUTOROTATE hum savedAutoRotate ~=
hum.AutoRotate = savedAutoRotate
btnAdd.MouseButton1Click:(()
char = ()
root = (char)
root
.(waypoints, root.CFrame)
()
)
btnRemove.MouseButton1Click:(()
#waypoints >
.(waypoints, #waypoints)
()
)
btnClear.MouseButton1Click:(()
.(waypoints)
()
)
btnLoop.MouseButton1Click:(()
loopEnabled = loopEnabled
(loopEnabled)
loopToken +=
myToken = loopToken
loopEnabled
.(()
(myToken)
)
)
()
()

Universal