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)