Run it
Copy the script and paste it into your executor.
Settings = {
IncludeNils =
}
HTTPs = :();
(a)
HTTPs:(a)
(a)
HTTPs:(a)
()
()
(, (Settings))
() ()
Settings = (())
(str, thing)
str:(, #thing) == thing
(key)
((key), )
(key)
(key) ==
.. (key) ..
.. (key) ..
(key, val)
(key) ==
(val):() ==
.. (key)
(val):() .. .. (key)
(key) ==
val
(str)
i, v ()
(i) == str (v) ==
(Scr)
funcs = {}
i, v , ()
((v) == (v) (v).script == Scr)
.(funcs, v)
funcs
(regularTable)
meta = (regularTable)
meta
{}
(meta, )
mms = {}
i, v meta
((i), )
.(mms, {Name = i, Value = v})
mms
(instance)
p = instance
lo = {}
(p ~= p.Parent ~= )
.(lo, p)
p = p.Parent
fullName
#lo ==
lo[#lo].ClassName ~=
fullName = .. lo[#lo].ClassName ..
fullName =
i = #lo - , , -
fullName = fullName .. .. lo[i].Name ..
fullName
(tbl, indent, tblname)
indent = indent
tblname = tblname
metacount =
result =
count =
key, value (tbl)
(value) == ((key), )
result = result .. .(, indent) .. (key) ..
#value ==
result = result ..
result = result .. .. (value, indent + )
result = result .. .(, indent) ..
(value) ~=
result =
result ..
.(, indent) ..
.. (metacount) .. .. (tblname) ..
metacount = metacount +
_, v (value)
result =
result ..
.(, indent) .. .. (metacount) .. .. (v.Name) ..
(v.Value) ==
result =
result ..
.(, indent) ..
..
(v.Value, indent + ) ..
.. .(, indent) ..
(v.Value) ==
result = result .. .(, indent) ..
result = result .. .(, indent) .. (v.Value)
result = result ..
(value) == ((key), )
result =
result ..
.(, indent) ..
(key) .. .. .(, indent + )
(value):() == ((key), )
result =
result ..
.(, indent) ..
(key) ..
..
(value.X) .. .. (value.Y) .. .. (value.Z) ..
(value):() == ((key), )
result =
result ..
.(, indent) ..
(key) .. .. (value.X) .. .. (value.Y) ..
(value):() == ((key), )
result =
result ..
.(, indent) ..
(key) .. .. (value.Scale) .. .. (value.Offset) ..
(value):() == ((key), )
result =
result ..
.(, indent) ..
(key) ..
..
(value.X.Scale) ..
..
(value.X.Offset) ..
.. (value.Y.Scale) .. .. (value.Y.Offset) ..
(value):() == ((key), )
result = result .. .(, indent) .. (key) .. .. (value) ..
(value) == ((key), )
result = result .. .(, indent) .. (key) .. .. (value) ..
(value) == ((key), )
result = result .. .(, indent) .. (key) .. .. (value) ..
(value) == ((key), )
result = result .. .(, indent) .. (key) .. .. (value) ..
(value):() == ((key), )
result = result .. .(, indent) .. (key) .. .. (value) ..
(value):() == ((key), )
result =
result ..
.(, indent) ..
(key) ..
..
(value.R * ) ..
.. (value.G * ) .. .. (value.B * ) ..
#tbl ==
result
.. result
(func, excludename, indent, customname)
indent
indent =
metatablecount =
inf, String = debug.(func), .. (debug.(func).name) ..
excludename
String =
customname
String = .. customname ..
(inf.is_vararg) ==
String = String ..
ab={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}
inf.numparams >
paramcount = inf.numparams
i = , paramcount
String = String .. ab[i]
i < paramcount
String = String ..
paramcount > #ab
String = String ..
String = String ..
StringHolder = String
String =
UString =
i, v (func)
(v):() ==
UString = UString .. ():((i, v), v.X, v.Y)
(v):() ==
UString = UString .. ():((i, v), v.X, v.Y, v.Z)
(v):() ==
UString = UString .. ():((i, v), v.Scale, v.Offset)
(v):() ==
UString =
UString ..
():(
(i, v),
v.X.Scale,
v.X.Offset,
v.Y.Scale,
v.Y.Offset
)
(v):() ==
.() - v <
UString = UString .. ():((i, v), (v))
() - v <
UString = UString .. ():((i, v), (v))
UString = UString .. ():((i, v), (v))
(v):() ==
UString = UString .. ():(v.Name:(, ),(v))
(v):() ==
UString = UString .. ():((i, v), v.R * , v.G * , v.B * )
(v):() ==
UString = UString .. ():((i, v), v)
(v):() ==
UString = UString .. ():((i, v), (v))
(v):() ==
UString = UString .. ():((i, v), (v))
#(func) ==
String = StringHolder
String = UString .. .. StringHolder
consts = .(, indent) ..
Aconsts =
UnknownProtos =
i, v (func)
(v)
consts = consts .. .. .(, indent) ..v..
Aconsts = Aconsts .. .. .(, indent) .. .. (i) .. .. (v) ..
consts = consts .. .. .(, indent) ..
i, v (func)
debug.(v).name ==
UnknownProtos = UnknownProtos +
String =
String ..
():(
.(, indent),
(v, , indent + , .. (UnknownProtos))
)
String = String .. ():(.(, indent), (v, , indent + ))
String .. .. consts .. Aconsts .. .. .(, indent) ..
(Script)
Decompiled =
(Script) == Script.ClassName ==
s, e =
(
()
i, v (Script)
(v) ==
#v ==
(i) ==
Decompiled = Decompiled .. ():((i, v))
Decompiled = Decompiled .. ():(i)
(i) ==
Decompiled =
Decompiled ..
():(
(i, v),
(v, , .. (i))
)
Decompiled =
Decompiled ..
():(
i,
(v, , .. (i))
)
(v) ==
(i) ==
Decompiled = Decompiled .. ():((v, , , ..(i)))
Decompiled = Decompiled .. ():((v, , ))
)
s
.. e
Decompiled
s, e =
(
()
uks =
i, v (Script)
(v) ==
#v ==
(i) ==
Decompiled = Decompiled .. ():((i, v))
Decompiled = Decompiled .. ():(i)
(i) ==
Decompiled =
Decompiled ..
():(
(i, v),
(v, , .. (i))
)
Decompiled =
Decompiled ..
():(i, (v, , .. (i)))
i, v (Script)
name = debug.(v).name
name == Settings.IncludeNils
Decompiled = Decompiled .. ():((v, , , .. (uks)))
uks = uks +
name ~=
Decompiled = Decompiled .. ():((v, , ))
)
s
.. e
Decompiled
().decompile = DecompileScript
DecompileScriptCan decompile LocalScripts & ModuleScripts v1.0.0: Can read upvalues Can read Vector3, Vector2, UDim, UDim2 values Can fully read tables Can read instance paths What it can't do as of now: Read while loops Read for loops Read function arguements's names (For example decompiling this function HelloWorld(Greet, Bye) would return function HelloWorld(a,b) It currently uses the alphabet as arguement counters) Use function arguements Use constants Hardly read constants How do I use it? Put this in your autoexec folder, Get the script you want to decompile's path, enter in your executor: decompile(scriptPath) If you want to print the result do print(decompile(scriptPath)) decompile returns a string value. v1.0.1 Changelogs: [+] A LOT better reading for constants: Instead of the usual local v8 = 'task' local v9 = 'wait', I implemented a feature that detects libraries (os, math, utf8, bit32, debug, string, table, ...) and checks if the next constant is a function of the library. [+] Better proccessTableDescendants code: You might've checked the previous code and said, why the hell is he doing if type(key) == "number" ... instead of making a function for it?!!, I did that. [+] Better instanc