Run it
Copy the script and paste it into your executor.
env = ()
env.__LEXSPY_CLEANUP (env.__LEXSPY_CLEANUP)
env.__LEXSPY_LOADED =
t0 = .()
Players=:()
RunService = :()
UIS = :()
RS=:()
CoreGui = :()
TS = :()
plr = Players.LocalPlayer
TAG =
= .unpack
(f) (f) ==
can={
hooks = () (getnamecallmethod),
setnc = (setnamecallmethod),
readonly=(),
cclosure = (),
cbvalue=(getcallbackvalue),
writefile=(writefile),
folders = (isfolder) (makefolder),
loadstr = (),
fire=(firesignal),
hui = (gethui),
}
() ({}, {__mode = })
remFolder = RS:()
isBB = remFolder ~= remFolder:() ~=
S={
on = ,
paused = ,
dir = ,
query=,
bbOnly = ,
autoscroll = ,
cap=,
log = {},
nextId = ,
sel = ,
blocked={},
ignored={},
dirty=,
maxQueue = ,
muted=(),
listeners=(),
nListen = ,
wrapped = (),
conns = {},
hooked=,
dead = ,
}
BB_NAMES = {
ParryButtonPress = ,
AbilityButtonPress = ,
ParrySuccess = ,
ParryFailed = ,
ActivateSuper=,
DefensiveMove = ,
TeleportToStandardGame = ,
Emotes=,
}
(path)
path
key, label (BB_NAMES)
path:(key, , ) label
(inst)
chain = {}
p = inst
p p ~=
.(chain, , p)
p = p.Parent
p ~= #chain ==
out, from
chain[]==plr
out=
from =
root=chain[]
svc =
(() svc = :(root.ClassName) == root )
svc
out = ():(root.ClassName)
out = ():(root.Name)
from =
i = from, #chain
out = out .. ():(chain[i].Name)
out
(inst)
ok, res = (buildPath, inst)
ok res res
cls, nm = ,
(() cls, nm = inst.ClassName, inst.Name )
.. (cls) .. .. ((nm):(, )) ..
OTHER = {
BrickColor = (v) ():(v.Name) ,
= (v) ():(v.Scale, v.Offset) ,
Rect = (v) ():(v.Min.X, v.Min.Y, v.Max.X, v.Max.Y) ,
NumberRange = (v) ():((v.Min),(v.Max)) ,
NumberSequence = () ,
ColorSequence = () ,
EnumItem = ,
}
(v, depth, seen, maxd, code)
depth = depth
seen = seen {}
maxd = maxd
t = (v)
t == t == (v)
t ==
v ~= v
v == .huge
v == -.huge
v % == .(v) < (v)
():(v)
t == ():(v)
t ==
():(v.X,v.Y, v.Z)
t ==
():(v.X, v.Y)
t ==
c = {v:()}
i = , #c c[i] = ():(c[i])
.. .(c, ) ..
t ==
():(.(v.R*+),.(v.G*+), .(v.B*+))
t ==
():(v.X.Scale, v.X.Offset, v.Y.Scale, v.Y.Offset)
OTHER[t]
OTHER[t](v)
t==
code (v)
ok, name = (() v:() )
ok name
.. v.ClassName ..
t ==
code
t ==
code
ok, src = (debug.info, v, )
.. (ok ( .. (src) .. ) )
t ==
code
t ~= (v)
seen[v] code
depth >= maxd code
seen[v]=
parts = {}
n = #v
shown = .(n, )
i = , shown
.(parts, (v[i], depth + ,seen, maxd, code))
n > shown
.(parts, .. (n - shown) .. )
extra =
k, val (v)
((k) == k>= k <= n)
extra = extra +
extra >
parts[#parts+] =
key
(k) == k:()
key=k
key = .. (k, depth+, seen, maxd, code) ..
parts[#parts+] = key .. .. (val, depth + , seen, maxd, code)
seen[v] =
.. .(parts, ) ..
(r)
ok,p = (() r:() )
ok p
.. (r) ..
(full)
full
bits = {}
b full:() bits[#bits+] = b
#bits <= full
bits[#bits-] .. .. bits[#bits]
(args, n)
args
n=n args.n #args
n ==
out = {}
i = , .(n, )
s = (args[i], , {}, )
#s > s = s:(, ) ..
out[#out+]=s
n > out[#out+] =
.. .(out, ) ..
queue = {}
(dir, remote, method, args)
S.on S.paused S.ignored[remote]
#queue >= S.maxQueue
queue[#queue+] = {
dir = dir, remote = remote, method = method, args = args,
n = args args.n ,
stamp=.(),
blocked = S.blocked[remote] == ,
}
()
extra = #S.log - S.cap
extra >
S.log = .(S.log, extra + , #S.log,,{})
EVENTS = {RemoteEvent = , UnreliableRemoteEvent = }
REMOTES = {RemoteEvent = , UnreliableRemoteEvent = , RemoteFunction = }
(r)
ok, c = (() r.ClassName )
ok c
(r) EVENTS[(r)] ==
(r) (r) ==
old_namecall,old_newindex,hookedMt
(remote, orig)
w=(...)
args = .(...)
(push, , remote, ,args)
((args, , args.n))
S.wrapped[w]=
w
()
can.hooks
,
mt = ()
hookedMt = mt
old_namecall = mt.__namecall
old_newindex = mt.__newindex
can.readonly (, mt,)
(self, ...)
method = ()
(method == method == )
(self) ==
S.muted[.()]
REMOTES[self.ClassName]
blocked=S.blocked[self]
blocked (S.on S.paused S.ignored[self])
(push, ,self, method, .(...))
can.setnc (method)
blocked
(self, ...)
(self, key, value)
key == (value) ==
S.wrapped[value]
(self) == self.ClassName ==
(self, key,(self, value))
(self, key, value)
wrap = (can.cclosure ) (f) f
ok, err = (()
mt.__namecall = (nc)
mt.__newindex = (ni)
)
ok
(()
mt.__namecall = old_namecall
mt.__newindex = old_newindex
)
can.readonly (, mt, )
ok
hookedMt =
, .. (err)
()
hookedMt
can.readonly (, hookedMt, )
old_namecall (() hookedMt.__namecall = old_namecall )
old_newindex (() hookedMt.__newindex=old_newindex )
can.readonly (, hookedMt, )
hookedMt =
(remote)
(S.hooked can.cbvalue)
ok, cb=(getcallbackvalue, remote, )
ok (cb) == S.wrapped[cb]
(() remote.OnClientInvoke = cb )
(inst)
S.dead
c=inst.ClassName
EVENTS[c]
S.listeners[inst]
S.listeners[inst]=inst.OnClientEvent:((...)
(,inst, ,.(...))
)
S.nListen +=
c ==
(inst)
()
.(S.conns, .DescendantAdded:((inst)
(track, inst)
))
.(()
ok, all = (.GetDescendants, )
ok
i, inst (all)
S.dead
(track, inst)
i% == .()
)
()
_, c (S.conns) (c.Disconnect, c)
S.conns = {}
_,c (S.listeners) (c.Disconnect, c)
S.listeners=()
S.nListen =
(text)
text = (text)
tries = {setclipboard, toclipboard, writeclipboard, .write_clipboard}
i = ,
f = tries[i]
(f) (f, text)
(name, body)
can.writefile ,
can.folders
(() () () )
path= .. name
ok = (writefile, path, body)
ok , path
,
(fn)
co = .()
S.muted[co] =
res = .((fn))
S.muted[co] =
res
(btn,msg, back)
btn
btn.Text = msg
.(, () btn.Text = back )
(e)
out = {}
i = , e.n out[i] = (e.args[i], , {}, ,)
.(out, )
(e)
path, m = (e.remote), e.method
params = e.n >
m ==
():(path, params, e.stamp)
m ==
():(path, params,e.stamp)
():(path, m, (e))
(e)
e.dir == e.method == can.fire
a = (e)
():((e.remote), a ~= ( .. a) )
(e)
(e)
path = (e.remote)
L = {
.. path,
.. e.remote.ClassName,
.. e.method,
.. (e.dir == ),
.. e.stamp,
}
nice = (path)
nice .(L, .. nice)
e.blocked .(L,)
.(L,)
.(L, ():(e.n))
e.n ==
.(L, )
i = , e.n
.(L, ():(i, (e.args[i])))
.(L, .. (e.args[i]))
.(L, )
.(L, )
.(L,(e))
.(L, )
renderDetail, genScript
()
S.sel
_, e (S.log)
e.id == S.sel e
UI = {}
C = {
bg = .(, , ),
bgAlt = .(, , ),
panel = .(, , ),
row = .(, , ),
rowSel = .(, ,),
accent = .(, , ),
incoming = .(, , ),
outgoing = .(, ,),
text = .(, , ),
dim = .(, , ),
danger=.(, , ),
gold = .(,,),
}
(class, props, parent)
o = .(class)
k, v (props {}) o[k] = v
parent o.Parent = parent
o
(p, r)
(, {CornerRadius = .(, r )}, p)
(p, color, thick, trans)
(, {
Color = color C.accent,
Thickness = thick ,
Transparency = trans ,
ApplyStrokeMode = .ApplyStrokeMode.Border,
}, p)
(parent, text, color, size, pos)
b = (, {
Text = text, Font=.Font.GothamBold, TextSize = , TextColor3 = C.text,
BackgroundColor3 = color C.panel, BackgroundTransparency=,
BorderSizePixel = , TextTruncate = .TextTruncate.AtEnd,
Size=size, Position = pos,
}, parent)
(b, )
(b, C.accent, ,)
b
W, H = ,
TB_H =
EDIT_H, GRID_H=,
(gui, opener)
targets={}
(CoreGui) == .(targets, CoreGui)
can.hui
ok, h = (gethui)
ok (h) == .(targets, h)
pg = plr (plr:() plr:(,))
pg .(targets, pg)
_, t (targets)
_, n ({, })
old = t:(n)
old (old.Destroy, old)
_, t (targets)
(() gui.Parent = t )
gui.Parent == t
(() opener.Parent = t )
()
UI.status
txt,col
S.on
txt, col = , C.danger
S.paused
txt,col = , C.outgoing
txt, col = , C.incoming
UI.status.Text = txt
UI.status.TextColor3 = col
UI.dot.BackgroundColor3 = col
()
S.sel=
UI.detailBox.Text =
UI.detailTitle.Text =
UI.editBox.Text =
UI.editId =
()
gui = (, {
Name = , ResetOnSpawn = , DisplayOrder=,
ZIndexBehavior = .ZIndexBehavior.Sibling,
})
opener = (,{
Name = , ResetOnSpawn = , DisplayOrder = ,
ZIndexBehavior = .ZIndexBehavior.Sibling, Enabled = ,
})
UI.gui = gui
UI.opener=opener
tab = (, {
Text = , Font = .Font.GothamBlack, TextSize = , TextColor3 = C.text,
BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
Size = .(, ), Position = .(, , , -),
}, opener)
(tab, )
(tab, C.accent, , )
UI.setOpen = (v)
gui.Enabled = v
opener.Enabled = v
tab.MouseButton1Click:(() UI.() )
main = (, {
Name=, Size = .(W,H),
Position = .(,-W/, ,-H/),
BackgroundColor3 = C.bg, BorderSizePixel = , Active=, Draggable = ,
}, gui)
(main, )
(main, C.accent, , )
hdr = (,{
Size = .(, , , ), BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
}, main)
(hdr, )
(, {
Text = , Font = .Font.GothamBlack,TextSize = ,TextColor3 = C.text,
BackgroundTransparency = , TextXAlignment = .TextXAlignment.Left,
Size=.(, , , ), Position = .(, ,, ),
}, hdr)
UI.dot = (, {
Size = .(, ),Position = .(, , , -),
BackgroundColor3 = C.incoming, BorderSizePixel=,
}, hdr)
(UI.dot, )
UI.status = (, {
Text = ,Font = .Font.GothamBold, TextSize = ,TextColor3 = C.incoming,
BackgroundTransparency = , TextXAlignment = .TextXAlignment.Left,
Size = .(, , , ), Position = .(, , , ),
}, hdr)
mode = isBB
S.hooked mode = mode ..
(, {
Text = mode, Font = .Font.GothamBold,TextSize = ,
TextColor3 = isBB C.gold C.dim,BackgroundTransparency = ,
Size = .(, , , ), Position=.(,-, , ),
TextXAlignment = .TextXAlignment.Center,
}, hdr)
closeBtn = (, {
Text = , Font = .Font.GothamBold, TextSize = , TextColor3 = C.danger,
BackgroundTransparency = , Size = .(, ), Position = .(,-, , ),
}, hdr)
minBtn = (,{
Text = , Font = .Font.GothamBold, TextSize = , TextColor3 = C.dim,
BackgroundTransparency = ,Size = .(, ), Position = .(, -,, ),
}, hdr)
unloadBtn = (, {
Text = , Font = .Font.GothamBold,TextSize = , TextColor3 = C.dim,
BackgroundTransparency = , Size = .(,), Position = .(, -, , ),
}, hdr)
tb = (, {
Name = ,Size = .(, , , TB_H), Position = .(, , , ),
BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
},main)
search = (, {
Size = .(, , , ), Position = .(, ,, ),
BackgroundColor3 = C.panel, BorderSizePixel = , Text = ,
PlaceholderText = , PlaceholderColor3 = C.dim,
Font = .Font.Gotham, TextSize = , TextColor3 = C.text,
TextXAlignment = .TextXAlignment.Left, ClearTextOnFocus = ,
},tb)
(search, )
(search, C.accent, , )
search:():(()
S.query=search.Text
S.dirty =
)
UI.dirBtn = (tb, , C.panel, .(, ), .(, , , ))
UI.bbBtn = (tb, , C.panel, .(, ), .(, , , ))
UI.pauseBtn = (tb, , C.panel, .(, ), .(,, , ))
UI.scrollBtn = (tb, , C.rowSel,.(, ), .(,, ,))
S.autoscroll
UI.scrollBtn.Text =
UI.scrollBtn.BackgroundColor3=C.panel
exportBtn = (tb, ,C.panel, .(, ), .(,-, , ))
copyAllBtn = (tb, , C.panel, .(,), .(, -,,))
clearBtn = (tb, ,C.panel, .(, ), .(, -, , ))
unignoreBtn = (tb, , C.panel, .(, ), .(, , , ))
unblockBtn = (tb, , C.panel, .(, ), .(, , , ))
capBtn = (tb, .. S.cap, C.panel, .(, ),.(, , , ))
body = (, {
Name = , Size = .(, , , - - TB_H - ),
Position = .(, , , + TB_H), BackgroundColor3 = C.bg, BorderSizePixel = ,
}, main)
listBox=(, {
Size = .(, -, , -), Position = .(, , , ),
BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
}, body)
(listBox, )
UI.list = (, {
Size = .(, -, , -), Position = .(, , , ),
BackgroundTransparency=, BorderSizePixel = , ScrollBarThickness=,
ScrollBarImageColor3 = C.accent, CanvasSize = .(),
AutomaticCanvasSize = .AutomaticSize.Y,
}, listBox)
(, {Padding = .(, ),SortOrder = .SortOrder.LayoutOrder}, UI.list)
(, {PaddingTop = .(, ), PaddingLeft = .(, ), PaddingRight = .(, )}, UI.list)
right = (, {
Size = .(, -, ,-), Position = .(, , , ),
BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
},body)
(right, )
UI.detailTitle=(, {
Text = , Font = .Font.GothamBold, TextSize = , TextColor3 = C.text,
BackgroundTransparency = , TextXAlignment = .TextXAlignment.Left,
Size = .(, -,, ), Position = .(, , , ),
}, right)
scroll = (, {
Size = .(, -, , -( + +EDIT_H+ + GRID_H + )),
Position = .(, , , ), BackgroundColor3 = C.panel, BorderSizePixel = ,
ScrollBarThickness = ,ScrollBarImageColor3 = C.accent, CanvasSize = .(),
AutomaticCanvasSize = .AutomaticSize.Y,
},right)
(scroll, )
UI.detailBox=(, {
Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = ,
Text=,Font = .Font.Code, TextSize = , TextColor3 = C.text, TextWrapped = ,
TextXAlignment = .TextXAlignment.Left, TextYAlignment = .TextYAlignment.Top,
TextEditable = , ClearTextOnFocus = , AutomaticSize = .AutomaticSize.Y,
}, scroll)
UI.editBox = (, {
Name = , Size=.(, -, , EDIT_H),
Position = .(, , , -(GRID_H + + EDIT_H)),
BackgroundColor3 = C.panel, BorderSizePixel = ,Text = ,
PlaceholderText = ,
PlaceholderColor3 = C.dim, Font = .Font.Code, TextSize = , TextColor3 = C.text,
TextWrapped = , MultiLine = , ClearTextOnFocus = , ClipsDescendants = ,
TextXAlignment = .TextXAlignment.Left, TextYAlignment = .TextYAlignment.Top,
}, right)
(UI.editBox,)
(UI.editBox, C.accent, ,)
grid = (, {
Size = .(, -, , GRID_H), Position = .(, , , -(GRID_H + )),
BackgroundTransparency = ,
}, right)
(, {
CellSize = .(/, -,, ), CellPadding = .(, , , ),
SortOrder = .SortOrder.LayoutOrder,
}, grid)
UI.copyCall = (grid, )
UI.copyArgs = (grid, )
UI.copyPath = (grid, )
UI.fireBtn = (grid, )
UI.invokeBtn = (grid, )
UI.runBtn = (grid, )
UI.blockBtn = (grid, )
UI.ignoreBtn = (grid, )
UI.onlyBtn = (grid, )
UI.removeBtn = (grid, , C.danger)
UI.fireLabel =
UI.invokeBtn.Visible =
footer=(, {
Name = , Size = .(, , , ), Position = .(, , , -),
BackgroundColor3 = C.bgAlt, BorderSizePixel = ,
}, main)
UI.stats = (, {
Text = ,Font=.Font.Gotham,TextSize = ,
TextColor3 = C.dim, BackgroundTransparency = , TextXAlignment = .TextXAlignment.Left,
Size = .(, -, , ), Position = .(, , , ),
}, footer)
closeBtn.MouseButton1Click:(() UI.() )
armed =
unloadBtn.MouseButton1Click:(()
armed
armed =
unloadBtn.Text =
unloadBtn.TextColor3=C.danger
.(, ()
armed =
unloadBtn.Text =
unloadBtn.TextColor3 = C.dim
)
env.__LEXSPY_CLEANUP env.()
)
minBtn.MouseButton1Click:(()
open = main.Size.Y.Offset ~=
TS:(main, TweenInfo.(), {Size = .(W, open H)}):()
body.Visible = open
footer.Visible = open
tb.Visible = open
)
UI.dirBtn.MouseButton1Click:(()
order = {,, }
at = .(order, S.dir)
S.dir=order[at % #order+]
UI.dirBtn.Text = S.dir
S.dirty =
)
UI.bbBtn.MouseButton1Click:(()
S.bbOnly = S.bbOnly
UI.bbBtn.Text = S.bbOnly
UI.bbBtn.BackgroundColor3 = S.bbOnly C.rowSel C.panel
S.dirty =
)
UI.pauseBtn.MouseButton1Click:(()
S.paused = S.paused
UI.pauseBtn.Text = S.paused
UI.pauseBtn.BackgroundColor3 = S.paused C.rowSel C.panel
()
)
UI.scrollBtn.MouseButton1Click:(()
S.autoscroll = S.autoscroll
UI.scrollBtn.Text = S.autoscroll
UI.scrollBtn.BackgroundColor3 = S.autoscroll C.rowSel C.panel
)
clearBtn.MouseButton1Click:(()
S.log = {}
queue = {}
S.dirty =
()
)
exportBtn.MouseButton1Click:(()
fname = .. .() ..
ok, where = (fname, (S.log))
ok (TAG .. .. (where))
(exportBtn, ok , )
)
unignoreBtn.MouseButton1Click:(()
S.ignored = {}
S.dirty =
()
(unignoreBtn, , )
)
unblockBtn.MouseButton1Click:(()
S.blocked = {}
S.dirty =
()
(unblockBtn, , )
)
capBtn.MouseButton1Click:(()
sizes={, , , }
at = .(sizes, S.cap)
S.cap = sizes[at%#sizes + ]
capBtn.Text = .. S.cap
()
S.dirty =
)
copyAllBtn.MouseButton1Click:(()
(copyAllBtn, ((S.log)) , )
)
UI.copyCall.MouseButton1Click:(()
e = ()
e
(UI.copyCall, ((e)) , )
)
UI.copyArgs.MouseButton1Click:(()
e = ()
e
parts = {}
i = , e.n parts[i] = (e.args[i], , {}, , )
(UI.copyArgs, (.(parts, )) , )
)
UI.copyPath.MouseButton1Click:(()
e = ()
e
(UI.copyPath, ((e.remote)) , )
)
UI.fireBtn.MouseButton1Click:(()
e = ()
e (e.remote)
res
e.dir==
can.fire
res = (() (e.remote.OnClientEvent, (e.args, , e.n)) )
res = (() e.remote:((e.args, , e.n)) )
(UI.fireBtn,res[] , UI.fireLabel)
)
UI.invokeBtn.MouseButton1Click:(()
e = ()
e e.dir ~= (e.remote)
res = (() e.remote:((e.args, , e.n)) )
S.sel==e.id
res[]
out = {}
i = , res.n .(out, (res[i]))
UI.detailBox.Text = UI.detailBox.Text .. .. (#out > .(out, ) )
UI.detailBox.Text = UI.detailBox.Text .. .. (res[])
(UI.invokeBtn, res[] , )
)
UI.runBtn.MouseButton1Click:(()
src = UI.editBox.Text
src:()
can.loadstr
(UI.runBtn, , )
id = S.sel
fn, cerr = (src)
fn
S.sel == id
UI.detailBox.Text = UI.detailBox.Text .. .. (cerr)
(UI.runBtn, , )
res = (fn)
S.sel == id
res[]
out = {}
i = , res.n out[#out+] = (res[i])
UI.detailBox.Text = UI.detailBox.Text .. .. (#out > ( .. .(out, )) )
UI.detailBox.Text = UI.detailBox.Text .. .. (res[])
(UI.runBtn,res[] , )
)
UI.blockBtn.MouseButton1Click:(()
e = ()
e
S.blocked[e.remote]
S.blocked[e.remote] =
S.blocked[e.remote]=
S.dirty =
()
)
UI.ignoreBtn.MouseButton1Click:(()
e = ()
e
S.ignored[e.remote] = S.ignored[e.remote]
S.dirty =
()
)
UI.onlyBtn.MouseButton1Click:(()
e = ()
e
nm=
(() nm=e.remote.Name )
search.Text = nm
)
UI.removeBtn.MouseButton1Click:(()
e = ()
e
i, v (S.log)
v.id == e.id
.(S.log, i)
S.dirty =
()
)
.(S.conns,UIS.InputBegan:((input, gp)
gp
input.KeyCode==.KeyCode.RightControl
UI.( gui.Enabled)
))
(gui, opener)
(gui.Destroy, gui)
(opener.Destroy, opener)
UI.gui =
UI.opener =
()
(e)
S.dir == e.dir ~=
S.dir == e.dir ~=
S.bbOnly (e.remote):(, , )
S.query ~=
q = S.query:()
((e.remote):():(q, , ) e.method:():(q, , ))
rows = {}
(i)
rows[i] rows[i]
row = (, {
Size=.(, -, , ), BackgroundColor3 = C.row, BorderSizePixel = ,
Text = , AutoButtonColor = ,
},UI.list)
(row, )
stripe = (,{
Size = .(, ), Position=.(, ,, -),
BackgroundColor3 = C.incoming, BorderSizePixel = ,
}, row)
(stripe, )
txt = (, {
Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = ,
Text = , Font = .Font.Gotham,TextSize = , TextColor3 = C.text,
TextXAlignment = .TextXAlignment.Left, TextTruncate = .TextTruncate.AtEnd,
}, row)
item = {row = row, stripe=stripe, txt = txt}
row.MouseButton1Click:(()
item.id
S.sel = item.id
S.dirty=
()
)
rows[i] = item
item
()
UI.list
shown = {}
i=#S.log, ,-
(S.log[i]) shown[#shown+] = S.log[i]
count = .(#shown, )
i = , count
e = shown[i]
item = (i)
item.row.Visible =
item.row.LayoutOrder = i
item.row.BackgroundColor3 = e.id == S.sel C.rowSel C.row
item.stripe.BackgroundColor3 = e.dir == C.incoming C.outgoing
item.id = e.id
e.rowText
path = (e.remote)
e.nice = (path) ~=
e.rowText = ():(e.dir == ,e.stamp,(path), e.method, (e.args, e.n))
text = e.rowText
e.nice text = .. text
e.blocked text= .. text
item.txt.Text = text
i = count + , #rows rows[i].row.Visible =
S.autoscroll UI.list.CanvasPosition = .(, )
nIn,nOut, nBlocked = , ,
_,e (S.log)
e.dir == nIn += nOut +=
S.blocked[e.remote] nBlocked +=
UI.stats.Text=():(
#S.log, nIn, nOut, nBlocked, count,S.hooked , S.nListen)
()
e=()
e
UI.detailTitle.Text =
UI.detailBox.Text =
UI.editBox
UI.editBox.Text =
UI.editId =
path = (e.remote)
UI.detailTitle.Text = ((path) (path)) .. .. e.method
UI.detailBox.Text = (e)
UI.blockBtn.Text = S.blocked[e.remote]
UI.ignoreBtn.Text = S.ignored[e.remote]
out = e.dir ==
UI.fireLabel=out
UI.fireBtn.Text = UI.fireLabel
UI.fireBtn.Visible = (e.remote) (out can.fire)
UI.invokeBtn.Visible = out (e.remote)
UI.editId ~= e.id
UI.editBox.Text = (e)
UI.editId = e.id
(list)
L={, .. .(), }
_, e (list)
(e)
.(L, .. e.stamp .. .. e.method)
.(L, (e))
.(L, )
.(L,)
lastDraw=
()
#queue ==
batch = queue
queue = {}
_, raw (batch)
.(S.log, {
id=S.nextId, dir = raw.dir, remote = raw.remote, method = raw.method,
args = raw.args, n = raw.n, stamp=raw.stamp,
blocked = S.blocked[raw.remote] == ,
})
S.nextId +=
()
S.dirty =
beat = RunService.Heartbeat:(()
()
now = .()
S.dirty now - lastDraw >
lastDraw = now
S.dirty =
(rebuildList)
)
env.LexSpy = {
Toggle = (state)
S.on = state ~=
()
,
Clear = ()
S.log = {}
queue = {}
S.sel =
S.dirty=
,
GetLog = ()
out = {}
i, e (S.log) out[i]=e
out
,
Block = (r) S.blocked[r] = ,
Unblock = (r) S.blocked[r] = ,
Ignore = (r) S.ignored[r] = ,
Unignore = (r) S.ignored[r]= ,
GenerateScript = () (S.log) ,
SaveLog = (name) (name ,(S.log)) ,
SetFilter = (f) S.dir = f; S.dirty = ,
SetBBOnly = (v) S.bbOnly = v; S.dirty = ,
Show = (v) UI.setOpen UI.(v ~= ) ,
Unload = () env.__LEXSPY_CLEANUP env.() ,
}
env.__LEXSPY_CLEANUP=()
env.__LEXSPY_LOADED =
S.on =
S.dead=
beat (beat.Disconnect, beat)
()
()
UI.gui (UI.gui.Destroy, UI.gui)
UI.opener (UI.opener.Destroy, UI.opener)
queue = {}
rows = {}
S.log = {}
env.LexSpy =
(TAG .. )
called, ok, err = (installHooks)
called
err = ok
ok =
S.hooked = ok ==
S.hooked
(TAG .. .. (err))
uiOk, uiErr = (buildUI)
uiOk (TAG .. .. (uiErr))
trOk, trErr = (startTracking)
trOk (TAG .. .. (trErr))
.(()
S.dirty =
(rebuildList)
)
(():(TAG, (.() - t0)*,(isBB), (S.hooked)))
Never paste your .ROBLOSECURITY cookie anywhere, and use an alt account with scripts.

Universal