Run it
Copy the script and paste it into your executor.
().OJBS_Cleanup (().OJBS_Cleanup)
Players = :()
ReplicatedStorage = :()
RunService = :()
UIS = :()
TweenService = :()
HttpService = :()
Workspace = :()
LP = Players.LocalPlayer
Mouse = LP:()
TOGGLE_KEY = .KeyCode.RightControl
USE_EMOJI =
WINDOW_W, WINDOW_H = ,
RAIL_W, RAIL_OFF = ,
TAB_W =
MOTION =
FONT_MONO = .Font.Code
FONT_TITLE = .Font.Arcade
STYLE = {
bg = { m1 = , tp = , crate = },
opacity = ,
scan = ,
glow = ,
round = ,
outline = ,
scale = ,
image = { m1 = , tp = , crate = },
imgTrans = ,
imgFit = ,
}
BG_KINDS = { , , , }
STYLE_DEFAULT = {
bg = { m1 = , tp = , crate = },
opacity = ,
scan = ,
glow = ,
round = ,
outline = ,
scale = ,
image = { m1 = , tp = , crate = },
imgTrans = ,
imgFit = ,
}
IMG = { dir = }
IMG.()
(listfiles) == (isfolder) ==
IMG.()
(makefolder isfolder)
ok = (()
(IMG.dir) (IMG.dir)
)
ok
IMG.()
out = {}
(listfiles isfolder) out
ok, files = (listfiles, IMG.dir)
ok (files) ~= out
_, f (files)
(f) ==
name = .(f, ) f
low = .(name)
.(low, ) .(low, )
.(low, ) .(low, )
.(low, )
out[#out + ] = { path = f, name = name }
.(out, (a, b) .(a.name) < .(b.name) )
out
IMG.(src)
(src) ~= src ==
.(src, , , ) .(src, , , )
src
.(src, )
fn = getcustomasset getsynasset
(fn) ~=
ok, content = (fn, src)
ok (content) == content ~= content
IMG.(url)
(url) ~= ,
url = .(url, , )
url = .(url, , )
.(url, ) ,
(writefile .HttpGet) ,
clean = .(url, , )
name = .(clean, )
.(.(name), )
name = .. (.()) ..
IMG.() , .. IMG.dir
ok, body = (.HttpGet, , url)
ok (body) ~= body == ,
path = IMG.dir .. .. name
(writefile, path, body) ,
, path
(IMG.ensure)
MAX_TICK =
MAX_INFLIGHT =
BASE = {
bg = .(, , ),
bg2 = .(, , ),
panel = .(, , ),
panel2 = .(, , ),
line = .(, , ),
text = .(, , ),
dim = .(, , ),
black = .(, , ),
}
THEMES = {
m1 = { a = .(, , ), b = .(, , ) },
tp = { a = .(, , ), b = .(, , ) },
crate = { a = .(, , ), b = .(, , ) },
}
SWATCHES = {
.(, , ), .(, , ),
.(, , ), .(, , ),
.(, , ), .(, , ),
.(, , ), .(, , ),
}
RED = .(, , )
State = {
open = ,
railOpen = ,
colors = {
m1 = { a = THEMES.m1.a, b = THEMES.m1.b },
tp = { a = THEMES.tp.a, b = THEMES.tp.b },
crate = { a = THEMES.crate.a, b = THEMES.crate.b },
},
}
CONNS = {}
(c) CONNS[#CONNS + ] = c; c
(class, props, parent)
o = .(class)
props
k, v (props)
k ~= o[k] = v
parent o.Parent = parent
o
CORNERS, OUTLINES, HALOS = {}, {}, {}
(o, r)
px = .(r , STYLE.round)
ui = (, { CornerRadius = .(, px) }, o)
CORNERS[#CORNERS + ] = { ui = ui, r = r }
ui
(o, thick)
base = thick
s = (, {
Color = BASE.black,
Thickness = base * STYLE.outline,
Transparency = ,
ApplyStrokeMode = .ApplyStrokeMode.Border,
}, o)
OUTLINES[#OUTLINES + ] = { s = s, base = base }
s
(o, color, thick, trans)
base = thick
s = (, {
Color = color,
Thickness = base * STYLE.outline,
Transparency = trans ,
ApplyStrokeMode = .ApplyStrokeMode.Border,
}, o)
OUTLINES[#OUTLINES + ] = { s = s, base = base }
s
(o, l, t, r, b)
(, {
PaddingLeft = .(, l ),
PaddingTop = .(, t ),
PaddingRight = .(, r ),
PaddingBottom = .(, b ),
}, o)
(o, t, props, style, dir)
tr = TweenService:(o, TweenInfo.((t ) * MOTION, style .EasingStyle.Quad, dir .EasingDirection.Out), props)
tr:()
tr
(o, a, b, rot)
(, { Rotation = rot , Color = ColorSequence.(a, b) }, o)
(parent, color, radius, alpha)
g = (, {
AnchorPoint = .(, ),
Position = .(, ),
Size = .(, ),
BackgroundColor3 = color,
BackgroundTransparency = alpha ,
BorderSizePixel = ,
Active = ,
}, parent)
(, { CornerRadius = .(, radius ) }, g)
HALOS[#HALOS + ] = g
g
(page)
n = (page:() ) +
page:(, n)
n
(m)
m
m:() m:()
()
c = Workspace:()
s = c c:()
s s:()
()
c = Workspace:()
s = c c:()
s s:()
applyBackground, applyScan
()
.( - * STYLE.opacity, , )
(layer)
layer
_, c (layer:()) c:()
(layer)
pitch, size = ,
alpha = ()
base = .(, , )
lit = .(, , )
rows = .(WINDOW_H / pitch)
cols = .(WINDOW_W / pitch) +
r = , rows -
shift = (r % == ) pitch *
c = , cols -
s = (, {
Position = .(c * pitch + shift, r * pitch),
Size = .(size, size),
BackgroundColor3 = base,
BackgroundTransparency = alpha,
BorderSizePixel = ,
Active = ,
}, layer)
(, { CornerRadius = .(, size / ) }, s)
(, { Rotation = , Color = ColorSequence.(lit, base) }, s)
dot = (, {
Position = .(, ),
Size = .(size * , size * ),
BackgroundColor3 = .(, , ),
BackgroundTransparency = .(alpha + , , ),
BorderSizePixel = ,
Active = ,
}, s)
(, { CornerRadius = .(, size / ) }, dot)
(layer)
step =
alpha = .(() + , , )
col = .(, , )
x = step, WINDOW_W, step
(, {
Position = .(x, ), Size = .(, , , ),
BackgroundColor3 = col, BackgroundTransparency = alpha, BorderSizePixel = , Active = ,
}, layer)
y = step, WINDOW_H, step
(, {
Position = .(, y), Size = .(, , , ),
BackgroundColor3 = col, BackgroundTransparency = alpha, BorderSizePixel = , Active = ,
}, layer)
(parent, baseAlpha)
holder = (, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
Active = ,
}, parent)
trans = .(baseAlpha, , )
y = , WINDOW_H - ,
(, {
Position = .(, y),
Size = .(, , , ),
BackgroundColor3 = .(, , ),
BackgroundTransparency = trans,
BorderSizePixel = ,
Active = ,
}, holder)
holder
(layer)
(layer, .( - * STYLE.opacity, , ))
vig = (, {
Size = .(, ),
BackgroundColor3 = .(, , ),
BorderSizePixel = ,
Active = ,
}, layer)
(, {
Rotation = ,
Color = ColorSequence.(.(, , )),
Transparency = NumberSequence.({ , , }),
}, vig)
(layer, src)
content = IMG.(src)
content
fit = .ScaleType.Crop
STYLE.imgFit == fit = .ScaleType.Stretch
STYLE.imgFit == fit = .ScaleType.Fit
(, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
Image = content,
ImageTransparency = .(STYLE.imgTrans, , ),
ScaleType = fit,
Active = ,
}, layer)
applyBackground = (win, kind)
layer = win.bgLayer
(layer layer.Parent)
kind = kind
src = STYLE.image[win.key]
sig = kind .. .. .(, STYLE.opacity) .. .. src
.. .. .(, STYLE.imgTrans) .. .. (STYLE.imgFit)
win.bgSig == sig
win.bgSig = sig
win.bgKind = kind
(layer)
kind == (layer)
kind == (layer)
kind == (layer)
src ~= (layer, src)
applyScan = (win, on)
layer = win.scanLayer
(layer layer.Parent)
sig = on
win.scanSig == sig
win.scanSig = sig
(layer)
on (layer, )
gui = (, {
Name = ,
ResetOnSpawn = ,
IgnoreGuiInset = ,
DisplayOrder = ,
ZIndexBehavior = .ZIndexBehavior.Sibling,
})
ok, hui = (gethui)
ok hui gui.Parent = hui gui.Parent = LP:()
WIN_CLASS =
ok = (() c = .(); c:() )
ok WIN_CLASS =
toast = (, {
AnchorPoint = .(, ),
Position = .(, , , -),
Size = .(, ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
Active = ,
Visible = ,
}, gui)
(toast, )
toastEdge = (toast, )
toastEdge.Transparency =
toastStroke = (toast, THEMES.m1.a, , )
toastLabel = (, {
BackgroundTransparency = ,
Size = .(, ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextTransparency = ,
Text = ,
}, toast)
toastToken =
(text, color)
toastToken +=
t = toastToken
toastLabel.Text = text
toastLabel.TextColor3 = color BASE.text
toastStroke.Color = color BASE.text
toast.Visible =
(toast, , { BackgroundTransparency = })
(toastEdge, , { Transparency = })
(toastStroke, , { Transparency = })
(toastLabel, , { TextTransparency = })
.(, ()
toastToken ~= t toast.Parent
(toast, , { BackgroundTransparency = })
(toastEdge, , { Transparency = })
(toastStroke, , { Transparency = })
(toastLabel, , { TextTransparency = })
.(, ()
toastToken == t toast.Parent toast.Visible =
)
)
CONFIG_FILE = .. (.PlaceId) ..
()
ok, err = (()
writefile ()
out = {}
k, v (State.colors)
out[k] = { .(v.a.R * ), .(v.a.G * ), .(v.a.B * ) }
out.settings = {
bg = STYLE.bg,
opacity = STYLE.opacity,
scan = STYLE.scan,
glow = STYLE.glow,
round = STYLE.round,
outline = STYLE.outline,
scale = STYLE.scale,
image = STYLE.image,
imgTrans = STYLE.imgTrans,
imgFit = STYLE.imgFit,
}
(CONFIG_FILE, HttpService:(out))
)
ok, err
saveToken =
(deferred)
saveToken +=
deferred ()
t = saveToken
.(, ()
t == saveToken ()
)
()
ok, data = (()
(isfile (CONFIG_FILE))
HttpService:((CONFIG_FILE))
)
ok (data) ~=
k, v (data)
State.colors[k] (v) == v[]
c = .(v[], v[], v[])
State.colors[k].a = c
State.colors[k].b = c:(.(, , ), )
s = data.settings
(s) ~=
(s.bg) ==
k, v (s.bg)
STYLE.bg[k] (v) == STYLE.bg[k] = v
STYLE.opacity = .((s.opacity) STYLE.opacity, , )
STYLE.glow = s.glow ~=
STYLE.scan = s.scan ~=
STYLE.round = .((s.round) STYLE.round, , )
STYLE.outline = .((s.outline) STYLE.outline, , )
STYLE.scale = .((s.scale) STYLE.scale, , )
(s.image) ==
k, v (s.image)
STYLE.image[k] ~= (v) == STYLE.image[k] = v
STYLE.imgTrans = .((s.imgTrans) STYLE.imgTrans, , )
s.imgFit == s.imgFit == s.imgFit == STYLE.imgFit = s.imgFit
()
WINDOWS = {}
TAB_HOOKS = {}
MODULE_ORDER = { , , }
(key)
i, k (MODULE_ORDER)
k == key (i - (#MODULE_ORDER + ) * ) *
(win, key)
vp = Workspace.CurrentCamera.ViewportSize
off = (key)
cy = .(vp.Y * + off, WINDOW_H * + , vp.Y - WINDOW_H * - )
x = vp.X - RAIL_OFF - RAIL_W - - WINDOW_W
x < x =
y = cy - WINDOW_H *
win.frame.Visible =
win.frame.Position = .(x + , y)
win.frame:() win.frame.GroupTransparency =
win.scale
win.scale.Scale = STYLE.scale *
(win.scale, , { Scale = STYLE.scale }, .EasingStyle.Quint)
win.tweenIn = (win.frame, , { Position = .(x, y) }, .EasingStyle.Quint, .EasingDirection.Out)
win.frame:() (win.frame, , { GroupTransparency = })
(win)
win.frame.Visible
win.tweenIn win.tweenIn:(); win.tweenIn =
p = win.frame.Position
(win.frame, , { Position = .(p.X.Scale, p.X.Offset + , p.Y.Scale, p.Y.Offset) }, .EasingStyle.Quad, .EasingDirection.In)
win.frame:()
t = (win.frame, , { GroupTransparency = }, .EasingStyle.Quad, .EasingDirection.In)
t.Completed:(()
State.open ~= win.key win.frame.Visible =
)
win.frame.Visible =
()
State.open WINDOWS[State.open] (WINDOWS[State.open])
State.open =
(key)
State.open == key
State.open WINDOWS[State.open] (WINDOWS[State.open])
State.open = key
(WINDOWS[key], key)
(key, title, icon)
win = { key = key, onAccent = {}, pages = {} }
frame = (WIN_CLASS, {
Position = .(-, ),
Size = .(WINDOW_W, WINDOW_H),
BackgroundColor3 = BASE.bg,
BorderSizePixel = ,
ClipsDescendants = ,
Visible = ,
}, gui)
(frame, )
(frame, )
win.frame = frame
win.scale = (, { Scale = STYLE.scale }, frame)
bgLayer = (, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
Active = ,
}, frame)
win.bgLayer = bgLayer
topHalo = (, {
Position = .(, -),
Size = .(, , , ),
BackgroundColor3 = State.colors[key].a,
BackgroundTransparency = ,
BorderSizePixel = ,
}, frame)
topBar = (, { Size = .(, , , ), BackgroundColor3 = .(, , ), BorderSizePixel = }, frame)
topGrad = (topBar, State.colors[key].a, State.colors[key].b, )
header = (, { Size = .(WINDOW_W, ), BackgroundTransparency = }, frame)
dragArea = (, { Size = .(, -, , ), BackgroundTransparency = }, header)
iconLbl = (, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = State.colors[key].a,
Text = icon,
}, header)
(, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_TITLE,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = title,
}, header)
closeBtn = (, {
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, ),
BackgroundColor3 = BASE.panel,
Text = ,
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.dim,
AutoButtonColor = ,
}, header)
(closeBtn, )
(closeBtn, )
closeBtn.MouseButton1Click:(() () )
closeBtn.MouseEnter:(() closeBtn.TextColor3 = RED )
closeBtn.MouseLeave:(() closeBtn.TextColor3 = BASE.dim )
tabBar = (, {
Position = .(, ),
Size = .(, -, , ),
BackgroundTransparency = ,
BorderSizePixel = ,
ScrollBarThickness = ,
CanvasSize = .(, , , ),
AutomaticCanvasSize = .AutomaticSize.X,
ScrollingDirection = .ScrollingDirection.X,
ClipsDescendants = ,
}, frame)
(, {
FillDirection = .FillDirection.Horizontal,
Padding = .(, ),
SortOrder = .SortOrder.LayoutOrder,
VerticalAlignment = .VerticalAlignment.Center,
}, tabBar)
()
viewW = tabBar.AbsoluteSize.X
canvasW = tabBar.AbsoluteCanvasSize.X
canvasW <= canvasW = tabBar.CanvasSize.X.Offset
.(canvasW - viewW, )
(UIS.InputChanged:((input)
input.UserInputType ~= .UserInputType.MouseWheel
frame.Visible
maxX = ()
maxX <=
ap, as = tabBar.AbsolutePosition, tabBar.AbsoluteSize
m = UIS:()
m.X < ap.X m.X > ap.X + as.X m.Y < ap.Y - m.Y > ap.Y + as.Y +
x = .(tabBar.CanvasPosition.X - input.Position.Z * , , maxX)
tabBar.CanvasPosition = .(x, )
))
body = (, {
Position = .(, ),
Size = .(, , , -),
BackgroundTransparency = ,
ClipsDescendants = ,
}, frame)
footer = (, { Position = .(, , , -), Size = .(, , , ), BackgroundTransparency = }, frame)
win.footer = footer
statusDot = (, {
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, ),
BackgroundColor3 = State.colors[key].a,
BorderSizePixel = ,
}, footer)
(statusDot, )
statusLbl = (, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.dim,
TextXAlignment = .TextXAlignment.Left,
Text = ,
}, footer)
win:(text)
statusLbl.Text = text
statusLbl.TextColor3 = BASE.text
.(, ()
statusLbl.Parent statusLbl.Text == text statusLbl.TextColor3 = BASE.dim
)
win:(name)
idx = #self.pages +
btn = (, {
Size = .(TAB_W, ),
BackgroundTransparency = ,
Text = name,
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.dim,
TextTruncate = .TextTruncate.AtEnd,
TextXAlignment = .TextXAlignment.Center,
AutoButtonColor = ,
LayoutOrder = idx,
}, tabBar)
underline = (, {
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, , , ),
BackgroundColor3 = .(, , ),
BorderSizePixel = ,
Visible = ,
}, btn)
ug = (underline, State.colors[self.key].a, State.colors[self.key].b, )
holder = (WIN_CLASS, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
ClipsDescendants = ,
Visible = ,
}, body)
page = (, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
ScrollBarThickness = ,
ScrollBarImageColor3 = BASE.line,
AutomaticCanvasSize = .AutomaticSize.Y,
CanvasSize = .(, , , ),
ScrollingDirection = .ScrollingDirection.Y,
Visible = ,
}, holder)
(page, , , , )
(, { Padding = .(, ), SortOrder = .SortOrder.LayoutOrder }, page)
self.pages[idx] = { btn = btn, page = page, holder = holder, underline = underline, ugrad = ug }
btn.MouseButton1Click:(() self:(idx) )
btn.MouseEnter:(()
self.activeTab ~= idx (btn, , { TextColor3 = BASE.text })
)
btn.MouseLeave:(()
self.activeTab ~= idx (btn, , { TextColor3 = BASE.dim })
)
idx == self:()
page
win:(idx)
self.activeTab == idx
self.activeTab = idx
_, f (TAB_HOOKS) (f, self.key, idx)
i, t (self.pages)
on = (i == idx)
t.btn.TextColor3 = on State.colors[self.key].a BASE.dim
t.underline.Visible = on
on
t.holder.Visible =
t.page.Visible =
t.holder:()
t.holder.GroupTransparency =
(t.holder, , { GroupTransparency = }, .EasingStyle.Quad)
t.holder.Position = .(, )
(t.holder, , { Position = .(, ) }, .EasingStyle.Quint)
t.holder.Visible
t.holder:()
h = t.holder
tr = (h, , { GroupTransparency = }, .EasingStyle.Quad)
tr.Completed:(()
self.activeTab ~= i
h.Visible =
t.page.Visible =
)
t.holder.Visible =
t.page.Visible =
.(()
t = self.pages[idx]
t t.btn.Parent
maxX = ()
maxX <=
viewW = tabBar.AbsoluteSize.X
cur = tabBar.CanvasPosition.X
x = t.btn.AbsolutePosition.X - tabBar.AbsolutePosition.X + cur
w = t.btn.AbsoluteSize.X
target = cur
x - < cur
target = x -
x + w + > cur + viewW
target = x + w + - viewW
target = .(target, , maxX)
.(target - cur) >
(tabBar, , { CanvasPosition = .(target, ) }, .EasingStyle.Quint)
)
win:()
a = State.colors[self.key].a
b = State.colors[self.key].b
_, fn (self.onAccent) (fn, a)
topGrad.Color = ColorSequence.(a, b)
topHalo.BackgroundColor3 = a
iconLbl.TextColor3 = a
statusDot.BackgroundColor3 = a
_, t (self.pages)
t.ugrad.Color = ColorSequence.(a, b)
dragging, dragTouch = ,
dragStartMouse, dragStartPos = .(), .()
dragArea.InputBegan:((input)
input.UserInputType ~= .UserInputType.MouseButton1 input.UserInputType ~= .UserInputType.Touch
win.tweenIn (() win.tweenIn:() ); win.tweenIn =
dragging =
dragTouch = (input.UserInputType == .UserInputType.Touch)
dragStartMouse = dragTouch input.Position UIS:()
dragStartPos = .(frame.AbsolutePosition.X, frame.AbsolutePosition.Y)
)
(UIS.InputChanged:((input)
dragging
input.UserInputType ~= .UserInputType.MouseMovement input.UserInputType ~= .UserInputType.Touch
m = (dragTouch input.UserInputType == .UserInputType.Touch) input.Position UIS:()
sc = win.scale win.scale.Scale
dx = (m.X - dragStartMouse.X) / sc
dy = (m.Y - dragStartMouse.Y) / sc
vp = Workspace.CurrentCamera.ViewportSize
frame.Position = .(
.(dragStartPos.X + dx, -(WINDOW_W - ), vp.X - ),
.(dragStartPos.Y + dy, -, vp.Y - )
)
))
(UIS.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
dragging =
))
scanLayer = (, {
Size = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
Active = ,
}, frame)
win.scanLayer = scanLayer
(applyBackground, win, STYLE.bg[key] )
(applyScan, win, STYLE.scan)
WINDOWS[key] = win
win
W = {}
RGB = {}
W.(win, page, text)
f = (, { Size = .(, , , ), BackgroundTransparency = , LayoutOrder = (page) }, page)
l = (, {
BackgroundTransparency = ,
Size = .(, ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = State.colors[win.key].a,
TextXAlignment = .TextXAlignment.Left,
Text = .(text),
}, f)
.(win.onAccent, (a) l.TextColor3 = a )
f
W.(win, page, text)
row = (, {
Size = .(, , , ),
AutomaticSize = .AutomaticSize.Y,
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
LayoutOrder = (page),
}, page)
(row, )
(row, )
(row, , , , )
(, {
BackgroundTransparency = ,
Size = .(, , , ),
AutomaticSize = .AutomaticSize.Y,
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
TextYAlignment = .TextYAlignment.Top,
TextWrapped = ,
LineHeight = ,
Text = text,
}, row)
row
W.(win, page, opts)
row = (, {
Size = .(, , , ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
LayoutOrder = (page),
}, page)
(row, )
(row, )
(, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = opts.text,
}, row)
pillHalo = (row, State.colors[win.key].a, , )
pillHalo.Position = .(, -, , )
pillHalo.Size = .(, )
pill = (, {
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, ),
BackgroundColor3 = BASE.line,
BorderSizePixel = ,
}, row)
(pill, )
(pill, )
pillGrad = (pill, State.colors[win.key].a, State.colors[win.key].b, )
knob = (, {
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, ),
BackgroundColor3 = .(, , ),
BorderSizePixel = ,
}, pill)
(knob, )
(knob, )
value = opts.value
(animate)
pill.BackgroundTransparency = value
pill.BackgroundColor3 = value .(, , ) BASE.line
pillGrad.Enabled = value
pillHalo.Visible = value STYLE.glow
pos = value .(, , , ) .(, , , )
animate
(knob, , { Position = pos }, .EasingStyle.Quint)
knob.Position = pos
()
.(win.onAccent, ()
pillGrad.Color = ColorSequence.(State.colors[win.key].a, State.colors[win.key].b)
pillHalo.BackgroundColor3 = State.colors[win.key].a
)
hit = (, { BackgroundTransparency = , Text = , Size = .(, ) }, row)
hit.MouseButton1Click:(()
value = value
()
opts.callback opts.(value)
)
{ frame = row, get = () value , set = (v) value = v; () }
W.dragState =
W.(win, page, opts)
row = (, {
Size = .(, , , ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
LayoutOrder = (page),
}, page)
(row, )
(row, )
(, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = opts.text,
}, row)
valLbl = (, {
BackgroundTransparency = ,
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = State.colors[win.key].a,
TextXAlignment = .TextXAlignment.Right,
Text = ,
}, row)
trackHalo = (row, State.colors[win.key].a, , )
trackHalo.Position = .(, , , )
trackHalo.Size = .(, -, , )
bar = (, {
Position = .(, ),
Size = .(, -, , ),
BackgroundColor3 = BASE.line,
BorderSizePixel = ,
}, row)
(bar, )
fill = (, { Size = .(, ), BackgroundColor3 = .(, , ), BorderSizePixel = }, bar)
(fill, )
fillGrad = (fill, State.colors[win.key].a, State.colors[win.key].b, )
knob = (, {
AnchorPoint = .(, ),
Position = .(, , , ),
Size = .(, ),
BackgroundColor3 = .(, , ),
BorderSizePixel = ,
}, bar)
(knob, )
(knob, )
min, max = opts.min, opts.max
step = opts.step
value = opts.value min
(raw)
step <= raw
min + .((raw - min) / step + ) * step
(v)
step < .(, v)
(.(v + ))
(v, fire)
value = .((v), min, max)
pct = (value - min) / .(max - min, )
fill.Size = .(pct, , , )
knob.Position = .(pct, , , )
valLbl.Text = (value) .. (opts.suffix )
fire opts.callback opts.(value)
.(win.onAccent, ()
valLbl.TextColor3 = State.colors[win.key].a
trackHalo.BackgroundColor3 = State.colors[win.key].a
fillGrad.Color = ColorSequence.(State.colors[win.key].a, State.colors[win.key].b)
)
hit = (, {
BackgroundTransparency = ,
Text = ,
Position = .(, ),
Size = .(, , , ),
}, row)
hit.InputBegan:((input)
input.UserInputType ~= .UserInputType.MouseButton1 input.UserInputType ~= .UserInputType.Touch
(knob, , { Size = .(, ) }, .EasingStyle.Quint)
(px)
w = .(bar.AbsoluteSize.X, )
pct = .((px - bar.AbsolutePosition.X) / w, , )
(min + pct * (max - min), )
(input.Position.X)
W.dragState = update
)
(UIS.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
knob.Parent (knob, , { Size = .(, ) }, .EasingStyle.Quint)
))
(value, )
{ get = () value , set = (v) (v, ) }
W.(win, page, opts)
row = (, {
Size = .(, , , ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
LayoutOrder = (page),
}, page)
(row, )
(row, )
(, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = opts.text,
}, row)
tb = (, {
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(, -, , ),
BackgroundColor3 = BASE.bg2,
BorderSizePixel = ,
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = opts.value ,
PlaceholderText = opts.placeholder ,
PlaceholderColor3 = BASE.dim,
ClearTextOnFocus = ,
}, row)
(tb, )
(tb, )
(tb, , , , )
s = (tb, BASE.line, , )
tb.Focused:(()
s.Color = State.colors[win.key].a
s.Transparency =
)
tb.FocusLost:(()
s.Color = BASE.line
s.Transparency =
opts.callback opts.(tb.Text)
)
tb
W.(win, page, opts)
row = (, {
Size = .(, , , ),
BackgroundTransparency = ,
LayoutOrder = (page),
}, page)
glow = (row, State.colors[win.key].a, , )
glow.Size = .(, , , )
b = (, {
Size = .(, , , ),
BackgroundColor3 = BASE.panel,
BorderSizePixel = ,
Font = FONT_MONO,
TextSize = ,
TextColor3 = State.colors[win.key].a,
Text = opts.text,
AutoButtonColor = ,
}, row)
(b, )
(b, )
edge = (b, State.colors[win.key].a, , )
edge2
opts.extraOutline
edge2 = (b, State.colors[win.key].a, , )
b.MouseEnter:(()
(b, , { BackgroundColor3 = BASE.panel2 }, .EasingStyle.Quint)
(edge, , { Transparency = })
edge2 (edge2, , { Transparency = })
(glow, , { BackgroundTransparency = })
)
b.MouseLeave:(()
(b, , { BackgroundColor3 = BASE.panel }, .EasingStyle.Quint)
(edge, , { Transparency = })
edge2 (edge2, , { Transparency = })
(glow, , { BackgroundTransparency = })
)
.(win.onAccent, ()
b.TextColor3 = State.colors[win.key].a
edge.Color = State.colors[win.key].a
edge2 edge2.Color = State.colors[win.key].a
glow.BackgroundColor3 = State.colors[win.key].a
)
opts.callback b.MouseButton1Click:(opts.callback)
b
W.(win, page, opts)
i =
idx, v (opts.options)
v == opts.value i = idx
b = W.(win, page, { text = opts.text .. .. opts.options[i] })
b.MouseButton1Click:(()
i = i % #opts.options +
v = opts.options[i]
b.Text = opts.text .. .. v
opts.callback opts.(v)
)
b
W.(win, page)
row = (, {
Size = .(, , , ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
LayoutOrder = (page),
}, page)
(row, )
(row, )
(, {
BackgroundTransparency = ,
Position = .(, ),
Size = .(, -, , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = ,
}, row)
sw =
holder = (, {
AnchorPoint = .(, ),
Position = .(, -, , ),
Size = .(#SWATCHES * (sw + ) - , sw),
BackgroundTransparency = ,
}, row)
i, c (SWATCHES)
s = (, {
Position = .((i - ) * (sw + ), ),
Size = .(sw, sw),
BackgroundColor3 = c,
BorderSizePixel = ,
Text = ,
AutoButtonColor = ,
}, holder)
(s, )
(s, )
s.MouseButton1Click:(() (win, c) )
rs = W.(win, page, { text = , min = , max = , step = , value = .(State.colors[win.key].a.R * ),
callback = (v) (win, v, , ) })
gs = W.(win, page, { text = , min = , max = , step = , value = .(State.colors[win.key].a.G * ),
callback = (v) (win, , v, ) })
bs = W.(win, page, { text = , min = , max = , step = , value = .(State.colors[win.key].a.B * ),
callback = (v) (win, , , v) })
RGB[win.key] = { rs = rs, gs = gs, bs = bs }
(win, color)
State.colors[win.key].a = color
State.colors[win.key].b = color:(.(, , ), )
win:()
ref = RGB[win.key]
ref
ref.rs.(.(color.R * ))
ref.gs.(.(color.G * ))
ref.bs.(.(color.B * ))
()
()
(win, r, g, b)
c = State.colors[win.key].a
(win, .(
r r / c.R,
g g / c.G,
b b / c.B
))
W.(win, page)
W.(win, page, )
W.(win, page, {
text = ,
callback = ()
ok, err = ()
ok
(, State.colors[win.key].a)
win:( .. CONFIG_FILE)
( .. (err), RED)
,
})
W.(win, page, {
text = ,
callback = ()
(win, THEMES[win.key].a)
()
(, THEMES[win.key].a)
,
})
W.(win, page, opts)
H = opts.height
rowH = opts.rowH
poolSize = opts.pool
frame = (, {
Size = .(, , , H),
BackgroundColor3 = BASE.bg2,
BackgroundTransparency = ,
BorderSizePixel = ,
ClipsDescendants = ,
LayoutOrder = (page),
}, page)
(frame, )
(frame, )
sf = (, {
Size = .(, -, , -),
Position = .(, ),
BackgroundTransparency = ,
BorderSizePixel = ,
ScrollBarThickness = ,
ScrollBarImageColor3 = BASE.line,
CanvasSize = .(, , , ),
ScrollingDirection = .ScrollingDirection.Y,
}, frame)
items, rows, bound = {}, {}, {}
render
render = ()
top = sf.CanvasPosition.Y
first = .(, .(top / rowH))
i = , poolSize
idx = first + i -
item = items[idx]
row = rows[i]
bound[i] = item
item
row.Visible =
row.Position = .(, (idx - ) * rowH)
row.Text = opts.(item)
row.TextColor3 = BASE.text
opts.paint opts.(item, row)
row.Visible =
i = , poolSize
row = (, {
Size = .(, -, , rowH - ),
BackgroundColor3 = BASE.panel,
BackgroundTransparency = ,
BorderSizePixel = ,
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.text,
TextXAlignment = .TextXAlignment.Left,
Text = ,
AutoButtonColor = ,
Visible = ,
}, sf)
(row, )
(row, )
(row, , , , )
rows[i] = row
row.MouseEnter:(()
bound[i]
(row, , { BackgroundColor3 = BASE.panel2, BackgroundTransparency = }, .EasingStyle.Quint)
)
row.MouseLeave:(()
bound[i]
(row, , { BackgroundColor3 = BASE.panel, BackgroundTransparency = }, .EasingStyle.Quint)
opts.paint opts.(bound[i], row)
)
row.MouseButton1Click:(()
item = bound[i]
item opts.onRow opts.(item)
)
api = { frame = frame, sf = sf }
api.(list)
items = list
sf.CanvasSize = .(, , , .(#items * rowH, ))
sf.CanvasPosition.Y ~= sf.CanvasPosition = .(, )
()
api.() ()
(sf:():(render))
(sf:():(render))
api
doUnload
applyAllStyles
()
_, e (CORNERS)
e.ui.Parent e.ui.CornerRadius = .(, .(e.r, STYLE.round))
()
_, e (OUTLINES)
e.s.Parent e.s.Thickness = .(e.base * STYLE.outline, )
()
_, h (HALOS)
h.Parent h.Visible = STYLE.glow
()
_, w (WINDOWS)
w.scale w.scale.Scale = STYLE.scale
()
_, w (WINDOWS) (w, STYLE.scan)
()
k, w (WINDOWS) (w, STYLE.bg[k] )
applyAllStyles = ()
(); (); (); (); (); ()
W.(win, page)
W.(win, page, )
W.(win, page, {
text = ,
options = BG_KINDS,
value = STYLE.bg[win.key] ,
callback = (v)
STYLE.bg[win.key] = v
(win, v)
()
,
})
bgToken =
W.(win, page, {
text = , min = , max = , step = , value = STYLE.opacity,
callback = (v)
STYLE.opacity = v
bgToken +=
t = bgToken
.(, ()
t == bgToken ()
)
()
,
})
W.(win, page, {
text = , value = STYLE.scan,
callback = (v) STYLE.scan = v; (); () ,
})
W.(win, page, )
W.(win, page, )
imgList
imgCount
()
imgList
files = IMG.()
imgList.(files)
imgCount
imgCount.Text = IMG.() (#files .. )
imgInput = W.(win, page, { text = , placeholder = })
W.(win, page, {
text = ,
callback = ()
raw = .(imgInput.Text , , )
raw = .(raw, , )
raw == (, RED)
src = raw
.(raw, )
ok, path = IMG.(raw)
ok ( .. (path), RED)
src = path
(.(raw, , , ) .(raw, , , ))
okf, exists = (() (raw) )
okf exists ( .. raw, RED)
IMG.(src) (, RED)
STYLE.image[win.key] = src
(win, STYLE.bg[win.key] )
()
()
(, State.colors[win.key].a)
,
})
imgList = W.(win, page, {
height = ,
rowH = ,
text = (e) e.name ,
onRow = (e)
IMG.(e.path) ( .. e.name, RED)
STYLE.image[win.key] = e.path
(win, STYLE.bg[win.key] )
()
( .. e.name, State.colors[win.key].a)
,
})
imgCount = (, {
BackgroundTransparency = ,
Size = .(, , , ),
Font = FONT_MONO,
TextSize = ,
TextColor3 = BASE.dim,
TextXAlignment = .TextXAlignment.Left,
Text = ,
LayoutOrder = (page),
}, page)
W.(win, page, {
text = ,
callback = ()
IMG.()
()
( .. IMG.dir, BASE.dim)
,
})
W.(win, page, {
text = ,
callback = ()
STYLE.image[win.key] =
(win, STYLE.bg[win.key] )
()
(, BASE.dim)
,
})
W.(win, page, {
text = ,
options = { , , },
value = STYLE.imgFit,
callback = (v)
STYLE.imgFit = v
()
()
,
})
W.(win, page, {
text = , min = , max = , step = , value = STYLE.imgTrans,
callback = (v)
STYLE.imgTrans = v
()
()
,
})
()
W.(win, page, )
W.(win, page, {
text = ,
options = { , , },
value = (STYLE.round <= ) ((STYLE.round >= ) ),
callback = (v)
STYLE.round = (v == ) ((v == ) )
(); ()
,
})
W.(win, page, {
text = , min = , max = , step = , value = STYLE.outline,
callback = (v) STYLE.outline = v; applyOutlines(); saveThemes(true) end,
})
W.toggle(win, page, {
text = "Button glow", value = STYLE.glow,
callback = function(v) STYLE.glow = v; applyGlows(); saveThemes(true) end,
})
W.slider(win, page, {
text = "Window scale", min = 0.8, max = 1.4, step = 0.02, value = STYLE.scale,
callback = function(v) STYLE.scale = v; applyScales(); saveThemes(true) end,
})
W.section(win, page, "Accent")
W.button(win, page, {
text = "Copy accent to all windows",
callback = function()
local c = State.colors[win.key].a
for _, st in pairs(State.colors) do
st.a = c
st.b = c:Lerp(Color3.new(1, 1, 1), 0.35)
end
for _, w in pairs(WINDOWS) do w:refreshAccent() end
refreshRailColors()
saveThemes(false)
notify("accent copied to every window", c)
end,
})
W.section(win, page, "Danger")
W.button(win, page, {
text = "Wipe saved settings",
callback = function()
local ok = pcall(function()
if delfile and isfile and isfile(CONFIG_FILE) then delfile(CONFIG_FILE) end
end)
notify(ok and "saved settings wiped" or "file api blocked", RED)
end,
})
W.button(win, page, {
text = "UNLOAD UI · full teardown",
callback = function() if doUnload then doUnload() end end,
})
end
end
track(UIS.InputChanged:Connect(function(input)
if not W.dragState then return end
if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then return end
W.dragState(input.Position.X)
end))
track(UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
W.dragState = nil
end
end))
-- ---------------------------------------------------------------- picking
local pendingPick = nil
local pendingDest = nil
local function armPick(cb, label)
pendingPick = cb
notify(label or "click a player", State.colors.m1.a)
end
local function aimPoint()
local cam = Workspace.CurrentCamera
if not cam then return nil end
if Mouse.Target and Mouse.Hit then return Mouse.Hit.Position end
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Exclude or Enum.RaycastFilterType.Blacklist
rp.FilterDescendantsInstances = { LP.Character }
local ray = cam:ViewportPointToRay(Mouse.X, Mouse.Y)
local hit = Workspace:Raycast(ray.Origin, ray.Direction * 5000, rp)
return hit and hit.Position or (ray.Origin + ray.Direction * 400)
end
-- ---------------------------------------------------------------- M1 engine
local SkillRemote = ReplicatedStorage.NetworkComm.SkillService.StartSkilll_Method
local DamageRemote = ReplicatedStorage.NetworkComm.CombatService.DamageCharacter_Method
local M1 = {
slots = {},
moves = { list = {}, enabled = false, rate = 30, idx = 0, acc = 0, inflight = 0, at = 0 },
npcs = {}, npcsAt = 0,
}
local function newSlot(cfg)
return {
target = nil, box = nil, enabled = false,
rate = cfg.rate or 30,
size = cfg.size or 160,
alpha = cfg.alpha or 0.75,
color = cfg.color or Color3.fromRGB(255, 60, 60),
skill = cfg.skill or "Punch",
origin = cfg.origin or "Target (ground)",
argMode = cfg.argMode or "none",
useDamage = cfg.useDamage ~= false,
idx = 0, acc = 0, inflight = 0, at = 0,
}
end
M1.slots.punch = newSlot({ skill = "Punch", rate = 50, size = 200, argMode = "1,1" })
M1.slots.burst = newSlot({ skill = "AwakenedLimitlessReversalBurst", rate = 40, size = 140, argMode = "none", color = Color3.fromRGB(255, 120, 60) })
M1.slots.nuke = newSlot({ skill = "AwakenedLimitlessHollowNuke", rate = 60, size = 90, argMode = "targets", color = Color3.fromRGB(255, 170, 60) })
local function scanNPCs()
local now = os.clock()
if now - M1.npcsAt < 0.15 and #M1.npcs > 0 then return M1.npcs end
M1.npcsAt = now
local out = {}
local f = npcsFolder()
if f then
for _, m in ipairs(f:GetChildren()) do
if m:IsA("Model") and rootOf(m) then out[#out + 1] = m end
end
end
M1.npcs = out
return out
end
-- ground point under the target, exactly like the capture (y ~ 0.0001)
local function castOrigin(slot, myChar, targets, target)
local myRoot = rootOf(myChar)
if not myRoot then return nil end
local base = myRoot.Position
local point = base
if slot.origin ~= "Self" and slot.origin ~= "Self (ground)" then
local pick = target
if not pick then
local bestD
for _, t in ipairs(targets) do
local r = rootOf(t)
if r then
local d = (r.Position - base).Magnitude
if not bestD or d < bestD then pick, bestD = t, d end
end
end
end
local pr = pick and rootOf(pick)
if pr then point = pr.Position end
end
if slot.origin == "Target (ground)" or slot.origin == "Self (ground)" then
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Exclude or Enum.RaycastFilterType.Blacklist
local filter = { myChar }
if target then filter[#filter + 1] = target end
rp.FilterDescendantsInstances = filter
local hit = Workspace:Raycast(point + Vector3.new(0, 3, 0), Vector3.new(0, -150, 0), rp)
if hit then point = hit.Position end
end
return point
end
local function ensureBox(slot, myChar, id)
local r = rootOf(myChar)
if not r then return end
if not slot.box or not slot.box.Parent then
slot.box = inst("Part", {
Name = "OJBS_Box_" .. tostring(id),
Anchored = true, CanCollide = false, CanQuery = false, CanTouch = false, CastShadow = false,
Material = Enum.Material.ForceField,
Parent = Workspace,
})
end
slot.box.Size = Vector3.new(slot.size, slot.size, slot.size)
slot.box.Transparency = slot.alpha
slot.box.Color = slot.color
slot.box.CFrame = CFrame.new(r.Position)
end
local function collectTargets(slot)
local out = {}
local myChar = slot.target
if not myChar or not myChar.Parent then return out end
local r = rootOf(myChar)
if not r then return out end
local pos, h = r.Position, slot.size / 2
for _, m in ipairs(scanNPCs()) do
local nr = rootOf(m)
if nr then
local d = nr.Position - pos
if math.abs(d.X) <= h and math.abs(d.Y) <= h and math.abs(d.Z) <= h then
out[#out + 1] = m
end
end
end
return out
end
local function bump(group)
local now = os.clock()
if group.inflight >= MAX_INFLIGHT then
if now - (group.at or 0) > 2 then
group.inflight = 0
else
return false
end
end
group.inflight += 1
group.at = now
return true
end
-- StartSkill + DamageCharacter, exactly the two calls in the captures:
-- StartSkill(skill, caster, groundPos, {}, [targets])
-- DamageCharacter({npc}, true, {WindowID, LocalCharacter, SkillID})
local function fire(group, myChar, skillId, origin, targets, target, argMode, useDamage)
if not bump(group) then return end
task.spawn(function()
pcall(function()
if argMode == "targets" then
SkillRemote:InvokeServer(skillId, myChar, origin, {}, targets)
elseif argMode == "1,1" then
SkillRemote:InvokeServer(skillId, myChar, origin, {}, 1, 1)
else
SkillRemote:InvokeServer(skillId, myChar, origin, {})
end
if useDamage and target then
DamageRemote:InvokeServer({ target }, true, {
WindowID = myChar.Name .. "_" .. skillId,
LocalCharacter = myChar,
SkillID = skillId,
})
end
end)
group.inflight -= 1
end)
end
local function runSlot(slot, dt)
if not slot.enabled then
if slot.box then slot.box:Destroy(); slot.box = nil end
return
end
local myChar = slot.target
if not myChar or not myChar.Parent then
if slot.box then slot.box:Destroy(); slot.box = nil end
return
end
ensureBox(slot, myChar, slot.skill)
slot.acc += dt * slot.rate
local n = math.floor(slot.acc)
if n <= 0 then return end
slot.acc -= n
if n > MAX_TICK then n = MAX_TICK end
local targets = collectTargets(slot)
if #targets == 0 then return end
for _ = 1, n do
slot.idx = slot.idx + 1
local t = targets[(slot.idx - 1) % #targets + 1]
local origin = castOrigin(slot, myChar, targets, t)
if origin then
fire(slot, myChar, slot.skill, origin, targets, t, slot.argMode, slot.useDamage)
end
end
end
local function runMoves(dt)
if not M1.moves.enabled then return end
local base = M1.slots.punch
local myChar = base.target
if not myChar or not myChar.Parent then return end
M1.moves.acc += dt * M1.moves.rate
local n = math.floor(M1.moves.acc)
if n <= 0 then return end
M1.moves.acc -= n
if n > MAX_TICK then n = MAX_TICK end
local targets = collectTargets(base)
if #targets == 0 then return end
local active = {}
for _, mv in ipairs(M1.moves.list) do
if mv.on then active[#active + 1] = mv end
end
if #active == 0 then return end
for _ = 1, n do
M1.moves.idx = M1.moves.idx + 1
local mv = active[(M1.moves.idx - 1) % #active + 1]
local t = targets[(M1.moves.idx - 1) % #targets + 1]
local origin = castOrigin(base, myChar, targets, t)
if origin then
fire(M1.moves, myChar, "AwakenedLimitless" .. mv.name, origin, targets, t, "targets", true)
end
end
end
-- ---------------------------------------------------------------- teleport engine
local TP = { root = nil, orig = nil, name = nil, dest = nil, running = false, interval = 0.1, acc = 0, onStatus = nil }
local function tpSay(msg, color)
if TP.onStatus then TP.onStatus(msg) end
notify(msg, color or State.colors.tp.a)
end
local function tpLock(model)
local r = rootOf(model)
if not r then tpSay("no root on " .. model.Name, RED) return end
TP.root, TP.orig, TP.name = r, r.CFrame, model.Name
tpSay("locked " .. model.Name)
end
local function tpSetDest(p)
TP.dest = p
TP.running = true
TP.acc = 0
TP.lift = nil
tpSay("teleport running")
end
local function tpToggle()
if not TP.dest then tpSay("pick a spot first", RED) return end
TP.running = not TP.running
tpSay(TP.running and "teleport on" or "teleport paused")
end
local function tpReset()
TP.running = false
if TP.root and TP.root.Parent and TP.orig then
TP.root.CFrame = TP.orig
TP.root.AssemblyLinearVelocity = Vector3.zero
TP.root.AssemblyAngularVelocity = Vector3.zero
end
TP.root, TP.orig, TP.name, TP.dest = nil, nil, nil, nil
tpSay("reset")
end
-- ---------------------------------------------------------------- M1 window
local m1Win = makeWindow("m1", "M1 Box", USE_EMOJI and "👊" or "M1")
local pGuide = m1Win:addTab("Guide")
local pMain = m1Win:addTab("Main")
local pBurst = m1Win:addTab("Red Burst")
local pNuke = m1Win:addTab("Hollow Nuke")
local pMoves = m1Win:addTab("Moves")
local pListen = m1Win:addTab("Listener")
local pLib = m1Win:addTab("Library")
local pVisual = m1Win:addTab("Visuals")
local pColorM = m1Win:addTab("Settings")
m1Win:selectTab(2)
local ARG_MODES = { "targets", "none", "1,1" }
do
W.section(m1Win, pGuide, "Quick start")
W.note(m1Win, pGuide, "Open the page you want in this tab, press the Click torso button, then click your own torso. Turn True Six Eyes off first — its hitbox sits over your body and swallows the click. After that, set the box size and hits per second, then flip Enable on.")
W.section(m1Win, pGuide, "1 · Pick a target")
W.note(m1Win, pGuide, "Press Click torso · select player, then click the torso of whoever you want to hit. Every slot keeps its own target, so Punch, Red Burst and Hollow Nuke each need their own pick.")
W.section(m1Win, pGuide, "2 · Set size and rate")
W.note(m1Win, pGuide, "Box size is how wide the hitbox following the target is. Casts / sec is how often the move fires. Start low, raise it until hits stop landing, then drop back one step.")
W.section(m1Win, pGuide, "3 · Turn it on")
W.note(m1Win, pGuide, "Enable switches that slot on. STOP on the footer turns every slot off and removes the remote hook, so the game behaves normally again.")
W.section(m1Win, pGuide, "Tips")
W.note(m1Win, pGuide, "Hollow Nuke hits the hardest of the three by a wide margin, but it is slow — without cooldown reduction you spend most of the fight waiting on it.")
W.note(m1Win, pGuide, "More moves: open Listener, turn on Listen for new moves, cast a skill once in game, pick it from the captures and press Add to library. It stays saved per place.")
end
local function buildSlotControls(page, slot, opts)
opts = opts or {}
W.section(m1Win, page, "Target")
local selBtn
selBtn = W.button(m1Win, page, {
text = slot.target and ("Target: " .. slot.target.Name) or "Click torso · select player",
extraOutline = true,
callback = function()
armPick(function(m)
slot.target = m
selBtn.Text = "Target: " .. m.Name
m1Win:status("locked " .. m.Name)
end, "click a player")
end,
})
W.section(m1Win, page, "Firing")
slot.ui = W.toggle(m1Win, page, {
text = "Enable",
value = slot.enabled,
callback = function(v)
slot.enabled = v
if not v and slot.box then slot.box:Destroy(); slot.box = nil end
end,
})
W.slider(m1Win, page, { text = "Casts / sec", min = 1, max = 100000, step = 1, value = slot.rate, callback = function(v) slot.rate = v end })
W.slider(m1Win, page, { text = "Box size", min = 1, max = 750, step = 1, value = slot.size, callback = function(v) slot.size = v end })
W.cycle(m1Win, page, {
text = "Origin",
options = { "Target (ground)", "Target", "Self (ground)", "Self" },
value = slot.origin,
callback = function(v) slot.origin = v end,
})
W.cycle(m1Win, page, {
text = "StartSkill args",
options = ARG_MODES,
value = slot.argMode,
callback = function(v) slot.argMode = v end,
})
W.toggle(m1Win, page, {
text = "DamageCharacter",
value = slot.useDamage,
callback = function(v) slot.useDamage = v end,
})
if opts.skillInput then
W.input(m1Win, page, {
text = "Skill ID",
value = slot.skill,
callback = function(v) if v ~= "" then slot.skill = v end end,
})
end
end
buildSlotControls(pMain, M1.slots.punch)
buildSlotControls(pBurst, M1.slots.burst, { skillInput = true })
buildSlotControls(pNuke, M1.slots.nuke, { skillInput = true })
W.section(m1Win, pMoves, "Add move")
local moveNameBox = W.input(m1Win, pMoves, { text = "Move", placeholder = "HollowNuke" })
local movesHolder = inst("Frame", {
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
LayoutOrder = 900,
}, pMoves)
inst("UIListLayout", { Padding = UDim.new(0, 6), SortOrder = Enum.SortOrder.LayoutOrder }, movesHolder)
local moveRows = {}
local function refreshMoves()
for _, r in ipairs(moveRows) do r:Destroy() end
moveRows = {}
for i, mv in ipairs(M1.moves.list) do
local row = inst("TextButton", {
Size = UDim2.new(1, 0, 0, 32),
BackgroundColor3 = mv.on and BASE.panel2 or BASE.panel,
BackgroundTransparency = mv.on and 0.05 or 0.35,
BorderSizePixel = 0,
Font = FONT_MONO,
TextSize = 12,
TextColor3 = mv.on and State.colors.m1.a or BASE.text,
TextXAlignment = Enum.TextXAlignment.Left,
Text = " " .. mv.name,
AutoButtonColor = false,
LayoutOrder = i,
}, movesHolder)
corner(row, 6)
outline(row, 1)
row.MouseEnter:Connect(function()
tw(row, 0.12, { BackgroundTransparency = mv.on and 0.0 or 0.12 }, Enum.EasingStyle.Quint)
end)
row.MouseLeave:Connect(function()
tw(row, 0.16, { BackgroundTransparency = mv.on and 0.05 or 0.35 }, Enum.EasingStyle.Quint)
end)
row.MouseButton1Click:Connect(function()
mv.on = not mv.on
refreshMoves()
end)
local x = inst("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -6, 0.5, 0),
Size = UDim2.fromOffset(24, 22),
BackgroundTransparency = 1,
Text = "✕",
Font = FONT_MONO,
TextSize = 12,
TextColor3 = BASE.dim,
AutoButtonColor = false,
}, row)
x.MouseButton1Click:Connect(function()
table.remove(M1.moves.list, i)
refreshMoves()
end)
moveRows[#moveRows + 1] = row
end
end
W.button(m1Win, pMoves, {
text = "Add move",
callback = function()
local n = moveNameBox.Text
if n == "" then return end
if string.sub(n, 1, 19) == "AwakenedLimitless" then n = string.sub(n, 20) end
table.insert(M1.moves.list, { name = n, on = true })
moveNameBox.Text = ""
refreshMoves()
end,
})
W.section(m1Win, pMoves, "Firing")
M1.movesUI = W.toggle(m1Win, pMoves, { text = "Enable moves", value = false, callback = function(v) M1.moves.enabled = v end })
W.slider(m1Win, pMoves, { text = "Casts / sec", min = 1, max = 100000, step = 1, value = 30, callback = function(v) M1.moves.rate = v end })
refreshMoves()
-- ---------------------------------------------------------------- move library
local LIB_FILE = "OJBS_LIB.json"
local LIB = { entries = {}, byId = {} }
local Capture = { list = {}, byId = {} }
local function libReadAll()
local ok, data = pcall(function()
if not (isfile and isfile(LIB_FILE)) then return {} end
local d = HttpService:JSONDecode(readfile(LIB_FILE))
if type(d) == "table" then return d end
return {}
end)
if ok and type(data) == "table" then return data end
return {}
end
local libToken = 0
local function libSave(deferred)
libToken += 1
local t = libToken
local function commit()
local data = libReadAll()
local out = {}
for _, e in ipairs(LIB.entries) do
out[#out + 1] = {
id = e.id,
name = e.name,
rate = e.slot.rate,
size = e.slot.size,
origin = e.slot.origin,
argMode = e.slot.argMode,
useDamage = e.slot.useDamage,
}
end
data[tostring(game.PlaceId)] = out
pcall(function() writefile(LIB_FILE, HttpService:JSONEncode(data)) end)
end
if not deferred then return commit() end
task.delay(0.8, function()
if t == libToken then commit() end
end)
end
local libList, libCount, libSearch
local captureList, capCount
local openDetail, closeDetail
local refreshCapture
local function libFilter()
local q = string.lower((libSearch and libSearch.Text) or "")
local out = {}
for _, e in ipairs(LIB.entries) do
if q == "" or string.find(e.search, q, 1, true) then out[#out + 1] = e end
end
return out
end
local function libRefresh()
if libList then libList.set(libFilter()) end
if libCount then libCount.Text = #LIB.entries .. " saved" end
end
local function addToLib(id, name)
local e = LIB.byId[id]
if e then
notify("already in library", RED)
return e
end
local slot = newSlot({
skill = id,
rate = 30,
size = 140,
argMode = "targets",
useDamage = true,
color = Color3.fromRGB(255, 196, 92),
})
e = { id = id, name = name or id, slot = slot, search = string.lower((name or id) .. " " .. id) }
LIB.entries[#LIB.entries + 1] = e
LIB.byId[id] = e
M1.slots["lib:" .. id] = slot
libSave(true)
libRefresh()
notify("saved " .. e.name, State.colors.m1.a)
return e
end
local function removeFromLib(e)
if e.slot.box then pcall(function() e.slot.box:Destroy() end) end
M1.slots["lib:" .. e.id] = nil
LIB.byId[e.id] = nil
for i, x in ipairs(LIB.entries) do
if x == e then
table.remove(LIB.entries, i)
break
end
end
for _, c in ipairs(Capture.list) do
if c.id == e.id then c.saved = false end
end
libSave(true)
libRefresh()
refreshCapture()
end
local function loadLibrary()
local data = libReadAll()
local list = data[tostring(game.PlaceId)]
if type(list) ~= "table" then return end
for _, rec in ipairs(list) do
if type(rec) == "table" and type(rec.id) == "string" and not LIB.byId[rec.id] then
local slot = newSlot({
skill = rec.id,
rate = tonumber(rec.rate) or 30,
size = tonumber(rec.size) or 140,
origin = rec.origin,
argMode = rec.argMode or "targets",
useDamage = rec.useDamage ~= false,
color = Color3.fromRGB(255, 196, 92),
})
local name = rec.name or rec.id
local e = { id = rec.id, name = name, slot = slot, search = string.lower(name .. " " .. rec.id) }
LIB.entries[#LIB.entries + 1] = e
LIB.byId[rec.id] = e
M1.slots["lib:" .. rec.id] = slot
end
end
end
loadLibrary()
-- ---------------------------------------------------------------- skill listener
local EXCLUDED = {
Punch = true,
AwakenedLimitlessReversalBurst = true,
AwakenedLimitlessHollowNuke = true,
}
local ListenOn = false
local hookState = { live = false, installed = false, err = nil, prev = nil }
local CRATE = {
list = {}, byId = {}, selected = nil,
listening = false, running = false,
sent = 0, inflight = 0, at = 0,
names = {},
}
local crateHook = { installed = false, err = nil, prev = nil }
local NAME_CACHE = {}
local function skillDisplayName(id)
if NAME_CACHE[id] then return NAME_CACHE[id] end
local name
local cfgs = ReplicatedStorage:FindFirstChild("Configs")
if cfgs then
local seen = {}
local function walk(t, depth)
if name or type(t) ~= "table" or depth > 4 or seen[t] then return end
seen[t] = true
for k, v in pairs(t) do
if type(v) == "table" then
local nm = v.Name or v.DisplayName or v.SkillName
if type(nm) == "string" and (k == id or v.ID == id or v.Id == id or v.SkillID == id or v.SkillId == id) then
name = nm
return
end
walk(v, depth + 1)
if name then return end
end
end
end
for _, child in ipairs(cfgs:GetChildren()) do
if child:IsA("ModuleScript") then
local ok, data = pcall(require, child)
if ok and type(data) == "table" then
local hit = data[id]
if type(hit) == "table" then
local nm = hit.Name or hit.DisplayName or hit.SkillName
if type(nm) == "string" then name = nm end
end
if not name then walk(data, 0) end
end
if name then break end
end
end
end
if not name then
name = id
for _, pre in ipairs({ "AwakenedLimitless", "Awakened", "Limitless" }) do
if string.sub(name, 1, #pre) == pre then
name = string.sub(name, #pre + 1)
break
end
end
end
NAME_CACHE[id] = name
return name
end
refreshCapture = function()
if captureList then captureList.set(Capture.list) end
if capCount then capCount.Text = #Capture.list .. " captured" end
end
local function pushCapture(id)
if Capture.byId[id] then return end
local e = { id = id, name = id, saved = LIB.byId[id] ~= nil }
Capture.byId[id] = e
Capture.list[#Capture.list + 1] = e
refreshCapture()
task.defer(function()
e.name = skillDisplayName(id)
refreshCapture()
notify("caught " .. e.name, State.colors.m1.a)
end)
end
local function recordSkill(id)
if not ListenOn then return end
if type(id) ~= "string" or id == "" or EXCLUDED[id] then return end
pushCapture(id)
end
local function installHook()
if hookState.installed then return hookState.live end
if not (hookmetamethod and getrawmetatable and getnamecallmethod) then
hookState.err = "executor has no hookmetamethod"
return false
end
local ok, err = pcall(function()
local prev
prev = hookmetamethod(game, "__namecall", function(self, ...)
if ListenOn and self == SkillRemote then
local okm, method = pcall(getnamecallmethod)
if okm and method == "InvokeServer" then
local ours = false
if checkcaller then
local cok, c = pcall(checkcaller)
ours = cok and c or false
end
if not ours then
local a1 = ...
if type(a1) == "string" then task.defer(recordSkill, a1) end
end
end
end
return prev(self, ...)
end)
hookState.prev = prev
end)
if not ok then
hookState.err = tostring(err)
return false
end
hookState.installed = true
hookState.live = true
return true
end
-- restores the original __namecall so nothing intercepts remotes while the listener is off
local function uninstallHook()
if not hookState.installed then return true end
local prev = hookState.prev
local restored = false
if prev then
restored = pcall(hookmetamethod, game, "__namecall", prev)
if not restored and restorefunction then
restored = pcall(restorefunction, prev)
end
end
if not restored then
hookState.err = "executor could not restore __namecall"
return false
end
hookState.prev = nil
hookState.installed = false
hookState.live = false
hookState.err = nil
return true
end
-- ---------------------------------------------------------------- listener tab
W.section(m1Win, pListen, "Capture")
local listenHint = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "fired skills land here · punch, burst and nuke are ignored",
LayoutOrder = nextOrder(pListen),
}, pListen)
local listenToggle
listenToggle = W.toggle(m1Win, pListen, {
text = "Listen for new moves",
value = false,
callback = function(v)
ListenOn = v
if v then CRATE.stopListen() end
if not v then
if uninstallHook() then
notify("listener off · hook removed", BASE.dim)
else
notify("listener off · " .. tostring(hookState.err), RED)
end
return
end
if installHook() then
notify("listening", State.colors.m1.a)
m1Win:status("hook installed")
else
ListenOn = false
listenToggle.set(false)
notify("hook failed: " .. tostring(hookState.err), RED)
m1Win:status("hook failed")
end
end,
})
capCount = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "0 captured",
LayoutOrder = nextOrder(pListen),
}, pListen)
captureList = W.vlist(m1Win, pListen, {
height = 168,
rowH = 30,
text = function(e)
return (e.saved and "✓ " or "+ ") .. e.name .. " · " .. e.id
end,
paint = function(e, row)
row.TextColor3 = e.saved and State.colors.m1.b or BASE.text
end,
onRow = function(e)
local entry = LIB.byId[e.id]
if entry then
openDetail(entry)
return
end
addToLib(e.id, e.name)
e.saved = true
refreshCapture()
end,
})
W.button(m1Win, pListen, {
text = "Save all captured",
callback = function()
local n = 0
for _, e in ipairs(Capture.list) do
if not LIB.byId[e.id] then
addToLib(e.id, e.name)
e.saved = true
n += 1
end
end
refreshCapture()
notify(n > 0 and ("saved " .. n .. " moves") or "nothing new to save", n > 0 and State.colors.m1.a or RED)
end,
})
W.button(m1Win, pListen, {
text = "Clear captures",
callback = function()
Capture.list, Capture.byId = {}, {}
refreshCapture()
end,
})
local function panicStop()
for _, slot in pairs(M1.slots) do
slot.enabled = false
slot.acc, slot.idx = 0, 0
if slot.box then pcall(function() slot.box:Destroy() end); slot.box = nil end
if slot.ui and slot.ui.frame and slot.ui.frame.Parent then pcall(slot.ui.set, false) end
end
M1.moves.enabled = false
CRATE.stop()
M1.moves.acc, M1.moves.idx = 0, 0
if M1.movesUI and M1.movesUI.frame and M1.movesUI.frame.Parent then pcall(M1.movesUI.set, false) end
ListenOn = false
if listenToggle and listenToggle.frame.Parent then pcall(listenToggle.set, false) end
local unhooked = uninstallHook()
if not CRATE.stopListen() then unhooked = false end
m1Win:status(unhooked and "stopped · hook removed" or "stopped · hook stuck")
notify(unhooked and "all stopped · remotes untouched" or ("stopped · " .. tostring(hookState.err)), RED)
end
local stopBtn = inst("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -14, 0.5, 0),
Size = UDim2.fromOffset(58, 20),
BackgroundColor3 = BASE.panel,
BorderSizePixel = 0,
Font = FONT_MONO,
TextSize = 10,
TextColor3 = RED,
Text = "STOP",
AutoButtonColor = false,
}, m1Win.footer)
corner(stopBtn, 6)
outline(stopBtn, 1.1)
stopBtn.MouseEnter:Connect(function() tw(stopBtn, 0.12, { BackgroundColor3 = BASE.panel2 }) end)
stopBtn.MouseLeave:Connect(function() tw(stopBtn, 0.14, { BackgroundColor3 = BASE.panel }) end)
stopBtn.MouseButton1Click:Connect(function() panicStop() end)
-- ---------------------------------------------------------------- library tab
W.section(m1Win, pLib, "Saved moves")
libSearch = W.input(m1Win, pLib, { text = "Find", placeholder = "name or skill id" })
libCount = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = #LIB.entries .. " saved",
LayoutOrder = nextOrder(pLib),
}, pLib)
libList = W.vlist(m1Win, pLib, {
height = 300,
rowH = 30,
text = function(e) return e.name .. " · " .. e.id end,
onRow = function(e) openDetail(e) end,
})
local libSearchToken = 0
libSearch:GetPropertyChangedSignal("Text"):Connect(function()
libSearchToken += 1
local t = libSearchToken
task.delay(0.1, function()
if t == libSearchToken then libRefresh() end
end)
end)
libRefresh()
local libOverlay = inst(WIN_CLASS, {
Position = UDim2.fromOffset(0, 84),
Size = UDim2.new(1, 0, 1, -114),
BackgroundColor3 = BASE.bg,
BorderSizePixel = 0,
ClipsDescendants = true,
Visible = false,
ZIndex = 8,
}, m1Win.frame)
local ovHead = inst("Frame", {
Size = UDim2.new(1, 0, 0, 46),
BackgroundColor3 = BASE.bg2,
BorderSizePixel = 0,
ZIndex = 9,
}, libOverlay)
local ovLine = inst("Frame", { Position = UDim2.new(0, 0, 1, -1), Size = UDim2.new(1, 0, 0, 1), BackgroundColor3 = BASE.line, BorderSizePixel = 0, ZIndex = 10 }, ovHead)
local detailTitle = inst("TextLabel", {
BackgroundTransparency = 1,
Position = UDim2.fromOffset(16, 5),
Size = UDim2.new(1, -70, 0, 18),
Font = FONT_MONO,
TextSize = 14,
TextColor3 = BASE.text,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "",
ZIndex = 10,
}, ovHead)
local detailSub = inst("TextLabel", {
BackgroundTransparency = 1,
Position = UDim2.fromOffset(16, 24),
Size = UDim2.new(1, -70, 0, 14),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "",
ZIndex = 10,
}, ovHead)
local ovClose = inst("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -12, 0.5, 0),
Size = UDim2.fromOffset(26, 26),
BackgroundColor3 = BASE.panel,
BorderSizePixel = 0,
Text = "✕",
Font = FONT_MONO,
TextSize = 13,
TextColor3 = BASE.dim,
AutoButtonColor = false,
ZIndex = 10,
}, ovHead)
corner(ovClose, 8)
outline(ovClose, 1.2)
ovClose.MouseEnter:Connect(function() tw(ovClose, 0.12, { TextColor3 = RED }) end)
ovClose.MouseLeave:Connect(function() tw(ovClose, 0.14, { TextColor3 = BASE.dim }) end)
local detailPage = inst("ScrollingFrame", {
Position = UDim2.fromOffset(0, 46),
Size = UDim2.new(1, 0, 1, -46),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ScrollBarThickness = 3,
ScrollBarImageColor3 = BASE.line,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0),
ScrollingDirection = Enum.ScrollingDirection.Y,
ZIndex = 8,
}, libOverlay)
pad(detailPage, 12, 6, 12, 12)
inst("UIListLayout", { Padding = UDim.new(0, 8), SortOrder = Enum.SortOrder.LayoutOrder }, detailPage)
local detailAccentBase = nil
local function clearPage(page)
for _, c in ipairs(page:GetChildren()) do
if not c:IsA("UIListLayout") and not c:IsA("UIPadding") then c:Destroy() end
end
page:SetAttribute("order", 0)
end
closeDetail = function()
if not libOverlay.Visible then return end
if libOverlay:IsA("CanvasGroup") then
local t = tw(libOverlay, 0.14, { GroupTransparency = 1 }, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
t.Completed:Connect(function() libOverlay.Visible = false end)
else
libOverlay.Visible = false
end
end
openDetail = function(e)
clearPage(detailPage)
if detailAccentBase then
for i = #m1Win.onAccent, detailAccentBase + 1, -1 do
m1Win.onAccent[i] = nil
end
end
detailAccentBase = #m1Win.onAccent
detailTitle.Text = e.name
detailSub.Text = e.id
buildSlotControls(detailPage, e.slot)
W.section(m1Win, detailPage, "Manage")
W.button(m1Win, detailPage, {
text = "Delete from library",
callback = function()
removeFromLib(e)
closeDetail()
notify("deleted " .. e.name, RED)
end,
})
detailPage.CanvasPosition = Vector2.new(0, 0)
libOverlay.Visible = true
if libOverlay:IsA("CanvasGroup") then
libOverlay.GroupTransparency = 1
tw(libOverlay, 0.18, { GroupTransparency = 0 }, Enum.EasingStyle.Quad)
end
end
ovClose.MouseButton1Click:Connect(function() closeDetail() end)
local libIdx
for i, t in ipairs(m1Win.pages) do
if t.page == pLib then libIdx = i end
end
TAB_HOOKS[#TAB_HOOKS + 1] = function(key, idx)
if key == "m1" and idx ~= libIdx and libOverlay.Visible then closeDetail() end
end
refreshCapture()
W.slider(m1Win, pVisual, {
text = "Motion smoothing",
min = 0.6, max = 2.4, step = 0.05, value = MOTION,
callback = function(v) MOTION = v end,
})
W.slider(m1Win, pVisual, {
text = "Box transparency",
min = 0, max = 1, step = 0.05, value = 0.75,
callback = function(v)
for _, s in pairs(M1.slots) do s.alpha = v end
end,
})
W.section(m1Win, pVisual, "Box color")
local boxSwatches = inst("Frame", {
Size = UDim2.new(1, 0, 0, 26),
BackgroundTransparency = 1,
LayoutOrder = nextOrder(pVisual),
}, pVisual)
for i, c in ipairs(SWATCHES) do
local s = inst("TextButton", {
Position = UDim2.fromOffset((i - 1) * 26, 0),
Size = UDim2.fromOffset(22, 22),
BackgroundColor3 = c,
BorderSizePixel = 0,
Text = "",
AutoButtonColor = false,
}, boxSwatches)
corner(s, 5)
outline(s, 1.2)
s.MouseButton1Click:Connect(function()
for _, slot in pairs(M1.slots) do
slot.color = c
if slot.box then slot.box.Color = c end
end
end)
end
W.section(m1Win, pColorM, "Theme")
W.colorPicker(m1Win, pColorM)
W.themeSaver(m1Win, pColorM)
W.styleTab(m1Win, pColorM)
-- ---------------------------------------------------------------- teleport window
local tpWin = makeWindow("tp", "Teleport", USE_EMOJI and "🌀" or "TP")
local pGuideT = tpWin:addTab("Guide")
local pCtrl = tpWin:addTab("Control")
local pColorT = tpWin:addTab("Settings")
tpWin:selectTab(2)
TP.onStatus = function(msg) tpWin:status(msg) end
do
W.section(tpWin, pGuideT, "Quick start")
W.note(tpWin, pGuideT, "Open the page you need in this tab, press the Click torso button, then click your own torso. Turn True Six Eyes off first — its hitbox sits over your body and blocks the click. After that, click the spot you want to stand on, set the interval and start it.")
W.section(tpWin, pGuideT, "1 · Pick who moves")
W.note(tpWin, pGuideT, "Press Click torso · select player, then click your character's torso. If the click keeps missing, type the model name into Model and use Lock by name instead.")
W.section(tpWin, pGuideT, "2 · Pick the spot")
W.note(tpWin, pGuideT, "Press Click ground spot, then click the floor where you want to stand. The teleport starts on that click and re-applies the spot every Interval, so you stay there.")
W.section(tpWin, pGuideT, "3 · Keep it steady")
W.note(tpWin, pGuideT, "Each tick the script looks straight down under the spot and rests your feet on the closest ground, so you stop floating above it. H pauses and resumes, J stops and puts you back where you locked in.")
W.section(tpWin, pGuideT, "Tips")
W.note(tpWin, pGuideT, "Be careful where you aim: hitboxes and invisible walls can sit in front of the floor you are clicking, and the spot lands on whatever the click actually hits — sometimes a wall or a roof instead of the ground.")
W.note(tpWin, pGuideT, "If a spot still misbehaves, aim at a flat, clearly visible patch of floor a step away from props and ledges.")
end
W.section(tpWin, pCtrl, "Target")
local tpNameBox = W.input(tpWin, pCtrl, { text = "Model", placeholder = "Name_Server" })
W.button(tpWin, pCtrl, {
text = "Lock by name",
callback = function()
local f = playersFolder()
local m = f and f:FindFirstChild(tpNameBox.Text)
if not m then notify("no model named " .. tpNameBox.Text, RED) return end
tpLock(m)
end,
})
W.button(tpWin, pCtrl, {
text = "Click torso · select player",
extraOutline = true,
callback = function() armPick(tpLock, "click a player") end,
})
W.section(tpWin, pCtrl, "Destination")
W.button(tpWin, pCtrl, {
text = "Click ground spot",
callback = function()
if not TP.root then notify("lock a target first", RED) return end
pendingDest = function(p) tpSetDest(p) end
notify("click a spot", State.colors.tp.a)
end,
})
W.button(tpWin, pCtrl, { text = "Start / stop (H)", callback = tpToggle })
W.button(tpWin, pCtrl, { text = "Reset position (J)", callback = tpReset })
W.slider(tpWin, pCtrl, {
text = "Interval (s)", min = 0.02, max = 0.5, step = 0.01, value = 0.1,
callback = function(v) TP.interval = v end,
})
W.section(tpWin, pColorT, "Theme")
W.colorPicker(tpWin, pColorT)
W.themeSaver(tpWin, pColorT)
W.styleTab(tpWin, pColorT)
-- ---------------------------------------------------------------- crate opener
do
local NAMES = CRATE.names
function CRATE.remoteRef()
local comm = ReplicatedStorage:FindFirstChild("NetworkComm")
local inv = comm and comm:FindFirstChild("InventoryService")
return inv and inv:FindFirstChild("UseItem_Method")
end
function CRATE.nameFor(id)
local hit = NAMES[id]
if hit then return hit end
local cfgs = ReplicatedStorage:FindFirstChild("Configs")
local mod = cfgs and cfgs:FindFirstChild("ItemConfig")
if mod then
local ok, data = pcall(require, mod)
if ok and type(data) == "table" then
local src = type(data.Items) == "table" and data.Items or data
local d = src[id]
if type(d) == "table" then
local n = d.Name or d.DisplayName or d.Title
if type(n) == "string" and n ~= "" then
NAMES[id] = n
return n
end
end
local seen = 0
for _, v in pairs(src) do
seen += 1
if seen > 4000 then break end
if type(v) == "table" then
local rid = v.Id or v.ID or v.Key or v.ItemId
if rid == id then
local n = v.Name or v.DisplayName or v.Title
if type(n) == "string" and n ~= "" then
NAMES[id] = n
return n
end
end
end
end
end
end
NAMES[id] = id
return id
end
function CRATE.refresh()
local out = {}
for _, e in ipairs(CRATE.list) do out[#out + 1] = e end
if CRATE.ui then CRATE.ui.set(out) end
if CRATE.uiCount then CRATE.uiCount.Text = #CRATE.list .. " captured" end
end
function CRATE.add(id)
if type(id) ~= "string" or id == "" then return end
if CRATE.byId[id] then
CRATE.refresh()
return
end
local e = { id = id, name = id, rate = 1, acc = 0 }
CRATE.byId[id] = e
CRATE.list[#CRATE.list + 1] = e
CRATE.refresh()
task.defer(function()
e.name = CRATE.nameFor(id)
CRATE.refresh()
notify("caught " .. e.name, State.colors.crate.a)
end)
end
function CRATE.useOnce(id)
if not id or id == "" then return false, "no id" end
local r = CRATE.remoteRef()
if not r then return false, "UseItem_Method missing" end
local ok, err = pcall(function()
if r:IsA("RemoteEvent") then
r:FireServer(id, "UseSuperMax")
else
r:InvokeServer(id, "UseSuperMax")
end
end)
if not ok then return false, tostring(err) end
CRATE.sent += 1
return true
end
function CRATE.stop()
CRATE.running = false
if CRATE.uiOpen then pcall(CRATE.uiOpen.set, false) end
end
function CRATE.tick(dt)
if CRATE.running and CRATE.selected then
local e = CRATE.selected
local step = 1 / math.clamp(e.rate or 1, 1, 10)
e.acc += dt
while e.acc >= step do
e.acc -= step
if CRATE.inflight >= 4 then
e.acc = 0
break
end
CRATE.inflight += 1
task.spawn(function()
local ok, err = CRATE.useOnce(e.id)
CRATE.inflight = math.max(CRATE.inflight - 1, 0)
if not ok then
CRATE.stop()
notify("crate use failed: " .. tostring(err), RED)
end
end)
end
end
local now = os.clock()
if now - CRATE.at >= 0.2 then
CRATE.at = now
if CRATE.onStat then CRATE.onStat(CRATE.sent, CRATE.inflight) end
end
end
function CRATE.installHook()
if crateHook.installed then return true end
if not (hookmetamethod and getnamecallmethod) then
crateHook.err = "executor has no hookmetamethod"
return false
end
local ok, err = pcall(function()
local prev
prev = hookmetamethod(game, "__namecall", function(self, ...)
if CRATE.listening and self == CRATE.remoteRef() then
local okm, method = pcall(getnamecallmethod)
if okm and (method == "InvokeServer" or method == "FireServer") then
local ours = false
if checkcaller then
local cok, c = pcall(checkcaller)
ours = cok and c or false
end
if not ours then
local a1 = ...
if type(a1) == "string" then task.defer(CRATE.add, a1) end
end
end
end
return prev(self, ...)
end)
crateHook.prev = prev
end)
if not ok then
crateHook.err = tostring(err)
return false
end
crateHook.installed = true
return true
end
function CRATE.uninstallHook()
if not crateHook.installed then return true end
local prev = crateHook.prev
local restored = false
if prev then
restored = pcall(hookmetamethod, game, "__namecall", prev)
if not restored and restorefunction then
restored = pcall(restorefunction, prev)
end
end
if not restored then
crateHook.err = "could not restore __namecall"
return false
end
crateHook.prev = nil
crateHook.installed = false
return true
end
function CRATE.stopListen()
if not CRATE.listening then return true end
CRATE.listening = false
if CRATE.uiListen then pcall(CRATE.uiListen.set, false) end
return CRATE.uninstallHook()
end
end
local crateWin = makeWindow("crate", "Crate Opener 928167.inc", USE_EMOJI and "📦" or "CR")
local pCrates = crateWin:addTab("Crates")
local pCrateGuide = crateWin:addTab("Guide")
local pCrateSet = crateWin:addTab("Settings")
crateWin:selectTab(1)
W.section(crateWin, pCrates, "Capture")
W.note(crateWin, pCrates, "Open a crate once in game and it lands here with its config id and name. Every fire sends UseSuperMax, so the only setting is uses per second.")
local crateListen
crateListen = W.toggle(crateWin, pCrates, {
text = "Listen for crate uses",
value = false,
callback = function(v)
if not v then
CRATE.listening = false
local ok = CRATE.uninstallHook()
notify(ok and "crate listener off · hook removed" or ("crate listener off · " .. tostring(crateHook.err)), ok and BASE.dim or RED)
return
end
if ListenOn then
ListenOn = false
if listenToggle then pcall(listenToggle.set, false) end
uninstallHook()
end
if CRATE.installHook() then
CRATE.listening = true
notify("listening for crate uses", State.colors.crate.a)
crateWin:status("hook installed")
else
crateListen.set(false)
notify("hook failed: " .. tostring(crateHook.err), RED)
crateWin:status("hook failed")
end
end,
})
CRATE.uiListen = crateListen
local crateCount = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "0 captured",
LayoutOrder = nextOrder(pCrates),
}, pCrates)
CRATE.uiCount = crateCount
local crateSelLbl = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 18),
Font = FONT_MONO,
TextSize = 12,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "Selected: none",
LayoutOrder = nextOrder(pCrates),
}, pCrates)
local crateRate
local crateOpenBtn
local crateList = W.vlist(crateWin, pCrates, {
height = 200,
rowH = 30,
text = function(e)
local r = math.floor((e.rate or 1) + 0.5)
return (CRATE.selected == e and "> " or "") .. e.name .. " · " .. e.id .. " · " .. r .. "/s"
end,
paint = function(e, row)
if CRATE.selected == e then
row.TextColor3 = State.colors.crate.b
elseif e.name == e.id then
row.TextColor3 = BASE.dim
end
end,
onRow = function(e)
CRATE.selected = e
crateSelLbl.Text = "Selected: " .. e.name .. " · " .. e.id
crateSelLbl.TextColor3 = State.colors.crate.a
crateRate.set(e.rate or 1)
crateList.refresh()
crateWin:status("selected " .. e.name)
end,
})
CRATE.ui = crateList
local crateStat = inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.new(1, 0, 0, 16),
Font = FONT_MONO,
TextSize = 11,
TextColor3 = BASE.dim,
TextXAlignment = Enum.TextXAlignment.Left,
Text = "sent 0 · inflight 0",
LayoutOrder = nextOrder(pCrates),
}, pCrates)
CRATE.onStat = function(sent, inflight)
crateStat.Text = "sent " .. sent .. " · inflight " .. inflight
end
crateOpenBtn = W.toggle(crateWin, pCrates, {
text = "Open selected",
value = false,
callback = function(v)
if v and not CRATE.selected then
notify("click a captured crate first", RED)
crateOpenBtn.set(false)
return
end
CRATE.running = v
if CRATE.selected then CRATE.selected.acc = 0 end
crateWin:status(v and ("opening " .. CRATE.selected.name) or "paused")
end,
})
CRATE.uiOpen = crateOpenBtn
crateRate = W.slider(crateWin, pCrates, {
text = "Uses / sec", min = 1, max = 10, step = 1, value = 1,
callback = function(v)
if CRATE.selected then
CRATE.selected.rate = v
crateList.refresh()
end
end,
})
W.button(crateWin, pCrates, {
text = "Use once now",
callback = function()
if not CRATE.selected then notify("click a captured crate first", RED) return end
local ok, err = CRATE.useOnce(CRATE.selected.id)
if ok then
crateWin:status("used " .. CRATE.selected.name)
else
notify("use failed: " .. tostring(err), RED)
end
end,
})
W.button(crateWin, pCrates, {
text = "Clear captures",
callback = function()
if CRATE.running then CRATE.stop() end
CRATE.list, CRATE.byId, CRATE.selected = {}, {}, nil
crateSelLbl.Text = "Selected: none"
crateSelLbl.TextColor3 = BASE.dim
CRATE.refresh()
crateWin:status("captures cleared")
end,
})
W.section(crateWin, pCrates, "Manual id")
local crateIdBox = W.input(crateWin, pCrates, { text = "Item id", placeholder = "074S558xB42q" })
W.button(crateWin, pCrates, {
text = "Add id",
callback = function()
local id = string.gsub(crateIdBox.Text or "", "%s", "")
if id == "" then notify("type an id first", RED) return end
CRATE.add(id)
crateWin:status("added " .. id)
end,
})
do
W.section(crateWin, pCrateGuide, "Quick start")
W.note(crateWin, pCrateGuide, "Turn Listen on, open one crate in game, then it appears in the list with its name and config id. Click it, set uses per second, turn Open on.")
W.section(crateWin, pCrateGuide, "1 · Listen")
W.note(crateWin, pCrateGuide, "On the Crates page, turn Listen for crate uses on. That puts one temporary hook on the UseItem remote; the M1 listener switches off while it runs, because only one hook can sit on the remote layer at a time.")
W.section(crateWin, pCrateGuide, "2 · Open the crate once")
W.note(crateWin, pCrateGuide, "Use the crate normally in game. The id it sends lands in the list, and the name is looked up from ReplicatedStorage.Configs.ItemConfig when the game exposes it.")
W.section(crateWin, pCrateGuide, "3 · Pick it")
W.note(crateWin, pCrateGuide, "Click the row. The line under the list shows the exact name and id that will be sent, and the row keeps its own uses per second.")
W.section(crateWin, pCrateGuide, "4 · Fire it")
W.note(crateWin, pCrateGuide, "Uses / sec starts at 1 and tops out at 10. Turn Open selected on to keep firing. Every request sends UseSuperMax, so there is no quantity to set.")
W.section(crateWin, pCrateGuide, "Tips")
W.note(crateWin, pCrateGuide, "If a crate never shows up, check that Listen is still on — turning the M1 listener on takes the hook back and switches the crate listener off.")
W.note(crateWin, pCrateGuide, "If a use fails the opener stops itself instead of hammering the remote, and the reason shows in the status bar.")
W.note(crateWin, pCrateGuide, "Already know the id? Paste it into Item id and press Add id to fire it without opening one first.")
end
W.section(crateWin, pCrateSet, "Theme")
W.colorPicker(crateWin, pCrateSet)
W.themeSaver(crateWin, pCrateSet)
W.styleTab(crateWin, pCrateSet)
CRATE.refresh()
-- ---------------------------------------------------------------- data tab
do
local function killLibSlots()
for _, e in ipairs(LIB.entries) do
if e.slot.box then pcall(function() e.slot.box:Destroy() end) end
end
LIB.entries, LIB.byId = {}, {}
for k in pairs(M1.slots) do
if string.sub(k, 1, 4) == "lib:" then M1.slots[k] = nil end
end
end
local function wipePlaceMoves()
killLibSlots()
libSave(false)
libRefresh()
refreshCapture()
end
local function wipeAllMoves()
killLibSlots()
pcall(function()
if delfile and isfile and isfile(LIB_FILE) then delfile(LIB_FILE) end
end)
libRefresh()
refreshCapture()
end
local function wipeSettings()
pcall(function()
if delfile and isfile and isfile(CONFIG_FILE) then delfile(CONFIG_FILE) end
end)
for k, v in pairs(STYLE_DEFAULT.bg) do STYLE.bg[k] = v end
for k, v in pairs(STYLE_DEFAULT.image) do STYLE.image[k] = v end
STYLE.opacity = STYLE_DEFAULT.opacity
STYLE.scan = STYLE_DEFAULT.scan
STYLE.glow = STYLE_DEFAULT.glow
STYLE.round = STYLE_DEFAULT.round
STYLE.outline = STYLE_DEFAULT.outline
STYLE.scale = STYLE_DEFAULT.scale
STYLE.imgTrans = STYLE_DEFAULT.imgTrans
STYLE.imgFit = STYLE_DEFAULT.imgFit
for k, st in pairs(State.colors) do
local d = THEMES[k]
if d then st.a, st.b = d.a, d.b end
end
for _, w in pairs(WINDOWS) do w:refreshAccent() end
refreshRailColors()
applyAllStyles()
end
local function wipeCaptures()
Capture.list, Capture.byId = {}, {}
refreshCapture()
end
for _, key in ipairs(MODULE_ORDER) do
local win = WINDOWS[key]
if win then
local page = win:addTab("Data")
W.section(win, page, "Saved data")
W.note(win, page, "Two files: " .. CONFIG_FILE .. " holds themes, style and backgrounds. " .. LIB_FILE .. " holds saved moves for every place.")
W.button(win, page, {
text = "Wipe this place's moves",
callback = function()
wipePlaceMoves()
notify("place moves wiped", RED)
end,
})
W.button(win, page, {
text = "Wipe all saved moves",
callback = function()
wipeAllMoves()
notify("all saved moves wiped", RED)
end,
})
W.button(win, page, {
text = "Wipe settings, theme, backgrounds",
callback = function()
wipeSettings()
notify("settings reset to defaults", RED)
end,
})
W.button(win, page, {
text = "Clear captures",
callback = function()
wipeCaptures()
notify("captures cleared", RED)
end,
})
W.section(win, page, "Everything")
W.button(win, page, {
text = "Stop everything · keep UI",
callback = function()
pcall(panicStop)
notify("all features stopped", RED)
end,
})
W.button(win, page, {
text = "WIPE ALL DATA · then unload UI",
callback = function()
wipeAllMoves()
wipeSettings()
wipeCaptures()
pcall(panicStop)
if doUnload then doUnload() end
end,
})
end
end
end
-- ---------------------------------------------------------------- rail
local railButtons = {}
local function makeRailButton(key, symbol, offsetY)
local shownX, hiddenX = -RAIL_OFF, 96
local shownC, hiddenC = shownX - RAIL_W * 0.5, hiddenX - RAIL_W * 0.5
local glow = inst("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(1, hiddenC, 0.5, offsetY),
Size = UDim2.fromOffset(RAIL_W + 18, RAIL_W + 18),
BackgroundColor3 = State.colors[key].a,
BackgroundTransparency = 0.88,
BorderSizePixel = 0,
Active = false,
}, gui)
corner(glow, 20)
HALOS[#HALOS + 1] = glow
local b = inst("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, hiddenX, 0.5, offsetY),
Size = UDim2.fromOffset(RAIL_W, RAIL_W),
BackgroundColor3 = BASE.panel,
BorderSizePixel = 0,
Text = "",
AutoButtonColor = false,
}, gui)
corner(b, 14)
outline(b, 1.6)
local tint = inst("Frame", { Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(1, 1, 1), BorderSizePixel = 0 }, b)
corner(tint, 14)
local grad = inst("UIGradient", {
Rotation = 120,
Color = ColorSequence.new(State.colors[key].a, State.colors[key].b),
Transparency = NumberSequence.new(0.6),
}, tint)
inst("TextLabel", {
BackgroundTransparency = 1,
Size = UDim2.fromScale(1, 1),
Font = FONT_MONO,
TextSize = 22,
TextColor3 = Color3.fromRGB(255, 255, 255),
Text = symbol,
}, b)
railButtons[key] = {
btn = b, glow = glow, grad = grad,
shown = UDim2.new(1, shownX, 0.5, offsetY),
hidden = UDim2.new(1, hiddenX, 0.5, offsetY),
gshown = UDim2.new(1, shownC, 0.5, offsetY),
ghidden = UDim2.new(1, hiddenC, 0.5, offsetY),
}
b.MouseEnter:Connect(function()
tw(b, 0.15, { Size = UDim2.fromOffset(RAIL_W + 4, RAIL_W + 4) }, Enum.EasingStyle.Quint)
tw(grad, 0.15, { Transparency = NumberSequence.new(0.38) })
tw(glow, 0.15, { BackgroundTransparency = 0.7 })
end)
b.MouseLeave:Connect(function()
tw(b, 0.15, { Size = UDim2.fromOffset(RAIL_W, RAIL_W) }, Enum.EasingStyle.Quint)
tw(grad, 0.15, { Transparency = NumberSequence.new(0.6) })
tw(glow, 0.15, { BackgroundTransparency = 0.88 })
end)
b.MouseButton1Click:Connect(function()
if State.open == key then closeActive() else openWindow(key) end
end)
end
local RAIL_ICONS = {
m1 = USE_EMOJI and "👊" or "M1",
tp = USE_EMOJI and "🌀" or "TP",
crate = USE_EMOJI and "📦" or "CR",
}
for _, key in ipairs(MODULE_ORDER) do
makeRailButton(key, RAIL_ICONS[key] or "?", moduleOffset(key))
end
local badgeShow
do
local COL = Color3.fromRGB(90, 170, 255)
local TXT = "(BUILD 1.0)"
local lbl = inst("TextLabel", {
AnchorPoint = Vector2.new(1, 0),
Position = UDim2.new(1, -18, 0, 8),
Size = UDim2.fromOffset(430, 46),
BackgroundTransparency = 1,
Font = FONT_TITLE,
TextSize = 34,
TextColor3 = COL,
TextTransparency = 1,
TextXAlignment = Enum.TextXAlignment.Right,
TextYAlignment = Enum.TextYAlignment.Top,
Text = TXT,
Visible = false,
}, gui)
badgeShow = function(show)
if show then
lbl.Visible = true
lbl.Position = UDim2.new(1, -18, 0, 2)
tw(lbl, 0.3, { TextTransparency = 0 })
tw(lbl, 0.3, { Position = UDim2.new(1, -18, 0, 8) }, Enum.EasingStyle.Quint)
else
local t = tw(lbl, 0.2, { TextTransparency = 1 })
t.Completed:Connect(function()
if lbl.TextTransparency > 0.9 then lbl.Visible = false end
end)
end
end
end
function refreshRailColors()
for key, e in pairs(railButtons) do
e.grad.Color = ColorSequence.new(State.colors[key].a, State.colors[key].b)
e.glow.BackgroundColor3 = State.colors[key].a
end
end
local function setRail(open)
State.railOpen = open
badgeShow(open)
for i, key in ipairs(MODULE_ORDER) do
local e = railButtons[key]
task.delay((i - 1) * 0.05, function()
if not e.btn.Parent then return end
tw(e.btn, 0.32, { Position = open and e.shown or e.hidden }, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
tw(e.glow, 0.32, { Position = open and e.gshown or e.ghidden }, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
end)
end
end
for _, e in pairs(railButtons) do
e.btn.Position = e.hidden
e.glow.Position = e.ghidden
end
applyAllStyles()
-- ---------------------------------------------------------------- input
track(UIS.InputBegan:Connect(function(input, gpe)
if input.KeyCode == TOGGLE_KEY and not gpe then
if State.railOpen then
setRail(false)
closeActive()
else
setRail(true)
end
return
end
if gpe then return end
if input.KeyCode == Enum.KeyCode.H then
if not TP.root or not TP.root.Parent then
armPick(tpLock, "click a player")
elseif not TP.dest then
pendingDest = function(p) tpSetDest(p) end
notify("click a spot", State.colors.tp.a)
else
tpToggle()
end
return
end
if input.KeyCode == Enum.KeyCode.J then
tpReset()
return
end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if pendingDest then
local p = aimPoint()
local cb = pendingDest
pendingDest = nil
if p then cb(p) end
return
end
if pendingPick then
local t = Mouse.Target
if not t then return end
local f = playersFolder()
local m = t
while m and m.Parent do
if m.Parent == f then break end
m = m.Parent
end
if not m or not m.Parent or m.Parent ~= f then
notify("not a player character", RED)
return
end
local cb = pendingPick
pendingPick = nil
if rootOf(m) then cb(m) else notify("no root on " .. m.Name, RED) end
end
end
end))
-- ---------------------------------------------------------------- heartbeat
track(RunService.Heartbeat:Connect(function(dt)
if TP.running and TP.dest then
TP.acc += dt
if TP.acc >= TP.interval then
TP.acc = 0
if not TP.root or not TP.root.Parent then
local f = playersFolder()
local m = f and TP.name and f:FindFirstChild(TP.name)
local r = m and rootOf(m)
if r then
TP.root = r
else
TP.running = false
tpSay("target gone", RED)
end
end
if TP.root and TP.root.Parent and TP.dest then
local model = TP.root.Parent
if not TP.lift then
local minY, baseY = math.huge, TP.root.Position.Y
for _, d in ipairs(model:GetDescendants()) do
if d:IsA("BasePart") and d ~= TP.root then
local b = d.Position.Y - d.Size.Y * 0.5
if b < minY then minY = b end
end
end
TP.lift = (minY < math.huge) and math.clamp(baseY - minY, 0.5, 12) or 3
end
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Exclude or Enum.RaycastFilterType.Blacklist
pcall(function() rp.RespectCanCollide = true end)
local filter = { model }
local mine = LP.Character
if mine and mine ~= model then filter[#filter + 1] = mine end
rp.FilterDescendantsInstances = filter
local from = Vector3.new(TP.dest.X, TP.dest.Y + 10, TP.dest.Z)
local ground = Workspace:Raycast(from, Vector3.new(0, -400, 0), rp)
local y = ground and (ground.Position.Y + TP.lift) or TP.dest.Y
local c = TP.root.CFrame
TP.root.CFrame = CFrame.new(TP.dest.X, y, TP.dest.Z) * (c - c.Position)
TP.root.AssemblyLinearVelocity = Vector3.zero
TP.root.AssemblyAngularVelocity = Vector3.zero
end
end
end
for _, slot in pairs(M1.slots) do
runSlot(slot, dt)
end
runMoves(dt)
if CRATE.tick then CRATE.tick(dt) end
end))
-- ---------------------------------------------------------------- teardown
local unloaded = false
doUnload = function()
if unloaded then return end
unloaded = true
ListenOn = false
pcall(uninstallHook)
TP.running = false
TP.dest = nil
pendingPick, pendingDest = nil, nil
M1.moves.enabled = false
CRATE.running = false
CRATE.listening = false
pcall(CRATE.uninstallHook)
for _, slot in pairs(M1.slots) do
slot.enabled = false
if slot.box then pcall(function() slot.box:Destroy() end); slot.box = nil end
end
for _, c in ipairs(CONNS) do pcall(function() c:Disconnect() end) end
table.clear(CONNS)
if getgenv().OJBS_Cleanup == doUnload then getgenv().OJBS_Cleanup = nil end
pcall(function() gui:Destroy() end)
print("[OJBS] unloaded — remotes restored, gui destroyed")
end
getgenv().OJBS_Cleanup = doUnload
--normalhas a kill aura (use select player, click on your torso, set hits/sec, then enable) hollow purple tab works best (more cdr = more dmg) can deal like 30T in 10 seconds or so the raider works by selecting your character, clicking on your torso, selecting a position and pressing h to turn off/on and j to reset the position to normal. enjoy! dc: waitwhatismyuser