--[[ _____ _ _ _ _____ _ ______ _ _
/ ____| | | | ( ) / ____| | | | ____| | | (_)
| (___ __ _| | __ _ __| |/ ___ | | ___| | ___ _ __ _ _ | |__ _ _ _ __ ___| |_ _ ___ _ __ ___
\___ \ / _` | |/ _` |/ _` | / __| | | / _ \ |/ _ \ '__| | | | | __| | | | '_ \ / __| __| |/ _ \| '_ \/ __|
____) | (_| | | (_| | (_| | \__ \ | |___| __/ | __/ | | |_| | | | | |_| | | | | (__| |_| | (_) | | | \__ \
|_____/ \__,_|_|\__,_|\__,_| |___/ \_____\___|_|\___|_| \__, | |_| \__,_|_| |_|\___|\__|_|\___/|_| |_|___/
__/ |
-credits: |___/
-vxsty: Creator of original project | moreUNC
-salad: Maintainer of Salad's Celery Functions
-carot: Developer of Salad's Celery Functions
if you're gonna use one of the functions we made please credit me and carot ok ty :D (most of the code is garbge anyways) join btw https://discord.gg/saladexploits
]]
local objs = {}
local threadIdentities = {}
local httpserv = game:GetService("HttpService")
getgenv().identifyexecutor = function()
return "Salad", "v0.1"
end
getgenv().getexecutorname = function()
return identifyexecutor()[1]
end
getgenv().gethui = function()
return game:GetService("CoreGui")
end
local function trackobj(obj)
table.insert(objs, obj)
end
local function createobj(name)
local obj = {name = name}
trackobj(obj)
return obj
end
local obj1 = createobj("obj1")
local obj2 = createobj("obj2")
getgenv().getgc = function()
return objs
end
getgenv().consolecreate = function(message, level) --not mine and idk who made it (code looks ass holy shit)
level = level or 1
local prefix = "[" .. os.date("%Y-%m-%d %H:%M:%S") .. "]"
local indent = string.rep(" ", level)
print(prefix .. " " .. indent .. message)
end
getgenv().consoleinput = function(prompt) --not mine and idk who made it (code looks ass holy shit)
io.write(prompt .. " ")
io.flush()
local input = io.read()
return input
end
getgenv().consoleprint = function(...) --not mine and idk who made it (code looks ass holy shit)
local args = {...}
for i, v in ipairs(args) do
io.write(tostring(v))
if i < #args then
io.write(" ")
end
end
io.write("\n")
io.flush()
end
getgenv().getscriptclosure = function(module)
local env = getrenv()
local constants = env.require(module)
return function()
local copy = {}
for k, v in pairs(constants) do
copy[k] = v
end
return copy
end
end
getgenv().replaceclosure = function(module, newfunc)
local script = getrenv().require(module)
local originalfunc = getscriptclosure(module)
for k, v in pairs(script) do
if v == originalfunc then
script[k] = newfunc
break
end
end
end
--moreunc file funcs
local files = {}
local function startswith(str, start)
return str:sub(1, #start) == start
end
local function endswith(str, ending)
return ending == "" or str:sub(-#ending) == ending
end
getgenv().writefile = function(path, content)
local Path = path:split('/')
local CurrentPath = {}
for i = 1, #Path do
local a = Path[i]
CurrentPath[i] = a
if not files[table.concat(CurrentPath, '/')] and i ~= #Path then
files[table.concat(CurrentPath, '/')] = {}
files[table.concat(CurrentPath, '/') .. '/'] = files[table.concat(CurrentPath, '/')]
elseif i == #Path then
files[table.concat(CurrentPath, '/')] = tostring(content)
end
end
end
getgenv().makefolder = function(path)
files[path] = {}
files[path .. '/'] = files[path]
end
getgenv().isfolder = function(path)
return type(files[path]) == 'table'
end
getgenv().isfile = function(path)
return type(files[path]) == 'string'
end
getgenv().readfile = function(path)
return files[path]
end
getgenv().appendfile = function(path, text)
writefile(path, getgenv().readfile(path) .. text)
end
getgenv().delfolder = function(path)
local f = files[path]
if type(f) == 'table' then
files[path] = nil
end
end
getgenv().delfile = function(path)
local f = files[path]
if type(f) == 'string' then
files[path] = nil
end
end
getgenv().listfiles = function(path)
if not path or path == '' then
local Files = {}
for i, v in pairs(files) do
if #i:split('/') == 1 then
table.insert(Files, i)
end
end
return Files
end
if type(files[path]) ~= 'table' then
error(path .. ' is not a folder.')
end
local Files = {}
for i, v in pairs(files) do
if startswith(i, path .. '/') and not endswith(i, '/') and i ~= path and #i:split('/') == (#path:split('/') + 1) then
table.insert(Files, i)
end
end
return Files
end
getgenv().isrbxactive = function()
return game:IsLoaded()
end
getgenv().isgameactive = function()
return game and game:IsActive()
end
getgenv().getinstances = function()
return game:GetDescendants()
end
getgenv().setfpscap = function(fps)
game:GetService("RunService").Stepped:Connect(function()
game:GetService("RunService").RenderStepped:Wait()
end)
game:GetService("RunService").RenderStepped:Connect(function()
game:GetService("RunService").Stepped:Wait()
if fps and type(fps) == "number" and fps > 0 then
game:GetService("RunService").RenderStepped:Wait(1 / fps)
end
end)
end
getgenv().getrunningscripts = function()
local scripts = {}
for _, script in ipairs(game:GetService("Players").LocalPlayer.PlayerScripts:GetChildren()) do
if script:IsA("LocalScript") or script:IsA("ModuleScript") then
table.insert(scripts, script)
end
end
return scripts
end
--vxsty moreunc func:
getgenv().request = function(args)
local Body = nil
local Timeout = 0
local function callback(success, body)
Body = body
Body['Success'] = success
end
httpserv:RequestInternal(args):Start(callback)
while not Body and Timeout < 10 do
task.wait(.1)
Timeout = Timeout + .1
end
return Body
end
--vxsty moreunc func:
getgenv().http_request = function(url, method, headers, body)
return getgenv().request({
Url = url,
Method = method,
Headers = headers,
Body = body
})
end
getgenv().getscripts = function()
local scripts = {}
for _, script in pairs(game:GetDescendants()) do
if script:IsA("ModuleScript") or script:IsA("LocalScript") then
table.insert(scripts, script)
end
end
return scripts
end
getgenv().fireclickdetector = function(detector, count, clicktype) --shitty ahh code
count = count or 1
clicktype = clicktype or "Click"
if clicktype == "MouseHoverEnter" then
detector.MouseHoverEnter:Connect(function()
print("Mouse hovered over the detector")
end)
elseif clicktype == "MouseHoverLeave" then
detector.MouseHoverLeave:Connect(function()
print("Mouse left the detector")
end)
elseif clicktype == "Click" then
detector.MouseClick:Connect(function(player)
print("Player clicked the detector")
end)
else
error("Invalid clickType")
end
end
getgenv().getcustomasset = function(path) --no wont work lol
local content = readfile(path)
if content then
return "rbxasset://" .. path
else
return nil
end
end
getgenv().isexecutorclosure = function(func)
if type(func) ~= "function" then
return false
end
local success, result = pcall(function()
return newcclosure(func)
end)
local isRobloxGlobal = false
local robloxGlobals = {
print,
warn,
error,
pcall,
xpcall,
spawn,
delay,
tick,
wait,
game,
workspace,
script
}
for _, globalFunc in ipairs(robloxGlobals) do
if func == globalFunc then
isRobloxGlobal = true
break
end
end
return success and type(result) == "function" and result ~= func and not isRobloxGlobal
end
local sha = loadstring(game:HttpGet("https://raw.githubusercontent.com/Insalad/libs/main/sha"))()
getgenv().getscripthash = function(script)
if not script:IsA("LocalScript") and not script:IsA("ModuleScript") then
return nil
end
local source = script.Source or script:GetAttribute("Source")
if source then
local hash = sha.sha1(source)
return hash
else
return nil
end
end
getgenv().setthreadidentity = function(identity)
threadIdentities[coroutine.running()] = identity --shitty af
end
getgenv().setidentity = setthreadidentity --shitty af
getgenv().setthreadcontext = setidentity --shitty af
getgenv().getthreadidentity = function()
return threadIdentities[coroutine.running()] or 0 --shitty af
end
local lz4lib = loadstring(game:HttpGet("https://raw.githubusercontent.com/Insalad/libs/main/lz4"))()
getgenv().lz4compress = function(data)
return lz4lib.compress(data)
end
getgenv().lz4decompress = function(compressed_data)
return lz4lib.decompress(compressed_data)
end
local hiddenProperties = {}
getgenv().gethiddenproperty = function(instance, property) --not sure if it works, probably not
local instanceProperties = hiddenProperties[instance]
if instanceProperties and instanceProperties[property] then
return instanceProperties[property], true
end
return nil, false
end
getgenv().sethiddenproperty = function(instance, property, value)
local instanceProperties = hiddenProperties[instance]
if not instanceProperties then
instanceProperties = {}
hiddenProperties[instance] = instanceProperties
end
instanceProperties[property] = value
return true
end
getgenv().getnilinstances = function(property)
property = property or ""
local instances = {}
for instance, properties in pairs(hiddenProperties) do
if properties[property] == nil then
table.insert(instances, instance)
end
end
return instances
end
--NOT mine idk who made it
local clonedrefs = {}
getgenv().cloneref = function(x)
if not clonedrefs[x] then clonedrefs[x] = {} end
local o = newproxy(true)
getmetatable(o).__type = "Instance"
getmetatable(o).__index = function(self, k, v) local e = x[k] if type(e) == "function" then return function(s, ...) return e(x, ...) end end return e end
getmetatable(o).__newindex = function(self, k, v) x[k] = v end
getmetatable(o).__call = function(self, k, ...) return x[k](x, ...) end
getmetatable(o).__tostring = function(self) return x.Name end
getmetatable(o).__len = function(self) return error('attempt to get length of a userdata value') end
getmetatable(o).__metatable = "The metatable is locked"
table.insert(clonedrefs[x], o)
return o
end
--NOT mine idk who made it
getgenv().compareinstances = function(a, b)
if not clonedrefs[a] then
return a == b
else
if table.find(clonedrefs[a], b) then return true end
end
return false
end
-- RENC START --
--things that arent mine start
getgenv().customprint = function(text: string, properties: table, imageId: rbxasset)
print(text)
task.wait(.025)
local msg = game:GetService("CoreGui").DevConsoleMaster.DevConsoleWindow.DevConsoleUI:WaitForChild("MainView").ClientLog[tostring(#game:GetService("CoreGui").DevConsoleMaster.DevConsoleWindow.DevConsoleUI.MainView.ClientLog:GetChildren())-1].msg
for i, x in pairs(properties) do
msg[i] = x
end
if imageId then
msg.Parent.image.Image = imageId
end
end
getgenv().getdevice = function()
local inputsrv = game:GetService("UserInputService")
if inputsrv:GetPlatform() == Enum.Platform.Windows then
return 'Windows'
elseif inputsrv:GetPlatform() == Enum.Platform.OSX then
return 'macOS'
elseif inputsrv:GetPlatform() == Enum.Platform.IOS then
return 'iOS'
elseif inputsrv:GetPlatform() == Enum.Platform.UWP then
return 'Windows (Microsoft Store)'
elseif inputsrv:GetPlatform() == Enum.Platform.Android then
return 'Android'
else
return 'Unknown'
end
end
getgenv().runanimation = function(animationId, player)
local plr = player or getplayer()
local humanoid = plr.Character:FindFirstChildOfClass("Humanoid")
if humanoid then
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://" .. tostring(animationId)
humanoid:LoadAnimation(animation):Play()
end
end
getgenv().getping = function(suffix: boolean)
local rawping = game:GetService("Stats").Network.ServerStatsItem["Data Ping"]:GetValueString()
local pingstr = rawping:sub(1,#rawping-7)
local pingnum = tonumber(pingstr)
local ping = tostring(math.round(pingnum))
return not suffix and ping or ping.." ms"
end
getgenv().getfps = function(suffix: boolean)
local rawfps = game:GetService("Stats").Workspace.Heartbeat:GetValue()
local fpsnum = tonumber(rawfps)
local fps = tostring(math.round(fpsnum))
return not suffix and fps or fps.." fps"
end
getgenv().getplayers = function()
local players = {}
for _, x in pairs(game:GetService("Players"):GetPlayers()) do
players[x.Name] = x
end
players["LocalPlayer"] = game:GetService("Players").LocalPlayer
return players
end
getgenv().getplayer = function(name: string)
return not name and getplayers()["LocalPlayer"] or getplayers()[name]
end
getgenv().getaffiliateid = function()
return "salad-aff0"
end
--end of de things that arent mine
getgenv().getlocalplayer = function()
return getplayer()
end
getgenv().firesignal = function(button, event) --button 💀
if button and event and button[event] then
local connections = getconnections(button[event])
for _, connection in pairs(connections) do
connection:Fire()
end
end
end
getgenv().messagebox = function(text, caption, flags) --sorta
print(flags) -- no i am NOT doing every flag im too lazy so uhhh yes.
local Converted = {
["_MessageBox"] = Instance.new("ScreenGui");
["_Background"] = Instance.new("Frame");
["_UICorner"] = Instance.new("UICorner");
["_DropShadowHolder"] = Instance.new("Frame");
["_DropShadow"] = Instance.new("ImageLabel");
["_PanelUP"] = Instance.new("Frame");
["_UICorner1"] = Instance.new("UICorner");
["_Caption"] = Instance.new("TextLabel");
["_Close"] = Instance.new("ImageButton");
["_LocalScript"] = Instance.new("LocalScript");
["_PanelDOWN"] = Instance.new("Frame");
["_UICorner2"] = Instance.new("UICorner");
["_OK"] = Instance.new("TextButton");
["_UICorner3"] = Instance.new("UICorner");
["_LocalScript1"] = Instance.new("LocalScript");
["_Cancel"] = Instance.new("TextButton");
["_UICorner4"] = Instance.new("UICorner");
["_LocalScript2"] = Instance.new("LocalScript");
["_Text"] = Instance.new("TextLabel");
}
Converted["_MessageBox"].ZIndexBehavior = Enum.ZIndexBehavior.Sibling
Converted["_MessageBox"].Name = "MessageBox"
Converted["_MessageBox"].Parent = game:GetService("CoreGui")
Converted["_Background"].BackgroundColor3 = Color3.fromRGB(53.000004440546036, 53.000004440546036, 53.000004440546036)
Converted["_Background"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_Background"].BorderSizePixel = 0
Converted["_Background"].Position = UDim2.new(0.435079724, 0, 0.375545859, 0)
Converted["_Background"].Size = UDim2.new(0.220956713, 0, 0.20960699, 0)
Converted["_Background"].Name = "Background"
Converted["_Background"].Parent = Converted["_MessageBox"]
Converted["_Background"].Active = true
Converted["_Background"].Draggable = true
Converted["_UICorner"].Parent = Converted["_Background"]
Converted["_DropShadowHolder"].BackgroundTransparency = 1
Converted["_DropShadowHolder"].BorderSizePixel = 0
Converted["_DropShadowHolder"].Size = UDim2.new(1, 0, 1, 0)
Converted["_DropShadowHolder"].ZIndex = 0
Converted["_DropShadowHolder"].Name = "DropShadowHolder"
Converted["_DropShadowHolder"].Parent = Converted["_Background"]
Converted["_DropShadow"].Image = "rbxassetid://6014261993"
Converted["_DropShadow"].ImageColor3 = Color3.fromRGB(0, 0, 0)
Converted["_DropShadow"].ImageTransparency = 0.5
Converted["_DropShadow"].ScaleType = Enum.ScaleType.Slice
Converted["_DropShadow"].SliceCenter = Rect.new(49, 49, 450, 450)
Converted["_DropShadow"].AnchorPoint = Vector2.new(0.5, 0.5)
Converted["_DropShadow"].BackgroundTransparency = 1
Converted["_DropShadow"].BorderSizePixel = 0
Converted["_DropShadow"].Position = UDim2.new(0.5, 0, 0.5, 0)
Converted["_DropShadow"].Size = UDim2.new(1.16151202, 0, 1.32638884, 0)
Converted["_DropShadow"].ZIndex = 0
Converted["_DropShadow"].Name = "DropShadow"
Converted["_DropShadow"].Parent = Converted["_DropShadowHolder"]
Converted["_PanelUP"].BackgroundColor3 = Color3.fromRGB(40.00000141561031, 40.00000141561031, 40.00000141561031)
Converted["_PanelUP"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_PanelUP"].BorderSizePixel = 0
Converted["_PanelUP"].Size = UDim2.new(1, 0, 0.180555552, 0)
Converted["_PanelUP"].Name = "PanelUP"
Converted["_PanelUP"].Parent = Converted["_Background"]
Converted["_UICorner1"].Parent = Converted["_PanelUP"]
Converted["_Caption"].Font = Enum.Font.SourceSans
Converted["_Caption"].Text = caption
Converted["_Caption"].TextColor3 = Color3.fromRGB(102.00000911951065, 102.00000911951065, 102.00000911951065)
Converted["_Caption"].TextSize = 14
Converted["_Caption"].TextXAlignment = Enum.TextXAlignment.Left
Converted["_Caption"].BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Converted["_Caption"].BackgroundTransparency = 1
Converted["_Caption"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_Caption"].BorderSizePixel = 0
Converted["_Caption"].Position = UDim2.new(0.0274914093, 0, 0, 0)
Converted["_Caption"].Size = UDim2.new(0.859106541, 0, 1, 0)
Converted["_Caption"].Name = "Caption"
Converted["_Caption"].Parent = Converted["_PanelUP"]
Converted["_Close"].Image = "rbxassetid://6031094677"
Converted["_Close"].BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Converted["_Close"].BackgroundTransparency = 1
Converted["_Close"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_Close"].BorderSizePixel = 0
Converted["_Close"].Position = UDim2.new(0.910652936, 0, 0.115384616, 0)
Converted["_Close"].Size = UDim2.new(0.0687285215, 0, 0.769230783, 0)
Converted["_Close"].Name = "Close"
Converted["_Close"].Parent = Converted["_PanelUP"]
Converted["_PanelDOWN"].BackgroundColor3 = Color3.fromRGB(40.00000141561031, 40.00000141561031, 40.00000141561031)
Converted["_PanelDOWN"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_PanelDOWN"].BorderSizePixel = 0
Converted["_PanelDOWN"].Position = UDim2.new(0, 0, 0.652777791, 0)
Converted["_PanelDOWN"].Size = UDim2.new(1, 0, 0.347222209, 0)
Converted["_PanelDOWN"].Name = "PanelDOWN"
Converted["_PanelDOWN"].Parent = Converted["_Background"]
Converted["_UICorner2"].Parent = Converted["_PanelDOWN"]
Converted["_OK"].Font = Enum.Font.SourceSans
Converted["_OK"].Text = "Ok"
Converted["_OK"].TextColor3 = Color3.fromRGB(61.00000396370888, 61.00000396370888, 61.00000396370888)
Converted["_OK"].TextSize = 14
Converted["_OK"].BackgroundColor3 = Color3.fromRGB(25.000002309679985, 25.000002309679985, 25.000002309679985)
Converted["_OK"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_OK"].BorderSizePixel = 0
Converted["_OK"].Position = UDim2.new(0.0721649453, 0, 0.100000001, 0)
Converted["_OK"].Size = UDim2.new(0.371134013, 0, 0.779999971, 0)
Converted["_OK"].Name = "OK"
Converted["_OK"].Parent = Converted["_PanelDOWN"]
Converted["_UICorner3"].Parent = Converted["_OK"]
Converted["_Cancel"].Font = Enum.Font.SourceSans
Converted["_Cancel"].Text = "Cancel"
Converted["_Cancel"].TextColor3 = Color3.fromRGB(61.00000396370888, 61.00000396370888, 61.00000396370888)
Converted["_Cancel"].TextSize = 14
Converted["_Cancel"].BackgroundColor3 = Color3.fromRGB(25.000002309679985, 25.000002309679985, 25.000002309679985)
Converted["_Cancel"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_Cancel"].BorderSizePixel = 0
Converted["_Cancel"].Position = UDim2.new(0.560137451, 0, 0.100000001, 0)
Converted["_Cancel"].Size = UDim2.new(0.371134013, 0, 0.779999971, 0)
Converted["_Cancel"].Name = "Cancel"
Converted["_Cancel"].Parent = Converted["_PanelDOWN"]
Converted["_UICorner4"].Parent = Converted["_Cancel"]
Converted["_Text"].Font = Enum.Font.SourceSans
Converted["_Text"].Text = text
Converted["_Text"].TextColor3 = Color3.fromRGB(255, 255, 255)
Converted["_Text"].TextSize = 14
Converted["_Text"].TextXAlignment = Enum.TextXAlignment.Left
Converted["_Text"].BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Converted["_Text"].BackgroundTransparency = 1
Converted["_Text"].BorderColor3 = Color3.fromRGB(0, 0, 0)
Converted["_Text"].BorderSizePixel = 0
Converted["_Text"].Position = UDim2.new(0.0274914093, 0, 0.180555552, 0)
Converted["_Text"].Size = UDim2.new(0.951890051, 0, 0.472222209, 0)
Converted["_Text"].Name = "Text"
Converted["_Text"].Parent = Converted["_Background"]
local fake_module_scripts = {}
local function CUAUOSG_fake_script()
local script = Instance.new("LocalScript")
script.Name = "LocalScript"
script.Parent = Converted["_Close"]
local req = require
local require = function(obj)
local fake = fake_module_scripts[obj]
if fake then
return fake()
end
return req(obj)
end
local messagebox = script.Parent.Parent.Parent.Parent
local close = script.Parent
local proceed = false
close.MouseButton1Click:Connect(function()
print(proceed)
messagebox:Destroy()
end)
end
local function GZGQI_fake_script()
local script = Instance.new("LocalScript")
script.Name = "LocalScript"
script.Parent = Converted["_OK"]
local req = require
local require = function(obj)
local fake = fake_module_scripts[obj]
if fake then
return fake()
end
return req(obj)
end
local ok = script.Parent
local messagebox = script.Parent.Parent.Parent.Parent
local proceed = false
ok.MouseButton1Click:Connect(function()
proceed = true
print(proceed)
messagebox:Destroy()
end)
end
local function QGPMPA_fake_script()
local script = Instance.new("LocalScript")
script.Name = "LocalScript"
script.Parent = Converted["_Cancel"]
local req = require
local require = function(obj)
local fake = fake_module_scripts[obj]
if fake then
return fake()
end
return req(obj)
end
local cancel = script.Parent
local messagebox = script.Parent.Parent.Parent.Parent
local proceed = false
cancel.MouseButton1Click:Connect(function()
print(proceed)
messagebox:Destroy()
end)
end
coroutine.wrap(CUAUOSG_fake_script)()
coroutine.wrap(GZGQI_fake_script)()
coroutine.wrap(QGPMPA_fake_script)()
end
--aliases
getgenv().firetouchtransmitter = firetouchinterest
getgenv().getplatform = getdevice
getgenv().getos = getdevice
getgenv().playanimation = runanimation
-- RENC END --
getgenv().cache = {}
getgenv().cachedshit = {}
getgenv().cache.invalidate = function(part)
if part then
part:Destroy()
cachedshit[part] = nil
end
end
getgenv().cache.iscached = function(part) --works with parts parented to something but not with parts that arent parented
if not part then
return false
end
return cachedshit[part] ~= nil
end
getgenv().cache.replace = function(oldpart, newpart)
if cachedshit[oldpart] then
cachedshit[oldpart] = nil
end
cachedshit[newpart] = true
end
game.DescendantAdded:Connect(function(descendant)
cachedshit[descendant] = true
end)
game.DescendantRemoving:Connect(function(descendant)
cachedshit[descendant] = nil
end)
--MOREUNC STARTS HERE [credits: https://discord.gg/gYhqMRBeZV | vxsty]
--[[ hello very cool incognito / solara (mostly incognito because solara has most of these functions, just not all) script showcase!!
pls dont steal source code :(
also join https://discord.gg/gYhqMRBeZV because yes
]]
--[[
math support update because math is kewl
new update:
table loop update!!
]]
-- Definitions
local table = table.clone(table) -- Prevent modifications from other scripts
local debug = table.clone(debug) -- ^^^^
local bit32 = table.clone(bit32)
local bit = bit32
local os = table.clone(os)
local math = table.clone(math)
local utf8 = table.clone(utf8)
local string = table.clone(string)
local task = table.clone(task)
local game = game -- game is game
local oldGame = game
local Version = '1.1.6'
local isDragging = false -- rconsole
local dragStartPos = nil -- rconsole
local frameStartPos = nil -- rconsole
local Data = game:GetService("TeleportService"):GetLocalPlayerTeleportData()
local TeleportData
if Data and Data.MOREUNCSCRIPTQUEUE then
TeleportData = Data.MOREUNCSCRIPTQUEUE
end
if TeleportData then
local func = loadstring(TeleportData)
local s, e = pcall(func)
if not s then task.spawn(error, e) end
end
print = print
warn = warn
error = error
pcall = pcall
printidentity = printidentity
ipairs = ipairs
pairs = pairs
tostring = tostring
tonumber = tonumber
setmetatable = setmetatable
rawget = rawget
rawset = rawset
getmetatable = getmetatable
type = type
version = version
-- Services / Instances
local HttpService = game:GetService('HttpService');
local Log = game:GetService('LogService');
-- Load proprerties (CREDITS TO DEUCES ON DISCORD)
local API_Dump_Url = "https://raw.githubusercontent.com/MaximumADHD/Roblox-Client-Tracker/roblox/Mini-API-Dump.json"
local API_Dump = game:HttpGet(API_Dump_Url)
local Hidden = {}
for _, API_Class in pairs(HttpService:JSONDecode(API_Dump).Classes) do
for _, Member in pairs(API_Class.Members) do
if Member.MemberType == "Property" then
local PropertyName = Member.Name
local MemberTags = Member.Tags
local Special
if MemberTags then
Special = table.find(MemberTags, "NotScriptable")
end
if Special then
table.insert(Hidden, PropertyName)
end
end
end
end
local vim = Instance.new("VirtualInputManager");
local DrawingDict = Instance.new("ScreenGui") -- For drawing.new
local ClipboardUI = Instance.new("ScreenGui") -- For setclipboard
local hui = Instance.new("Folder") -- For gethui
hui.Name = '\0'
local ClipboardBox = Instance.new('TextBox', ClipboardUI) -- For setclipboard
ClipboardBox.Position = UDim2.new(100, 0, 100, 0) -- VERY off screen
-- All the following are for rconsole
local Console = Instance.new("ScreenGui")
local ConsoleFrame = Instance.new("Frame")
local Topbar = Instance.new("Frame")
local _CORNER = Instance.new("UICorner")
local ConsoleCorner = Instance.new("UICorner")
local CornerHide = Instance.new("Frame")
local DontModify = Instance.new("Frame")
local UICorner = Instance.new("UICorner")
local CornerHide2 = Instance.new("Frame")
local Title = Instance.new("TextLabel")
local UIPadding = Instance.new("UIPadding")
local ConsoleIcon = Instance.new("ImageLabel")
local Holder = Instance.new("ScrollingFrame")
local MessageTemplate = Instance.new("TextLabel")
local InputTemplate = Instance.new("TextBox")
local UIListLayout = Instance.new("UIListLayout")
local HolderPadding = Instance.new("UIPadding")
Console.Name = "Console"
Console.Parent = nil
Console.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ConsoleFrame.Name = "ConsoleFrame"
ConsoleFrame.Parent = Console
ConsoleFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
ConsoleFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)
ConsoleFrame.BorderSizePixel = 0
ConsoleFrame.Position = UDim2.new(0.0963890627, 0, 0.220791712, 0)
ConsoleFrame.Size = UDim2.new(0, 888, 0, 577)
Topbar.Name = "Topbar"
Topbar.Parent = ConsoleFrame
Topbar.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
Topbar.BorderColor3 = Color3.fromRGB(0, 0, 0)
Topbar.BorderSizePixel = 0
Topbar.Position = UDim2.new(0, 0, -0.000463640812, 0)
Topbar.Size = UDim2.new(1, 0, 0, 32)
_CORNER.Name = "_CORNER"
_CORNER.Parent = Topbar
ConsoleCorner.Name = "ConsoleCorner"
ConsoleCorner.Parent = ConsoleFrame
CornerHide.Name = "CornerHide"
CornerHide.Parent = ConsoleFrame
CornerHide.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
CornerHide.BorderColor3 = Color3.fromRGB(0, 0, 0)
CornerHide.BorderSizePixel = 0
CornerHide.Position = UDim2.new(0, 0, 0.0280000009, 0)
CornerHide.Size = UDim2.new(1, 0, 0, 12)
DontModify.Name = "DontModify"
DontModify.Parent = ConsoleFrame
DontModify.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
DontModify.BorderColor3 = Color3.fromRGB(0, 0, 0)
DontModify.BorderSizePixel = 0
DontModify.Position = UDim2.new(0.98169291, 0, 0.0278581586, 0)
DontModify.Size = UDim2.new(-0.00675675692, 21, 0.972141862, 0)
UICorner.Parent = DontModify
CornerHide2.Name = "CornerHide2"
CornerHide2.Parent = ConsoleFrame
CornerHide2.AnchorPoint = Vector2.new(1, 0)
CornerHide2.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
CornerHide2.BorderColor3 = Color3.fromRGB(0, 0, 0)
CornerHide2.BorderSizePixel = 0
CornerHide2.Position = UDim2.new(1, 0, 0.0450000018, 0)
CornerHide2.Size = UDim2.new(0, 9, 0.955023408, 0)
Title.Name = "Title"
Title.Parent = ConsoleFrame
Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Title.BackgroundTransparency = 1.000
Title.BorderColor3 = Color3.fromRGB(0, 0, 0)
Title.BorderSizePixel = 0
Title.Position = UDim2.new(0.0440017432, 0, 0, 0)
Title.Size = UDim2.new(0, 164, 0, 30)
Title.Font = Enum.Font.GothamMedium
Title.Text = "rconsole title"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextSize = 17.000
Title.TextXAlignment = Enum.TextXAlignment.Left
UIPadding.Parent = Title
UIPadding.PaddingTop = UDim.new(0, 5)
ConsoleIcon.Name = "ConsoleIcon"
ConsoleIcon.Parent = ConsoleFrame
ConsoleIcon.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ConsoleIcon.BackgroundTransparency = 1.000
ConsoleIcon.BorderColor3 = Color3.fromRGB(0, 0, 0)
ConsoleIcon.BorderSizePixel = 0
ConsoleIcon.Position = UDim2.new(0.00979213417, 0, 0.000874322082, 0)
ConsoleIcon.Size = UDim2.new(0, 31, 0, 31)
ConsoleIcon.Image = "http://www.roblox.com/asset/?id=11843683545"
Holder.Name = "Holder"
Holder.Parent = ConsoleFrame
Holder.Active = true
Holder.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
Holder.BackgroundTransparency = 1.000
Holder.BorderColor3 = Color3.fromRGB(0, 0, 0)
Holder.BorderSizePixel = 0
Holder.Position = UDim2.new(0, 0, 0.054600548, 0)
Holder.Size = UDim2.new(1, 0, 0.945399463, 0)
Holder.ScrollBarThickness = 8
Holder.CanvasSize = UDim2.new(0,0,0,0)
Holder.AutomaticCanvasSize = Enum.AutomaticSize.XY
MessageTemplate.Name = "MessageTemplate"
MessageTemplate.Parent = Holder
MessageTemplate.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
MessageTemplate.BackgroundTransparency = 1.000
MessageTemplate.BorderColor3 = Color3.fromRGB(0, 0, 0)
MessageTemplate.BorderSizePixel = 0
MessageTemplate.Size = UDim2.new(0.9745, 0, 0.030000001, 0)
MessageTemplate.Visible = false
MessageTemplate.Font = Enum.Font.RobotoMono
MessageTemplate.Text = "TEMPLATE"
MessageTemplate.TextColor3 = Color3.fromRGB(255, 255, 255)
MessageTemplate.TextSize = 20.000
MessageTemplate.TextXAlignment = Enum.TextXAlignment.Left
MessageTemplate.TextYAlignment = Enum.TextYAlignment.Top
MessageTemplate.RichText = true
UIListLayout.Parent = Holder
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0, 4)
HolderPadding.Name = "HolderPadding"
HolderPadding.Parent = Holder
HolderPadding.PaddingLeft = UDim.new(0, 15)
HolderPadding.PaddingTop = UDim.new(0, 15)
InputTemplate.Name = "InputTemplate"
InputTemplate.Parent = nil
InputTemplate.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
InputTemplate.BackgroundTransparency = 1.000
InputTemplate.BorderColor3 = Color3.fromRGB(0, 0, 0)
InputTemplate.BorderSizePixel = 0
InputTemplate.Size = UDim2.new(0.9745, 0, 0.030000001, 0)
InputTemplate.Visible = false
InputTemplate.RichText = true
InputTemplate.Font = Enum.Font.RobotoMono
InputTemplate.Text = ""
InputTemplate.PlaceholderText = ''
InputTemplate.TextColor3 = Color3.fromRGB(255, 255, 255)
InputTemplate.TextSize = 20.000
InputTemplate.TextXAlignment = Enum.TextXAlignment.Left
InputTemplate.TextYAlignment = Enum.TextYAlignment.Top
-- Variables
local Identity = -1
local active = true
-- Others
local oldLoader = loadstring
-- Empty Tables
local clonerefs = {}
local protecteduis = {}
local gc = {}
local Instances = {} -- for nil instances
local funcs = {} -- main table
local names = {} -- protected gui names
local cache = {} -- for cached instances
local Drawings = {} -- for cleardrawcache
-- Non empty tables
local colors = {
BLACK = Color3.fromRGB(50, 50, 50),
BLUE = Color3.fromRGB(0, 0, 204),
GREEN = Color3.fromRGB(0, 255, 0),
CYAN = Color3.fromRGB(0, 255, 255),
RED = Color3.fromHex('#5A0101'),
MAGENTA = Color3.fromRGB(255, 0, 255),
BROWN = Color3.fromRGB(165, 42, 42),
LIGHT_GRAY = Color3.fromRGB(211, 211, 211),
DARK_GRAY = Color3.fromRGB(169, 169, 169),
LIGHT_BLUE = Color3.fromRGB(173, 216, 230),
LIGHT_GREEN = Color3.fromRGB(144, 238, 144),
LIGHT_CYAN = Color3.fromRGB(224, 255, 255),
LIGHT_RED = Color3.fromRGB(255, 204, 203),
LIGHT_MAGENTA = Color3.fromRGB(255, 182, 193),
YELLOW = Color3.fromRGB(255, 255, 0),
WHITE = Color3.fromRGB(255, 255, 255),
ORANGE = Color3.fromRGB(255, 186, 12)
}
local patterns = {
{ pattern = '(%w+)%s*%+=%s*(%w+)', format = "%s = %s + %s" },
{ pattern = '(%w+)%s*%-=%s*(%w+)', format = "%s = %s - %s" },
{ pattern = '(%w+)%s*%*=%s*(%w+)', format = "%s = %s * %s" },
{ pattern = '(%w+)%s*/=%s*(%w+)', format = "%s = %s / %s" }
}
local patterns2 = {
{ pattern = 'for%s+(%w+)%s*,%s*(%w+)%s*in%s*(%w+)%s*do', format = "for %s, %s in pairs(%s) do" }
}
local renv = {
print, warn, error, assert, collectgarbage, load, require, select, tonumber, tostring, type, xpcall, pairs, next, ipairs,
newproxy, rawequal, rawget, rawset, rawlen, setmetatable, PluginManager,
coroutine.create, coroutine.resume, coroutine.running, coroutine.status, coroutine.wrap, coroutine.yield,
bit32.arshift, bit32.band, bit32.bnot, bit32.bor, bit32.btest, bit32.extract, bit32.lshift, bit32.replace, bit32.rshift, bit32.xor,
math.abs, math.acos, math.asin, math.atan, math.atan2, math.ceil, math.cos, math.cosh, math.deg, math.exp, math.floor, math.fmod, math.frexp, math.ldexp, math.log, math.log10, math.max, math.min, math.modf, math.pow, math.rad, math.random, math.randomseed, math.sin, math.sinh, math.sqrt, math.tan, math.tanh,
string.byte, string.char, string.find, string.format, string.gmatch, string.gsub, string.len, string.lower, string.match, string.pack, string.packsize, string.rep, string.reverse, string.sub, string.unpack, string.upper,
table.concat, table.insert, table.pack, table.remove, table.sort, table.unpack,
utf8.char, utf8.charpattern, utf8.codepoint, utf8.codes, utf8.len, utf8.nfdnormalize, utf8.nfcnormalize,
os.clock, os.date, os.difftime, os.time,
delay, elapsedTime, require, spawn, tick, time, typeof, UserSettings, version, wait,
task.defer, task.delay, task.spawn, task.wait,
debug.traceback, debug.profilebegin, debug.profileend
}
local keys={[0x08]=Enum.KeyCode.Backspace,[0x09]=Enum.KeyCode.Tab,[0x0C]=Enum.KeyCode.Clear,[0x0D]=Enum.KeyCode.Return,[0x10]=Enum.KeyCode.LeftShift,[0x11]=Enum.KeyCode.LeftControl,[0x12]=Enum.KeyCode.LeftAlt,[0x13]=Enum.KeyCode.Pause,[0x14]=Enum.KeyCode.CapsLock,[0x1B]=Enum.KeyCode.Escape,[0x20]=Enum.KeyCode.Space,[0x21]=Enum.KeyCode.PageUp,[0x22]=Enum.KeyCode.PageDown,[0x23]=Enum.KeyCode.End,[0x24]=Enum.KeyCode.Home,[0x2D]=Enum.KeyCode.Insert,[0x2E]=Enum.KeyCode.Delete,[0x30]=Enum.KeyCode.Zero,[0x31]=Enum.KeyCode.One,[0x32]=Enum.KeyCode.Two,[0x33]=Enum.KeyCode.Three,[0x34]=Enum.KeyCode.Four,[0x35]=Enum.KeyCode.Five,[0x36]=Enum.KeyCode.Six,[0x37]=Enum.KeyCode.Seven,[0x38]=Enum.KeyCode.Eight,[0x39]=Enum.KeyCode.Nine,[0x41]=Enum.KeyCode.A,[0x42]=Enum.KeyCode.B,[0x43]=Enum.KeyCode.C,[0x44]=Enum.KeyCode.D,[0x45]=Enum.KeyCode.E,[0x46]=Enum.KeyCode.F,[0x47]=Enum.KeyCode.G,[0x48]=Enum.KeyCode.H,[0x49]=Enum.KeyCode.I,[0x4A]=Enum.KeyCode.J,[0x4B]=Enum.KeyCode.K,[0x4C]=Enum.KeyCode.L,[0x4D]=Enum.KeyCode.M,[0x4E]=Enum.KeyCode.N,[0x4F]=Enum.KeyCode.O,[0x50]=Enum.KeyCode.P,[0x51]=Enum.KeyCode.Q,[0x52]=Enum.KeyCode.R,[0x53]=Enum.KeyCode.S,[0x54]=Enum.KeyCode.T,[0x55]=Enum.KeyCode.U,[0x56]=Enum.KeyCode.V,[0x57]=Enum.KeyCode.W,[0x58]=Enum.KeyCode.X,[0x59]=Enum.KeyCode.Y,[0x5A]=Enum.KeyCode.Z,[0x5D]=Enum.KeyCode.Menu,[0x60]=Enum.KeyCode.KeypadZero,[0x61]=Enum.KeyCode.KeypadOne,[0x62]=Enum.KeyCode.KeypadTwo,[0x63]=Enum.KeyCode.KeypadThree,[0x64]=Enum.KeyCode.KeypadFour,[0x65]=Enum.KeyCode.KeypadFive,[0x66]=Enum.KeyCode.KeypadSix,[0x67]=Enum.KeyCode.KeypadSeven,[0x68]=Enum.KeyCode.KeypadEight,[0x69]=Enum.KeyCode.KeypadNine,[0x6A]=Enum.KeyCode.KeypadMultiply,[0x6B]=Enum.KeyCode.KeypadPlus,[0x6D]=Enum.KeyCode.KeypadMinus,[0x6E]=Enum.KeyCode.KeypadPeriod,[0x6F]=Enum.KeyCode.KeypadDivide,[0x70]=Enum.KeyCode.F1,[0x71]=Enum.KeyCode.F2,[0x72]=Enum.KeyCode.F3,[0x73]=Enum.KeyCode.F4,[0x74]=Enum.KeyCode.F5,[0x75]=Enum.KeyCode.F6,[0x76]=Enum.KeyCode.F7,[0x77]=Enum.KeyCode.F8,[0x78]=Enum.KeyCode.F9,[0x79]=Enum.KeyCode.F10,[0x7A]=Enum.KeyCode.F11,[0x7B]=Enum.KeyCode.F12,[0x90]=Enum.KeyCode.NumLock,[0x91]=Enum.KeyCode.ScrollLock,[0xBA]=Enum.KeyCode.Semicolon,[0xBB]=Enum.KeyCode.Equals,[0xBC]=Enum.KeyCode.Comma,[0xBD]=Enum.KeyCode.Minus,[0xBE]=Enum.KeyCode.Period,[0xBF]=Enum.KeyCode.Slash,[0xC0]=Enum.KeyCode.Backquote,[0xDB]=Enum.KeyCode.LeftBracket,[0xDD]=Enum.KeyCode.RightBracket,[0xDE]=Enum.KeyCode.Quote} -- for keypress
local Fonts = { -- Drawing.Fonts
[0] = Enum.Font.Arial,
[1] = Enum.Font.BuilderSans,
[2] = Enum.Font.Gotham,
[3] = Enum.Font.RobotoMono
}
-- rconsole
local MessageColor = colors['WHITE']
local ConsoleClone = nil
-- functions
local function Descendants(tbl)
local descendants = {}
local function process_table(subtbl, prefix)
for k, v in pairs(subtbl) do
local index = prefix and (prefix .. "." .. tostring(k)) or tostring(k)
descendants[index] = v
if type(v) == 'table' then
process_table(v, index)
else
descendants[index] = v
end
end
end
if type(tbl) ~= 'table' then
descendants[tostring(1)] = tbl
else
process_table(tbl, nil)
end
return descendants
end
local function rawlength(tbl)
local a = 0
for i, v in pairs(tbl) do
a = a + 1
end
return a
end
local function ToPairsLoop(code)
for _, p in ipairs(patterns2) do
code = code:gsub(p.pattern, function(var1, var2, tbl)
return p.format:format(var1, var2, tbl)
end)
end
return code
end
local function SafeOverride(a, b, c) --[[ Index, Data, Should override ]]
if getgenv()[a] and not c then return 1 end
getgenv()[a] = b
return 2
end
local function toluau(code)
for _, p in ipairs(patterns) do
code = code:gsub(p.pattern, function(var, value)
return p.format:format(var, var, value)
end)
end
code = ToPairsLoop(code)
return code
end
local function handleInput(input, Object)
if isDragging then
local delta = input.Position - dragStartPos
Object.Position = UDim2.new(
frameStartPos.X.Scale,
frameStartPos.X.Offset + delta.X,
frameStartPos.Y.Scale,
frameStartPos.Y.Offset + delta.Y
)
end
end
local function startDrag(input, Object)
isDragging = true
dragStartPos = input.Position
frameStartPos = Object.Position
input.UserInputState = Enum.UserInputState.Begin
end
local function stopDrag(input)
isDragging = false
input.UserInputState = Enum.UserInputState.End
end
-- Main Functions
function QueueGetIdentity()
printidentity()
task.wait(.1)
local messages = Log:GetLogHistory()
local message;
if not messages[#messages].message:match("Current identity is") then
for i = #messages, 1, -1 do
if messages[i].message:match("Current identity is %d") then
message = messages[i].message
break
end
end
else
message = messages[#messages].message:match('Current identity is %d'):gsub("Current identity is ", '')
end
Identity = tonumber(message)
end
local Queue = {}
Queue.__index = Queue
function Queue.new()
local self = setmetatable({}, Queue)
self.elements = {}
return self
end
function Queue:Queue(element)
table.insert(self.elements, element)
end
function Queue:Update()
if #self.elements == 0 then
return nil
end
return table.remove(self.elements, 1)
end
function Queue:IsEmpty()
return #self.elements == 0
end
function Queue:Current()
return self.elements
end
-- Events
game.DescendantRemoving:Connect(function(des)
table.insert(Instances, des)
cache[des] = 'REMOVE'
end)
game.DescendantAdded:Connect(function(des)
cache[des] = true
end)
game:GetService("UserInputService").WindowFocused:Connect(function()
active = true
end)
game:GetService("UserInputService").WindowFocusReleased:Connect(function()
active = false
end)
game:GetService("UserInputService").InputChanged:Connect(function(input)
if not input then return end
if isDragging and input.UserInputType == Enum.UserInputType.MouseMovement and ConsoleClone then
handleInput(input, ConsoleClone.ConsoleFrame)
end
end)
game:GetService("UserInputService").InputEnded:Connect(function(input)
if not input then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
stopDrag(input)
end
end)
-- Libraries
funcs.base64 = {}
funcs.crypt = {hex={},url={}}
funcs.syn = {}
funcs.syn_backup = {}
funcs.http = {}
funcs.Drawing = {}
funcs.cache = {}
funcs.string = string
funcs.debug = debug
funcs.debug.getinfo = function(t)
local CurrentLine = tonumber(debug.info(t, 'l'))
local Source = debug.info(t, 's')
local name = debug.info(t, 'n')
local numparams, isvrg = debug.info(t, 'a')
if #name == 0 then name = nil end
local a, b = debug.info(t, 'a')
return {
['currentline'] = CurrentLine,
['source'] = Source,
['name'] = tostring(name),
['numparams'] = tonumber(numparams),
['is_vararg'] = isvrg and 1 or 0,
['short_src'] = tostring(Source:sub(1, 60)),
['what'] = Source == '[C]' and 'C' or 'Lua',
['func'] = t,
['nups'] = 0 -- i CANNOT make an upvalue thingy
}
end
funcs.Drawing.Fonts = {
['UI'] = 0,
['System'] = 1,
['Plex'] = 2,
['Monospace'] = 3
}
local ClipboardQueue = Queue.new()
local ConsoleQueue = Queue.new()
local getgenv = getgenv or getfenv(2)
getgenv().getgenv = getgenv
-- [[ Functions ]]
--[[funcs.cloneref = function(a)
if not clonerefs[a] then clonerefs[a] = {} end
local Clone = {}
local mt = {__type='Instance'} -- idk if this works ;(
mt.__tostring = function()
return a.Name
end
mt.__index = function(_, key)
local thing = funcs.debug.getmetatable(a)[key]
if type(thing) == 'function' then
return function(...)
return thing(a, ...)
end
else
return thing
end
end
mt.__newindex = function(_, key, value)
a[key] = value
end
mt.__metatable = getmetatable(a)
mt.__len = function(_)
return error('attempt to get length of a userdata value')
end
setmetatable(Clone, mt)
table.insert(clonerefs[a], Clone)
return Clone
end
TEMPORARY REMOVED UNTIL WE FIND A FIX
]]
-- Thanks to xAPI for the following:
local Sandbox = loadstring(game:HttpGet("https://pastebin.com/raw/a0cuADU4"))()
funcs.string.dump = loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Function-Dumper-14820"))()
funcs.dumpstring = funcs.string.dump
-- // The rest is made by me.
funcs.compareinstances = function(a, b)
if not clonerefs[a] then
return a == b
else
if table.find(clonerefs[a], b) then return true end
end
return false
end
funcs.clonefunction = function(a)
assert(type(a)=='function', 'Invalid parameter 1 to \'clonefunction\', function expected got ' .. typeof(a))
return function(...)
local Copy = Sandbox(a, {}, {}, {}, 0, {...})
return Copy.return_value
end
end
funcs.cache.iscached = function(thing)
return cache[thing] ~= 'REMOVE' and thing:IsDescendantOf(game) or false -- If it's cache isnt 'REMOVE' and its a des of game (Usually always true) or if its cache is 'REMOVE' then its false.
end
funcs.cache.invalidate = function(thing)
cache[thing] = 'REMOVE'
thing.Parent = nil
end
funcs.cache.replace = function(a, b)
if cache[a] then
cache[a] = b
end
local n, p = a.Name, a.Parent -- name, parent
b.Parent = p
b.Name = n
a.Parent = nil
end
funcs.deepclone = function(a)
local Result = {}
for i, v in pairs(a) do
if type(v) == 'table' then
Result[i] = funcs.deepclone(v)
end
Result[i] = v
end
return Result
end
--[[ The base64 functions were made by https://scriptblox.com/u/yofriendfromschool1 , Credits to him.]]
funcs.base64.encode = function(data)
local letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
return ((data:gsub('.', function(x)
local r,b='',x:byte()
for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
return r;
end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
if (#x < 6) then return '' end
local c=0
for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
return letters:sub(c+1,c+1)
end)..({ '', '==', '=' })[#data%3+1])
end
funcs.base64.decode = function(data)
local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
data = string.gsub(data, '[^'..b..'=]', '')
return (data:gsub('.', function(x)
if x == '=' then return '' end
local r, f = '', (b:find(x) - 1)
for i = 6, 1, -1 do
r = r .. (f % 2^i - f % 2^(i - 1) > 0 and '1' or '0')
end
return r;
end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
if #x ~= 8 then return '' end
local c = 0
for i = 1, 8 do
c = c + (x:sub(i, i) == '1' and 2^(8 - i) or 0)
end
return string.char(c)
end))
end
funcs.loadstring = function(code)
local s1, val1 = pcall(function()
return loadstring('local v1=15;v1+=1;return v1')()
end)
local s2, val2 = pcall(function()
return loadstring('local v1={"a"};for i, v in v1 do return v end')()
end)
if val1 ~= 16 and val2 ~= 'a' then
return oldLoader(toluau(code))
else
return oldLoader(code)
end
end
funcs.getgenv = getgenv
funcs.crypt.base64 = funcs.base64
funcs.crypt.base64encode = funcs.base64.encode
funcs.crypt.base64decode = funcs.base64.decode
funcs.crypt.base64_encode = funcs.base64.encode
funcs.crypt.base64_decode = funcs.base64.decode
funcs.base64_encode = funcs.base64.encode
funcs.base64_decode = funcs.base64.decode
funcs.crypt.hex.encode = function(txt)
txt = tostring(txt)
local hex = ''
for i = 1, #txt do
hex = hex .. string.format("%02x", string.byte(txt, i))
end
return hex
end
funcs.crypt.hex.decode = function(hex)
hex = tostring(hex)
local text = ""
for i = 1, #hex, 2 do
local byte_str = string.sub(hex, i, i+1)
local byte = tonumber(byte_str, 16)
text = text .. string.char(byte)
end
return text
end
funcs.crypt.url.encode = function(a)
return game:GetService("HttpService"):UrlEncode(a)
end
funcs.crypt.url.decode = function(a)
a = tostring(a)
a = string.gsub(a, "+", " ")
a = string.gsub(a, "%%(%x%x)", function(hex)
return string.char(tonumber(hex, 16))
end)
a = string.gsub(a, "\r\n", "\n")
return a
end
funcs.crypt.generatekey = function(optionalSize)
local key = ''
local a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for i = 1, optionalSize or 32 do local n = math.random(1, #a) key = key .. a:sub(n, n) end
return funcs.base64.encode(key)
end
funcs.crypt.generatebytes = function(size)
if type(size) ~= 'number' then return error('missing arguement #1 to \'generatebytes\' (number expected)') end
return funcs.crypt.generatekey(size)
end
funcs.crypt.encrypt = function(a, b)
local result = {}
a = tostring(a) b = tostring(b)
for i = 1, #a do
local byte = string.byte(a, i)
local keyByte = string.byte(b, (i - 1) % #b + 1)
table.insert(result, string.char(bit32.bxor(byte, keyByte)))
end
return table.concat(result)
end
funcs.crypt.decrypt = funcs.crypt.encrypt
funcs.crypt.random = function(len)
return funcs.crypt.generatekey(len)
end
funcs.isrbxactive = function()
return active
end
funcs.isgameactive = funcs.isrbxactive
funcs.gethui = function()
local s, H = pcall(function()
return game:GetService("CoreGui").RobloxGui
end)
if H then
if not hui.Parent then
hui.Parent = H.Parent
end
return hui
else
if not hui.Parent then
hui.Parent = game:GetService("Players").LocalPlayer.PlayerGui
end
end
return hui
end
if getgenv().getrenv and #getgenv().getrenv() == 0 or not getgenv().getrenv then
getgenv().getrenv = nil
getgenv().getrenv = function() -- Override incognito's getrenv
return renv -- couldn't think of a better way to implement it
end
end
funcs.setclipboard = function(data)
repeat task.wait() until ClipboardQueue:Current()[1] == data or ClipboardQueue:IsEmpty()
ClipboardQueue:Queue(data)
local old = game:GetService("UserInputService"):GetFocusedTextBox()
local copy = ClipboardQueue:Current()[1]
ClipboardBox:CaptureFocus()
ClipboardBox.Text = copy
local KeyCode = Enum.KeyCode
local Keys = {KeyCode.RightControl, KeyCode.A}
local Keys2 = {KeyCode.RightControl, KeyCode.C, KeyCode.V}
for _, v in ipairs(Keys) do
vim:SendKeyEvent(true, v, false, game)
task.wait()
end
for _, v in ipairs(Keys) do
vim:SendKeyEvent(false, v, false, game)
task.wait()
end
for _, v in ipairs(Keys2) do
vim:SendKeyEvent(true, v, false, game)
task.wait()
end
for _, v in ipairs(Keys2) do
vim:SendKeyEvent(false, v, false, game)
task.wait()
end
ClipboardBox.Text = ''
if old then old:CaptureFocus() end
task.wait(.18)
ClipboardQueue:Update()
end
funcs.syn.write_clipboard = funcs.setclipboard
funcs.toclipboard = funcs.setclipboard
funcs.writeclipboard = funcs.setclipboard
funcs.setrbxclipboard = funcs.setclipboard
funcs.isrenderobj = function(thing)
return Drawings[thing] ~= nil
end
funcs.getrenderproperty = function(thing, prop)
return thing[prop]
end
funcs.setrenderproperty = function(thing, prop, val)
local success, err = pcall(function()
thing[prop] = val
end)
if not success and err then warn(err) end
end
funcs.syn.protect_gui = function(gui)
names[gui] = {name=gui.Name,parent=gui.Parent}
protecteduis[gui] = gui
gui.Name = funcs.crypt.random(64) -- 64 byte string, removed hashing cuz its useless lmao
gui.Parent = gethui()
end
funcs.syn.unprotect_gui = function(gui)
if names[gui] then gui.Name = names[gui].name gui.Parent = names[gui].parent end protecteduis[gui] = nil
end
funcs.syn.protectgui = funcs.syn.protect_gui
funcs.syn.unprotectgui = funcs.syn.unprotect_gui
funcs.syn.secure_call = function(func) -- Does not do a secure call, just pcalls it.
return pcall(func)
end
funcs.isreadonly = function(tbl)
if type(tbl) ~= 'table' then return false end
return table.isfrozen(tbl)
end
funcs.setreadonly = function(tbl, cond)
if cond then
table.freeze(tbl)
else
return funcs.deepclone(tbl)
end
end
funcs.httpget = function(url)
return game:HttpGet(url)
end
funcs.httppost = function(url, body, contenttype)
return game:HttpPostAsync(url, body, contenttype)
end
funcs.request = function(args)
local Body = nil
local Timeout = 0
local function callback(success, body)
Body = body
Body['Success'] = success
end
HttpService:RequestInternal(args):Start(callback)
while not Body and Timeout < 10 do
task.wait(.1)
Timeout = Timeout + .1
end
return Body
end
funcs.mouse1click = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 0, true, game, false)
task.wait()
vim:SendMouseButtonEvent(x, y, 0, false, game, false)
end
funcs.mouse2click = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 1, true, game, false)
task.wait()
vim:SendMouseButtonEvent(x, y, 1, false, game, false)
end
funcs.mouse1press = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 0, true, game, false)
end
funcs.mouse1release = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 0, false, game, false)
end
funcs.mouse2press = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 1, true, game, false)
end
funcs.mouse2release = function(x, y)
x = x or 0
y = y or 0
vim:SendMouseButtonEvent(x, y, 1, false, game, false)
end
funcs.mousescroll = function(x, y, a)
x = x or 0
y = y or 0
a = a and true or false
vim:SendMouseWheelEvent(x, y, a, game)
end
funcs.keyclick = function(key)
if typeof(key) == 'number' then
if not keys[key] then return error("Key "..tostring(key) .. ' not found!') end
vim:SendKeyEvent(true, keys[key], false, game)
task.wait()
vim:SendKeyEvent(false, keys[key], false, game)
elseif typeof(Key) == 'EnumItem' then
vim:SendKeyEvent(true, key, false, game)
task.wait()
vim:SendKeyEvent(false, key, false, game)
end
end
funcs.keypress = function(key)
if typeof(key) == 'number' then
if not keys[key] then return error("Key "..tostring(key) .. ' not found!') end
vim:SendKeyEvent(true, keys[key], false, game)
elseif typeof(Key) == 'EnumItem' then
vim:SendKeyEvent(true, key, false, game)
end
end
funcs.keyrelease = function(key)
if typeof(key) == 'number' then
if not keys[key] then return error("Key "..tostring(key) .. ' not found!') end
vim:SendKeyEvent(false, keys[key], false, game)
elseif typeof(Key) == 'EnumItem' then
vim:SendKeyEvent(false, key, false, game)
end
end
funcs.mousemoverel = function(relx, rely)
local Pos = workspace.CurrentCamera.ViewportSize
relx = relx or 0
rely = rely or 0
local x = Pos.X * relx
local y = Pos.Y * rely
vim:SendMouseMoveEvent(x, y, game)
end
funcs.mousemoveabs = function(x, y)
x = x or 0 y = y or 0
vim:SendMouseMoveEvent(x, y, game)
end
funcs.newcclosure = function(f)
local a = coroutine.wrap(function(...)
local b = {coroutine.yield()}
while true do
b = {coroutine.yield(f(table.unpack(b)))}
end
end)
a()
return a
end -- Credits to myworld AND EMPER for this
funcs.iscclosure = function(fnc) return debug.info(fnc, 's') == '[C]' end
funcs.islclosure = function(func) return not funcs.iscclosure(func) end
funcs.isexecutorclosure = function(fnc)
local found = false
for i, v in pairs(getgenv()) do
if v == fnc then return true end
end
for i = 1, math.huge do
local s, env = pcall(getfenv, i)
if not s or found then break end
if type(env) == "table" then
for _, v in pairs(env) do
if v == fnc then
found = true
break
end
end
end
if found then break end
end
return found
end
funcs.newlclosure = function(fnc)
return function(...) return fnc(...) end
end
funcs.clonefunction = funcs.newlclosure
funcs.is_l_closure = funcs.islclosure
funcs.is_executor_closure = funcs.isexecutorclosure
funcs.isourclosure = funcs.isexecutorclosure
funcs.isexecclosure = funcs.isexecutorclosure
funcs.checkclosure = funcs.isourclosure
--[[ File system is something i do not know how to implement in roblox lua.
UPDATE AT 18/5/2024:
I figured out i can use temp file system with tables.
]]
local files = {}
local function startswith(a, b)
return a:sub(1, #b) == b
end
local function endswith(hello, lo)
return hello:sub(#hello - #lo + 1, #hello) == lo
end
funcs.writefile = function(path, content)
local Path = path:split('/')
local CurrentPath = {}
for i = 1, #Path do
local a = Path[i]
CurrentPath[i] = a
if not files[a] and i ~= #Path then
files[table.concat(CurrentPath, '/')] = {}
files[table.concat(CurrentPath, '/') .. '/'] = files[table.concat(CurrentPath, '/')]
elseif i == #Path then
files[table.concat(CurrentPath, '/')] = tostring(content)
end
end
end
funcs.makefolder = function(path)
files[path] = {}
files[path .. '/'] = files[path]
end
funcs.isfolder = function(path)
return type(files[path]) == 'table'
end
funcs.isfile = function(path)
return type(files[path]) == 'string'
end
funcs.readfile = function(path)
return files[path]
end
funcs.appendfile = function(path, text2)
funcs.writefile(path, funcs.readfile(path) .. text2)
end
funcs.loadfile = function(path)
local content = funcs.readfile(path)
if not content then error('File \'' .. tostring(path) .. '\' does not exist.') return '' end
local s, func = pcall(function()
return loadstring(content)
end)
return func, not s and func or nil
end
funcs.delfolder = function(path)
local f = files[path]
if type(f) == 'table' then files[path] = nil end
end
funcs.delfile = function(path)
local f = files[path]
if type(f) == 'string' then files[path] = nil end
end
funcs.listfiles = function(path)
if not path or path == '' then
local Files = {}
for i, v in pairs(files) do
if #i:split('/') == 1 then table.insert(Files, i) end
end
return Files
end
if type(files[path]) ~= 'table' then return error(path .. ' is not a folder.') end
local Files = {}
for i, v in pairs(files) do
if startswith(i, path .. '/') and not endswith(i, '/') and i ~= path and #i:split('/') == (#path:split('/') + 1) then table.insert(Files, i) end
end
return Files
end
funcs.http.request = funcs.request
funcs.syn.crypt = funcs.crypt
funcs.syn.crypto = funcs.crypt
funcs.syn_backup = funcs.syn
funcs.http_request = getgenv().request or funcs.request
funcs.getscripts = function()
local a = {};for i, v in pairs(game:GetDescendants()) do if v:IsA("LocalScript") or v:IsA("ModuleScript") then table.insert(a, v) end end return a
end
funcs.get_scripts = function()
local a = {};for i, v in pairs(game:GetDescendants()) do if v:IsA("LocalScript") or v:IsA("ModuleScript") then table.insert(a, v) end end return a
end
funcs.getmodules = function()
local a = {};for i, v in pairs(game:GetDescendants()) do if v:IsA("ModuleScript") then table.insert(a, v) end end return a
end
funcs.getloadedmodules = funcs.getmodules
funcs.make_readonly = funcs.setreadonly
funcs.makereadonly = funcs.setreadonly
funcs.base64encode = funcs.crypt.base64encode
funcs.base64decode = funcs.crypt.base64decode
funcs.clonefunc = funcs.clonefunction
funcs.setsimulationradius = function(Distance, MaxDistance)
local LocalPlayer = game:GetService("Players").LocalPlayer
assert(type(Distance)=='number','Invalid arguement #1 to \'setsimulationradius\', Number expected got ' .. type(Distance))
LocalPlayer.SimulationRadius = type(Distance) == 'number' and Distance or LocalPlayer.SimulationRadius
if MaxDistance then
assert(type(MaxDistance)=='number','Invalid arguement #2 to \'setsimulationradius\', Number expected got ' .. type(MaxDistance))
LocalPlayer.MaxSimulationDistance = MaxDistance
end
end
funcs.getinstances = function()
return game:GetDescendants()
end
funcs.getnilinstances = function()
return Instances
end
funcs.iswriteable = function(tbl)
return not table.isfrozen(tbl)
end
funcs.makewriteable = function(tbl)
return funcs.setreadonly(tbl, false)
end
funcs.isscriptable = function(self, prop)
return table.find(Hidden, prop) == nil
end
funcs.getrunningscripts = function()
local scripts = {}
for _, v in pairs(funcs.getinstances()) do
if v:IsA("LocalScript") and v.Enabled then table.insert(scripts, v) end
end
return scripts
end
funcs.fireproximityprompt = function(p)
local Hold, Distance, Enabled, Thing, CFrame1= p.HoldDuration, p.MaxActivationDistance, p.Enabled, p.RequiresLineOfSight, nil
-- Make it activatable from anywhere
p.MaxActivationDistance = math.huge
-- Make it take 0 seconds to activate
p.HoldDuration = 0
-- Make it enabled (so you can activate it)
p.Enabled = true
-- Disable RequiresLineOfSight
p.RequiresLineOfSight = false
-- Show the thingy
local function get()
local classes = {'BasePart', 'Part', 'MeshPart'}
for _, v in pairs(classes) do
if p:FindFirstAncestorOfClass(v) then
return p:FindFirstAncestorOfClass(v)
end
end
end
local a = get()
if not a then
local parent = p.Parent
p.Parent = Instance.new("Part", workspace)
a = p.Parent
end
CFrame1 = a.CFrame
a.CFrame = game:GetService("Players").LocalPlayer.Character.Head.CFrame + game:GetService("Players").LocalPlayer.Character.Head.CFrame.LookVector * 2
task.wait()
p:InputHoldBegin()
task.wait()
p:InputHoldEnd()
p.HoldDuration = Hold
p.MaxActivationDistance = Distance
p.Enabled = Enabled
p.RequiresLineOfSight = Thing
a.CFrame = CFrame1
p.Parent = parent or p.Parent
end
funcs.firetouchinterest = function(toTouch, TouchWith, on)
if on == 0 then return end
if toTouch.ClassName == 'TouchTransmitter' then
local function get()
local classes = {'BasePart', 'Part', 'MeshPart'}
for _, v in pairs(classes) do
if toTouch:FindFirstAncestorOfClass(v) then
return toTouch:FindFirstAncestorOfClass(v)
end
end
end
toTouch = get()
end
local cf = toTouch.CFrame
local anc = toTouch.CanCollide
toTouch.CanCollide = false
toTouch.CFrame = TouchWith.CFrame
task.wait()
toTouch.CFrame = cf
toTouch.CanCollide = anc
end -- i admit its kinda bad dont fucking attack me
-- SHA256 Hashing
local function str2hexa(a)return string.gsub(a,".",function(b)return string.format("%02x",string.byte(b))end)end;local function num2s(c,d)local a=""for e=1,d do local f=c%256;a=string.char(f)..a;c=(c-f)/256 end;return a end;local function s232num(a,e)local d=0;for g=e,e+3 do d=d*256+string.byte(a,g)end;return d end;local function preproc(h,i)local j=64-(i+9)%64;i=num2s(8*i,8)h=h.."\128"..string.rep("\0",j)..i;assert(#h%64==0)return h end;local function k(h,e,l)local m={}local n={0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2}for g=1,16 do m[g]=s232num(h,e+(g-1)*4)end;for g=17,64 do local o=m[g-15]local p=bit.bxor(bit.rrotate(o,7),bit.rrotate(o,18),bit.rshift(o,3))o=m[g-2]local q=bit.bxor(bit.rrotate(o,17),bit.rrotate(o,19),bit.rshift(o,10))m[g]=(m[g-16]+p+m[g-7]+q)%2^32 end;local r,s,b,t,u,v,w,x=l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8]for e=1,64 do local p=bit.bxor(bit.rrotate(r,2),bit.rrotate(r,13),bit.rrotate(r,22))local y=bit.bxor(bit.band(r,s),bit.band(r,b),bit.band(s,b))local z=(p+y)%2^32;local q=bit.bxor(bit.rrotate(u,6),bit.rrotate(u,11),bit.rrotate(u,25))local A=bit.bxor(bit.band(u,v),bit.band(bit.bnot(u),w))local B=(x+q+A+n[e]+m[e])%2^32;x=w;w=v;v=u;u=(t+B)%2^32;t=b;b=s;s=r;r=(B+z)%2^32 end;l[1]=(l[1]+r)%2^32;l[2]=(l[2]+s)%2^32;l[3]=(l[3]+b)%2^32;l[4]=(l[4]+t)%2^32;l[5]=(l[5]+u)%2^32;l[6]=(l[6]+v)%2^32;l[7]=(l[7]+w)%2^32;l[8]=(l[8]+x)%2^32 end;funcs.crypt.hash=function(h)h=preproc(h,#h)local l={0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19}for e=1,#h,64 do k(h,e,l)end;return str2hexa(num2s(l[1],4)..num2s(l[2],4)..num2s(l[3],4)..num2s(l[4],4)..num2s(l[5],4)..num2s(l[6],4)..num2s(l[7],4)..num2s(l[8],4))end
funcs.Drawing.new = function(Type) -- Drawing.new
local baseProps = {
Visible = false,
Color = Color3.new(0,0,0),
ClassName = nil
}
if Type == 'Line' then
local a = Instance.new("Frame", Instance.new("ScreenGui", DrawingDict))
a.Visible = false
a.Size = UDim2.new(0, 0, 0, 0)
a.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
a.BackgroundTransparency = 1
a.BorderSizePixel = 0
local meta = baseProps
meta.ClassName = Type
meta.__index = {
Thickness = 1,
From = Vector2.new(0, 0),
To = Vector2.new(0, 0),
Transparency = 0,
Remove = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
Destroy = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
updateLine = function(self)
if not a then return end
local from = self.From
local to = self.To
local distance = (to - from).Magnitude
local angle = math.deg(math.atan2(to.Y - from.Y, to.X - from.X))
a.Size = UDim2.new(0, distance, 0, self.Thickness)
a.Position = UDim2.new(0, from.X, 0, from.Y)
a.Rotation = angle
end
}
meta.__newindex = function(self, key, value)
if not self then return end
if key == 'Thickness' and typeof(value) == 'number' then
rawset(self, key, value)
a.Size = UDim2.new(0, (self.To - self.From).Magnitude, 0, value)
elseif key == 'Visible' and typeof(value) == 'boolean' then
rawset(self, key, value)
a.Visible = value
elseif key == 'Color' and typeof(value) == 'Color3' then
rawset(self, key, value)
a.BackgroundColor3 = value
elseif key == 'Transparency' and typeof(value) == 'number' and value <= 1 then
rawset(self, key, value)
a.BackgroundTransparency = 1 - value
elseif key == 'From' and typeof(value) == 'Vector2' then
rawset(self, key, value)
self:updateLine()
elseif key == 'To' and typeof(value) == 'Vector2' then
rawset(self, key, value)
self:updateLine()
end
end
local meta1 = setmetatable({}, meta)
Drawings[meta1] = meta1
return meta1
elseif Type == 'Square' then
local a = Instance.new("Frame", DrawingDict)
a.Visible = false
a.Size = UDim2.new(0, 0, 0, 0)
a.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
a.BackgroundTransparency = 1
a.BorderSizePixel = 0
local b = Instance.new("UIStroke", a)
b.Color = Color3.fromRGB(255, 255, 255)
b.Enabled = true
local meta = baseProps
meta.ClassName = Type
meta.__index = {
Size = Vector2.new(0,0),
Position = Vector2.new(0, 0),
Remove = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
Destroy = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
updateSquare = function(self)
if not a then return end
a.Size = UDim2.new(0, self.Size.X, 0, self.Size.Y)
a.Position = UDim2.new(0, self.Position.X, 0, self.Position.Y)
end
}
meta.__newindex = function(self, key, value)
if not self then return end
if key == 'Filled' and typeof(value) == 'boolean' then
rawset(self, key, value)
b.Enabled = not value
a.BackgroundTransparency = value and 0 or 1
elseif key == 'Visible' and typeof(value) == 'boolean' then
rawset(self, key, value)
a.Visible = value
elseif key == 'Color' and typeof(value) == 'Color3' then
rawset(self, key, value)
a.BackgroundColor3 = value
b.Color = value
elseif key == 'Position' and typeof(value) == 'Vector2' then
rawset(self, key, value)
self:updateSquare()
elseif key == 'Size' and typeof(value) == 'Vector2' then
rawset(self, key, value)
self:updateSquare()
end
end
local meta1 = setmetatable({}, meta)
Drawings[meta1] = meta1
return meta1
elseif Type == 'Circle' then
local a = Instance.new("Frame", Instance.new("ScreenGui", DrawingDict))
a.Visible = false
a.Size = UDim2.new(0, 0, 0, 0)
a.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
a.BackgroundTransparency = 1
a.BorderSizePixel = 0
local b = Instance.new("UIStroke", a)
b.Color = Color3.fromRGB(255, 255, 255)
b.Enabled = false
b.Thickness = 1
local c = Instance.new("UICorner", a)
c.CornerRadius = UDim.new(1, 0)
local meta = baseProps
meta.ClassName = Type
meta.__index = {
Thickness = 1,
Filled = false,
NumSides = 0,
Radius = 1,
Position = Vector2.new(0, 0),
Transparency = 0,
Remove = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
Destroy = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
updateCircle = function(self)
if not b or not a then return end
a.Size = UDim2.new(0, self.Radius, 0, self.Radius)
a.Position = UDim2.new(0, self.Position.X, 0, self.Position.Y)
b.Enabled = not self
b.Color = self.Color
end
}
meta.__newindex = function(self, key, value)
if not self then return end
if key == 'Thickness' and typeof(value) == 'number' then
rawset(self, key, value)
b.Thickness = value
elseif key == 'Visible' and typeof(value) == 'boolean' then
rawset(self, key, value)
a.Visible = value
elseif key == 'Color' and typeof(value) == 'Color3' then
rawset(self, key, value)
a.BackgroundColor3 = value
a.Color = value
elseif key == 'Transparency' and typeof(value) == 'number' then
rawset(self, key, value)
a.BackgroundTransparency = 1 - value
elseif key == 'Position' and typeof(value) == 'Vector2' then
rawset(self, key, value)
self:updateCircle()
elseif key == 'Radius' and typeof(value) == 'number' then
rawset(self, key, value)
self:updateCircle()
elseif key == 'NumSides' and typeof(value) == 'number' then
rawset(self, key, value)
elseif key == 'Filled' and typeof(value) == 'boolean' then
rawset(self, key, value)
self:updateCircle()
end
end
local meta1 = setmetatable({}, meta)
Drawings[meta1] = meta1
return meta1
elseif Type == 'Text' then
local a = Instance.new("TextLabel", DrawingDict)
a.Visible = false
a.Size = UDim2.new(0, 0, 0, 0)
a.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
a.BackgroundTransparency = 1
a.BorderSizePixel = 0
a.TextStrokeColor3 = Color3.new(0,0,0)
a.TextStrokeTransparency = 1
local meta = baseProps
meta.ClassName = Type
meta.__index = {
Text = '',
Transparency = 0,
Size = 0,
Center = false,
Outline = false,
OutlineColor = Color3.new(0,0,0),
Position = Vector2.new(0,0),
Font = 3,
Remove = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
Destroy = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
updateText = function(self)
if not a then return end
a.TextScaled = true
a.Size = UDim2.new(0, self.Size * 3, 0, self.Size / 2)
a.Position = UDim2.new(0, self.Position.X, 0, self.Position.Y)
a.Text = self.Text
a.Font = Fonts[self.Font]
a.Visible = self.Visible
a.TextColor3 = self.Color
a.TextTransparency = 1 - self.Transparency
a.BorderSizePixel = self.Outline and 1 or 0
if self.Center then
a.TextXAlignment = Enum.TextXAlignment.Center
a.TextYAlignment = Enum.TextYAlignment.Center
else
a.TextXAlignment = Enum.TextXAlignment.Left
a.TextYAlignment = Enum.TextYAlignment.Top
end
a.TextStrokeTransparency = self.Outline and 0 or 1
a.TextStrokeColor3 = self.OutlineColor
end
}
meta.__newindex = function(self, key, value)
if not self then return end
if key == 'Text' and typeof(value) == 'string' then
rawset(self, key, value)
elseif key == 'Visible' and typeof(value) == 'boolean' then
rawset(self, key, value)
a.Visible = value
elseif key == 'Color' and typeof(value) == 'Color3' then
rawset(self, key, value)
elseif key == 'Transparency' and typeof(value) == 'number' then
rawset(self, key, value)
elseif key == 'Position' and typeof(value) == 'Vector2' then
rawset(self, key, value)
elseif key == 'Size' and typeof(value) == 'number' then
rawset(self, key, value)
elseif key == 'Outline' and typeof(value) == 'boolean' then
rawset(self, key, value)
elseif key == 'Center' and typeof(value) == 'boolean' then
rawset(self, key, value)
elseif key == 'OutlineColor' and typeof(value) == 'Color3' then
rawset(self, key, value)
elseif key == 'Font' and typeof(value) == 'number' then
rawset(self, key, value)
end
self:updateText()
end
local meta1 = setmetatable({}, meta)
Drawings[meta1] = meta1
return meta1
elseif Type == 'Image' then
local a = Instance.new("ImageLabel", DrawingDict)
a.Visible = false
a.Size = UDim2.new(0, 0, 0, 0)
a.ImageColor3 = Color3.fromRGB(255,255,255)
a.BackgroundTransparency = 1
a.BorderSizePixel = 0
local meta = baseProps
meta.ClassName = 'Image'
meta.__index = {
Text = '',
Transparency = 0,
Size = Vector2.new(0, 0),
Position = Vector2.new(0,0),
Color = Color3.fromRGB(255, 255, 255),
Image = '',
Remove = function()
for i, v in pairs(Drawings) do if v == meta then Drawings[i] = nil end end
a:Destroy()
end,
Destroy = function()
for i, v in pairs(Drawings) do
if v == meta then Drawings[i] = nil end
end
a:Destroy()
end,
updateImage = function(self)
if not a then return end
a.Size = UDim2.new(0, self.Size.X, 0, self.Size.Y)
a.Position = UDim2.new(0, self.Position.X, 0, self.Position.Y)
a.Visible = self.Visible
a.ImageColor3 = self.Color
a.ImageTransparency = 1 - self.Transparency
a.BorderSizePixel = self.Outline and 1 or 0
a.Image = self.Image
end
}
meta.__newindex = function(self, key, value)
if not self then return end
if key == 'Visible' and typeof(value) == 'boolean' then
rawset(self, key, value)
elseif key == 'Color' and typeof(value) == 'Color3' then
rawset(self, key, value)
elseif key == 'Transparency' and typeof(value) == 'number' then
rawset(self, key, value)
elseif key == 'Position' and typeof(value) == 'Vector2' then
rawset(self, key, value)
elseif key == 'Size' and typeof(value) == 'number' then
rawset(self, key, value)
elseif key == 'Image' and typeof(value) == 'string' then
rawset(self, key, value)
else
return
end
self:updateImage()
end
local meta1 = setmetatable({}, meta)
Drawings[meta1] = meta1
return meta1
end
end
funcs.randomstring = funcs.crypt.random
funcs.getprotecteduis = function()
return protecteduis
end
funcs.getprotectedguis = funcs.getprotecteduis
funcs.cleardrawcache = function()
for _, v in pairs(Drawings) do
v:Remove()
end
table.clear(Drawings)
end
funcs.checkcaller = function()
local info = debug.info(getgenv, 'slnaf')
return debug.info(1, 'slnaf')==info
end
funcs.getthreadcontext = function() -- funny little way of getting this
if coroutine.isyieldable(coroutine.running()) then -- check if u can use task.wait or not
QueueGetIdentity()
task.wait(.1)
return tonumber(Identity)
else
if Identity == -1 then
task.spawn(QueueGetIdentity)
return 1
else
return tonumber(Identity)
end
return tonumber(Identity)
end
end
funcs.getthreadidentity = funcs.getthreadcontext
funcs.getidentity = funcs.getthreadcontext
funcs.rconsolecreate = function()
local Clone = Console:Clone()
Clone.Parent = gethui()
ConsoleClone = Clone
ConsoleClone.ConsoleFrame.Topbar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
startDrag(input, ConsoleClone.ConsoleFrame)
end
end)
end
funcs.rconsoledestroy = function()
if ConsoleClone then ConsoleClone:Destroy() end
ConsoleClone = nil
end
funcs.rconsoleprint = function(msg, cc)
local CONSOLE = ConsoleClone or Console
repeat task.wait() until ConsoleQueue:IsEmpty()
msg = tostring(msg)
local last_color = nil
msg = msg:gsub('@@(%a+)@@', function(color)
local colorName = color:upper()
local rgbColor = colors[colorName]
if rgbColor then
local fontTag = string.format('', rgbColor.R * 255, rgbColor.G * 255, rgbColor.B * 255)
local result = last_color and '' .. fontTag or fontTag
last_color = colorName
return result
else
return '@@' .. color .. '@@'
end
end)
if last_color then
msg = msg .. ''
end
if msg:match('.+') then
if msg:match('') == msg then MessageColor = colors[last_color] return end
end
local tmp = MessageTemplate:Clone()
tmp.Parent = CONSOLE.ConsoleFrame.Holder
tmp.Text = msg
tmp.Visible = true
tmp.TextColor3 = cc and cc or MessageColor
end
funcs.rconsoleinput = function()
local CONSOLE = ConsoleClone or Console
repeat task.wait() until ConsoleQueue:IsEmpty()
ConsoleQueue:Queue('input')
local box = InputTemplate:Clone()
local val
box.Parent = CONSOLE.ConsoleFrame.Holder
box.Visible = true
box.TextEditable = true
box.TextColor3 = MessageColor
box.FocusLost:Connect(function(a)
if not a then return end
val = box.Text
ConsoleQueue:Update()
end)
local FOCUSED = false
while true do
if box.Text:sub(#box.Text, #box.Text) == '_' or box.Text == '' or not box:IsFocused() then
box.TextColor3 = Color3.fromRGB(255, 255, 255)
box.Text = box.Text .. '_'
for _ = 1, 100 do
task.wait(1/2)
if box:IsFocused() then
FOCUSED = true
box.TextColor3 = MessageColor
break
end
box.Text = box.Text:sub(#box.Text, #box.Text) == '_' and box.Text:sub(#box.Text-1, #box.Text-1) or box.Text .. '_'
end
if FOCUSED then break end
else
task.wait(0.1)
end
end
repeat task.wait() until val
return val
end
funcs.rconsolename = function(a)
if ConsoleClone then
ConsoleClone.ConsoleFrame.Title.Text = a
else
Console.ConsoleFrame.Title.Text = a
end
end
funcs.printconsole = function(msg, r, g, b)
r = r or 0
g = g or 0
b = b or 0
rconsoleprint(msg, Color3.fromRGB(r, g, b))
end
funcs.rconsoleclear = function()
if ConsoleClone then
for i, v in pairs(ConsoleClone.ConsoleFrame.Holder:GetChildren()) do
if v.ClassName == 'TextLabel' or v.ClassName == 'TextBox' then v:Destroy() end
end
else
for i, v in pairs(Console.ConsoleFrame.Holder:GetChildren()) do
if v.ClassName == 'TextLabel' or v.ClassName == 'TextBox' then v:Destroy() end
end
end
end
funcs.rconsoleinfo = function(a)
rconsoleprint('[INFO]: ' .. tostring(a))
end
funcs.rconsolewarn = function(a)
rconsoleprint('[*]: ' .. tostring(a))
end
funcs.rconsoleerr = function(a)
local clr = MessageColor
local oldColor
for i, v in pairs(colors) do
if clr == v then oldColor = i break end
end
rconsoleprint(string.format('[@@RED@@*@@%s@@]: %s', oldColor, tostring(a)))
end
funcs.rconsoleinputasync = funcs.rconsoleinput
funcs.consolecreate = funcs.rconsolecreate
funcs.consoleclear = funcs.rconsoleclear
funcs.consoledestroy = funcs.rconsoledestroy
funcs.consoleinput = funcs.rconsoleinput
funcs.rconsolesettitle = funcs.rconsolename
funcs.consolesettitle = funcs.rconsolename
funcs.queue_on_teleport = function(scripttoexec) -- WARNING: MUST HAVE MOREUNC IN AUTO EXECUTE FOR THIS TO WORK.
local newTPService = {
__index = function(self, key)
if key == 'Teleport' then
return function(gameId, player, teleportData, loadScreen)
teleportData = {teleportData, MOREUNCSCRIPTQUEUE=scripttoexec}
return oldGame:GetService("TeleportService"):Teleport(gameId, player, teleportData, loadScreen)
end
end
end
}
local gameMeta = {
__index = function(self, key)
if key == 'GetService' then
return function(name)
if name == 'TeleportService' then return newTPService end
end
elseif key == 'TeleportService' then return newTPService end
return game[key]
end,
__metatable = 'The metatable is protected'
}
getgenv().game = setmetatable({}, gameMeta)
end
funcs.queueonteleport = funcs.queue_on_teleport
local Count = 0
local Total = 0
local funcs2 = {}
for i, _ in pairs(funcs) do
table.insert(funcs2, i)
end
table.sort(funcs2, function(a, b)
return string.byte(a:lower())