Run it
Copy the script and paste it into your executor.
Players = :()
UIS = :()
RunService = :()
HttpService = :()
LocalPlayer = Players.LocalPlayer
VIM = :()
Camera = .CurrentCamera
EXISTING = LocalPlayer:() LocalPlayer.PlayerGui:()
EXISTING
(() EXISTING:() )
savesFolder = :()
savesFolder
savesFolder = .()
savesFolder.Name =
savesFolder.Parent =
connections = {}
(signal, fn)
c = signal:(fn)
.(connections, c)
c
.__KeymapperConnections
_,c (.__KeymapperConnections)
(() c:() )
.__KeymapperConnections = connections
ScreenGui = .()
ScreenGui.Name =
ScreenGui.ResetOnSpawn =
ScreenGui.Parent = LocalPlayer:()
(parent, size, pos, bg)
f = .()
f.Size = size
f.Position = pos
f.BackgroundColor3 = bg .(,,)
f.BackgroundTransparency =
f.BorderSizePixel =
f.Active =
f.Draggable =
f.Parent = parent
f
(parent, text, size, pos)
b = .()
b.Size = size
b.Position = pos
b.BackgroundColor3 = .(,,)
b.BackgroundTransparency =
b.TextColor3 = .(,,)
b.Text = text
b.Font = .Font.SourceSansBold
b.TextSize =
b.Active =
b.Draggable =
b.Parent = parent
b
(parent, text, size, pos)
l = .()
l.Size = size
l.Position = pos
l.BackgroundTransparency =
l.TextColor3 = .(,,)
l.Text = text
l.Font = .Font.SourceSans
l.TextSize =
l.Parent = parent
l
menu = (ScreenGui, .(,,,), .(,,,))
menu.Name =
title = (menu, , .(,,,), .(,,,))
title.Font = .Font.GothamBold
title.TextSize =
mode =
shiftlock =
keyMappings = {}
activeKeys = {}
modeBtn = (menu, , .(,,,), .(,,,))
spawnMappedBtn = (menu, , .(,,,), .(,,,))
spawnLMBBtn = (menu, , .(,,,), .(,,,))
spawnRMBBtn = (menu, , .(,,,), .(,,,))
shiftBtn = (menu, , .(,,,), .(,,,))
saveBtn = (menu, , .(,,,), .(,,,))
loadBtn = (menu, , .(,,,), .(,,,))
hideBtn = (menu, , .(,,,), .(,,,))
showBtn = (ScreenGui, , .(,,,), .(,,,))
showBtn.Visible =
promptFrame = (ScreenGui, .(,,,), .(,,,))
promptFrame.Visible =
promptLabel = (promptFrame, , .(,,,), .(,,,))
promptLabel.TextSize =
textBox = .(, promptFrame)
textBox.Size = .(,,,)
textBox.Position = .(,,,)
textBox.BackgroundTransparency =
textBox.Text =
textBox.ClearTextOnFocus =
textBox.TextColor3 = .(,,)
textBox.PlaceholderText =
textBox.Font = .Font.SourceSans
textBox.TextSize =
promptConfirm = (promptFrame, , .(,,,), .(,,,))
promptCancel = (promptFrame, , .(,,,), .(,,,))
(msg, t)
t = t
= (ScreenGui, .(,,,), .(,-,,))
label = (, ..msg, .(,,,), .(,,,))
.BackgroundTransparency =
(t, () (() :() ) )
(u)
{X = u.X.Scale, XS = u.X.Offset, Y = u.Y.Scale, YS = u.Y.Offset}
(t)
.(t.X , t.XS , t.Y , t.YS )
()
out = {}
k,v (keyMappings)
keyIdentifier
(k) ==
keyIdentifier = (k)
keyIdentifier = (k.Value)
out[#out+] = {
key = keyIdentifier,
= v.type,
pos = (v.btn.Position),
size = (v.btn.Size),
text = v.btn.Text
}
out
()
_,v (keyMappings)
v.btn v.btn.Parent
(() v.btn:() )
keyMappings = {}
(labelText, pos, size)
btn = .()
btn.Size = size .(,,,)
btn.Position = pos .(,-,,-)
btn.BackgroundColor3 = .(,,)
btn.BackgroundTransparency =
btn.TextColor3 = .(,,)
btn.Text = labelText
btn.Font = .Font.Gotham
btn.TextSize =
btn.Active =
btn.Draggable =
btn.Parent = ScreenGui
btn
(slotName)
slotName slotName ==
data = {
mode = mode,
shiftlock = shiftlock,
mappings = ()
}
json = HttpService:(data)
sv = savesFolder:(slotName)
sv
sv.Value = json
s = .()
s.Name = slotName
s.Value = json
s.Parent = savesFolder
(..slotName.., )
()
t = {}
_,v (savesFolder:())
v:()
.(t, v.Name)
t
(slotName)
sv = savesFolder:(slotName)
sv
(..(slotName), )
ok, data = (() HttpService:(sv.Value) )
ok data
(,)
promptLabel.Text =
textBox.Text =
promptFrame.Visible =
promptConfirm.Visible =
promptCancel.Visible =
connConfirm
connConfirm = (promptConfirm.MouseButton1Click, ()
textBox.Text:() ==
()
mode = data.mode
modeBtn.Text = ..(mode == )
shiftlock = data.shiftlock
shiftBtn.Text = ..(shiftlock )
_,m (data.mappings {})
pos = (m.pos)
size = (m.size)
b = (m.text , pos, size)
keyId = m.key
.(keyId, )
keyId:()
keyMappings[.UserInputType.MouseButton1] = {btn = b, = }
keyId:()
keyMappings[.UserInputType.MouseButton2] = {btn = b, = }
num = (keyId)
num
kc = .KeyCode:()[]
_,e (.KeyCode:())
e.Value == num
kc = e
keyMappings[kc] = {btn = b, = , key = kc}
promptFrame.Visible =
(..slotName.., )
(,)
promptFrame.Visible =
(() connConfirm:() )
)
(promptCancel.MouseButton1Click, ()
promptFrame.Visible =
(() connConfirm:() )
)
()
ok, err = (()
VIM:(, .KeyCode.Unknown, , )
VIM:(,,,,,)
)
ok
()
(, )
spawnMappedBtn.MouseButton1Click:(()
b = (, .(,-,,-), )
listening =
connA, connB
connA = (b.MouseButton1Click, ()
b.Text =
listening =
)
connB = (UIS.InputBegan, (input, gp)
listening input.UserInputType == .UserInputType.Keyboard
kc = input.KeyCode
b.Text = kc.Name
keyMappings[kc] = {btn = b, = , key = kc}
listening =
)
)
spawnLMBBtn.MouseButton1Click:(()
b = (, .(,,,-), )
keyMappings[.UserInputType.MouseButton1] = {btn = b, = }
)
spawnRMBBtn.MouseButton1Click:(()
b = (, .(,,,-), )
keyMappings[.UserInputType.MouseButton2] = {btn = b, = }
)
shiftBtn.MouseButton1Click:(()
shiftlock = shiftlock
shiftBtn.Text = .. (shiftlock )
LocalPlayer.DevEnableMouseLock = shiftlock
shiftlock
UIS.MouseBehavior = .MouseBehavior.LockCenter
UIS.MouseIconEnabled =
UIS.MouseBehavior = .MouseBehavior.Default
UIS.MouseIconEnabled =
)
hideBtn.MouseButton1Click:(()
menu.Visible =
showBtn.Visible =
)
showBtn.MouseButton1Click:(()
menu.Visible =
showBtn.Visible =
)
saveBtn.MouseButton1Click:(()
promptLabel.Text =
textBox.Text =
promptFrame.Visible =
conn
conn = (promptConfirm.MouseButton1Click, ()
name = textBox.Text
name ==
(, )
(name)
promptFrame.Visible =
(() conn:() )
)
(promptCancel.MouseButton1Click, ()
promptFrame.Visible =
(() conn:() )
)
)
loadBtn.MouseButton1Click:(()
slots = ()
#slots ==
(, )
promptLabel.Text = ..table.(slots, )..
textBox.Text =
promptFrame.Visible =
conn
conn = (promptConfirm.MouseButton1Click, ()
name = textBox.Text
name ==
(,)
promptFrame.Visible =
(name)
(() conn:() )
)
(promptCancel.MouseButton1Click, ()
promptFrame.Visible =
(() conn:() )
)
)
sendIntervals =
(keycode)
ok, err = (()
VIM:(, keycode, , )
.()
VIM:(, keycode, , )
)
ok
(, )
(btn, mouseButtonType)
success, err = (()
pos = btn.AbsolutePosition + (btn.AbsoluteSize/)
VIM:(pos.X, pos.Y, mouseButtonType, , , )
.()
VIM:(pos.X, pos.Y, mouseButtonType, , , )
)
success
(, )
holdingLoops = {}
(kc)
holdingLoops[kc]
co = .(()
activeKeys[kc]
(kc)
.(sendIntervals)
holdingLoops[kc] =
)
holdingLoops[kc] = co
.(co)
(kc)
activeKeys[kc] =
(UIS.InputBegan, (input, gp)
uit = input.UserInputType
uit == .UserInputType.Keyboard
kc = input.KeyCode
activeKeys[kc] =
mode ==
(kc)
mode ==
map = keyMappings[kc]
map map.btn map.type ==
(()
(map.btn, )
)
uit == .UserInputType.MouseButton1 uit == .UserInputType.MouseButton2
mode ==
map = keyMappings[uit]
map map.btn
mb = (uit == .UserInputType.MouseButton2)
(() (map.btn, mb) )
ok, err = (()
x = Camera.ViewportSize.X/
y = Camera.ViewportSize.Y/
mb = (uit == .UserInputType.MouseButton2)
VIM:(x,y,mb,,,)
.()
VIM:(x,y,mb,,,)
)
ok
)
(UIS.InputEnded, (input, gp)
input.UserInputType == .UserInputType.Keyboard
kc = input.KeyCode
(kc)
)
modeBtn.MouseButton1Click:(()
mode ==
mode =
modeBtn.Text =
k,v (keyMappings)
v.btn v.btn.Visible =
mode =
modeBtn.Text =
k,v (keyMappings)
v.btn v.btn.Visible =
)
help = (menu, , .(,,,), .(,,,))
help.TextSize =
(btn, keyRep)
btn.MouseButton2Click:(()
promptLabel.Text =
textBox.Text =
promptFrame.Visible =
connC
connC = (promptConfirm.MouseButton1Click, ()
v = textBox.Text
v ==
(,)
v:() ==
k,m (keyMappings)
m.btn == btn
keyMappings[k] =
(() btn:() )
promptFrame.Visible =
found =
_,kc (.KeyCode:())
kc.Name:() == v:() found = kc
found
k,m (keyMappings)
m.btn == btn
keyMappings[k] =
keyMappings[found] = {btn = btn, = , key = found}
btn.Text = found.Name
promptFrame.Visible =
(..v, )
(() connC:() )
)
(promptCancel.MouseButton1Click, ()
promptFrame.Visible =
(() connC:() )
)
)
k,v (keyMappings)
v.btn (v.btn, k)
(RunService.Heartbeat, ()
k,v (keyMappings)
v v.btn v._contextAttached
(() (v.btn, k) )
v._contextAttached =
shiftlock
UIS.MouseBehavior = .MouseBehavior.LockCenter
UIS.MouseIconEnabled =
)
(, )
has many stuff even has warning save slots etc!

Universal