New Script
New Script
[v 1.4.15]
-- Modified for public release yaaay
-- Deobfuscated
-- Final update?? Who knows??
[v 1.4.14]
-- Updated to use Synapse X's new decompiler
[v 1.4.13]
-- Removed tostring hook
[v 1.4.12]
-- The source is now obfuscated
[v 1.4.11]
-- "Operators" are now highlighted
[v 1.4.10]
-- UI color changes
-- Environment editor sneak peek
[v 1.4.8 - 9]
-- Internal changes
-- CoreGui check updates
[v 1.4.7]
-- UI title updates
-- Login instructions
-- New CoreGui detection bypass
-- Changes with name handling
[v 1.4.3]
-- Improved whitelist
[v 1.4.2]
-- Internal fixes
-- New CoreGui detection bypass
-- New toolbar functionality
-- New whitelist & login UI!
[v 1.2.3]
-- Internal fixes
-- Slightly faster decompiling
[v 1.2.1]
-- UI total recolor
-- Fixed empty lines not appearing
[v 1.1.4]
-- New syntax highlighting API
-- Optimized decompiling
-- Detects services containing scripts
-- Fixed horizontal scrolling bug]]
--============================================================--
screenGui.Parent = game.CoreGui.RobloxGui
backdrop.Parent = game:GetService("CoreGui")
setreadonly(meta, true)
backdrop.Position = UDim2.new(0.5, 0, 1, 2)
backdrop.Size = UDim2.new(0.25, 0, 0.25, 0)
['localscript'] = "99340858";
['modulescript'] = "413367412";
['function'] = "2759601950";
['variable'] = "2759602224";
['table'] = "2757039628";
['constant'] = "2717878542";
['upvalue'] = "2717876089";
}
local highlight = {
['builtin'] = Color3.fromRGB(255, 255, 255); -- wait, workspace
['keyword'] = Color3.fromRGB(79, 117, 255); -- true, function
['string'] = Color3.fromRGB(152, 203, 248); -- "hi"
['number'] = Color3.fromRGB(69, 255, 187); -- 123
['comment'] = Color3.fromRGB(85, 85, 85); -- --comment
['('] = operators.bracket;
[')'] = operators.bracket;
['['] = operators.bracket;
[']'] = operators.bracket;
['{'] = operators.bracket;
['}'] = operators.bracket;
['+'] = operators.math;
['-'] = operators.math;
['/'] = operators.math;
['*'] = operators.math;
['='] = operators.compare;
['=='] = operators.compare;
['>='] = operators.compare;
['<='] = operators.compare;
['~='] = operators.compare;
['<'] = operators.compare;
['>'] = operators.compare;
['.'] = operators.misc;
[','] = operators.misc;
['#'] = operators.misc;
['%'] = operators.misc;
['^'] = operators.misc;
[';'] = operators.misc;
['~'] = operators.misc;
}
--============================================================--
local aa = " " -- storing the tab button because its annoying
local otherdone = 1 -- idk what to name it
local syntax = true -- syntax highlight toggle
function getEnv(scr)
if getsenv and not getmenv then
return getsenv(scr)
elseif getsenv and getmenv then
return (scr:IsA("LocalScript") and getsenv(scr)) or getmenv(scr)
else
return {SCRIPT_ENVIRONMENT_ERROR = true}
end
end
function getTextSize(label)
local service = game:GetService("TextService")
local vec2 = service:GetTextSize(label.Text, label.TextSize, label.Font,
Vector2.new(10000, 25))
return vec2
end
function c3(r,g,b)
return Color3.new(r/255,g/255,b/255)
end
function selection(tab)
local sName = tab:FindFirstChild("ScriptName")
if not sName then return end
function deselection(tab)
local sName = tab:FindFirstChild("ScriptName")
if not sName then return end
function bumpTabs(num)
for i, v in pairs(tabsFrame:GetChildren()) do
if v:IsA("TextButton") then
v.LayoutOrder = v.LayoutOrder + num
end
end
end
local x = getTextSize(tab.ScriptName)
tab.Size = UDim2.new(0, ((x.X < 400 and x.X) or 400) + 20, 1, 0)
bumpTabs(1)
tab.Parent = tabsFrame
tab.MouseButton1Click:Connect(function()
for i, v in pairs(tabsFrame:GetChildren()) do
deselection(v)
end
selection(tab)
loadSourceFromInfo(info, key)
end)
tab.Close.MouseButton1Click:Connect(function()
if #tabsFrame:GetChildren() <= 2 then
loadSource("")
return
end
--bumpTabs(1)
tab:Destroy()
selection(tab)
end
function sortString(str)
str = str:gsub(aa, blank .. "")
local lines = {}
local newLine, curLine, tblLine = 1, 1, {}
local lex = lexer.scan(str)
local num = 0
local gm = str:gmatch("[^\n]+")
function arrayToString(t, a, b)
local s = ""
for i = 1, #t do
s = s..tostring(t[i])
end
return s:sub(a, b)
end
function loadSource(source)
cSource = source
for i, v in pairs(sourceFrame:GetChildren()) do
if v.Name == "Line" then
v:Destroy()
end
end
for i = 1, #lineTable do
local wordTable = lineTable[i]
local typ, str = wordTable[1], wordTable[2]
local word = wordTemplate:Clone()
word.Parent = line
word.String.Text = str
if syntax then
local col = highlight[typ]
if col then
word.String.TextColor3 = highlight[typ]
end
end
end
wordLayout.Parent = line
end
uilistlayout.Parent = sourceFrame
end
function loadSourceFromInfo(info, k)
pcall(function()
otherdone = k
local class = info.Type:lower()
local identity = (info.Class and info.Class:lower()) or
info.Type:lower()
local name = info.Name
local value = info.Value
local obj = info.Obj
cName = name
function updateScrollingFrame(frame)
local elementSize = frame.UIListLayout.AbsoluteContentSize
local canvasSize = elementSize + Vector2.new(50,50)
local f = function(n) return frame.Parent:FindFirstChild(n,true) end
for i = 1, #objs do
local v = objs[i]
if (v.ClassName == "LocalScript" or v.ClassName == "ModuleScript") then
if v.ClassName == "ModuleScript" then
pcall(function()
unlockmodulescript(v)
end)
end
table.insert(list, v)
end
end
return list
end
old = decompile
button.Clicked.MouseButton1Click:Connect(function()
if tabsFrame:FindFirstChild(tostring(key)) then
for i, v in pairs(tabsFrame:GetChildren()) do
deselection(v)
end
selection(tabsFrame[tostring(key)])
else
createTab(info, key)
end
loadSourceFromInfo(info)
end)
button.Clicked.MouseEnter:Connect(function()
Tween(button.Clicked, "Out", "Quint", 0.25, {
Transparency = 0.9
})
end)
button.Clicked.MouseLeave:Connect(function()
Tween(button.Clicked, "Out", "Quint", 0.25, {
Transparency = 1
})
end)
button.Expand.MouseButton1Down:Connect(function()
pcall(function()
expand = not expand
button.Contents.Visible = expand
if expand then
button.Expand.Image = "rbxassetid://2757012309"
else
button.Expand.Image = "rbxassetid://2757012592"
end
return button
end
--============================================================--
do
local function bindToButton(button, func)
button.MouseButton1Click:Connect(func)
button.MouseEnter:Connect(function()
Tween(button, "Out", "Sine", 0.1, {
BackgroundColor3 = Color3.fromRGB(20, 20, 20)
})
end)
button.MouseLeave:Connect(function()
Tween(button, "Out", "Sine", 0.1, {
BackgroundColor3 = Color3.fromRGB(27, 27, 27)
})
end)
end
bindToButton(Edit.Selection.Highlighting, function()
syntax = not syntax
Edit.Selection.Highlighting.Icon.Image = (syntax and
"rbxassetid://2762412562") or "rbxassetid://2762412069"
end)
bindToButton(Edit.Selection.Clear, function()
loadSource("")
end)
bindToButton(File.Selection.CopyStr, function()
setclipboard(cSource)
end)
bindToButton(File.Selection.SaveStr, function()
writefile(tostring(cName) .. ".lua", cSource)
end)
toolbarArea.MouseLeave:Connect(function()
for i, v in pairs(toolbarFrame:GetChildren()) do
if v.Name ~= "UIListLayout" then
shutToolbar(v)
end
end
end)
for i, v in pairs(toolbarFrame:GetChildren()) do
if v.Name ~= "UIListLayout" then
bindToolbar(v)
end
end
end
do
scriptScrollUp.MouseButton1Down:Connect(function()
local sF, canvas = sourceFrame, sourceFrame.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X, canvas.Y - 25)
})
end)
scriptScrollDown.MouseButton1Down:Connect(function()
local sF, canvas = sourceFrame, sourceFrame.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X, canvas.Y + 25)
})
end)
scriptScrollLeft.MouseButton1Down:Connect(function()
local sF, canvas = sourceFrame, sourceFrame.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X + 25, canvas.Y)
})
end)
scriptScrollRight.MouseButton1Down:Connect(function()
local sF, canvas = sourceFrame, sourceFrame.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X - 25, canvas.Y)
})
end)
debugScrollUp.MouseButton1Down:Connect(function()
local sF, canvas = scriptList, scriptList.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X, canvas.Y - 25)
})
end)
debugScrollDown.MouseButton1Down:Connect(function()
local sF, canvas = scriptList, scriptList.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X, canvas.Y + 25)
})
end)
debugScrollLeft.MouseButton1Down:Connect(function()
local sF, canvas = scriptList, scriptList.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X + 25, canvas.Y)
})
end)
debugScrollRight.MouseButton1Down:Connect(function()
local sF, canvas = scriptList, scriptList.CanvasPosition
Tween(sF, "Out", "Sine", 0.25, {
CanvasPosition = Vector2.new(canvas.X - 25, canvas.Y)
})
end)
end
--============================================================--
createButton(scriptList,
{Name="Active Scripts", Type="Folder", Obj=game}
)
createButton(scriptList,
{Name="LocalPlayer", Type="Folder",
Obj=game:GetService("Players").LocalPlayer}
)
createButton(scriptList,
{Name="Nil", Type="Folder", Obj=nil}
)
for i, v in pairs(game:GetChildren()) do
pcall(function()
if v:FindFirstChildWhichIsA("LocalScript", true) or
v:FindFirstChildWhichIsA("ModuleScript", true) then
createButton(scriptList,
{Name=v.ClassName, Type="Folder", Obj=v}
)
end
end)
end
loadSourceFromInfo(aboutinfo)
game:GetService("RunService").RenderStepped:Connect(function()
do
screenGui.Cursor.Position = UDim2.new(0, m.X, 0, m.Y)
screenGui.Cursor.Visible = open
end
do
updateScrollingFrame(scriptList)
local elementSize = scriptList.UIListLayout.AbsoluteContentSize
local canvasSize = elementSize + Vector2.new(25,25)
do
updateScrollingFrame(sourceFrame)
local elementSize = sourceFrame.UIListLayout.AbsoluteContentSize
local canvasSize = elementSize + Vector2.new(50,50)
function Close()
Tween(backdrop, "Out", "Sine", 0.2, {
Position = UDim2.new(0.5, 0, 1, 2),
Size = UDim2.new(0.25, 0, 0.25, 0),
})
end
function Open()
Tween(backdrop, "Out", "Sine", 0.2, {
Position = UDim2.new(0.5, 0, 0, -35),
Size = UDim2.new(1, -2, 1, -2 + 36),
})
end
--======--
UIS.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.Home or input.KeyCode ==
Enum.KeyCode.RightShift then
open = not open
if open then
Open()
else
Close()
end
end
end)
while wait() do
do
if backdrop.Position == UDim2.new(0.5, 0, 1, 2) then
backdrop.Parent = game:GetService("CoreGui")
else
backdrop.Parent = screenGui
end
end
end