Run it
Copy the script and paste it into your executor.
debug.getupvalues debug.getprotos debug.getconstants
Numbers = {}
Properties = {}
HttpService = :();
(a)
(a) == ():(a) ():((a))
(a, b)
(b):() ==
b.Name:(, )
(b) == .. (a) (b) == .. (a) (b) == .. (a) (b) == .. (a) (b) .. (a)
(min, max)
a;
a = .(min, max) .(Numbers, a)
.(Numbers, a)
a
_RENV = ()
(func)
name = (func) == func (func) == debug.(func).name
i, v _RENV
(v) ==
i == name
(buff, indent, identifier)
identifier = (identifier)
str = .. (buffer.(buff)) ..
i = , buffer.(buff) -
a = buffer.(buff, i)
a ~=
e =
(()
e = .(a)
)
str = str .. ():(.(, indent), identifier, i, a, a ~= e )
str
(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, equal, meta)
meta = meta
indent = indent
result = ( equal .(, indent) ) ..
equal =
(tbl) ~= (tbl, indent)
_AM =
key, value (tbl)
_AM +=
(value) ==
(value)
result = result .. .(, indent) .. .. (meta ~= (meta) ) .. .. ((value), indent, , meta+)
meta+=
result = result .. .. ( equal .(, indent + ) ) .. (key) .. (value, indent + , , meta)
result = result .. .. ( equal .(, indent + ) ) .. (key) .. (value, indent + , (key, value)) ..
_AM > (result .. .. .(, indent) .. )
(data, indent, identifier)
dataType = (data)
constructors = {
[] = (data) .. data .. ,
[] = (data) (data, indent indent + , identifier ) ,
[] = (data) (data, indent, , ) ,
[] = (data) (data) ,
[] = (data) .(, data.X, data.Y, data.Z) ,
[] = (data) .(, data.X, data.Y) ,
[] = (data) .(, data.Scale, data.Offset) ,
[] = (data) .(, data.X.Scale, data.X.Offset, data.Y.Scale, data.Y.Offset) ,
[] = (data) components = {data:()} .(, .(components, )) ,
[] = (data) .(, .(data.R * ), .(data.G * ), .(data.B * )) ,
[] = (data) .(, (data)) ,
[] = (data) .(, (data)) ,
[] = (data) .(, (data)) ,
[] = (data) ():((data)) ,
[] = (data) (data, indent, identifier) ,
[] = (data) (data)
}
constructors[dataType]
constructors[dataType](data)
((data)) .. .. (data) ..
(Scr)
funcs = {}
i, v , ()
((v) == (v) (v).script == Scr .(funcs, v))
.(funcs, v)
.()
funcs
(TargetFunc, indent, IsProto, ExcludeName, equal)
indent = indent
equal = equal ExcludeName equal
paramcount = debug.(TargetFunc).numparams
vararg = debug.(TargetFunc).is_vararg
()
n, o = ,
i = , paramcount
n = n .. o:(i, i)
i < paramcount (i + == #o i + > #o)
n = n ..
n ..
func = {}
Body = ( equal .(, indent) ) .. (IsProto ) ..
name1 = debug.(TargetFunc).name (IsProto .. ((,)) ( .. ((, ))))
Name = ExcludeName ( .. name1)
ArgsBody = (vararg == ) ()
_1, Upvalues = (getupvalues, TargetFunc)
_2, Constants = (getconstants, TargetFunc)
_3, Protos = (getprotos, TargetFunc)
_1 Upvalues = {}
_2 Constants = {}
_3 Protos = {}
func.ENV = (TargetFunc)
func._G = func.ENV._G
indent+=
Body = Body .. Name .. ArgsBody ..
Found, Found1 = .(, indent) .. ,
i, v Constants
(v)
Found1+=
Found = Found .. .(, indent+) .. (debug.(v).name) .. .. (i) ..
Body = (Found1 > Body .. Found .. .(, indent-) .. ) Body
Body = Body .. .(, indent) .. .. (Upvalues, indent, ) ..
Body = Body .. .(, indent) .. .. (Constants, indent, ) ..
i, v Protos
(v) ==
Body = Body .. (v, indent, , ExcludeName) ..
Body .. .(, indent-) .. , func._G
(Script, indent)
indent = indent
Code = .. (Script) ..
_g, _s = , ;
i, v (Script)
(v) ==
source, g = (v, indent, , )
_g
_g = g
Code = Code .. .. (_g, indent, ) ..
Code = Code .. source ..
(v) == i ~= i ~=
Code = Code .. (v, indent, ) ..
Code
().decompile = DecompileScript
().Decompile = DecompileScript
DecompileScriptAn amazingly improved version of SimpleDecompile! This script can: Read Functions, Scripts, Protos, Upvalues & Constants, Decompile scripts (Some functions may be named NO_NAME_FOUND, If you're a bit experienced with luau you might be able to understand what it says), Read tables, constants, instance paths, metamethods AND buffers much, much better, Better indentation, Works for mobile (CODEX, DELTA, NOT TESTED ON VEGAX), Will give unknown functions random names (NO_NAME_FOUND1960, NO_NAME_FOUND3591, proto19, proto10, proto86, ...) Reads upvalues with no problem. TODO: Add renv checks, Checks if a function has roblox libraries or functions in constants. v1.0.1: Added the renv check. USAGE: ```lua local decompile = loadstring(game:HttpGet("https://scriptblox.com/raw/Universal-Script-SimpleDecompile-V2-12641"))() local Path = -- your script path setclipboard(decompile(Path)) ```