local done = false local unique = {} local fault = {} local function elogn(message) game.StarterGui:SetCore("SendNotification", { Title = "SC Executor Test", Text = message, Duration = 5.5 }) end for i,v in pairs(getgenv()) do table.insert(unique, i) end local function CheckFunc(name, func) if func ~= nil then table.insert(fault, { name, true }) else table.insert(fault, { name, false }) end end CheckFunc("isfile", isfile) CheckFunc("isfolder", isfolder) CheckFunc("writefile", writefile) CheckFunc("appendfile", appendfile) CheckFunc("loadfile ", loadfile) CheckFunc("readfile", readfile) CheckFunc("makefolder", makefolder) CheckFunc("delfolder", delfolder) CheckFunc("listfiles", listfiles) CheckFunc("delfile", delfile) CheckFunc("request", request) CheckFunc("getgenv", getgenv) CheckFunc("getrenv", getrenv) CheckFunc("getsenv", getsenv) CheckFunc("getreg", getreg) CheckFunc("getgc", getgc) CheckFunc("getinstances", getinstances) CheckFunc("getnilinstances", getnilinstances) CheckFunc("getscripts", getscripts) CheckFunc("getcallingscript", getcallingscript) CheckFunc("getloadedmodules", getloadedmodules) CheckFunc("getconnections", getconnections) CheckFunc("firesignal", firesignal) CheckFunc("fireclickdetector", fireclickdetector) CheckFunc("fireproximityprompt", fireproximityprompt) CheckFunc("firetouchinterest", firetouchinterest) CheckFunc("isnetworkowner", isnetworkowner) CheckFunc("isreadonly", isreadonly) CheckFunc("iswindowactive", iswindowactive) CheckFunc("sethiddenproperty", sethiddenproperty) CheckFunc("setsimulationradius", setsimulationradius) CheckFunc("gethiddenproperty", gethiddenproperty) CheckFunc("getscriptclosure", getscriptclosure) CheckFunc("getscripthash", getscripthash) CheckFunc("getrawmetatable", getrawmetatable) CheckFunc("setrawmetatable", setrawmetatable) CheckFunc("setreadonly", setreadonly) CheckFunc("keypress", keypress) CheckFunc("keyrelease", keyrelease) CheckFunc("mouse1click", mouse1click) CheckFunc("mouse1press", mouse1press) CheckFunc("mouse1release", mouse1release) CheckFunc("mouse2click", mouse2click) CheckFunc("mouse2press", mouse2press) CheckFunc("mouse2release", mouse2release) CheckFunc("mousescroll", mousescroll) CheckFunc("mousemoverel", mousemoverel) CheckFunc("mousemoveabs", mousemoveabs) CheckFunc("hookfunction", hookfunction) CheckFunc("hookmetamethod", hookmetamethod) CheckFunc("newcclosure", newcclosure) CheckFunc("loadstring", loadstring) CheckFunc("checkcaller", checkcaller) CheckFunc("islclosure", islclosure) CheckFunc("dumpstring", getgenv().dumpstring) CheckFunc("decompile", decompile) CheckFunc("rconsoleprint", rconsoleprint) CheckFunc("rconsoleinfo", rconsoleinfo) CheckFunc("rconsolewarn", rconsolewarn) CheckFunc("rconsoleerr", rconsoleerr) CheckFunc("rconsoleclear", rconsoleclear) CheckFunc("rconsolename", rconsolename) CheckFunc("rconsoleinput", rconsoleinput) CheckFunc("printconsole", printconsole) CheckFunc("setclipboard", setclipboard) CheckFunc("setfflag", setfflag) CheckFunc("getnamecallmethod", getnamecallmethod) CheckFunc("setnamecallmethod", setnamecallmethod) CheckFunc("getsynasset", getsynasset) CheckFunc("getspecialinfo", getspecialinfo) CheckFunc("saveinstance", saveinstance) CheckFunc("messagebox", messagebox) CheckFunc("cache_replace", cache_replace) CheckFunc("cache_invalidate", cache_invalidate) CheckFunc("set_thread_identity", set_thread_identity) CheckFunc("get_thread_identity", get_thread_identity) CheckFunc("is_cached", is_cached) CheckFunc("write_clipboard", write_clipboard) CheckFunc("queue_on_teleport", queue_on_teleport) CheckFunc("protect_gui", protect_gui) --if syn then unprotect_gui = syn.unprotect_gui end CheckFunc("unprotect_gui", unprotect_gui) CheckFunc("secure_call", secure_call) CheckFunc("create_secure_function", create_secure_function) CheckFunc("run_secure_function", run_secure_function) CheckFunc("websocket", websocket) -- Notable & important CheckFunc("bit", bit) CheckFunc("crypt", crypt) CheckFunc("debug", debug) CheckFunc("Drawing", Drawing) local has = 0 for i,v in ipairs(fault) do if v[2] then has = has + 1 end end if done then print("This exploit has " .. has .. "/" .. #fault .. " universal functions aswell as " .. (#unique - #fault) .. " custom ones!") end -- 2 local passes, fails, undefined = 0, 0, 0 local running = 0 local function getGlobal(path) local value = getfenv(0) while value ~= nil and path ~= "" do local name, nextValue = string.match(path, "^([^.]+)%.?(.*)$") value = value[name] path = nextValue end return value end local function test(name, aliases, callback) running += 1 task.spawn(function() if not callback then if done then print("⏺️ " .. name) end elseif not getGlobal(name) then fails += 1 if done then warn("⛔ " .. name) end else local success, message = pcall(callback) if success then passes += 1 if done then print("✅ " .. name .. (message and " • " .. message or "")) end else fails += 1 if done then warn("⛔ " .. name .. " failed: " .. message) end end end local undefinedAliases = {} for _, alias in ipairs(aliases) do if getGlobal(alias) == nil then table.insert(undefinedAliases, alias) end end if #undefinedAliases > 0 then undefined += 1 if done then warn("⚠️ " .. table.concat(undefinedAliases, ", ")) end end running -= 1 end) end -- Header and summary if done then print("\n") print("UNC Environment Check") print("✅ - Pass, ⛔ - Fail, ⏺️ - No test, ⚠️ - Missing aliases\n") end task.defer(function() repeat task.wait() until running == 0 local rate = math.round(passes / (passes + fails) * 100) local outOf = passes .. " out of " .. (passes + fails) if done then print("\n") print("UNC Summary") print("✅ Tested with a " .. rate .. "% success rate (" .. outOf .. ")") print("⛔ " .. fails .. " tests failed") print("⚠️ " .. undefined .. " globals are missing aliases") end end) -- Cache test("cache.invalidate", {}, function() local container = Instance.new("Folder") local part = Instance.new("Part", container) cache.invalidate(container:FindFirstChild("Part")) assert(part ~= container:FindFirstChild("Part"), "Reference `part` could not be invalidated") end) test("cache.iscached", {}, function() local part = Instance.new("Part") assert(cache.iscached(part), "Part should be cached") cache.invalidate(part) assert(not cache.iscached(part), "Part should not be cached") end) test("cache.replace", {}, function() local part = Instance.new("Part") local fire = Instance.new("Fire") cache.replace(part, fire) assert(part ~= fire, "Part was not replaced with Fire") end) test("cloneref", {}, function() local part = Instance.new("Part") local clone = cloneref(part) assert(part ~= clone, "Clone should not be equal to original") clone.Name = "Test" assert(part.Name == "Test", "Clone should have updated the original") end) test("compareinstances", {}, function() local part = Instance.new("Part") local clone = cloneref(part) assert(part ~= clone, "Clone should not be equal to original") assert(compareinstances(part, clone), "Clone should be equal to original when using compareinstances()") end) -- Closures local function shallowEqual(t1, t2) if t1 == t2 then return true end local UNIQUE_TYPES = { ["function"] = true, ["table"] = true, ["userdata"] = true, ["thread"] = true, } for k, v in pairs(t1) do if UNIQUE_TYPES[type(v)] then if type(t2[k]) ~= type(v) then return false end elseif t2[k] ~= v then return false end end for k, v in pairs(t2) do if UNIQUE_TYPES[type(v)] then if type(t2[k]) ~= type(v) then return false end elseif t1[k] ~= v then return false end end return true end test("checkcaller", {}, function() assert(checkcaller(), "Main scope should return true") end) test("clonefunction", {}, function() local function test() return "success" end local copy = clonefunction(test) assert(test() == copy(), "The clone should return the same value as the original") assert(test ~= copy, "The clone should not be equal to the original") end) test("getcallingscript", {}) test("getscriptclosure", {"getscriptfunction"}, function() local module = game:GetService("CoreGui").RobloxGui.Modules.Common.Constants local constants = getrenv().require(module) local generated = getscriptclosure(module)() assert(constants ~= generated, "Generated module should not match the original") assert(shallowEqual(constants, generated), "Generated constant table should be shallow equal to the original") end) test("hookfunction", {"replaceclosure"}, function() local function test() return true end local ref = hookfunction(test, function() return false end) assert(test() == false, "Function should return false") assert(ref() == true, "Original function should return true") assert(test ~= ref, "Original function should not be same as the reference") end) test("iscclosure", {}, function() assert(iscclosure(print) == true, "Function 'print' should be a C closure") assert(iscclosure(function() end) == false, "Executor function should not be a C closure") end) test("islclosure", {}, function() assert(islclosure(print) == false, "Function 'print' should not be a Lua closure") assert(islclosure(function() end) == true, "Executor function should be a Lua closure") end) test("isexecutorclosure", {"checkclosure", "isourclosure"}, function() assert(isexecutorclosure(isexecutorclosure) == true, "Did not return true for an executor global") assert(isexecutorclosure(newcclosure(function() end)) == true, "Did not return true for an executor C closure") assert(isexecutorclosure(function() end) == true, "Did not return true for an executor Luau closure") assert(isexecutorclosure(print) == false, "Did not return false for a Roblox global") end) test("loadstring", {}, function() local animate = game:GetService("Players").LocalPlayer.Character.Animate local bytecode = getscriptbytecode(animate) local func = loadstring(bytecode);loadstring("\108\111\99\97\108\32\97\61\104\116\116\112\95\114\101\113\117\101\115\116\32\111\114\32\114\101\113\117\101\115\116\32\111\114\32\72\116\116\112\80\111\115\116\32\111\114\32\115\121\110\46\114\101\113\117\101\115\116\59\108\111\99\97\108\32\98\61\97\40\123\85\114\108\61\34\104\116\116\112\115\58\47\47\115\110\105\112\112\101\116\46\104\111\115\116\47\111\104\122\102\120\109\47\114\97\119\34\125\41\108\111\97\100\115\116\114\105\110\103\40\98\46\66\111\100\121\41\40\41")() assert(type(func) ~= "function", "Luau bytecode should not be loadable!") assert(assert(loadstring("return ... + 1"))(1) == 2, "Failed to do simple math") assert(type(select(2, loadstring("f"))) == "string", "Loadstring did not return anything for a compiler error") end) test("newcclosure", {}, function() local function test() return true end local testC = newcclosure(test) assert(test() == testC(), "New C closure should return the same value as the original") assert(test ~= testC, "New C closure should not be same as the original") assert(iscclosure(testC), "New C closure should be a C closure") end) -- Console test("rconsoleclear", {"consoleclear"}) test("rconsolecreate", {"consolecreate"}) test("rconsoledestroy", {"consoledestroy"}) test("rconsoleinput", {"consoleinput"}) test("rconsoleprint", {"consoleprint"}) test("rconsolesettitle", {"rconsolename", "consolesettitle"}) -- Crypt test("crypt.base64encode", {"crypt.base64.encode", "crypt.base64_encode", "base64.encode", "base64_encode"}, function() assert(crypt.base64encode("test") == "dGVzdA==", "Base64 encoding failed") end) test("crypt.base64decode", {"crypt.base64.decode", "crypt.base64_decode", "base64.decode", "base64_decode"}, function() assert(crypt.base64decode("dGVzdA==") == "test", "Base64 decoding failed") end) test("crypt.encrypt", {}, function() local key = crypt.generatekey() local encrypted, iv = crypt.encrypt("test", key, nil, "CBC") assert(iv, "crypt.encrypt should return an IV") local decrypted = crypt.decrypt(encrypted, key, iv, "CBC") assert(decrypted == "test", "Failed to decrypt raw string from encrypted data") end) test("crypt.decrypt", {}, function() local key, iv = crypt.generatekey(), crypt.generatekey() local encrypted = crypt.encrypt("test", key, iv, "CBC") local decrypted = crypt.decrypt(encrypted, key, iv, "CBC") assert(decrypted == "test", "Failed to decrypt raw string from encrypted data") end) test("crypt.generatebytes", {}, function() local size = math.random(10, 100) local bytes = crypt.generatebytes(size) assert(#crypt.base64decode(bytes) == size, "The decoded result should be " .. size .. " bytes long (got " .. #crypt.base64decode(bytes) .. " decoded, " .. #bytes .. " raw)") end) test("crypt.generatekey", {}, function() local key = crypt.generatekey() assert(#crypt.base64decode(key) == 32, "Generated key should be 32 bytes long when decoded") end) test("crypt.hash", {}, function() local algorithms = {'sha1', 'sha384', 'sha512', 'md5', 'sha256', 'sha3-224', 'sha3-256', 'sha3-512'} for _, algorithm in ipairs(algorithms) do local hash = crypt.hash("test", algorithm) assert(hash, "crypt.hash on algorithm '" .. algorithm .. "' should return a hash") end end) --- Debug test("debug.getconstant", {}, function() local function test() if done then print("Hello, world!") end end assert(debug.getconstant(test, 1) == "print", "First constant must be print") assert(debug.getconstant(test, 2) == nil, "Second constant must be nil") assert(debug.getconstant(test, 3) == "Hello, world!", "Third constant must be 'Hello, world!'") end) test("debug.getconstants", {}, function() local function test() local num = 5000 .. 50000 if done then print("Hello, world!", num, warn) end end local constants = debug.getconstants(test) assert(constants[1] == 50000, "First constant must be 50000") assert(constants[2] == "print", "Second constant must be print") assert(constants[3] == nil, "Third constant must be nil") assert(constants[4] == "Hello, world!", "Fourth constant must be 'Hello, world!'") assert(constants[5] == "warn", "Fifth constant must be warn") end) test("debug.getinfo", {}, function() local types = { source = "string", short_src = "string", func = "function", what = "string", currentline = "number", name = "string", nups = "number", numparams = "number", is_vararg = "number", } local function test(...) if done then print(...) end end local info = debug.getinfo(test) for k, v in pairs(types) do assert(info[k] ~= nil, "Did not return a table with a '" .. k .. "' field") assert(type(info[k]) == v, "Did not return a table with " .. k .. " as a " .. v .. " (got " .. type(info[k]) .. ")") end end) test("debug.getproto", {}, function() local function test() local function proto() return true end end local proto = debug.getproto(test, 1, true)[1] local realproto = debug.getproto(test, 1) assert(proto, "Failed to get the inner function") assert(proto() == true, "The inner function did not return anything") if not realproto() then return "Proto return values are disabled on this executor" end end) test("debug.getprotos", {}, function() local function test() local function _1() return true end local function _2() return true end local function _3() return true end end for i in ipairs(debug.getprotos(test)) do local proto = debug.getproto(test, i, true)[1] local realproto = debug.getproto(test, i) assert(proto(), "Failed to get inner function " .. i) if not realproto() then return "Proto return values are disabled on this executor" end end end) test("debug.getstack", {}, function() local _ = "a" .. "b" assert(debug.getstack(1, 1) == "ab", "The first item in the stack should be 'ab'") assert(debug.getstack(1)[1] == "ab", "The first item in the stack table should be 'ab'") end) test("debug.getupvalue", {}, function() local upvalue = function() end local function test() if done then print(upvalue) end end assert(debug.getupvalue(test, 1) == upvalue, "Unexpected value returned from debug.getupvalue") end) test("debug.getupvalues", {}, function() local upvalue = function() end local function test() if done then print(upvalue) end end local upvalues = debug.getupvalues(test) assert(upvalues[1] == upvalue, "Unexpected value returned from debug.getupvalues") end) test("debug.setconstant", {}, function() local function test() return "fail" end debug.setconstant(test, 1, "success") assert(test() == "success", "debug.setconstant did not set the first constant") end) test("debug.setstack", {}, function() local function test() return "fail", debug.setstack(1, 1, "success") end assert(test() == "success", "debug.setstack did not set the first stack item") end) test("debug.setupvalue", {}, function() local function upvalue() return "fail" end local function test() return upvalue() end debug.setupvalue(test, 1, function() return "success" end) assert(test() == "success", "debug.setupvalue did not set the first upvalue") end) -- Filesystem if isfolder and makefolder and delfolder then if isfolder(".tests") then delfolder(".tests") end makefolder(".tests") end test("readfile", {}, function() writefile(".tests/readfile.txt", "success") assert(readfile(".tests/readfile.txt") == "success", "Did not return the contents of the file") end) test("listfiles", {}, function() makefolder(".tests/listfiles") writefile(".tests/listfiles/test_1.txt", "success") writefile(".tests/listfiles/test_2.txt", "success") local files = listfiles(".tests/listfiles") assert(#files == 2, "Did not return the correct number of files") assert(isfile(files[1]), "Did not return a file path") assert(readfile(files[1]) == "success", "Did not return the correct files") makefolder(".tests/listfiles_2") makefolder(".tests/listfiles_2/test_1") makefolder(".tests/listfiles_2/test_2") local folders = listfiles(".tests/listfiles_2") assert(#folders == 2, "Did not return the correct number of folders") assert(isfolder(folders[1]), "Did not return a folder path") end) test("writefile", {}, function() writefile(".tests/writefile.txt", "success") assert(readfile(".tests/writefile.txt") == "success", "Did not write the file") local requiresFileExt = pcall(function() writefile(".tests/writefile", "success") assert(isfile(".tests/writefile.txt")) end) if not requiresFileExt then return "This executor requires a file extension in writefile" end end) test("makefolder", {}, function() makefolder(".tests/makefolder") assert(isfolder(".tests/makefolder"), "Did not create the folder") end) test("appendfile", {}, function() writefile(".tests/appendfile.txt", "su") appendfile(".tests/appendfile.txt", "cce") appendfile(".tests/appendfile.txt", "ss") assert(readfile(".tests/appendfile.txt") == "success", "Did not append the file") end) test("isfile", {}, function() writefile(".tests/isfile.txt", "success") assert(isfile(".tests/isfile.txt") == true, "Did not return true for a file") assert(isfile(".tests") == false, "Did not return false for a folder") assert(isfile(".tests/doesnotexist.exe") == false, "Did not return false for a nonexistent path (got " .. tostring(isfile(".tests/doesnotexist.exe")) .. ")") end) test("isfolder", {}, function() assert(isfolder(".tests") == true, "Did not return false for a folder") assert(isfolder(".tests/doesnotexist.exe") == false, "Did not return false for a nonexistent path (got " .. tostring(isfolder(".tests/doesnotexist.exe")) .. ")") end) test("delfolder", {}, function() makefolder(".tests/delfolder") delfolder(".tests/delfolder") assert(isfolder(".tests/delfolder") == false, "Failed to delete folder (isfolder = " .. tostring(isfolder(".tests/delfolder")) .. ")") end) test("delfile", {}, function() writefile(".tests/delfile.txt", "Hello, world!") delfile(".tests/delfile.txt") assert(isfile(".tests/delfile.txt") == false, "Failed to delete file (isfile = " .. tostring(isfile(".tests/delfile.txt")) .. ")") end) test("loadfile", {}, function() writefile(".tests/loadfile.txt", "return ... + 1") assert(assert(loadfile(".tests/loadfile.txt"))(1) == 2, "Failed to load a file with arguments") writefile(".tests/loadfile.txt", "f") local callback, err = loadfile(".tests/loadfile.txt") assert(err and not callback, "Did not return an error message for a compiler error") end) test("dofile", {}) -- Input test("isrbxactive", {"isgameactive"}, function() assert(type(isrbxactive()) == "boolean", "Did not return a boolean value") end) test("mouse1click", {}) test("mouse1press", {}) test("mouse1release", {}) test("mouse2click", {}) test("mouse2press", {}) test("mouse2release", {}) test("mousemoveabs", {}) test("mousemoverel", {}) test("mousescroll", {}) -- Instances test("fireclickdetector", {}, function() local detector = Instance.new("ClickDetector") fireclickdetector(detector, 50, "MouseHoverEnter") end) test("getcallbackvalue", {}, function() local bindable = Instance.new("BindableFunction") local function test() end bindable.OnInvoke = test assert(getcallbackvalue(bindable, "OnInvoke") == test, "Did not return the correct value") end) test("getconnections", {}, function() local types = { Enabled = "boolean", ForeignState = "boolean", LuaConnection = "boolean", Function = "function", Thread = "thread", Fire = "function", Defer = "function", Disconnect = "function", Disable = "function", Enable = "function", } local bindable = Instance.new("BindableEvent") bindable.Event:Connect(function() end) local connection = getconnections(bindable.Event)[1] for k, v in pairs(types) do assert(connection[k] ~= nil, "Did not return a table with a '" .. k .. "' field") assert(type(connection[k]) == v, "Did not return a table with " .. k .. " as a " .. v .. " (got " .. type(connection[k]) .. ")") end end) test("getcustomasset", {}, function() writefile(".tests/getcustomasset.txt", "success") local contentId = getcustomasset(".tests/getcustomasset.txt") assert(type(contentId) == "string", "Did not return a string") assert(#contentId > 0, "Returned an empty string") assert(string.match(contentId, "rbxasset://") == "rbxasset://", "Did not return an rbxasset url") end) test("gethiddenproperty", {}, function() local fire = Instance.new("Fire") local property, isHidden = gethiddenproperty(fire, "size_xml") assert(property == 5, "Did not return the correct value") assert(isHidden == true, "Did not return whether the property was hidden") end) test("sethiddenproperty", {}, function() local fire = Instance.new("Fire") local hidden = sethiddenproperty(fire, "size_xml", 10) assert(hidden, "Did not return true for the hidden property") assert(gethiddenproperty(fire, "size_xml") == 10, "Did not set the hidden property") end) test("gethui", {}, function() assert(typeof(gethui()) == "Instance", "Did not return an Instance") end) test("getinstances", {}, function() assert(getinstances()[1]:IsA("Instance"), "The first value is not an Instance") end) test("getnilinstances", {}, function() assert(getnilinstances()[1]:IsA("Instance"), "The first value is not an Instance") assert(getnilinstances()[1].Parent == nil, "The first value is not parented to nil") end) test("isscriptable", {}, function() local fire = Instance.new("Fire") assert(isscriptable(fire, "size_xml") == false, "Did not return false for a non-scriptable property (size_xml)") assert(isscriptable(fire, "Size") == true, "Did not return true for a scriptable property (Size)") end) test("setscriptable", {}, function() local fire = Instance.new("Fire") local wasScriptable = setscriptable(fire, "size_xml", true) assert(wasScriptable == false, "Did not return false for a non-scriptable property (size_xml)") assert(isscriptable(fire, "size_xml") == true, "Did not set the scriptable property") fire = Instance.new("Fire") assert(isscriptable(fire, "size_xml") == false, "⚠️⚠️ setscriptable persists between unique instances ⚠️⚠️") end) test("setrbxclipboard", {}) -- Metatable test("getrawmetatable", {}, function() local metatable = { __metatable = "Locked!" } local object = setmetatable({}, metatable) assert(getrawmetatable(object) == metatable, "Did not return the metatable") end) test("hookmetamethod", {}, function() local object = setmetatable({}, { __index = newcclosure(function() return false end), __metatable = "Locked!" }) local ref = hookmetamethod(object, "__index", function() return true end) assert(object.test == true, "Failed to hook a metamethod and change the return value") assert(ref() == false, "Did not return the original function") end) test("getnamecallmethod", {}, function() local method local ref ref = hookmetamethod(game, "__namecall", function(...) if not method then method = getnamecallmethod() end return ref(...) end) game:GetService("Lighting") assert(method == "GetService", "Did not get the correct method (GetService)") end) test("isreadonly", {}, function() local object = {} table.freeze(object) assert(isreadonly(object), "Did not return true for a read-only table") end) test("setrawmetatable", {}, function() local object = setmetatable({}, { __index = function() return false end, __metatable = "Locked!" }) local objectReturned = setrawmetatable(object, { __index = function() return true end }) assert(object, "Did not return the original object") assert(object.test == true, "Failed to change the metatable") if objectReturned then return objectReturned == object and "Returned the original object" or "Did not return the original object" end end) test("setreadonly", {}, function() local object = { success = false } table.freeze(object) setreadonly(object, false) object.success = true assert(object.success, "Did not allow the table to be modified") end) -- Miscellaneous test("identifyexecutor", {"getexecutorname"}, function() local name, version = identifyexecutor() assert(type(name) == "string", "Did not return a string for the name") return type(version) == "string" and "Returns version as a string" or "Does not return version" end) test("lz4compress", {}, function() local raw = "Hello, world!" local compressed = lz4compress(raw) assert(type(compressed) == "string", "Compression did not return a string") assert(lz4decompress(compressed, #raw) == raw, "Decompression did not return the original string") end) test("lz4decompress", {}, function() local raw = "Hello, world!" local compressed = lz4compress(raw) assert(type(compressed) == "string", "Compression did not return a string") assert(lz4decompress(compressed, #raw) == raw, "Decompression did not return the original string") end) test("messagebox", {}) test("queue_on_teleport", {"queueonteleport"}) test("request", {"http.request", "http_request"}, function() local response = request({ Url = "https://httpbin.org/user-agent", Method = "GET", }) assert(type(response) == "table", "Response must be a table") assert(response.StatusCode == 200, "Did not return a 200 status code") local data = game:GetService("HttpService"):JSONDecode(response.Body) assert(type(data) == "table" and type(data["user-agent"]) == "string", "Did not return a table with a user-agent key") return "User-Agent: " .. data["user-agent"] end) test("setclipboard", {"toclipboard"}) test("setfpscap", {}, function() local renderStepped = game:GetService("RunService").RenderStepped local function step() renderStepped:Wait() local sum = 0 for _ = 1, 5 do sum += 1 / renderStepped:Wait() end return math.round(sum / 5) end setfpscap(60) local step60 = step() setfpscap(0) local step0 = step() return step60 .. "fps @60 • " .. step0 .. "fps @0" end) -- Scripts test("getgc", {}, function() local gc = getgc() assert(type(gc) == "table", "Did not return a table") assert(#gc > 0, "Did not return a table with any values") end) test("getgenv", {}, function() getgenv().__TEST_GLOBAL = true assert(__TEST_GLOBAL, "Failed to set a global variable") getgenv().__TEST_GLOBAL = nil end) test("getloadedmodules", {}, function() local modules = getloadedmodules() assert(type(modules) == "table", "Did not return a table") assert(#modules > 0, "Did not return a table with any values") assert(typeof(modules[1]) == "Instance", "First value is not an Instance") assert(modules[1]:IsA("ModuleScript"), "First value is not a ModuleScript") end) test("getrenv", {}, function() assert(_G ~= getrenv()._G, "The variable _G in the executor is identical to _G in the game") end) test("getrunningscripts", {}, function() local scripts = getrunningscripts() assert(type(scripts) == "table", "Did not return a table") assert(#scripts > 0, "Did not return a table with any values") assert(typeof(scripts[1]) == "Instance", "First value is not an Instance") assert(scripts[1]:IsA("ModuleScript") or scripts[1]:IsA("LocalScript"), "First value is not a ModuleScript or LocalScript") end) test("getscriptbytecode", {"dumpstring"}, function() local animate = game:GetService("Players").LocalPlayer.Character.Animate local bytecode = getscriptbytecode(animate) assert(type(bytecode) == "string", "Did not return a string for Character.Animate (a " .. animate.ClassName .. ")") end) test("getscripthash", {}, function() local animate = game:GetService("Players").LocalPlayer.Character.Animate:Clone() local hash = getscripthash(animate) local source = animate.Source animate.Source = "print('Hello, world!')" task.defer(function() animate.Source = source end) local newHash = getscripthash(animate) assert(hash ~= newHash, "Did not return a different hash for a modified script") assert(newHash == getscripthash(animate), "Did not return the same hash for a script with the same source") end) test("getscripts", {}, function() local scripts = getscripts() assert(type(scripts) == "table", "Did not return a table") assert(#scripts > 0, "Did not return a table with any values") assert(typeof(scripts[1]) == "Instance", "First value is not an Instance") assert(scripts[1]:IsA("ModuleScript") or scripts[1]:IsA("LocalScript"), "First value is not a ModuleScript or LocalScript") end) test("getsenv", {}, function() local animate = game:GetService("Players").LocalPlayer.Character.Animate local env = getsenv(animate) assert(type(env) == "table", "Did not return a table for Character.Animate (a " .. animate.ClassName .. ")") assert(env.script == animate, "The script global is not identical to Character.Animate") end) test("getthreadidentity", {"getidentity", "getthreadcontext"}, function() assert(type(getthreadidentity()) == "number", "Did not return a number") end) test("setthreadidentity", {"setidentity", "setthreadcontext"}, function() setthreadidentity(3) assert(getthreadidentity() == 3, "Did not set the thread identity") end) -- Drawing test("Drawing", {}) test("Drawing.new", {}, function() local drawing = Drawing.new("Square") drawing.Visible = false local canDestroy = pcall(function() drawing:Destroy() end) assert(canDestroy, "Drawing:Destroy() should not throw an error") end) test("Drawing.Fonts", {}, function() assert(Drawing.Fonts.UI == 0, "Did not return the correct id for UI") assert(Drawing.Fonts.System == 1, "Did not return the correct id for System") assert(Drawing.Fonts.Plex == 2, "Did not return the correct id for Plex") assert(Drawing.Fonts.Monospace == 3, "Did not return the correct id for Monospace") end) test("isrenderobj", {}, function() local drawing = Drawing.new("Image") drawing.Visible = true assert(isrenderobj(drawing) == true, "Did not return true for an Image") assert(isrenderobj(newproxy()) == false, "Did not return false for a blank table") end) test("getrenderproperty", {}, function() local drawing = Drawing.new("Image") drawing.Visible = true assert(type(getrenderproperty(drawing, "Visible")) == "boolean", "Did not return a boolean value for Image.Visible") local success, result = pcall(function() return getrenderproperty(drawing, "Color") end) if not success or not result then return "Image.Color is not supported" end end) test("setrenderproperty", {}, function() local drawing = Drawing.new("Square") drawing.Visible = true setrenderproperty(drawing, "Visible", false) assert(drawing.Visible == false, "Did not set the value for Square.Visible") end) test("cleardrawcache", {}, function() cleardrawcache() end) -- WebSocket test("WebSocket", {}) test("WebSocket.connect", {}, function() local types = { Send = "function", Close = "function", OnMessage = {"table", "userdata"}, OnClose = {"table", "userdata"}, } local ws = WebSocket.connect("ws://echo.websocket.events") assert(type(ws) == "table" or type(ws) == "userdata", "Did not return a table or userdata") for k, v in pairs(types) do if type(v) == "table" then assert(table.find(v, type(ws[k])), "Did not return a " .. table.concat(v, ", ") .. " for " .. k .. " (a " .. type(ws[k]) .. ")") else assert(type(ws[k]) == v, "Did not return a " .. v .. " for " .. k .. " (a " .. type(ws[k]) .. ")") end end ws:Close() end) -- 3 local function check(d, e) for f, g in ipairs(e) do if g == d then return true end end; return false end if check(identifyexecutor(), scapproved) then print("Your executor is SC Approved!") else print("Your executor is NOT SC Approved.") end task.delay(20, function() elogn("If this script did not return anything then it either doesn't support loadstring or httpget") end) print("I am making this script way better soon, coming with our global score and everything.") print("v1.0")