--[[
SYNAPSE X
File.: InitScript.lua
Desc.: Lazy init script for shit that im too lazy to do in C++
]]
local HtType = true
local InsertService = game:GetService'InsertService'
local LoadAsset = InsertService.LoadLocalAsset
local getrawmetatable = getrawmetatable
local TableRemove = table.remove
local TableInsert = table.insert
local unpack = unpack
local GameMeta = getrawmetatable(game)
setreadonly(GameMeta, false)
local GameIndex = GameMeta.__index
local GameNamecall = GameMeta.__namecall
local GameToString = GameMeta.__tostring
local HtGet
local HtPost
local HtForceGet = game.HttpGetAsync
if HtType then
HtGet = game.HttpGetAsync
HtPost = game.HttpPostAsync
else
HtGet = httpget
HtPost = httppost
end
local GetNDM = getndm
local SetNDM = setndm
local GetInstanceList = getinstancelist
local CheckC = checkcaller
local NewCC = newcclosure
local ReATT = reattach
local HookFunc = hookfunction
local GetLoadedModules = getloadedmodules
local StrFind = string.find
local StrGSub = string.gsub
local RepKick = reportkick
local Req = getrenv().require
getgenv().newcclosure = NewCC(function(f)
if type(f) ~= "function" then error("expected function as argument #1") end
if not islclosure(f) then error("expected lua function as argument #1") end
local n = 1
for i,v in pairs(debug.getupvalues(f)) do
debug.setupvaluename(f, n, "?")
n = n + 1
end
return NewCC(f)
end)
local GetObjects = newcclosure(function(self, a)
local Objects = {}
if a then
local b = LoadAsset(InsertService, a)
if b then TableInsert(Objects, b) end
end
return Objects
end)
--stupid hack for HttpGet/Post
local HttpGet = newcclosure(function(self, url)
local GND = GetNDM(game)
SetNDM(game, 3)
spawn(function() SetNDM(game, GND) end)
if HtType then
return HtGet(game, url)
else
return HtGet(url)
end
end)
local HttpPost = newcclosure(function(self, url, content, _, req)
local GND = GetNDM(game)
SetNDM(game, 3)
spawn(function() SetNDM(game, GND) end)
if req == nil then req = "*/*" end
if HtType then
return HtPost(game, url, content, req)
else
if req == nil then req = "text/plain" end
return HtPost(url, content, req)
end
end)
local HttpGetAs = newcclosure(function(g, url, ...)
local GND = GetNDM(game)
SetNDM(game, 3)
spawn(function() SetNDM(game, GND) end)
if HtType then
return HtGet(g, url, ...)
else
local Args = {g, url, ...}
return HtGet(Args[2])
end
end)
local HttpPostAs = newcclosure(function(g, url, ...)
local GND = GetNDM(game)
SetNDM(game, 3)
spawn(function() SetNDM(game, GND) end)
if HtType then
return HtPost(g, url, ...)
else
local Args = {g, url, ...}
if Args[4] == nil then Args[4] = "text/plain" end
return HtPost(Args[2], Args[3], Args[4])
end
end)
local MarketService = game:GetService("MarketplaceService")
local FindString = string.find
local ReverseString = string.reverse
local MarketInitBlacklist =
{
["PerformPurchase"] = true,
["PromptBundlePurchase"] = true,
["PromptGamePassPurchase"] = true,
["PromptNativePurchase"] = true,
["PromptProductPurchase"] = true,
["PromptPurchase"] = true,
["PromptThirdPartyPurchase"] = true
}
local MarketBlacklist = {}
for I, _ in pairs(MarketInitBlacklist) do
MarketBlacklist[ReverseString(I)] = true
end
MarketInitBlacklist = {}
setreadonly(MarketBlacklist, true)
local MarketError = newcclosure(function()
error("MarketplaceService functions are not supported for security reasons in Synapse.")
while true do end
end)
local LuaHookMap = {}
local GetInfo = debug.getinfo
local GService = game.GetService
local PCall = pcall
local MetaHandle = newcclosure(function(self, a)
if self == game then
if a == 'GetObjects' then return GetObjects end
if a == "HttpGet" then return HttpGet end
if a == "HttpPost" then return HttpPost end
--if a == "HttpGetAsync" then return HttpGetAs end fat crash
--if a == "HttpPostAsync" then return HttpPostAs end fat crash
if a == "HttpGetAsync" then return HttpGet end
if a == "HttpPostAsync" then return HttpPost end
if a == "OpenVideosFolder" or a == "OpenScreenshotsFolder" then
return newcclosure(function()
error("Dangerous function '" .. a .. "' is not supported for security reasons in Synapse.")
while true do end
end)
end
local E, R = PCall(GService, self, a)
if E then return R end
end
if self == MarketService then
for I, _ in pairs(MarketBlacklist) do
if FindString(a, ReverseString(I)) then return MarketError end
end
end
end)
local CheckRL = checkrbxlocked
local CheckIN = checkinst
local CheckPC = checkparentchain
local GetCN = getclassname
local GetNCM = getnamecallmethod
GameMeta.__index = newcclosure(function(self, a)
if CheckC() then
local b = MetaHandle(self, a)
if b ~= nil then return b end
end
return GameIndex(self, a)
end)
if isluau() then
GameMeta.__namecall = newcclosure(function(self, ...)
if CheckC() then
local a = GetNCM()
local b = MetaHandle(self, a)
if b ~= nil then return b(self, ...) end
end
return GameNamecall(self, ...)
end)
else
GameMeta.__namecall = newcclosure(function(self, ...)
if CheckC() then
local a = {...}
local b = TableRemove(a)
local c = MetaHandle(self, b)
if c ~= nil then return c(self, unpack(a)) end
end
return GameNamecall(self, ...)
end)
end
--[[GameMeta.__tostring = newcclosure(function(self)
--Synapse X CoreGui Protection - we return the ClassName of certian RobloxLocked objects to prevent stupid detection methods
--ex game that does this: CB:RO
if not CheckC() and typeof(self) == "Instance" and CheckRL(self) and not CheckIN(self, CGui) and CheckPC(self, CGui) and not CheckPC(self, RGui) and not CheckPC(self, RLGui) and not CheckPC(self, DCGui) then
local TS = GameToString(self)
if TS == "DevConsoleMaster" or TS == "RobloxLoadingGui" then return TS end
local Ret = GetCN(self)
if BListInst[Ret] then return "TextLabel" else return Ret end
end
return GameToString(self)
end)]]
setreadonly(GameMeta, true)
--too lazy to implement in C++
getgenv().getnilinstances = newcclosure(function()
local inst = GetInstanceList()
local r = {}
for i, v in pairs(inst) do
if typeof(v) == "Instance" and v.Parent == nil then
r[#r + 1] = v
end
end
return r
end)
getgenv().get_nil_instances = getnilinstances
getgenv().getinstances = newcclosure(function()
local inst = GetInstanceList()
local r = {}
for i, v in pairs(inst) do
if typeof(v) == "Instance" then
r[#r + 1] = v
end
end
return r
end)
getgenv().get_instances = getinstances
getgenv().getscripts = newcclosure(function()
local inst = GetInstanceList()
local r = {}
for i, v in pairs(inst) do
if typeof(v) == "Instance" and (v:IsA("LocalScript") or v:IsA("ModuleScript")) and not v.RobloxLocked then
r[#r + 1] = v
end
end
return r
end)
getgenv().get_scripts = getscripts
--hookfunction w/ more safety checks
getgenv().hookfunction = newcclosure(function(old, new)
if type(old) ~= "function" then error("expected function as argument #1") end
if type(new) ~= "function" then error("expected function as argument #2") end
if islclosure(old) and not islclosure(new) then error("expected C function or Lua function as both argument #1 and #2") end
local hook
if not islclosure(old) and islclosure(new) then
hook = newcclosure(new)
else
hook = new
end
return HookFunc(old, hook)
end)
getgenv().hookfunc = hookfunction
getgenv().replaceclosure = hookfunction
--unlockmodulescript is useless, isn't needed in Synapse X
getgenv().unlockmodulescript = newcclosure(function() end)
--require fix
getgenv().require = function(scr)
if typeof(scr) ~= 'Instance' or scr.ClassName ~= 'ModuleScript' then error'attempt to require a non-ModuleScript' end
if CheckRL(scr) then error'attempt to require a core ModuleScript' end
local oIdentity = syn.get_thread_identity()
syn.set_thread_identity(2)
local g, res = pcall(Req, scr)
syn.set_thread_identity(oIdentity)
if not g then
error(res)
end
return res
end
--getloadedmodules fix
getgenv().getloadedmodules = newcclosure(function()
local Unfiltered = GetLoadedModules()
local Filtered = {}
for I,V in pairs(Unfiltered) do
if not CheckRL(V) then table.insert(Filtered, V) end
end
return Filtered
end)
getgenv().get_loaded_modules = getloadedmodules
--internal: forced HttpGetAsync
getgenv().htgetf = newcclosure(function(url)
local GND = GetNDM(game)
SetNDM(game, 3)
spawn(function() SetNDM(game, GND) end)
return HtForceGet(game, url)
end)
--output redirection
local RedirectEnabled = is_redirection_enabled
local PrintConsole = printconsole
--[[
local FireMsgOut = firemessageout
local CreateMsgOutString = createmsgoutstring
local HookErrHandlers = hookerrorhandlers
local MsgOutRedirect = Instance.new("BindableEvent")
local UseMsgOutRedirect = false
local MsgOut = game:GetService("LogService").MessageOut]]
--[[getgenv().getmessageout = newcclosure(function()
UseMsgOutRedirect = true
return MsgOutRedirect.Event
end)]]
local Print = getrenv().print
local Warn = getrenv().warn
getgenv().print = newcclosure(function(...)
local Rt, Rn = {...}, select('#', ...)
local Str = ""
for i = 1, Rn do
local v = tostring(Rt[i])
if (type(v) ~= "string") then
error("'tostring' must return a string to 'print'", 0)
end
Str = Str .. v .. " "
end
--[[if UseMsgOutRedirect then
MsgOutRedirect:Fire(Str, Enum.MessageType.MessageOutput)
end]]
if RedirectEnabled() then
return printconsole(Str, 255, 255, 255)
else
return Print(Str)
end
end)
getgenv().warn = newcclosure(function(...)
local Rt, Rn = {...}, select('#', ...)
local Str = ""
for i = 1, Rn do
local v = tostring(Rt[i])
if (type(v) ~= "string") then
error("'tostring' must return a string to 'warn'", 0)
end
Str = Str .. v .. " "
end
--[[
if UseMsgOutRedirect then
MsgOutRedirect:Fire(Str, Enum.MessageType.MessageWarning)
end]]
if RedirectEnabled() then
return printconsole(Str, 255, 218, 68)
else
return Warn(Str)
end
end)
--[[spawn(function()
local SynErr = Instance.new("BindableEvent")
local LastMsg = ""
SynErr.Event:Connect(function(Err)
if LastMsg == Err then return end
LastMsg = Err
if UseMsgOutRedirect then
MsgOutRedirect:Fire(Err, Enum.MessageType.MessageError)
end
if is_redirection_enabled() then
printconsole(Err, 215, 90, 74)
else
return FireMsgOut(MsgOut, "MessageError", Err)
end
end)
getreg()[CreateMsgOutString()] = SynErr
game:GetService("RunService").Heartbeat:Connect(HookErrHandlers)
end)]]
--drawing API
local GetRP = getrenderproperty
local SetRP = setrenderproperty
local CreateRP = createrenderobject
local DestroyRP = destroyrenderobject
local LineMT =
{
__index = function(T, K)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Remove" then return newcclosure(function() DestroyRP(rawget(T, "__OBJECT")) rawset(T, "__OBJECT", nil) rawset(T, "__OBJECT_EXISTS", false) end) end
return GetRP(rawget(T, "__OBJECT"), K)
end,
__newindex = function(T, K, V)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Visible" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Visible', expected boolean") end
if K == "From" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'From', expected Vector2") end
if K == "To" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'To', expected Vector2") end
if K == "Color" and typeof(V) ~= "Color3" then error("invalid type '" .. typeof(V) .. "' for property 'Color', expected Color3") end
if K == "Thickness" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Thickness', expected number") end
if K == "Transparency" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Transparency', expected number") end
return SetRP(rawget(T, "__OBJECT"), K, V)
end,
__type = "Line"
}
local TextMT =
{
__index = function(T, K)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Remove" then return newcclosure(function() DestroyRP(rawget(T, "__OBJECT")) rawset(T, "__OBJECT", nil) rawset(T, "__OBJECT_EXISTS", false) end) end
return GetRP(rawget(T, "__OBJECT"), K)
end,
__newindex = function(T, K, V)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Visible" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Visible', expected boolean") end
if K == "Text" and type(V) ~= "string" then error("invalid type '" .. typeof(V) .. "' for property 'Text', expected string") end
if K == "Position" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'Position', expected Vector2") end
if K == "Color" and typeof(V) ~= "Color3" then error("invalid type '" .. typeof(V) .. "' for property 'Color', expected Color3") end
if K == "Center" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Center', expected boolean") end
if K == "Outline" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Outline', expected boolean") end
if K == "OutlineColor" and typeof(V) ~= "Color3" then error("invalid type '" .. typeof(V) .. "' for property 'OutlineColor', expected Color3") end
if K == "Size" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Size', expected number") end
if K == "Font" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Font', expected number") end
if K == "Font" and (V < 0 or V > 3) then error("invalid font") end
if K == "Transparency" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Transparency', expected number") end
return SetRP(rawget(T, "__OBJECT"), K, V)
end,
__type = "Text"
}
local SquareMT =
{
__index = function(T, K)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Remove" then return newcclosure(function() DestroyRP(rawget(T, "__OBJECT")) rawset(T, "__OBJECT", nil) rawset(T, "__OBJECT_EXISTS", false) end) end
return GetRP(rawget(T, "__OBJECT"), K)
end,
__newindex = function(T, K, V)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Visible" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Visible', expected boolean") end
if K == "Position" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'Position', expected Vector2") end
if K == "Size" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'Size', expected Vector2") end
if K == "Color" and typeof(V) ~= "Color3" then error("invalid type '" .. typeof(V) .. "' for property 'Color', expected Color3") end
if K == "Thickness" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Thickness', expected number") end
if K == "Filled" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Filled', expected boolean") end
if K == "Transparency" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Transparency', expected number") end
return SetRP(rawget(T, "__OBJECT"), K, V)
end,
__type = "Square"
}
local CircleMT =
{
__index = function(T, K)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Remove" then return newcclosure(function() DestroyRP(rawget(T, "__OBJECT")) rawset(T, "__OBJECT", nil) rawset(T, "__OBJECT_EXISTS", false) end) end
return GetRP(rawget(T, "__OBJECT"), K)
end,
__newindex = function(T, K, V)
if not rawget(T, "__OBJECT_EXISTS") then error("render object destroyed") end
if K == "Visible" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Visible', expected boolean") end
if K == "Position" and typeof(V) ~= "Vector2" then error("invalid type '" .. typeof(V) .. "' for property 'Position', expected Vector2") end
if K == "Radius" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Radius', expected number") end
if K == "Color" and typeof(V) ~= "Color3" then error("invalid type '" .. typeof(V) .. "' for property 'Color', expected Color3") end
if K == "Thickness" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Thickness', expected number") end
if K == "Filled" and type(V) ~= "boolean" then error("invalid type '" .. typeof(V) .. "' for property 'Filled', expected boolean") end
if K == "Transparency" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'Transparency', expected number") end
if K == "NumSides" and type(V) ~= "number" then error("invalid type '" .. typeof(V) .. "' for property 'NumSides', expected number") end
return SetRP(rawget(T, "__OBJECT"), K, V)
end,
__type = "Circle"
}
local RPInit = false
local Draw =
{
new = function(Type)
if Type == "Line" then
local RendObj = CreateRP(Type)
if not RPInit then wait(0.1) RPInit = true end
local Ret =
{
__OBJECT = RendObj,
__OBJECT_EXISTS = true
}
return setmetatable(Ret, LineMT)
end
if Type == "Text" then
local RendObj = CreateRP(Type)
if not RPInit then wait(0.1) RPInit = true end
local Ret =
{
__OBJECT = RendObj,
__OBJECT_EXISTS = true
}
return setmetatable(Ret, TextMT)
end
if Type == "Square" then
local RendObj = CreateRP(Type)
if not RPInit then wait(0.1) RPInit = true end
local Ret =
{
__OBJECT = RendObj,
__OBJECT_EXISTS = true
}
return setmetatable(Ret, SquareMT)
end
if Type == "Circle" then
local RendObj = CreateRP(Type)
if not RPInit then wait(0.1) RPInit = true end
local Ret =
{
__OBJECT = RendObj,
__OBJECT_EXISTS = true
}
return setmetatable(Ret, CircleMT)
end
error("invalid object type ('" .. tostring(Type) .. "')")
end,
Fonts =
{
UI = 0,
System = 1,
Plex = 2,
Monospace = 3
}
}
--event API
local GetCons = getconnections
local DisableCon = disableconnection
local EnableCon = enableconnection
local GetConFunc = getconnectionfunc
local GetConnectState = getconnectionstate
local ConnMT =
{
__index = function(T, K)
if K == "Disable" then
return newcclosure(function()
if not rawget(T, "__OBJECT_ENABLED") then return end
DisableCon(rawget(T, "__OBJECT"))
rawset(T, "__OBJECT_ENABLED", false)
end)
end
if K == "Enable" then
return newcclosure(function()
if rawget(T, "__OBJECT_ENABLED") then return end
EnableCon(rawget(T, "__OBJECT"))
rawset(T, "__OBJECT_ENABLED", true)
end)
end
if K == "Enabled" then
return rawget(T, "__OBJECT_ENABLED")
end
if K == "State" then
return GetConnectState(rawget(T, "__OBJECT"))
end
if K == "Fire" then
return newcclosure(function(self, ...)
return GetConFunc(rawget(T, "__OBJECT"))(...)
end)
end
if K == "Function" then
return GetConFunc(rawget(T, "__OBJECT"))
end
return nil
end,
__newindex = function(T, K, V)
if K == "Enabled" then
if V then
if rawget(T, "__OBJECT_ENABLED") then return end
EnableCon(rawget(T, "__OBJECT"))
rawset(T, "__OBJECT_ENABLED", true)
else
if not rawget(T, "__OBJECT_ENABLED") then return end
DisableCon(rawget(T, "__OBJECT"))
rawset(T, "__OBJECT_ENABLED", false)
end
end
end,
__type = "Event"
}
local ConCache = {}
getgenv().getconnections = newcclosure(function(sig)
local Cons = GetCons(sig)
local Ret = {}
for Idx, Con in pairs(Cons) do
if ConCache[Con] then
Ret[Idx] = ConCache[Con]
else
local CTable =
{
__OBJECT = Con,
__OBJECT_ENABLED = true
}
Ret[Idx] = setmetatable(CTable, ConnMT)
ConCache[Con] = Ret[Idx]
end
end
return Ret
end)
getgenv().gbmt = newcclosure(function()
return
{
__index = GameIndex,
__namecall = GameNamecall,
__tostring = GameToString
}
end)
--[[local mbox = getgenv().messageboxasync
local mcomplete = getgenv().mbcomplete
local mres = getgenv().mbres
getgenv().messageboxasync = function(message, title, code)
mbox(message, title, code)
while wait() do
if mcomplete() then
return mres()
end
end
end
local casync = getgenv().rconsoleinputasync
local ccomplete = getgenv().rconsolecomplete
local cres = getgenv().rconsoleres
getgenv().rconsoleinputasync = function()
casync()
while wait() do
if ccomplete() then
return cres()
end
end
end]]
getgenv().saveinstance = function(...)
local buffersize
local placename
local savebuffer
local stlgui
local b64encode = syn.crypt.base64.encode
local OPTIONS = {
mode = 'optimized',
noscripts = false,
scriptcache = true,
decomptype = "legacy",
timeout = 30
}
do
local tab_op = (...)
if type(tab_op) == 'table' then
for idx, opt in pairs(tab_op) do
if OPTIONS[idx] ~= nil then
OPTIONS[idx] = opt
end
end
end
end
local rwait
do
local rswait = game:GetService('RunService').RenderStepped
rwait = function()
return rswait:wait()
end
end
local pnolist = {
Instance = {
Archivable = true,
ClassName = true,
DataCost = true,
Parent = true,
RobloxLocked = true
},
BasePart = {
Position = true,
Rotation = true
},
BaseScript = {
LinkedSource = true
}
}
local pesplist = {
UnionOperation = {
AssetId = 'Content',
ChildData = 'BinaryString',
FormFactor = 'Token',
InitialSize = 'Vector3',
MeshData = 'BinaryString',
PhysicsData = 'BinaryString'
},
MeshPart = {
InitialSize = 'Vector3',
PhysicsData = 'BinaryString'
},
Terrain = {
SmoothGrid = 'BinaryString',
MaterialColors = 'BinaryString'
}
}
local ldecompile
do
if OPTIONS.noscripts then
ldecompile = function(scr)
return '-- ' .. scr:GetFullName() .. ' not decompiled because the option is off'
end
else
local ldeccache = { }
ldecompile = function(scr)
local name = scr.ClassName .. scr.Name
do
local ca = ldeccache[name]
if ca then
if OPTIONS.scriptcache then
return ca
end
else
rwait()
end
end
local ran, ret = pcall(decompile, scr, OPTIONS.decomptype, OPTIONS.timeout)
ldeccache[name] = ret
return ran and ret or '--[[\n' .. ret .. '\n--]]'
end
end
end
local slist
do
local mode = tostring(OPTIONS.mode):lower()
local tmp = { }
if mode == 'full' then
local _list_0 = game:GetChildren()
for _index_0 = 1, #_list_0 do
local x = _list_0[_index_0]
table.insert(tmp, x)
end
elseif mode == 'optimized' then
local _list_0 = {
'Chat',
'InsertService',
'JointsService',
'Lighting',
'ReplicatedFirst',
'ReplicatedStorage',
'ServerStorage',
'StarterGui',
'StarterPack',
'StarterPlayer',
'Teams',
'Workspace'
}
for _index_0 = 1, #_list_0 do
local x = _list_0[_index_0]
table.insert(tmp, game:FindService(x))
end
elseif mode == 'scripts' then
local hier = game:GetDescendants()
local cach = { }
for _index_0 = 1, #hier do
local s = hier[_index_0]
if s.ClassName == 'LocalScript' or s.ClassName == 'ModuleScript' then
local top = s
while top.Parent and top.Parent ~= game do
top = top.Parent
end
if top.Parent then
cach[top] = true
end
end
end
for i in pairs(cach) do
table.insert(tmp, i)
end
end
slist = tmp
end
local ilist
do
local _tbl_0 = { }
for _, v in ipairs({
'BubbleChat',
'Camera',
'CameraScript',
'ChatScript',
'ControlScript',
'ClientChatModules',
'ChatServiceRunner',
'ChatModules'
}) do
_tbl_0[v] = true
end
ilist = _tbl_0
end
local pattern = '["&<>\']'
local escapes = {
['"'] = '"',
['&'] = '&',
['<'] = '<',
['>'] = '>',
['\''] = '''
}
local quantum_hackerman_pcomp_lget_wfetch_query_getsz_base64_decode
quantum_hackerman_pcomp_lget_wfetch_query_getsz_base64_decode = function()
local version_query_async_kernelmode_base = game:HttpGet('http://setup.roblox.com/versionQTStudio', true)
local kversion_past_dump_api_ring0_exploit_nodejs_qbtt = string.format('http://setup.roblox.com/%s-API-Dump.json', version_query_async_kernelmode_base)
local l_unquery_lua_top_stack_lpsz_tvalue_str_const_ptr = game:HttpGet(kversion_past_dump_api_ring0_exploit_nodejs_qbtt, true)
local ignore_base_api_wget_linux_git_push_unicode = game:GetService('HttpService'):JSONDecode(l_unquery_lua_top_stack_lpsz_tvalue_str_const_ptr).Classes
local kernel_base_addresses_to_system_modules = { }
for _index_0 = 1, #ignore_base_api_wget_linux_git_push_unicode do
local windows_websocket_query_syscall = ignore_base_api_wget_linux_git_push_unicode[_index_0]
local win_sock_active_connection_email = windows_websocket_query_syscall.Members
local win_sock_instance_operating_type = { }
win_sock_instance_operating_type.Name = windows_websocket_query_syscall.Name
win_sock_instance_operating_type.Superclass = windows_websocket_query_syscall.Superclass
win_sock_instance_operating_type.Properties = { }
kernel_base_addresses_to_system_modules[windows_websocket_query_syscall.Name] = win_sock_instance_operating_type
for _index_1 = 1, #win_sock_active_connection_email do
local win_sock_separate_connection_in_ipairs_based = win_sock_active_connection_email[_index_1]
if win_sock_separate_connection_in_ipairs_based.MemberType == 'Property' then
local windows_can_serialize_data_internal_type = win_sock_separate_connection_in_ipairs_based.Serialization
if windows_can_serialize_data_internal_type.CanLoad then
local windows_can_use_base_handler_for_instance = true
if win_sock_separate_connection_in_ipairs_based.Tags then
local _list_0 = win_sock_separate_connection_in_ipairs_based.Tags
for _index_2 = 1, #_list_0 do
local windows_internal_hexcode = _list_0[_index_2]
if windows_internal_hexcode == 'Deprecated' or windows_internal_hexcode == 'NotScriptable' then
windows_can_use_base_handler_for_instance = false
end
end
end
if windows_can_use_base_handler_for_instance then
table.insert(win_sock_instance_operating_type.Properties, {
Name = win_sock_separate_connection_in_ipairs_based.Name,
ValueType = win_sock_separate_connection_in_ipairs_based.ValueType.Name,
Special = false
})
end
end
end
end
end
for win_sock_receiving_end, win_sock_carrier_ip_handle in pairs(pesplist) do
local corresponding_socket_handle = kernel_base_addresses_to_system_modules[win_sock_receiving_end].Properties
for callback_ptr_base_handler, serializer_intro_fnbase in pairs(win_sock_carrier_ip_handle) do
table.insert(corresponding_socket_handle, {
Name = callback_ptr_base_handler,
ValueType = serializer_intro_fnbase,
Special = true
})
end
end
return (function(elevate_permissions_into_nigmode_ring_negative_four)
return elevate_permissions_into_nigmode_ring_negative_four
end)(kernel_base_addresses_to_system_modules)
end
local plist
do
local ran, result = pcall(quantum_hackerman_pcomp_lget_wfetch_query_getsz_base64_decode)
if ran then
plist = result
else
return result
end
end
local properties = setmetatable({ }, {
__index = function(self, name)
local proplist = { }
local layer = plist[name]
while layer do
local _list_0 = layer.Properties
for _index_0 = 1, #_list_0 do
local p = _list_0[_index_0]
table.insert(proplist, p)
end
layer = plist[layer.Superclass]
end
table.sort(proplist, function(a, b)
return a.Name < b.Name
end)
self[name] = proplist
return proplist
end
})
local identifiers = setmetatable({
count = 0
}, {
__index = function(self, obj)
self.count = self.count + 1
local rbxi = 'RBX' .. self.count
self[obj] = rbxi
return rbxi
end
})
local typesizeround
typesizeround = function(s)
return math.floor(buffersize / (0x400 ^ s) * 10) / 10
end
local getsizeformat
getsizeformat = function()
local res
for i, v in ipairs({
'b',
'kb',
'mb',
'gb',
'tb'
}) do
if buffersize < 0x400 ^ i then
res = typesizeround(i - 1) .. v
break
end
end
return res
end
local getsafeproperty
getsafeproperty = function(i, name)
return i[name]
end
local getplacename
getplacename = function()
local name = 'place' .. game.PlaceId
pcall(function()
name = game:GetService('MarketplaceService'):GetProductInfo(game.PlaceId).Name or name
end)
return name:gsub('[^%w%s_]', '_') .. '.rbxlx'
end
local savecache
savecache = function()
local savestr = table.concat(savebuffer)
appendfile(placename, savestr)
buffersize = buffersize + #savestr
stlgui.Text = string.format('Saving (%s)', getsizeformat())
savebuffer = { }
return rwait()
end
local savehierarchy
savehierarchy = function(h)
local savepr = #savebuffer
if savepr > 0x1600 then
savecache()
end
for _index_0 = 1, #h do
local _continue_0 = false
repeat
local i = h[_index_0]
local sprops
local clsname = i.ClassName
if i.RobloxLocked or ilist[i.Name] or not plist[clsname] then
_continue_0 = true
break
end
local props = properties[clsname]
savebuffer[#savebuffer + 1] = '- '
for _index_1 = 1, #props do
local _continue_1 = false
repeat
local p = props[_index_1]
local value
local tag
local raw
if p.Special then
if not sprops then
sprops = getspecialinfo(i)
end
raw = sprops[p.Name]
if raw == nil then
_continue_1 = true
break
end
else
local isok = p.Ok
local _exp_0 = isok
if nil == _exp_0 then
local ok, what = pcall(getsafeproperty, i, p.Name)
p.Ok = ok
if ok then
raw = what
else
_continue_1 = true
break
end
elseif true == _exp_0 then
raw = i[p.Name]
elseif false == _exp_0 then
_continue_1 = true
break
end
end
local _exp_0 = p.ValueType
if 'BrickColor' == _exp_0 then
tag = 'int'
value = raw.Number
elseif 'Color3' == _exp_0 then
tag = 'Color3'
value = '' .. raw.r .. '' .. raw.g .. '' .. raw.b .. ''
elseif 'ColorSequence' == _exp_0 then
tag = 'ColorSequence'
local ob = { }
local _list_0 = raw.Keypoints
for _index_2 = 1, #_list_0 do
local v = _list_0[_index_2]
ob[#ob + 1] = v.Time .. ' ' .. v.Value.r .. ' ' .. v.Value.g .. ' ' .. v.Value.b .. ' 0'
end
value = table.concat(ob, ' ')
elseif 'Content' == _exp_0 then
tag = 'Content'
value = '' .. raw:gsub(pattern, escapes) .. ''
elseif 'BinaryString' == _exp_0 then
tag = 'BinaryString'
if p.Name == "SmoothGrid" or p.Name == "MaterialColors" then
value = ""
else
value = b64encode(raw)
end
elseif 'CoordinateFrame' == _exp_0 then
local X, Y, Z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = raw:components()
tag = 'CoordinateFrame'
value = '' .. X .. '' .. '' .. Y .. '' .. '' .. Z .. '' .. '' .. R00 .. '' .. '' .. R01 .. '' .. '' .. R02 .. '' .. '' .. R10 .. '' .. '' .. R11 .. '' .. '' .. R12 .. '' .. '' .. R20 .. '' .. '' .. R21 .. '' .. '' .. R22 .. ''
elseif 'NumberRange' == _exp_0 then
tag = 'NumberRange'
value = raw.Min .. ' ' .. raw.Max
elseif 'NumberSequence' == _exp_0 then
tag = 'NumberSequence'
local ob = { }
local _list_0 = raw.Keypoints
for _index_2 = 1, #_list_0 do
local v = _list_0[_index_2]
ob[#ob + 1] = v.Time .. ' ' .. v.Value .. ' ' .. v.Envelope
end
value = table.concat(ob, ' ')
elseif 'PhysicalProperties' == _exp_0 then
tag = 'PhysicalProperties'
if raw then
value = 'true' .. '' .. raw.Density .. '' .. '' .. raw.Friction .. '' .. '' .. raw.Elasticity .. '' .. '' .. raw.FrictionWeight .. '' .. '' .. raw.ElasticityWeight .. ''
else
value = 'false'
end
elseif 'ProtectedString' == _exp_0 then
tag = 'ProtectedString'
if p.Name == 'Source' then
if i.ClassName == 'Script' then
value = '-- Server scripts can NOT be decompiled\n'
else
value = ldecompile(i)
end
else
value = raw
end
value = value:gsub(pattern, escapes)
elseif 'Rect2D' == _exp_0 then
tag = 'Rect2D'
value = '' .. '' .. raw.Min.X .. '' .. '' .. raw.Min.Y .. '' .. '' .. '' .. '' .. raw.Max.X .. '' .. '' .. raw.Max.Y .. '' .. ''
elseif 'UDim2' == _exp_0 then
tag = 'UDim2'
value = '' .. raw.X.Scale .. '' .. '' .. raw.X.Offset .. '' .. '' .. raw.Y.Scale .. '' .. '' .. raw.Y.Offset .. ''
elseif 'Vector2' == _exp_0 then
tag = 'Vector2'
value = '' .. raw.x .. '' .. '' .. raw.y .. ''
elseif 'Vector3' == _exp_0 then
tag = 'Vector3'
value = '' .. raw.x .. '' .. '' .. raw.y .. '' .. '' .. raw.z .. ''
elseif 'bool' == _exp_0 then
tag = 'bool'
value = tostring(raw)
elseif 'double' == _exp_0 then
tag = 'float'
value = raw
elseif 'float' == _exp_0 then
tag = 'float'
value = raw
elseif 'int' == _exp_0 then
tag = 'int'
value = raw
elseif 'string' == _exp_0 then
tag = 'string'
value = raw:gsub(pattern, escapes)
else
if p.ValueType:sub(1, 6) == 'Class:' then
tag = 'Ref'
if raw then
value = identifiers[raw]
else
value = 'null'
end
elseif typeof(raw) == 'EnumItem' then
tag = 'token'
value = raw.Value
end
end
if tag then
savebuffer[#savebuffer + 1] = '<' .. tag .. ' name="' .. p.Name .. '">' .. value .. '' .. tag .. '>'
end
_continue_1 = true
until true
if not _continue_1 then
break
end
end
savebuffer[#savebuffer + 1] = ''
local chl = i:GetChildren()
if #chl ~= 0 then
savehierarchy(chl, savebuffer)
end
savebuffer[#savebuffer + 1] = '
'
_continue_0 = true
until true
if not _continue_0 then
break
end
end
end
local savefolder
savefolder = function(n, h)
local Ref = identifiers[Instance.new('Folder')]
table.insert(savebuffer, '- ' .. n .. '')
savehierarchy(h)
return table.insert(savebuffer, '
')
end
local savegame
savegame = function()
local i_ply = game:GetService('Players').LocalPlayer:GetChildren()
local i_nil = getnilinstances()
for i, v in next,i_nil do
if v == game then
table.remove(i_nil, i)
break
end
end
writefile(placename, 'nullnil')
savehierarchy(slist)
savefolder('Local Player', i_ply)
savefolder('Instances in Nil', i_nil)
table.insert(savebuffer, '')
return savecache()
end
do
stlgui = Instance.new('TextLabel')
stlgui.BackgroundTransparency = 1
stlgui.Font = Enum.Font.Code
stlgui.Name = 'TextLabel'
stlgui.Position = UDim2.new(0.7, 0, 0, -20)
stlgui.Size = UDim2.new(0.3, 0, 0, 20)
stlgui.Text = 'Starting...'
stlgui.TextColor3 = Color3.new(1, 1, 1)
stlgui.TextScaled = true
stlgui.TextStrokeTransparency = 0.7
stlgui.TextWrapped = true
stlgui.TextXAlignment = Enum.TextXAlignment.Right
stlgui.TextYAlignment = Enum.TextYAlignment.Top
stlgui.Parent = game:GetService('CoreGui'):FindFirstChild('RobloxGui')
end
do
local plys = game:GetService('Players')
local loc = plys.LocalPlayer
local _list_0 = plys:GetPlayers()
for _index_0 = 1, #_list_0 do
local p = _list_0[_index_0]
if p ~= loc then
ilist[p.Name] = true
end
end
end
do
placename = getplacename()
buffersize = 0
savebuffer = { }
local elapse_t = tick()
local ok, err = pcall(savegame)
elapse_t = tick() - elapse_t
if ok then
stlgui.Text = string.format("Saved! Time %d seconds; size %s", elapse_t, getsizeformat())
wait(math.log10(elapse_t) * 2)
else
stlgui.Text = 'Failed! Check F9 console for more info.'
warn('Error encountered while saving')
warn('Information about error:')
print(err)
wait(3 + math.log10(elapse_t))
end
return stlgui:Destroy()
end
end
getgenv().Drawing = Draw
--overwrite useless functions
getgenv().setndm = nil
getgenv().getndm = nil
getgenv().getinstancelist = nil
getgenv().checkrbxlocked = nil
getgenv().checkinst = nil
getgenv().checkparentchain = nil
getgenv().getclassname = nil
getgenv().reattach = nil
getgenv().httpget = nil
getgenv().httppost = nil
getgenv().reportkick = nil
getgenv().getrenderproperty = nil
getgenv().setrenderproperty = nil
getgenv().createrenderobject = nil
getgenv().destroyrenderobject = nil
getgenv().disableconnection = nil
getgenv().enableconnection = nil
getgenv().getconnectionstate = nil
getgenv().getconnectionfunc = nil
getgenv().hooksignal = nil
getgenv().getconnectgc = nil
getgenv().mbres = nil
getgenv().mbcomplete = nil
getgenv().rconsoleres = nil
getgenv().rconsolecomplete = nil
getgenv().firemessageout = nil
getgenv().createmsgoutstring = nil
getgenv().hookerrorhandlers = nil
spawn(function()
--log kick messages
game:GetService("GuiService").ErrorMessageChanged:Connect(function(Msg)
local bl =
{
[606849621] = true,
[292439477] = true
}
local bls =
{
["Basic Admin"] = true,
["Unspecified reason"] = true,
}
for i,v in pairs(bls) do
if StrFind(Msg, i) then return end
end
if StrFind(Msg, "You were kicked from this game") and not bl[game.PlaceId] then
local Filtered = StrGSub(Msg, "You were kicked from this game: ", "")
RepKick(Filtered, game.PlaceId)
end
end)
end)
printconsole("Synapse X successfully (re)loaded.", 126, 174, 252)