Run it
Copy the script and paste it into your executor.
ENV = ( ())
TAG =
logged = {}
(msg, once)
once
logged[msg]
logged[msg] =
(TAG .. msg)
ENV.__AetherFlyDestroy
ok, err = (ENV.__AetherFlyDestroy)
ok ( .. (err))
ENV.__AetherFlyDestroy =
()
Players = :()
RunService = :()
UIS = :()
TweenService = :()
HttpService = :()
KC = .KeyCode
LP = Players.LocalPlayer
LP
()
THEMES = {
.(, , ),
}
C = {
Bg = .(, , ),
Card = .(, , ),
CardHi = .(, , ),
Track = .(, , ),
Text = .(, , ),
Dim = .(, , ),
Off = .(, , ),
White = .(, , ),
}
CFG = {
Speed = ,
Min = ,
Cap = ,
Step = ,
Smooth = ,
Stop = ,
Turn = ,
Tilt = ,
Pitch = ,
MaxPitch = ,
Brake = ,
Theme = , Key = KC.F, Collapsed = ,
}
RESERVED = {}
_, k ({
KC.W, KC.A, KC.S, KC.D, KC.Space, KC.E, KC.Q, KC.LeftControl,
KC.Equals, KC.Minus, KC.KeypadPlus, KC.KeypadMinus,
KC.RightShift, KC.Escape, KC.Tab, KC.Slash, KC.Return, KC.Backspace, KC.Unknown,
}) RESERVED[k] =
W, H_FULL, H_MIN = , ,
posX, posY = ,
(n)
(n) == n == n n ~= .huge n ~= -.huge
SAVE =
canFS = ((writefile) == (readfile) == (isfile) == )
()
canFS
okExists, exists = (isfile, SAVE)
(okExists exists)
okRead, raw = (readfile, SAVE)
okRead (raw) ~=
(, )
okJson, data = (HttpService.JSONDecode, HttpService, raw)
okJson (data) ~=
(, )
(data.Speed) CFG.Speed = .(.(data.Speed), CFG.Min, CFG.Cap)
(data.Theme) THEMES[data.Theme] CFG.Theme = data.Theme
(data.Key) ==
okKey, kc = (() KC[data.Key] )
okKey (kc) == kc.Value < RESERVED[kc] CFG.Key = kc
(data.X) (data.Y) posX, posY = data.X, data.Y
(data.Collapsed) == CFG.Collapsed = data.Collapsed
()
conns, charConns, transient = {}, {}, {}
flyConn, settleConn = ,
flying, uiUp, uiDown = , ,
engaged =
vel = .zero
destroyed =
collapsed = CFG.Collapsed
accent = THEMES[CFG.Theme]
cHum, cRoot = ,
prevPS =
lvObj, lvAtt, aoObj = , ,
lvNextTry =
controls =
held = {}
releasers = {}
pads = {}
protHum, protSaved = ,
heading =
groundK =
rayParams = RaycastParams.()
rayParams.FilterType = .RaycastFilterType.Exclude
gui, main, shimmer, uiScale
writeNow, setFly, setUI, stopDrag, release, restoreStates
notify = (_)
(sig, fn)
c = sig:(fn)
conns[#conns + ] = c
c
(i)
i.UserInputType == .UserInputType.MouseButton1 i.UserInputType == .UserInputType.Touch
()
ch = LP.Character
ch
hum = ch:()
root = ch:() (hum hum.RootPart)
hum root root.Parent ch, hum, root
saveQueued =
()
canFS saveQueued destroyed
saveQueued =
.(, ()
saveQueued =
destroyed writeNow ()
)
()
destroyed
setFly (, )
release ()
restoreStates ()
writeNow ()
destroyed =
shimmer shimmer:()
stopDrag ()
_, c (charConns) c:()
.(charConns)
c (transient) c:()
.(transient)
_, c (conns) c:()
.(conns)
gui gui:()
ENV.__AetherFlyDestroy == destroy ENV.__AetherFlyDestroy =
ENV.__AetherFlyDestroy = destroy
.(()
ok, result = (()
ps = LP:(, )
pm = ps ps:(, )
pm (pm):()
)
destroyed
ok result
controls = result
(, )
)
(hum, cam)
controls
ok, v = (controls.GetMoveVector, controls)
ok (v) ==
flatV = .(v.X, , v.Z)
flatV.Magnitude > cam.CFrame:(flatV)
(, )
controls =
md = hum.MoveDirection
md.Magnitude > md
.zero
()
ok, list = (UIS.GetConnectedGamepads, UIS)
pads = (ok (list) == ) list {}
()
(UIS.GamepadConnected, refreshPads)
(UIS.GamepadDisconnected, refreshPads)
(hum)
up = uiUp - uiDown
UIS:()
held[KC.Space] held[KC.E] up = up +
held[KC.LeftControl] held[KC.Q] up = up -
UIS.TouchEnabled hum hum.Jump up = up +
_, pad (pads)
UIS:(pad, KC.ButtonA) UIS:(pad, KC.ButtonR2) up = up +
UIS:(pad, KC.ButtonB) UIS:(pad, KC.ButtonL2) up = up -
.(up, -, )
PROTECT = { .HumanoidStateType.FallingDown, .HumanoidStateType.Ragdoll }
(hum)
protHum == hum
protHum ()
protHum, protSaved = hum, {}
_, st (PROTECT)
(()
protSaved[st] = hum:(st)
hum:(st, )
)
restoreStates = ()
hum, saved = protHum, protSaved
protHum, protSaved = ,
(hum saved hum.Parent)
st, was (saved)
(() hum:(st, was) )
(root)
.(root.AssemblyMass, ) * .(, CFG.Speed * CFG.Smooth * )
()
aoObj aoObj:() aoObj =
lvObj lvObj:() lvObj =
lvAtt lvAtt:() lvAtt =
(root)
()
rayParams.FilterDescendantsInstances = { root.Parent }
ok, err = (()
att = .()
att.Name =
att.Position = root.CFrame:(root.AssemblyCenterOfMass)
att.Parent = root
lvAtt = att
lv = .()
lv.Name =
lv.Attachment0 = att
lv.RelativeTo = .ActuatorRelativeTo.World
lv.VelocityConstraintMode = .VelocityConstraintMode.Vector
lv.MaxForce = (root)
lv.VectorVelocity = .zero
lv.Parent = root
lvObj = lv
)
ok
()
( .. (err) .. , )
()
lvAtt
okAO = (()
ao = .()
ao.Name =
ao.Mode = .OrientationAlignmentMode.OneAttachment
ao.Attachment0 = lvAtt
ao.RigidityEnabled =
ao.MaxTorque = .(root.AssemblyMass, ) *
ao.MaxAngularVelocity =
ao.Responsiveness = CFG.Turn
ao.CFrame = root.CFrame - root.CFrame.Position
ao.Parent = root
aoObj = ao
)
okAO
aoObj aoObj:() aoObj =
(, )
(root)
flat = heading
flat
look = root.CFrame.LookVector
flat = .(look.X, , look.Z)
flat.Magnitude <
cam = .CurrentCamera
cam
l = cam.CFrame.LookVector
flat = .(l.X, , l.Z)
flat.Magnitude < flat = .(, , -)
flat = flat.Unit
p = root.Position
.(p, p + flat)
(root, cam, dt)
look = cam.CFrame.LookVector
flat = .(look.X, , look.Z)
flat.Magnitude <
flat = flat.Unit
heading = flat
pitch = .(.(look.Y, -, )) * CFG.Pitch
CFG.Tilt >
lean = .(vel:(flat) / CFG.Speed, -, ) * CFG.Tilt
pitch = pitch - lean
pitch = .(pitch, -CFG.MaxPitch, CFG.MaxPitch)
want =
pitch <
hit = :(root.Position, .(, -, ), rayParams)
hit
d = root.Position.Y - hit.Position.Y
want = .((d - ) / , , )
groundK = groundK + (want - groundK) * ( - .(-dt * ))
pitch < pitch = pitch * groundK
dir = flat * .(pitch) + .(, .(pitch), )
p = root.Position
.(p, p + dir)
(root, dt, target)
lvObj lvObj.Parent == root
lvObj.VectorVelocity = vel
lvObj.MaxForce = (root)
lvAtt lvAtt.Parent == root
lvAtt.Position = root.CFrame:(root.AssemblyCenterOfMass)
root.AssemblyLinearVelocity = vel + .(, .Gravity * dt, )
target
aoObj aoObj.Parent == root
aoObj.CFrame = target
root.AssemblyAngularVelocity = .zero
root.CFrame = root.CFrame:(target, - .(-dt * CFG.Turn))
(dt)
dt > dt =
hum, root = cHum, cRoot
(hum root hum.Parent root.Parent)
_, h, r = ()
(h r)
(, )
()
cHum, cRoot = h, r
hum, root = h, r
(root)
hum.Health <= (, )
hum.SeatPart
(, )
()
hum.PlatformStand hum.PlatformStand =
cam = .CurrentCamera
cam
(lvObj lvObj.Parent == root)
now = .()
now >= lvNextTry
lvNextTry = now +
(root)
actual = root.AssemblyLinearVelocity
vel.Magnitude > (actual - vel).Magnitude > .(, CFG.Speed * )
vel = vel:(actual, )
dir = (hum, cam) + .(, (hum), )
dir.Magnitude > dir = dir.Unit
rate = (dir.Magnitude > ) CFG.Smooth CFG.Stop
vel = vel:(dir * CFG.Speed, - .(-dt * rate))
(root, dt, (root, cam, dt))
release = ()
settleConn settleConn:() settleConn =
flyConn flyConn:() flyConn =
flying =
()
vel = .zero
engaged
engaged =
hum, root = cHum, cRoot
seated = hum hum.SeatPart ~=
root root.Parent seated
root.AssemblyLinearVelocity = .zero
root.AssemblyAngularVelocity = .zero
root.CFrame.UpVector.Y > root.CFrame = (root)
hum hum.Parent
was = (prevPS == )
prevPS =
hum.PlatformStand = was
hum.Health > was seated
(() hum:(.HumanoidStateType.Freefall) )
.(, ()
engaged ()
)
(hum, root)
t0 = .()
settleConn = RunService.Heartbeat:((dt)
dt > dt =
destroyed (hum.Parent root.Parent) hum.Health <= hum.SeatPart
()
vel = vel:(.zero, - .(-dt * CFG.Brake))
(root, dt, (root))
elapsed = .() - t0
upright = root.CFrame.UpVector.Y >
elapsed >= (elapsed >= vel.Magnitude < upright)
()
)
setFly = (on, instant)
destroyed
on
flying
_, hum, root = ()
(hum root) ()
hum.Health <= ()
hum.SeatPart ()
resume = (settleConn ~= engaged cHum == hum cRoot == root)
settleConn settleConn:() settleConn =
resume
()
cHum, cRoot = hum, root
vel = .zero
heading, groundK = ,
prevPS = hum.PlatformStand
(hum)
hum.PlatformStand =
engaged =
(root)
flying =
flyConn = RunService.Heartbeat:(step)
flying
flying =
flyConn flyConn:() flyConn =
hum, root = cHum, cRoot
canSettle = ( instant) engaged hum root hum.Parent root.Parent
hum.Health > hum.SeatPart
canSettle
(hum, root)
()
setUI ()
(class, props, parent)
o = .(class)
o:() (() o.AutoLocalize = )
k, v (props) o[k] = v
parent o.Parent = parent
o
(o, props, t, style)
TweenService:(o, TweenInfo.(t , style .EasingStyle.Quad, .EasingDirection.Out), props):()
(o, r) (, { CornerRadius = .(, r) }, o)
themed = {}
(fn)
themed[#themed + ] = fn
()
gui = (, {
Name = , ResetOnSpawn = , IgnoreGuiInset = ,
ZIndexBehavior = .ZIndexBehavior.Sibling, DisplayOrder = ,
})
(() gui.ScreenInsets = .ScreenInsets.DeviceSafeInsets )
()
candidates = {
() LP:() LP:(, ) ,
() :() ,
}
_, get (candidates)
ok, parent = (get)
ok parent
ok2 = (() gui.Parent = parent )
ok2 gui.Parent == parent
()
()
(gui.AncestryChanged, (_, parent)
parent destroyed
()
()
)
()
a = gui.AbsoluteSize
a.X > a.Y > a
cam = .CurrentCamera
v = cam cam.ViewportSize
v v.X > v.Y > v
.(, )
()
vp = ()
.(.((vp.Y - ) / H_FULL, (vp.X - ) / W, ), , )
(x, y)
vp = ()
s = uiScale uiScale.Scale
minX = -(W * s) +
maxX = vp.X -
.(x, minX, maxX), .(y, , .(, vp.Y - ))
main = (, {
Size = .(W, collapsed H_MIN H_FULL),
BackgroundColor3 = C.Bg, BorderSizePixel = , ClipsDescendants = ,
Active = ,
}, gui)
(main, )
(, { Color = C.White, Transparency = , Thickness = }, main)
uiScale = (, { Scale = () }, main)
((posX) (posY))
vp, s = (), uiScale.Scale
UIS.TouchEnabled UIS.KeyboardEnabled
posX, posY = vp.X - W * s - ,
posX, posY = , (vp.Y - H_FULL * s) /
posX, posY = (posX, posY)
main.Position = .(posX, posY)
bar = (, { Size = .(, , , H_MIN), BackgroundTransparency = , Active = }, main)
titleLabel = (, {
BackgroundTransparency = , Position = .(, ), Size = .(, -, , ),
Text = , Font = .Font.GothamBold, TextSize = ,
TextColor3 = C.Text, TextXAlignment = .TextXAlignment.Left,
TextTruncate = .TextTruncate.AtEnd,
}, bar)
titleToken =
notify = (msg)
destroyed
titleToken = titleToken +
my = titleToken
titleLabel.Text = msg
titleLabel.TextColor3 = C.Off
.(, ()
my == titleToken destroyed
titleLabel.Text =
titleLabel.TextColor3 = C.Text
)
(txt, x)
b = (, {
Size = .(, ), Position = .(, x, , -),
BackgroundColor3 = C.Card, Text = txt, Font = .Font.GothamBold, TextSize = ,
TextColor3 = C.Dim, AutoButtonColor = , Selectable = ,
}, bar)
(b, )
(b.MouseEnter, () (b, { TextColor3 = C.Text }) )
(b.MouseLeave, () (b, { TextColor3 = C.Dim }) )
b
btnMin = (collapsed , -)
btnClose = (, -)
body = (, {
Position = .(, H_MIN), Size = .(, , , -H_MIN),
BackgroundTransparency = , Visible = collapsed,
}, main)
(, { PaddingLeft = .(, ), PaddingRight = .(, ) }, body)
(obj, onDown, onUp)
active =
()
active
active =
()
(obj.InputBegan, (i)
(i) active
active = i
()
c
c = i.Changed:(()
i.UserInputState == .UserInputState.End
c:()
transient[c] =
active == i ()
)
transient[c] =
)
(obj.MouseLeave, ()
active active.UserInputType == .UserInputType.MouseButton1 ()
)
releasers[#releasers + ] = releasePress
toggle = (, {
Size = .(, , , ), BackgroundColor3 = C.Card, AutoButtonColor = ,
Text = , BorderSizePixel = , Selectable = ,
}, body)
(toggle, )
tStroke = (, { Color = C.Off, Transparency = , Thickness = }, toggle)
dot = (, {
Size = .(, ), Position = .(, , , -),
BackgroundColor3 = C.Off, BorderSizePixel = ,
}, toggle)
(dot, )
tLabel = (, {
BackgroundTransparency = , Position = .(, ), Size = .(, -, , ),
Text = , Font = .Font.GothamBold, TextSize = , TextColor3 = C.Text,
TextXAlignment = .TextXAlignment.Left,
}, toggle)
speedRow = (, {
Position = .(, ), Size = .(, , , ), BackgroundColor3 = C.Card, BorderSizePixel = ,
}, body)
(speedRow, )
speedBox = (, {
BackgroundTransparency = , Position = .(, ), Size = .(, -, , ),
Text = , Font = .Font.GothamMedium, TextSize = , TextColor3 = C.Dim,
ClearTextOnFocus = , TextEditable = , TextTruncate = .TextTruncate.AtEnd,
}, speedRow)
track = (, {
Position = .(, , , ), Size = .(, -, , ),
BackgroundColor3 = C.Track, BorderSizePixel = ,
}, speedRow)
(track, )
fill = (, { Size = .(, , , ), BorderSizePixel = }, track)
(fill, )
()
speedBox:()
speedBox.Text = .. CFG.Speed
fill.Size = .(CFG.Speed / (CFG.Speed + ), , , )
(v)
(v)
n = .(.(v + ), CFG.Min, CFG.Cap)
n == CFG.Speed
CFG.Speed = n
()
()
(speed)
.(CFG.Step, .(speed * ))
(speedBox.Focused, ()
speedBox.TextColor3 = C.Text
)
(speedBox.FocusLost, ()
speedBox.TextColor3 = C.Dim
digits = .(speedBox.Text, , )
n = (digits)
n (n)
()
)
(txt, pos, sign)
b = (, {
Size = .(, ), Position = pos, BackgroundTransparency = ,
Text = txt, Font = .Font.GothamBold, TextSize = , TextColor3 = accent,
AutoButtonColor = , Selectable = ,
}, speedRow)
(() b.TextColor3 = accent )
token =
(b, ()
token = token +
my = token
(CFG.Speed + sign * (CFG.Speed))
.(()
.()
token == my destroyed
(CFG.Speed + sign * (CFG.Speed))
.()
)
, () token = token + )
(, .(, ), -)
(, .(, -, , ), )
(txt, xScale, onChange)
b = (, {
Position = .(xScale, xScale == , , ), Size = .(, -, , ),
BackgroundColor3 = C.Card, Text = txt, Font = .Font.GothamBold, TextSize = ,
TextColor3 = C.Dim, AutoButtonColor = , Selectable = ,
}, body)
(b, )
(b, ()
()
(b, { TextColor3 = accent, BackgroundColor3 = C.CardHi }, )
, ()
()
(b, { TextColor3 = C.Dim, BackgroundColor3 = C.Card }, )
)
(, , (v) uiUp = v )
(, , (v) uiDown = v )
keyChip = (, {
Position = .(, ), Size = .(, ), BackgroundColor3 = C.Card,
Text = , Font = .Font.GothamBold, TextSize = , TextColor3 = C.Dim,
AutoButtonColor = , Selectable = ,
}, body)
(keyChip, )
()
.(.(CFG.Key.Name, , ))
()
keyChip.Text = .. ()
()
swatches = {}
logo = (, {
Position = .(, ), Size = .(, , , ), BackgroundTransparency = ,
}, body)
row = (, {
AnchorPoint = .(, ), Position = .(, ),
Size = .(, ), AutomaticSize = .AutomaticSize.X, BackgroundTransparency = ,
}, logo)
(, {
FillDirection = .FillDirection.Horizontal, HorizontalAlignment = .HorizontalAlignment.Center,
VerticalAlignment = .VerticalAlignment.Center, SortOrder = .SortOrder.LayoutOrder,
Padding = .(, ),
}, row)
(order, fadeIn)
l = (, {
LayoutOrder = order, Size = .(, ), BackgroundColor3 = C.White, BorderSizePixel = ,
}, row)
g = (, {
Transparency = NumberSequence.({
NumberSequenceKeypoint.(, fadeIn ),
NumberSequenceKeypoint.(, fadeIn ),
}),
}, l)
(() g.Color = ColorSequence.(accent) )
(order)
d = (, {
LayoutOrder = order, Size = .(, ), Rotation = , BorderSizePixel = ,
}, row)
(() d.BackgroundColor3 = accent )
(, )
()
(, {
LayoutOrder = , BackgroundTransparency = , Size = .(, ), AutomaticSize = .AutomaticSize.X,
Text = , Font = .Font.GothamMedium, TextSize = , TextColor3 = C.Dim,
}, row)
codeR = (, {
LayoutOrder = , BackgroundTransparency = , Size = .(, ), AutomaticSize = .AutomaticSize.X,
Text = , Font = .Font.GothamBlack, TextSize = , TextColor3 = C.White,
}, row)
glow = (, { Thickness = , Transparency = }, codeR)
shine = (, { Offset = .(-, ) }, codeR)
(()
glow.Color = accent
shine.Color = ColorSequence.({
ColorSequenceKeypoint.(, accent),
ColorSequenceKeypoint.(, accent),
ColorSequenceKeypoint.(, C.White),
ColorSequenceKeypoint.(, accent),
ColorSequenceKeypoint.(, accent),
})
idx, st (swatches) st.Transparency = (idx == CFG.Theme)
)
()
(, )
shimmer = TweenService:(shine, TweenInfo.(, .EasingStyle.Sine, .EasingDirection.InOut),
{ Offset = .(, ) })
()
destroyed collapsed main.Visible
shine.Offset = .(-, )
shimmer:()
setUI = ()
col = flying accent C.Off
(dot, { BackgroundColor3 = col })
(tStroke, { Color = col })
tLabel.Text = flying
fill.BackgroundColor3 = accent
()
(() fill.BackgroundColor3 = accent )
()
(toggle.Activated, () ( flying) )
(toggle.MouseEnter, () (toggle, { BackgroundColor3 = C.CardHi }) )
(toggle.MouseLeave, () (toggle, { BackgroundColor3 = C.Card }) )
()
uiScale.Scale = ()
posX, posY = (posX, posY)
main.Position = .(posX, posY)
(gui:(), relayout)
collapseToken =
(v)
collapsed = v
btnMin.Text = v
collapseToken = collapseToken +
my = collapseToken
v body.Visible =
posX, posY = (posX, posY)
(main, {
Size = .(W, v H_MIN H_FULL),
Position = .(posX, posY),
}, )
v
.(, ()
collapseToken == my collapsed destroyed body.Visible =
)
()
()
(btnMin.Activated, () ( collapsed) )
dragMove, dragEnd = ,
stopDrag = ()
dragMove dragMove:() dragMove =
dragEnd dragEnd:() dragEnd =
()
(bar.InputBegan, (i)
(i) dragMove
startX, startY = posX, posY
mx, my = i.Position.X, i.Position.Y
dragMove = UIS.InputChanged:((m)
m.UserInputType == .UserInputType.MouseMovement m == i
posX, posY = (startX + (m.Position.X - mx), startY + (m.Position.Y - my))
main.Position = .(posX, posY)
)
dragEnd = i.Changed:(()
i.UserInputState == .UserInputState.End ()
)
)
listening, listenToken = ,
()
listening =
listenToken = listenToken +
()
(keyChip, { TextColor3 = C.Dim })
(keyChip.Activated, ()
listening ()
listening =
listenToken = listenToken +
my = listenToken
keyChip.Text =
(keyChip, { TextColor3 = accent })
.(, ()
listening listenToken == my destroyed ()
)
)
()
_, r (releasers) ()
.(held)
uiUp, uiDown = ,
(UIS.InputBegan, (i, gp)
i.UserInputType == .UserInputType.Keyboard
k = i.KeyCode
held[k] =
UIS:()
listening
k == KC.Escape
()
RESERVED[k]
()
CFG.Key = k
()
()
k == CFG.Key
( flying)
k == KC.Equals k == KC.KeypadPlus
(CFG.Speed + (CFG.Speed))
k == KC.Minus k == KC.KeypadMinus
(CFG.Speed - (CFG.Speed))
k == KC.RightShift gp
main.Visible = main.Visible
()
i.KeyCode == KC.ButtonY gp
( flying)
)
(UIS.InputEnded, (i)
i.UserInputType == .UserInputType.Keyboard held[i.KeyCode] =
)
(UIS.WindowFocusReleased, releaseAll)
(ch)
_, c (charConns) c:()
.(charConns)
()
cHum, cRoot = ,
uiUp, uiDown = ,
()
hum = ch:(, )
root = ch:(, )
destroyed LP.Character ~= ch
(hum root)
(, )
()
cHum, cRoot = hum, root
charConns[#charConns + ] = hum.Died:(() (, ) )
(LP.CharacterAdded, (ch) .(onChar, ch) )
(LP.CharacterRemoving, () (, ) )
LP.Character .(onChar, LP.Character)
writeNow = ()
canFS
data = {
Speed = CFG.Speed, Theme = CFG.Theme, Key = CFG.Key.Name,
X = (posX) posX , Y = (posY) posY , Collapsed = collapsed,
}
ok, err = (() (SAVE, HttpService:(data)) )
ok ( .. (err), )
(btnClose.Activated, destroy)
()
ok, err = (boot, (e) debug.((e), ) )
ok
(TAG .. .. (err))
ENV.__AetherFlyDestroy (ENV.__AetherFlyDestroy)
Fly v5 BETA

Universal