local framework = setmetatable({
dependencies = {
utils = {}
},
data = {},
components = {
base = {}
},
popups = {},
pages = {
startup = {},
navbar = {},
exploitSettings = {
optionTypes = {}
},
editor = {},
localScripts = {},
globalScripts = {}
}
}, {
__index = function(t, k)
local res, split = t, string.split(k, ".");
for i, v in split do
res = rawget(res, v);
end
return res;
end
});
do
--[[ Connection ]]--
local connection = {};
connection.__index = connection;
function connection.new(signal: {any}, fn: (any))
return setmetatable({
_signal = signal,
_fn = fn
}, connection);
end
function connection:Disconnect()
self._signal[self] = nil;
end
--[[ Signal ]]--
local signal = {};
signal.__index = signal;
function signal.new()
return setmetatable({}, signal);
end
function signal:Connect(fn: (any))
local conn = connection.new(self, fn);
self[conn] = true;
return conn;
end
function signal:Once(fn: (any))
local conn; conn = self:Connect(function(...)
conn:Disconnect();
fn(...);
end);
return conn;
end
function signal:Fire(...)
for conn, _ in self do
task.spawn(conn._fn, ...);
end
end
function signal:Wait()
local thread = coroutine.running();
local conn; conn = self:Connect(function(...)
conn:Disconnect();
task.spawn(thread, ...);
end);
return coroutine.yield();
end
function signal:DisconnectAll()
table.clear(self);
end
framework.dependencies.signal = signal;
end
do
--[[ Variables ]]--
local runService = game:GetService("RunService");
local tweenService = game:GetService("TweenService");
local dynamicParent;
--[[ Setup ]]--
if gethui then
dynamicParent = gethui();
elseif runService:IsRunning() then
dynamicParent = runService:IsStudio() and game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui") or game:GetService("CoreGui");
else
dynamicParent = game:GetService("StarterGui");
end
--[[ Module ]]--
local utils = {};
function utils:Create(className: string, properties: {any}, children: {any}?): Instance
local instance = Instance.new(className);
for i, v in properties do
if typeof(instance[i]) == "RBXScriptSignal" then
instance[i]:Connect(v);
elseif i ~= "Parent" then
instance[i] = v;
end
end
if children ~= nil then
for i, v in children do
v.Parent = instance;
end
end
instance.Parent = properties.Parent;
return instance;
end
function utils:Tween(instance: Instance, duration: number, properties: {any}, ...): Tween
local tween = tweenService:Create(instance, TweenInfo.new(duration, ...), properties);
tween:Play();
return tween;
end
function utils:DynamicParent(instance: Instance): Instance
instance.Parent = dynamicParent;
return instance;
end
framework.dependencies.utils.instance = utils;
end
do
--[[ Variables ]]--
local denominations = {
"K", "M", "B", "T", "q", "Q", "s", "S", "O", "N", "d", "U", "D"
};
--[[ Module ]]--
local utils = {};
function utils:Round(input: number, float: number): number
local bracket = 1 / float;
return math.round(input * bracket) / bracket;
end
function utils:FormatAsCount(input: number, float: number): string
if input < 1000 then
return tostring(input);
end
local denominationIndex = math.floor(math.log10(input) / 3);
return tostring(self:Round(input / (10 ^ (denominationIndex * 3)), float)) .. tostring(denominations[denominationIndex]);
end
function utils:FormatAsLiteralCount(input: number): string
local x = string.gsub(string.reverse(tostring(input)), "(%d%d%d)", "%1,");
return string.gsub(string.reverse(x), "^,", "");
end
function utils:IsWithin2DBounds(position: Vector2, topLeft: Vector2, bottomRight: Vector2): boolean
return position.X >= topLeft.X and position.X <= bottomRight.X and position.Y >= topLeft.Y and position.Y <= bottomRight.Y;
end
framework.dependencies.utils.maths = utils;
end
do
--[[ Module ]]--
local utils = {};
function utils:DeepCopy(x: {any})
local y = {};
for i, v in x do
y[i] = type(v) == "table" and self:DeepCopy(v) or v;
end
return y;
end
function utils:Concatenate(x: {any}, y: {any})
if y ~= nil then
for i, v in y do
table.insert(x, v);
end
end
return x;
end
function utils:DeepOverwrite(x: {any}, y: {any}, inclusive: boolean?)
if y == nil then
return x;
end
for i, v in y do
if x[i] == nil then
if inclusive then
x[i] = v;
end
else
local _type = typeof(x[i]);
if _type == typeof(v) then
if _type == "table" then
self:DeepOverwrite(x[i], v);
else
x[i] = v;
end
end
end
end
return x;
end
framework.dependencies.utils.table = utils;
end
do
--[[ Module ]]--
local utils = {};
function utils:CapitaliseFirst(str: string): string
return string.upper(string.sub(str, 1, 1)) .. string.lower(string.sub(str, 2));
end
function utils:ConvertToCamelCase(str: string): string
local res = "";
for i, v in string.split(str, " ") do
res ..= i == 1 and string.lower(v) or self:CapitaliseFirst(v);
end
return res;
end
framework.dependencies.utils.string = utils;
end
do
--[[ Variables ]]--
local httpService = game:GetService("HttpService");
local httpRequest = request or http_request or (syn and syn.request);
local runcode = runcode and clonefunction(runcode) or function(scr)
loadstring(scr)();
end
--[[ Module ]]--
local utils = {};
function utils:Request(url: string, method: string?, headers: {any}?, body: any?): string
local s, r = pcall(httpRequest, {
Url = url,
Method = method or "GET",
Headers = headers,
Body = type(body) == "table" and httpService:JSONEncode(body) or body
});
if s == false or r.Success == false or r.StatusCode ~= 200 then
return false;
end
return r.Body;
end
function utils:Execute(scr: string, ...)
task.spawn(runcode, scr);
end
framework.dependencies.utils.internal = utils;
end
do
--[[ Enum ]]--
local codexEnum = {};
function codexEnum.__index(t, k)
return t._map[k] or codexEnum[k];
end
function codexEnum.new(items: {any}): {any}
local map = {};
for i, v in items do
map[v] = i;
end
return setmetatable({
_map = map,
_items = items
}, codexEnum);
end
function codexEnum:GetEnumItems()
return self._items;
end
--[[ Module ]]--
framework.dependencies.codexEnum = {
NavbarState = codexEnum.new({ "Hidden", "Partial", "Full" })
};
end
do
--[[ Variables ]]--
local httpService = game:GetService("HttpService");
local signal = framework.dependencies.signal;
local tableUtils = framework.dependencies.utils.table;
local signalCache = {};
local settingsCache = {
executor = {
autoExecute = true,
autoSaveTabs = false,
fps = {
unlocked = false,
vSync = false,
value = 60
}
},
player = {
walkSpeed = {
enabled = false,
value = 16
},
jumpPower = {
enabled = false,
value = 50
},
},
serverHop = {
priority = "Most Players"
}
};
local userSettings = {};
--[[ Functions ]]--
local function saveUserSettings()
if writefile then
writefile("codexSettings.json", httpService:JSONEncode(tableUtils:DeepCopy(settingsCache)));
end
end
local function createAutosaveMetatable(options: {any}, hierarchy: string)
for i, v in options do
if type(v) == "table" then
options[i] = createAutosaveMetatable(v, hierarchy == "" and i or string.format("%s.%s", hierarchy, i));
end
end
return setmetatable({}, {
__index = function(_, k)
return options[k];
end,
__newindex = function(_, k, v)
options[k] = v;
saveUserSettings();
userSettings:FirePropertyChangedSignal(hierarchy == "" and k or string.format("%s.%s", hierarchy, k), v);
end,
__iter = function()
return next, options;
end
});
end
--[[ Module ]]--
function userSettings:Initialize()
if isfile and isfile("codexSettings.json") then
local succ, res = pcall(httpService.JSONDecode, httpService, readfile("codexSettings.json"));
if succ then
tableUtils:DeepOverwrite(settingsCache, res);
else
task.defer(error, "settings file is corrupted");
end
end
self.cache = createAutosaveMetatable(settingsCache, "");
end
function userSettings:GetPropertyChangedSignal(path: string)
if signalCache[path] == nil then
signalCache[path] = signal.new();
end
return signalCache[path];
end
function userSettings:FirePropertyChangedSignal(path: string, value: any)
local sig = signalCache[path];
if sig then
sig:Fire(value);
end
end
framework.data.userSettings = userSettings;
end
do
--[[ Variables ]]--
local changelog = {
{
stamp = "2023-10-07T17:38:21Z",
data = {
"98% UNC Success Rate",
"Added Server Hopper",
"Added FPS Settings",
"Added Auto Save Tabs",
"Bug Fixes"
}
},
{
stamp = "2023-10-06T17:47:39Z",
data = {
"Updated for V2.596",
"Bug Fixes"
}
},
{
stamp = "2023-09-28T10:43:41Z",
data = {
"Added Save Scripts from Tabs",
"Premium Whitelist Page",
"Game Hub Shows Hot Scripts On Launch",
"Toggleable Auto Execute"
}
},
{
stamp = "2023-09-27T01:00:04Z",
data = {
"Fixed Bugs in Filesystem Functions",
"SkyHub and BananaHub Fixed",
"Performance Upgrades"
}
},
{
stamp = "2023-09-26T20:16:21Z",
data = {
"UI Revamp!",
"New Whitelist System",
"New Security Measures [Banwave Bypass]",
"Added Tabs",
"Added Save Scripts",
"Bug & Performance Fixes"
}
}
};
--[[ Module ]]--
framework.data.internalSettings = {
changelog = changelog
};
end
do
--[[ Variables ]]--
local signal = framework.dependencies.signal;
local internalUtils = framework.dependencies.utils.internal;
local tableUtils = framework.dependencies.utils.table;
local httpService = game:GetService("HttpService");
local savedScripts = {
accumulator = 0,
cache = {},
onScriptAdded = signal.new(),
onScriptRemoved = signal.new()
};
--[[ Functions ]]--
local function reassignIndexes(cache: {any})
for i, v in cache do
v.index = i;
end
return cache;
end
local function loadScriptCache()
if isfile and isfile("codexScriptCache.json") then
local s, r = pcall(httpService.JSONDecode, httpService, readfile("codexScriptCache.json"));
if s and type(r) == "table" then
local accumulation = 0;
local cache = {};
local hasFoundDuplicateIndex = false;
for i, v in r do
if not (type(v) == "table" and v.title and v.description and v.content and v.index and v.autoExecute ~= nil) then
continue;
end
if v.index > accumulation then
accumulation = v.index;
end
if hasFoundDuplicateIndex == false then -- backwards fix from an old broken update and/or someone trying to fuck with the system
for i2, v2 in cache do
if v2.index == v.index then
hasFoundDuplicateIndex = true;
end
end
end
v.onAutoExecuteToggled = signal.new();
cache[#cache + 1] = hasFoundDuplicateIndex and reassignIndexes(v) or v;
end
savedScripts.accumulator = accumulation;
savedScripts.cache = cache;
end
end
end
local function saveScriptCache()
if writefile then
local cache = tableUtils:DeepCopy(savedScripts.cache);
for i, v in cache do
v.onAutoExecuteToggled = nil;
end
writefile("codexScriptCache.json", httpService:JSONEncode(cache));
end
end
--[[ Module ]]--
function savedScripts:Initialize()
loadScriptCache();
for i, v in savedScripts.cache do
if v.autoExecute then
task.spawn(function()
internalUtils:Execute(v.content);
end);
end
end
end
function savedScripts:Get(index: number)
for i, v in self.cache do
if v.index == index then
return i, v;
end
end
end
function savedScripts:Add(title: string, description: string, content: string)
self.accumulator += 1;
local index = self.accumulator;
local newScript = {
title = title,
description = description,
content = content,
index = index,
autoExecute = false,
onAutoExecuteToggled = signal.new()
};
self.cache[#self.cache + 1] = newScript;
self.onScriptAdded:Fire(newScript);
saveScriptCache();
end
function savedScripts:Remove(index: number)
local i, save = self:Get(index);
if save then
table.remove(self.cache, i);
self.onScriptRemoved:Fire(save);
saveScriptCache();
end
end
function savedScripts:ToggleAutomaticExecution(index: number, state: boolean)
local _, save = self:Get(index);
if save then
save.autoExecute = state;
save.onAutoExecuteToggled:Fire(state);
saveScriptCache();
end
end
framework.data.savedScripts = savedScripts;
end
do
framework.data.builtInScripts = {
{
title = "Dark Dex V4",
description = "A powerful game explorer GUI. Shows every instance of the game and all their properties. Useful for developers.",
icon = "rbxassetid://14806198159",
content = "local file = \"dexV4.lua\"; local raw = isfile and isfile(file) and readfile(file); raw = raw or game:HttpGetAsync(\"https://raw.githubusercontent.com/loglizzy/dexV4/main/source.lua\"); if isfile then task.spawn(writefile, file, game:HttpGet(url)); end loadstring(raw)();"
},
{
title = "Unnamed ESP",
description = "Player ESP for Roblox, fully undetectable, uses built in drawing API.",
icon = "rbxassetid://14806221310",
content = "pcall(function() loadstring(game:HttpGet(\"https://raw.githubusercontent.com/ic3w0lf22/Unnamed-ESP/master/UnnamedESP.lua\"))(); end);"
},
{
title = "Hydroxide",
description = "General purpose pen-testing tool for games on the Roblox engine",
icon = "rbxassetid://14806229032",
content = "loadstring(game:HttpGetAsync(\"https://raw.githubusercontent.com/Upbolt/Hydroxide/revision/init.lua\"))(); loadstring(game:HttpGetAsync(\"https://raw.githubusercontent.com/Upbolt/Hydroxide/revision/ui/main.lua\"))();"
},
{
title = "Infinite Yield",
description = "Admin command line script with 300+ commands and 6 years of development",
icon = "rbxassetid://14806239733",
content = "loadstring(game:HttpGetAsync(\"https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source\"))();"
},
{
title = "Owl Hub",
description = "Owl Hub is a free Roblox script hub developed by Google Chrome and CriShoux. It currently has 30+ games.",
icon = "rbxassetid://14806252030",
content = "loadstring(game:HttpGet(\"https://raw.githubusercontent.com/CriShoux/OwlHub/master/OwlHub.txt\"))();"
}
};
end
do
--[[ Variables ]]--
local signal = framework.dependencies.signal;
local tableUtils = framework.dependencies.utils.table;
local httpService = game:GetService("HttpService");
local tabSystem = {
accumulator = 1,
selected = nil,
cache = {
{
title = "Note",
content = "-- This is the real Codex UI but Modified.",
index = 1
}
},
onTabCreated = signal.new(),
onTabRemoved = signal.new(),
onTabSelected = signal.new()
};
--[[ Functions ]]--
local function reassignIndexes(cache: {any})
for i, v in cache do
v.index = i;
end
return cache;
end
local function loadTabCache()
if isfile and isfile("codexTabs.json") then
local s, r = pcall(httpService.JSONDecode, httpService, readfile("codexTabs.json"));
if s and type(r) == "table" then
local accumulation = 0;
local cache = {};
local hasFoundDuplicateIndex = false;
for i, v in r do
if not (type(v) == "table" and v.title and v.content and v.index) then
continue;
end
if v.index > accumulation then
accumulation = v.index;
end
if hasFoundDuplicateIndex == false then -- backwards fix from an old broken update and/or someone trying to fuck with the system
for i2, v2 in cache do
if v2.index == v.index then
hasFoundDuplicateIndex = true;
end
end
end
cache[#cache + 1] = hasFoundDuplicateIndex and reassignIndexes(v) or v;
end
tabSystem.accumulator = accumulation;
tabSystem.cache = cache;
end
end
end
--[[ Module ]]--
function tabSystem:Initialize()
loadTabCache();
end
function tabSystem:Get(index: number)
for i, v in self.cache do
if v.index == index then
return i, v;
end
end
end
function tabSystem:Add(title: string, content: string?)
self.accumulator += 1;
local index = self.accumulator;
local newTab = {
title = title,
content = content or "print('Hello World!');",
index = index
};
self.cache[#self.cache + 1] = newTab;
self.onTabCreated:Fire(newTab);
self:Select(index);
end
function tabSystem:Remove(index: number)
if #self.cache > 1 then
local i, tab = self:Get(index);
if tab then
if self.selected == tab then
self:Select(self.cache[i == 1 and 2 or 1].index);
end
table.remove(self.cache, i);
self.onTabRemoved:Fire(tab);
end
end
end
function tabSystem:Select(index: number)
local _, tab = self:Get(index);
if tab and (self.selected == nil or tab.index ~= self.selected.index) then
self.selected = tab;
self.onTabSelected:Fire(tab);
end
end
function tabSystem:UpdateContent(index: number, content: string)
local _, tab = self:Get(index);
if tab then
tab.content = content;
end
end
function tabSystem:Save()
if writefile then
writefile("codexTabs.json", httpService:JSONEncode(tableUtils:DeepCopy(self.cache)));
end
end
framework.data.tabSystem = tabSystem;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local tableUtils = framework.dependencies.utils.table;
--[[ Module ]]--
framework.components.base.textLabel = (function(overwriteProps: {any}, children: {any}): Instance
return instanceUtils:Create("TextLabel", tableUtils:DeepOverwrite({
AutomaticSize = Enum.AutomaticSize.XY,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold),
Size = UDim2.new(),
TextColor3 = Color3.new(1, 1, 1),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Center,
TextYAlignment = Enum.TextYAlignment.Center
}, overwriteProps, true), children);
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local tableUtils = framework.dependencies.utils.table;
--[[ Module ]]--
framework.components.base.textBox = (function(overwriteProps: {any}, children: {any}): Instance
return instanceUtils:Create("TextBox", tableUtils:DeepOverwrite({
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json"),
PlaceholderText = "Value...",
Size = UDim2.new(0, 0, 0, 32),
Text = "",
TextColor3 = Color3.fromRGB(159, 164, 186),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Center,
TextYAlignment = Enum.TextYAlignment.Center
}, overwriteProps, true), tableUtils:Concatenate({
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
}),
instanceUtils:Create("UICorner", {
Name = "corner",
CornerRadius = UDim.new(0, 6)
})
}, children));
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local tableUtils = framework.dependencies.utils.table;
--[[ Module ]]--
framework.components.base.textButton = (function(overwriteProps: {any}, children: {any}): Instance
return instanceUtils:Create("TextButton", tableUtils:DeepOverwrite({
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromRGB(235, 69, 69),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold),
Size = UDim2.new(0, 0, 0, 32),
TextColor3 = Color3.new(1, 1, 1),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Center,
TextYAlignment = Enum.TextYAlignment.Center
}, overwriteProps, true), tableUtils:Concatenate({
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
}),
instanceUtils:Create("UICorner", {
Name = "corner",
CornerRadius = UDim.new(0, 6)
})
}, children));
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local tableUtils = framework.dependencies.utils.table;
--[[ Module ]]--
framework.components.base.background = (function(overwriteProps: {any}?, children: {any}?): Instance
return instanceUtils:Create("Frame", tableUtils:DeepOverwrite({
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromRGB(21, 21, 29),
BackgroundTransparency = 0.1,
BorderSizePixel = 0,
Name = "background",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 0
}, overwriteProps, true), children);
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
--[[ Functions ]]--
local function createButton(title: string, icon: string): Instance
return instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = stringUtils:ConvertToCamelCase(title),
Size = UDim2.new(1, 0, 0, 50),
Text = "",
ZIndex = 2
}, {
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = icon,
ImageColor3 = Color3.fromHex("979ebd"),
ImageTransparency = 0.6,
Name = "icon",
Position = UDim2.new(0, 38, 0.5, 0),
Size = UDim2.new(0, 24, 0, 24),
ZIndex = 2
}, {
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "rbxassetid://11559270573",
ImageTransparency = 1,
Name = "glow",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 85, 0, 102),
ZIndex = 2
})
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0, 0.5),
AutomaticSize = Enum.AutomaticSize.XY,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size12,
Name = "text",
Position = UDim2.new(0, 70, 0.5, 0),
Text = title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 12,
TextTransparency = 0.2,
TextXAlignment = Enum.TextXAlignment.Left,
ZIndex = 2
}),
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(0, 0.5),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "rbxassetid://11558444554",
Name = "arrow",
Position = UDim2.new(0, 224, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
ZIndex = 2
})
});
end
--[[ Module ]]--
local navbarButton = {};
navbarButton.__index = navbarButton;
function navbarButton.new(title: string, icon: string)
return setmetatable({
instance = createButton(title, icon);
}, navbarButton);
end
function navbarButton:Highlight(selected: boolean)
instanceUtils:Tween(self.instance.icon, 0.2, {
ImageColor3 = selected and Color3.fromHex("eb4545") or Color3.fromHex("979ebd"),
ImageTransparency = selected and 0 or 0.6
});
instanceUtils:Tween(self.instance.icon.glow, 0.2, {
ImageTransparency = selected and 0 or 1
});
end
framework.components.navbarButton = navbarButton;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local tableUtils = framework.dependencies.utils.table;
--[[ Module ]]--
framework.components.editorButton = (function(title: string, icon: string, overwriteProps: {any}?, foreground: Color3?): Instance
return instanceUtils:Create("TextButton", tableUtils:DeepOverwrite({
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
Name = stringUtils:ConvertToCamelCase(title),
Size = UDim2.new(0, 50, 0, 50),
Text = "",
TextColor3 = Color3.fromHex("1b2a35"),
ZIndex = 2
}, overwriteProps, true), {
instanceUtils:Create("UICorner", {
Name = "corner"
}),
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = icon,
ImageColor3 = foreground or Color3.fromHex("9fa4ba"),
Name = "icon",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 28, 0, 28),
ZIndex = 2
})
});
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local tabSystem;
local textService = game:GetService("TextService");
--[[ Functions ]]--
local function createButton(title: string): Instance
return instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
Name = stringUtils:ConvertToCamelCase(title),
Position = UDim2.new(1, -75, 1, -75),
Size = UDim2.new(0, textService:GetTextBoundsAsync(instanceUtils:Create("GetTextBoundsParams", {
Font = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
Text = title,
Size = 14,
Width = math.huge
})).X + 42, 0, 32),
Text = ""
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("ImageButton", {
AnchorPoint = Vector2.new(1, 0.5),
AutoButtonColor = false,
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "rbxassetid://14808246706",
Name = "close",
Position = UDim2.new(1, -6, 0.5, 0),
Size = UDim2.new(0, 20, 0, 20)
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "title",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(1, -18, 1, 0),
Text = title,
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14,
TextXAlignment = Enum.TextXAlignment.Left
})
});
end
--[[ Module ]]--
local tabButton = {};
tabButton.__index = tabButton;
function tabButton.new(tab: {any})
if tabSystem == nil then
tabSystem = framework.data.tabSystem;
end
local btn = createButton(tab.title);
btn.MouseButton1Click:Connect(function()
tabSystem:Select(tab.index);
end);
btn.close.MouseButton1Click:Connect(function()
tabSystem:Remove(tab.index);
end);
return setmetatable({
instance = btn
}, tabButton);
end
function tabButton:Highlight(selected: boolean)
instanceUtils:Tween(self.instance, 0.2, {
BackgroundColor3 = Color3.fromHex(selected and "eb4545" or "3a3a4a");
});
instanceUtils:Tween(self.instance.title, 0.2, {
TextColor3 = Color3.fromHex(selected and "ffffff" or "9fa4ba");
});
instanceUtils:Tween(self.instance.close, 0.2, {
ImageColor3 = Color3.fromHex(selected and "ffffff" or "9fa4ba");
});
end
function tabButton:Destroy()
self.instance:Destroy();
end
framework.components.tabButton = tabButton;
end
do
--[[ Variables ]]--
local savedScripts = framework.data.savedScripts;
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local mathsUtils = framework.dependencies.utils.maths;
local tabSystem;
local globalScriptSelection = {};
--[[ Functions ]]--
local function createUI(directory: Instance): Instance
local base = instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("15151d"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "globalScriptSelection",
Parent = directory,
Position = UDim2.new(0.5, 0, 0.5, 20),
Size = UDim2.new(0.6, 0, 0.4, 100),
Visible = false
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
Color = Color3.fromHex("202028"),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "selectedScript",
Position = UDim2.new(0, 30, 0, 20),
Size = UDim2.new(1, -232, 0, 0),
Text = "Selected Script:",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "buttons",
Position = UDim2.new(0.5, 0, 1, -30),
Size = UDim2.new(1, -60, 0, 0)
}, {
instanceUtils:Create("UIGridLayout", {
CellPadding = UDim2.new(0, 18, 0, 16),
CellSize = UDim2.new(0.5, -9, 0, 36),
Name = "grid",
SortOrder = Enum.SortOrder.LayoutOrder,
VerticalAlignment = Enum.VerticalAlignment.Bottom
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "execute",
Size = UDim2.new(0, 200, 0, 50),
Text = "Execute",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "loadToEditor",
Size = UDim2.new(0, 200, 0, 50),
Text = "Load to Editor",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "saveScript",
Size = UDim2.new(0, 200, 0, 50),
Text = "Save Script",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "cancel",
Size = UDim2.new(0, 200, 0, 50),
Text = "Cancel",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
})
}),
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(1, 0),
BackgroundColor3 = Color3.fromHex("ffffff"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Image = "",
Name = "icon",
Position = UDim2.new(1, -30, 0, 20),
Size = UDim2.new(0, 100, 1, -158)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIAspectRatioConstraint", {
AspectRatio = 16 / 9,
AspectType = Enum.AspectType.ScaleWithParentSize,
DominantAxis = Enum.DominantAxis.Height,
Name = "aspectRatio"
})
}),
instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "text",
Position = UDim2.new(0, 30, 0, 40),
Size = UDim2.new(1, -232, 0, 0),
Text = "",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "views",
Position = UDim2.new(0, 30, 0, 70),
RichText = true,
Size = UDim2.new(1, -232, 0, 0),
Text = "Views:",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "updatedAt",
Position = UDim2.new(0, 30, 0, 90),
RichText = true,
Size = UDim2.new(1, -232, 0, 0),
Text = "Updated:",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("UIAspectRatioConstraint", {
AspectRatio = 480 / 244,
Name = "aspectRatio"
})
});
base.buttons.execute.MouseButton1Click:Connect(function()
internalUtils:Execute(globalScriptSelection.selectedScript.script);
globalScriptSelection:Hide();
end);
base.buttons.loadToEditor.MouseButton1Click:Connect(function()
if tabSystem == nil then
tabSystem = framework.data.tabSystem;
end
tabSystem:Add(globalScriptSelection.selectedScript.title, globalScriptSelection.selectedScript.script);
globalScriptSelection:Hide();
end);
base.buttons.saveScript.MouseButton1Click:Connect(function()
savedScripts:Add(globalScriptSelection.selectedScript.title, "", globalScriptSelection.selectedScript.script);
globalScriptSelection:Hide();
end);
base.buttons.cancel.MouseButton1Click:Connect(function()
globalScriptSelection:Hide();
end);
return base;
end
--[[ Module ]]--
function globalScriptSelection:CreateUI(gui: ScreenGui)
if self.frame == nil then
self.frame = createUI(gui);
end
end
function globalScriptSelection:Show(scriptResult: {any})
self.selectedScript = scriptResult;
self.frame.icon.Image = string.format("https://assetgame.roblox.com/Game/Tools/ThumbnailAsset.ashx?aid=%d&fmt=png&wd=1920&ht=1080", scriptResult.isUniversal and 4483381587 or scriptResult.game.gameId);
self.frame.text.Text = scriptResult.title;
self.frame.views.Text = "Views: " .. mathsUtils:FormatAsLiteralCount(scriptResult.views);
self.frame.updatedAt.Text = "Updated: " .. DateTime.fromIsoDate(scriptResult.updatedAt or scriptResult.createdAt):FormatLocalTime("ll", "en-us");
self.frame.Visible = true;
end
function globalScriptSelection:Hide()
self.frame.Visible = false;
end
framework.popups.globalScriptSelection = globalScriptSelection;
end
do
--[[ Variables ]]--
local savedScripts = framework.data.savedScripts;
local instanceUtils = framework.dependencies.utils.instance;
local saveCurrentTab = {};
--[[ Functions ]]--
local function createUI(directory: Instance): Instance
local base = instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("15151d"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "saveCurrentTab",
Parent = directory,
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0.6, 0, 0.4, 100),
Visible = false
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
Color = Color3.fromHex("202028"),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "buttons",
Position = UDim2.new(0.5, 0, 1, -30),
Size = UDim2.new(1, -60, 0, 0)
}, {
instanceUtils:Create("UIGridLayout", {
CellPadding = UDim2.new(0, 18, 0, 16),
CellSize = UDim2.new(0.5, -9, 0, 36),
Name = "grid",
SortOrder = Enum.SortOrder.LayoutOrder,
VerticalAlignment = Enum.VerticalAlignment.Bottom
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "saveScript",
Size = UDim2.new(0, 200, 0, 50),
Text = "Save Script",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
}),
instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "cancel",
Size = UDim2.new(0, 200, 0, 50),
Text = "Cancel",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
})
})
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "text",
Position = UDim2.new(0.5, 0, 0, 40),
Size = UDim2.new(1, -60, 0, 0),
Text = "Script 1",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "currentTab",
Position = UDim2.new(0.5, 0, 0, 20),
Size = UDim2.new(1, -60, 0, 0),
Text = "Current Tab:",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextBox", {
AnchorPoint = Vector2.new(0.5, 1),
BackgroundColor3 = Color3.fromHex("202028"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "title",
PlaceholderText = "Title...",
Position = UDim2.new(0.5, 0, 1, -125),
Size = UDim2.new(1, -62, 0, 32),
Text = "",
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
}),
instanceUtils:Create("UIStroke", {
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = Color3.fromHex("3a3a4a"),
Name = "stroke"
})
}),
instanceUtils:Create("TextBox", {
AnchorPoint = Vector2.new(0.5, 1),
BackgroundColor3 = Color3.fromHex("202028"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "description",
PlaceholderText = "Description...",
Position = UDim2.new(0.5, 0, 1, -79),
Size = UDim2.new(1, -62, 0, 32),
Text = "",
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
}),
instanceUtils:Create("UIStroke", {
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = Color3.fromHex("3a3a4a"),
Name = "stroke"
})
}),
instanceUtils:Create("UISizeConstraint", {
MaxSize = Vector2.new(600, math.huge),
Name = "sizeConstraint"
}),
instanceUtils:Create("UIAspectRatioConstraint", {
AspectRatio = 480 / 244,
Name = "aspectRatio"
})
});
base.buttons.saveScript.MouseButton1Click:Connect(function()
local title = base.title.Text;
if #title > 0 then
savedScripts:Add(title, base.description.Text, saveCurrentTab.selectedTab.content);
saveCurrentTab:Hide();
end
end);
base.buttons.cancel.MouseButton1Click:Connect(function()
saveCurrentTab:Hide();
end);
return base;
end
--[[ Module ]]--
function saveCurrentTab:CreateUI(gui: ScreenGui)
if self.frame == nil then
self.frame = createUI(gui);
end
end
function saveCurrentTab:Show(selectedTab: {any})
self.selectedTab = selectedTab;
self.frame.text.Text = selectedTab.title;
self.frame.title.Text = selectedTab.title;
self.frame.Visible = true;
end
function saveCurrentTab:Hide()
self.frame.Visible = false;
end
framework.popups.saveCurrentTab = saveCurrentTab;
end
do
--[[ Variables ]]--
local userSettings = framework.data.userSettings;
local signal = framework.dependencies.signal;
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local textService = game:GetService("TextService");
local dropdown = {
selectedDropdown = nil,
selectedItem = nil,
onDropdownChanged = signal.new(),
onSelectionChanged = signal.new()
};
--[[ Functions ]]--
local function createItem(title: string)
return instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BackgroundTransparency = 1,
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = stringUtils:ConvertToCamelCase(title),
Parent = dropdown.frame.container,
Position = UDim2.new(1, -75, 1, -75),
Size = UDim2.new(1, -4, 0, 28),
Text = title,
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 4),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
})
});
end
local function toggleItemSelection(item: TextButton, selected: boolean)
instanceUtils:Tween(item, 0.25, {
BackgroundTransparency = selected and 0 or 1,
TextColor3 = Color3.fromHex(selected and "ffffff" or "9fa4ba")
});
end
local function createUI(directory: Instance): Instance
return instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 0),
BackgroundColor3 = Color3.fromHex("202028"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "dropdown",
Parent = directory,
Position = UDim2.new(1, -22, 0, 128),
Size = UDim2.new(0, 180, 0, 142)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
Color = Color3.fromHex("3a3a4a"),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("ScrollingFrame", {
Active = true,
AnchorPoint = Vector2.new(1, 0.5),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "container",
Position = UDim2.new(1, -2, 0.5, 0),
ScrollBarImageColor3 = Color3.fromHex("53536b"),
ScrollBarThickness = 4,
ScrollingDirection = Enum.ScrollingDirection.Y,
Size = UDim2.new(1, -8, 1, -12),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
}, {
instanceUtils:Create("UIListLayout", {
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
})
});
end
local function clearDropdown()
for i, v in dropdown.frame.container:GetChildren() do
if v:IsA("TextButton") then
v:Destroy();
end
end
end
--[[ Module ]]--
function dropdown:CreateUI(gui: ScreenGui)
if self.frame == nil then
self.frame = createUI(gui);
end
end
function dropdown:Show(item: {any}, adornee: GuiBase2d)
clearDropdown();
self.selectedDropdown = item.title;
self.onDropdownChanged:Fire(item.title);
if self.adornConnection then
self.adornConnection:Disconnect();
end
do
local bottomRight = adornee.AbsolutePosition + adornee.AbsoluteSize;
self.frame.Position = UDim2.new(0, bottomRight.X, 0, bottomRight.Y + 44);
self.adornConnection = adornee:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
bottomRight = adornee.AbsolutePosition + adornee.AbsoluteSize;
self.frame.Position = UDim2.new(0, bottomRight.X, 0, bottomRight.Y + 44);
end);
end
for i, v in item.items do
local currentItem = createItem(v);
if v == item.value then
toggleItemSelection(currentItem, true);
self.selectedItem = currentItem;
end
currentItem.MouseButton1Click:Connect(function()
toggleItemSelection(self.selectedItem, false);
toggleItemSelection(currentItem, true);
self.selectedItem = currentItem;
self.onSelectionChanged:Fire(v);
end);
end
self.frame.Visible = true;
end
function dropdown:Hide()
clearDropdown();
self.selectedDropdown = nil;
self.selectedItem = nil;
self.onDropdownChanged:Fire();
self.frame.Visible = false;
end
framework.popups.dropdown = dropdown;
end
do
--[[ Module ]]--
local popups = {
cache = {}
};
function popups:RegisterGUI(gui: ScreenGui)
self.gui = gui;
end
function popups:Show(name: string, ...)
local module = self.cache[name];
if module == nil then
module = framework["popups." .. name];
module:CreateUI(self.gui);
self.cache[name] = module;
end
module:Show(...);
end
function popups:Hide(name: string, ...)
local module = self.cache[name];
if module then
module:Hide(...);
end
end
framework.popups.popups = popups;
end
do
--[[ Variables ]]--
local textLabel = framework.components.base.textLabel;
local changelog = framework.data.internalSettings.changelog;
local instanceUtils = framework.dependencies.utils.instance;
--[[ Functions ]]--
local function formatChangelog()
local str = "";
for i, v in changelog do
str ..= string.format("%s[%s]\n\n", str == "" and "" or "\n\n", DateTime.fromIsoDate(v.stamp):FormatLocalTime("ll", "en-us"));
for i2, v2 in v.data do
str ..= "• " .. v2;
if i2 < #v.data then
str ..= "\n";
end
end
end
return str;
end
--[[ Module ]]--
framework.pages.startup.changelog = (function()
return instanceUtils:Create("Frame", {
BackgroundTransparency = 1,
Name = "changelog",
Position = UDim2.new(0.5, 12, 0.2, 46),
Size = UDim2.new(0.2, 120, 0.5, 0)
}, {
textLabel({
Text = "Changelog",
TextColor3 = Color3.fromRGB(159, 164, 186),
TextSize = 20
}),
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticCanvasSize = Enum.AutomaticSize.XY,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(),
HorizontalScrollBarInset = Enum.ScrollBarInset.ScrollBar,
Name = "container",
Position = UDim2.new(0.5, 0, 1, 0),
ScrollBarImageColor3 = Color3.fromRGB(15, 15, 21),
ScrollBarThickness = 4,
Size = UDim2.new(1, -16, 1, -36),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
}, {
textLabel({
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json"),
LineHeight = 1.1,
RichText = true,
Text = formatChangelog(),
TextColor3 = Color3.fromRGB(159, 164, 186),
TextTruncate = Enum.TextTruncate.None,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
})
})
});
end);
end
do
--[[ Variables ]]--
local textLabel = framework.components.base.textLabel;
local instanceUtils = framework.dependencies.utils.instance;
local stepCount = 0;
--[[ Module ]]--
local startupStep = {};
startupStep.__index = startupStep;
function startupStep.new(startText: string, finishText: string, parent: Instance): {any}
stepCount += 1;
local frame = instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0),
BackgroundTransparency = 1,
Name = stepCount,
Parent = parent,
Size = UDim2.new(1, 0, 0, 22)
}, {
instanceUtils:Create("ImageLabel", {
BackgroundTransparency = 1,
Image = "rbxassetid://14840862230",
ImageColor3 = Color3.fromRGB(235, 69, 69),
ImageTransparency = 1,
Name = "icon",
Size = UDim2.new(0, 22, 0, 22)
}),
textLabel({
AnchorPoint = Vector2.new(0, 0.5),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json"),
Name = "note",
Position = UDim2.new(0, 34, 0.5, 0),
Text = startText,
TextColor3 = Color3.fromRGB(159, 164, 186),
TextTransparency = 1
})
});
return setmetatable({
frame = frame,
finishText = finishText,
isFinished = false
}, startupStep);
end
function startupStep:Start(): {any}
self.tween = instanceUtils:Tween(self.frame.icon, 1, {
Rotation = 360
}, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut, math.huge);
instanceUtils:Tween(self.frame.icon, 0.4, {
ImageTransparency = 0
});
instanceUtils:Tween(self.frame.note, 0.4, {
TextTransparency = 0
}).Completed:Wait();
return self;
end
function startupStep:Complete()
if self.isFinished then
return;
end
self.isFinished = true;
local icon = self.frame.icon;
local note = self.frame.note;
instanceUtils:Tween(note, 0.4, {
TextTransparency = 1
}).Completed:Connect(function()
note.Text = self.finishText;
instanceUtils:Tween(note, 0.4, {
TextTransparency = 0
});
end);
instanceUtils:Tween(icon, 0.4, {
ImageTransparency = 1
}).Completed:Wait();
self.tween:Cancel();
icon.Image = "rbxassetid://14840859703";
icon.Rotation = 0;
instanceUtils:Tween(icon, 0.4, {
ImageTransparency = 0
});
end
framework.pages.startup.startupStep = startupStep;
end
do
--[[ Variables ]]--
local background = framework.components.base.background;
local textBox = framework.components.base.textBox;
local textButton = framework.components.base.textButton;
local textLabel = framework.components.base.textLabel;
local userSettings = framework.data.userSettings;
local savedScripts = framework.data.savedScripts;
local tabSystem = framework.data.tabSystem;
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local changelog = framework.pages.startup.changelog;
local startupStep = framework.pages.startup.startupStep;
local httpService = game:GetService("HttpService");
local completionSignal;
local ui;
--[[ Functions ]]--
dd = true
local function checkWhitelist()
if getgenv then
return internalUtils:Request("https://api.codex.lol/v1/auth/authenticate", "POST") ~= true;
end
return false;
end
local function createBasis(directory: Instance)
local gui = instanceUtils:Create("ScreenGui", {
Enabled = false,
IgnoreGuiInset = true,
Name = "gui",
ResetOnSpawn = false,
ZIndexBehavior = Enum.ZIndexBehavior.Global
}, {
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromRGB(21, 21, 29),
BackgroundTransparency = 1,
Name = "background",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 0
}),
instanceUtils:Create("Folder", {
Name = "tabs"
})
});
local popups = instanceUtils:Create("ScreenGui", {
Enabled = false,
IgnoreGuiInset = true,
Name = "popups",
ResetOnSpawn = false,
ZIndexBehavior = Enum.ZIndexBehavior.Global
});
gui.Parent = directory;
popups.Parent = directory;
return {
gui = gui,
popups = popups
};
end
local function doSetup()
userSettings:Initialize();
if runautoexec and userSettings.cache.executor.autoExecute then
runautoexec();
end
tabSystem:Initialize();
savedScripts:Initialize();
end
local function changeTab(isMainTab: boolean)
ui.whitelist.Visible = isMainTab;
ui.changelog.Visible = isMainTab;
ui.specialUserInput.Visible = not isMainTab;
ui.note.Text = isMainTab and "Please complete the whitelist to gain access to Codex" or "Please enter your key to activate your Premium License";
end
local function createUI(directory: Instance): ScreenGui
ui = instanceUtils:Create("ScreenGui", {
IgnoreGuiInset = true,
Name = "startup",
Parent = directory,
ResetOnSpawn = false,
ZIndexBehavior = Enum.ZIndexBehavior.Global
}, {
background(),
textLabel({
AnchorPoint = Vector2.new(0.5, 0.5),
Name = "title",
Position = UDim2.new(0.5, 0, 0.2, -20),
Text = "Codex Modified",
TextSize = 24
}),
textLabel({
AnchorPoint = Vector2.new(0.5, 0.5),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json"),
Name = "note",
Position = UDim2.new(0.5, 0, 0.2, 2),
Text = "Please complete the whitelist to gain access to Codex",
TextColor3 = Color3.fromRGB(159, 164, 186)
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = 1,
Name = "whitelist",
Position = UDim2.new(0.5, -12, 0.2, 46),
Size = UDim2.new(0.2, 120, 0.5, 0)
}, {
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0),
BackgroundTransparency = 1,
Name = "process",
Position = UDim2.new(0.5, 0, 0, 0),
Size = UDim2.new(1, 0, 1, -36)
}, {
instanceUtils:Create("UIListLayout", {
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
}),
textButton({
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.None,
MouseButton1Click = function()
if setclipboard then
local data = internalUtils:Request("https://api.codex.lol/v1/auth/session", "POST");
if data then
setclipboard("https://mobile.codex.lol?token=" .. httpService:JSONDecode(data).token);
end
end
game:GetService("StarterGui"):SetCore("SendNotification", {
Title = "Codex Android",
Text = "Whitelist link has been set to your clipboard."
});
end,
Name = "copyWhitelistLink",
Position = UDim2.new(0.5, 0, 1, -28),
Size = UDim2.new(1, 0, 0, 32),
Text = "Copy Whitelist Link"
}),
textButton({
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.None,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
MouseButton1Click = function()
changeTab(false);
end,
Name = "premiumUser",
Position = UDim2.new(0.5, 0, 1, 0),
RichText = true,
Size = UDim2.new(1, 0, 0, 20),
Text = "Premium User? Click Here!",
TextColor3 = Color3.fromHex("9fa4ba")
})
}),
changelog(),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "specialUserInput",
Position = UDim2.new(0.5, 0, 0.2, 46),
Size = UDim2.new(0.4, 264, 0.5, 0),
Visible = false
}, {
textButton({
AnchorPoint = Vector2.new(1, 0),
AutomaticSize = Enum.AutomaticSize.None,
MouseButton1Click = function()
changeTab(true);
end,
Name = "cancel",
Position = UDim2.new(0.5, -6, 0.5, 6),
Size = UDim2.new(0, 160, 0, 32),
Text = "Cancel"
}),
textButton({
AutomaticSize = Enum.AutomaticSize.None,
MouseButton1Click = function()
local key = ui.specialUserInput.key.Text;
if #key > 0 then
local res = internalUtils:Request("https://api.codex.lol/v1/auth/claim", "POST", {
["Content-Type"] = "application/json"
}, {
key = key
});
if res then
changeTab(true);
return;
end
end
game:GetService("StarterGui"):SetCore("SendNotification", {
Title = "Codex Android",
Text = "Invalid key."
});
end,
Name = "register",
Position = UDim2.new(0.5, 6, 0.5, 6),
Size = UDim2.new(0, 160, 0, 32),
Text = "Register",
}),
textBox({
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.None,
Name = "key",
PlaceholderText = "Key...",
Position = UDim2.new(0.5, 0, 0.5, -6),
Size = UDim2.new(1, -62, 0, 32)
})
})
});
task.spawn(function()
local whitelistStep = startupStep.new("Whitelisting...", "Whitelisted!", ui.whitelist.process):Start();
repeat
task.wait(3);
until checkWhitelist();
whitelistStep:Complete();
local setupStep = startupStep.new("Setting Up...", "Setup Completed!", ui.whitelist.process):Start();
doSetup();
setupStep:Complete();
local loadUIStep = startupStep.new("Loading UI...", "Loaded!", ui.whitelist.process):Start();
local basis = createBasis(directory);
loadUIStep:Complete();
task.wait(1);
completionSignal:Fire(basis);
end);
return ui;
end
--[[ Module ]]--
framework.pages.startup.startup = (function(directory: Instance, signal: {any}): ScreenGui
completionSignal = signal;
if checkWhitelist() then
doSetup();
signal:Fire(createBasis(directory));
return;
end
return createUI(directory);
end);
end
do
--[[ Variables ]]--
local navbarButton = framework.components.navbarButton;
local instanceUtils = framework.dependencies.utils.instance;
local mathsUtils = framework.dependencies.utils.maths;
local codexEnum = framework.dependencies.codexEnum;
local userInputService = game:GetService("UserInputService");
local navbar = {
state = "hidden"
};
local map = {};
local selected;
--[[ Functions ]]--
local function setupDragBar(dragBar: TextButton, indent: NumberValue)
local isDragging = false;
local startPosition, startOffset;
userInputService.InputBegan:Connect(function(input)
if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and mathsUtils:IsWithin2DBounds(input.Position, dragBar.AbsolutePosition, dragBar.AbsolutePosition + dragBar.AbsoluteSize) then
isDragging = true;
startPosition, startOffset = input.Position.X, input.Position.X - dragBar.AbsolutePosition.X;
local endedConn; endedConn = input.Changed:Connect(function(property)
if input.UserInputState == Enum.UserInputState.End then
isDragging = false;
endedConn:Disconnect();
navbar:SetState(codexEnum.NavbarState[input.Position.X > 140 and "Full" or input.Position.X > 40 and "Partial" or "Hidden"]);
end
end);
end
end);
userInputService.InputChanged:Connect(function(input)
if isDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
instanceUtils:Tween(indent, 0.06, {
Value = math.clamp(input.Position.X - startOffset, 0, 260)
});
end
end);
end
local function createNavbar(gui: ScreenGui): Instance
local bar = instanceUtils:Create("Frame", {
BackgroundTransparency = 1,
Name = "navbar",
Parent = gui,
Size = UDim2.new(0, 0, 1, 0),
ZIndex = 2
}, {
instanceUtils:Create("NumberValue", {
Name = "indent",
Value = 0
}),
instanceUtils:Create("TextButton", {
BackgroundTransparency = 1,
Name = "dragBar",
Position = UDim2.new(1, 0, 0, 0),
Size = UDim2.new(0, 20, 1, 0),
Text = "",
ZIndex = 2
}, {
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 0.8,
BorderSizePixel = 0,
Name = "indicator",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 2, 0, 80),
ZIndex = 2
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
})
})
}),
instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.fromHex("15151d"),
BorderSizePixel = 0,
ClipsDescendants = true,
Name = "main",
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 2
}, {
instanceUtils:Create("ImageLabel", {
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "rbxassetid://11558559086",
Name = "codexIcon",
Position = UDim2.new(0, 20, 0, 30),
Size = UDim2.new(0, 36, 0, 36),
ZIndex = 2
}),
instanceUtils:Create("TextLabel", {
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "title",
Position = UDim2.new(0, 78, 0, 38),
Text = "Codex Modified",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTransparency = 1,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
ZIndex = 2
}),
instanceUtils:Create("TextLabel", {
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size12,
Name = "poweredBy",
Position = UDim2.new(0, 78, 0, 59),
Text = "",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 12,
TextTransparency = 1,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
ZIndex = 2
}),
instanceUtils:Create("Frame", {
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = "container",
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 2
}, {
instanceUtils:Create("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
Name = "list",
SortOrder = Enum.SortOrder.LayoutOrder,
VerticalAlignment = Enum.VerticalAlignment.Center
})
})
})
});
bar.indent:GetPropertyChangedSignal("Value"):Connect(function()
local value = bar.indent.Value;
local percentage = (math.clamp(value, 76, 260) - 76) / 184;
navbar.bar.Size = UDim2.new(0, value, 1, 0);
navbar.bar.main.codexIcon.Size = UDim2.new(0, 36 + percentage * 12, 0, 36 + percentage * 12);
navbar.bar.main.title.TextTransparency = 1 - percentage;
navbar.bar.main.poweredBy.TextTransparency = 0.6 + (1 - percentage) * 0.4;
for i, v in map do
i.instance.text.TextTransparency = 0.2 + (1 - percentage) * 0.8;
end
navbar.fade.BackgroundTransparency = 1 - percentage;
end);
setupDragBar(bar.dragBar, bar.indent);
return bar;
end
local function createFade(gui: ScreenGui): Instance
return instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.new(),
BackgroundTransparency = 1,
Name = "fade",
Parent = gui,
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 0
}, {
instanceUtils:Create("UIGradient", {
Name = "gradient",
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.3),
NumberSequenceKeypoint.new(0.2, 0.3),
NumberSequenceKeypoint.new(1, 1)
})
})
});
end
--[[ Module ]]--
function navbar:Initialize(directory: Instance)
self.bar = createNavbar(directory.gui);
self.fade = createFade(directory.gui);
self.background = directory.gui.background;
for i, v in { "editor", "localScripts", "globalScripts", "exploitSettings" } do
local module = framework[string.format("pages.%s.%s", v, v)];
self:Add(module.title, module.icon, module:Initialize(), module.overwritePosition);
end
self:SetState(codexEnum.NavbarState.Full, true);
end
function navbar:Add(text: string, icon: string, designatedFrame: Frame, overwritePosition: UDim2?)
local button = navbarButton.new(text, icon);
map[button] = designatedFrame;
button.instance.MouseButton1Click:Connect(function()
self:Select(button);
end);
if self.state ~= "full" then
button.instance.text.TextTransparency = 1;
end
if overwritePosition then
button.instance.Position = overwritePosition;
button.instance.Parent = self.bar.main;
else
button.instance.Parent = self.bar.main.container;
end
designatedFrame.Parent = self.bar.Parent.tabs;
end
function navbar:SetState(navbarState: number, ignoreTimeouts: boolean?)
local indent, state = 0, "hidden";
if navbarState == codexEnum.NavbarState.Partial then
indent, state = 76, "partial";
elseif navbarState == codexEnum.NavbarState.Full then
indent, state = 260, "full";
end
if self.tween then
self.tween:Cancel();
end
if self.nextInputCheck then
self.nextInputCheck:Disconnect();
pcall(task.cancel, self.timeoutDelay); -- if this is called from self.timeoutDelay itself, it will error. Cba to do a proper check. It'll be dead immediately after anyways
end
self.state = state;
self.tween = instanceUtils:Tween(self.bar.indent, 0.25, {
Value = indent;
});
if state ~= "hidden" and not ignoreTimeouts then
self.timeoutDelay = task.delay(5, function()
if self.state == state then
self:SetState(codexEnum.NavbarState.Hidden);
end
end);
self.nextInputCheck = userInputService.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
if self.state ~= "hidden" and input.Position.X > self.bar.indent.Value then
self:SetState(codexEnum.NavbarState.Hidden);
end
end
end);
end
end
function navbar:Select(button: TextButton)
if selected ~= nil then
selected:Highlight(false);
instanceUtils:Tween(map[selected], 0.2, {
Position = UDim2.new(1, 0, 1, 0)
});
if selected == button then
selected = nil;
instanceUtils:Tween(self.background, 0.2, {
BackgroundTransparency = 1
});
return;
end
end
selected = button;
selected:Highlight(true);
self:SetState(codexEnum.NavbarState.Partial);
instanceUtils:Tween(self.background, 0.2, {
BackgroundTransparency = 0.1
});
instanceUtils:Tween(map[button], 0.2, {
Position = UDim2.new(0, 0, 1, 0)
});
end
framework.pages.navbar.navbar = navbar;
end
do
--[[ Variables ]]--
local internalUtils = framework.dependencies.utils.internal;
local userSettings = framework.data.userSettings;
local cache;
local httpService = game:GetService("HttpService");
local teleportService = game:GetService("TeleportService");
local userInputService = game:GetService("UserInputService");
local player = game:GetService("Players").LocalPlayer;
local char, hum, root;
local connections = {};
--[[ Functions ]]--
local function getFlagFromLink(link: string)
local value = cache;
for i, v in string.split(link, ".") do
value = value[v];
end
return value;
end
local function registerCharacter(character: Instance)
char, hum, root = character, character:WaitForChild("Humanoid", 5), character:WaitForChild("HumanoidRootPart", 5);
if hum and root then
if cache.player.walkSpeed.enabled then
hum.WalkSpeed = cache.player.walkSpeed.value;
end
if cache.player.jumpPower.enabled then
hum.WalkSpeed = cache.player.jumpPower.value;
end
hum.Died:Connect(function()
char, hum, root = nil, nil, nil;
end);
end
end
local function joinServer(searchPriority: string?, id: number?)
local jobId = id;
if jobId == nil then
if searchPriority == "Best Ping" or searchPriority == "Random" then
local servers = {};
local res, cursor, count = nil, "", 0;
repeat
res = internalUtils:Request(string.format("https://games.roblox.com/v1/games/%d/servers/0?&excludeFullGames=true&cursor=%s", game.PlaceId, cursor));
if res then
for i, v in httpService:JSONDecode(res).data do
if v.id ~= game.JobId then
servers[#servers + 1] = v;
end
end
cursor = res.nextPageCursor;
count = count + 1;
end
until res == false or cursor == nil or count >= 10;
if searchPriority == "Ping" then
table.sort(servers, function(a, b)
return a.ping < b.ping;
end);
jobId = servers[1] and servers[1].id;
else
jobId = servers[1] and servers[math.random(1, #servers)].id;
end
else
local res = internalUtils:Request(string.format("https://games.roblox.com/v1/games/%d/servers/0?sortOrder=%d&excludeFullGames=true&limit=10", game.PlaceId, searchPriority == "Most Players" and 2 or 1));
if res then
for i, v in httpService:JSONDecode(res).data do
if v.id ~= game.JobId then
jobId = v.id;
break;
end
end
end
end
end
if jobId then
teleportService:TeleportToPlaceInstance(game.PlaceId, jobId);
else
game:GetService("StarterGui"):SetCore("SendNotification", {
Title = "Codex Android",
Text = "No suitable servers found"
});
end
end
--[[ Setup ]]--
player.CharacterAdded:Connect(registerCharacter);
--[[ Module ]]--
local map = {
{
title = "Executor",
items = {
{
title = "Auto Execute",
linkedSetting = "executor.autoExecute",
optionType = "toggle",
state = true
},
{
title = "Auto Save Tabs",
linkedSetting = "executor.autoSaveTabs",
optionType = "toggle",
state = false,
callback = function(state)
if state == false and isfile and isfile("codexTabs.json") then
delfile("codexTabs.json");
end
end
},
{
optionType = "separator"
},
{
title = "Unlock FPS",
linkedSetting = "executor.fps.unlocked",
optionType = "toggle",
state = false,
callback = function(state)
setfpscap(state and (cache.executor.fps.vSync and getfpscap() or cache.executor.fps.value) or 60);
end
},
{
title = "V-Sync",
linkedSetting = "executor.fps.vSync",
optionType = "toggle",
state = false,
callback = function(state)
if cache.executor.fps.unlocked then
setfpscap(state and getfpsmax() or cache.executor.fps.value);
end
end
},
{
title = "FPS Value",
linkedSetting = "executor.fps.value",
optionType = "slider",
min = 1,
max = 999,
float = 1,
callback = function(value)
if cache.executor.fps.unlocked and not cache.executor.fps.vSync then
setfpscap(value);
end
end
}
}
},
{
title = "Player",
items = {
{
title = "WalkSpeed Enabled",
linkedSetting = "player.walkSpeed.enabled",
optionType = "toggle",
state = false,
callback = function(state)
if hum then
hum.WalkSpeed = state and cache.player.walkSpeed.value or 16;
end
end
},
{
title = "WalkSpeed Value",
linkedSetting = "player.walkSpeed.value",
optionType = "slider",
min = 16,
max = 500,
float = 1,
callback = function(value)
if hum and cache.player.walkSpeed.enabled then
hum.WalkSpeed = value;
end
end
},
{
title = "JumpPower Enabled",
linkedSetting = "player.jumpPower.enabled",
optionType = "toggle",
state = false,
callback = function(state)
if hum then
hum.JumpPower = state and cache.player.jumpPower.value or 16;
end
end
},
{
title = "JumpPower Value",
linkedSetting = "player.jumpPower.value",
optionType = "slider",
min = 50,
max = 500,
float = 1,
callback = function(value)
if hum and cache.player.jumpPower.enabled then
hum.JumpPower = value;
end
end
}
}
},
{
title = "Server Hop",
items = {
{
title = "Server Priority",
linkedSetting = "serverHop.priority",
optionType = "dropdown",
items = { "Most Players", "Least Players", "Best Ping", "Random" }
},
{
title = "Server Hop",
optionType = "button",
callback = function()
joinServer(cache.serverHop.priority);
end
},
{
title = "Rejoin Current Server",
optionType = "button",
callback = function()
joinServer(nil, game.JobId);
end
}
}
}
};
--[[ Module ]]--
local layoutMap = {
map = map
};
function layoutMap:Initialize()
cache = userSettings.cache;
for i, v in self.map do
for i2, v2 in v.items do
if v2.optionType == "toggle" then
v2.state = getFlagFromLink(v2.linkedSetting);
elseif v2.optionType == "slider" then
v2.value = getFlagFromLink(v2.linkedSetting);
end
end
end
if player.Character then
task.spawn(registerCharacter, player.Character);
end
end
framework.pages.exploitSettings.layoutMap = layoutMap;
end
do
--[[ Variables ]]--
local userSettings = framework.data.userSettings;
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
--[[ Functions ]]--
local function createToggle(title: string, parent: Instance): Instance
return instanceUtils:Create("TextButton", {
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = stringUtils:ConvertToCamelCase(title),
Parent = parent,
Size = UDim2.new(1, 0, 0, 36),
Text = "",
TextColor3 = Color3.fromHex("000000"),
TextSize = 14
}, {
instanceUtils:Create("TextLabel", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Size = UDim2.new(1, 0, 0, 36),
Text = title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 0.5),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "indicator",
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0, 42, 0, 24)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = Color3.fromHex("3a3a4a"),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "dot",
Position = UDim2.new(0.5, -9, 0.5, 0),
Size = UDim2.new(0, 18, 0, 18)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
})
})
})
});
end
local function getDeterminingFactors(path: string)
local dict, key = userSettings.cache, nil;
for i, v in string.split(path, ".") do
if key ~= nil then
dict = dict[key];
end
key = v;
end
return dict, key;
end
--[[ Module ]]--
local toggle = {};
toggle.__index = toggle;
function toggle.new(toggleData: {any}, parent: Instance)
local newToggle = setmetatable({
instance = createToggle(toggleData.title or "Unnamed Toggle", parent),
state = toggleData.state or false,
linkedSetting = toggleData.linkedSetting,
callback = toggleData.callback
}, toggle);
local determiningDict, determiningKey = getDeterminingFactors(newToggle.linkedSetting);
userSettings:GetPropertyChangedSignal(newToggle.linkedSetting):Connect(function(state: boolean)
newToggle:Set(state);
end);
newToggle.instance.MouseButton1Click:Connect(function()
determiningDict[determiningKey] = not determiningDict[determiningKey];
end);
if newToggle.state then
newToggle:Set(true);
end
return newToggle;
end
function toggle:Set(state: boolean)
instanceUtils:Tween(self.instance.indicator.dot, 0.2, {
BackgroundColor3 = state and Color3.fromRGB(235, 69, 69) or Color3.fromHex("3a3a4a"),
Position = UDim2.new(0.5, state and 9 or -9, 0.5, 0)
});
instanceUtils:Tween(self.instance.indicator.stroke, 0.2, {
Color = state and Color3.fromRGB(235, 69, 69) or Color3.fromHex("3a3a4a")
});
if self.callback then
self.callback(state);
end
end
framework.pages.exploitSettings.optionTypes.toggle = toggle;
end
do
--[[ Variables ]]--
local userSettings = framework.data.userSettings;
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local userInputService = game:GetService("UserInputService");
--[[ Functions ]]--
local function createSlider(title: string, parent: Instance): Instance
return instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = stringUtils:ConvertToCamelCase(title),
Parent = parent,
Size = UDim2.new(1, 0, 0, 60)
}, {
instanceUtils:Create("TextLabel", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Size = UDim2.new(1, 0, 0, 36),
Text = title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("TextBox", {
AnchorPoint = Vector2.new(1, 0),
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "input",
PlaceholderColor3 = Color3.fromHex("b2b2b2"),
PlaceholderText = "...",
Position = UDim2.new(1, 0, 0, 0),
Size = UDim2.new(0, 0, 0, 36),
Text = "",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
})
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 1),
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "bar",
Position = UDim2.new(0.5, 0, 1, -8),
Size = UDim2.new(1, -12, 0, 4)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0, 0.5),
BackgroundColor3 = Color3.fromHex("eb4545"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "indicator",
Position = UDim2.new(0, 0, 0.5, 0),
Size = UDim2.new(0, 0, 1, 0)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("eb4545"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "dot",
Position = UDim2.new(1, 0, 0.5, 0),
Size = UDim2.new(0, 12, 0, 12)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
})
})
})
})
});
end
local function getDeterminingFactors(path: string)
local dict, key = userSettings.cache, nil;
for i, v in string.split(path, ".") do
if key ~= nil then
dict = dict[key];
end
key = v;
end
return dict, key;
end
local function getRoundedValue(input: number, float: number): number
local bracket = 1 / float;
return math.round(input * bracket) / bracket;
end
--[[ Module ]]--
local slider = {};
slider.__index = slider;
function slider.new(sliderData: {any}, parent: Instance)
local newSlider = setmetatable({
instance = createSlider(sliderData.title or "Unnamed Slider", parent),
value = sliderData.value or sliderData.min,
min = sliderData.min,
max = sliderData.max,
float = sliderData.float,
linkedSetting = sliderData.linkedSetting,
callback = sliderData.callback
}, slider);
local determiningDict, determiningKey = getDeterminingFactors(newSlider.linkedSetting);
local isDragging = false;
userSettings:GetPropertyChangedSignal(newSlider.linkedSetting):Connect(function(value: number)
newSlider:Set(value);
end);
newSlider.instance.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isDragging = true;
local endedConn; endedConn = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
endedConn:Disconnect();
isDragging = false;
end
end);
end
end)
userInputService.InputChanged:Connect(function(input)
if isDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local value = newSlider.min + ((newSlider.max - newSlider.min) * ((input.Position.X - newSlider.instance.bar.AbsolutePosition.X) / newSlider.instance.bar.AbsoluteSize.X));
determiningDict[determiningKey] = math.clamp(getRoundedValue(value, newSlider.float), newSlider.min, newSlider.max);
end
end);
newSlider.instance.input.FocusLost:Connect(function()
local value = tonumber(newSlider.instance.input.Text);
if value then
determiningDict[determiningKey] = math.clamp(getRoundedValue(value, newSlider.float), newSlider.min, newSlider.max);
end
end);
newSlider:Set(newSlider.value);
return newSlider;
end
function slider:Set(value: number)
instanceUtils:Tween(self.instance.bar.indicator, 0.2, {
Size = UDim2.new((value - self.min) / (self.max - self.min), 0, 0.5, 0)
});
self.instance.input.Text = tostring(value);
if self.callback then
self.callback(value);
end
end
framework.pages.exploitSettings.optionTypes.slider = slider;
end
do
--[[ Variables ]]--
local userSettings = framework.data.userSettings;
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local dropdownPopup = framework.popups.dropdown;
local popups = framework.popups.popups;
local textService = game:GetService("TextService");
--[[ Functions ]]--
local function createDropdown(title: string, default: string, parent: Instance): Instance
return instanceUtils:Create("Frame", {
Active = true,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = stringUtils:ConvertToCamelCase(title),
Parent = parent,
Selectable = true,
Size = UDim2.new(1, 0, 0, 36)
}, {
instanceUtils:Create("TextLabel", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Size = UDim2.new(1, 0, 0, 36),
Text = title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("TextButton", {
Active = false,
AnchorPoint = Vector2.new(1, 0.5),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "indicator",
Position = UDim2.new(1, -2, 0.5, 0),
Selectable = false,
Size = UDim2.new(0, 52 + textService:GetTextBoundsAsync(instanceUtils:Create("GetTextBoundsParams", {
Font = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
Text = default,
Size = 14,
Width = math.huge
})).X, 0, 32),
Text = ""
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = Color3.fromHex("3a3a4a"),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0, 0.5),
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "selected",
Position = UDim2.new(0, 8, 0.5, 0),
Size = UDim2.new(0, 0, 1, 0),
Text = default,
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(1, 0.5),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Image = "rbxassetid://14967733915",
ImageColor3 = Color3.fromHex("9fa4ba"),
Name = "icon",
Position = UDim2.new(1, -8, 0.5, 0),
Size = UDim2.new(0, 24, 0, 24)
})
})
});
end
local function getDeterminingFactors(path: string)
local dict, key = userSettings.cache, nil;
for i, v in string.split(path, ".") do
if key ~= nil then
dict = dict[key];
end
key = v;
end
return dict, key;
end
--[[ Module ]]--
local dropdown = {};
dropdown.__index = dropdown;
function dropdown.new(dropData: {any}, parent: Instance)
local newDropdown = setmetatable({
instance = createDropdown(dropData.title or "Unnamed Dropdown", dropData.value, parent),
title = dropData.title or "Unnamed Dropdown",
items = dropData.items,
value = dropData.value or dropData.items[1],
linkedSetting = dropData.linkedSetting,
callback = dropData.callback
}, dropdown);
local determiningDict, determiningKey = getDeterminingFactors(newDropdown.linkedSetting);
userSettings:GetPropertyChangedSignal(newDropdown.linkedSetting):Connect(function(value: number)
newDropdown:Set(value);
end);
newDropdown.instance.indicator.MouseButton1Click:Connect(function()
if dropdownPopup.selectedDropdown == dropData.title then
popups:Hide("dropdown");
else
popups:Show("dropdown", newDropdown, newDropdown.instance.indicator);
newDropdown.selectionChangedConnection = dropdownPopup.onSelectionChanged:Connect(function(value: string)
determiningDict[determiningKey] = value;
end);
end
end);
dropdownPopup.onDropdownChanged:Connect(function(value: string?)
if value and value ~= dropData.title and newDropdown.selectionChangedConnection then
newDropdown.selectionChangedConnection:Disconnect();
end
end);
newDropdown:Set(newDropdown.value);
return newDropdown;
end
function dropdown:Set(value: string)
self.value = value;
self.instance.indicator.selected.Text = value;
self.instance.indicator.Size = UDim2.new(0, 52 + textService:GetTextBoundsAsync(instanceUtils:Create("GetTextBoundsParams", {
Font = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
Text = value,
Size = 14,
Width = math.huge
})).X, 0, 32);
if self.callback then
self.callback(value);
end
end
framework.pages.exploitSettings.optionTypes.dropdown = dropdown;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
--[[ Functions ]]--
local function createButton(title: string, parent: Instance): Instance
return instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = stringUtils:ConvertToCamelCase(title),
Parent = parent,
Size = UDim2.new(1, 0, 0, 36)
}, {
instanceUtils:Create("TextLabel", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Size = UDim2.new(1, 0, 1, 0),
Text = title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("eb4545"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "click",
Position = UDim2.new(1, 0, 0.5, 0),
Size = UDim2.new(0, 0, 0, 32),
Text = "Click Here!",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 6),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
})
})
});
end
--[[ Module ]]--
local button = {};
button.__index = button;
function button.new(buttonData: {any}, parent: Instance)
local newButton = setmetatable({
instance = createButton(buttonData.title or "Unnamed Button", parent),
callback = buttonData.callback
}, button);
newButton.instance.click.MouseButton1Click:Connect(function()
if newButton.callback then
newButton.callback();
end
end);
return newButton;
end
framework.pages.exploitSettings.optionTypes.button = button;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
--[[ Functions ]]--
local function createSeparator(parent: Instance): Instance
return instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "separator",
Parent = parent,
Size = UDim2.new(1, 0, 0, 14)
}, {
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = Color3.fromHex("3a3a4a"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "line",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(1, 0, 0, 2)
}, {
instanceUtils:Create("UIGradient", {
Name = "gradient",
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1),
NumberSequenceKeypoint.new(0.175, 0),
NumberSequenceKeypoint.new(0.825, 0),
NumberSequenceKeypoint.new(1, 1)
})
})
})
});
end
--[[ Module ]]--
local separator = {};
separator.__index = separator;
function separator.new(separatorData: {any}, parent: Instance)
return setmetatable({
instance = createSeparator(parent)
}, separator);
end
framework.pages.exploitSettings.optionTypes.separator = separator;
end
do
--[[ Variables ]]--
local textButton = framework.components.base.textButton;
local instanceUtils = framework.dependencies.utils.instance;
local stringUtils = framework.dependencies.utils.string;
local layoutMap = framework.pages.exploitSettings.layoutMap;
local map = {};
--[[ Functions ]]--
local function createUI(directory: Instance): Instance
return instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0, 1),
BackgroundColor3 = Color3.fromHex("15151d"),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = "exploitSettings",
Parent = directory,
Position = UDim2.new(1, 0, 1, 0),
Size = UDim2.new(1, 0, 1, -36)
}, {
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticCanvasSize = Enum.AutomaticSize.X,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "tabButtons",
Position = UDim2.new(0.5, 0, 0, 10),
ScrollBarImageColor3 = Color3.fromHex("515158"),
ScrollBarThickness = 4,
ScrollingDirection = Enum.ScrollingDirection.X,
Size = UDim2.new(1, -20, 0, 40)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
}),
instanceUtils:Create("Folder", {
Name = "tabs"
})
});
end
local function createFrame(title: string, directory: Instance)
return instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 1),
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 130),
Name = stringUtils:ConvertToCamelCase(title),
Parent = directory,
Position = UDim2.new(0.5, 0, 1, 0),
ScrollBarThickness = 2,
Size = UDim2.new(1, -40, 1, -50),
Visible = false
}, {
instanceUtils:Create("UIListLayout", {
Name = "list",
Padding = UDim.new(0, 5),
SortOrder = Enum.SortOrder.LayoutOrder
})
});
end
--[[ Module ]]--
local exploitSettings = {
title = "Exploit Settings",
icon = "rbxassetid://11558196447",
overwritePosition = UDim2.new(0, 0, 1, -66),
selected = nil
};
function exploitSettings:Initialize(directory: Instance)
self.base = createUI(directory);
layoutMap:Initialize();
for i, v in layoutMap.map do
self:Add(v);
end
return self.base;
end
function exploitSettings:Add(tab: {any})
local btn = textButton({
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
Name = stringUtils:ConvertToCamelCase(tab.title),
Text = tab.title,
TextColor3 = Color3.fromRGB(159, 164, 186),
Parent = self.base.tabButtons
});
local frame = createFrame(tab.title, self.base.tabs);
btn.MouseButton1Click:Connect(function()
self:Select(tab);
end)
map[tab] = {
btn = btn,
frame = frame
};
for i, v in tab.items do
framework["pages.exploitSettings.optionTypes." .. v.optionType].new(v, frame);
end
if self.selected == nil then
self:Select(tab);
end
end
function exploitSettings:Select(tab: {any})
if self.selected then
if self.selected == tab then
return;
end
local oldMap = map[self.selected];
oldMap.frame.Visible = false;
instanceUtils:Tween(oldMap.btn, 0.2, {
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
TextColor3 = Color3.fromRGB(159, 164, 186)
});
end
self.selected = tab;
local newMap = map[tab];
newMap.frame.Visible = true;
instanceUtils:Tween(newMap.btn, 0.2, {
BackgroundColor3 = Color3.fromRGB(235, 69, 69),
TextColor3 = Color3.fromRGB(255, 255, 255)
});
end
framework.pages.exploitSettings.exploitSettings = exploitSettings;
end
do
--[[ Variables ]]--
local sets = {
keywords = {
"local",
"function",
"if",
"and",
"or",
"not",
"then",
"else",
"elseif",
"repeat",
"until",
"while",
"do",
"end",
"for",
"in",
"break",
"continue",
"return"
},
constants = {
"true",
"false",
"nil"
},
operators = {
"and",
"or",
"not",
"<",
">",
"<=",
">=",
"==",
"~=",
"+",
"-",
"*",
"/",
"%",
"^",
"#",
".."
},
assignments = {
"=",
"+=",
"-=",
"*=",
"/=",
"%=",
"^=",
"..="
},
globals = getfenv()
};
--[[ Functions ]]--
local function isDigit(character: string, index: number): boolean
return (character >= "0" and character <= "9") or (index > 0 and (character == "e" or character == "_"));
end
local function isHexadecimalDigit(character: string): boolean
return (character >= "0" and character <= "9") or (character >= "a" and character <= "f") or (character >= "A" and character <= "F");
end
local function isWord(character: string, isFirstCharacter: boolean): boolean
return character == "_" or (character >= "a" and character <= "z") or (character >= "A" and character <= "Z") or (not isFirstCharacter and isDigit(character, 0));
end
local function isWhitespace(character: string): boolean
return character == " " or character == "\t" or character == "\n";
end
--[[ Module ]]--
local lexer = {};
function lexer:_consume(): string
self.position += 1;
return string.sub(self.string, self.position, self.position);
end
function lexer:_peek(amount: number | nil): string
local index = self.position + (amount or 1);
return string.sub(self.string, index, index);
end
function lexer:_pushToken(tokenName: string, value: string)
self.result[#self.result + 1] = {
token = tokenName,
value = value
};
end
function lexer:_pushSymbol(text: string)
local token = "symbol";
if table.find(sets.operators, text) then
token = "operator";
elseif table.find(sets.assignments, text) then
token = "assignment";
end
self:_pushToken(token, text);
end
function lexer:_readString(): string
local delimiter, value = self:_peek(), self:_consume();
while self.position <= self.length do
local character = self:_consume();
if character == "\\" then
value ..= character .. self:_consume();
else
value ..= character;
if character == delimiter then
break;
end
end
end
return value;
end
function lexer:_readMultilineString(): string | nil
local delimiter = self:_peek();
if delimiter ~= "[" then
return nil;
end
local start = self.position;
local value = self:_consume();
local nestedEquals = 0;
while self.position <= self.length and self:_peek() == "=" do
value ..= self:_consume();
nestedEquals += 1;
end
if self:_peek() ~= "[" then
self.position = start;
return nil;
end
value ..= self:_consume();
while self.position <= self.length do
local character = self:_consume();
value ..= character;
if character == "]" then
local equalsCount = 0;
while self.position <= self.length and self:_peek() == "=" do
value ..= self:_consume();
equalsCount += 1;
end
if self:_peek() == "]" and nestedEquals == equalsCount then
value ..= self:_consume();
break;
end
end
end
return value;
end
function lexer:_readComment(): string
local value = self:_consume() .. self:_consume();
if self:_peek() == "[" then
local multilineString = self:_readMultilineString();
if multilineString ~= nil then
return value .. multilineString;
end
end
while self.position <= self.length do
local character = self:_peek();
if character == "\n" then
break;
end
value ..= self:_consume();
end
return value;
end
function lexer:_readWord(): string | nil
local value = "";
local isFirstCharacter = true;
while self.position <= self.length do
local character = self:_peek();
if not isWord(character, isFirstCharacter) then
break;
end
value ..= self:_consume();
isFirstCharacter = false;
end
return value ~= "" and value or nil;
end
function lexer:_readWhitespace(): string | nil
local value = "";
while self.position <= self.length do
local character = self:_peek();
if not isWhitespace(character) then
break;
end
value ..= self:_consume();
end
return value ~= "" and value or nil
end
function lexer:_readNumber(): string | nil
local value = "";
local isHexadecimal = false;
local index = 0;
while self.position <= self.length do
local character = self:_peek();
if character == "0" or character == "x" then
isHexadecimal = true;
value ..= self:_consume();
index += 1;
continue;
elseif (isHexadecimal and not isHexadecimalDigit(character)) or not isDigit(character, index) then
break;
end
value ..= self:_consume();
index += 1;
end
return value ~= "" and value or nil;
end
function lexer:_getAssociatedToken(word: string): string
if table.find(sets.keywords, word) then
return "keyword";
elseif table.find(sets.constants, word) then
return "constant";
elseif table.find(sets.operators, word) then
return "operator";
elseif sets.globals[word] then
return "global";
elseif self:_peek() == "(" then
return "callback";
end
return "identifier";
end
function lexer:Parse(text: string): {any}
self.string = text;
self.position = 0;
self.length = #text;
self.result = {};
local symbol = "";
while self.position <= self.length do
local character = self:_peek();
if character == "[" then
local multilineString = self:_readMultilineString();
if multilineString ~= nil then
self:_pushToken("string", multilineString);
continue;
end
elseif character == "'" or character == "\"" then
self:_pushToken("string", self:_readString());
continue;
elseif isDigit(character, 0) then
local value = self:_readNumber();
if value ~= nil then
self:_pushToken("number", value);
continue;
end
elseif isWord(character, true) then
local value = self:_readWord();
if value ~= nil then
self:_pushToken(self:_getAssociatedToken(value), value);
continue;
end
elseif character == "-" and self:_peek(2) == "-" then
self:_pushToken("comment", self:_readComment());
continue;
elseif isWhitespace(character) then
local value = self:_readWhitespace();
if value ~= nil then
self:_pushToken("whitespace", value);
continue;
end
end
symbol ..= self:_consume();
if symbol ~= "" then
self:_pushSymbol(symbol);
symbol = "";
else
break;
end
end
local result = {};
for i, v in self.result do
if string.match(v.value, "\n") then
local lines = string.split(v.value, "\n");
for i2, v2 in lines do
if v2 ~= "" then
result[#result + 1] = {
token = v.token,
value = v2
};
end
if i2 < #lines then
result[#result + 1] = {
token = "whitespace",
value = "\n"
};
end
end
else
result[#result + 1] = v;
end
end
return result;
end
framework.pages.editor.lexer = lexer;
end
do
--[[ Variables ]]--
local editorButton = framework.components.editorButton;
local tabButton = framework.components.tabButton;
local userSettings = framework.data.userSettings;
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local lexer = framework.pages.editor.lexer;
local tabSystem = framework.data.tabSystem;
local popups = framework.popups.popups;
local userInputService = game:GetService("UserInputService");
local textService = game:GetService("TextService");
local highlightAssociations = {
string = "#69B397",
number = "#91C087",
constant = "#E0BA91",
callback = "#81a6da",
keyword = "#E18DB9",
comment = "#606060",
global = "#bd93db",
operator = "#AAAAAA",
assignment = "#AAAAAA",
identifier = "#DCDCCC",
symbol = "#DCDCCC"
};
local map = {};
local base;
--[[ Functions ]]--
local function insertHighlight(position: Vector2, size: number, text: string, colour: string)
instanceUtils:Create("TextLabel", {
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/RobotoMono.json", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal),
Name = text,
Parent = base.contentContainer.inputBox,
Position = position,
Size = UDim2.new(0, size, 0, 12),
Text = text,
TextColor3 = Color3.fromHex(colour),
TextSize = 16,
ZIndex = 2
});
end
local function handleLexResult(lexResult: {any}, addTruncateEllipsis: boolean)
base.contentContainer.inputBox:ClearAllChildren();
local x, y = 0, 0;
local lastX = 0;
for i, v in lexResult do
lastX = textService:GetTextBoundsAsync(instanceUtils:Create("GetTextBoundsParams", {
Font = Font.new("rbxasset://fonts/families/RobotoMono.json", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal),
Size = 16,
Text = v.value,
Width = math.huge
})).X;
if v.token == "whitespace" then
if v.value == "\n" then
y += 16;
x = 0;
end
else
local associatedColour = highlightAssociations[v.token];
if associatedColour then
insertHighlight(UDim2.new(0, x, 0, y), lastX, v.value, associatedColour);
end
end
x += lastX;
if i == #lexResult and addTruncateEllipsis then
insertHighlight(UDim2.new(0, x, 0, y), lastX + 24, "...", highlightAssociations.identifier);
end
end
end
local function generateLineNumberString(text: string)
local str = "";
for i = 1, #string.split(text, "\n") do
str ..= tostring(i) .. "\n";
end
return string.sub(str, 1, #str - 1);
end
local function createUI(directory: Instance): Instance
return instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0, 1),
BackgroundColor3 = Color3.fromHex("15151d"),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = "editor",
Parent = directory,
Position = UDim2.new(1, 0, 1, 0),
Size = UDim2.new(1, 0, 1, -36)
}, {
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticCanvasSize = Enum.AutomaticSize.X,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "tabButtons",
Position = UDim2.new(0.5, 0, 0, 10),
ScrollBarImageColor3 = Color3.fromHex("515158"),
ScrollBarThickness = 4,
ScrollingDirection = Enum.ScrollingDirection.X,
Size = UDim2.new(1, -20, 0, 40)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
}),
instanceUtils:Create("ScrollingFrame", {
AutomaticCanvasSize = Enum.AutomaticSize.XY,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(),
HorizontalScrollBarInset = Enum.ScrollBarInset.ScrollBar,
Name = "contentContainer",
Position = UDim2.new(0, 0, 0, 50),
ScrollBarThickness = 4,
Size = UDim2.new(1, 0, 1, -50),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
}, {
instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/RobotoMono.json", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "lineNumbers",
Size = UDim2.new(0, 30, 0, 0),
Text = "1",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTransparency = 0.7,
TextXAlignment = Enum.TextXAlignment.Right,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextBox", {
BackgroundTransparency = 1,
ClearTextOnFocus = false,
CursorPosition = -1,
FontFace = Font.new("rbxasset://fonts/families/RobotoMono.json", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
MultiLine = true,
Name = "inputBox",
Position = UDim2.new(0, 40, 0, 0),
Size = UDim2.new(1, -40, 1, 0),
Text = "",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTransparency = 1,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
})
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 1),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "buttons",
Position = UDim2.new(1, -25, 1, -25),
Size = UDim2.new(1, -50, 0, 50)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
HorizontalAlignment = Enum.HorizontalAlignment.Right,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
})
});
end
--[[ Module ]]--
local editor = {
title = "Editor",
icon = "rbxassetid://11558196842",
selected = nil,
text = ""
};
function editor:Initialize(directory: Instance)
base = createUI();
do
local inputBox = base.contentContainer.inputBox;
inputBox:GetPropertyChangedSignal("Text"):Connect(function()
if userInputService:GetFocusedTextBox() == inputBox then
self:SetText(inputBox.Text);
end
end);
inputBox.FocusLost:Connect(function()
if userSettings.cache.executor.autoSaveTabs then
tabSystem:Save();
end
end);
end
do
editorButton("New Tab", "rbxassetid://14808232261", {
MouseButton1Click = function()
tabSystem:Add("Script " .. tostring(tabSystem.accumulator + 1));
end,
Parent = base.buttons
});
editorButton("Save Current Tab", "rbxassetid://14883119324", {
MouseButton1Click = function()
popups:Show("saveCurrentTab", select(-1, tabSystem:Get(self.selected)));
end,
Parent = base.buttons
});
editorButton("Execute Clipboard", "rbxassetid://14808228630", {
MouseButton1Click = function()
if getclipboard then
internalUtils:Execute(getclipboard());
end
end,
Parent = base.buttons
});
editorButton("Clear", "rbxassetid://14808219001", {
MouseButton1Click = function()
self:SetText("");
end,
Parent = base.buttons
});
editorButton("Execute", "rbxassetid://14808225296", {
BackgroundColor3 = Color3.fromRGB(235, 69, 69),
MouseButton1Click = function()
internalUtils:Execute(self.text);
end,
Parent = base.buttons
}, Color3.new(1, 1, 1));
end
tabSystem.onTabCreated:Connect(function(tab)
local btn = tabButton.new(tab);
btn.instance.Parent = base.tabButtons;
map[tab.index] = btn;
if userSettings.cache.executor.autoSaveTabs then
tabSystem:Save();
end
end);
tabSystem.onTabRemoved:Connect(function(tab)
map[tab.index]:Destroy();
map[tab.index] = nil;
if userSettings.cache.executor.autoSaveTabs then
tabSystem:Save();
end
end);
tabSystem.onTabSelected:Connect(function(tab)
if self.selected then
map[self.selected]:Highlight(false);
end
map[tab.index]:Highlight(true);
self.selected = tab.index;
self:SetText(tab.content);
end);
if #tabSystem.cache > 0 then
for i, v in tabSystem.cache do
tabSystem.onTabCreated:Fire(v);
end
tabSystem:Select(tabSystem.cache[1].index);
else
tabSystem:Add("Script 1");
end
return base;
end
function editor:SetText(text: string)
local truncatedText = string.sub(text, 1, 16384);
self.text = text;
tabSystem:UpdateContent(self.selected, text);
base.contentContainer.inputBox.Text = truncatedText;
base.contentContainer.lineNumbers.Text = generateLineNumberString(truncatedText);
handleLexResult(lexer:Parse(truncatedText), #truncatedText < #text);
end
framework.pages.editor.editor = editor;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local stringUtils = framework.dependencies.utils.string;
--[[ Module ]]--
framework.pages.localScripts.builtInScript = (function(builtInScript: {any})
local base = instanceUtils:Create("ImageLabel", {
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = builtInScript.icon,
ImageTransparency = 0.5,
Name = stringUtils:ConvertToCamelCase(builtInScript.title),
Size = UDim2.new(1, 0, 1, 0)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("TextButton", {
AnchorPoint = Vector2.new(1, 1),
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("eb4545"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
Name = "execute",
Position = UDim2.new(1, -10, 1, -10),
Size = UDim2.new(0, 40, 0, 40),
Text = ""
}, {
instanceUtils:Create("UICorner", {
Name = "corner"
}),
instanceUtils:Create("ImageLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "rbxassetid://13075469149",
Name = "icon",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(0, 18, 0, 18)
})
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "title",
Position = UDim2.new(0.5, 0, 0, 14),
Size = UDim2.new(1, -28, 0, 0),
Text = builtInScript.title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0, 1),
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "description",
Position = UDim2.new(0, 14, 1, -14),
Size = UDim2.new(1, -70, 1, -52),
Text = builtInScript.description,
TextColor3 = Color3.fromHex("c8c8c8"),
TextSize = 13,
TextTruncate = Enum.TextTruncate.AtEnd,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
})
});
base.execute.MouseButton1Click:Connect(function()
internalUtils:Execute(builtInScript.content);
end);
return base;
end);
end
do
--[[ Variables ]]--
local textButton = framework.components.base.textButton;
local savedScripts = framework.data.savedScripts;
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local stringUtils = framework.dependencies.utils.string;
local tabSystem;
--[[ Functions ]]--
local function createSavedScript(scriptData: {any}): Instance
return instanceUtils:Create("Frame", {
BackgroundColor3 = Color3.fromHex("202028"),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = stringUtils:ConvertToCamelCase(scriptData.title),
Size = UDim2.new(1, -4, 0, 82)
}, {
instanceUtils:Create("UICorner", {
Name = "corner"
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Position = UDim2.new(0.5, 0, 0.5, -2),
Size = UDim2.new(1, -32, 0, 0),
Text = scriptData.title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 1),
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "buttons",
Position = UDim2.new(1, -8, 1, -8),
Size = UDim2.new(0, 0, 0, 30)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
}),
textButton({
BackgroundColor3 = Color3.fromHex("3a3a4a"),
Name = "execute",
Text = "Execute"
}),
textButton({
BackgroundColor3 = Color3.fromHex("3a3a4a"),
Name = "loadToEditor",
Text = "Load to Editor"
}),
textButton({
BackgroundColor3 = Color3.fromHex("3a3a4a"),
Name = "delete",
Text = "Delete"
})
}),
instanceUtils:Create("TextButton", {
AnchorPoint = Vector2.new(1, 0),
AutoButtonColor = false,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/SourceSansPro.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "autoExecute",
Position = UDim2.new(1, -8, 0, 8),
Size = UDim2.new(0, 160, 0, 28),
Text = "",
TextColor3 = Color3.fromHex("000000"),
TextSize = 14
}, {
instanceUtils:Create("TextLabel", {
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "text",
Size = UDim2.new(1, 0, 1, 0),
Text = "Auto Execute",
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 16,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(1, 0.5),
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "indicator",
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0, 42, 0, 24)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
}),
instanceUtils:Create("UIStroke", {
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = scriptData.autoExecute and Color3.fromRGB(235, 69, 69) or Color3.fromRGB(58, 58, 74),
Name = "stroke",
Thickness = 2
}),
instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundColor3 = scriptData.autoExecute and Color3.fromRGB(235, 69, 69) or Color3.fromRGB(58, 58, 74),
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
Name = "dot",
Position = UDim2.new(0.5, scriptData.autoExecute and 9 or -9, 0.5, 0),
Size = UDim2.new(0, 18, 0, 18)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(1, 0),
Name = "corner"
})
})
})
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "description",
Position = UDim2.new(0.5, 0, 0.5, 2),
Size = UDim2.new(1, -32, 0, 0),
Text = scriptData.description,
TextColor3 = Color3.fromHex("9fa4ba"),
TextSize = 14,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left
})
});
end
--[[ Module ]]--
local savedScript = {};
savedScript.__index = savedScript;
function savedScript.new(scriptData: {any})
local newSavedScript = setmetatable({
scriptData = scriptData,
instance = createSavedScript(scriptData)
}, savedScript);
newSavedScript.instance.buttons.execute.MouseButton1Click:Connect(function()
internalUtils:Execute(scriptData.content);
end);
newSavedScript.instance.buttons.loadToEditor.MouseButton1Click:Connect(function()
if tabSystem == nil then
tabSystem = framework.data.tabSystem;
end
tabSystem:Add(scriptData.title, scriptData.content);
end);
newSavedScript.instance.buttons.delete.MouseButton1Click:Connect(function()
savedScripts:Remove(scriptData.index);
end);
if scriptData.autoExecute then
newSavedScript:ToggleAutomaticExecution(true);
end
scriptData.onAutoExecuteToggled:Connect(function(state: boolean)
newSavedScript:ToggleAutomaticExecution(state);
end);
newSavedScript.instance.autoExecute.MouseButton1Click:Connect(function()
savedScripts:ToggleAutomaticExecution(scriptData.index, not scriptData.autoExecute);
end);
return newSavedScript;
end
function savedScript:ToggleAutomaticExecution(state: boolean)
instanceUtils:Tween(self.instance.autoExecute.indicator.dot, 0.2, {
BackgroundColor3 = state and Color3.fromRGB(235, 69, 69) or Color3.fromHex("3a3a4a"),
Position = UDim2.new(0.5, state and 9 or -9, 0.5, 0)
});
instanceUtils:Tween(self.instance.autoExecute.indicator.stroke, 0.2, {
Color = state and Color3.fromRGB(235, 69, 69) or Color3.fromHex("3a3a4a")
});
end
framework.pages.localScripts.savedScript = savedScript;
end
do
--[[ Variables ]]--
local savedScripts = framework.data.savedScripts;
local textButton = framework.components.base.textButton;
local instanceUtils = framework.dependencies.utils.instance;
local builtInScript = framework.pages.localScripts.builtInScript;
local savedScript = framework.pages.localScripts.savedScript;
local map = {};
local savedScriptMap = {};
--[[ Functions ]]--
local function createUI(directory: Instance): Instance
return instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0, 1),
BackgroundColor3 = Color3.fromHex("15151d"),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = "localScripts",
Parent = directory,
Position = UDim2.new(1, 0, 1, 0),
Size = UDim2.new(1, 0, 1, -36)
}, {
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticCanvasSize = Enum.AutomaticSize.X,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "tabButtons",
Position = UDim2.new(0.5, 0, 0, 10),
ScrollBarImageColor3 = Color3.fromHex("515158"),
ScrollBarThickness = 4,
ScrollingDirection = Enum.ScrollingDirection.X,
Size = UDim2.new(1, -20, 0, 40)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
}),
textButton({
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
Name = "builtInLibrary",
Text = "Built-in Library",
TextColor3 = Color3.fromRGB(159, 164, 186)
}),
textButton({
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
Name = "savedScripts",
Text = "Saved Scripts",
TextColor3 = Color3.fromRGB(159, 164, 186)
})
}),
instanceUtils:Create("Folder", {
Name = "tabs"
}, {
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "builtInLibrary",
Position = UDim2.new(0.5, 0, 1, 0),
ScrollBarImageColor3 = Color3.fromHex("191923"),
ScrollBarThickness = 4,
Size = UDim2.new(1, -28, 1, -60),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
}, {
instanceUtils:Create("UIGridLayout", {
CellPadding = UDim2.new(0, 12, 0, 12),
CellSize = UDim2.new(0.333, -12, 0.3, 50),
HorizontalAlignment = Enum.HorizontalAlignment.Center,
Name = "grid",
SortOrder = Enum.SortOrder.LayoutOrder
})
}),
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0, 1),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "savedScripts",
Position = UDim2.new(0, 14, 1, 0),
ScrollBarImageColor3 = Color3.fromHex("191923"),
ScrollBarThickness = 4,
Size = UDim2.new(1, -24, 1, -60),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar,
Visible = false
}, {
instanceUtils:Create("UIListLayout", {
Name = "list",
Padding = UDim.new(0, 12),
SortOrder = Enum.SortOrder.LayoutOrder
})
})
})
});
end
--[[ Module ]]--
local localScripts = {
title = "Local Scripts",
icon = "rbxassetid://11558196718",
selected = nil
};
function localScripts:Initialize(directory: Instance)
self.base = createUI(directory);
map[self.base.tabButtons.builtInLibrary] = self.base.tabs.builtInLibrary;
map[self.base.tabButtons.savedScripts] =self. base.tabs.savedScripts;
for i, v in framework.data.builtInScripts do
builtInScript(v).Parent = self.base.tabs.builtInLibrary;
end
for i, v in savedScripts.cache do
self:AddSavedScript(v);
end
savedScripts.onScriptAdded:Connect(function(newScript)
self:AddSavedScript(newScript);
end);
savedScripts.onScriptRemoved:Connect(function(oldScript)
local oldSavedScript = savedScriptMap[oldScript];
if oldSavedScript then
oldSavedScript.instance:Destroy();
end
end);
for i, v in map do
i.MouseButton1Click:Connect(function()
self:Select(i);
end);
end
self:Select(self.base.tabButtons.builtInLibrary);
return self.base;
end
function localScripts:AddSavedScript(newScript: {any})
local newSavedScript = savedScript.new(newScript);
savedScriptMap[newScript] = newSavedScript;
newSavedScript.instance.Parent = self.base.tabs.savedScripts;
end
function localScripts:Select(button: TextButton)
if self.selected then
if self.selected == button then
return;
end
map[self.selected].Visible = false;
instanceUtils:Tween(self.selected, 0.2, {
BackgroundColor3 = Color3.fromRGB(58, 58, 74),
TextColor3 = Color3.fromRGB(159, 164, 186)
});
end
self.selected = button;
map[button].Visible = true;
instanceUtils:Tween(self.selected, 0.2, {
BackgroundColor3 = Color3.fromRGB(235, 69, 69),
TextColor3 = Color3.fromRGB(255, 255, 255)
});
end
framework.pages.localScripts.localScripts = localScripts;
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local mathsUtils = framework.dependencies.utils.maths;
local popups = framework.popups.popups;
local textService = game:GetService("TextService");
local tagOrder = { "verified", "isPatched", "isUniversal", "key" };
local tags = {
key = {
title = "Key",
colour = "#eab515"
},
isPatched = {
title = "Patched",
colour = "#eb4545"
},
isUniversal = {
title = "Universal",
colour = "#459beb"
},
verified = {
title = "Verified",
colour = "#15151d"
}
};
--[[ Functions ]]--
local function generateTag(data: {any}): Instance
return instanceUtils:Create("TextLabel", {
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex(data.colour),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = data.title,
Size = UDim2.new(0, 0, 0, 30),
Text = data.title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
})
});
end
--[[ Module ]]--
framework.pages.globalScripts.scriptResult = (function(scriptResult: {any}): Instance
local viewCount = mathsUtils:FormatAsCount(scriptResult.views, 0.1);
local base = instanceUtils:Create("ImageButton", {
Active = false,
AutoButtonColor = false,
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = string.format("https://assetgame.roblox.com/Game/Tools/ThumbnailAsset.ashx?aid=%d&fmt=png&wd=1920&ht=1080", scriptResult.isUniversal and 4483381587 or scriptResult.game.gameId),
ImageTransparency = 0.5,
Name = scriptResult.title,
Selectable = false,
Size = UDim2.new(1, 0, 1, 0)
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size18,
Name = "title",
Position = UDim2.new(0.5, 0, 0, 48),
Size = UDim2.new(1, -28, 0, 0),
Text = scriptResult.title,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 16,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(0.5, 1),
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "description",
Position = UDim2.new(0.5, 0, 1, -14),
Size = UDim2.new(1, -28, 1, -86),
Text = scriptResult.description or "",
TextColor3 = Color3.fromHex("c8c8c8"),
TextSize = 13,
TextTruncate = Enum.TextTruncate.AtEnd,
TextWrap = true,
TextWrapped = true,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top
}),
instanceUtils:Create("TextLabel", {
AnchorPoint = Vector2.new(1, 0),
AutomaticSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("3a3a4a"),
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "views",
Position = UDim2.new(1, -10, 0, 10),
Size = UDim2.new(0, 0, 0, 30),
Text = viewCount,
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14
}, {
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
})
}),
instanceUtils:Create("ScrollingFrame", {
Active = true,
AutomaticCanvasSize = Enum.AutomaticSize.X,
BackgroundColor3 = Color3.fromHex("ffffff"),
BackgroundTransparency = 1,
BorderColor3 = Color3.fromHex("000000"),
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "tags",
Position = UDim2.new(0, 10, 0, 10),
ScrollBarImageColor3 = Color3.fromHex("000000"),
ScrollBarThickness = 0,
ScrollingDirection = Enum.ScrollingDirection.X,
Size = UDim2.new(1, -(textService:GetTextBoundsAsync(instanceUtils:Create("GetTextBoundsParams", {
Font = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
Text = viewCount,
Size = 14,
Width = math.huge
})).X + 46), 0, 30)
}, {
instanceUtils:Create("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
Name = "list",
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
})
})
});
for i, v in tagOrder do
if scriptResult[v] then
generateTag(tags[v]).Parent = base.tags;
end
end
base.MouseButton1Click:Connect(function()
popups:Show("globalScriptSelection", scriptResult);
end);
return base;
end);
end
do
--[[ Variables ]]--
local instanceUtils = framework.dependencies.utils.instance;
local internalUtils = framework.dependencies.utils.internal;
local scriptResult = framework.pages.globalScripts.scriptResult;
local httpService = game:GetService("HttpService");
local basis;
--[[ Module ]]--
local globalScripts = {
title = "Global Scripts",
icon = "rbxassetid://13449277995",
isSearching = false
};
function globalScripts:Initialize(directory: Instance)
basis = instanceUtils:Create("Frame", {
AnchorPoint = Vector2.new(0, 1),
BackgroundColor3 = Color3.fromHex("15151d"),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Name = "globalScripts",
Position = UDim2.new(1, 0, 1, 0),
Size = UDim2.new(1, 0, 1, -36)
}, {
instanceUtils:Create("ScrollingFrame", {
AnchorPoint = Vector2.new(0.5, 1),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
Name = "container",
Position = UDim2.new(0.5, 0, 1, 0),
ScrollBarImageColor3 = Color3.fromHex("050507"),
ScrollBarThickness = 4,
ScrollingDirection = Enum.ScrollingDirection.Y,
Size = UDim2.new(1, -28, 1, -60),
VerticalScrollBarInset = Enum.ScrollBarInset.ScrollBar
}, {
instanceUtils:Create("UIGridLayout", {
CellPadding = UDim2.new(0, 12, 0, 12),
CellSize = UDim2.new(0.333, -12, 0.3, 50),
HorizontalAlignment = Enum.HorizontalAlignment.Center,
Name = "grid",
SortOrder = Enum.SortOrder.LayoutOrder
})
}),
instanceUtils:Create("TextButton", {
AnchorPoint = Vector2.new(0.5, 0),
AutoButtonColor = false,
BackgroundColor3 = Color3.fromRGB(21, 21, 29),
MouseButton1Click = function()
basis.searchBox.input:CaptureFocus();
end,
Name = "searchBox",
Position = UDim2.new(0.5, 0, 0, 14),
Size = UDim2.new(1, -28, 0, 36),
Text = ""
}, {
instanceUtils:Create("TextBox", {
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
FontFace = Font.new("rbxasset://fonts/families/GothamSSm.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal),
FontSize = Enum.FontSize.Size14,
Name = "input",
PlaceholderColor3 = Color3.fromHex("b2b2b2"),
PlaceholderText = "Search...",
Position = UDim2.new(0.5, 0, 0.5, 0),
Size = UDim2.new(1, 0, 1, 0),
Text = "",
TextColor3 = Color3.fromHex("ffffff"),
TextSize = 14,
TextTruncate = Enum.TextTruncate.AtEnd,
TextXAlignment = Enum.TextXAlignment.Left
}),
instanceUtils:Create("UICorner", {
CornerRadius = UDim.new(0, 5),
Name = "corner"
}),
instanceUtils:Create("UIPadding", {
Name = "padding",
PaddingLeft = UDim.new(0, 12),
PaddingRight = UDim.new(0, 12)
})
});
});
basis.searchBox.input.FocusLost:Connect(function()
local contents = basis.searchBox.input.Text;
if #contents > 0 then
self:Search(contents);
end
end);
do
local res = internalUtils:Request("https://scriptblox.com/api/script/search?filters=free&q=Hub", "GET", {
["Content-Type"] = "application/json"
});
if res then
self:ParseResults(httpService:JSONDecode(res).result.scripts);
end
end
return basis;
end
function globalScripts:Search(query: string)
if self.isSearching or getgenv == nil then
return;
end
self.isSearching = true;
local res = internalUtils:Request("https://scriptblox.com/api/script/search?filters=free&q=" .. httpService:UrlEncode(query), "GET", {
["Content-Type"] = "application/json"
});
if res then
self:ParseResults(httpService:JSONDecode(res).result.scripts);
end
self.isSearching = false;
end
function globalScripts:ParseResults(res: {any})
for i, v in basis.container:GetChildren() do
if v:IsA("ImageButton") then
v:Destroy();
end
end
for i, v in res do
scriptResult(v).Parent = basis.container;
end
end
framework.pages.globalScripts.globalScripts = globalScripts;
end
do
local signal = framework.dependencies.signal;
local instanceUtils = framework.dependencies.utils.instance;
framework.init = (function()
local sig = signal.new();
local directory = instanceUtils:DynamicParent(instanceUtils:Create("Folder", {
Name = "Codex"
}));
local login;
sig:Connect(function(basis)
if login then
login:Destroy();
end
basis.gui.Enabled = true;
basis.popups.Enabled = true;
framework.popups.popups:RegisterGUI(basis.popups);
framework.pages.navbar.navbar:Initialize(directory);
if getgenv then
for i, v in { "runcode", "isuifile", "readuifile", "writeuifile"--[[, "iscustomasset", "writecustomasset"]] } do
getgenv()[i] = nil;
end
end
end);
login = framework.pages.startup.startup(directory, sig);
end);
end
framework.init();
end)