Skip to content

Instantly share code, notes, and snippets.

@depthso
Created April 25, 2026 22:45
Show Gist options
  • Select an option

  • Save depthso/94341c4783342942fcebd89ef3c3c244 to your computer and use it in GitHub Desktop.

Select an option

Save depthso/94341c4783342942fcebd89ef3c3c244 to your computer and use it in GitHub Desktop.
SOURCE CODE FOR ARCEUS X V5 AS OF 04/25/26
(function() return [[
/$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$$ /$$ /$$ /$$$$$$ /$$ /$$ /$$ /$$ /$$$$$$$
/$$__ $$| $$__ $$ /$$__ $$| $$_____/| $$ | $$ /$$__ $$ | $$ / $$ | $$ | $$| $$____/
| $$ \ $$| $$ \ $$| $$ \__/| $$ | $$ | $$| $$ \__/ | $$/ $$/ | $$ | $$| $$
| $$$$$$$$| $$$$$$$/| $$ | $$$$$ | $$ | $$| $$$$$$ \ $$$$/ | $$ / $$/| $$$$$$$
| $$__ $$| $$__ $$| $$ | $$__/ | $$ | $$ \____ $$ >$$ $$ \ $$ $$/ |_____ $$
| $$ | $$| $$ \ $$| $$ $$| $$ | $$ | $$ /$$ \ $$ /$$/\ $$ \ $$$/ /$$ \ $$
| $$ | $$| $$ | $$| $$$$$$/| $$$$$$$$| $$$$$$/| $$$$$$/ | $$ \ $$ \ $/ | $$$$$$/
|__/ |__/|__/ |__/ \______/ |________/ \______/ \______/ |__/ |__/ \_/ \______/
- UI Designed & Built by blackmomo
- Framework & Codebase by riky47
- Backend by tiahh
Welcome, take a look at this non-skidded source.
]] end)()
if not LPH_OBFUSCATED then -- Luraph integration
local dummy = function(...) return ... end
LPH_NO_VIRTUALIZE = LPH_NO_VIRTUALIZE or dummy
LPH_NO_UPVALUES = LPH_NO_UPVALUES or dummy
LPH_OBFUSCATED = LPH_OBFUSCATED or false
LPH_JIT_MAX = LPH_JIT_MAX or dummy
LPH_ENCFUNC = LPH_ENCFUNC or dummy
LPH_ENCSTR = LPH_ENCSTR or dummy
LPH_ENCNUM = LPH_ENCNUM or dummy
LPH_CRASH = LPH_CRASH or dummy
LPH_JIT = LPH_JIT or dummy
end
local framework, endpoints do
endpoints = {
arceus_neo = LPH_ENCSTR("https://raw.githubusercontent.com/SPDM-Team/Arceus-X-NEO-public/refs/heads/main"),
xploit = LPH_ENCSTR("https://raw.githubusercontent.com/Riky47/Xploit-Framework/refs/heads/main"),
scriptblox = LPH_ENCSTR("https://scriptblox.com"),
api = LPH_ENCSTR("https://spdmteam.com/api"),
rbxcdn = {
tr = LPH_ENCSTR("https://tr.rbxcdn.com"),
t1 = LPH_ENCSTR("https://t1.rbxcdn.com")
}
}
endpoints.arceus_v = `{endpoints.arceus_neo}/axv5`
pcall(function() loadstring(game:HttpGet(`{endpoints.arceus_neo}/init.lua`))() end)
-- Include Arceus X adapter
local axinclude, axerr = pcall(function()
loadstring(game:HttpGet(`{endpoints.arceus_neo}/adapter.lua`))()
end)
-- Include framework
local cloneref = cloneref or function(...) return ... end
local run: RunService = cloneref(game:GetService("RunService"))
if run:IsStudio() then
if _G.Once then return end _G.Once = true
framework = require(game:GetService("StarterGui"):WaitForChild("Wave"):WaitForChild("WaveFramework"))
else
framework = loadstring(arceus.WHWKIIIIWIIOSU(game:HttpGet(`https://raw.githubusercontent.com/SPDM-Team/Arceus-X-NEO-public/refs/heads/main/axv5/Xploit-Framework/index.lua`)))()
end
if not axinclude and not framework.protected:IsStudio() then
return framework.console.error("Unable to load Arceus X Adapter: " .. axerr)
end
-- Adapter to SPDM file system
local spdminclude, spdmerr = pcall(function()
loadstring(framework.utils.http:Get(`{endpoints.xploit}/mods/spdm-fs.lua`))(framework)
end)
if not spdminclude and not framework.protected:IsStudio() then
return framework.console.error("Unable to load SPDM file system adapter: " .. spdmerr)
end
end
-- Configs
local EXPLOIT_CONFIGS, OS_CONFIGS do
OS_CONFIGS = {
IS_IOS = (framework.env.arceus and framework.env.arceus.is_ios or function()
return (not framework.protected:IsStudio()) and framework.protected:GetService("UserInputService"):GetPlatform() == Enum.Platform.IOS or false
end)(),
IS_VNG = (framework.env.arceus and framework.env.arceus.is_vng or function()
return false
end)(),
DEVICE_INFO = framework.env.arceus and framework.env.arceus.WOWPALAKSZMNXBRU or function()
return false
end,
HWID = (framework.env.gethwid)()
}
OS_CONFIGS.HIDE_PREFIX = OS_CONFIGS.IS_IOS and "" or "."
EXPLOIT_CONFIGS = {
EXPLOIT_FULLNAME = LPH_ENCSTR("Arceus X v5"),
EXPLOIT_IDENTITY = LPH_ENCSTR("Arceus"),
UI_VERSION = LPH_ENCSTR("1.0.0"),
API_CRYPT = LPH_ENCSTR("SPDMTeam_1LPPWJfrnW8BSlsj24D54ghgkXakSd2bztZGJouYfITeRNNZhVFcShtIUlbLZSPJ"),
FILES_KEY = LPH_ENCSTR("ARCEUS_W6dKPSt6TTzAdS4pYVG3IKu9iigp8Kb66bbu9E08Osw9wGUztD5ENIezDxp30Yz7"),
CLOUD_SCRIPTS = OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("cloudscripts.ax"),
SETTINGS_FILE = OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("settings.ax"),
LICENSE_FILE = OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("license.ax"),
VERSION_FILE = OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("version.ax"),
PLUGINS_FILE = OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("plugins.ax"),
TABS_FILE = LPH_ENCSTR("Tabs.json"),
AUTH_FETCH_DELAY = 5,
SETTINGS = {
Popups_Confirmation = true,
Popups_Toast = true,
Colors_Primary = Color3.fromRGB(219, 0, 0):ToHex(),
Colors_Secondary = Color3.fromRGB(0, 0, 0):ToHex(),
Colors_Text_Primary = Color3.fromRGB(255, 255, 255):ToHex(),
Colors_Text_Secondary = Color3.fromRGB(100, 100, 100):ToHex(),
FontSizes_Editor = 16,
TextboxWrapper = false,
Anim_Quality = "High",
Country_Code = "EN",
UI_WindowState = 1,
User_AI_OpenAI = "",
User_Intro = true,
User_EMail = "",
Setting_Fps = 60,
Settings_Afk = false,
Fonts_HeadingItalic = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.Medium, Enum.FontStyle.Italic),
Fonts_Description = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.Light, Enum.FontStyle.Normal), -- Descrizioni secondarie o testi leggeri
Fonts_Editor = Font.new("rbxasset://fonts/families/Inconsolata.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
Fonts_Black = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.ExtraBold, Enum.FontStyle.Normal), -- Titoli principali
Fonts_Heading = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.Medium, Enum.FontStyle.Normal), -- Sottotitoli o intestazioni
Fonts_Body = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal), -- Testo principale
Fonts_Caption = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.Thin, Enum.FontStyle.Italic), -- Annotazioni, piccole etichette
Fonts_Title = Font.new("rbxasset://fonts/families/Montserrat.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal) -- Titoli principali
}
}
framework.protected:ProtectTable(OS_CONFIGS)
framework.protected:ProtectTable(EXPLOIT_CONFIGS)
end
local ARCEUS_FOLDERS do
ARCEUS_FOLDERS = framework.protected:GCProtect({
AUTOEXECUTE = framework.storage:CreateDirectory(LPH_ENCSTR("autoexecute"), LPH_ENCSTR("Autoexec")),
SCRIPT_HUB = framework.storage:CreateDirectory(LPH_ENCSTR("scripthub"), LPH_ENCSTR("Script Hub")),
WORKSPACE = framework.storage:CreateDirectory(LPH_ENCSTR("workspace"), LPH_ENCSTR("Workspace")),--OS_CONFIGS.IS_IOS and "" or LPH_ENCSTR("Workspace")),
CONFIGS = framework.storage:CreateDirectory(LPH_ENCSTR("configs"), LPH_ENCSTR("Configs"))
})
-- Sub directories
ARCEUS_FOLDERS.CACHE = ARCEUS_FOLDERS.WORKSPACE:AddSubDirectory(LPH_ENCSTR("cache"), OS_CONFIGS.HIDE_PREFIX.. LPH_ENCSTR("AxCache")) -- Hidden folders should not show pictures in gallery
ARCEUS_FOLDERS.TABS = ARCEUS_FOLDERS.SCRIPT_HUB:AddSubDirectory(LPH_ENCSTR("tabs"), LPH_ENCSTR("Tabs"))
ARCEUS_FOLDERS.RAW = ARCEUS_FOLDERS.CONFIGS:AddSubDirectory(LPH_ENCSTR("raw"), LPH_ENCSTR("Raw"))
-- block folders in workspace
local blocked = framework.protected:GCProtect({ "axcache" })
local lower, match, err = framework.protected:GetFunction(framework.utils.strings.lower),
framework.protected:GetFunction(framework.utils.strings.match), framework.protected:GetFunction(error)
local writefile = framework.env.getgenv().writefile or function() end
framework.protected:GCProtect(writefile) -- protects the original
writefile = framework.protected:GetFunction(writefile)
local wf = function(path: string, ...)
local low = lower(path)
for _, folder in blocked do
if match(low, "^" ..folder)
or match(low, "^/" ..folder)
or match(low, "^\\" ..folder)
then return err(LPH_ENCSTR("Attempt to write in a restricted folder")) end
end
writefile(path, ...)
end
framework.env.getgenv().writefile = wf
-- clear cache
for _, file in ipairs(ARCEUS_FOLDERS.CACHE:ListFiles()) do
framework.storage.deleteFile(nil, file)
end
framework.protected:ProtectTable(ARCEUS_FOLDERS)
end
-- Configure
framework.enums:AddEnum("TabUpdate", "Name", "Source", "Removed", "Selected", "Unselected")
framework.enums:AddEnum("WindowState", "Base", "Large", "Full")
framework.enums:AddEnum("AnimQuality", "Low", "Medium", "High")
framework.enums:AddEnum("CountryCode", "EN","IT","VI","PT","ID","RU","DE","ES","FR","ZH","JA","AR","HI","TH")
framework.enums:AddEnum("ScriptBloxSort", "None", "CreatedAt", "UpdatedAt", "Views", "LikeCount", "DislikeCount")
framework.enums:AddEnum("ScriptBloxVerify", "None", "Verified", "Unverified")
framework.enums:AddEnum("ScriptBloxType", "None", "Universal", "Specific")
framework.enums:AddEnum("ScriptBloxPatch", "None", "Patched", "Unpatched")
framework.enums:AddEnum("ScriptBloxSearch", "None", "Default", "Strict")
framework.enums:AddEnum("ScriptBloxAuth", "None", "Key", "Keyless")
framework.enums:AddEnum("ScriptBloxOrder", "None", "Asc", "Desc")
framework.enums:AddEnum("ScriptBloxMode", "None", "Free", "Paid")
framework.console:SetTitle(EXPLOIT_CONFIGS.EXPLOIT_FULLNAME)
framework.protected:UseUndetectedContent(not framework.protected:IsStudio())
framework.settings:SetDirectory(ARCEUS_FOLDERS.CONFIGS)
framework.settings:SetFileName(EXPLOIT_CONFIGS.SETTINGS_FILE)
framework.settings:SetFileKey(EXPLOIT_CONFIGS.FILES_KEY)
framework.settings:SetDefault(EXPLOIT_CONFIGS.SETTINGS)
task.spawn(LPH_NO_VIRTUALIZE(function() -- SaveInstances
if true or framework.protected:IsStudio() then return end -- disabled
local httpService = framework.protected:GetService("HttpService")
local jsonDecode = framework.env.clonefunction(httpService.JSONDecode);
local getScriptBytecode = framework.env.getscriptbytecode;
local isA = framework.env.clonefunction(workspace.IsA);
local data = {
compatiblity = {
binaryStrings = select(1, pcall(framework.env.gethiddenproperty or function() return game.CauseMeAnError; end, workspace.Terrain, "MaterialColors")) == true,
sharedStrings = select(1, pcall(framework.env.gethiddenproperty or function() return game.CauseMeAnError; end, Instance.new("Model"), "ModelMeshData")) == true
},
xml = {
cframeComponents = { "X", "Y", "Z", "R00", "R01", "R02", "R10", "R11", "R12", "R20", "R21", "R22" },
customPhysicsComponents = { "Density", "Friction", "Elasticity", "FrictionWeight", "ElasticityWeight" };
overwrites = {
EnumItem = "token",
Rect = "Rect2D"
},
pattern = "[&<>\"'\0]",
escapes = {
["<"] = "&lt;",
[">"] = "&gt;",
["\""] = "&quot;",
["'"] = "&apos;",
["&"] = "&amp;",
["\0"] = ""
}
},
classes = {
overwrites = {
Enum = "EnumItem",
Class = "Ref"
},
folders = {
[""] = true,
["Player"] = true,
["PlayerGui"] = true,
["PlayerScripts"] = true
}
}
};
--[[ Base Functions ]]--
local function shallowMerge(priority: {string: any}, backup: {string: any}): {string: any}
if type(backup) == "table" then
for i, v in priority do
local backupValue = backup[i];
if type(v) == type(backupValue) then
priority[i] = backupValue;
end
end
end
return priority;
end
local function newHandler(modifier: (number) -> (string)): {string: any}
return setmetatable({
count = 0,
cache = {}
}, {
__index = function(t, k)
if t.cache[k] == nil then
t.count += 1;
t.cache[k] = modifier(t.count);
end
return t.cache[k];
end
});
end
--[[ Instance Checks ]]--
local function isService(className: string): boolean
return data.api[className] and data.api[className].isService;
end
local function isViableDecompileScript(scriptInstance: BaseScript): boolean
if scriptInstance:IsA("ModuleScript") then
return true;
elseif scriptInstance:IsA("LocalScript") and (scriptInstance.RunContext == Enum.RunContext.Client or scriptInstance.RunContext == Enum.RunContext.Legacy) then
return true;
elseif scriptInstance:IsA("Script") and scriptInstance.RunContext == Enum.RunContext.Client then
return true;
end
return false;
end
local function getProperty(object: Instance, name: string, value: {string: any}): (boolean, any)
local success, grabbedValue;
if value.isHidden then
if value.valueType == "BinaryString" and data.compatiblity.binaryStrings == false then
return false;
elseif value.valueType == "SharedString" and data.compatiblity.sharedStrings == false then
return false;
end
success, grabbedValue = pcall(framework.env.gethiddenproperty, object, name);
else
success, grabbedValue = pcall(function()
return object[name];
end);
end
return success, grabbedValue;
end
--[[ Conversion ]]--
local function convertToBitValue(...: {any}): number
local value = 0;
for i, v in {...} do
if v then
value += 2 ^ (i - 1);
end
end
return value;
end
local function sanitiseStringValue(value: string): string
return string.gsub(value, data.xml.pattern, data.xml.escapes);
end
local function sanitiseNumberValue(value: number, denominations: number): string
if value == 0 or value % 1 == 0 then
return value;
elseif value == math.huge then
return "INF";
elseif value == -math.huge then
return "-INF";
elseif value ~= value then
return "NAN";
elseif denominations == nil then
return value;
end
return string.format("%." .. denominations .. "g", value);
end
--[[ Api ]]--
local function getClassFromApi(api: {string: any}, class: string): {string: any}
for _, v in api.Classes do
if v.Name == class then
return v;
end
end
end
local function pullApi(): {string: any}
local latestVersion = nil;
local versionArray = string.split(game:HttpGet("https://setup.rbxcdn.com/DeployHistory.txt", true), "\n");
for i = #versionArray, 1, -1 do
local versionData = string.split(versionArray[i], " ");
if versionData[2] == "Studio64" then
latestVersion = versionData[3];
break;
end
end
return httpService:JSONDecode(game:HttpGet("http://setup.roblox.com/" .. latestVersion .. "-Full-API-Dump.json", true));
end
local function generatePropertyData(api: {string: any}, class: {string: any}): {string: any}
local currentClass = class;
local changes = 0;
local properties = {};
while currentClass and currentClass.Name ~= "<<<ROOT>>>" do
for _, v in currentClass.Members do
if v.MemberType == "Property" and v.Name ~= "Parent" and v.Serialization.CanLoad and v.Serialization.CanSave then
properties[v.Name] = {
valueType = data.classes.overwrites[v.ValueType.Category] or v.ValueType.Name,
isHidden = v.Tags and table.find(v.Tags, "NotScriptable")
};
end
end
currentClass = getClassFromApi(api, currentClass.Superclass);
changes += 1;
end
return properties;
end
local function generateClassData(api: {string: any}): {string: any}
local generatedClassData = {};
for _, v in api.Classes do
local classData = {
properties = generatePropertyData(api, v),
defaults = {},
isService = v.Tags and table.find(v.Tags, "Service")
};
local success, instance = pcall(Instance.new, v.Name);
if success then
for i2, v2 in classData.properties do
local success2, value = getProperty(instance, i2, v2);
if success2 then
classData.defaults[i2] = value;
end
end
end
generatedClassData[v.Name] = classData;
end
return generatedClassData;
end
--[[ Saveinstance Module ]]--
local saveinstanceModule = {};
saveinstanceModule.__index = saveinstanceModule;
function saveinstanceModule.new(options: {string: any}): {string: any}
local metatable = setmetatable({
database = { "<roblox xmlns:xmime=\"http://www.w3.org/2005/05/xmlmime\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://www.roblox.com/roblox.xsd\" version=\"4\">" },
options = options,
instances = 0,
exclusions = {
game:GetService("CoreGui"),
game:GetService("CorePackages"),
game:GetService("StarterPlayer").StarterPlayerScripts:FindFirstChild("PlayerModule"),
game:GetService("StarterPlayer").StarterPlayerScripts:FindFirstChild("PlayerScriptsLoader"),
game:GetService("StarterPlayer").StarterPlayerScripts:FindFirstChild("RbxCharacterSounds")
},
decompiled = {},
refHandler = newHandler(function(count)
return "RBX" .. count;
end),
sharedStringHandler = newHandler(function(count)
return framework.utils.crypt.base64.encode(tostring(count + 1e15));
end)
}, saveinstanceModule);
for i, v in metatable.exclusions do
if isViableDecompileScript(v) then
metatable.exclusions[i] = framework.env.getscripthash(v);
end
end
return metatable;
end
function saveinstanceModule:IsExcludedItem(object: Instance): boolean
local isScript = isViableDecompileScript(object);
for _, v in self.exclusions do
if v == object then
return true;
elseif isScript and type(v) == "string" then
local s, r = pcall(framework.env.getscripthash, object);
if s and r == v then
return true;
end
end
end
if object:IsA("Player") then
return true;
end
return false;
end
function saveinstanceModule:CreateBaseDirectory(name: string): Folder
local folder = Instance.new("Folder");
folder.Name = name;
task.defer(function()
folder:Destroy();
end);
return folder;
end
function saveinstanceModule:GetProperty(object: Instance, name: string, value: {string: any}): (boolean, any)
if name == "Source" and self.decompiled[object] then
return true, self.decompiled[object];
end
return getProperty(object, name, value);
end
function saveinstanceModule:ParseProperty(value: any, valueType: string, bypassSanitising: boolean): string
if valueType == "Axes" then
return string.format("<axes>%d</axes>", convertToBitValue(value.X, value.Y, value.Z));
elseif valueType == "BinaryString" then
return value == "" and "" or self:ParseProperty(framework.utils.crypt.base64.encode(value), "ProtectedString");
elseif valueType == "bool" then
return value and "true" or "false";
elseif valueType == "BrickColor" then
return value.Number;
elseif valueType == "CFrame" or valueType == "CoordinateFrame" then
local ret = "";
for _, v in data.xml.cframeComponents do
ret ..= string.format("<%s>%%g</%s>", v, v);
end
return string.format(ret, value:GetComponents());
elseif valueType == "Color3" then
return string.format("<R>%g</R><G>%g</G><B>%g</B>", value.R, value.G, value.B);
elseif valueType == "Color3uint8" then
return 0xFF000000 + (math.floor(value.R * 255) * 0x10000) + (math.floor(value.G * 255) * 0x100) + math.floor(value.B * 255)
elseif valueType == "ColorSequence" then
local ret = {};
for _, v in value.Keypoints do
ret[#ret + 1] = string.format("%g %g %g %g 0", v.Time, v.Value.R, v.Value.G, v.Value.B);
end
return table.concat(ret, " ");
elseif valueType == "Content" or valueType == "ContentId" then
if value == "" then
return "<null></null>";
end
return string.format("<url>%s</url>", sanitiseStringValue(value));
elseif valueType == "DateTime" then
return value.UnixTimestampMillis;
elseif valueType == "double" then
return sanitiseNumberValue(value, 16);
elseif valueType == "EnumItem" then
return value.Value;
elseif valueType == "Faces" then
return string.format("<faces>%d</faces>", convertToBitValue(value.Right, value.Top, value.Back, value.Left, value.Bottom, value.Front));
elseif valueType == "float" then
return sanitiseNumberValue(value, 8);
elseif valueType == "Font" then
return string.format("<Family>%s</Family><Weight>%s</Weight><Style>%s</Style>", self:ParseProperty(value.Family, "Content"), value.Weight.Value, value.Style.Name);
elseif valueType == "int" or valueType == "int64" then
return sanitiseNumberValue(value);
elseif valueType == "NumberRange" then
return string.format("%g %g", value.Min, value.Max);
elseif valueType == "NumberSequence" then
local ret = {};
for _, v in value.Keypoints do
ret[#ret + 1] = string.format("%g %g %g", v.Time, v.Value, v.Envelope);
end
return table.concat(ret, " ");
elseif valueType == "PhysicalProperties" then
local ret = string.format("<CustomPhysics>%s</CustomPhysics>", value and "true" or "false");
if value then
for _, v in data.xml.customPhysicsComponents do
ret ..= string.format("<%s>%g</%s>", v, value[v], v);
end
end
return ret;
elseif valueType == "ProtectedString" then
return string.format("<![CDATA[%s]]>", bypassSanitising and value or sanitiseStringValue(value));
elseif valueType == "Ray" then
return string.format("<origin>%s</origin><direction>%s</direction>", self:ParseProperty(value.Origin, "Vector3"), self:ParseProperty(value.Direction, "Vector3"));
elseif valueType == "Rect" then
return string.format("<min>%s</min><max>%s</max>", self:ParseProperty(value.Min, "Vector2"), self:ParseProperty(value.Max, "Vector2"));
elseif valueType == "Ref" then
return value and self.refHandler[value] or "null";
elseif valueType == "SharedString" then
return self.sharedStringHandler[framework.utils.crypt.base64.encode(value)];
elseif valueType == "string" then
return sanitiseStringValue(value);
elseif valueType == "UDim" then
return string.format("<S>%g</S><O>%d</O>", value.Scale, value.Offset);
elseif valueType == "UDim2" then
return string.format("<XS>%g</XS><XO>%d</XO><YS>%g</YS><YO>%d</YO>", value.X.Scale, value.X.Offset, value.Y.Scale, value.Y.Offset);
elseif valueType == "UniqueId" then
return false;
elseif valueType == "Vector2" or valueType == "Vector2int16" then
return string.format("<X>%g</X><Y>%g</Y>", value.X, value.Y);
elseif valueType == "Vector3" or valueType == "Vector3int16" then
return string.format("<X>%g</X><Y>%g</Y><Z>%g</Z>", value.X, value.Y, value.Z);
end
-- print("Unaccounted for type found:", valueType);
return "";
end
function saveinstanceModule:GetPropertyXml(propertyName: string, value: any, valueType: string): string
local xmlValue = self:ParseProperty(value, valueType, propertyName == "Source");
local newTag = data.xml.overwrites[valueType] or valueType;
local xmlString = string.format("<%s name=\"%s\">%s</%s>", newTag, propertyName, xmlValue or "", newTag);
if xmlValue then
return xmlString;
end
return "<!-- " .. xmlString .. " -->";
end
function saveinstanceModule:ParseObject(object: Instance, altChildren: {number: Instance} | nil): nil
if self:IsExcludedItem(object) then
return;
end
local className = data.classes.folders[object.ClassName] and "Folder" or object.ClassName;
table.insert(self.database, string.format("<Item class=\"%s\" referent=\"%s\">", className, self.refHandler[object]));
local objectData = data.api[className];
if objectData then
table.insert(self.database, "<Properties>");
for i, v in objectData.properties do
local success, grabbedValue = self:GetProperty(object, i, v);
if success and (self.options.excludeDefaults == false or grabbedValue ~= objectData.defaults[i]) then
if typeof(grabbedValue) ~= "Content" then
table.insert(self.database, self:GetPropertyXml(i, grabbedValue, v.valueType));
end
end
end
table.insert(self.database, "</Properties>");
self.instances += 1;
else
-- print("Unaccounted for className found:", object:GetFullName());
end
for _, v in altChildren or object:GetChildren() do
self:ParseObject(v);
end
table.insert(self.database, "</Item>");
end
function saveinstanceModule:AppendSharedStrings()
if self.sharedStringHandler.count > 0 then
table.insert(self.database, "<SharedStrings>");
for i, v in self.sharedStringHandler.cache do
table.insert(self.database, string.format("<SharedString md5=\"%s\">%s</SharedString>", v, i));
end
table.insert(self.database, "</SharedStrings>");
end
end
function saveinstanceModule:CollectScripts(inst: Instance | {number: Instance}, cache: {number: Instance} | nil): {number: Instance}
local store = cache or {};
for i, v in typeof(inst) == "table" and inst or inst:GetChildren() do
if not self:IsExcludedItem(v) then
if isViableDecompileScript(v) then
store[#store + 1] = v;
end
self:CollectScripts(v, store);
end
end
return store;
end
function saveinstanceModule:Decompile()
local scripts = self:CollectScripts(game);
if self.options.includeNil then
self:CollectScripts(framework.env.getnilinstances(), scripts);
end
framework.console.info("Collected Scripts! Decompiling..");
for i, v in framework.env.decompile(scripts, "debug") do
self.decompiled[scripts[i]] = v;
end
end
function saveinstanceModule:Save(): nil
local tick1 = tick();
if data.api == nil then
framework.console.info("Grabbing API..");
data.api = generateClassData(pullApi());
end
if self.options.excludeScripts then
framework.console.info("Grabbed API! Parsing map..");
else
framework.console.info("Grabbed API! Collecting scripts..");
self:Decompile();
framework.console.info("Decompiled! Parsing map..");
end
local tick2 = tick();
local gameChildren = {};
for _, v in game:GetChildren() do
if isService(v.ClassName) then
self:ParseObject(v);
else
table.insert(gameChildren, v);
end
end
if self.options.includeNil then
local nilInstances = framework.env.getnilinstances(); -- This happens first so it doesn't put itself in the folder
self:ParseObject(self:CreateBaseDirectory("Nil Instances"), nilInstances);
end
if #gameChildren > 0 then
self:ParseObject(self:CreateBaseDirectory("Game Instances"), gameChildren);
end
self:AppendSharedStrings();
table.insert(self.database, "</roblox>");
local tick3 = tick();
ARCEUS_FOLDERS.WORKSPACE:WriteFile(self.options.fileName .. ".rbxlx", table.concat(self.database, ""));
local endTick = tick();
framework.console.print([[Saveinstance finished!
Time taken (api grab): ]] .. tostring(math.floor((tick2 - tick1) * 1000)) .. [[ms
Time taken (computing): ]] .. tostring(math.floor((tick3 - tick2) * 1000)) .. [[ms
Time taken (average per instance): ]] .. tostring(math.floor(((tick3 - tick2) / self.instances) * 1000)) .. [[ms
Time taken (write): ]] .. tostring(math.floor((endTick - tick3) * 1000)) .. [[ms
Time taken (total): ]] .. tostring(math.floor((endTick - tick1) * 1000)) .. [[ms]]);
end
--[[ Environment ]]--
framework.env.getgenv().saveinstance = function(options: {string: any} | nil)
framework.console.info("'Saveinstance' is now initiated..")
saveinstanceModule.new(shallowMerge({
fileName = tostring(game.PlaceId),
includeNil = true,
excludeScripts = false,
excludeDefaults = true
}, options)):Save();
end;
end))
-- Create dependencies
do -- gui
local this, utils = {}, {}
this.utils = utils
if not LPH_OBFUSCATED then -- Luraph integration
local dummy = function(...) return ... end
LPH_NO_VIRTUALIZE = LPH_NO_VIRTUALIZE or dummy
LPH_NO_UPVALUES = LPH_NO_UPVALUES or dummy
LPH_OBFUSCATED = LPH_OBFUSCATED or false
LPH_JIT_MAX = LPH_JIT_MAX or dummy
LPH_ENCFUNC = LPH_ENCFUNC or dummy
LPH_ENCSTR = LPH_ENCSTR or dummy
LPH_ENCNUM = LPH_ENCNUM or dummy
LPH_CRASH = LPH_CRASH or dummy
LPH_JIT = LPH_JIT or dummy
end
function utils:CreateDummy(parent: Instance?)
return self.ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 1),
Visible = false,
Parent = parent
})
end
function utils:GetStartCoords(): Vector2
local obj = self:CreateDummy()
local coords = obj.instance.AbsolutePosition
obj:Remove()
return coords
end
function utils:GetScreenRatio(parent: Instance?): number
local obj = self:CreateDummy(parent)
local viewportSize = obj.instance.AbsoluteSize
obj:Remove()
local width, height = viewportSize.X, viewportSize.Y
return self.player_gui.CurrentScreenOrientation == Enum.ScreenOrientation.Portrait
and height / width or width / height
end
function utils:GetSafeScreenRatio(): number
local ui = self.framework.interface.new()
ui.instance.ScreenInsets = Enum.ScreenInsets.CoreUISafeInsets
ui.instance.IgnoreGuiInset = true
local ratio = self:GetScreenRatio(ui)
ui:Remove()
return ratio
end
function utils:GetPadding(): number
return (utils.player_gui.CurrentScreenOrientation == Enum.ScreenOrientation.Portrait and
self.ui.instance.AbsoluteSize.X or self.ui.instance.AbsoluteSize.Y) *12 /1080
end
function utils:GetAnimationResolution(quality: string)
quality = quality or utils.framework.settings:GetDefaultSetting("Anim_Quality")
quality = utils.framework.enums.AnimQuality[quality]
return ({Vector2.new(32, 32), Vector2.new(64, 64), Vector2.new(128, 128)})[quality]
end
function utils:GetAnimationDensity(quality: string, duration: string)
quality = quality or utils.framework.settings:GetDefaultSetting("Anim_Quality")
quality = utils.framework.enums.AnimQuality[quality]
duration = duration or 1
return ({24 *duration, 32 *duration, 64 *duration})[quality]
end
function utils:AddAnimation(id: string, options: {any}, frameGen: (idx: number, frames: number) -> buffer, priority: number, ...: any)
local quality = utils.framework.settings:GetDefaultSetting("Anim_Quality")
local res = options.Resolution
options.Resolution = res or self:GetAnimationResolution(quality)
options.Density = options.Density or self:GetAnimationDensity(quality, options.Duration)
local raws = utils.framework.storage:GetDirectory("raw")
local content = options.raw
if not content and not raws:IsFile(id) and not utils.framework.protected:IsStudio() then
local res = utils.framework.dependencies.exploit:DownloadFile(`/raw/{id}`)
if res then raws:WriteFile(id, res)
content = res
end
end
local anim = utils.framework.animator.fromRaw(id, options, content or raws:ReadFile(id), frameGen)
anim.RenderOnLoad = options.RenderOnLoad
anim.Duration = options.Duration
anim.FixedResolution = res
for _, tag in ipairs(options.Tags or {}) do
utils.animsTags[tag] = utils.animsTags[tag] or {}
utils.framework.utils.tables.insert(utils.animsTags[tag], anim)
end
function anim:Save()
if not anim.Loaded then return end
raws:WriteFile(id, anim:GetRaw())
end
if utils.framework.protected:IsStudio() then
local fps = anim:GetMaxFPS();
(fps < 24 and utils.framework.console.warn or utils.framework.console.print
)(`Animation '{id}' running at max: {fps} FPS`)
end
utils.framework.utils.tables.insert(utils.anims, anim)
return anim
end
function utils:GetAnimation(id: string)
return utils.framework.renderer:GetBinding(id)
end
function utils:GetAnimationByTag(tag: string)
return utils.animsTags[tag] or {}
end
function utils:Translate(texts: {string})
local value = utils.framework.enums.CountryCode[utils.framework.settings:GetSetting("Country_Code")]
or utils.framework.enums.CountryCode[utils.framework.settings:GetDefaultSetting("Country_Code")]
return texts[value]
end
function utils:Setup(framework, ui)
utils.framework = framework
utils.ui = ui
--utils.color_properties = framework.protected:GCProtect({"BackgroundColor3", "TextColor3", "BorderColor3", "ImageColor3", "GroupColor3", "TextStrokeColor3", "ScrollBarImageColor3", "PlaceholderColor3", "VideoColor3", "SurfaceColor3", "HoverBackgroundColor3", "SelectedTabTextColor3"})
utils.anims = framework.protected:GCProtect({})
utils.animsTags = framework.protected:GCProtect({})
utils.player_gui = framework.protected:GetService("Players")
.LocalPlayer:WaitForChild("PlayerGui")
-- load settings
local arceus_layout, cache = {}, framework.protected:GCProtect({})
framework.env.getgenv().arceus_layout = arceus_layout
framework.settings.OnSettingChanged:Connect(framework.protected:GCProtect(LPH_JIT_MAX(function(setting: string, value: any, default: any)
if utils.framework.utils.strings.sub(setting, 1, 5) == "User_" then
return -- Prevents data from being set in arceus_layout
elseif utils.framework.utils.strings.sub(setting, 1, 7) == "Colors_" then
local succ, err = pcall(Color3.fromHex, value)
value = succ and err or Color3.fromHex(default)
for _, inst in ipairs(utils.ui:GetByTag(setting)) do
local props = inst[setting]
if not props then continue end
if typeof(props) == "function" then
props(value)
continue
end
for _, prop in ipairs(props) do
inst.instance[prop] = value
end
end
elseif utils.framework.utils.strings.sub(setting, 1, 10) == "FontSizes_" then
value = tonumber(value) or default
for _, inst in ipairs(utils.ui:GetByTag(setting)) do
inst.instance.TextSize = value
end
elseif utils.framework.utils.strings.sub(setting, 1, 6) == "Fonts_" then
local font = default
if typeof(value) == "string" then
font = framework.utils.strings.fromFormatted(value)
end
for _, inst in ipairs(utils.ui:GetByTag(setting)) do
inst.instance.FontFace = font
end
elseif utils.framework.utils.strings.sub(setting, 1, 14) == "UI_WindowState" then
value = framework.utils.maths.clamp(value, framework.enums.WindowState.Base, framework.enums.WindowState.Full)
for _, inst in ipairs(utils.ui:GetByTag(setting)) do
local props = inst[setting]
if not props then continue end
for prop, values in pairs(props) do
cache[inst] = cache[inst] or {}
cache[inst][prop] = cache[inst][prop] or inst.instance[prop]
inst.instance[prop] = values[value] or cache[inst][prop]
end
end
elseif setting == "Country_Code" then
value = utils.framework.enums.CountryCode[value]
or utils.framework.enums.CountryCode[default]
for _, inst in ipairs(utils.ui:GetByTag(setting)) do
local onCC = inst[`On_{setting}`]
if onCC then onCC(value) end
local translations = inst[setting]
if translations and (translations[value] or translations[1]) then
inst.instance.Text = translations[value] or translations[1]
end
translations = inst[`{setting}_Placeholder`]
if not translations or not (translations[value] or translations[1]) then continue end
inst.instance.PlaceholderText = translations[value] or translations[1]
end
end
arceus_layout[setting] = value
end)))
function utils:EndSetup()
ui.OnInstanceAdded:Connect(framework.protected:GCProtect(LPH_JIT_MAX(function(inst)
for _, tag in ipairs(inst:GetTags()) do
local default = framework.settings:GetDefaultSetting(tag)
local value = framework.settings:GetSetting(tag)
if not value and not default then continue end
if utils.framework.utils.strings.sub(tag, 1, 7) == "Colors_" then
local props = inst[tag]
if not props then continue end
local succ, err = pcall(Color3.fromHex, value)
value = succ and err or Color3.fromHex(default)
if typeof(props) == "function" then
props(value)
continue
end
for _, prop in ipairs(props) do
inst.instance[prop] = value
end
elseif utils.framework.utils.strings.sub(tag, 1, 10) == "FontSizes_" then
value = tonumber(value) or default
inst.instance.TextSize = value
elseif utils.framework.utils.strings.sub(tag, 1, 6) == "Fonts_" then
local font = default
if typeof(value) == "string" then
font = framework.utils.strings.fromFormatted(value)
end
inst.instance.FontFace = font
elseif utils.framework.utils.strings.sub(tag, 1, 14) == "UI_WindowState" then
local props = inst[tag]
if not props then continue end
value = framework.utils.maths.clamp(value, framework.enums.WindowState.Base, framework.enums.WindowState.Full)
for prop, values in pairs(props) do
cache[inst] = cache[inst] or {}
cache[inst][prop] = cache[inst][prop] or inst.instance[prop]
inst.instance[prop] = values[value] or cache[inst][prop]
end
elseif tag == "Country_Code" then
local translations = inst[tag]
value = utils.framework.enums.CountryCode[value]
or utils.framework.enums.CountryCode[default]
if translations and (translations[value] or translations[1]) then
inst.instance.Text = translations[value] or translations[1]
end
translations = inst[`{tag}_Placeholder`]
if not translations or not (translations[value] or translations[1]) then continue end
inst.instance.PlaceholderText = translations[value] or translations[1]
end
end
end)))
local playerGui = framework.protected:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
local debounce = false
playerGui:GetPropertyChangedSignal("CurrentScreenOrientation"):Connect(framework.protected:GCProtect(function()
ui:Get("MainFrame").instance.Position = UDim2.fromScale(.5, .5)
ui.nextSize(framework.enums.WindowState.Base)
--[[ if debounce then return end
debounce = true
local rotation = playerGui.CurrentScreenOrientation ~= Enum.ScreenOrientation.Portrait and 0 or -90
for _, child in ipairs(ui.instance:GetChildren()) do
if child:IsA("GuiObject") then child.Rotation = rotation end
end
debounce = false ]]
end))
end
framework.settings:GetSettingChangedSignal(LPH_ENCSTR("User_EMail")):Connect(framework.protected:GCProtect(function(value: string)
local emailBox = ui:Get(LPH_ENCSTR("EmailBox"))
if not emailBox then return end
emailBox.instance.Text = tostring(value)
end))
framework.settings:GetSettingChangedSignal("Anim_Quality"):Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(value: string)
if not utils.animsInitialized then return end
for _, anim in ipairs(utils.anims) do
local value = anim.FixedResolution or value
anim:Generate(utils:GetAnimationResolution(value), utils:GetAnimationDensity(value, anim.Duration))
anim:Save()
if anim.RenderOnLoad then anim:Render() end
end
end)))
ui.OnInstanceAdded:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(inst)
if inst.instance:IsA("GuiButton") then
inst.instance.MouseButton1Down:Connect(function()
utils:Vibrate(Enum.HapticEffectType.UIClick)
end)
end
end)))
local uis = framework.protected:GetService("UserInputService")
local run = framework.protected:GetService("RunService")
local fakeFocus = false
uis.TextBoxFocused:Connect(LPH_NO_VIRTUALIZE(function(tb: TextBox)
local custom = ui:Get(tb)
if custom and custom:HasTags("No_Focus") then return end
local overall = framework.settings:GetSetting("TextboxWrapper")
if tb:IsDescendantOf(overall and ui.instance.Parent or ui.instance) and not tb.MultiLine then -- "blacklist"
if fakeFocus then
fakeFocus = false
return
end
local editable = tb.TextEditable
run.Heartbeat:Wait()
local toast = utils:ShowToast("InputToast", {
PlaceholderText = {"Text here...","Testo qui...","Văn bản ở đây...","Texto aqui...","Teks di sini...","Текст здесь...","Text hier...","Texto aquí...","Texte ici...","文本在此...","ここにテキスト...","النص هنا...","यहाँ पाठ...","ข้อความที่นี่..."},
Style = utils.currentPage.id == "Page_ArceusIntelligence" and "ai" or "info",
Callback = function(txt: string)
if editable then
fakeFocus = true
run.Heartbeat:Wait()
tb:CaptureFocus()
tb.Text = framework.utils.strings.sub(txt, 1, 199999)
run.Heartbeat:Wait()
tb:ReleaseFocus()
end
end
})
toast.instance.ZIndex = 999
local customTb = toast.tb.instance
local txt = tb.Text
customTb.TextEditable = editable
customTb.Text = txt
customTb.CursorPosition = framework.utils.strings.len(txt) +1
end
end))
local haptic: HapticEffect = ui:AddInstance("HapticEffect", {}).instance
function utils:Vibrate(type: Enum.HapticEffectType, duration: number?)
duration = tonumber(duration)
haptic.Type = type or Enum.HapticEffectType.UINotification
haptic.Looped = duration and true or false
pcall(haptic.Play, haptic)
if duration then
task.wait(duration)
pcall(haptic.Stop, haptic)
end
end
end
function utils:EditorMode(enabled: boolean, offset: number)
local TweenService = game:GetService("TweenService")
local main = utils.ui:Get("MainFrame").instance
local newState, targetPos
if enabled then
utils.prevSate = utils.ui.windowState
utils.prevPos = main.Position
newState = utils.framework.enums.WindowState.Base
-- targetPos = UDim2.fromScale(.5, offset) -- disabled after roblox keyboard updates
else
newState = utils.prevSate or utils.ui.windowState
targetPos = utils.prevPos or main.Position
end
utils.ui.nextSize(newState)
local tweenInfo = TweenInfo.new(.35, Enum.EasingStyle.Sine, Enum.EasingDirection.Out)
local tw = TweenService:Create(main, tweenInfo, { Position = targetPos })
tw:Play()
utils:AnimateCascade(utils.ui:Get("Page_Executor").instance, {
TweenInfo = TweenInfo.new(.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
DelayBetween = .01,
SkipTransparency = true,
Direction = "BottomToTop" and enabled or "TopToBottom"
})
end
function utils:GetTweenInfos(delay: number, duration: number, style: Enum.EasingStyle, direction: Enum.EasingDirection, rep: number, inv: boolean)
return TweenInfo.new(duration or .25, style or Enum.EasingStyle.Quad, direction or Enum.EasingDirection.Out, rep or 0, inv or false, delay or 0)
end
function utils:ClosePopup()
local pop = utils.lastPopup
if pop then pop:Remove()
utils.lastPopup = nil
return true
end
end
function utils:ShowPopup(class: string, ...: any)
self:ClosePopup()
utils.lastPopup = utils.ui:AddComponent(class, ...)
utils:Vibrate(Enum.HapticEffectType.UINotification)
end
function utils:ShowToast(class: string, props: {any}, ...)
local main = utils.ui:Get("MainFrame")
main:Tween(utils:GetTweenInfos(), { GroupTransparency = .9 })
local toast, once
props.Close = function(...: any)
if once then return end
once = true
toast:Remove()
main:Tween(utils:GetTweenInfos(), { GroupTransparency = 0 })
if props.Callback then props.Callback(...) end
end
toast = utils.ui:AddComponent(class, props, ...)
if utils.ui:Get(`{class}_{props.Id}`) then
utils.AnimateCascade(utils.ui:Get(`{class}_{props.Id}`).instance,{
DelayBetween = .5,
TweenInfo = TweenInfo.new(5, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
})
end
utils:Vibrate(Enum.HapticEffectType.UINotification)
return toast
end
utils.AnimateCascade = LPH_NO_VIRTUALIZE(function(self, frameParam, opts)
if not utils.ui.Loaded then return end
local TweenService = utils.framework.protected:GetService("TweenService")
opts = opts or {}
local rawOffset = opts.StartOffset or opts.AnimateSelf and UDim2.new(0, 0, .015, 0) or UDim2.new(0, 0, .15, 0)
local tweenInfo = opts.TweenInfo or TweenInfo.new(.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out)
local delayBetween = opts.DelayBetween or .0075
local globalLimit = opts.Limit
local excludeNames = {}
if opts.ExcludeNames then
for _, name in ipairs(opts.ExcludeNames) do
excludeNames[name] = true
end
end
local scaleDirection = opts.ScaleDirection or "In"
local scaleCascade = (opts.ScaleCascade == true)
local startScaleOffset
if type(opts.StartScaleOffset) == "number" then
startScaleOffset = utils.framework.utils.maths.clamp(opts.StartScaleOffset, 0, utils.framework.utils.maths.huge)
else
startScaleOffset = (scaleDirection == "In") and .9 or 1.05
end
local skipTransparency = (opts.SkipTransparency == true)
local animateSelf = (opts.AnimateSelf == true)
local limitMap = opts.LimitMap or {}
local startOffset
if animateSelf then
local vp = workspace.CurrentCamera.ViewportSize
local offsetX = rawOffset.X.Scale * vp.X + rawOffset.X.Offset
local offsetY = rawOffset.Y.Scale * vp.Y + rawOffset.Y.Offset
startOffset = UDim2.new(0, utils.framework.utils.maths.floor(offsetX + .5), 0, utils.framework.utils.maths.floor(offsetY + .5))
else
startOffset = rawOffset
end
local root = utils.framework.utils.instances.getRobloxInstance(frameParam)
if not root then return end
local activeTweens = {}
utils._cascadeOriginals = utils._cascadeOriginals or {}
local objs = {}
local collect; collect = function(parent)
for _, child in ipairs(parent:GetChildren()) do
if child:IsA("GuiObject") and child.Visible then
local inst = utils.ui:Get(child)
if not inst or excludeNames[inst.id] then continue end
utils.framework.utils.tables.insert(objs, child)
collect(child)
end
end
end
collect(root)
if animateSelf then
utils.framework.utils.tables.insert(objs, 1, root)
end
for _, child in ipairs(objs) do
if not utils._cascadeOriginals[child] then
local hasText, textVal = pcall(function() return child.TextTransparency end)
local hasImage, imageVal = pcall(function() return child.ImageTransparency end)
utils._cascadeOriginals[child] = {
BackgroundTransparency = child.BackgroundTransparency,
ImageTransparency = hasImage and imageVal or nil,
TextTransparency = hasText and textVal or nil,
Position = child.Position,
Size = child.Size
}
end
end
for _, child in ipairs(objs) do
local orig = utils._cascadeOriginals[child]
if not skipTransparency then
local t0 = (type(opts.StartTransparency) == "number")
and utils.framework.utils.maths.clamp(opts.StartTransparency, 0, 1) or 1
child.BackgroundTransparency = t0
if orig.TextTransparency then
child.TextTransparency = t0
end
if orig.ImageTransparency then
child.ImageTransparency = t0
end
end
if scaleCascade then
local osz = orig.Size
local sStart = UDim2.new(
osz.X.Scale * startScaleOffset,
osz.X.Offset * startScaleOffset,
osz.Y.Scale * startScaleOffset,
osz.Y.Offset * startScaleOffset
)
local tweenerIn = TweenService:Create(child,
TweenInfo.new(.15, Enum.EasingStyle.Linear, Enum.EasingDirection.Out), { Size = sStart })
tweenerIn:Play()
table.insert(activeTweens, tweenerIn)
else
local startPos = orig.Position + startOffset
local tweenerIn = TweenService:Create(child,
TweenInfo.new(.15, Enum.EasingStyle.Linear, Enum.EasingDirection.Out), { Position = startPos })
tweenerIn:Play()
table.insert(activeTweens, tweenerIn)
end
end
task.spawn(function()
task.wait(.15)
local parentCounts = {}
for i, child in ipairs(objs) do
local orig = utils._cascadeOriginals[child]
local parent = child.Parent
if not parent then continue end
parentCounts[parent] = (parentCounts[parent] or 0) + 1
local perLim = limitMap[parent]
local count = parentCounts[parent]
local useIt
if perLim then
useIt = (count <= perLim)
else
useIt = (not globalLimit) or (i <= globalLimit)
end
if useIt then
task.spawn(function()
task.wait((i - 1) * delayBetween)
local goal = {}
if scaleCascade then
goal.Size = orig.Size
else
goal.Position = orig.Position
end
if not skipTransparency then
goal.BackgroundTransparency = orig.BackgroundTransparency
if orig.TextTransparency then
goal.TextTransparency = orig.TextTransparency
end
if orig.ImageTransparency then
goal.ImageTransparency = orig.ImageTransparency
end
end
local tweenerOut = TweenService:Create(child, tweenInfo, goal)
tweenerOut:Play()
utils.framework.utils.tables.insert(activeTweens, tweenerOut)
end)
else
if scaleCascade then
child.Size = orig.Size
else
child.Position = orig.Position
end
if not skipTransparency then
child.BackgroundTransparency = orig.BackgroundTransparency
if orig.TextTransparency then
child.TextTransparency = orig.TextTransparency
end
if orig.ImageTransparency then
child.ImageTransparency = orig.ImageTransparency
end
end
end
end
task.wait((#objs * delayBetween) + tweenInfo.Time)
for _, t in ipairs(activeTweens) do
pcall(function() t:Cancel() end)
end
end)
end)
utils.AddSlimeEffect = LPH_NO_VIRTUALIZE(function(self, frameWrapper: {any}, targetWrappers: {any}, options: {any})
local UserInputService: UserInputService = utils.framework.protected:GetService("UserInputService")
local TweenService: TweenService = utils.framework.protected:GetService("TweenService")
local RunService: RunService = utils.framework.protected:GetService("RunService")
local opts = {
returnTweenInfo = TweenInfo.new(.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
referenceSize = Vector2.new(1920, 1080),
movementFactor = .15,
cascadeDelay = .0075,
antialias = true
}
if options then
for k, v in pairs(options) do opts[k] = v end
end
local frame = utils.framework.utils.instances.getRobloxInstance(frameWrapper)
frame.Active = true
local originalFrameAbsPos = frame.AbsolutePosition
local all = targetWrappers.All or {}
local originalPositions = {}
local targets = {}
targetWrappers.All = nil
for page, wrappers in pairs(targetWrappers) do
targets[page.Content] = {}
for _, w in ipairs(wrappers) do
local gui = utils.framework.utils.instances.getRobloxInstance(w)
if gui and gui:IsA("GuiObject") then
utils.framework.utils.tables.insert(targets[page.Content], gui)
originalPositions[gui] = gui.Position
end
end
for _, w in ipairs(all) do
local gui = utils.framework.utils.instances.getRobloxInstance(w)
if gui and gui:IsA("GuiObject") then
utils.framework.utils.tables.insert(targets[page.Content], gui)
originalPositions[gui] = gui.Position
end
end
end
local getScaleFactors = utils.framework.protected:GCProtect(function()
local vp = workspace.CurrentCamera.ViewportSize
return opts.referenceSize.X / vp.X, opts.referenceSize.Y / vp.Y
end)
local prevFrameAbsPos = frame.AbsolutePosition
local isDragging = false
local activeTweens = {}
local reset = utils.framework.protected:GCProtect(function()
isDragging = false
RunService.Heartbeat:Wait()
for i, gui in ipairs(targets[utils.currentPage] or {}) do
task.spawn(function()
task.wait((i - 1) * opts.cascadeDelay)
local tw = TweenService:Create(gui, opts.returnTweenInfo, {
Position = originalPositions[gui]
})
utils.framework.utils.tables.insert(activeTweens, tw)
tw:Play()
end)
end
end)
frame.InputBegan:Connect(utils.framework.protected:GCProtect(function(input)
if not isDragging and (input.UserInputType == Enum.UserInputType.MouseButton1 or
input.UserInputType == Enum.UserInputType.Touch) then
isDragging = true
if #activeTweens > 0 then
for _, tw in ipairs(activeTweens) do
pcall(function() tw:Cancel() end)
end
activeTweens = {}
end
originalFrameAbsPos = frame.AbsolutePosition
prevFrameAbsPos = originalFrameAbsPos
input.Changed:Once(function()
if input.UserInputState == Enum.UserInputState.End then
reset()
end
end)
end
end))
frame.InputEnded:Connect(reset)
UserInputService.InputEnded:Connect(utils.framework.protected:GCProtect(function(input)
if isDragging then reset() end
end))
RunService.RenderStepped:Connect(utils.framework.protected:GCProtect(function()
if not isDragging then return end
local currAbsPos = frame.AbsolutePosition
local vp = workspace.CurrentCamera.ViewportSize
local scaleX, scaleY = opts.referenceSize.X /vp.X, opts.referenceSize.Y /vp.Y
local invX = -(currAbsPos.X -originalFrameAbsPos.X) *opts.movementFactor *scaleX
local invY = -(currAbsPos.Y -originalFrameAbsPos.Y) *opts.movementFactor *scaleY
for _, gui in ipairs(targets[utils.currentPage]) do
local orig = originalPositions[gui]
if opts.antialias then
gui.Position = UDim2.new(
orig.X.Scale, orig.X.Offset + invX,
orig.Y.Scale, orig.Y.Offset + invY
)
else
gui.Position = orig + UDim2.new(0, invX, 0, invY)
end
end
end))
end)
------------------------------------------------------------
function this:LoadAnimations()
for _, anim in ipairs(utils.anims) do
if not anim.Loaded then
anim:Generate()
anim:Save()
task.wait()
end
if anim.RenderOnLoad then
anim:Render()
end
end
utils.animsInitialized = true
end
function this:Draw(framework) -- Enables roblox studio suggestions
if false then framework = require("../../Wave/WaveFramework") end
local ui, tweens, padding do
ui = framework.interface.new()
ui.instance.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ui.instance.ScreenInsets = Enum.ScreenInsets.None
utils:Setup(framework, ui)
padding = utils:GetPadding()
tweens = {
glow = utils:GetTweenInfos(0, 4, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut, -1, true),
delaied_fast_windows = utils:GetTweenInfos(.25, .25, Enum.EasingStyle.Quart),
fast_windows = utils:GetTweenInfos(0, .15, Enum.EasingStyle.Quart),
windows = utils:GetTweenInfos(0, .5, Enum.EasingStyle.Quart),
slow_default = utils:GetTweenInfos(0, .5),
default = utils:GetTweenInfos()
}
framework.protected:ProtectTable(tweens)
ui.windowState = framework.enums.WindowState.Base
local playerGui = framework.protected:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
local sizes = framework.protected:GCProtect({ UDim2.fromScale(.5, .5), UDim2.fromScale(.75, .75), UDim2.fromScale(1, 1) })
ui.currentSize = framework.protected:GCProtect(function()
return sizes[ui.windowState]
end)
local prevPos
ui.nextSize = framework.protected:GCProtect(LPH_JIT_MAX(function(size: number?)
utils:AnimateCascade(ui:Get("MaximizeButton").instance, {
AnimateSelf = true,
ScaleCascade = true,
ScaleDirection = "In",
SkipTransparency = true
})
local prevState = ui.windowState
ui.windowState = size or ui.windowState + 1
if ui.windowState > framework.enums.WindowState.Full then
ui.windowState = framework.enums.WindowState.Base
end
local newSize = (ui.windowState == framework.enums.WindowState.Full) and "Full" or "Other"
local prevSize = (prevState == framework.enums.WindowState.Full) and "Full" or "Other"
local portrait = playerGui.CurrentScreenOrientation == Enum.ScreenOrientation.Portrait
local isFull = ui.windowState == framework.enums.WindowState.Full and not portrait
local main = ui:Get("MainFrame")
if ui.Loaded then framework.settings:SetSetting("UI_WindowState", ui.windowState) end
ui:Get("MainCorner").instance.CornerRadius = UDim.new(isFull and 0 or .075, 0)
ui:Get("SafeRatio"):SetParent(isFull and ui:Get("InnerMain") or {})
ui:Get("Ratio169"):SetParent(isFull and {} or main)
main:SetDraggable(not isFull)
main:Tween(tweens.slow_default, {
Position = isFull and UDim2.fromScale(.5, .5) or main.Position,
GroupTransparency = .75,
Size = ui.currentSize()
})
utils:AnimateCascade(utils.currentPage, {
ExcludeNames = { "MagicNicknameContainer", "BarFilter", "GridFilter", "ScriptsBar", "CloudBestScriptsBar", "BestScriptsBar", "AIPlayerBackgroundOverlay", "Slider_Gravity_Bar", "Slider_Jump_Bar", "Slider_Speed_Bar" },
ScaleDirection = prevSize == "Full" and newSize ~= "Full" and "In" or "Out",
SkipTransparency = true,
ScaleCascade = true
})
main:Tween(tweens.delaied_fast_windows, {
GroupTransparency = 0
})
end))
local open = true
local lastPos, lastSize
ui.close = framework.protected:GCProtect(LPH_JIT_MAX(function()
utils:AnimateCascade(ui:Get("CloseButton").instance, {
AnimateSelf = true,
ScaleCascade = true,
ScaleDirection = "In",
SkipTransparency = true
})
if not open or utils:ClosePopup() then return end
local main, ficon = ui:Get("MainFrame"), ui:Get("FloatingIcon")
lastPos = main.instance.Position
main:Tween(tweens.windows, {
Size = UDim2.fromScale(0, 0),
})
main:Tween(tweens.slow_default, {
Position = UDim2.fromScale(.5, 1),
GroupTransparency = 1,
Visible = false
})
for _, anim in ipairs(utils:GetAnimationByTag("MainFrame")) do anim:Pause() end
ficon.instance.Visible = true
ficon:Tween(tweens.windows, {
ImageTransparency = 0,
Size = lastSize
}).Completed:Wait()
utils:AnimateCascade(ficon, {
AnimateSelf = true,
SkipTransparency = true,
ScaleCascade = true,
ScaleDirection = "Out"
})
open = false
end))
ui.open = framework.protected:GCProtect(LPH_JIT_MAX(function()
if open then return end
local main, ficon = ui:Get("MainFrame"), ui:Get("FloatingIcon")
utils:AnimateCascade(ficon.instance, {
SkipTransparency = true
})
lastSize = ficon.instance.Size
ficon:Tween(tweens.windows, {
Size = UDim2.fromScale(0, 0),
ImageTransparency = 1,
Visible = false
})
main.instance.Visible = true
main:Tween(tweens.windows, {
Size = ui.currentSize(),
})
utils:AnimateCascade(utils.currentPage, {
EnterTweenInfo = TweenInfo.new(.15, Enum.EasingStyle.Linear, Enum.EasingDirection.Out),
TweenInfo = TweenInfo.new(.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
ExcludeNames = { "BarFilter", "GridFilter", "CloudBestScriptsBar", "BestScriptsBar", "AIPlayerBackgroundOverlay", "Slider_Gravity_Bar", "Slider_Jump_Bar", "Slider_Speed_Bar" },
SkipTransparency = true,
ScaleDirection = "In",
DelayBetween = .005,
ScaleCascade = true,
Limit = nil
})
for _, anim in ipairs(utils:GetAnimationByTag("MainFrame")) do anim:Render() end
main:Tween(tweens.slow_default, {
GroupTransparency = 0,
Position = lastPos,
}).Completed:Wait()
open = true
end))
local skip
local setLog = framework.protected:GCProtect(function(text: string)
local log = ui:Get("ShadeText")
if log and log.instance then
log.instance.Text = text
end
end)
ui.getLoading = framework.protected:GCProtect(function()
local back = ui:Get("Background")
local phase = 1
local exitBtn = framework.utils.inputs.buttons.holdable(back)
local loading, phases = {}, {
function()
if back and back.instance then
back:Tween(TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false, 0), {
BackgroundTransparency = .4
})
end
local id = "BackgroundOverlay"
local anim = utils:GetAnimation(id)
if anim then anim:Render() end
local obj = ui:Get(id)
if obj and obj.instance then
obj:Tween(TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false, 1.5), {
ImageTransparency = 0
})
end
local tween = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false, 5)
for _, id in ipairs({"BottomShadeLeft", "BottomShadeRight"}) do
local obj = ui:Get(id)
if not obj or not obj.instance then continue end
obj:Tween(tween, { BackgroundTransparency = 0 })
end
task.wait(6)
end,
function() setLog("Launching…")
local tween = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false, 0)
for _, id in ipairs({"ShadeTitle", "ShadeText"}) do
local obj = ui:Get(id)
if not obj or not obj.instance then continue end
obj:Tween(tween, { TextTransparency = 0 })
end
task.wait(2)
end,
function() setLog("Loaded")
local tween = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false, 0)
local id = "BackgroundOverlay"
if back and back.instance then
back:Tween(tween, { BackgroundTransparency = 1, Visible = false })
end
local b = ui:Get(id)
if b and b.instance then
b:Tween(tween, { ImageTransparency = 1, Visible = false })
end
for _, id in ipairs({"ShadeTitle", "ShadeText"}) do
local obj = ui:Get(id)
if not obj or not obj.instance then continue end
obj:Tween(tween, { TextTransparency = 1, Visible = false })
end
for _, id in ipairs({"BottomShadeLeft", "BottomShadeRight"}) do
local obj = ui:Get(id)
if not obj or not obj.instance then continue end
obj:Tween(tween, { BackgroundTransparency = 1, Visible = false })
end
task.delay(1.1, function()
if exitBtn then exitBtn:Remove() end
local anim = utils:GetAnimation(id)
if anim then anim:Unbind() end
end)
end,
function()
local id = "StartingScreen"
local page = ui:Get(id)
local screen = ui:Get(id)
if page and page.instance then
page.instance.Visible = true
end
local anim = utils:GetAnimation(id)
if anim then anim:Render() end
if back and back.instance then
back:Tween(TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false), {
BackgroundTransparency = .4
})
end
--screen:Tween(TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false), {
-- ImageTransparency = 0
--})
if screen and screen.instance then
screen:Tween(TweenInfo.new(2, Enum.EasingStyle.Sine, Enum.EasingDirection.In, 0, false,2), {
ImageTransparency = .15
})
end
--task.wait(1)
if page and page.instance then
utils:AnimateCascade(page, {
DelayBetween = .5,
TweenInfo = TweenInfo.new(3, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
})
end
end,
function(callback: () -> any)
--[[local action
task.delay(10, function()
if action then return end
action = true
callback()
end)]]
for i=10, 1, -1 do
--print("Check in:", i)
task.wait(1)
end
local btn = ui:Get("StartButton")
btn.instance.MouseButton1Click:Wait()
--[[if action then return end
action = true]]
callback()
end,
function()
local id = "StartingScreen"
local page = ui:Get(id)
--task.wait(8)
--page.instance.Visible = true
local anim = utils:GetAnimation(id)
if anim then anim:Unbind() end
if page and page.instance then
page.instance.Visible = false
page:Remove()
end
if back and back.instance then
back:Remove()
end
task.delay(1.1, ui.close)
end
}
local function doPhase(n: number, callback: () -> any)
local action = phases[n]
if not action then return end
phase = n +1
action(callback)
end
function loading:Skip(n: number, callback: () -> any)
doPhase(n or #phases, callback)
return self
end
function loading:Advance(n: number, callback: () -> any)
if skip then return self end
doPhase(phase, callback)
if n and n > 1 then self:Advance(n -1, callback) end
return self
end
exitBtn.OnLongPress:Connect(function(clickTime: number)
setLog("Skipping…")
exitBtn:Remove()
exitBtn = nil
skip = true
loading:Skip(3)
end)
return loading
end)
end
-- Components
ui:CreateComponent("ButtonToast").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local glowStyle, colorStyle, gradientStyle = {
info = "rbxassetid://128601429542160",
error = "rbxassetid://105234289135931",
success = "rbxassetid://89752107107901",
confirm = "rbxassetid://128601429542160"
}, {
info = Color3.fromHex("#006AFF"),
error = Color3.fromHex("#F00"),
success = Color3.fromHex("#0F0"),
confirm = Color3.fromHex("#006AFF")
}, {
info = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#449EF8")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#73A5F4")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#3894FF")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#2A87FF"))
}),
error = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FA3232")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#F47373")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#FF3838")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#FF2929"))
}),
success = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#17FD4D")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#73F591")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#38FF67")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#1DFF52"))
}),
confirm = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#449EF8")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#73A5F4")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#3894FF")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#2A87FF"))
}),
}
local glowButton = ui:AddInstance("ImageLabel", {
Image = glowStyle[props.Style] or glowStyle.info, -- glowing toast button
BackgroundTransparency = 1,
ZIndex = 10
})
local additionalTitle = ui:AddInstance("TextLabel", {
Visible = props.AdditionalTitle and true or false,
TextXAlignment = Enum.TextXAlignment.Center,
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.7, .35),
BackgroundTransparency = 1,
TextSize = padding * 10,
TextWrapped = true,
Text = "",
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = props.AdditionalTitle
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
}), ui:AddInstance("UIGradient", {
Color = gradientStyle[props.Style] or gradientStyle.info,
Rotation = 210
}))
local additionalText = ui:AddInstance("TextLabel", {
Visible = props.AdditionalText and true or false,
TextXAlignment = Enum.TextXAlignment.Center,
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(.5, .325),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.7, .2),
BackgroundTransparency = 1,
TextSize = padding * 6,
TextWrapped = true,
Text = "",
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = props.AdditionalText
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
}))
local button = ui:AddInstance("TextButton", {
BackgroundColor3 = Color3.fromHex("#FFF"),
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5, .6),
AnchorPoint = Vector2.new(.5, 0),
BackgroundTransparency = .8,
ZIndex = 9,
Text = "",
MouseButton1Click = function()
props.Close(true)
end
}, ui:AddInstance("UIPadding", {
PaddingRight = UDim.new(0, padding *3.5),
PaddingBottom = UDim.new(0, padding *2),
PaddingLeft = UDim.new(0, padding *3.5),
PaddingTop = UDim.new(0, padding *2)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0, padding *5)
}), ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Vertical,
HorizontalFlex = Enum.UIFlexAlignment.Fill,
VerticalFlex = Enum.UIFlexAlignment.Fill,
SortOrder = Enum.SortOrder.LayoutOrder
}), ui:AddInstance("Frame", {
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1
}), ui:AddInstance("TextLabel", {
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5,.5),
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1,
TextSize = padding * 4,
TextWrapped = true,
Text = "",
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = props.Style == "confirm" and
{"Confirm","Conferma","Xác nhận","Confirmar","Konfirmasi","Подтвердить","Bestätigen","Confirmar","Confirmer","确认","確認","تأكيد","पुष्टि करें","ยืนยัน"}or {"Ok"}
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
})))
local main = ui:AddInstance("TextButton", {
Id = `ButtonToast_{props.Id}` or "ButtonToast_",
BackgroundColor3 = Color3.fromHex("#000"),
MouseButton1Click = props.Close,
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = .25,
AutoButtonColor = false,
ZIndex = 1499,
Text = ""
}, ui:AddInstance("ImageLabel", {
Id = "ToastGlow",
ImageColor3 = colorStyle[props.Style] or colorStyle.info,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, additionalTitle, additionalText, glowButton, button))
local function update()
local size, pos = button.instance.AbsoluteSize, button.instance.AbsolutePosition
glowButton.instance.Size = UDim2.fromOffset(size.X *2, size.Y *4)
local siz = glowButton.instance.AbsoluteSize
glowButton.instance.Position = UDim2.fromOffset(pos.X -(siz.X -size.X)/2, pos.Y -(siz.Y -size.Y) /3) --+size.Y /1.75) -- Image is not centered
end
update()
glowButton:Tween(TweenInfo.new(
1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {
ImageTransparency = .5
})
button.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(update)
button.instance:GetPropertyChangedSignal("AbsolutePosition"):Connect(update)
return main
end)))
ui:CreateComponent("InputToast").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local glowStyle, colorStyle, gradientStyle = {
info = "rbxassetid://128601429542160",
error = "rbxassetid://105234289135931",
success = "rbxassetid://89752107107901",
ai = "rbxassetid://93050869167661"
}, {
info = Color3.fromHex("#006AFF"),
error = Color3.fromHex("#F00"),
success = Color3.fromHex("#0F0"),
ai = Color3.fromHex("#FA54A8")
}, {
info = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#449EF8")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#73A5F4")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#3894FF")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#2A87FF"))
}),
error = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FA3232")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#F47373")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#FF3838")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#FF2929"))
}),
success = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#17FD4D")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#73F591")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#38FF67")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#1DFF52"))
}),
ai = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FF0000")),
ColorSequenceKeypoint.new(.4, Color3.fromHex("#FF3869")),
ColorSequenceKeypoint.new(.7, Color3.fromHex("#F473EC")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#15A6FE"))
})
}
local glowButton = ui:AddInstance("ImageLabel", {
Image = glowStyle[props.Style] or glowStyle.info, -- glowing toast button
BackgroundTransparency = 1,
ZIndex = 10
})
local additionalText = ui:AddInstance("TextLabel", {
Visible = props.AdditionalText and true or false,
TextXAlignment = Enum.TextXAlignment.Center,
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.8, .2),
BackgroundTransparency = 1,
TextSize = padding * 6,
TextWrapped = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = props.AdditionalText
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
}), ui:AddInstance("UIGradient", {
Color = gradientStyle[props.Style] or gradientStyle.info,
Rotation = 210
}))
local box = ui:AddInstance("TextBox", {
PlaceholderText = "Insert text here...",
TextTruncate = Enum.TextTruncate.AtEnd,
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ClearTextOnFocus = false,
TextSize = padding * 4,
Text = "",
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title", "No_Focus"},
Country_Code_Placeholder = props.PlaceholderText,
Colors_Text_Primary = {"TextColor3"}
})
local textbox = ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#FFF"),
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(.5, .25),
Size = UDim2.fromScale(.85, .115),
AnchorPoint = Vector2.new(.5, 0),
BackgroundTransparency = .8,
ZIndex = 9
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding *2),
PaddingRight = UDim.new(0, padding *3.5),
PaddingLeft = UDim.new(0, padding *2),
PaddingTop = UDim.new(0, padding *2)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0, padding *5)
}), box)
local main = ui:AddInstance("Frame", {
Id = `Toast_{props.Id}`,
BackgroundColor3 = Color3.fromHex("#000"),
Size = UDim2.fromScale(1, 1),
ZIndex = 1499
}, ui:AddInstance("UIGradient", {
Rotation = 90,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, .25),
NumberSequenceKeypoint.new(1, 1)
})
}), ui:AddInstance("ImageLabel", {
Id = "ToastGlow",
ImageColor3 = colorStyle[props.Style] or colorStyle.info,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, additionalText, glowButton, textbox))
local function update()
local size, pos = textbox.instance.AbsoluteSize, textbox.instance.AbsolutePosition
local aiMultiplier = props.Style == "ai" and 1.4 or 1
glowButton.instance.Size = UDim2.fromOffset(size.X *1.4 * aiMultiplier, size.Y *4)
local siz = glowButton.instance.AbsoluteSize
glowButton.instance.Position = UDim2.fromOffset(pos.X -(siz.X -size.X)/2, pos.Y -(siz.Y -size.Y)/3) -- Image is not centered
-- glowButton.instance.Position = UDim2.fromOffset(pos.X -(siz.X -size.X)/2, pos.Y -(siz.Y -size.Y)/2 +size.Y /1.75)
end
update()
glowButton:Tween(TweenInfo.new(
1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {
ImageTransparency = .5
})
textbox.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(update)
textbox.instance:GetPropertyChangedSignal("AbsolutePosition"):Connect(update)
box.instance:CaptureFocus()
box.instance.FocusLost:Once(function() props.Close(box.instance.Text) end)
main.tb = box
return main
end)))
ui:CreateComponent("Toast").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local glowStyle, iconStyle, colorStyle = {
info = "rbxassetid://128601429542160",
error = "rbxassetid://105234289135931",
success = "rbxassetid://89752107107901"
}, {
info = "rbxassetid://102895040094534",
error = "rbxassetid://137768773239157",
success = "rbxassetid://99252037962470"
}, {
success = Color3.fromHex("#0F0"),
info = Color3.fromHex("#006AFF"),
error = Color3.fromHex("#F00")
}
local glowButton = ui:AddInstance("ImageLabel", {
Image = glowStyle[props.Style] or glowStyle.info, -- glowing toast button
BackgroundTransparency = 1,
ZIndex = 10
})
local button = ui:AddInstance("TextButton", {
BackgroundColor3 = Color3.fromHex("#FFF"),
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
BackgroundTransparency = .8,
ZIndex = 9,
Text = "",
MouseButton1Click = props.Close
}, ui:AddInstance("UIPadding", {
PaddingRight = UDim.new(0, padding *3.5),
PaddingBottom = UDim.new(0, padding *2),
PaddingLeft = UDim.new(0, padding *2),
PaddingTop = UDim.new(0, padding *2)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0, padding *5)
}), ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Vertical,
HorizontalFlex = Enum.UIFlexAlignment.Fill,
VerticalFlex = Enum.UIFlexAlignment.Fill,
SortOrder = Enum.SortOrder.LayoutOrder
}), ui:AddInstance("Frame", {
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
HorizontalFlex = Enum.UIFlexAlignment.Fill,
VerticalFlex = Enum.UIFlexAlignment.Fill,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, padding*1.5)
}), ui:AddInstance("ImageLabel", {
Image = iconStyle[props.Style] or iconStyle.info, -- icon
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(0, .5),
AnchorPoint = Vector2.new(0, .5),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
AutomaticSize = Enum.AutomaticSize.XY,
AnchorPoint = Vector2.new(1, .5),
BackgroundTransparency = 1,
TextSize = padding * 4,
TextWrapped = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = props.Text
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
}))))
local main = ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 1),
BackgroundColor3 = Color3.fromHex("#000"),
ZIndex = 499
}, ui:AddInstance("UIGradient", {
Rotation = 90,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, .25),
NumberSequenceKeypoint.new(1, 1)
})
}), ui:AddInstance("ImageLabel", {
Id = "ToastGlow",
ImageColor3 = colorStyle[props.Style] or colorStyle.info,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
}, glowButton, button))
local function update()
local size, pos = button.instance.AbsoluteSize, button.instance.AbsolutePosition
glowButton.instance.Size = UDim2.fromOffset(size.X *1.6, size.Y *4)
local siz = glowButton.instance.AbsoluteSize
glowButton.instance.Position = UDim2.fromOffset(pos.X -(siz.X -size.X) /2, pos.Y -(siz.Y -size.Y) /3) --+size.Y /1.75) -- Image is not centered
end
update()
glowButton:Tween(TweenInfo.new(
1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {
ImageTransparency = .5
})
button.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(update)
button.instance:GetPropertyChangedSignal("AbsolutePosition"):Connect(update)
return main
end)))
ui:CreateComponent("Shade").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
return ui:AddInstance("Frame", {
Id = props.Id or nil,
BorderSizePixel = 0,
BackgroundTransparency = 1,
Size = props.Size or UDim2.fromScale(0, 0),
Position = props.Position or UDim2.fromScale(0, 0)
}, ui:AddInstance("UIGradient", {
Id = props.Id and framework.utils.strings.format("%s_Gradient", props.Id) or nil,
Rotation = props.Rotation or 0,
Color = props.Color or ColorSequence.new(Color3.fromRGB(255, 0, 0)),
Transparency = props.Transparency or NumberSequence.new({
NumberSequenceKeypoint.new(0, 1, 0),
NumberSequenceKeypoint.new(.75, 1, 0),
NumberSequenceKeypoint.new(1, .6, 0)
})
}))
end)))
ui:CreateComponent("SideBtn").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
return ui:AddInstance("ImageButton", {
Id = props.Id,
MouseButton1Click = props.OnClick,
Position = props.Position or UDim2.fromScale(.5, .05),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.8, .08),
BackgroundTransparency = 1,
AutoButtonColor = false
}, ui:AddInstance("ImageLabel", {
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.85, .85),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1,
Image = props.Image
}), ui:AddInstance("UIAspectRatioConstraint"))
end)))
ui:CreateComponent("ScriptTab").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: boolean)
local tbx = ui:AddInstance("TextBox", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.05, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.9, .5),
BackgroundTransparency = 1,
ClearTextOnFocus = false,
Text = props.Title,
TextScaled = true,
Visible = false,
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"}
})
local lbl = ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.05, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.75, .5),
BackgroundTransparency = 1,
Text = props.Title,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"}
})
local btn
btn = ui:AddInstance("ImageButton", {
Image = "rbxassetid://103207032755758",
Position = UDim2.fromScale(.95, .5),
AnchorPoint = Vector2.new(1, .5),
Size = UDim2.fromScale(.5, .5),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = function()
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
btn.instance.Visible = false
lbl.instance.Visible = false
tbx.instance.Visible = true
tbx.instance.TextEditable = true
tbx.instance:CaptureFocus()
tbx.instance.FocusLost:Wait()
tbx.instance.FocusLost:Wait() -- due to text handler
tbx.instance.TextEditable = false
tab:SetName(tbx.instance.Text)
btn.instance.Visible = true
lbl.instance.Visible = true
tbx.instance.Visible = false
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
local selected = false
local comp;
comp = ui:AddInstance("ImageButton", {
Position = UDim2.fromScale(.5, .0),
AnchorPoint = Vector2.new(.5, 0),
LayoutOrder = props.LayoutOrder,
Size = UDim2.fromScale(1, .2),
BackgroundTransparency = .5,
AutoButtonColor = false,
Parent = props.Parent,
Colors_Primary = framework.protected:GCProtect(function(color)
if not selected then return end
comp.instance.BackgroundColor3 = color
end),
Tags = {"Colors_Primary"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.3, 0)
}), tbx, lbl, btn)
function comp:Select()
selected = true
local succ, err = pcall(Color3.fromHex, framework.settings:GetSetting("Colors_Primary"))
comp:Tween(tweens.default, { BackgroundColor3 = succ and err or Color3.fromHex(framework.settings:GetDefaultSetting("Colors_Primary")) })
end
function comp:Unselect()
selected = false
local succ, err = pcall(Color3.fromHex, framework.settings:GetSetting("Colors_Secondary"))
comp:Tween(tweens.default, { BackgroundColor3 = succ and err or Color3.fromHex(framework.settings:GetDefaultSetting("Colors_Secondary")) })
end
comp:Unselect()
return comp
end)))
do
local prevbtn
ui:CreateComponent("CategoryButton").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: any)
local bgColor = props.BackgroundColor3 or Color3.fromHex("#F00")
local txt = ui:AddInstance("TextLabel", {
TextYAlignment = Enum.TextYAlignment.Center,
TextXAlignment = Enum.TextXAlignment.Right,
Position = UDim2.fromScale(.875, .5),
AnchorPoint = Vector2.new(1, .5),
Size = UDim2.fromScale(.45, .55),
BackgroundTransparency = 1,
TextColor3 = bgColor,
TextScaled = true,
Visible = false,
Text = "",
Tags = {"Fonts_Heading", "Country_Code"},
Country_Code = props.Title
})
local ratio = ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})
local comp
comp = ui:AddInstance("TextButton", {
Id = `CategoryBtn_{props.Title[1]}`,
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
BackgroundColor3 = bgColor,
Text = "",
MouseButton1Click = function() comp:Select() end,
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.4, 0)
}), txt, ui:AddInstance("ImageLabel", {
Image = props.Image or "rbxassetid://135906354399656",
Position = UDim2.fromScale(.125, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.55, .55),
BackgroundTransparency = 1,
ImageColor3 = bgColor
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ratio)
function comp:Select()
if prevbtn then prevbtn:Unselect() end
prevbtn = comp
local callback = props.Callback
if callback then callback() end
comp:Tween(tweens.default, { BackgroundTransparency = .7 })
ratio:Tween(tweens.default, { AspectRatio = 2.5 })
--txt.instance.Text = utils:Translate(props.Title)
ui:Get("CategoryTitle").instance.Text = utils:Translate(props.LongTitle or props.Title)
txt.instance.Visible = true
end
function comp:Unselect()
comp:Tween(tweens.default, { BackgroundTransparency = 1 })
ratio:Tween(tweens.default, { AspectRatio = 1 })
txt.instance.Visible = false
--txt.instance.Text = ""
end
if props.Selected then comp:Select() end
return comp
end)))
end
ui:CreateComponent("MovingText").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local glowGradient = ui:AddInstance("UIGradient", {
Offset = Vector2.new(-1, 0),
Rotation = 0,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(.25, 1),
NumberSequenceKeypoint.new(.5, 0),
NumberSequenceKeypoint.new(.75, .5),
NumberSequenceKeypoint.new(1, 0),
})
})
local label = ui:AddInstance("TextLabel", {
TextColor3 = Color3.fromRGB(255, 255, 255),
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.new(0, 0, 0, 0),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.new(1, 0, 1, 0),
BackgroundTransparency = 1,
Text = props.Text or "",
TextTransparency = 0,
TextSize = 25,
Tags = {"Fonts_Black"}
}, glowGradient)
props.Text = nil
-- create container and enable clipping
local comp = ui:AddInstance("Frame", props, label)
comp.instance.ClipsDescendants = true
task.spawn(function()
local TextService = framework.protected:GetService("TextService")
local scrollRunning = false
local scrollTweenThread
local function startScrollLoop(fullWidth, containerWidth)
-- cancel previous loop
if scrollTweenThread then
scrollRunning = false
task.cancel(scrollTweenThread)
scrollTweenThread = nil
end
-- if text fits, reset to original mid-Y
if fullWidth <= containerWidth * 1.05 then
label.instance.Position = UDim2.new(0, 0, 0, 0)
return
end
local distance = fullWidth - containerWidth
local tinfo = utils:GetTweenInfos(0, distance/35, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local pauseTime = 2.5
scrollRunning = true
scrollTweenThread = task.spawn(pcall, function()
while scrollRunning and label.instance do
-- slide left, keep mid-Y
label:Tween(tinfo, {
Position = UDim2.new(0, -distance, 0, 0)
}).Completed:Wait()
task.wait(pauseTime)
-- slide back, keep mid-Y
label:Tween(tinfo, {
Position = UDim2.new(0, 0, 0, 0)
}).Completed:Wait()
task.wait(pauseTime)
end
end)
end
local updateSize = framework.protected:GCProtect(function()
if not label.instance or not comp.instance then return end
-- match text size to frame height
label.instance.TextSize = comp.instance.AbsoluteSize.Y
local textSize = TextService:GetTextSize(
label.instance.Text,
label.instance.TextSize,
Enum.Font.MontserratBlack,
Vector2.new(math.huge, comp.instance.AbsoluteSize.Y)
)
local fullWidth = textSize.X
-- reset label
label.instance.Position = UDim2.fromScale(0, 0)
label.instance.Size = UDim2.new(1, 0, 1, 0)
startScrollLoop(fullWidth, comp.instance.AbsoluteSize.X)
end)
-- animate initial glow offset
glowGradient:Tween(tweens.glow, { Offset = Vector2.new(1, 0) })
-- re-run on resize
comp.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(updateSize)
-- initial sizing + scroll start
task.wait(.5)
updateSize()
end)
return comp
end)))
ui:CreateComponent("ScriptObj").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local comp, holdable
local fav = ui:AddInstance("ImageButton", {
Id = `ScriptObj_FavsButton_{props.Title}`,
Visible = not (props.NoFav or props.IsFolder),
ImageColor3 = Color3.fromHex("#FDC41B"),
Image = "rbxassetid://80350699155696",
Position = UDim2.fromScale(.95, .1),
AnchorPoint = Vector2.new(1, 0),
Size = UDim2.fromScale(.1, .2),
BackgroundTransparency = 1,
MouseButton1Click = function()
local btn = ui:Get(`ScriptObj_FavsButton_{props.Title}`)
if btn and btn.instance then
utils:AnimateCascade(btn.instance, {
AnimateSelf = true,
SkipTransparency = true
})
end
if props.OnFavourite then comp:SetFavourite(props.OnFavourite()) end
end,
OnRemoved = function()
if holdable then
holdable:Remove()
holdable = nil
end
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
local del = ui:AddInstance("ImageButton", {
Id = `ScriptObj_DelButton_{props.Title}`,
Image = "rbxassetid://80286816747552",
Position = UDim2.fromScale(.05, .1),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.fromScale(.1, .2),
BackgroundTransparency = 1,
Visible = not not props.OnDelete,
MouseButton1Click = function()
utils:AnimateCascade(ui:Get(`ScriptObj_DelButton_{props.Title}`).instance, {
AnimateSelf = true,
SkipTransparency = true
})
if props.OnDelete then props.OnDelete() end
end,
OnRemoved = function()
if holdable then
holdable:Remove()
holdable = nil
end
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
local function getRandomAIColor()
local aiColors = {
{255, 0, 0},
{255, 56, 105},
{244, 115, 236},
{21, 166, 254},
{255, 56, 105}
}
local color = aiColors[math.random(1, #aiColors)]
return Color3.fromRGB(color[1], color[2], color[3])
end
local image = props.Image
if props.IsFolder then
image = framework.protected:ProtectAsset("rbxassetid://99211126565176")
else
image = props.IsLocal and framework.protected:ProtectAsset("rbxassetid://87562736891746")
or framework.protected:ProtectAsset("rbxassetid://71177623238811")
end
comp = ui:AddInstance("ImageButton", {
Id = `ScriptObj_MainButton_{props.Title}`,
Size = UDim2.fromScale(1, 1),
AutoButtonColor = false,
Parent = props.Parent,
ImageColor3 = props.Image and Color3.fromHex("#FFF") or getRandomAIColor(),
Image = image
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.2, 0)
}), fav, del, ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.5, .8),
AnchorPoint = Vector2.new(.5, 1),
Size = UDim2.fromScale(.9, .2),
Text = props.Title or "Script",
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("TextLabel", {
TextColor3 = Color3.fromRGB(175, 175, 175),
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, 1),
Text = props.Description or "",
Size = UDim2.fromScale(1, .6),
BackgroundTransparency = 1,
TextScaled = true
})), ui:AddInstance("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#404040")),
ColorSequenceKeypoint.new(0.5, Color3.fromHex("#FFF")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#404040"))
}),
Rotation = 90
}))
if props.Slug then comp:AddTags(props.Slug) end
comp.favourite = fav
if props.OnClick then
holdable = framework.utils.inputs.buttons.holdable(comp)
holdable.OnShortPress:Connect(function(elapsed)
if elapsed < .2 and props.OnClick then
if ui:Get(`ScriptObj_MainButton_{props.Title}`) then
utils:AnimateCascade(ui:Get(`ScriptObj_MainButton_{props.Title}`).instance, {
AnimateSelf = true,
ScaleCascade = true,
ScaleDirection = "Out",
SkipTransparency = true
})
end
props.OnClick()
end
end)
end
function comp:SetFavourite(status: boolean, dontUpdate: boolean)
for _, v in ipairs(ui:GetByTag(props.Slug)) do
v.favourite.instance.Image = status and framework.protected:ProtectAsset("rbxassetid://137934368112423") or "rbxassetid://80350699155696"
end
local scriptsgrid = ui:Get("ScriptsGrid")
if not dontUpdate and not scriptsgrid.lastQuery then
framework.dependencies.cloudscripts:FetchFavourites("grid")
end
end
comp:SetFavourite(props.IsFavourite, true)
return comp
end)))
ui:CreateComponent("ExtensionObj").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local del = props.OnDelete and ui:AddInstance("ImageButton", {
Image = "rbxassetid://80286816747552",
Position = UDim2.fromScale(.95, .05),
MouseButton1Click = props.OnDelete,
AnchorPoint = Vector2.new(1, 0),
Size = UDim2.fromScale(.25, .25),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
return ui:AddInstance("ImageButton", {
MouseButton1Click = props.OnClick,
Size = UDim2.fromScale(1, 1),
AutoButtonColor = false,
Parent = props.Parent,
Image = props.Image
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectType = Enum.AspectType.ScaleWithParentSize,
DominantAxis = Enum.DominantAxis.Width,
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.2, 0)
}), ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.5, 1.05),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.9, .2),
Text = props.Title or "Extension",
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromHex("#404040"))
}),
Rotation = -45
}), del)
end)))
ui:CreateComponent("ContentBar").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local layout = ui:AddInstance("UIPageLayout", {
Id = "ScriptsLayout",
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
EasingDirection = Enum.EasingDirection.Out,
SortOrder = Enum.SortOrder.LayoutOrder,
EasingStyle = Enum.EasingStyle.Linear,
ScrollWheelInputEnabled = false,
GamepadInputEnabled = false,
TouchInputEnabled = false,
--Circular = true,
TweenTime = .25
})
local comp = ui:AddInstance("Frame", {
Id = props.Id,
AnchorPoint = props.AnchorPoint,
BackgroundTransparency = 1,
Position = props.Position,
Size = props.Size
}, ui:AddInstance("UIAspectRatioConstraint", {
DominantAxis = Enum.DominantAxis.Height,
AspectRatio = 1.78
}), layout)
local tweenService = framework.protected:GetService("TweenService")
local scripts, idx, current = {}, -1, nil
local setSize = framework.protected:GCProtect(function(time: number, scrOffset: number, ySize: number, xPos: number, ZIndex: number)
local scr = scripts[idx +scrOffset]
if not scr then return end
local inner = scr:GetObject()
local tween = utils:GetTweenInfos(0, time)
local color, transp = 255/3*ZIndex, ZIndex == 3 and 0 or 1 -1/3*ZIndex
for _, lbl in ipairs(inner.instance:GetDescendants()) do
if not lbl:IsA("TextLabel") then continue end
tweenService:Create(lbl, tween, { TextTransparency = transp }):Play()
end
inner.instance.ImageColor3 = Color3.fromRGB(color, color, color)
scr.instance.instance.ZIndex = ZIndex
scr.instance:Tween(tween, { Size = UDim2.fromScale(1, ySize) })
inner:Tween(tween, { Position = UDim2.fromScale(xPos, 0) })
end)
local slideIndex = framework.protected:GCProtect(function(increment: number)
local lenght = #scripts -1
local idx = idx
local bound
if idx +increment >= lenght then
bound = 1
idx = lenght
elseif idx +increment <= 0 then
bound = -1
idx = 0
else
idx += increment
end
if bound and props.OnBound then props.OnBound(bound) end -- on bound reached
return idx
end)
local updateList = framework.protected:GCProtect(function(timeMult)
if idx +3 < #scripts then
if idx == -1 then idx = slideIndex(2) end
elseif #scripts > 4 and props.OnLoad then task.spawn(props.OnLoad) end -- load more content
idx = framework.utils.maths.max(idx, 0)
timeMult = timeMult or 1
timeMult = .25 *timeMult
layout.instance.TweenTime = timeMult
layout.instance:JumpToIndex(idx)
local scr = scripts[idx +1]
current = scr
if current and props.OnSelected then task.spawn(props.OnSelected, scr) end -- on content selected
setSize(timeMult, 1, 1, 0, 3)
setSize(timeMult, 0, .8, .35, 2)
setSize(timeMult, -1, .6, 1, 1)
setSize(timeMult, -2, .4, 0, 1)
setSize(timeMult, 2, .8, -.35, 2)
setSize(timeMult, 3, .6, -1, 1)
setSize(timeMult, 4, .4, 0, 1)
end)
function comp:AddScript(props: {any})
local scr = {}
local inner
inner = ui:AddComponent("ScriptObj", {
OnFavourite = props.OnFavourite,
Description = props.Description,
IsFavourite = props.IsFavourite,
OnDelete = props.OnDelete,
IsFolder = props.IsFolder,
IsLocal = props.IsLocal,
Title = props.Title,
Image = props.Image,
NoFav = props.NoFav,
Slug = props.Slug,
OnClick = function()
if scr == current then
if props.Callback then props.Callback() end
return
end
local diff = framework.utils.tables.find(scripts, scr)
-(framework.utils.tables.find(scripts, current) or 0)
idx = slideIndex(diff)
updateList(framework.utils.maths.abs(diff))
end
})
local inst = ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
LayoutOrder = #scripts,
Parent = comp
}, inner)
scr.instance = inst
function scr:Remove()
local found = framework.utils.tables.find(scripts, scr)
if found then framework.utils.tables.remove(scripts, found) end
inst:Remove()
end
function scr:GetObject()
return inner
end
framework.utils.tables.insert(scripts, scr)
return scr
end
function comp:UpdateList()
updateList()
return self
end
function comp:Move(increment: number)
idx = slideIndex(increment)
updateList()
return self
end
function comp:GetScripts()
return framework.utils.tables.listCopy(scripts)
end
function comp:ClearScripts()
local scrs = self:GetScripts()
current = nil
scripts = {}
idx = -1
for _, scr in ipairs(scrs) do scr:Remove() end
return self
end
return comp
end)))
ui:CreateComponent("FilterSelector").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local comp = ui:AddInstance("ScrollingFrame", {
Id = props.Id,
ScrollingDirection = Enum.ScrollingDirection.X,
AutomaticCanvasSize = Enum.AutomaticSize.X,
CanvasSize = UDim2.fromScale(0, 0),
AnchorPoint = props.AnchorPoint,
ScrollBarThickness = padding,
BackgroundTransparency = 1,
Position = props.Position,
BorderSizePixel = 0,
Size = props.Size,
ZIndex = 1
}, ui:AddInstance("UIListLayout", {
VerticalAlignment = Enum.VerticalAlignment.Center,
HorizontalAlignment = props.HorizontalAlignment,
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, padding)
}))
local current = props.Filters[1]
for _, filter in ipairs(props.Filters) do
local img = ui:AddInstance("ImageLabel", {
Image = "rbxassetid://71605317317599",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, 0),
ScaleType = Enum.ScaleType.Fit,
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ImageTransparency = 1,
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
})
local lbl = ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .5),
BackgroundTransparency = 1,
Text = filter.Title[1],
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = filter.Title
})
ui:AddInstance("TextButton", {
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
AutoButtonColor = false,
Parent = comp,
Text = "",
MouseButton1Click = function()
if current then current:Unselect() end
current = filter
filter:Select()
end
}, img, lbl, ui:AddInstance("UIAspectRatioConstraint", {
DominantAxis = Enum.DominantAxis.Height,
AspectRatio = 2
}))
function filter:Select()
img:Tween(tweens.default, { ImageTransparency = 0 })
if filter.Callback then filter.Callback(lbl.instance.Text) end
end
function filter:Unselect()
img:Tween(tweens.default, { ImageTransparency = 1 })
end
end
function comp:Refresh()
if not ui.Loaded then return end
if current then task.spawn(current.Select, current) end
end
--task.defer(comp.Refresh, comp)
return comp
end)))
ui:CreateComponent("HistorySelector").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local padding = props.Padding or 8
-- Container principale
local comp = ui:AddInstance("ScrollingFrame", {
Id = props.Id,
ScrollingDirection = Enum.ScrollingDirection.X,
AutomaticCanvasSize = Enum.AutomaticSize.X,
CanvasSize = UDim2.fromScale(0, 0),
AnchorPoint = props.AnchorPoint,
ScrollBarThickness = padding,
BackgroundTransparency = 1,
Position = props.Position,
Visible = props.Visible,
BorderSizePixel = 0,
Size = props.Size,
ZIndex = 1
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = props.HorizontalAlignment or Enum.HorizontalAlignment.Left,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, padding)
}))
local current = {}
function comp:SetPath(path: {any})
for _, v in ipairs(current) do v:Remove() end
framework.utils.tables.clear(current)
for i, segment in ipairs(path) do
if i > 1 then
framework.utils.tables.insert(current, ui:AddInstance("TextLabel", {
AutomaticSize = Enum.AutomaticSize.X,
Size = UDim2.fromScale(0, 1),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
LayoutOrder = i *2,
Parent = comp,
Text = "",
Tags = {"Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"}
}))
end
local isLast = (i == #path)
framework.utils.tables.insert(current, ui:AddInstance("TextButton", {
Size = UDim2.fromScale(0, isLast and 1 or .65),
TextTransparency = isLast and 0 or .5,
AutomaticSize = Enum.AutomaticSize.X,
BackgroundTransparency = 1,
AutoButtonColor = false,
Text = segment.name,
LayoutOrder = i *2 +1,
TextScaled = true,
Parent = comp,
Tags = {"Colors_Text_Primary", isLast and "Fonts_Body" or "Fonts_HeadingItalic"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = function() segment:Browse() end
}))
end
end
return comp
end)))
ui:CreateComponent("CloudScriptInfo").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(scr: {any}, props: {any})
if not scr.features then
local res = framework.dependencies.cloudscripts:FetchDetails(scr.slug)
if res then
scr.updatedAt = res.updatedAt
scr.features = res.features
scr.script = res.script
end
end
if not scr.script then
task.spawn(function()
local res = framework.dependencies.cloudscripts:FetchDetails(scr.slug)
scr.script = res and res.script or ""
end)
end
local innerImg = ui:AddInstance("ImageLabel", {
Image = scr.Image or "rbxassetid://71177623238811",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1,
BorderSizePixel = 0
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.25, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectType = Enum.AspectType.ScaleWithParentSize,
DominantAxis = Enum.DominantAxis.Width,
AspectRatio = 16/9
}))
local img = ui:AddInstance("ImageLabel", {
Image = "rbxassetid://99756586318026", --71177623238811",
ImageColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(-.1, 0),
Size = UDim2.fromScale(.6, .75),
BackgroundTransparency = 1,
BorderSizePixel = 0
}, innerImg)
local comp
local fav = ui:AddInstance("ImageButton", {
Image = scr.isFavourite and "rbxassetid://137934368112423" or "rbxassetid://80350699155696",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
ImageColor3 = Color3.fromHex("#FDC41B"),
MouseButton1Click = function() comp:SetFavourite(scr.setFavourite()) end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))
comp = ui:AddInstance("ImageButton", {
BackgroundColor3 = Color3.fromHex("#000"),
Image = scr.Image or "rbxassetid://71177623238811",
ImageColor3 = Color3.fromHex("#202020"),
Position = UDim2.fromScale(0, 0),
Parent = ui:Get("MainFrame"),
Size = UDim2.fromScale(1, 1),
AutoButtonColor = false,
ZIndex = 499,
}, ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(0, 0),
BackgroundTransparency = .5,
Size = UDim2.fromScale(1, 1)
}, ui:AddInstance("UIPadding", {
PaddingTop = UDim.new(.075, 0),
PaddingBottom = UDim.new(.075, 0),
PaddingLeft = UDim.new(.05, 0),
PaddingRight = UDim.new(.05, 0)
}), ui:AddInstance("UIGradient", {
Rotation = -90,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#000")),
ColorSequenceKeypoint.new(.175, Color3.fromHex("#000")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#707070"))
}),
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(1, .35)
})
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Text = scr.title or "Cloud Script",
Position = UDim2.fromScale(0, .0),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.fromScale(.98, .1),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"}
}), img, ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .65),
Size = UDim2.fromScale(.2, .1),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Creation date:","Data di creazione:","Ngày tạo:","Data de criação:","Tanggal pembuatan:","Дата создания:","Erstellungsdatum:","Fecha de creación:","Date de création :","创建日期:","作成日:","تاريخ الإنشاء:","निर्माण तिथि:","วันที่สร้าง:"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.2, .7),
Text = scr.createdAt and framework.utils.datetimes.unixToDAgo(framework.utils.datetimes.isoToUnix(scr.createdAt)) or "N/A",
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.2, .07),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_HeadingItalic"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .73),
Size = UDim2.fromScale(.2, .1),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Visible = props.updatedAt and true or false,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Update date:","Data di aggiornamento:","Ngày cập nhật:","Data de atualização:","Tanggal pembaruan:","Дата обновления:","Aktualisierungsdatum:","Fecha de actualización:","Date de mise à jour :","更新日期:","更新日:","تاريخ التحديث:","अपडेट की तिथि:","วันที่อัปเดต:"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.2, .78),
AnchorPoint = Vector2.new(0, .5),
Text = scr.updatedAt and framework.utils.datetimes.unixToDAgo(framework.utils.datetimes.isoToUnix(scr.updatedAt)) or "N/A",
Size = UDim2.fromScale(.2, .07),
BackgroundTransparency = 1,
TextScaled = true,
Visible = props.updatedAt and true or false,
Tags = {"Colors_Text_Primary", "Fonts_HeadingItalic"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://71545944975150",
Position = UDim2.fromScale(0, 1),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.05, .15),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Text = scr.game or "Game name N/A",
Position = UDim2.fromScale(.065, 1),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.3, .1),
BackgroundTransparency = 1,
TextScaled = true,
TextTransparency = .2,
Tags = {"Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(1, .12),
AnchorPoint = Vector2.new(1, 0),
Size = UDim2.fromScale(.5, .65),
BackgroundTransparency = .5,
ZIndex = 1,
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding*2),
PaddingRight = UDim.new(0, padding*2),
PaddingLeft = UDim.new(0, padding*2),
PaddingTop = UDim.new(0, padding*2)
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Size = UDim2.fromScale(1, .075),
Position = UDim2.fromScale(0, 0),
AnchorPoint = Vector2.new(0, 0),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Heading", "Colors_Text_Primary"},
Country_Code = {"DESCRIPTION","DESCRIZIONE","MÔ TẢ","DESCRIÇÃO","DESKRIPSI","ОПИСАНИЕ","BESCHREIBUNG","DESCRIPCIÓN","DESCRIPTION","描述","説明","الوصف","विवरण","รายละเอียด"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", { -- NO DESCR PROVIDED
Text = scr.features or "No description.", --"This highly optimized script leverages Roblox's experimental parallel execution framework to dynamically reshape in-game terrain using real-time quantum noise functions. By integrating asynchronous spatial threading with localized biome-awake AI prediction models, the script ensures seamless environmental transitions across all client-server instances. Includes built-in redundancy bypass for legacy terrain annchors",
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.fromScale(0, .075),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.fromScale(1, .9),
BackgroundTransparency = 1,
TextWrapped = true,
TextSize = padding*1.5,
Tags = {"Fonts_Heading", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.075, 0)
})), ui:AddInstance("ImageLabel", {
Id = "Popup_ExecuteButtonShadow",
BackgroundColor3 = Color3.fromHex("#000"),
Image = "rbxassetid://111537386489097",
Position = UDim2.fromScale(1.06, 1.1075),
Size = UDim2.fromScale(.35, .35),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.117
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://100628992603432",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.3, .3),
BackgroundTransparency = 1,
MouseButton1Click = function()
utils:AnimateCascade(ui:Get("Popup_ExecuteButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
if scr.verified then
return framework.execution:Execute(scr.script)
end
utils:ShowToast("ButtonToast", {
AdditionalText = {"Script not verified, execute?","Script non verificato, eseguire?","Tập lệnh chưa được xác minh, thực thi?","Script não verificado, executar?","Skrip belum diverifikasi, jalankan?","Скрипт не проверен, выполнить?","Skript nicht verifiziert, ausführen?","Script no verificado, ¿ejecutar?","Script non vérifié, exécuter ?","脚本未验证,执行?","スクリプトが未検証です、実行しますか?","البرنامج النصي غير مُتحقق منه، هل تريد التنفيذ؟","स्क्रिप्ट सत्यापित नहीं है, चलाएँ?","สคริปต์ไม่ได้รับการยืนยัน ต้องการเรียกใช้หรือไม่?"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
framework.execution:Execute(scr.script)
end
})
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- COPY BUTTON
Id = "Popup_CopyButtonShadow",
BackgroundColor3 = Color3.fromHex("#F00"),
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.885, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://104350786247520",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
MouseButton1Click = function()
utils:AnimateCascade(ui:Get("Popup_CopyButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
framework.utils.clipboard:Set(scr.script)
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- OPEN EDITOR BUTTON
Id = "Popup_OpenEditorButtonShadow",
BackgroundColor3 = Color3.fromHex("#F00"),
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.78, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://100582884942929",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
MouseButton1Click = function()
utils:AnimateCascade(ui:Get("Popup_OpenEditorButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local editor = framework.utils.inputs.editors:Get("Main_Editor")
editor:AddTab(scr.title, scr.script)
utils:ClosePopup()
for _, page in ipairs(utils.pages) do
if page.Name == "Executor" then
ui.showPage(`Page_{page.Name}`, page.Indicator)
break
end
end
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- FAVS BUTTON
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.675, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), fav)))
scr.loadImage(comp.instance, true)
scr.loadImage(innerImg.instance, true)
function comp:SetFavourite(status: boolean)
fav.instance.Image = status and framework.protected:ProtectAsset("rbxassetid://137934368112423") or "rbxassetid://80350699155696"
if props.component then props.component:SetFavourite(status) end
end
return comp
end)))
ui:CreateComponent("LocalScriptInfo").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(file: {any}, props: {any})
local src, content = file:Read()
content = content or {}
src = src or ""
local comp
local fav = ui:AddInstance("ImageButton", {
Image = file:GetProperty("favourite") and "rbxassetid://137934368112423" or "rbxassetid://80350699155696",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
ImageColor3 = Color3.fromHex("#FDC41B"),
MouseButton1Click = function()
local status = not (file:GetProperty("favourite") and true or false)
file:SetProperty({ favourite = status })
comp:SetFavourite(status)
framework.dependencies.editortabs:GetSaved("tabs")
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))
local autoexec
local updateAutoexec = function()
autoexec.instance.ImageColor3 = (not not file:GetProperty("autoexecute")) and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(85, 170, 0)
end
local refreshTabs = function()
local tabs = framework.dependencies.editortabs
if utils.tabsMode == "files" then return end
for _, tab in ipairs(tabs:GetTabs()) do
local state = tab:GetProperty(utils.tabsMode) and true or false
tab:GetData().instance.instance.Visible = state
tabs:GetSavedByProperties({
[utils.tabsMode] = {true}
}, "tabs")
end
end
autoexec = ui:AddInstance("ImageButton", {
Image = "rbxassetid://115061506034125",
Position = UDim2.fromScale(.675, .685),
Size = UDim2.fromScale(.05, .1),
BackgroundTransparency = 1,
MouseButton1Click = function()
local status = not (file:GetProperty("autoexecute") and true or false)
file:SetProperty({ autoexecute = status })
autoexec.instance.ImageColor3 = status and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(85, 170, 0)
refreshTabs()
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
comp = ui:AddInstance("ImageButton", {
Image = props.Image or "rbxassetid://71177623238811",
ImageColor3 = Color3.fromHex("#202020"),
Position = UDim2.fromScale(0, 0),
Parent = ui:Get("MainFrame"),
Size = UDim2.fromScale(1, 1),
AutoButtonColor = false,
ZIndex = 499
}, ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#fff"),
Position = UDim2.fromScale(0, 0),
BackgroundTransparency = .5,
Size = UDim2.fromScale(1, 1)
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.075, 0),
PaddingRight = UDim.new(.05, 0),
PaddingLeft = UDim.new(.05, 0),
PaddingTop = UDim.new(.075, 0)
}), ui:AddInstance("UIGradient", {
Rotation = -90,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#000")),
ColorSequenceKeypoint.new(.175, Color3.fromHex("#000")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#707070"))
}),
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(1, .35)
})
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Text = file.name or "Local Script",
Position = UDim2.fromScale(0, .0),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.fromScale(.98, .1),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.675, .15),
Size = UDim2.fromScale(.3, .075),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Creation date:","Data di creazione:","Ngày tạo:","Data de criação:","Tanggal pembuatan:","Дата создания:","Erstellungsdatum:","Fecha de creación:","Date de création :","创建日期:","作成日:","تاريخ الإنشاء:","निर्माण तिथि:","วันที่สร้าง:"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Text = framework.utils.datetimes.unixToDAgo(content.creation or os.time()),
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.675, .25),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.2, .07),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_HeadingItalic"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.675, .32),
Size = UDim2.fromScale(.3, .075),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Last viewed:","Ultima visualizzazione:","Lần cuối xem:","Última visualização:","Terakhir dilihat:","Последний просмотр:","Zuletzt angesehen:","Última visualización:","Dernière consultation :","上次查看:","最終閲覧:","آخر مشاهدة:","अंतिम बार देखा गया:","การเข้าชมล่าสุด:"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Text = framework.utils.datetimes.unixToDAgo(content.viewed or os.time()),
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.675, .42),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.2, .07),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_HeadingItalic"},
Colors_Text_Primary = {"TextColor3"}
}), autoexec, ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.725, .7),
Size = UDim2.fromScale(.3, .05),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Heading"},
Country_Code = {"Auto-Execute","Auto-Esecuzione","Tự động thực thi","Auto-executar","Eksekusi Otomatis","Автовыполнение","Automatische Ausführung","Ejecución automática","Exécution automatique","自动执行","自動実行","التنفيذ التلقائي","स्वचालित निष्पादन","เรียกใช้โดยอัตโนมัติ"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(0, .12),
Size = UDim2.fromScale(.65, .65),
AnchorPoint = Vector2.new(0, 0),
BackgroundTransparency = .5,
ZIndex = 1,
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding*2),
PaddingRight = UDim.new(0, padding*2),
PaddingLeft = UDim.new(0, padding*2),
PaddingTop = UDim.new(0, padding*2)
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(1, .075),
AnchorPoint = Vector2.new(0, 0),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Text = "CONTENT",
Tags = {"Country_Code", "Fonts_Heading", "Colors_Text_Primary"},
Country_Code = {"CONTENT","CONTENUTO","Nội dung","Conteúdo","Konten","Контент","Inhalt","Contenido","Contenu","内容","コンテンツ","المحتوى","सामग्री","เนื้อหา"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddComponent("CodeEditor", {
Position = UDim2.fromScale(0, .1),
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.fromScale(1, .7),
Text = src,
Focused = framework.protected:GCProtect(function()
utils:EditorMode(true, .175)
--framework.utils.inputs.editors:Get("Main_Editor"):ToggleHighlighter(false)
end),
FocusLost = framework.protected:GCProtect(function()
utils:EditorMode(false)
--local editor = framework.utils.inputs.editors:Get("Main_Editor")
--local tabs = framework.dependencies.editortabs
--local tab = tabs:GetSelection()
--if not tab then return end
--tab:SetSource(editor:GetText())
--editor:ToggleHighlighter(true)
end)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.075, 0)
})), ui:AddInstance("ImageLabel", { -- EXECUTE BUTTON
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(1.06, 1.1075),
Image = "rbxassetid://111537386489097",
Size = UDim2.fromScale(.35, .35),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.1170212766
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://100628992603432",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.3, .3),
BackgroundTransparency = 1,
MouseButton1Click = function() framework.execution:Execute(src) end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- COPY BUTTON
BackgroundColor3 = Color3.fromHex("#F00"),
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.885, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99,
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://104350786247520",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
MouseButton1Click = function() framework.utils.clipboard:Set(src) end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- OPEN EDITOR BUTTON
BackgroundColor3 = Color3.fromHex("#F00"),
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.78, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99,
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://100582884942929",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
MouseButton1Click = function()
local editor = framework.utils.inputs.editors:Get("Main_Editor")
editor:AddTab(file.name, src)
utils:ClosePopup()
for _, page in ipairs(utils.pages) do
if page.Name == "Executor" then
ui.showPage(`Page_{page.Name}`, page.Indicator)
break
end
end
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- FAVS BUTTON
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(.675, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(1,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), fav), ui:AddInstance("ImageLabel", { -- DELETE SCRIPT BUTTON
Image = "rbxassetid://96112258106990",
Position = UDim2.fromScale(0, 1),
Size = UDim2.fromScale(.112, .133),
AnchorPoint = Vector2.new(0,1),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Image = "rbxassetid://80286816747552",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.75, .75),
BackgroundTransparency = 1,
MouseButton1Click = function()
utils:ShowToast("ButtonToast", {
AdditionalText = {`Delete {file.name}?`,`Eliminare {file.name}?`,`Xóa {file.name}?`,`Excluir {file.name}?`,`Hapus {file.name}?`,`Удалить {file.name}?`,`{file.name} löschen?`,`¿Eliminar {file.name}?`,`Supprimer {file.name}?`,`删除 {file.name}?`,`{file.name} を削除しますか?`,`هل تريد حذف {file.name}؟`,`{file.name} हटाएँ?`,`ลบ {file.name}?`},
AdditionalTitle = {"Delete file","Eliminare file","Xóa tệp","Excluir arquivo","Hapus file","Удалить файл","Datei löschen","¿Eliminar archivo?","Supprimer le fichier","删除文件","ファイルを削除","حذف الملف","फ़ाइल हटाएँ","ลบไฟล์"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
file:Delete()
framework.dependencies.scripthub:Browse(nil, true, "scripthub")
framework.dependencies.editortabs:GetSaved("tabs")
utils:ClosePopup()
end
})
end
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
})))))
function comp:SetFavourite(status: boolean)
fav.instance.Image = status and framework.protected:ProtectAsset("rbxassetid://137934368112423") or "rbxassetid://80350699155696"
if props.component then props.component:SetFavourite(status) end
refreshTabs()
end
updateAutoexec()
return comp
end)))
ui:CreateComponent("CodeEditor").OnCreating:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(props: {any})
local sizes = ui:AddInstance("UISizeConstraint", {
MaxSize = Vector2.new(math.huge, math.huge),
MinSize = Vector2.zero
})
local lines = ui:AddInstance("TextLabel", {
FontFace = Font.new("rbxasset://fonts/families/Inconsolata.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
TextXAlignment = Enum.TextXAlignment.Right,
TextYAlignment = Enum.TextYAlignment.Top,
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(.025, 0),
Size = UDim2.fromScale(.05, 0),
BackgroundTransparency = 1,
TextTransparency = .45,
Text = "",
Tags = {"FontSizes_Editor", "Colors_Text_Primary", "Fonts_Editor"},
Colors_Text_Primary = {"TextColor3"}
}, sizes)
local textbox = ui:AddInstance("TextBox", {
Id = props.Id,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
AutomaticSize = Enum.AutomaticSize.XY,
Size = UDim2.fromScale(1, 1),
FocusLost = props.FocusLost,
BackgroundTransparency = 1,
ClearTextOnFocus = false,
Focused = props.Focused,
MultiLine = true,
Tags = {"FontSizes_Editor", "Colors_Text_Primary", "Fonts_Editor"},
Colors_Text_Primary = {"TextColor3"}
})
local scrollx = ui:AddInstance("ScrollingFrame", {
ScrollingDirection = Enum.ScrollingDirection.X,
AutomaticCanvasSize = Enum.AutomaticSize.X,
AutomaticSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.fromScale(0, 0),
Position = UDim2.fromScale(.1, 0),
ScrollBarThickness = padding,
Size = UDim2.fromScale(.9, .7),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Colors_Primary = {"ScrollBarImageColor3"},
Tags = {"Colors_Primary"}
}, textbox, ui:AddInstance("Frame", {
Size = UDim2.fromOffset(padding * 10, padding*10),
Position = UDim2.fromScale(0, 1),
BackgroundTransparency = 1,
Tags = {"UI_WindowState"},
UI_WindowState = {
Size = {false, UDim2.fromOffset(padding * 12.5, padding*12.5), UDim2.fromOffset(padding * 15, padding*15)}
}
}))
local overlay = ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromRGB(0, 0, 0),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = .5,
Visible = false,
ZIndex = 2
}, ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromRGB(138, 138, 138),
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.5, .1)
}, ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.9, .75),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Text too long to be edited, read only.","Testo troppo lungo per essere modificato, solo lettura.","Văn bản quá dài để chỉnh sửa, chỉ đọc.","Texto muito longo para ser editado, somente leitura.","Teks terlalu panjang untuk diedit, hanya baca.","Текст слишком длинный для редактирования, только для чтения.","Text zu lang zum Bearbeiten, nur Lesezugriff.","Texto demasiado largo para editar, solo lectura.","Texte trop long pour être modifié, lecture seule.","文本过长无法编辑,仅可读取。","テキストが長すぎて編集できません。読み取り専用です。","النص طويل جدًا ولا يمكن تحريره، للقراءة فقط.","पाठ संपादन के लिए बहुत लंबा है, केवल पढ़ने के लिए।","ข้อความยาวเกินไป ไม่สามารถแก้ไขได้ อ่านอย่างเดียว"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Editor"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
})))
local editor = framework.utils.inputs.editors.new(props.Id)
local scrolly = ui:AddInstance("ScrollingFrame", {
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.fromScale(0, 0),
AnchorPoint = props.AnchorPoint,
ScrollBarThickness = padding,
BackgroundTransparency = 1,
Position = props.Position,
BorderSizePixel = 0,
Size = props.Size,
ZIndex = 1,
Colors_Primary = {"ScrollBarImageColor3"},
Tags = {"Colors_Primary"},
OnRemoved = function() editor:Remove() end
}, lines, scrollx, overlay)
local highlightmaxchars = 10000
local constraint = sizes.instance
local updateLines = framework.protected:GCProtect(function()
local y = scrollx.instance.AbsoluteSize.Y
constraint.MinSize = Vector2.zero -- Prevent roblox from being too smart
constraint.MaxSize = Vector2.new(math.huge, math.huge)
constraint.MaxSize = Vector2.new(math.huge, y)
y = framework.utils.maths.clamp(y, constraint.MaxSize.Y, math.huge)
constraint.MinSize = Vector2.new(0, y)
end)
updateLines()
scrollx.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(updateLines)
textbox.instance:GetPropertyChangedSignal("TextEditable"):Connect(function()
overlay.instance.Visible = not textbox.instance.TextEditable
end)
editor:ConnectHighlighter(textbox, highlightmaxchars)
editor:SetHighlighterColors(ui.highColors)
editor:ConnectLinesCounter(lines)
editor:SetText(props.Text or "")
return scrolly
end)))
ui:CreateComponent("SettingToggle").OnCreating:Connect(framework.protected:GCProtect(function(props: {any})
local state, toggle, knob = false, nil, nil
local function updateColor(color)
if state then
return toggle:Tween(tweens.default, {
BackgroundColor3 = color,
BackgroundTransparency = 0
})
end
toggle:Tween(tweens.default, {
BackgroundColor3 = Color3.fromHex("#555"),
BackgroundTransparency = 0
})
end
local function update(enabled: boolean?)
state = enabled
local goalPos = enabled and UDim2.fromScale(.8, .5) or UDim2.fromScale(.2, .5)
knob:Tween(tweens.default, { Position = goalPos })
local succ, err = pcall(Color3.fromHex, framework.settings:GetSetting("Colors_Primary"))
updateColor(succ and err or Color3.fromHex(framework.settings:GetDefaultSetting("Colors_Primary")))
end
knob = ui:AddInstance("Frame", {
Position = UDim2.fromScale(.8, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.65, .8),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint"), ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#fff"),
Size = UDim2.fromScale(1, 1)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UIAspectRatioConstraint")))
toggle = ui:AddInstance("ImageButton", {
Position = UDim2.fromScale(.875, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.15, .5),
Tags = {"Colors_Primary"},
Colors_Primary = updateColor,
MouseButton1Click = framework.protected:GCProtect(function()
state = not state
update(state)
props.Callback(state)
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), knob)
local comp = ui:AddInstance("Frame", {
Id = props.Id or ("Setting_" .. (props.Title:gsub("%s+", ""))),
BackgroundColor3 = Color3.fromHex("#000"),
ZIndex = -(props.LayoutOrder or 0),
LayoutOrder = props.LayoutOrder,
Size = UDim2.fromScale(.9, .2),
BackgroundTransparency = .7,
Position = props.Position
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0.25, 0)
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Bottom,
Position = UDim2.fromScale(.025, .1),
TextColor3 = Color3.fromHex("#fff"),
Size = UDim2.fromScale(.6, .4),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Heading"},
Country_Code = props.Title
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.fromScale(.025, .85),
TextColor3 = Color3.fromHex("#fff"),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.6, .3),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Description"},
Country_Code = props.Description
}), toggle)
knob.instance:GetPropertyChangedSignal("Position"):Connect(function()
update(state)
end)
task.defer(function()
update(props.Enabled())
end)
return comp
end))
ui:CreateComponent("SettingDropdown").OnCreating:Connect(framework.protected:GCProtect(function(props: {any})
local btn, list, content, listLayout
local lastText = props.Options[1].Name
btn = ui:AddInstance("TextButton", {
Text = utils:Translate(lastText),
Position = UDim2.fromScale(.975, .5),
AnchorPoint = Vector2.new(1, .5),
Size = UDim2.fromScale(.25, .5),
BackgroundTransparency = .85,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Body","Colors_Text_Primary","Colors_Primary"},
Colors_Primary = {"BackgroundColor3"},
Colors_Text_Primary = {"TextColor3"},
On_Country_Code = framework.protected:GCProtect(function()
btn.instance.Text = utils:Translate(lastText)
end),
MouseButton1Click = framework.protected:GCProtect(function()
list.instance.Visible = not list.instance.Visible
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingRight = UDim.new(0, padding),
PaddingLeft = UDim.new(0, padding),
PaddingTop = UDim.new(0, padding)
}))
-- frame scrollabile
list = ui:AddInstance("ScrollingFrame", {
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(.975, 1.05),
CanvasSize = UDim2.new(0, 0, 0, 0),
Size = UDim2.fromScale(.25, 2.5), -- altezza massima visibile (2.5 ~ 40% schermo)
AnchorPoint = Vector2.new(1,0),
BackgroundTransparency = .15,
ClipsDescendants = true,
ScrollBarThickness = 4,
BorderSizePixel = 0,
Visible = false,
ZIndex = 10,
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.15, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0.05, 0),
PaddingRight = UDim.new(0.05, 0),
PaddingLeft = UDim.new(0.05, 0),
PaddingTop = UDim.new(0.05, 0)
}))
-- contenitore autosize
content = ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundTransparency = 1,
Parent = list.instance
}, ui:AddInstance("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
Padding = UDim.new(0, 10), -- padding maggiore per touch
SortOrder = Enum.SortOrder.LayoutOrder
}))
listLayout = content.instance:FindFirstChildOfClass("UIListLayout")
-- opzioni
for _, option in ipairs(props.Options) do
ui:AddInstance("TextButton", {
Parent = content.instance,
Size = UDim2.new(1, 0, 0, 30), -- altezza fissa in pixel
BackgroundTransparency = 1,
TextScaled = true,
TextWrapped = true,
Tags = {"Country_Code", "Colors_Text_Primary","Fonts_Body"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = option.Name,
MouseButton1Click = framework.protected:GCProtect(function()
btn.instance.Text = utils:Translate(option.Name)
lastText = option.Name
list.instance.Visible = false
props.Callback(option.Value)
end)
})
end
-- aggiorna canvas size in base al contenitore
listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
list.instance.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 50)
end)
if props.SelectedValue then
task.defer(function()
local val = props.SelectedValue()
for _, option in ipairs(props.Options) do
if val == option.Value then
lastText = option.Name
btn.instance.Text = utils:Translate(option.Name)
break
end
end
end)
end
local comp = ui:AddInstance("Frame", {
Id = props.Id or `Setting_{props.Title:gsub("%s+", "")}`,
BackgroundColor3 = Color3.fromHex("#000"),
ZIndex = -(props.LayoutOrder or 0),
LayoutOrder = props.LayoutOrder,
Size = UDim2.fromScale(.9, .2),
BackgroundTransparency = .7,
Position = props.Position
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0.25, 0)
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Bottom,
Position = UDim2.fromScale(.025, .1),
TextColor3 = Color3.fromHex("#fff"),
Size = UDim2.fromScale(.6, .4),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Heading"},
Country_Code = props.Title
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.fromScale(.025, .85),
TextColor3 = Color3.fromHex("#fff"),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.6, .3),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Description"},
Country_Code = props.Description
}), btn, list)
return comp
end))
ui:CreateComponent("SettingNumeric").OnCreating:Connect(framework.protected:GCProtect(function(props: {any})
props.Increment = props.Increment or 1
props.Min = props.Min or -math.huge
props.Max = props.Max or math.huge
props.Value = props.Value or 0
local value = ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Center,
TextYAlignment = Enum.TextYAlignment.Center,
Size = UDim2.fromScale(.35, 1),
Text = tostring(props.Value),
BackgroundTransparency = 1,
TextScaled = true,
LayoutOrder = 2,
Tags = {"Fonts_Body","Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
})
local function setNum(num: number)
num = framework.utils.maths.clamp(num, props.Min, props.Max)
if props.Value ~= num then
props.Value = num
value.instance.Text = tostring(num)
props.Callback(num)
end
end
local process
local stop = framework.protected:GCProtect(function()
if process then task.cancel(process) end
end)
local down = ui:AddInstance("TextButton", {
Size = UDim2.fromScale(.25, 1),
BackgroundTransparency = .2,
TextScaled = true,
LayoutOrder = 1,
Text = "",
MouseButton1Up = stop,
MouseButton1Click = framework.protected:GCProtect(function()
setNum(props.Value - props.Increment)
end),
Tags = {"Fonts_Body","Colors_Text_Primary","Colors_Primary"},
Colors_Primary = {"BackgroundColor3"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}))
local up = ui:AddInstance("TextButton", {
Size = UDim2.fromScale(.25, 1),
BackgroundTransparency = .2,
TextScaled = true,
LayoutOrder = 3,
Text = "+",
MouseButton1Up = stop,
MouseButton1Click = framework.protected:GCProtect(function()
setNum(props.Value + props.Increment)
end),
Tags = {"Fonts_Body","Colors_Text_Primary","Colors_Primary"},
Colors_Primary = {"BackgroundColor3"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}))
local comp = ui:AddInstance("Frame", {
Id = props.Id or ("Setting_" .. (props.Title:gsub("%s+", ""))),
BackgroundColor3 = Color3.fromHex("#000"),
ZIndex = -(props.LayoutOrder or 0),
LayoutOrder = props.LayoutOrder,
Size = UDim2.fromScale(.9, .2),
BackgroundTransparency = .7,
Position = props.Position
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(0.25, 0)
}), ui:AddInstance("TextLabel", {
TextYAlignment = Enum.TextYAlignment.Bottom,
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.025, .1),
TextColor3 = Color3.fromHex("#fff"),
Size = UDim2.fromScale(.6, .4),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Heading"},
Country_Code = props.Title
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.fromScale(.025, .85),
TextColor3 = Color3.fromHex("#fff"),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.6, .3),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Description"},
Country_Code = props.Description
}), ui:AddInstance("Frame", {
AnchorPoint = Vector2.new(1, .5),
Position = UDim2.fromScale(.975, .5),
Size = UDim2.fromScale(.38, .55),
BackgroundTransparency = 1
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, 6)
}), down, value, up))
-- press & hold
local hup = framework.utils.inputs.buttons.holdable(up)
hup.OnShortPress:Connect(framework.protected:GCProtect(function()
setNum(props.Value + props.Increment)
end))
--[[hup.OnLongPress:Connect(framework.protected:GCProtect(function()
local tim = .5
process = task.spawn(function()
while true do
setNum(props.Value + props.Increment)
task.wait(tim)
tim = math.max(.1, tim - .1)
end
end)
end))]]
local hdown = framework.utils.inputs.buttons.holdable(down)
hdown.OnShortPress:Connect(framework.protected:GCProtect(function()
setNum(props.Value - props.Increment)
end))
--[[hdown.OnLongPress:Connect(framework.protected:GCProtect(function()
local tim = .5
process = task.spawn(function()
while true do
setNum(props.Value - props.Increment)
task.wait(tim)
tim = math.max(.1, tim - .1)
end
end)
end))]]
task.defer(function()
setNum(props.StartValue())
end)
return comp
end))
local pages do
local user = framework.protected:GetService("Players").LocalPlayer
local displayName, aiName = user.DisplayName, "Arcy"
pages = {
{ Name = "Home", Icon = "rbxassetid://16548334799",
Content = ui:AddInstance("Frame", {Id = "Home"},
ui:AddInstance("ImageLabel", {
Id = "ProfilePanelBackground",
Position = UDim2.fromScale(.03, .15),
Size = UDim2.fromScale(.375, .2),
BackgroundTransparency = 1,
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.28, 0)
}), ui:AddInstance("ImageLabel", {
Id = "UserPFP",
AnchorPoint = Vector2.new(0, .5),
Position = UDim2.fromScale(.05, .5),
Size = UDim2.fromScale(.3, .725),
BackgroundTransparency = 1,
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
}), ui:AddInstance("ImageLabel", {
Id = "PFPOverlay",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.3035, .2),
Size = UDim2.fromScale(.6, .2),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Welcome","Benvenuto","Chào mừng","Bem-vindo","Selamat datang","Добро пожаловать","Willkommen","Bienvenido","Bienvenue","欢迎","ようこそ","مرحبًا","स्वागत","ยินดีต้อนรับ"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddComponent("MovingText", {
Id = "MagicNicknameContainer",
Position = UDim2.fromScale(.3035, .45),
Size = UDim2.fromScale(.625, .35),
BackgroundTransparency = 1,
ClipsDescendants = true,
Text = displayName
})), ui:AddInstance("ImageButton", {
Id = "HomeTipBackground",
AnchorPoint = Vector2.new(1, 0),
Position = UDim2.fromScale(.58, .15),
Size = UDim2.fromScale(.16, .2),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
framework.dependencies.plugins:Open("AXS_Hub", ui:Get("ExtensionContent"))
for _, page in ipairs(utils.pages) do
if page.Name == "Extensions" then
ui.showPage(`Page_{page.Name}`, page.Indicator)
break
end
end
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.28, 0)
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://125983090347378",
AnchorPoint = Vector2.new(.5, .5),
Position = UDim2.fromScale(.5, .35),
Size = UDim2.fromScale(.75,.75),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1
}), ui:AddInstance("TextLabel", {
Text = "Arceus Hub",
BackgroundTransparency = 1,
Position = UDim2.fromScale(.5, .75),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.8, .2),
TextScaled = true,
Tags = {"Fonts_Body", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
})), ui:AddInstance("ImageLabel", {
Id = "BestScriptsPanelBackground",
Position = UDim2.fromScale(.03, .37),
Size = UDim2.fromScale(.55, .36),
BackgroundTransparency = 1,
ClipsDescendants = true,
Colors_Secondary = {"BackgroundColor3"},
Tags = {"Colors_Secondary"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.15, 0)
}), ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.05, .05),
Size = UDim2.fromScale(.9, .1),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Country_Code = {"Best Scripts","Migliori Scripts","Các kịch bản tốt nhất","Melhores scripts","Skrip terbaik","Лучшие скрипты","Beste Skripte","Mejores scripts","Meilleurs scripts","最佳脚本","最高のスクリプト","أفضل البرامج النصية","सर्वश्रेष्ठ स्क्रिप्ट","สคริปต์ที่ดีที่สุด"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddComponent("ContentBar", {
Id = "BestScriptsBar",
Position = UDim2.fromScale(.5, .575),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .725)
})), ui:AddInstance("Frame", {
Id = "AIPanelBackground",
Position = UDim2.fromScale(.03, .75),
Size = UDim2.fromScale(.55, .2),
BackgroundTransparency = .5,
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
ClipsDescendants = true,
Tags = {"Colors_Secondary"}
}, ui:AddInstance("UIGradient", {
Id = "AIPanelGradient",
Rotation = 10,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(.0, Color3.fromHex("#15A6FE")),
ColorSequenceKeypoint.new(.33, Color3.fromHex("#F473EC")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#FF3869")),
ColorSequenceKeypoint.new(1.0, Color3.fromHex("#FF3869"))
})
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.3, 0)
}), ui: AddInstance("ImageButton", {
Id = "AIPanelBackgroundOverlay",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
AutoButtonColor = false,
ZIndex = 30,
MouseButton1Click = framework.protected:GCProtect(function()
for _, page in ipairs(utils.pages) do
if page.Name == "ArceusIntelligence" then
ui.showPage(`Page_{page.Name}`, page.Indicator)
break
end
end
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.3, 0)
}), ui:AddInstance("TextLabel", {
AnchorPoint = Vector2.new(1, 0),
TextXAlignment = Enum.TextXAlignment.Right,
Position = UDim2.fromScale(.95, .1),
Size = UDim2.fromScale(.35, .15),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Arceus Intelligence"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Caption"},
Colors_Text_Primary = {"TextColor3"},
}), ui:AddInstance("TextLabel", {
AnchorPoint = Vector2.new(0, 1),
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.3, .425),
Size = UDim2.fromScale(.2, .15),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Let's talk","Parliamo","Hãy nói chuyện","Vamos conversar","Mari bicara","Давай поговорим","Lass uns reden","Hablemos","Parlons","让我们谈谈","話しましょう","هيا نتحدث","चलिए बात करते हैं","มาคุยกันเถอะ"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"},
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
AnchorPoint = Vector2.new(0, .5),
Position = UDim2.fromScale(.3 , .55),
Size = UDim2.fromScale(.8, .275),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Country_Code = {`Hello! I'm {aiName}!`,`Ciao! Sono {aiName}!`,`Xin chào! Tôi là {aiName}!`,`Olá! Eu sou {aiName}!`,`Halo! Saya {aiName}!`,`Привет! Я {aiName}!`,`Hallo! Ich bin {aiName}!`,`Hola! Soy {aiName}!`,`Bonjour! Je suis {aiName}!`,`你好!我是 {aiName}!`,`こんにちは!私は {aiName} です!`,`مرحبًا! أنا {aiName}!`,`नमस्ते! मैं {aiName} हूँ!`,`สวัสดี! ฉันคือ {aiName}!`},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Colors_Text_Primary = {"TextColor3"},
}), ui: AddInstance("ImageLabel", {
Id = "AIIcon",
Position = UDim2.fromScale(.05 , .5),
Size = UDim2.fromScale(.85, .85),
AnchorPoint = Vector2.new(0, .5),
BackgroundTransparency = 1,
Tags = {"Colors_Text_Primary"}
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui: AddInstance("ImageLabel", {
Image = "rbxassetid://102982068367172",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.4, .4),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1,
ImageTransparency = .2,
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))))), ui:AddInstance("ImageLabel", {
Id = "SlidersContainerBackground",
Position = UDim2.fromScale(.97, .95),
Size = UDim2.fromScale(.36 , .8),
AnchorPoint = Vector2.new(1, 1),
BackgroundTransparency = 1,
Tags = {"Colors_Secondary"},
Colors_Secondary = {"BackgroundColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.11, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.065, 0),
PaddingTop = UDim.new(.065, 0),
PaddingRight = UDim.new(.1, 0),
PaddingLeft = UDim.new(.1, 0),
}), ui:AddInstance("UIListLayout", {
FillDirection = Enum.FillDirection.Horizontal,
HorizontalFlex = Enum.UIFlexAlignment.Fill,
VerticalFlex = Enum.UIFlexAlignment.Fill,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(.05, 0)
}), framework.protected:GCProtect(function()
local cache = {}
local getHumanoid = framework.protected:GCProtect(function(char)
local succ, hum: Humanoid = pcall(char.WaitForChild, char, "Humanoid")
if not succ then return end
return hum
end)
local frames, sliders = {}, {
{
Icon = "rbxassetid://15054333892",
Label = {"Gravity","Gravità","Trọng lực","Gravidade","Gravitasi","Гравитация","Schwerkraft","Gravedad","Gravité","重力","重力","الجاذبية","गुरुत्वाकर्षण","แรงโน้มถ่วง"},
Id = "Gravity",
Def = 196.2, Min = .001, Max = 250, Ena = false,
Set = framework.protected:GCProtect(function(value: number)
framework.protected:GetService("Workspace").Gravity = value
end)
},
{
Icon = "rbxassetid://15054332032",
Label = {"Jump","Salto","Nhảy","Pular","Lompat","Прыжок","Sprung","Salto","Saut","跳跃","ジャンプ","قفزة","कूद","กระโดด"},
Id = "Jump",
Def = 7.2, Min = 0, Max = 250, Ena = false,
Set = framework.protected:GCProtect(function(value: number)
cache.jump = cache.jump or {}
local ccon, jcon =
cache.jump.ccon, cache.jump.jcon
if ccon then ccon:Disconnect() end
if jcon then jcon:Disconnect() end
local plr: Player = framework.protected:GetService("Players").LocalPlayer
local char = plr.Character
if char then
local hum = getHumanoid(char)
if hum then
hum.UseJumpPower = false
hum.JumpHeight = value
end
end
cache.jump.ccon = plr.CharacterAdded:Connect(function(char)
local hum = getHumanoid(char)
if not hum then return end
hum.UseJumpPower = false
hum.JumpHeight = value
cache.jump.jcon = hum:GetPropertyChangedSignal("JumpHeight"):Connect(function()
hum.UseJumpPower = false
hum.JumpHeight = value
end)
end)
end)
},
{
Icon = "rbxassetid://15054335513",
Label = {"Speed","Velocità","Tốc độ","Velocidade","Kecepatan","Скорость","Geschwindigkeit","Velocidad","Vitesse","速度","速度","السرعة","गति","ความเร็ว"},
Id = "Speed",
Def = 16, Min = 0, Max = 500, Ena = false,
Set = framework.protected:GCProtect(function(value: number)
cache.speed = cache.speed or {}
local ccon, scon =
cache.speed.ccon, cache.speed.scon
if ccon then ccon:Disconnect() end
if scon then scon:Disconnect() end
local plr: Player = framework.protected:GetService("Players").LocalPlayer
local char = plr.Character
if char then
local hum = getHumanoid(char)
if hum then hum.WalkSpeed = value end
end
cache.speed.ccon = plr.CharacterAdded:Connect(function(char)
local hum = getHumanoid(char)
if not hum then return end
hum.WalkSpeed = value
cache.speed.jcon = hum:GetPropertyChangedSignal("WalkSpeed"):Connect(function()
hum.WalkSpeed = value
end)
end)
end)
}
}
for i, slider in ipairs(sliders) do
local img = ui:AddInstance("ImageLabel", {
Id = `Slider_{slider.Label[1]}`,
Image = "rbxassetid://97199452213620", --"rbxassetid://113076933640634",
ImageColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ZIndex = 2,
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
})
local img2 = ui:AddInstance("ImageLabel", {
Image = "rbxassetid://71605317317599",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(4, 4),
BackgroundTransparency = 1
})
local bar = ui:AddInstance("TextButton", {
Id = `Slider_{slider.Label[1]}_Bar`,
BackgroundColor3 = Color3.fromRGB(255, 0, 0),
Position = UDim2.fromScale(.5, 1),
AnchorPoint = Vector2.new(.5, 1),
Size = UDim2.fromScale(1, 1),
--BackgroundTransparency = 1, -- Bar edit
AutoButtonColor = false,
LayoutOrder = 1,
Text = "",
Colors_Primary = {"BackgroundColor3"},
Tags = {"Colors_Primary"}
})
local lbl = ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Center,
Position = UDim2.fromScale(.5, .05),
Size = UDim2.fromScale(.75, .085),
AnchorPoint = Vector2.new(.5, 0),
BackgroundTransparency = 1,
TextScaled = true,
Text = "75%",
ZIndex = 5,
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"}
})
local setValue = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(percent: number)
slider.Set(framework.utils.maths.clamp(slider.Min +percent *(slider.Max -slider.Min), slider.Min, slider.Max))
utils:Vibrate(Enum.HapticEffectType.UIClick)
end))
local btn, sld, status
local updateColor = framework.protected:GCProtect(function(color)
local props = { ImageColor3 = status and
color or Color3.fromRGB(
framework.utils.maths.max(color.R *255*2/5, 0),
framework.utils.maths.max(color.G *255*2/5, 0),
framework.utils.maths.max(color.B *255*2/5, 0)
)
}
--img:Tween(tweens.default, props)
img2:Tween(tweens.default, props)
props.BackgroundColor3 = props.ImageColor3
props.ImageColor3 = nil
bar:Tween(tweens.default, props)
end)
local setEnabled = framework.protected:GCProtect(function(ignore: boolean)
status = slider.Ena
slider.Ena = not slider.Ena
if status then sld:Enable() else sld:Disable() end
if not (ignore == true) then
if status then
setValue(sld.percentage)
else
slider.Set(slider.Def)
end
end
local succ, err = pcall(Color3.fromHex, framework.settings:GetSetting("Colors_Primary"))
local color: Color3 = succ and err or Color3.fromHex(framework.settings:GetDefaultSetting("Colors_Primary"))
updateColor(color)
utils:AnimateCascade(ui:Get(`SliderToggle_{slider.Label[1]}`).instance, {
AnimateSelf = true,
SkipTransparency = true
})
end)
local setLabel = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(percent: number)
lbl.instance.Text = `{framework.utils.maths.round(percent*100)}%`
--[[local anim = utils:GetAnimation(`Slider_{slider.Label[1]}`)
if not anim then return end
local total = anim:GetFrameCount()
local idx = framework.utils.maths.ceil(percent * (total -1))
anim:SetFrame(idx)]]
utils:Vibrate(Enum.HapticEffectType.UIHover)
end))
btn = ui:AddInstance("TextButton", {
Id = `SliderToggle_{slider.Label[1]}`,
Size = UDim2.fromScale(.3, .1),
Position = UDim2.fromScale(.3, 1.05),
BackgroundTransparency = 1,
LayoutOrder = 2,
ZIndex = 1,
Text = "",
MouseButton1Click = setEnabled,
Colors_Primary = updateColor,
Tags = {"Colors_Primary"},
}, img2, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))
framework.utils.tables.insert(frames, ui:AddInstance("Frame", {
Size = UDim2.fromScale(.17, .6),
BackgroundTransparency = 1,
ClipsDescendants = true, -- Bar edit
LayoutOrder = i
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
VerticalFlex = Enum.UIFlexAlignment.SpaceBetween,
FillDirection = Enum.FillDirection.Vertical,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(.045, 0)
}), ui:AddInstance("CanvasGroup", {
--Image = "rbxassetid://97199452213620",
Id = slider.Id .. "Container",
Size = UDim2.fromScale(1, .7),
BackgroundTransparency = 1
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = .2713
}), img, bar, lbl, ui:AddInstance("ImageLabel", {
Size = UDim2.fromScale(.65, .25),
Position = UDim2.fromScale(.5, .825),
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1,
Image = slider.Icon
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))), btn, ui:AddInstance("TextLabel", {
Size = UDim2.fromScale(1, .065),
BackgroundTransparency = 1,
Text = slider.Label[1],
TextScaled = true,
LayoutOrder = 3,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Heading"},
Colors_Text_Primary = {"TextColor3"},
Country_Code = slider.Label
})))
local start = framework.utils.maths.clamp((slider.Def -slider.Min)/(slider.Max -slider.Min), 0, 1)
sld = framework.utils.inputs.sliders.vertical({bar}, start, slider.Id)
setEnabled(true)
setLabel(start)
sld.OnPercentageUpdated:Connect(setLabel)
sld.OnPercentageChanged:Connect(setValue)
framework.animator.OnAnimationLoaded:Connect(function(anim: {any})
if framework.utils.strings.sub(anim.id, 1, 7) == "Slider_" then
--setLabel(sld.percentage)
end
end)
end
return frames
end)))
},
{ Name = "Executor", Icon = "rbxassetid://133382010896956",
Content = ui:AddInstance("Frame", {Id = "Executor"},
ui:AddInstance("Frame", {
Id = "Editor",
Position = UDim2.fromScale(.03, .95),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.65, .8),
BackgroundTransparency = .2,
Tags = {"Colors_Secondary", "UI_WindowState"},
Colors_Secondary = {"BackgroundColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.05, 0)
}), ui:AddInstance("Frame", {
Size = UDim2.new(1, -padding, .35, 0),
Position = UDim2.fromScale(0, 1),
AnchorPoint = Vector2.new(0, 1),
BackgroundTransparency = 0,
ZIndex = 95,
Tags = {"Colors_Secondary", "UI_WindowState"},
Colors_Secondary = {"BackgroundColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.15, 0)
}), ui:AddInstance("UIGradient", {
Rotation = -90, -- verticale: dall'alto in basso
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(.65, .1),
NumberSequenceKeypoint.new(1, 1)
})
})), ui:AddInstance("Frame", {
Position = UDim2.fromScale(.92, .1),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.112, .112),
BackgroundTransparency = 0,
ZIndex = 95,
Tags = {"Colors_Secondary", "UI_WindowState"},
Colors_Secondary = {"BackgroundColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddComponent("CodeEditor", {
Id = "Main_Editor",
Position = UDim2.fromScale(0, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(1, .925),
Focused = framework.protected:GCProtect(function()
utils:EditorMode(true, .175)
framework.utils.inputs.editors:Get("Main_Editor"):ToggleHighlighter(false)
end),
FocusLost = framework.protected:GCProtect(function()
utils:EditorMode(false)
local editor = framework.utils.inputs.editors:Get("Main_Editor")
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
tab:SetSource(editor:GetText())
editor:ToggleHighlighter(true)
end)
}), ui:AddInstance("ImageLabel", { -- EDITOR AI BUTTON
Id = "EditorAIButtonShadow",
BackgroundColor3 = Color3.fromHex("#000"),
Image = "rbxassetid://112235731951114",
Position = UDim2.fromScale(.1, .87),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.8, .8),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("ImageButton", {
Id = "EditorAIButton",
Image = "rbxassetid://91074694855691",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.3, .3),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function() -- alura
if utils.axintDebounce then return end
utils.axintDebounce = true
local background = ui:Get("BackgroundGlow")
utils:ShowToast("InputToast", {
PlaceholderText = {"Walkspeed script...","Script per correre...","Kịch bản tốc độ chạy...","Script de velocidade de caminhada...","Skrip kecepatan berjalan...","Скрипт скорости ходьбы...","Gehgeschwindigkeits-Skript...","Script de velocidad de caminata...","Script de vitesse de marche...","行走速度脚本...","歩行速度スクリプト...","سكريبت سرعة المشي...","चलने की गति स्क्रिप्ट...","สคริปต์ความเร็วในการเดิน..."},
AdditionalText = {"Instant code with Arcy","Scripta con Arcy","Mã tức thì với Arcy","Código instantâneo com Arcy","Kode instan dengan Arcy","Мгновенный код с Arcy","Sofortiger Code mit Arcy","Código instantáneo con Arcy","Code instantané avec Arcy","Arcy 的即时代码","Arcy でインスタントコード","كود فوري مع Arcy","Arcy के साथ त्वरित कोड","รหัสทันทีด้วย Arcy"},
Style = "ai",
Callback = function(txt: string)
if framework.utils.strings.gsub(txt, "%s", "") == "" then
utils.axintDebounce = false
return
end
local editor = framework.utils.inputs.editors:Get("Main_Editor")
local tab = editor:AddTab("AI Script", "-- Arcy is reasoning...")
local axint = framework.dependencies.axintelligence
local res = axint:Chat(txt)
local src = ""
if res then
if framework.utils.strings.gsub(res.texts[1], "%s", "") ~= "" then
background:Tween(tweens.default, {
ImageColor3 = Color3.fromHex("#707070")
})
task.delay(3, function()
background:Tween(tweens.slow_default, {
ImageColor3 = Color3.fromHex("#000"),
})
end)
src ..= [=[--[[
]=] ..res.texts[1].. [=[
]]
]=]
end
if #res.codes > 0 then
src ..= [[-- Generated by Arcy, Arceus Intelligence.
]]
src ..= res.codes[1]
else
src ..= "-- Arcy didn't generate any code..."
end
end
tab:SetSource(src)
utils.axintDebounce = false
end
})
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR EXECUTE BUTTON
Id = "EditorSSExecuteButtonShadow",
BackgroundColor3 = Color3.fromHex("#000"),
Image = "rbxassetid://111537386489097",
Position = UDim2.fromScale(.9, .725),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.25, .25),
BackgroundTransparency = 1,
Visible = false,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.117
}), ui:AddInstance("ImageButton", {
Id = "EditorSSExecuteButton",
Image = "rbxassetid://123607114821398",
ImageColor3 = Color3.fromHex("#58B2FF"),
Size = UDim2.fromScale(.225, .225),
Position = UDim2.fromScale(.505, .5),
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorSSExecuteButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
local src = tab and tab:GetSource()
if not src or src == "" then return end
local name = tab:GetName()
utils:ShowToast("ButtonToast", {
AdditionalText = {`Execute {name} at Server-Side?`,`Esegui {name} sul lato server?`,`Thực thi {name} ở phía máy chủ?`,`Executar {name} no lado do servidor?`,`Eksekusi {name} di sisi server?`,`Выполнить {name} на стороне сервера?`,`{name} auf der Serverseite ausführen?`,`¿Ejecutar {name} en el lado del servidor?`,`Exécuter {name} côté serveur ?`,`在服务器端执行 {name}?`,`サーバー側で {name} を実行しますか?`,`تنفيذ {name} على جانب الخادم؟`,`सर्वर-पक्ष पर {name} निष्पादित करें?`,`ดำเนินการ {name} ที่ฝั่งเซิร์ฟเวอร์หรือไม่?`},
AdditionalTitle = {"Execute","Esegui","Thực thi","Executar","Eksekusi","Выполнить","Ausführen","Ejecutar","Exécuter","执行","実行","تنفيذ","निष्पादित करें","ดำเนินการ"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
framework.dependencies.serverside:Execute(src)
end
})
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))), ui:AddInstance("ImageLabel", { -- EDITOR EXECUTE BUTTON
Id = "EditorExecuteButtonShadow",
BackgroundColor3 = Color3.fromHex("#000"),
Image = "rbxassetid://111537386489097",
Position = UDim2.fromScale(.9, .87),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.35, .35),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.117
}), ui:AddInstance("ImageButton", {
Id = "EditorExecuteButton",
Image = "rbxassetid://100628992603432",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.3, .3),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorExecuteButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
local src = tab and tab:GetSource()
if not src or src == "" then
-- POPUP EXECUTE CLIPBOARD
return utils:ShowToast("ButtonToast", {
AdditionalText = {"Execute clipboard?","Eseguire appunto?","Thực thi khay nhớ tạm?","Executar área de transferência?","Jalankan clipboard?","Выполнить буфер обмена?","Zwischenablage ausführen?","¿Ejecutar portapapeles?","Exécuter le presse-papiers?","执行剪贴板?","クリップボードを実行しますか?","تنفيذ الحافظة؟","क्लिपबोर्ड निष्पादित करें?","เรียกใช้คลิปบอร์ด?"},
AdditionalTitle = {"Execute","Esegui","Thực thi","Executar","Eksekusi","Выполнить","Ausführen","Ejecutar","Exécuter","执行","実行","تنفيذ","निष्पादित करें","ดำเนินการ"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
framework.execution:Execute(framework.utils.clipboard:Get())
end
})
end
local name = tab:GetName()
utils:ShowToast("ButtonToast", {
AdditionalText = {`Execute {name}?`,`Eseguire {name}?`,`Thực thi {name}?`,`Executar {name}?`,`Jalankan {name}?`,`Выполнить {name}?`,`Ausführen {name}?`,`¿Ejecutar {name}?`,`Exécuter {name}?`,`执行{name}?`,`{name}を実行しますか?`,`تنفيذ {name}؟`,`{name} निष्पादित करें?`,`ดำเนินการ {name}?`},
AdditionalTitle = {"Execute","Esegui","Thực thi","Executar","Eksekusi","Выполнить","Ausführen","Ejecutar","Exécuter","执行","実行","تنفيذ","निष्पादित करें","ดำเนินการ"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
framework.execution:Execute(src)
end
})
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR PASTE BUTTON
Id = "EditorPasteButtonShadow",
BackgroundColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.815, .87),
Image = "rbxassetid://96112258106990",
Size = UDim2.fromScale(.112, .112),
AnchorPoint = Vector2.new(1, .5),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Id = "EditorPasteButton",
Image = "rbxassetid://105828625810947",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.7, .7),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorPasteButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end -- shouldnt happen
tab:SetSource(framework.utils.clipboard:Get())
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR COPY BUTTON
Id = "EditorCopyButtonShadow",
BackgroundColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.7, .87),
Image = "rbxassetid://96112258106990",
Size = UDim2.fromScale(.112, .112),
AnchorPoint = Vector2.new(1, .5),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Id = "EditorCopyButton",
Image = "rbxassetid://104350786247520",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.7, .7),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorCopyButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
framework.utils.clipboard:Set(tab:GetSource())
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR CLEAR BUTTON
Id = "EditorClearButtonShadow",
BackgroundColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.585, .87),
Image = "rbxassetid://96112258106990",
Size = UDim2.fromScale(.112, .112),
AnchorPoint = Vector2.new(1, .5),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1.125
}), ui:AddInstance("ImageButton", {
Id = "EditorClearButton",
Image = "rbxassetid://140071393343502",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.7, .7),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorClearButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
local name = tab:GetName()
utils:ShowToast("ButtonToast", {
AdditionalText = {`Clear {name}?`,`Cancellare {name}?`,`Xóa {name}?`,`Limpar {name}?`,`Bersihkan {name}?`,`Очистить {name}?`,`{name} löschen?`,`Borrar {name}?`,`Effacer {name}?`,`清除{name}?`,`{name}をクリアしますか?`,`مسح {name}?`,`{name} साफ़ करें?`,`ล้าง {name}?`},
AdditionalTitle = {"Clear editor","Pulire editor","Xóa trình soạn thảo","Limpar editor","Bersihkan editor","Очистить редактор","Editor löschen","Limpiar editor","Effacer l'éditeur","清除编辑器","エディタをクリア","مسح المحرر","संपादक साफ़ करें","ล้างตัวแก้ไข"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
tab:SetSource("")
end
})
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR SAVE & INFO BUTTON
Id = "EditorSaveButtonShadow",
Image = "rbxassetid://119555396926142",
BackgroundColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.92, .1),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.25, .25),
BackgroundTransparency = 1,
ZIndex = 99
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("ImageButton", {
Id = "EditorSaveButton",
Image = "rbxassetid://80105268646831",
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(.275, .275),
AnchorPoint = Vector2.new(.5,.5),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorSaveButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
if tab:GetData().isFile then
return utils:ShowPopup("LocalScriptInfo", tab:GetFile(), {})
end
tab:ToFile()
tabs:GetSaved("tabs") -- Call to scripthub browse
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}))), ui:AddInstance("ImageLabel", { -- EDITOR CONSOLE BUTTON
Id = "EditorConsoleButtonShadow",
Image = "rbxassetid://119555396926142",
BackgroundColor3 = Color3.fromHex("#F00"),
Position = UDim2.fromScale(.92, .25),
ImageColor3 = Color3.fromHex("#0F0"),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.25, .25),
BackgroundTransparency = 1,
ZIndex = 99,
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("ImageButton", {
Id = "EditorConsoleButton",
Image = "rbxassetid://116356073714133",
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(.275, .275),
AnchorPoint = Vector2.new(.5,.5),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("EditorConsoleButtonShadow").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local stgui = framework.protected:GetService("StarterGui")
stgui:SetCore("DevConsoleVisible", not stgui:GetCore("DevConsoleVisible"))
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
})))), ui:AddInstance("Frame", { -- EDITOR SIDEBAR
Id = "EditorSideBar",
Position = UDim2.fromScale(.97, .95),
AnchorPoint = Vector2.new(1, 1),
Size = UDim2.fromScale(.27, .8),
BackgroundTransparency = .3,
Tags = {"Colors_Secondary", "UI_WindowState"},
Colors_Secondary = {"BackgroundColor3"},
}, ui:AddInstance("TextLabel", {
Id = "CategoryTitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.075,.03),
Size = UDim2.fromScale(.85, .08),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Files","File","Tệp tin","Arquivos","Berkas","Файлы","Dateien","Archivos","Fichiers","文件","ファイル","ملفات","फ़ाइलें","ไฟล์"},
Tags = {"Colors_Text_Primary", "Fonts_Title", "Country_Code"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextBox", {
Id = "TabsSearchBox",
TextXAlignment = Enum.TextXAlignment.Left,
BackgroundColor3 = Color3.fromHex("FFF"),
Position = UDim2.fromScale(.5, .125),
Size = UDim2.fromScale(.85, .085),
AnchorPoint = Vector2.new(.5, 0),
BackgroundTransparency = .8,
ClearTextOnFocus = false,
TextScaled = true,
Text = "",
Country_Code_Placeholder = {"Search scripts...", "Cerca script...", "Tìm kiếm kịch bản...", "Pesquisar scripts...", "Cari skrip...", "Поиск сценариев...", "Skripte suchen...", "Buscar scripts...", "Rechercher des scripts...", "搜索脚本...", "スクリプトを検索...", "البحث عن السكربتات...", "स्क्रिप्ट खोजें...", "ค้นหาสคริปต์..."},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"},
FocusLost = framework.protected:GCProtect(function()
local tabs = framework.dependencies.editortabs
local query = ui:Get("TabsSearchBox").instance.Text
local valid = framework.utils.strings.gsub(query, "[%s]+", "") ~= ""
for _, tab in ipairs(tabs:GetTabs()) do
local instance = tab:GetData().instance
local name = tab:GetName()
instance.instance.Visible = (not valid) or
(framework.utils.strings.find(name, query) and true or false)
end
if valid then
return tabs:SearchSaved(query, "tabs") -- Call to scriphub search
end
return tabs:GetSaved("tabs") -- Call to scripthub browse
end)
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.25,0),
PaddingRight = UDim.new(.05, 0),
PaddingLeft = UDim.new(.075, 0),
PaddingTop = UDim.new(.25,0)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})), ui:AddInstance("TextButton", {
Id = "NewFileButton",
BackgroundColor3 = Color3.fromHex("FFF"),
Position = UDim2.fromScale(.075, .23),
Size = UDim2.fromScale(.225,.225),
BackgroundTransparency = .9,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("NewFileButton").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local editor = framework.utils.inputs.editors:Get("Main_Editor")
local cont = nil
if utils.tabsMode ~= "files" then
cont = { [utils.tabsMode] = true }
end
editor:AddTab(nil, "", cont)
end)
}, ui:AddInstance("ImageLabel", {
Image = "rbxassetid://112476312219988",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.25, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextButton", {
Id = "FavouriteButton",
BackgroundColor3 = Color3.fromHex("FFF"),
Position = UDim2.fromScale(.5, .23),
Size = UDim2.fromScale(.225, .225),
AnchorPoint = Vector2.new(.5,0),
BackgroundTransparency = .9,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("FavouriteButton").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if not tab then return end
local status = not (tab:GetProperty("favourite") or false)
tab:SetProperty("favourite", status)
ui:Get("FavouriteButtonImage").instance.Image = status
and framework.protected:ProtectAsset("rbxassetid://137934368112423") or "rbxassetid://80350699155696"
end)
}, ui:AddInstance("ImageLabel", {
Id = "FavouriteButtonImage",
Image = "rbxassetid://80350699155696",
ImageColor3 = Color3.fromHex("#FDC41B"),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.25, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextButton", {
Id = "DeleteFileButton",
BackgroundColor3 = Color3.fromHex("FFF"),
Position = UDim2.fromScale(.925, .23),
Size = UDim2.fromScale(.225, .225),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .9,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("DeleteFileButton").instance, {
AnimateSelf = true,
SkipTransparency = true
})
utils:ShowToast("ButtonToast", {
AdditionalText = {"Delete selected tab?","Eliminare scheda selezionata?","Xóa tab được chọn?","Excluir guia selecionada?","Hapus tab terpilih?","Удалить выбранную вкладку?","Ausgewählte Registerkarte löschen?","¿Eliminar pestaña seleccionada?","Supprimer l'onglet sélectionné ?","删除所选选项卡?","選択したタブを削除しますか?","حذف علامة التبويب المحددة؟","चयनित टैब हटाएं?","ลบแท็บที่เลือก?"},
AdditionalTitle = {"Delete","Elimina","Xóa","Excluir","Hapus","Удалить","Löschen","Eliminar","Supprimer","删除","削除","حذف","हटाएं","ลบ"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
local tabs = framework.dependencies.editortabs
local tab = tabs:GetSelection()
if tab then tab:Delete(true) end
end
})
end)
}, ui:AddInstance("ImageLabel", {
Image = "rbxassetid://80286816747552",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.25, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("ScrollingFrame", {
Id = "TabsList",
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(.5, .375),
CanvasSize = UDim2.fromScale(0, 0),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.85, .45),
BackgroundTransparency = 1,
ScrollBarThickness = 0
}, ui:AddInstance("UIListLayout", {
Id = "TabsLayout",
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Top,
FillDirection = Enum.FillDirection.Vertical,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(.025, 0)
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.1, 0)
})), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.1, 0)
}), ui:AddInstance("Frame", {
Id = "CategoryButtons",
Position = UDim2.fromScale(.5, .955),
AnchorPoint = Vector2.new(.5, 1),
Size = UDim2.fromScale(.85, .1),
BackgroundTransparency = 1,
ClipsDescendants = true
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
HorizontalFlex = Enum.UIFlexAlignment.SpaceBetween,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0, 0)
}), ui:AddComponent("CategoryButton", {
LongTitle = {"Files","Files","Tệp tin","Arquivos","Berkas","Файлы","Dateien","Archivos","Fichiers","文件","ファイル","ملفات","फ़ाइलें","ไฟล์"},
Title = {"Files","Files","Tệp","Arq","Ber","Фай","Dat","Arc","Fic","","ファ","ملف","फ़ा","ไฟ"},
BackgroundColor3 = Color3.fromHex("#58B2FF"),
Image = "rbxassetid://93716878735644",
Selected = true,
Callback = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("CategoryBtn_Files").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
utils.tabsMode = "files"
for _, tab in ipairs(tabs:GetTabs()) do
tab:GetData().instance.instance.Visible = true
end
framework.dependencies.editortabs:GetSaved("tabs")
end)
}), ui:AddComponent("CategoryButton", {
LongTitle = {"Favourites","Preferiti","Yêu thích","Favoritos","Favorit","Избранное","Favoriten","Favoritos","Favoris","收藏夹","お気に入り","المفضلة","पसंदीदा","รายการโปรด"},
Title = {"Favs","Prefs","Yêu","Fav","Fav","Изб","Fav","Fav","Fav","喜好","おき","مفض","पस","โปร"},
BackgroundColor3 = Color3.fromHex("#FDC41B"),
Image = "rbxassetid://80350699155696",
LayoutOrder = 1,
Callback = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("CategoryBtn_Favs").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
utils.tabsMode = "favourite"
for _, tab in ipairs(tabs:GetTabs()) do
local state = tab:GetProperty("favourite") and true or false
tab:GetData().instance.instance.Visible = state
end
framework.dependencies.editortabs:GetSavedByProperties({
favourite = {true}
}, "tabs")
end)
}), ui:AddComponent("CategoryButton", {
LongTitle = {"Auto-Execute","Auto-Esecuzione","Tự động thực thi","Auto-executar","Eksekusi Otomatis","Автовыполнение","Automatische Ausführung","Ejecución automática","Exécution automatique","自动执行","自動実行","التنفيذ التلقائي","स्वचालित निष्पादन","เรียกใช้โดยอัตโนมัติ"},
Title = {"Auto","Auto","Tự","Aut","Oto","Авт","Auto","Auto","Auto","","","تلق","स्व","อัต"},
BackgroundColor3 = Color3.fromHex("#1EC997"),
Image = "rbxassetid://100628992603432",
LayoutOrder = 2,
Callback = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("CategoryBtn_Auto").instance, {
AnimateSelf = true,
SkipTransparency = true
})
local tabs = framework.dependencies.editortabs
utils.tabsMode = "autoexecute"
for _, tab in ipairs(tabs:GetTabs()) do
local state = tab:GetProperty("autoexecute") and true or false
tab:GetData().instance.instance.Visible = state
end
framework.dependencies.editortabs:GetSavedByProperties({
autoexecute = {true}
}, "tabs")
end)
}))))
},
{ Name = "ScriptHub", Icon = "rbxassetid://137348934767807",
Content = ui:AddInstance("Frame", {Id = "ScriptHub"},
ui:AddInstance("Frame", {
Id = "ScriptsSwitch",
Position = UDim2.fromScale(.08, .065),
Size = UDim2.fromScale(.22, .085),
AnchorPoint = Vector2.new(0, .5),
BackgroundTransparency = .85
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0),
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.05, 0),
PaddingRight = UDim.new(.1, 0),
PaddingLeft = UDim.new(.1, 0),
PaddingTop = UDim.new(.05, 0)
}),
ui:AddInstance("TextButton", {
Id = "ScriptsSwitchButton",
Size = UDim2.fromScale(1,1),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"CloudScripts ☁️","ScriptsCloud ☁️","Kịch bản đám mây ☁️","ScriptsNaNuvem ☁️","Skrip Awan ☁️","Облачные скрипты ☁️","Cloud-Skripte ☁️","ScriptsEnLaNube ☁️","ScriptsCloud ☁️","云端脚本 ☁️","クラウドスクリプト ☁️","السكربتات السحابية ☁️","क्लाउड स्क्रिप्ट्स ☁️","สคริปต์คลาวด์ ☁️"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
if searchbox.loading then return end
local dropdown = ui:Get("ScriptsSwitchDropdown")
dropdown.instance.Visible = not dropdown.instance.Visible
end)
}, ui:AddInstance("UICorner", { CornerRadius = UDim.new(.5,0) })),
ui:AddInstance("Frame", {
Id = "ScriptsSwitchDropdown",
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(0,1),
BackgroundTransparency = 0.2,
Size = UDim2.fromScale(1,3),
Visible = false
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.15,0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.05,0),
PaddingRight = UDim.new(.05,0),
PaddingLeft = UDim.new(.05,0),
PaddingTop = UDim.new(.05,0)
}), ui:AddInstance("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0,4)
}),
-- CloudScripts ☁️
ui:AddInstance("TextButton", {
Id = "OptionCloudScripts",
Size = UDim2.fromScale(1, .33),
BackgroundTransparency = 1,
TextScaled = true,
LayoutOrder = 1,
ZIndex = 11,
Tags = {"Country_Code", "Colors_Text_Primary","Fonts_Body"},
Country_Code = {"CloudScripts ☁️","ScriptsCloud ☁️","Kịch bản đám mây ☁️","ScriptsNaNuvem ☁️","Skrip Awan ☁️","Облачные скрипты ☁️","Cloud-Skripte ☁️","ScriptsEnLaNube ☁️","ScriptsCloud ☁️","云端脚本 ☁️","クラウドスクリプト ☁️","السكربتات السحابية ☁️","क्लाउड स्क्रिप्ट्स ☁️","สคริปต์คลาวด์ ☁️"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
if searchbox.loading then return end
ui:Get("ScriptsSwitchButton").instance.Text = utils:Translate({"CloudScripts ☁️","ScriptsCloud ☁️","Kịch bản đám mây ☁️","ScriptsNaNuvem ☁️","Skrip Awan ☁️","Облачные скрипты ☁️","Cloud-Skripte ☁️","ScriptsEnLaNube ☁️","ScriptsCloud ☁️","云端脚本 ☁️","クラウドスクリプト ☁️","السكربتات السحابية ☁️","क्लाउड स्क्रिप्ट्स ☁️","สคริปต์คลาวด์ ☁️"})
ui:Get("ScriptsSwitchDropdown").instance.Visible = false
local headerText, gridSubtitle = ui:Get("ScriptHubHeader"), ui:Get("GridSubtitle")
local barFilter, gridFilter = ui:Get("BarFilter"), ui:Get("GridFilter")
local scriptBloxText, scriptBloxLogo = ui:Get("PoweredByText"), ui:Get("ScriptBloxLogo")
local newScript, newFolder = ui:Get("NewScriptButton"), ui:Get("NewFolderButton")
local backPath, nextPath, pathBar = ui:Get("BackPathButton"), ui:Get("NextPathButton"), ui:Get("PathBar")
local scriptsgrid, scriptslist = ui:Get("ScriptsGrid"), ui:Get("CloudBestScriptsBar")
headerText.instance.Text = utils:Translate({"Best Scripts","Migliori Scripts","Các kịch bản tốt nhất","Melhores scripts","Skrip Terbaik","Лучшие скрипты","Beste Skripte","Mejores scripts","Meilleurs scripts","最佳脚本","最高のスクリプト","أفضل السكربتات","सर्वश्रेष्ठ स्क्रिप्ट्स","สคริปต์ที่ดีที่สุด"})
searchbox.mode = "cloudscripts"
gridSubtitle.instance.Text = utils:Translate({"Explore categories","Esplora categorie","Khám phá các danh mục","Explorar categorias","Jelajahi kategori","Исследуйте категории","Kategorien erkunden","Explorar categorías","Explorer les catégories","浏览类别","カテゴリを探す","استكشف الفئات","श्रेणियों का अन्वेषण करें","สำรวจหมวดหมู่"})
scriptBloxLogo.instance.Image = framework.protected:ProtectAsset("rbxassetid://96600063364054")
scriptBloxText.instance.TextColor3 = Color3.fromHex("#8C7DFF")
searchbox.instance.Visible = true
--gridText.instance.Visible = true
barFilter.instance.Visible = true
gridFilter.instance.Visible = true
scriptBloxText.instance.Visible = true
scriptBloxLogo.instance.Visible = true
newScript.instance.Visible = false
newFolder.instance.Visible = false
backPath.instance.Visible = false
nextPath.instance.Visible = false
pathBar.instance.Visible = false
local cloudscripts = framework.dependencies.cloudscripts
local query = scriptsgrid.lastQuery
ui:Get("CloudBestScriptsBar"):ClearScripts()
for _, v in ipairs(ui:Get("ScriptsGrid").instance:GetChildren()) do
if not v:IsA("UIGridLayout") then v:Destroy() end
end
if query then query:Refresh() else cloudscripts:FetchFavourites("grid") end
query = scriptslist.lastQuery
if query then query:Refresh() else cloudscripts:FetchTrending("topbar") end
end)
}),
-- ServerSide 🌐
ui:AddInstance("TextButton", {
Id = "OptionServerSide",
Size = UDim2.fromScale(1, .33),
BackgroundTransparency = 1,
TextScaled = true,
LayoutOrder = 2,
ZIndex = 11,
Tags = {"Country_Code", "Colors_Text_Primary","Fonts_Body"},
Country_Code = {"Server Side 🌐","Lato Server 🌐","Phía máy chủ 🌐","Lado do Servidor 🌐","Sisi Server 🌐","Серверная сторона 🌐","Serverseitig 🌐","Lado del Servidor 🌐","Côté Serveur 🌐","服务器端 🌐","サーバー側 🌐","جانب الخادم 🌐","सर्वर साइड 🌐","ฝั่งเซิร์ฟเวอร์ 🌐"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
if searchbox.loading then return end
ui:Get("ScriptsSwitchButton").instance.Text = utils:Translate({"Server Side 🌐","Lato Server 🌐","Phía máy chủ 🌐","Lado do Servidor 🌐","Sisi Server 🌐","Серверная сторона 🌐","Serverseitig 🌐","Lado del Servidor 🌐","Côté Serveur 🌐","服务器端 🌐","サーバー側 🌐","جانب الخادم 🌐","सर्वर साइड 🌐","ฝั่งเซิร์ฟเวอร์ 🌐"})
ui:Get("ScriptsSwitchDropdown").instance.Visible = false
local headerText, gridSubtitle = ui:Get("ScriptHubHeader"), ui:Get("GridSubtitle")
local scriptBloxText, scriptBloxLogo = ui:Get("PoweredByText"), ui:Get("ScriptBloxLogo")
local newScript, newFolder = ui:Get("NewScriptButton"), ui:Get("NewFolderButton")
local barFilter, gridFilter = ui:Get("BarFilter"), ui:Get("GridFilter")
local backPath, nextPath, pathBar = ui:Get("BackPathButton"), ui:Get("NextPathButton"), ui:Get("PathBar")
headerText.instance.Text = utils:Translate({"Server Side","Lato Server","Phía máy chủ","Lado do Servidor","Sisi Server","Серверная сторона","Serverseitig","Lado del Servidor","Côté Serveur","服务器端","サーバー側","جانب الخادم","सर्वर साइड","ฝั่งเซิร์ฟเวอร์"})
searchbox.mode = "serverside"
gridSubtitle.instance.Text = utils:Translate({"Explore serversided games","Esplora i giochi lato server","Khám phá các trò chơi phía máy chủ","Explore jogos do lado do servidor","Jelajahi game sisi server","Исследуйте серверные игры","Erkunde serverseitige Spiele","Explora juegos del lado del servidor","Explorez les jeux côté serveur","探索服务器端游戏","サーバー側のゲームを探す","استكشف الألعاب الجانبية للخادم","सर्वर साइड गेम्स का अन्वेषण करें","สำรวจเกมฝั่งเซิร์ฟเวอร์"})
scriptBloxLogo.instance.Image = framework.protected:ProtectAsset("rbxassetid://96326191043043")
scriptBloxText.instance.TextColor3 = Color3.fromRGB(220,220,220)
scriptBloxText.instance.Visible = true
scriptBloxLogo.instance.Visible = true
gridFilter.instance.Visible = false
searchbox.instance.Visible = false
newScript.instance.Visible = false
newFolder.instance.Visible = false
barFilter.instance.Visible = false
backPath.instance.Visible = false
nextPath.instance.Visible = false
pathBar.instance.Visible = false
framework.dependencies.serverside:GetGames(1)
end)
}),
-- LocalScripts 📂
ui:AddInstance("TextButton", {
Id = "OptionLocalScripts",
Size = UDim2.fromScale(1, .33),
BackgroundTransparency = 1,
TextScaled = true,
LayoutOrder = 3,
ZIndex = 11,
Tags = {"Country_Code", "Colors_Text_Primary","Fonts_Body"},
Country_Code = {"LocalScripts 📂","ScriptLocali 📂","Kịch bản cục bộ 📂","ScriptsLocais 📂","Skrip Lokal 📂","Локальные скрипты 📂","Lokale Skripte 📂","ScriptsLocales 📂","ScriptsLocaux 📂","本地脚本 📂","ローカルスクリプト 📂","السكربتات المحلية 📂","स्थानीय स्क्रिप्ट्स 📂","สคริปต์ท้องถิ่น 📂"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
if searchbox.loading then return end
ui:Get("ScriptsSwitchButton").instance.Text = utils:Translate({"LocalScripts 📂","ScriptLocali 📂","Kịch bản cục bộ 📂","ScriptsLocais 📂","Skrip Lokal 📂","Локальные скрипты 📂","Lokale Skripte 📂","ScriptsLocales 📂","ScriptsLocaux 📂","本地脚本 📂","ローカルスクリプト 📂","السكربتات المحلية 📂","स्थानीय स्क्रिप्ट्स 📂","สคริปต์ท้องถิ่น 📂"})
ui:Get("ScriptsSwitchDropdown").instance.Visible = false
local headerText, gridSubtitle = ui:Get("ScriptHubHeader"), ui:Get("GridSubtitle")
local barFilter, gridFilter = ui:Get("BarFilter"), ui:Get("GridFilter")
local scriptBloxText, scriptBloxLogo = ui:Get("PoweredByText"), ui:Get("ScriptBloxLogo")
local newScript, newFolder = ui:Get("NewScriptButton"), ui:Get("NewFolderButton")
local backPath, nextPath, pathBar = ui:Get("BackPathButton"), ui:Get("NextPathButton"), ui:Get("PathBar")
headerText.instance.Text = utils:Translate({"Favourite Scripts","Script Preferiti","Các kịch bản yêu thích","Scripts favoritos","Skrip Favorit","Любимые скрипты","Lieblingsskripte","Scripts favoritos","Scripts favoris","最喜欢的脚本","お気に入りのスクリプト","السكربتات المفضلة","पसंदीदा स्क्रिप्ट्स","สคริปต์ที่ชื่นชอบ"})
searchbox.mode = "scripthub"
gridSubtitle.instance.Text = utils:Translate({"Explore your saved scripts","Esplora i tuoi script salvati","Khám phá các kịch bản đã lưu của bạn","Explore seus scripts salvos","Jelajahi skrip yang Anda simpan","Исследуйте свои сохраненные скрипты","Erkunde deine gespeicherten Skripte","Explora tus scripts guardados","Explorez vos scripts enregistrés","浏览您保存的脚本","保存したスクリプトを探す","استكشف السكربتات المحفوظة الخاصة بك","अपने सहेजे गए स्क्रिप्ट्स का अन्वेषण करें","สำรวจสคริปต์ที่คุณบันทึกไว้"})
barFilter.instance.Visible = false
gridFilter.instance.Visible = false
scriptBloxText.instance.Visible = false
scriptBloxLogo.instance.Visible = false
newScript.instance.Visible = true
newFolder.instance.Visible = true
backPath.instance.Visible = true
nextPath.instance.Visible = true
pathBar.instance.Visible = true
framework.dependencies.scripthub:Browse(nil, true, "scripthub")
end)
}))), ui:AddInstance("ScrollingFrame", {
Id = "ScriptHubScroll",
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(0, .14),
CanvasSize = UDim2.fromScale(0, 1.2),
Size = UDim2.fromScale(1, .835),
ScrollBarThickness = padding/3,
BackgroundTransparency = 1,
ClipsDescendants = true,
BorderSizePixel = 0,
ZIndex = -1,
Colors_Primary = {"ScrollBarImageColor3"},
Tags = {"Colors_Primary"}
},
--ui:AddInstance("UIListLayout", {
-- Id = "ScriptHubLayout",
-- HorizontalAlignment = Enum.HorizontalAlignment.Center,
-- VerticalAlignment = Enum.VerticalAlignment.Top,
-- FillDirection = Enum.FillDirection.Vertical,
-- SortOrder = Enum.SortOrder.LayoutOrder,
-- Padding = UDim.new(0, 0)
-- }),
ui:AddInstance("Frame", {
AutomaticSize = Enum.AutomaticSize.Y,
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("UIPadding",{
PaddingBottom = UDim.new(.15, 0),
PaddingRight = UDim.new(.03, 0),
PaddingLeft = UDim.new(.03, 0),
PaddingTop = UDim.new(0, 0)
}), ui:AddInstance("TextLabel", {
Id = "ScriptHubHeader",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .05),
Size = UDim2.fromScale(.3, .08),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black"},
Country_Code = {"Best Scripts","Migliori Scripts","Các kịch bản tốt nhất","Melhores scripts","Skrip Terbaik","Лучшие скрипты","Beste Skripte","Mejores scripts","Meilleurs scripts","最佳脚本","最高のスクリプト","أفضل السكربتات","सर्वश्रेष्ठ स्क्रिप्ट्स","สคริปต์ที่ดีที่สุด"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(.3, .045),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Let's explore","Esploriamo","Hãy khám phá","Vamos explorar","Mari jelajahi","Давайте исследовать","Lass uns erkunden","Vamos explorar","Explorons","让我们探索","探検しましょう","دعونا نستكشف","चलो अन्वेषण करें","มาสำรวจกัน"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddComponent("FilterSelector", {
Id = "BarFilter",
HorizontalAlignment = Enum.HorizontalAlignment.Left,
Position = UDim2.fromScale(0, .15),
Size = UDim2.fromScale(.5, .1),
Filters = {
{
Title = {"Popular","Popolari","Phổ biến","Populares","Populer","Популярные","Beliebt","Populares","Populaire","流行","人気","شائع","लोकप्रिय","ที่นิยม"},
Callback = framework.protected:GCProtect(function()
local scriptslist, searchbox = ui:Get("CloudBestScriptsBar"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
searchbox.mode = "cloudscripts"
local query = cloudscripts.newQuery(searchbox.instance.Text, {
verify = framework.enums.ScriptBloxVerify.Verified,
patch = framework.enums.ScriptBloxPatch.Unpatched,
search = framework.enums.ScriptBloxSearch.None,
sortBy = framework.enums.ScriptBloxSort.Views,
order = framework.enums.ScriptBloxOrder.Desc,
type = framework.enums.ScriptBloxType.None,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.Free
}, "topbar")
scriptslist.lastQuery = query
query:Fetch()
end)
},
{
Title = {"Newest","Nuovi","Mới nhất","Mais recentes","Terbaru","Новейшие","Neueste","Más recientes","Plus récents","最新","最新","الأحدث","नवीनतम","ใหม่ล่าสุด"},
Callback = framework.protected:GCProtect(function()
local scriptslist, searchbox = ui:Get("CloudBestScriptsBar"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
searchbox.mode = "cloudscripts"
local query = cloudscripts.newQuery(searchbox.instance.Text, {
verify = framework.enums.ScriptBloxVerify.Verified,
patch = framework.enums.ScriptBloxPatch.Unpatched,
sortBy = framework.enums.ScriptBloxSort.CreatedAt,
search = framework.enums.ScriptBloxSearch.None,
order = framework.enums.ScriptBloxOrder.Desc,
type = framework.enums.ScriptBloxType.None,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.Free
}, "topbar")
scriptslist.lastQuery = query
query:Fetch()
end)
},
{
Title = {"Trending","Evidenza","Xu hướng","Tendências","Sedang Tren","Популярное","Trend","Tendencias","Tendance","流行","トレンド","شائع","रुझान","แนวโน้ม"},
Callback = framework.protected:GCProtect(function()
local scriptslist, searchbox = ui:Get("CloudBestScriptsBar"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
searchbox.mode = "cloudscripts"
scriptslist.lastQuery = nil
cloudscripts:FetchTrending("topbar")
end)
}
}
}), ui:AddInstance("ImageLabel", {
Id = "ScriptBloxLogo",
Image = "rbxassetid://96600063364054",
Position = UDim2.fromScale(1, 0),
Size = UDim2.fromScale(.15, .15),
AnchorPoint = Vector2.new(1, 0),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 2.098
})), ui:AddInstance("TextLabel", {
Id = "PoweredByText",
TextYAlignment = Enum.TextYAlignment.Center,
TextXAlignment = Enum.TextXAlignment.Right,
TextColor3 = Color3.fromHex("#8C7DFF"),
Position = UDim2.fromScale(.85, .075),
AnchorPoint = Vector2.new(1, .5),
Size = UDim2.fromScale(.13, .1),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Powered by:", "Fornito da:", "Cung cấp bởi:", "Desenvolvido por:", "Didukung oleh:", "Работает на:", "Bereitgestellt von:", "Desarrollado por:", "Propulsé par:", "提供支持:", "提供:", "بدعم من:", "के द्वारा संचालित:", "ขับเคลื่อนโดย:"},
Tags = {"Country_Code", "Fonts_Heading"}
}), ui:AddInstance("Frame",
{
AutomaticSize = Enum.AutomaticSize.X,
Position = UDim2.fromScale(1, .025),
Size = UDim2.fromScale(0.5, .11),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = 1,
}, ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
HorizontalFlex = Enum.UIFlexAlignment.SpaceEvenly,
VerticalFlex = Enum.UIFlexAlignment.Fill
}), ui:AddInstance("TextButton", {
Id = "NewScriptButton",
BackgroundColor3 = Color3.fromHex("#2B5780"),
AutomaticSize = Enum.AutomaticSize.X,
Position = UDim2.fromScale(1, .025),
Size = UDim2.fromScale(0, .11),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .5,
Visible = false,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("NewScriptButton").instance, {
AnimateSelf = true,
SkipTransparency = true
})
utils:ShowToast("InputToast", {
PlaceholderText = {"Script name","Nome script","Tên kịch bản","Nome do script","Nama skrip","Имя скрипта","Skriptname","Nombre del script","Nom du script","脚本名称","スクリプト名","اسم البرنامج النصي","स्क्रिप्ट का नाम","ชื่อสคริปต์"},
AdditionalText = {"Create script","Creazione script","Tạo kịch bản","Criar script","Buat skrip","Создать сценарий","Skript erstellen","Crear script","Créer un script","创建脚本","スクリプトを作成","إنشاء نص","स्क्रिप्ट बनाएं","สร้างสคริปต์"},
Callback = function(res: any)
res = framework.utils.strings.gsub(res or "", ".lua", "")
res = framework.utils.strings.gsub(res or "", "[./]", "")
if res == "" then return end
local scripthub = framework.dependencies.scripthub
scripthub:NewFile(res, "", nil, nil, nil, nil, true)
scripthub:Browse(nil, true, "scripthub")
end
})
end)
}, ui:AddInstance("UIPadding", {
PaddingLeft = UDim.new(.075, 0)
}), ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
HorizontalFlex = Enum.UIFlexAlignment.SpaceEvenly
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://112476312219988",
Position = UDim2.fromScale(.1, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.625, .5),
AutomaticSize = Enum.AutomaticSize.X,
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(0, .55),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Country_Code = {"New script", "Nuovo script", "Kịch bản mới", "Novo script", "Skrip baru", "Новый сценарий", "Neues Skript", "Nuevo script", "Nouveau script", "新脚本", "新しいスクリプト", "نص جديد", "नया स्क्रिप्ट", "สคริปต์ใหม่"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})), ui:AddInstance("TextButton", {
Id = "NewFolderButton",
BackgroundColor3 = Color3.fromHex("#FDC41B"),
Position = UDim2.fromScale(.71, .025),
AutomaticSize = Enum.AutomaticSize.X,
Size = UDim2.fromScale(0, .11),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .6,
Visible = false,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:AnimateCascade(ui:Get("NewFolderButton").instance, {
AnimateSelf = true,
SkipTransparency = true
})
utils:ShowToast("InputToast", {
PlaceholderText = {"Folder name","Nome cartella","Tên thư mục","Nome da pasta","Nama folder","Имя папки","Ordnername","Nombre de carpeta","Nom du dossier","文件夹名称","フォルダー名","اسم المجلد","फ़ोल्डर का नाम","ชื่อโฟลเดอร์"},
AdditionalText = {"Create Folder","Creazione Cartella","Tạo thư mục","Criar pasta","Buat folder","Создать папку","Ordner erstellen","Crear carpeta","Créer un dossier","创建文件夹","フォルダーを作成","إنشاء مجلد","फ़ोल्डर बनाएँ","สร้างโฟลเดอร์"},
Callback = function(res: any)
res = framework.utils.strings.gsub(res or "", "[./]", "")
if res == "" then return end
local scripthub = framework.dependencies.scripthub
scripthub:NewFolder(res, nil, true)
scripthub:Browse(nil, true, "scripthub")
end
})
end)
}, ui:AddInstance("ImageLabel", {
Image = "rbxassetid://112476312219988",
Position = UDim2.fromScale(.1, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.625, .5),
AutomaticSize = Enum.AutomaticSize.X,
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(0, .55),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Country_Code = {"New folder","Nuova cartella","Thư mục mới","Nova pasta","Folder baru","Новая папка","Neuer Ordner","Nueva carpeta","Nouveau dossier","新建文件夹","新しいフォルダー","مجلد جديد","नया फ़ोल्डर","โฟลเดอร์ใหม่"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
}), ui:AddInstance("UIPadding", {
PaddingLeft = UDim.new(.075, 0)
}), ui:AddInstance("UIListLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Center,
FillDirection = Enum.FillDirection.Horizontal,
HorizontalFlex = Enum.UIFlexAlignment.SpaceEvenly
}))), ui:AddInstance("TextBox", {
Id = "CloudSearchBox",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(1, .175),
Size = UDim2.fromScale(.25, .095),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .5,
ClearTextOnFocus = false,
TextScaled = true,
Text = "",
FocusLost = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
local keywords = searchbox.instance.Text
if utils.cloudKeyword == keywords then return end
utils.cloudKeyword = keywords
--searchbox.mode = "scripthub"
if searchbox.mode == "scripthub" then
local scripthub = framework.dependencies.scripthub
return scripthub:Search(keywords, nil, "scripthub")
end
local scriptsgrid, scriptslist = ui:Get("ScriptsGrid"), ui:Get("CloudBestScriptsBar")
local cloudscripts = framework.dependencies.cloudscripts
local query = scriptsgrid.lastQuery
if query then
query = cloudscripts.newQuery(keywords, query:GetFilters(), "grid")
scriptsgrid.lastQuery = query
query:Fetch()
end
query = scriptslist.lastQuery
if query then
query = cloudscripts.newQuery(keywords, query:GetFilters(), "topbar")
scriptslist.lastQuery = query
query:Fetch()
end
end),
Tags = {"Country_Code", "Colors_Secondary", "Colors_Text_Primary", "Fonts_Heading"},
Country_Code_Placeholder = {"Search...", "Cerca...", "Tìm kiếm...", "Pesquisar...", "Cari...", "Поиск...", "Suchen...", "Buscar...", "Rechercher...", "搜索...", "検索...", "بحث...", "खोजें...", "ค้นหา..."},
Colors_Secondary = {"BackgroundColor3"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.25,0),
PaddingRight = UDim.new(.05, 0),
PaddingLeft = UDim.new(.075, 0),
PaddingTop = UDim.new(.25, 0)
})), ui:AddComponent("ContentBar", {
Id = "CloudBestScriptsBar",
Position = UDim2.fromScale(.5, .3),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.85, .5),
OnLoad = framework.protected:GCProtect(function()
local searchbox = ui:Get("CloudSearchBox")
if searchbox.mode == "scripthub" or searchbox.loading then return end
local scriptslist = ui:Get("CloudBestScriptsBar")
local query = scriptslist.lastQuery
if query then query:Fetch() end
end)
}), ui:AddInstance("TextLabel", {
Id = "GridFilterText",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .9),
Size = UDim2.fromScale(.3, .08),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Black"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "GridSubtitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .85),
Size = UDim2.fromScale(.3, .045),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Explore categories","Esplora categorie","Khám phá danh mục","Explorar categorias","Jelajahi kategori","Изучить категории","Kategorien erkunden","Explorar categorías","Explorer les catégories","探索类别","カテゴリを探索","استكشاف الفئات","श्रेणियों का अन्वेषण करें","สำรวจหมวดหมู่"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddComponent("FilterSelector", {
Id = "GridFilter",
HorizontalAlignment = Enum.HorizontalAlignment.Right,
Position = UDim2.fromScale(1, .89),
AnchorPoint = Vector2.new(1, 0),
Size = UDim2.fromScale(.5, .1),
Filters = {
{
Title = {"All","Tutti","Tất cả","Todos","Semua","Все","Alle","Todos","Tous","全部","すべて","الكل","सभी","ทั้งหมด"},
Callback = framework.protected:GCProtect(function(filter: string)
local scriptsgrid, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
ui:Get("GridFilterText").instance.Text = filter
searchbox.mode = "cloudscripts"
local query = cloudscripts.newQuery(searchbox.instance.Text, {
patch = framework.enums.ScriptBloxPatch.Unpatched,
search = framework.enums.ScriptBloxSearch.None,
verify = framework.enums.ScriptBloxVerify.None,
sortBy = framework.enums.ScriptBloxSort.Views,
order = framework.enums.ScriptBloxOrder.None,
type = framework.enums.ScriptBloxType.None,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.None
}, "grid")
scriptsgrid.lastQuery = query
query:Fetch()
end)
},
{
Title = {"Verified","Verificati","Đã xác minh","Verificado","Terverifikasi","Проверено","Verifiziert","Verificado","Vérifié","已验证","確認済み","تم التحقق","सत्यापित","ได้รับการยืนยัน"},
Callback = framework.protected:GCProtect(function(filter: string)
local scriptsgrid, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
ui:Get("GridFilterText").instance.Text = filter
searchbox.mode = "cloudscripts"
local query = cloudscripts.newQuery(searchbox.instance.Text, {
verify = framework.enums.ScriptBloxVerify.Verified,
patch = framework.enums.ScriptBloxPatch.Unpatched,
search = framework.enums.ScriptBloxSearch.None,
sortBy = framework.enums.ScriptBloxSort.Views,
order = framework.enums.ScriptBloxOrder.None,
type = framework.enums.ScriptBloxType.None,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.None
}, "grid")
scriptsgrid.lastQuery = query
query:Fetch()
end)
},
{
Title = {"Suggested","Consigliati","Được đề xuất","Sugeridos","Disarankan","Рекомендуемые","Vorgeschlagen","Sugeridos","Suggérés","推荐","おすすめ","مقترح","अनुशंसित","แนะนำ"},
Callback = framework.protected:GCProtect(function(filter: string)
local scriptsgrid, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
ui:Get("GridFilterText").instance.Text = filter
searchbox.mode = "cloudscripts"
local query = cloudscripts.newQuery(searchbox.instance.Text, {
verify = framework.enums.ScriptBloxVerify.Verified,
patch = framework.enums.ScriptBloxPatch.Unpatched,
search = framework.enums.ScriptBloxSearch.None,
type = framework.enums.ScriptBloxType.Specific,
sortBy = framework.enums.ScriptBloxSort.Views,
order = framework.enums.ScriptBloxOrder.None,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.None
}, "grid")
scriptsgrid.lastQuery = query
query:Fetch()
end)
},
{
Title = {"Favourites","Preferiti","Yêu thích","Favoritos","Favorit","Избранное","Favoriten","Favoritos","Favoris","收藏夹","お気に入り","المفضلة","पसंदीदा","รายการโปรด"},
Callback = framework.protected:GCProtect(function(filter: string)
local scriptsgrid, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudSearchBox")
local cloudscripts = framework.dependencies.cloudscripts
ui:Get("GridFilterText").instance.Text = filter
searchbox.mode = "cloudscripts"
scriptsgrid.lastQuery = nil
cloudscripts:FetchFavourites("grid")
end)
}
}
}), ui:AddInstance("TextButton", {
Id = "BackPathButton",
Position = UDim2.fromScale(0, .9),
Size = UDim2.fromScale(.065, .1),
BackgroundTransparency = 1,
TextScaled = true,
Visible = false,
Text = "",
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
framework.dependencies.scripthub:BrowsePrevious("scripthub")
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1,
})), ui:AddInstance("TextButton", {
Id = "NextPathButton",
Position = UDim2.fromScale(.05, .9),
Size = UDim2.fromScale(.065, .1),
BackgroundTransparency = 1,
TextScaled = true,
Visible = false,
Text = "",
Tags = {"Colors_Text_Primary", "Fonts_Title"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
framework.dependencies.scripthub:BrowseNext("scripthub")
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1,
})), ui:AddComponent("HistorySelector", {
Id = "PathBar",
Position = UDim2.fromScale(1, .89),
Size = UDim2.fromScale(.8, .115),
AnchorPoint = Vector2.new(1, 0),
Visible = false,
Padding = 6
})), ui:AddInstance("Frame", {
Id = "ScriptsGrid",
Position = UDim2.fromScale(0, .88),
AutomaticSize = Enum.AutomaticSize.Y,
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ClipsDescendants = false,
LayoutOrder = 1
}, ui:AddInstance("UIGridLayout", {
Id = "ScriptsGridLayout",
HorizontalAlignment = Enum.HorizontalAlignment.Center,
CellPadding = UDim2.fromOffset(padding*3, padding*3), -- UDim2.fromScale(.02, 0),
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
CellSize = UDim2.fromScale(.3, 0) -- .3
}))))
},
{ Name = "ArceusIntelligence", Icon = "rbxassetid://95922875106065",
Content = ui:AddInstance("Frame", {},
ui:AddInstance("ImageLabel", {
Id = "AITipsPanelBackground",
Position = UDim2.fromScale(.03, .15),
Size = UDim2.fromScale(.55, .58),
BackgroundTransparency = 1,
Colors_Secondary = {"BackgroundColor3"},
Tags = {"Colors_Secondary"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.1, 0)
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://105134483657581", -- AI Shadow
AnchorPoint = Vector2.new(.5, .5),
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(1.35,1.4),
BackgroundTransparency = 1,
ZIndex = -1
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Right,
TextYAlignment = Enum.TextYAlignment.Top,
Position = UDim2.fromScale(.95, .035),
Size = UDim2.fromScale(.45, .055),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = 1,
TextScaled = true,
ZIndex = 3,
Country_Code = {"Arceus Intelligence"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Caption"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "AITipsSubtitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.05, .09),
Size = UDim2.fromScale(.9, .065),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Heading"},
Country_Code = {"ARCY TIPS","SUGGERIMENTI ARCY","MẸO ARCY","DICAS ARCY","TIP ARCY","СОВЕТЫ ARCY","ARCY-TIPPS","CONSEJOS ARCY","ASTUCES ARCY","ARCY 提示","ARCY のヒント","نصائح ARCY","ARCY युक्तियाँ","เคล็ดลับ ARCY"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "AITipsTitle",
Position = UDim2.fromScale(.05, .165),
Size = UDim2.fromScale(.9, .09),
BackgroundTransparency = 1,
TextScaled = true,
TextXAlignment = Enum.TextXAlignment.Left,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Country_Code = {"Change your language","Cambia lingua","Thay đổi ngôn ngữ","Mudar seu idioma","Ubah bahasa Anda","Изменить язык","Sprache ändern","Cambiar idioma","Changer de langue","更改语言","言語を変更する","غير لغتك","अपनी भाषा बदलें","เปลี่ยนภาษาของคุณ"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "AITipsText",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.05, .275),
Size = UDim2.fromScale(.9, .4),
BackgroundTransparency = 1,
TextTransparency = .35,
TextScaled = true,
Country_Code = {"Arceus Intelligence allows you to translate your interface instantly using AI, ensuring a seamless experience in any language! 🌍✨","Arceus Intelligence ti permette di tradurre immediatamente la tua interfaccia utilizzando l'IA, garantendo un'esperienza fluida in qualsiasi lingua! 🌍✨","Arceus Intelligence cho phép bạn dịch giao diện ngay lập tức bằng AI, đảm bảo trải nghiệm mượt mà trong bất kỳ ngôn ngữ nào! 🌍✨","O Arceus Intelligence permite que você traduza sua interface instantaneamente usando IA, garantindo uma experiência perfeita em qualquer idioma! 🌍✨","Arceus Intelligence memungkinkan Anda menerjemahkan antarmuka secara instan menggunakan AI, memastikan pengalaman yang mulus dalam bahasa apa pun! 🌍✨","Arceus Intelligence позволяет мгновенно переводить интерфейс с помощью ИИ, обеспечивая бесшовный опыт на любом языке! 🌍✨","Arceus Intelligence ermöglicht es Ihnen, Ihre Oberfläche mit KI sofort zu übersetzen und so ein nahtloses Erlebnis in jeder Sprache zu gewährleisten! 🌍✨","Arceus Intelligence te permite traducir tu interfaz al instante usando IA, ¡asegurando una experiencia fluida en cualquier idioma! 🌍✨","Arceus Intelligence vous permet de traduire instantanément votre interface grâce à l'IA, garantissant une expérience fluide dans n'importe quelle langue ! 🌍✨","Arceus Intelligence 让您能够使用 AI 即时翻译界面,确保在任何语言下都能获得无缝体验!🌍✨","Arceus Intelligence を使えば、AI でインターフェースを瞬時に翻訳でき、どの言語でもシームレスな体験が可能になります!🌍✨","تتيح لك Arceus Intelligence ترجمة واجهتك على الفور باستخدام الذكاء الاصطناعي، مما يضمن تجربة سلسة بأي لغة! 🌍✨","Arceus Intelligence आपको AI का उपयोग करके तुरंत आपका इंटरफ़ेस अनुवादित करने की अनुमति देता है, किसी भी भाषा में सहज अनुभव सुनिश्चित करता है! 🌍✨","Arceus Intelligence ช่วยให้คุณแปลอินเทอร์เฟซของคุณได้ทันทีด้วย AI เพื่อให้แน่ใจว่าคุณจะได้รับประสบการณ์ที่ราบรื่นในทุกภาษา! 🌍✨"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("ScrollingFrame", {
Id = "LanguagePicker",
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("#000"),
Position = UDim2.fromScale(.05, .275),
CanvasSize = UDim2.fromScale(0, 1),
ScrollBarThickness = padding/3,
Size = UDim2.fromScale(.9, .4),
BackgroundTransparency = 1,
ClipsDescendants = true,
BorderSizePixel = 0,
Visible = false,
ZIndex = 10
}, ui:AddInstance("UIGridLayout", {
CellPadding = UDim2.new(0, padding, 0, padding * 1.5),
HorizontalAlignment = Enum.HorizontalAlignment.Left,
VerticalAlignment = Enum.VerticalAlignment.Top,
FillDirection = Enum.FillDirection.Horizontal,
SortOrder = Enum.SortOrder.LayoutOrder,
CellSize = UDim2.new(.475, 0, .3, 0),
FillDirectionMaxCells = 2
}), framework.protected:GCProtect(function()
local langs = {
{ Code = "EN", Gradient = { "#00247D", "#FFFFFF", "#CF142B" }, Label = {
"English","Inglese","Tiếng Anh","Inglês","Inggris","Английский",
"Englisch","Inglés","Anglais","英语","英語","الإنجليزية",
"अंग्रेज़ी","อังกฤษ"
} },
{ Code = "IT", Gradient = { "#008C45", "#F4F5F0", "#CD212A" }, Label = {
"Italian","Italiano","Tiếng Ý","Italiano","Bahasa Italia",
"Итальянский","Italienisch","Italiano","Italien","意大利语",
"イタリア語","الإيطالية","इतालवी","ภาษาอิตาลี"
} },
{ Code = "VI", Gradient = { "#DA251D", "#FFCD00", "#DA251D" }, Label = {
"Vietnamese","Vietnamita","Tiếng Việt","Vietnamita","Bahasa Vietnam",
"Вьетнамский","Vietnamesisch","Vietnamita","Vietnamien","越南语",
"ベトナム語","الفيتنامية","वियतनामी","ภาษาเวียดนาม"
} },
{ Code = "PT", Gradient = { "#006600", "#FF0000", "#FFCC00" }, Label = {
"Portuguese","Portoghese","Tiếng Bồ Đào Nha","Português","Bahasa Portugis",
"Португальский","Portugiesisch","Portugués","Portugais","葡萄牙语",
"ポルトガル語","البرتغالية","पुर्तगाली","ภาษาโปรตุเกส"
} },
{ Code = "ID", Gradient = { "#FF0000", "#FFFFFF", "#FF0000" }, Label = {
"Indonesian","Indonesiano","Tiếng Indonesia","Indonésio","Bahasa Indonesia",
"Индонезийский","Indonesisch","Indonesio","Indonésien","印度尼西亚语",
"インドネシア語","الإندونيسية","इंडोनेशियाई","ภาษาอินโดนีเซีย"
} },
{ Code = "RU", Gradient = { "#FFFFFF", "#0033A0", "#D52B1E" }, Label = {
"Russian","Russo","Tiếng Nga","Russo","Bahasa Rusia","Русский",
"Russisch","Ruso","Russe","俄语","ロシア語","الروسية","रूसी","ภาษารัสเซีย"
} },
{ Code = "DE", Gradient = { "#000000", "#DD0000", "#FFCE00" }, Label = {
"German","Tedesco","Tiếng Đức","Alemão","Bahasa Jerman","Немецкий",
"Deutsch","Alemán","Allemand","德语","ドイツ語","الألمانية","जर्मन","ภาษาเยอรมัน"
} },
{ Code = "ES", Gradient = { "#AA151B", "#F1BF00", "#AA151B" }, Label = {
"Spanish","Spagnolo","Tiếng Tây Ban Nha","Espanhol","Bahasa Spanyol",
"Испанский","Spanisch","Español","Espagnol","西班牙语","スペイン語","الإسبانية",
"स्पेनिश","ภาษาสเปน"
} },
{ Code = "FR", Gradient = { "#0055A4", "#FFFFFF", "#EF4135" }, Label = {
"French","Francese","Tiếng Pháp","Francês","Bahasa Prancis","Французский",
"Französisch","Francés","Français","法语","フランス語","الفرنسية","फ्रांसीसी","ภาษาฝรั่งเศส"
} },
{ Code = "ZH", Gradient = { "#DE2910", "#FFDE00", "#DE2910" }, Label = {
"Chinese","Cinese","Tiếng Trung","Chinês","Bahasa Mandarin","Китайский",
"Chinesisch","Chino","Chinois","中文","中国語","الصينية","चीनी","ภาษาจีน"
} },
{ Code = "JA", Gradient = { "#FFFFFF", "#BC002D", "#FFFFFF" }, Label = {
"Japanese","Giapponese","Tiếng Nhật","Japonês","Bahasa Jepang","Японский",
"Japanisch","Japonés","Japonais","日语","日本語","اليابانية","जापानी","ภาษาญี่ปุ่น"
} },
{ Code = "AR", Gradient = { "#007A3D", "#FFFFFF", "#CE1126" }, Label = {
"Arabic","Arabo","Tiếng Ả Rập","Árabe","Bahasa Arab","Арабский",
"Arabisch","Árabe","Arabe","阿拉伯语","アラビア語","العربية","अरबी","ภาษาอาหรับ"
} },
{ Code = "HI", Gradient = { "#FF9933", "#FFFFFF", "#138808" }, Label = {
"Hindi","Hindi","Tiếng Hin-đi","Hindi","Bahasa Hindi","Хинди",
"Hindi","Hindi","Hindi","印地语","ヒンディー語","الهندية","हिन्दी","ภาษาฮินดี"
} },
{ Code = "TH", Gradient = { "#A51931", "#FFFFFF", "#2D2A4A" }, Label = {
"Thai","Thailandese","Tiếng Thái","Tailandês","Bahasa Thailand","Тайский",
"Thailändisch","Tailandés","Thaï","泰语","タイ語","التايلاندية","थाई","ไทย"
} },
}
local btns = {}
for _, info in ipairs(langs) do
local gradientColors = info.Gradient or { "#AAAAAA", "#888888", "#666666" }
framework.utils.tables.insert(btns, ui:AddInstance("TextButton", {
Id = `LangBtn_{info.Code}`,
Size = UDim2.fromScale(.4, .07),
BackgroundTransparency = .5,
Country_Code = info.Label,
TextTransparency = .1,
Text = info.Label[1],
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black"},
Colors_Text_Primary = {"TextColor3"},
MouseButton1Click = framework.protected:GCProtect(function()
local aiBtn = ui:Get("AITipsButton")
aiBtn.CountryCode = info.Code
aiBtn.instance.Text = utils:Translate({`Translate to {info.Code}`,`Traduci in {info.Code}`,`Dịch sang {info.Code}`,`Traduzir para {info.Code}`,`Terjemahkan ke {info.Code}`,`Перевести на {info.Code}`,`Ins {info.Code} übersetzen`,`Traducir a {info.Code}`,`Traduire en {info.Code}`,`翻译为 {info.Code}`,`{info.Code} に翻訳する`,`ترجمة إلى {info.Code}`,`{info.Code} में अनुवाद करें`,`แปลเป็น {info.Code}`})
aiBtn.instance.BackgroundColor3 = Color3.fromHex("#FFF")
aiBtn.instance.TextTransparency = 0
aiBtn.instance.Active = true
end)
}, ui:AddInstance("UIPadding", {
PaddingTop = UDim.new(.2, 0),
PaddingBottom = UDim.new(.2, 0)
}), ui:AddInstance("UIGradient", {
Rotation = 30,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex(gradientColors[1])),
ColorSequenceKeypoint.new(.5, Color3.fromHex(gradientColors[2])),
ColorSequenceKeypoint.new(1, Color3.fromHex(gradientColors[3])),
})
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.4, 0)
})))
end
return btns
end)), ui:AddInstance("TextButton", {
Id = "AITipsButton",
Position = UDim2.fromScale(.5, .9),
TextColor3 = Color3.fromHex("#FFF"),
AnchorPoint = Vector2.new(.5, 1),
Size = UDim2.fromScale(.9, .15),
BackgroundTransparency = .75,
TextTransparency = .1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black"},
Country_Code = {"Translate","Traduci","Dịch","Traduzir","Terjemahkan","Перевести","Übersetzen","Traducir","Traduire","翻译","翻訳する","ترجم","अनुवाद करें","แปล"},
-- Colors_Text_Primary = {"TextColor3"}
MouseButton1Click = framework.protected:GCProtect(function()
local languagePicker = ui:Get("LanguagePicker").instance
local aiBtn, aiText = ui:Get("AITipsButton"), ui:Get("AITipsText")
if aiBtn.selectable and aiBtn.instance.Active then
utils:ShowToast("ButtonToast", {
AdditionalText = {"Translate?","Tradurre?","Dịch?","Traduzir?","Terjemahkan?","Перевести?","Übersetzen?","Traducir?","Traduire?","翻译?","翻訳する?","ترجم؟","अनुवाद करें?","แปล?"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
framework.settings:SetSetting("Country_Code", aiBtn.CountryCode)
aiText:Tween(tweens.default, {
TextTransparency = 0
})
aiBtn.instance.Text = utils:Translate({"Translate","Traduci","Dịch","Traduzir","Terjemahkan","Перевести","Übersetzen","Traducir","Traduire","翻译","翻訳する","ترجم","अनुवाद करें","แปล"})
-- Refresh static translations
local isScripthub = ui:Get("CloudSearchBox").mode == "scripthub"
ui:Get("ScriptsSwitchButton").instance.Text = isScripthub
and utils:Translate({"LocalScripts 📂","Script locali 📂","Kịch bản cục bộ 📂","Scripts locais 📂","Skrip Lokal 📂","Локальные скрипты 📂","Lokale Skripte 📂","Scripts locales 📂","Scripts locaux 📂","本地脚本 📂","ローカルスクリプト 📂","السكريبتات المحلية 📂","स्थानीय स्क्रिप्ट 📂","สคริปต์ภายในเครื่อง 📂"})
or utils:Translate({"CloudScripts ☁️","ScriptCloud ☁️","Kịch bản đám mây ☁️","Scripts na nuvem ☁️","Skrip Awan ☁️","Облачные скрипты ☁️","CloudSkripte ☁️","Scripts en la nube ☁️","Scripts Cloud ☁️","云脚本 ☁️","クラウドスクリプト ☁️","سكريبتات السحابة ☁️","क्लाउडस्क्रिप्ट्स ☁️","สคริปต์คลาวด์ ☁️"})
framework.dependencies.scripthub:Browse(nil, true, "scripthub")
--framework.dependencies.editortabs:GetSaved("tabs")
if not isScripthub then
ui:Get("GridFilter"):Refresh()
--ui:Get("BarFilter"):Refresh()
end
aiText.instance.Visible = true
languagePicker.Visible = false
aiBtn.selectable = false
end
})
return
else
utils:AnimateCascade(aiBtn, {
SkipTransparency = true,
ScaleDirection = "In",
ScaleCascade = true,
AnimateSelf = true
})
end
aiText:Tween(tweens.default, {
TextTransparency = 1
})
task.delay(1, function()
aiText.instance.Visible = false
end)
aiBtn.instance.Text = utils:Translate({"Select a language","Seleziona la lingua","Chọn ngôn ngữ","Selecione um idioma","Pilih bahasa","Выберите язык","Sprache auswählen","Selecciona un idioma","Sélectionnez une langue","选择语言","言語を選択","اختر لغة","एक भाषा चुनें","เลือกภาษา"})
languagePicker.Visible = true
aiBtn.selectable = true
aiBtn.instance.BackgroundColor3 = Color3.fromHex("#000")
aiBtn.instance.TextTransparency = .5
utils:AnimateCascade(languagePicker)
aiBtn.instance.Active = false
end)
}, ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.2, 0),
PaddingTop = UDim.new(.2, 0)
}), ui:AddInstance("UIGradient", {
Rotation = 30,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FF0000")),
ColorSequenceKeypoint.new(.4, Color3.fromHex("#FF3869")),
ColorSequenceKeypoint.new(.7, Color3.fromHex("#F473EC")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#15A6FE"))
})
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new (.4,0)
}))), ui:AddInstance("Frame", {
Id = "AIPanelBackground2",
BackgroundColor3 = Color3.fromRGB(255, 255, 255),
Position = UDim2.fromScale(.03, .75),
Size = UDim2.fromScale(.55, .2),
BackgroundTransparency = .375,
ClipsDescendants = true,
Tags = {"Colors_Secondary"}
}, ui:AddInstance("UIGradient", {
Rotation = 10,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FF0000")),
ColorSequenceKeypoint.new(.4, Color3.fromHex("#FF3869")),
ColorSequenceKeypoint.new(.70, Color3.fromHex("#F473EC")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#15A6FE"))
})
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.3, 0)
}), ui: AddInstance("ImageButton", {
Id = "AIPlayerBackgroundOverlay",
ImageColor3 = Color3.fromHex("#000"),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ZIndex = 30,
MouseButton1Click = framework.protected:GCProtect(function()
utils:ShowToast("InputToast", {
PlaceholderText = {"Play music","Ascolta musica","Phát nhạc","Ouvir música","Putar musik","Воспроизвести музыку","Musik abspielen","Reproducir música","Écouter de la musique","播放音乐","音楽を再生","تشغيل الموسيقى","संगीत चलाएँ","เล่นเพลง"},
AdditionalText = {"Song id...", "Id musica...", "Id bài hát...", "Id da música...", "Id lagu...", "Id песни...", "Song-ID...", "Id de canción...", "Id de la chanson...", "歌曲ID...", "曲ID...", "معرف الأغنية...", "गीत आईडी...", "รหัสเพลง..."},
Callback = function(res: any)
if res == "" then return end
local trackplayer = framework.dependencies.track
local data = trackplayer:Play(res)
if not data then return end
ui:Get("PlayIcon").instance.Image = trackplayer:IsPaused() and
framework.protected:ProtectAsset("rbxassetid://131442639815262") or framework.protected:ProtectAsset("rbxassetid://74770554858723")
ui:Get("TrackArtist").instance.Text = data.Creator.Name
ui:Get("TrackTitle").instance.Text = data.Name
end
})
end)
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.3, 0)
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Right,
Position = UDim2.fromScale(.95, .1),
Size = UDim2.fromScale(.35, .15),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"Arceus Intelligence"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Caption"},
Colors_Text_Primary = {"TextColor3"},
}), ui:AddInstance("TextLabel", {
Id = "TrackArtist",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.3, .425),
AnchorPoint = Vector2.new(0, 1),
Size = UDim2.fromScale(.6, .15),
BackgroundTransparency = 1,
TextTransparency = .5,
Country_Code = {"Click to change song...","Clicca per cambiare canzone...","Nhấp để thay đổi bài hát...","Clique para mudar a música...","Klik untuk mengubah lagu...","Нажмите, чтобы сменить песню...","Klicken Sie, um das Lied zu wechseln...","Haz clic para cambiar la canción...","Cliquez pour changer de chanson...","点击更改歌曲...","曲を変更するにはクリックしてください...","انقر لتغيير الأغنية...","गाना बदलने के लिए क्लिक करें...","คลิกเพื่อเปลี่ยนเพลง..."},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Heading"},
Colors_Text_Primary = {"TextColor3"},
TextScaled = true
}), ui:AddInstance("TextLabel", {
Id = "TrackTitle",
TextXAlignment = Enum.TextXAlignment.Left,
Text = "Arceus X Theme",
Position = UDim2.fromScale(.3 , .55),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.65, .275),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Heading"},
Colors_Text_Primary = {"TextColor3"}
}), ui: AddInstance("ImageButton", {
Id = "AIIcon2",
Position = UDim2.fromScale(.05 , .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.85, .85),
BackgroundTransparency = 1,
Tags = {"Colors_Text_Primary"},
MouseButton1Click = framework.protected:GCProtect(function()
local trackplayer = framework.dependencies.track
trackplayer:Toggle(ui:Get("SoundTrack"))
ui:Get("PlayIcon").instance.Image = trackplayer:IsPaused() and
framework.protected:ProtectAsset("rbxassetid://131442639815262") or framework.protected:ProtectAsset("rbxassetid://74770554858723")
end)
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui: AddInstance("ImageLabel", {
Id = "PlayIcon",
Image = "rbxassetid://131442639815262", -- Pause = 74770554858723
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.4, .4),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1,
ImageTransparency = .2,
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))), ui:AddInstance("Frame", { -- AI SONG PLAYER
Position = UDim2.fromScale(.99, .85),
Size = UDim2.fromScale(.685, .025),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .8
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("ImageButton", {
Id = "TrackSlider",
Position = UDim2.fromScale(0, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.7, 1.75),
AutoButtonColor = false,
BorderSizePixel = 0,
Colors_Primary = {"BackgroundColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
})), ui:AddInstance("TextLabel", {
Id = "TrackTime",
TextYAlignment = Enum.TextYAlignment.Bottom,
TextXAlignment = Enum.TextXAlignment.Right,
Position = UDim2.fromScale(1, 0),
AnchorPoint = Vector2.new(1, 1),
Size = UDim2.fromScale(1, 7),
BackgroundTransparency = 1,
TextTransparency = .25,
Text = "1:30 / 3:15",
TextScaled = true,
Tags = {"Colors_Text_Primary", "Fonts_Editor"},
Colors_Text_Primary = {"TextColor3"}
})))), ui:AddInstance("Frame", { -- AI CHAT PANEL
Id = "AIChatPanelBackground",
Position = UDim2.fromScale(.97, .95),
Size = UDim2.fromScale(.36 , .8),
AnchorPoint = Vector2.new(1, 1),
BackgroundTransparency = 1,
Colors_Secondary = {"BackgroundColor3"},
Tags = {"Colors_Secondary"}
}, ui:AddInstance("ImageLabel", {
Id = "ZoomedImage",
Image = "rbxassetid://89942914228029",
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(1.4, 1.4), -- immagine ingrandita
AnchorPoint = Vector2.new(.5, .5),
BackgroundTransparency = 1,
ZIndex = -1
}), ui:AddInstance("ImageLabel", {
Id = "AIChatPanelBackgroundOverlay",
Image = "rbxassetid://112235731951114",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ImageTransparency = .35
}, ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Right,
Position = UDim2.fromScale(1.025, -.025),
TextYAlignment = Enum.TextYAlignment.Top,
Size = UDim2.fromScale(.55, .075),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Caption"},
Country_Code = {"Arceus Intelligence"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "AIResponseTitle",
Position = UDim2.fromScale(.5, .1),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.5, .05),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Country_Code = {`Hello! I'm {aiName}!`,`Ciao! Sono {aiName}!`,`Xin chào! Tôi là {aiName}!`,`Olá! Eu sou {aiName}!`,`Halo! Saya {aiName}!`,`Привет! Я {aiName}!`,`Hallo! Ich bin {aiName}!`,`Hola! Soy {aiName}!`,`Bonjour! Je suis {aiName}!`,`你好!我是 {aiName}!`,`こんにちは!私は {aiName} です!`,`مرحبًا! أنا {aiName}!`,`नमस्ते! मैं {aiName} हूँ!`,`สวัสดี! ฉันคือ {aiName}!`},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Heading"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("ScrollingFrame", {
AutomaticCanvasSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(0.5, .17),
Size = UDim2.fromScale(.985, .675),
AnchorPoint = Vector2.new(.5,0),
CanvasSize = UDim2.fromScale(0,0),
ScrollBarThickness = padding/3,
BackgroundTransparency = 1,
BorderSizePixel = 0,
}, ui:AddInstance("TextLabel", {
Id = "AIResponse",
TextYAlignment = Enum.TextYAlignment.Top,
AutomaticSize = Enum.AutomaticSize.XY,
Position = UDim2.fromScale(.5, 0),
AnchorPoint = Vector2.new(.5,0),
Size = UDim2.fromScale(.8, 0),
BackgroundTransparency = 1,
TextTransparency = .45,
TextSize = padding * 2,
TextWrap = true,
RichText = true,
LineHeight = .9,
Country_Code = {"What can I do for\nyou today?","Cosa posso fare per te oggi?","Bạn cần tôi làm gì hôm nay?","O que posso fazer por você hoje?","Apa yang bisa saya lakukan untuk Anda hari ini?","Что я могу сделать для вас сегодня?","Was kann ich heute für dich tun?","¿Qué puedo hacer por ti hoy?","Que puis-je faire pour vous aujourd'hui?","我今天能为您做些什么?","今日何をお手伝いできますか?","ماذا يمكنني أن أفعل من أجلك اليوم؟","मैं आज आपके लिए क्या कर सकता हूँ?","วันนี้ฉันจะช่วยอะไรคุณได้บ้าง?"},
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black", "UI_WindowState"},
Colors_Text_Primary = {"TextColor3"},
UI_WindowState = {
TextSize = { padding * 2, padding * 2.5, padding * 3 }
}
}, ui:AddInstance("UIGradient", {
Rotation = 210,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromHex("#FF2E56")),
ColorSequenceKeypoint.new(.23, Color3.fromHex("#FF3869")),
ColorSequenceKeypoint.new(.66, Color3.fromHex("#F473EC")),
ColorSequenceKeypoint.new(1, Color3.fromHex("#7390F6"))
})
}))), ui:AddInstance("TextBox", {
Id = "AIBox",
TextXAlignment = Enum.TextXAlignment.Left,
TextColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(.5, .875),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.9, .1),
BackgroundTransparency = .85,
TextTransparency = .5,
TextScaled = true,
Text = "",
Country_Code_Placeholder = {"Teach me how to...", "Insegnami come fare...", "Dạy tôi cách...", "Ensine-me como...", "Ajari saya cara...", "Научи меня, как...", "Lehre mich, wie man...", "Enséñame cómo...", "Apprends-moi comment...", "教我如何...", "どうやって...するか教えて...", "علمني كيف...", "मुझे सिखाओ कैसे...", "สอนฉันวิธี..."},
Tags = {"Country_Code"},
FocusLost = framework.protected:GCProtect(function()
if utils.axintDebounce then return end
utils.axintDebounce = true
local input, output = ui:Get("AIBox").instance, ui:Get("AIResponse").instance
local background = ui:Get("BackgroundGlow")
local axint = framework.dependencies.axintelligence
local outmsg = output.Text
output.Text = utils:Translate({"Reasoning...","Ragionamento...","Đang suy luận...","Raciocínio...","Penalaran...","Рассуждение...","Überlegung...","Razonando...","Raisonnement...","推理...","推論中...","التفكير...","तर्क कर रहा है...","กำลังให้เหตุผล..."})
local prompt = input.Text
input.Text = ""
local res = axint:Chat(prompt)
if res then
local msg = framework.utils.strings.gsub(res.texts[1], "%s", "")
if msg == "" then
outmsg = "Arceus Intelligence is not available, please try again later"
else
outmsg = res.texts[1]
background:Tween(tweens.default, {
ImageColor3 = Color3.fromHex("#707070")
})
task.delay(3, function()
background:Tween(tweens.slow_default, {
ImageColor3 = Color3.fromHex("#000"),
})
end)
end
if #res.codes > 0 then
utils:ShowToast("ButtonToast", {
AdditionalText = {`{framework.utils.strings.sub(res.codes[1], 1, 50)}`},
AdditionalTitle = {"Allow arcy to execute?","Permettere ad arcy di eseguire?","Cho phép Arcy thực thi?","Permitir que o Arcy execute?","Izinkan Arcy untuk mengeksekusi?","Разрешить Arcy выполнять?","Arcy ausführen lassen?","¿Permitir que Arcy ejecute?","Autoriser Arcy à exécuter ?","允许 Arcy 执行?","Arcy に実行を許可しますか?","السماح لـ Arcy بالتنفيذ؟","क्या Arcy को निष्पादन की अनुमति दें?","อนุญาตให้ Arcy ดำเนินการหรือไม่?"},
Style = "confirm",
Callback = function(yes: boolean)
if not yes then return end
framework.execution:Execute(res.codes[1])
end
})
end
end
utils:AnimateCascade(output, {
AnimateSelf = true,
ScaleCascade = true,
ScaleDirection = "In"
})
output.Text = outmsg
utils.axintDebounce = false
end)
}, ui:AddInstance("UIPadding", {
PaddingRight = UDim.new(.05, 0),
PaddingLeft = UDim.new(.2, 0),
PaddingBottom = UDim.new(.3, 0),
PaddingTop = UDim.new(.3, 0)
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://135762677969700", -- AI Icon
Position = UDim2.fromScale(-.05,.5),
AnchorPoint = Vector2.new(1,.5),
Size = UDim2.fromScale(.15,1.5),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1
}), ui:AddInstance("ImageLabel", {
Image = "rbxassetid://93050869167661", -- Shadow Glow
Size = UDim2.fromScale(2,6.4), -- Without padding --> Size = UDim2.fromScale(1.75,4),
AnchorPoint = Vector2.new(.5,.5),
Position = UDim2.fromScale(.4,.5),
BackgroundTransparency = 1,
ImageTransparency = .25
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
})), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.11, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.065, 0),
PaddingTop = UDim.new(.065, 0),
PaddingRight = UDim.new(.1, 0),
PaddingLeft = UDim.new(.1, 0)
}))))
},
{ Name = "Extensions", Icon = "rbxassetid://136247171547858",
Content = ui:AddInstance("Frame", {Id = "Extensions"},
ui:AddInstance("TextButton", {
Id = "ExtensionBackButton",
BackgroundColor3 = Color3.fromHex("#FF0000"),
Position = UDim2.fromScale(.08, .03),
Size = UDim2.fromScale(.115, .06),
AnchorPoint = Vector2.new(0,0),
BackgroundTransparency = .45,
Visible = false,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
local backButton, detachButton = ui:Get("ExtensionBackButton"), ui:Get("ExtensionDetachButton")
local page, content = ui:Get("ExtensionPage"), ui:Get("ExtensionContent")
backButton.instance.Visible = false
detachButton.instance.Visible = false
content.instance.Visible = false
page.instance.Visible = true
end)
}, ui:AddInstance("TextLabel", {Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .65),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Country_Code = {"‹ Back","‹ Indietro","‹ Quay lại","‹ Voltar","‹ Kembali","‹ Назад","‹ Zurück","‹ Atrás","‹ Retour","‹ 返回","‹ 戻る","‹ عودة","‹ वापस","‹ ย้อนกลับ"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})), ui:AddInstance("TextButton", {
Id = "ExtensionDetachButton",
BackgroundColor3 = Color3.fromHex("#58B2FF"),
Position = UDim2.fromScale(.225, .03),
Size = UDim2.fromScale(.135, .06),
AnchorPoint = Vector2.new(0, 0),
BackgroundTransparency = .5,
Visible = false,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
local plugins = framework.dependencies.plugins
local last = plugins:GetLastOpened()
if last then last:Detach() end
end)
}, ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .65),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Title"},
Country_Code = {" 🔗 Detach"," 🔗 Stacca"," 🔗 Tháo"," 🔗 Desanexar"," 🔗 Lepas"," 🔗 Отсоединить"," 🔗 Lösen"," 🔗 Desacoplar"," 🔗 Détacher"," 🔗 分离"," 🔗 分離"," 🔗 فصل"," 🔗 अलग करें"," 🔗 ถอด"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})),
ui:AddInstance("ScrollingFrame", {
Id = "ExtensionPage",
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(0, .14),
Size = UDim2.fromScale(1, .835),
ScrollBarThickness = padding/3,
BackgroundTransparency = 1,
ClipsDescendants = true,
BorderSizePixel = 0,
Colors_Primary = {"ScrollBarImageColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UIPadding",{
PaddingLeft = UDim.new(.03, 0)
}), ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .05),
Size = UDim2.fromScale(.3, .08),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black"},
Country_Code = {"Extensions","Estensioni","Tiện ích mở rộng","Extensões","Ekstensi","Расширения","Erweiterungen","Extensiones","Extensions","扩展","拡張機能","الإضافات","एक्सटेंशन","ส่วนขยาย"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(.3, .045),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Discover","Scopri le","Khám phá","Descobrir","Temukan","Обнаружить","Entdecken","Descubrir","Découvrir","发现","発見","اكتشف","खोजें","ค้นพบ"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextButton", {
BackgroundColor3 = Color3.fromHex("#2B5780"),
Position = UDim2.fromScale(.95, .05),
Size = UDim2.fromScale(.15, .09),
AnchorPoint = Vector2.new(1, 0),
BackgroundTransparency = .5,
Text = "",
MouseButton1Click = framework.protected:GCProtect(function()
utils:ShowToast("InputToast", {
PlaceholderText = {"Extension url","Url dell'estensione","URL tiện ích mở rộng","URL de extensão","URL ekstensi","URL расширения","Erweiterungs-URL","URL de extensión","URL de l'extension","扩展 URL","拡張機能のURL","رابط الإضافة","एक्सटेंशन URL","URL ส่วนขยาย"},
AdditionalText = {"Install extension","Installa estensione","Cài đặt tiện ích mở rộng","Instalar extensão","Pasang ekstensi","Установить расширение","Erweiterung installieren","Instalar extensión","Installer l'extension","安装扩展","拡張機能をインストール","تثبيت الإضافة","एक्सटेंशन इंस्टॉल करें","ติดตั้งส่วนขยาย"},
Callback = function(res: any)
if not res then return end
framework.dependencies.plugins:Install(res)
end
})
end)
}, ui:AddInstance("ImageLabel", {
Image = "rbxassetid://112476312219988",
Position = UDim2.fromScale(.1, .5),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.6, .6),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextLabel", {
Position = UDim2.fromScale(.625, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .55),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Body"},
Country_Code = {"Install","Installa","Cài đặt","Instalar","Pasang","Установить","Installieren","Instalar","Installer","安装","インストール","تثبيت","इंस्टॉल","ติดตั้ง"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
})) --[[,ui:AddInstance("TextBox", {
TextXAlignment = Enum.TextXAlignment.Left,
BackgroundColor3 = Color3.fromHex("000"),
Position = UDim2.fromScale(1, .175),
Size = UDim2.fromScale(.25, .095),
AnchorPoint = Vector2.new(1, 0),
PlaceholderText = "Search...",
BackgroundTransparency = .5,
TextScaled = true,
Text = "",
Tags = {"Colors_Text_Primary", "Fonts_Heading"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(.25,0),
PaddingRight = UDim.new(.05, 0),
PaddingLeft = UDim.new(.075, 0),
PaddingTop = UDim.new(.25,0)
})),--]]), ui:AddInstance("Frame", {
Id = "ExtensionHome",
AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(0, .175),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ClipsDescendants = false
}, ui:AddInstance("UIGridLayout", {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Top,
FillDirection = Enum.FillDirection.Horizontal,
CellPadding = UDim2.fromScale(.05, .075),
SortOrder = Enum.SortOrder.LayoutOrder,
CellSize = UDim2.fromScale(.15, 0)
}))), ui:AddInstance("Frame", {
Id = "ExtensionContent",
--AutomaticSize = Enum.AutomaticSize.Y,
Position = UDim2.fromScale(0, .175),
Size = UDim2.fromScale(1, .8),
BackgroundTransparency = 1,
Visible = false
}))
},
{ Name = "Settings", Icon = "rbxassetid://102545631972477",
Content = ui:AddInstance("Frame", {Id = "Settings"},
ui:AddInstance("ScrollingFrame", {
Id = "SettingsPage",
ScrollingDirection = Enum.ScrollingDirection.Y,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
BackgroundColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(0, .14),
Size = UDim2.fromScale(1, .835),
ScrollBarThickness = padding/3,
BackgroundTransparency = 1,
ClipsDescendants = true,
BorderSizePixel = 0,
Colors_Primary = {"ScrollBarImageColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UIPadding",{
PaddingLeft = UDim.new(.03, 0),
PaddingTop = UDim.new(.02, 0),
PaddingRight = UDim.new(.03, 0),
PaddingBottom = UDim.new(.02, 0)
}), ui:AddInstance("Frame", {
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("TextLabel", {
Id = "SettingsTitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, .05),
Size = UDim2.fromScale(.3, .08),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Black"},
Country_Code = {"Settings","Impostazioni","Cài đặt","Configuración","Pengaturan","Настройки","Einstellungen","Configurações","Paramètres","设置","設定","الإعدادات","सेटिंग्स","การตั้งค่า"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "SettingsSubtitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(0, 0),
Size = UDim2.fromScale(.3, .045),
BackgroundTransparency = 1,
TextScaled = true,
Tags = {"Country_Code", "Colors_Text_Primary", "Fonts_Description"},
Country_Code = {"Configure","Configura","Định cấu hình","Configurar","Konfigurasi","Настроить","Konfigurieren","Configurar","Configurer","配置","構成","تكوين","कॉन्फ़िगर","กำหนดค่า"},
Colors_Text_Primary = {"TextColor3"}
})), ui:AddInstance("Frame", {
Id = "SettingsHome",
-- niente auto-layout: gestiamo noi lo stacking in scale
AutomaticSize = Enum.AutomaticSize.None,
Position = UDim2.fromScale(0, .175),
-- altezza in scale calcolata per contenere tutti i blocchi
-- BLOCK_H = 0.14, GAP = 0.03, N = 6 => totalScale = N*BLOCK_H + (N-1)*GAP = 0.99
Size = UDim2.fromScale(1, 0.99),
BackgroundTransparency = 1,
ClipsDescendants = false
}, framework.protected:GCProtect(function()
-- configurazione spacing in SCALE
local LEFT = 0.0 -- 5% margine sinistro
local WIDTH = 0.90 -- 90% larghezza
local BLOCK_H = 0.14 -- altezza di ogni setting (in scale)
local GAP = 0.09 -- spazio verticale tra setting (in scale)
local function y(i)
return (i-1) * (BLOCK_H + GAP)
end
return {
-- Colori
ui:AddComponent("SettingDropdown", {
Id = "Setting_PrimaryColor",
Description = {"Choose the primary color theme","Scegli il tema colore principale","Chọn chủ đề màu chính","Elige el tema de color principal","Pilih tema warna utama","Выберите основную цветовую тему","Wählen Sie das Hauptfarbthema","Escolha o tema de cor primário","Choisissez le thème de couleur principal","选择主要颜色主题","主要なカラーテーマを選択","اختر نظام الألوان الأساسي","प्राथमिक रंग थीम चुनें","เลือกธีมสีหลัก"},
Title = {"Primary Color","Colore primario","Màu chính","Color primario","Warna utama","Основной цвет","Primärfarbe","Cor primária","Couleur principale","主色","プライマリカラー","اللون الأساسي","प्राथमिक रंग","สีหลัก"},
Position = UDim2.fromScale(LEFT, y(1)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 1,
Options = {
{ Name = {"Red","Rosso","Đỏ","Rojo","Merah","Красный","Rot","Vermelho","Rouge","红色","","أحمر","लाल","สีแดง"}, Value = framework.settings:GetDefaultSetting("Colors_Primary") },
{ Name = {"Blue","Blu","Xanh dương","Azul","Biru","Синий","Blau","Azul","Bleu","蓝色","","أزرق","नीला","สีน้ำเงิน"}, Value = Color3.fromRGB(59, 130, 246):ToHex() }, -- #3B82F6
{ Name = {"Green","Verde","Xanh lá","Verde","Hijau","Зелёный","Grün","Verde","Vert","绿色","","أخضر","हरा","สีเขียว"}, Value = Color3.fromRGB(34, 197, 94):ToHex() }, -- #22C55E
{ Name = {"Purple","Viola","Tím","Púrpura","Ungu","Фиолетовый","Lila","Roxo","Violet","紫色","","أرجواني","बैंगनी","สีม่วง"}, Value = Color3.fromRGB(139, 92, 246):ToHex() }, -- #8B5CF6
{ Name = {"Orange","Arancione","Cam","Naranja","Oranye","Оранжевый","Orange","Laranja","Orange","橙色","オレンジ","برتقالي","नारंगी","สีส้ม"}, Value = Color3.fromRGB(249, 115, 22):ToHex() }, -- #F97316
{ Name = {"Amber","Ambra","Hổ phách","Ámbar","Amber","Янтарный","Bernstein","Âmbar","Ambre","琥珀色","琥珀","كهرماني","अंबर","สีเหลืองอำพัน"}, Value = Color3.fromRGB(245, 158, 11):ToHex() }, -- #F59E0B
{ Name = {"Teal","Verde petrolio","Xanh lục lam","Verde azulado","Hijau kebiruan","Бирюзовый","Türkisblau","Verde-azulado","Sarcelle","蓝绿色","ティール","أزرق مخضر","हरित-नीला","สีน้ำเงินเขียว"}, Value = Color3.fromRGB(20, 184, 166):ToHex() }, -- #14B8A6
{ Name = {"Cyan","Ciano","Xanh cyan","Cian","Sian","Голубой","Cyan","Ciano","Cyan","青色","シアン","سماوي","हरिनील","สีฟ้า"}, Value = Color3.fromRGB(6, 182, 212):ToHex() }, -- #06B6D4
{ Name = {"Pink","Rosa","Hồng","Rosa","Merah muda","Розовый","Rosa","Rosa","Rose","粉红色","ピンク","وردي","गुलाबी","สีชมพู"}, Value = Color3.fromRGB(236, 72, 153):ToHex() }, -- #EC4899
{ Name = {"Indigo","Indaco","Chàm","Índigo","Nila","Индиго","Indigo","Índigo","Indigo","靛蓝色","インディゴ","نيلي","जामुनी","สีคราม"}, Value = Color3.fromRGB(99, 102, 241):ToHex() }, -- #6366F1
{ Name = {"Lime","Lime","Xanh lá chanh","Lima","Hijau limau","Лаймовый","Limette","Limão","Citron vert","酸橙色","ライム","ليموني","हल्का हरा","สีมะนาว"}, Value = Color3.fromRGB(132, 204, 22):ToHex() }, -- #84CC16
},
SelectedValue = function()
return framework.settings:GetSetting("Colors_Primary")
end,
Callback = framework.protected:GCProtect(function(value: string)
framework.settings:SetSetting("Colors_Primary", value)
end)
}),
--[[
ui:AddComponent("SettingDropdown", {
Id = "Setting_SecondaryColor",
Description = {"Choose the secondary color theme"},
Title = {"Secondary Color"},
Position = UDim2.fromScale(LEFT, y(2)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 2,
Options = {
{ Name = "Blue", Value = Color3.fromRGB(0, 128, 255):ToHex() },
{ Name = "Orange", Value = Color3.fromRGB(255, 128, 0):ToHex() }
},
Callback = framework.protected:GCProtect(function(value: string)
framework.settings:SetSetting("Colors_Secondary", value)
end)
}),
-- Interfaccia
ui:AddComponent("SettingToggle", {
Id = "Setting_Translate",
Description = {"Enable automatic translations (AI Page)"},
Title = {"Translate"},
Enabled = false,
Position = UDim2.fromScale(LEFT, y(3)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 3,
Callback = framework.protected:GCProtect(function(state: boolean)
print("Translate setting:", state)
end)
}),]]
ui:AddComponent("SettingDropdown", {
Id = "Setting_FPSCap",
Description = {"Choose the maximum FPS limit","Scegli il limite massimo di FPS","Chọn giới hạn FPS tối đa","Elige el límite máximo de FPS","Pilih batas FPS maksimum","Выберите максимальный предел FPS","Wählen Sie das maximale FPS-Limit","Escolha o limite máximo de FPS","Choisissez la limite maximale de FPS","选择最大FPS限制","最大FPS制限を選択","اختر الحد الأقصى لمعدل الإطارات في الثانية","अधिकतम FPS सीमा चुनें","เลือกขีดจำกัด FPS สูงสุด"},
Title = {"FPS Cap","Limite FPS","Giới hạn FPS","Límite de FPS","Batas FPS","Ограничение FPS","FPS-Limit","Limite de FPS","Limite de FPS","FPS上限","FPS制限","الحد الأقصى لمعدل الإطارات","FPS सीमा","จำกัด FPS"},
Position = UDim2.fromScale(LEFT, y(2)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 2,
Options = {
{ Name = {"30 Fps","30 FPS","30 FPS","30 FPS","30 FPS","30 кадров/с","30 FPS","30 FPS","30 FPS","30帧每秒","30 FPS","30 إطار/ث","30 एफपीएस","30 เฟรมต่อวินาที"}, Value = 30 },
{ Name = {"60 Fps","60 FPS","60 FPS","60 FPS","60 FPS","60 кадров/с","60 FPS","60 FPS","60 FPS","60帧每秒","60 FPS","60 إطار/ث","60 एफपीएस","60 เฟรมต่อวินาที"}, Value = 60 },
{ Name = {"120 Fps","120 FPS","120 FPS","120 FPS","120 FPS","120 кадров/с","120 FPS","120 FPS","120 FPS","120帧每秒","120 FPS","120 إطار/ث","120 एफपीएस","120 เฟรมต่อวินาที"}, Value = 120 },
{ Name = {"144 Fps","144 FPS","144 FPS","144 FPS","144 FPS","144 кадров/с","144 FPS","144 FPS","144 FPS","144帧每秒","144 FPS","144 إطار/ث","144 एफपीएस","144 เฟรมต่อวินาที"}, Value = 144 },
{ Name = {"240 Fps","240 FPS","240 FPS","240 FPS","240 FPS","240 кадров/с","240 FPS","240 FPS","240 FPS","240帧每秒","240 FPS","240 إطار/ث","240 एफपीएस","240 เฟรมต่อวินาที"}, Value = 240 },
{ Name = {"Unlimited","Illimitato","Không giới hạn","Ilimitado","Tidak terbatas","Неограниченный","Unbegrenzt","Ilimitado","Illimité","无限","無制限","غير محدود","असीमित","ไม่จำกัด"}, Value = 1000 }
},
SelectedValue = function()
return framework.settings:GetSetting("Setting_Fps")
end,
Callback = framework.protected:GCProtect(function(value: string)
framework.settings:SetSetting("Setting_Fps", value)
framework.env.setfpscap(value)
end)
}),
ui:AddComponent("SettingNumeric", {
Id = "Setting_EditorTextSize",
Description = {"Set the size of the editor text","Imposta la dimensione del testo dell'editor","Đặt kích thước văn bản của trình soạn thảo","Establecer el tamaño del texto del editor","Atur ukuran teks editor","Установите размер текста редактора","Stellen Sie die Schriftgröße des Editors ein","Defina o tamanho do texto do editor","Définir la taille du texte de l’éditeur","设置编辑器文本大小","エディタのテキストサイズを設定","حدد حجم نص المحرر","संपादक पाठ का आकार सेट करें","ตั้งค่าขนาดข้อความของตัวแก้ไข"},
Title = {"Editor Text Size","Dimensione testo editor","Kích thước văn bản trình soạn thảo","Tamaño de texto del editor","Ukuran teks editor","Размер текста редактора","Editor-Textgröße","Tamanho do texto do editor","Taille du texte de l’éditeur","编辑器文本大小","エディタのテキストサイズ","حجم نص المحرر","संपादक टेक्स्ट आकार","ขนาดข้อความของตัวแก้ไข"},
StartValue = function()
return framework.settings:GetSetting("FontSizes_Editor") or framework.settings:GetDefaultSetting("FontSizes_Editor")
end,
Increment = 1, Max = 32, Min = 8,
Position = UDim2.fromScale(LEFT, y(3)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 3,
Callback = framework.protected:GCProtect(function(value: number)
framework.settings:SetSetting("FontSizes_Editor", value)
end)
}),
-- Generali
ui:AddComponent("SettingToggle", {
Id = "Setting_DisableIntro",
Description = {"Skip the intro when starting","Salta l'introduzione all'avvio","Bỏ qua phần giới thiệu khi khởi động","Saltar la introducción al iniciar","Lewati intro saat memulai","Пропустить вступление при запуске","Intro beim Start überspringen","Pular a introdução ao iniciar","Passer l’introduction au démarrage","启动时跳过介绍","起動時にイントロをスキップ","تخطي المقدمة عند بدء التشغيل","स्टार्ट करते समय इंट्रो छोड़ें","ข้ามอินโทรเมื่อเริ่มต้น"},
Title = {"Disable Intro","Disattiva introduzione","Tắt phần giới thiệu","Desactivar introducción","Nonaktifkan intro","Отключить вступление","Intro deaktivieren","Desativar introdução","Désactiver l’introduction","禁用介绍","イントロを無効にする","تعطيل المقدمة","इंट्रो अक्षम करें","ปิดการใช้อินโทร"},
Enabled = function()
return not framework.settings:GetSetting("User_Intro")
end,
Position = UDim2.fromScale(LEFT, y(4)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 4,
Callback = framework.protected:GCProtect(function(state: boolean)
framework.settings:SetSetting("User_Intro", not state)
end)
}),
-- Interfaccia
--[[ui:AddComponent("SettingToggle", {
Id = "Setting_Animations",
Description = {"Enable or disable interface animations","Abilita o disabilita le animazioni dell'interfaccia","Bật hoặc tắt hoạt ảnh giao diện","Habilitar o deshabilitar las animaciones de la interfaz","Aktifkan atau nonaktifkan animasi antarmuka","Включить или отключить анимации интерфейса","Aktivieren oder deaktivieren Sie die Schnittstellenanimationen","Ativar ou desativar animações da interface","Activer ou désactiver les animations de l'interface","启用或禁用界面动画","インターフェースアニメーションを有効または無効にする","تمكين أو تعطيل الرسوم المتحركة للواجهة","इंटरफ़ेस एनिमेशन सक्षम या अक्षम करें","เปิดหรือปิดการทำงานของแอนิเมชันอินเทอร์เฟซ"},
Title = {"Animations","Animazioni","Hoạt ảnh","Animaciones","Animasi","Анимации","Animationen","Animações","Animations","动画","アニメーション","الرسوم المتحركة","एनिमेशन","แอนิเมชัน"},
Enabled = true,
Position = UDim2.fromScale(LEFT, y(5)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 5,
Callback = framework.protected:GCProtect(function(state: boolean)
print("Animations setting:", state)
end)
}),]]
-- Generali
ui:AddComponent("SettingToggle", {
Id = "Setting_Afk",
Description = {"Bypass being kicked for AFK","Aggira l'espulsione per AFK","Vượt qua việc bị đá vì AFK","Evitar ser expulsado por AFK","Lewati tendangan karena AFK","Обойти кик за AFK","Kick wegen AFK umgehen","Evitar ser expulso por AFK","Contourner l’expulsion pour AFK","绕过因AFK被踢出","AFKによるキックを回避","تجاوز الطرد بسبب AFK","AFK होने पर किक से बचें","ข้ามการถูกเตะเพราะ AFK"},
Title = {"Anti AFK","Anti AFK","Chống AFK","Anti AFK","Anti AFK","Анти AFK","Anti-AFK","Anti AFK","Anti AFK","防AFK","アンチAFK","مضاد AFK","एंटी AFK","ป้องกัน AFK"},
Enabled = function()
return framework.settings:GetSetting("Settings_Afk")
end,
Position = UDim2.fromScale(LEFT, y(5)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 5,
Callback = framework.protected:GCProtect(function(state: boolean)
framework.settings:SetSetting("Settings_Afk", state)
if framework.env.WHWKIWIOSU then
framework.env.WHWKIWIOSU(state)
elseif state then
framework.dependencies.shared.antiAfk()
end
end)
}),
ui:AddComponent("SettingDropdown", {
Id = "Setting_Links",
Description = {"Choose where to go","Scegli dove andare","Chọn nơi để đi","Elige adónde ir","Pilih ke mana harus pergi","Выберите, куда перейти","Wählen Sie, wohin Sie gehen möchten","Escolha para onde ir","Choisissez où aller","选择要去的地方","行き先を選んでください","اختر مكان الانتقال","कहाँ जाना है चुनें","เลือกว่าจะไปที่ไหน"},
Title = {"Links","Collegamenti","Liên kết","Enlaces","Tautan","Ссылки","Links","Links","Liens","链接","リンク","الروابط","लिंक","ลิงก์"},
Position = UDim2.fromScale(LEFT, y(6)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 6,
Options = {
{ Name = {"Website","Sito web","Trang web","Sitio web","Situs web","Веб-сайт","Webseite","Website","Site web","网站","ウェブサイト","موقع إلكتروني","वेबसाइट","เว็บไซต์"}, Value = "https://spdmteam.com" },
{ Name = {"Shop","Negozio","Cửa hàng","Tienda","Toko","Магазин","Geschäft","Loja","Magasin","商店","ショップ","متجر","दुकान","ร้านค้า"}, Value = "https://shop.spdmteam.com" },
{ Name = {"Discord","Discord","Discord","Discord","Discord","Дискорд","Discord","Discord","Discord","Discord","ディスコード","ديسكورد","डिस्कॉर्ड","ดิสคอร์ด"}, Value = "https://discord.spdmteam.com" }
},
Callback = framework.protected:GCProtect(function(value: string)
framework.utils.http:OpenUrl(value)
end)
}),
--[[ui:AddComponent("SettingToggle", {
Id = "Setting_ConfirmationPopup",
Description = {"Ask for confirmation before actions","Chiedi conferma prima delle azioni","Hỏi xác nhận trước khi thực hiện hành động","Pedir confirmación antes de las acciones","Minta konfirmasi sebelum melakukan tindakan","Спросить подтверждение перед действиями","Vor Aktionen um Bestätigung bitten","Pedir confirmação antes das ações","Demander une confirmation avant les actions","操作前请求确认","操作の前に確認を求める","اطلب التأكيد قبل الإجراءات","क्रियाओं से पहले पुष्टि माँगें","ขอการยืนยันก่อนดำเนินการ"},
Title = {"Confirmation Popup","Finestra di conferma","Cửa sổ xác nhận","Ventana de confirmación","Popup konfirmasi","Всплывающее окно подтверждения","Bestätigungs-Popup","Popup de confirmação","Fenêtre de confirmation","确认弹窗","確認ポップアップ","نافذة تأكيد منبثقة","पुष्टिकरण पॉपअप","หน้าต่างยืนยัน"},
Enabled = not not framework.settings:GetSetting("Popups_Confirmation"),
Position = UDim2.fromScale(LEFT, y(4)),
Size = UDim2.fromScale(WIDTH, BLOCK_H),
LayoutOrder = 4,
Callback = framework.protected:GCProtect(function(state: boolean)
framework.settings:SetSetting("Popups_Confirmation", state)
end)
}),]]
}
end))))
}
}
ui.navbarOffset = .25
utils.pages = framework.protected:ProtectTable(pages)
end
local showPage do
local lastPage
showPage = framework.protected:GCProtect(function(id: string, posy: number)
local nextPage = ui:Get(id)
if utils.currentPage == nextPage then return end
for _, page in ipairs(pages) do
local content = page.Content.instance
content.Visible = lastPage == content or nextPage.instance == content
end
lastPage = nextPage.instance
ui:Get("MainPages").instance:JumpTo(nextPage.instance)
local indicator = ui:Get("Indicator")
indicator:Tween(tweens.default, {
Position = UDim2.fromScale(.05, posy)
})
utils.currentPage = nextPage
if id == "Page_ScriptHub" and not ui.CloudLoaded then
ui.CloudLoaded = true
ui:Get("GridFilter"):Refresh()
ui:Get("BarFilter"):Refresh()
end
utils:AnimateCascade(nextPage, {
ExcludeNames = { "BarFilter", "GridFilter", "CloudBestScriptsBar", "AIPlayerBackgroundOverlay", "CategoryBtn_Files", "CategoryBtn_Auto", "CategoryBtn_Favs"}--, BestScriptsBar, MagicNicknameContainer", Slider_Gravity_Bar", "Slider_Jump_Bar", "Slider_Speed_Bar"
})
end)
ui.showPage = showPage
end
local showNavbar do
local size1, size2
showNavbar = framework.protected:GCProtect(function(visible: boolean?)
local content, sidebar, btn = ui:Get("ContentFrame"), ui:Get("Sidebar"), ui:Get("SideNavButton")
local vis = visible == true or not sidebar.instance.Visible
if vis then sidebar.instance.Visible = true end
if not size1 then
size1 = -sidebar.instance.Size.X.Scale
size2 = content.instance.Size.X.Scale +size1
size1 = UDim2.fromScale(size1, 0)
size2 = UDim2.fromScale(size2, 1)
end
utils:AnimateCascade(btn.instance, {
SkipTransparency = true
})
sidebar:Tween(tweens.default, { Position = vis and UDim2.fromScale(0, 0) or size1, Visible = vis })
content:Tween(tweens.default, { Size = vis and size2 or UDim2.fromScale(1, 1) })
btn:Tween(tweens.default, { Rotation = vis and 180 or 0 })
if vis then
utils:AnimateCascade(sidebar, {
ExcludeNames = {"Indicator"}
})
end
end)
ui.showNavbar = showNavbar
end
-- UI Here
ui:AddInstance("ImageLabel", {
Id = "StartingScreen",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ImageTransparency = 1,
ZIndex = 500,
Visible = false
}, ui:AddInstance("ImageLabel", {
Id = "UserPFP2",
AnchorPoint = Vector2.new(0, .5),
Position = UDim2.fromScale(.0775, .2),
Size = UDim2.fromScale(.05, .05),
BackgroundTransparency = .5
}, ui:AddInstance("ImageLabel", {
Id = "PFPOverlay2",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
})), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddComponent("MovingText", {
Id = "StartingNickname",
Position = UDim2.fromScale(.115, .2),
AnchorPoint = Vector2.new(0, .5),
Size = UDim2.fromScale(.3, .0375),
BackgroundTransparency = 1,
ClipsDescendants = true,
Text = framework.protected:GetService("Players").LocalPlayer.displayName
}), ui:AddInstance("TextLabel", {
Id = "StartingWelcome",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.125, .3),
Size = UDim2.fromScale(.1, .065),
BackgroundTransparency = 1,
TextTransparency = .5,
TextScaled = true,
Tags = {"Country_Code", "Fonts_Heading", "Colors_Text_Primary"},
Country_Code = {"Welcome to","Benvenuto ad","Chào mừng đến","Bem-vindo a","Selamat datang di","Добро пожаловать в","Willkommen bei","Bienvenido a","Bienvenue à","欢迎来到","へようこそ","مرحبًا بك في","में आपका स्वागत है","ยินดีต้อนรับสู่"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextLabel", {
Id = "StartingTitle",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.125, .35),
Size = UDim2.fromScale(.26, .085),
BackgroundTransparency = 1,
Text = "Arceus X v5",
TextScaled = true,
Tags = {"Fonts_Title", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"},
}), ui:AddInstance("TextLabel", {
Id = "StartingText",
TextXAlignment = Enum.TextXAlignment.Left,
Position = UDim2.fromScale(.125, .45),
Size = UDim2.fromScale(.35, .215),
BackgroundTransparency = 1,
TextTransparency = .25,
TextScaled = true,
Country_Code = {"Explore new possibilities,\ntake control, and unlock the\npower to dominate.","Esplora nuove possibilità,\nottieni il controllo, sblocca il\npotere per dominare.","Khám phá những khả năng mới,\nkiểm soát và mở khóa\nsức mạnh để thống trị.","Explore novas possibilidades,\nassuma o controle e desbloqueie\no poder de dominar.","Jelajahi kemungkinan baru,\nambil kendali dan buka\nkekuatan untuk mendominasi.","Исследуйте новые возможности,\nвозьмите контроль и разблокируйте\nсилу, чтобы доминировать.","Erkunde neue Möglichkeiten,\nübernimm die Kontrolle und schalte\ndie Macht zur Beherrschung frei.","Explora nuevas posibilidades,\ntoma el control y desbloquea\nel poder para dominar.","Explorez de nouvelles possibilités,\nprenez le contrôle et débloquez\nle pouvoir de dominer.","探索新的可能性,\n掌握控制权,\n并解锁主宰的力量。","新たな可能性を探り、\nコントロールを手に入れ、\n支配する力を解き放つ。","استكشف إمكانيات جديدة،\nتولى السيطرة وافتح\nقوة الهيمنة.","नई संभावनाओं का अन्वेषण करें,\nनियंत्रण सँभालें और शक्ति को\nप्रभुत्व के लिए मुक्त करें।","สำรวจความเป็นไปได้ใหม่ๆ,\nควบคุมและปลดล็อก\nพลังเพื่อครอบงำ"},
Tags = {"Country_Code", "Fonts_Description", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("TextBox", {
Id = LPH_ENCSTR("EmailBox"),
PlaceholderColor3 = Color3.fromHex("#808080"),
TextXAlignment = Enum.TextXAlignment.Left,
BackgroundColor3 = Color3.fromHex("#FFF"),
TextTruncate = Enum.TextTruncate.AtEnd,
Position = UDim2.fromScale(.125, .675),
AutomaticSize = Enum.AutomaticSize.Y,
Size = UDim2.fromScale(.35, .075),
BackgroundTransparency = .5,
PlaceholderText = "Email",
TextSize = padding * 3.5,
TextWrapped = false,
Text = "",
FocusLost = framework.protected:GCProtect(function()
local email = ui:Get(LPH_ENCSTR("EmailBox")).instance.Text
if framework.utils.strings.match(email, LPH_ENCSTR("^[%w_%+%.%-]+@[%w%-%.]+%.%a%a+$")) then
framework.settings:SetSetting(LPH_ENCSTR("User_EMail"), email)
end
end),
Tags = {"Colors_Text_Primary", "Fonts_Editor", "No_Focus"},
Colors_Text_Primary = {"TextColor3"}
}, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.35, 0)
}), ui:AddInstance("UIPadding", {
PaddingBottom = UDim.new(0, padding),
PaddingRight = UDim.new(0, padding*2),
PaddingLeft = UDim.new(0, padding*2),
PaddingTop = UDim.new(0, padding)
})), ui:AddInstance("ImageButton", {
Id = "StartButton",
Image = "rbxassetid://87886886705009",
Position = UDim2.fromScale(.09, .75),
Size = UDim2.fromScale(.25, .3),
BackgroundTransparency = 1
}, ui:AddInstance("TextLabel", {
TextColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .15),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"START","AVVIA","BẮT ĐẦU","INICIAR","MULAI","НАЧАТЬ","STARTEN","INICIAR","DÉMARRER","开始","開始","ابدأ","प्रारंभ","เริ่ม"},
Tags = {"Country_Code", "Fonts_Title", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 2.35
})), ui:AddInstance("ImageButton", {
Id = "SubscribeButton",
Image = "rbxassetid://87886886705009",
Position = UDim2.fromScale(.29, .75),
Size = UDim2.fromScale(.25, .3),
ImageColor3 = Color3.new(0,0,0),
BackgroundTransparency = 1,
MouseButton1Click = framework.protected:GCProtect(function()
framework.utils.http:OpenUrl("https://spdmteam.com/resellers")
end)
}, ui:AddInstance("TextLabel", {
TextColor3 = Color3.fromHex("#FFF"),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, .15),
BackgroundTransparency = 1,
TextScaled = true,
Country_Code = {"SUBSCRIBE","ISCRIVITI","ĐĂNG KÝ","INSCREVER-SE","BERLANGGAN","ПОДПИСАТЬСЯ","ABONNIEREN","SUSCRIBIRSE","S'ABONNER","订阅","購読","اشترك","सदस्यता लें","สมัครสมาชิก"},
Tags = {"Country_Code", "Fonts_Title", "Colors_Text_Primary"},
Colors_Text_Primary = {"TextColor3"}
}), ui:AddInstance("UICorner", {
CornerRadius = UDim.new(.5, 0)
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 2.35
})), ui:AddInstance("ImageLabel", {
Id = "StartingLogo",
Image = "rbxassetid://81343346318525",
Position = UDim2.fromScale(.5, 1),
AnchorPoint = Vector2.new(0, .65),
Size = UDim2.fromScale(.55, 1.5),
ScaleType = Enum.ScaleType.Fit,
BackgroundTransparency = 1
}))
ui:AddInstance("ImageButton", {
Id = "Background",
BackgroundColor3 = Color3.fromRGB(0, 0, 0),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
AutoButtonColor = false,
}, ui:AddInstance("ImageLabel", {
Id = "BackgroundOverlay",
AnchorPoint = Vector2.new(.5, .5),
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ImageTransparency = 1,
}, ui:AddComponent("Shade", {
Id = "BottomShadeLeft",
Size = UDim2.fromScale(.5, .5),
Position = UDim2.fromScale(0, .5),
Rotation = 80,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1, 0),
NumberSequenceKeypoint.new(.2, 1, 0),
NumberSequenceKeypoint.new(1, .35, 0)
})
}), ui:AddComponent("Shade", {
Id = "BottomShadeRight",
Size = UDim2.fromScale(.5, .5),
Position = UDim2.fromScale(.5, .5),
Rotation = 100,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1, 0),
NumberSequenceKeypoint.new(.2, 1, 0),
NumberSequenceKeypoint.new(1, .35, 0)
})
}), ui:AddInstance("TextLabel", {
Id = "ShadeTitle",
FontFace = Font.new("rbxasset://fonts/families/Ubuntu.json", Enum.FontWeight.Bold, Enum.FontStyle.Normal),
TextColor3 = Color3.fromRGB(255, 255, 255),
Position = UDim2.fromScale(.5, .85),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.25, .075),
BackgroundTransparency = 1,
TextTransparency = 1,
TextScaled = true,
Text = "Arceus X"
}), ui:AddInstance("TextLabel", {
Id = "ShadeText",
FontFace = Font.new("rbxasset://fonts/families/Ubuntu.json", Enum.FontWeight.Regular, Enum.FontStyle.Normal),
TextColor3 = Color3.fromRGB(220, 220, 220),
Position = UDim2.fromScale(.5, .915),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.25, .035),
BackgroundTransparency = 1,
TextTransparency = 1,
TextScaled = true,
RichText = true,
Text = ""
})))
ui:AddInstance("CanvasGroup", {
Id = "MainFrame",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.5, .5),
BackgroundTransparency = 1,
Visible = false
}, ui:AddInstance("ImageLabel", {
Id = "BackgroundGlow",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
ImageColor3 = Color3.fromHex("#000")
}, ui:AddInstance("ImageLabel", {
Id = "AnimatedWallpaper",
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1,
})), ui:AddInstance("ImageButton", { -- CLOSE BUTTON
Id = "CloseButton",
ImageColor3 = Color3.fromHex("#F00"),
ZIndex = 500,
Position = UDim2.fromScale(.9625, .065),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.125, .125),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = ui.close,
--MouseButton1Click = ui.nextSize
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("ImageButton", { -- MAXIMIZE BUTTON
Id = "MaximizeButton",
ImageColor3 = Color3.fromHex("#58B2FF"),
ZIndex = 500,
Position = UDim2.fromScale(.91, .065),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.125, .125),
BackgroundTransparency = 1,
AutoButtonColor = false,
MouseButton1Click = ui.nextSize
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("TextButton", {
Id = "SideNavButton",
Position = UDim2.fromScale(.0375, .065),
Size = UDim2.fromScale(.125, .11),
AnchorPoint = Vector2.new(.5,.5),
MouseButton1Click = showNavbar,
BackgroundTransparency = 1,
Rotation = 180,
ZIndex = 100,
Text = "",
Tags = {"UI_WindowState"}
}, ui:AddInstance("ImageLabel", {
Image = "rbxassetid://92411285882466",
Position = UDim2.fromScale(.5,.5),
AnchorPoint = Vector2.new(.5,.5),
Size = UDim2.fromScale(.45,.45),
BackgroundTransparency = 1,
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
}), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
})), ui:AddInstance("Frame", {
BackgroundColor3 = Color3.fromHex("#FFFFFF"),
Size = UDim2.new(.075, 0, 1, 0),
BackgroundTransparency = 0
}, ui:AddInstance("UIGradient", {
Rotation = 0,
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.new()),
ColorSequenceKeypoint.new(1, Color3.new())
}),
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, .5),
NumberSequenceKeypoint.new(1, 1)
})
})), ui:AddInstance("Frame", {
Id = "InnerMain",
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = utils:GetSafeScreenRatio(),
Id = "SafeRatio"
}), ui:AddInstance("ImageLabel", {
Id = "MainLogo",
Position = UDim2.fromScale(.5, .03),
AnchorPoint = Vector2.new(.5, 0),
Size = UDim2.fromScale(.3, .08),
BackgroundTransparency = 1,
ScaleType = Enum.ScaleType.Fit,
Image = "rbxassetid://102982068367172"
}), ui:AddInstance("Frame", {
Id = "Sidebar",
BackgroundColor3 = Color3.fromHex("#FFFFFF"),
Size = UDim2.new(.075, 0, 1, 0),
BackgroundTransparency = 1
}, framework.protected:GCProtect(function()
local btns = {}
for i, page in ipairs(pages) do
local idx = ui.navbarOffset +(i-1)/8.1
page.Indicator = idx
local pos = UDim2.fromScale(.5, idx)
local btn = ui:AddComponent("SideBtn", {
Id = `SideBtn_{page.Name}`,
Image = page.Icon,
LayoutOrder = i,
Position = pos,
OnClick = framework.protected:GCProtect(function()
showPage(`Page_{page.Name}`, idx)
utils:AnimateCascade(ui:Get(`SideBtn_{page.Name}`).instance, {
SkipTransparency = true
})
end)
})
page.Internal = btn
framework.utils.tables.insert(btns, btn)
end
return btns
end), ui:AddInstance("ImageLabel", {
Id = "Indicator",
Position = UDim2.fromScale(.05, 0),
AnchorPoint = Vector2.new(.5,.25),
Size = UDim2.fromScale(1, 1),
Image = "rbxassetid://71605317317599",
BackgroundTransparency = 1,
Colors_Primary = {"ImageColor3"},
Tags = {"Colors_Primary"}
}, ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}))), ui:AddInstance("Frame", {
Id = "ContentFrame",
Position = UDim2.fromScale(1, 0),
AnchorPoint = Vector2.new(1, 0),
Size = UDim2.fromScale(1, 1),
BackgroundTransparency = 1
}, ui:AddInstance("UIPageLayout", {
Id = "MainPages",
FillDirection = Enum.FillDirection.Vertical,
EasingDirection = Enum.EasingDirection.Out,
SortOrder = Enum.SortOrder.LayoutOrder,
EasingStyle = Enum.EasingStyle.Linear,
TweenTime = tweens.default.Time,
ScrollWheelInputEnabled = false,
GamepadInputEnabled = false,
TouchInputEnabled = false,
Circular = false,
}), framework.protected:GCProtect(function()
local contents = {}
for i, page in ipairs(pages) do
local frame = page.Content
frame:SetId(`Page_{page.Name}`)
frame.instance.LayoutOrder = i
frame.instance.BackgroundTransparency = 1
frame.instance.Size = UDim2.fromScale(1, 1)
framework.utils.tables.insert(contents, frame)
end
return contents
end))), ui:AddInstance("UIAspectRatioConstraint", {
Id = "Ratio169",
AspectRatio = 1.777
}), ui:AddInstance("UICorner", {
Id = "MainCorner",
CornerRadius = UDim.new(.075, 0)
})):SetDraggable(true)
---------------------------------------------------
utils:AddSlimeEffect(ui:Get("MainFrame"), {
All = {
ui:Get("SideBtn_ArceusIntelligence"),
ui:Get("SideBtn_Extensions"),
ui:Get("SideBtn_ScriptHub"),
ui:Get("SideBtn_Executor"),
ui:Get("SideBtn_Settings"),
ui:Get("MaximizeButton"),
ui:Get("SideBtn_Home"),
ui:Get("CloseButton"),
ui:Get("MainLogo")
-- ui:Get("SideNavButton"),
-- ui:Get("Indicator"),
},
[pages[1]] = {
ui:Get("BestScriptsPanelBackground"),
ui:Get("SlidersContainerBackground"),
ui:Get("ProfilePanelBackground"),
ui:Get("HomeTipBackground"),
ui:Get("AIPanelBackground")
},
[pages[2]] = {
ui:Get("EditorSSExecuteButtonShadow"),
ui:Get("EditorConsoleButtonShadow"),
ui:Get("EditorExecuteButtonShadow"),
ui:Get("EditorPasteButtonShadow"),
ui:Get("EditorClearButtonShadow"),
ui:Get("EditorCopyButtonShadow"),
ui:Get("EditorSaveButtonShadow"),
ui:Get("EditorAIButtonShadow"),
ui:Get("DeleteFileButton"),
ui:Get("FavouriteButton"),
ui:Get("CategoryButtons"),
ui:Get("EditorAIButton"),
ui:Get("TabsSearchBox"),
ui:Get("NewFileButton"),
ui:Get("CategoryTitle"),
ui:Get("EditorSideBar"),
ui:Get("TabsList"),
ui:Get("Editor")
},
[pages[3]] = {
ui:Get("ScriptHubScroll"),
ui:Get("NewScriptButton"),
ui:Get("NewFolderButton"),
ui:Get("CloudSearchBox"),
ui:Get("ScriptsSwitch")
},
[pages[4]] = {
ui:Get("AITipsPanelBackground"),
ui:Get("AIChatPanelBackground"),
ui:Get("AIPanelBackground2"),
ui:Get("AIResponseTitle"),
ui:Get("AITipsSubtitle"),
ui:Get("AITipsButton"),
ui:Get("AITipsTitle"),
ui:Get("TrackArtist"),
ui:Get("TrackSlider"),
ui:Get("AITipsText"),
ui:Get("AIResponse"),
ui:Get("TrackTitle"),
ui:Get("TrackTime"),
ui:Get("AIIcon2"),
ui:Get("AIBox")
},
[pages[5]] = {
ui:Get("ExtensionDetachButton"),
ui:Get("ExtensionBackButton"),
ui:Get("ExtensionContent"),
ui:Get("ExtensionPage"),
ui:Get("ExtensionHome")
},
[pages[6]] = {
ui:Get("SettingsTitle"),
ui:Get("SettingsSubtitle"),
ui:Get("Setting_PrimaryColor"),
--ui:Get("Setting_SecondaryColor"),
--ui:Get("Setting_Translate"),
ui:Get("Setting_EditorTextSize"),
ui:Get("Setting_DisableIntro"),
ui:Get("Setting_Afk"),
--ui:Get("Setting_ConfirmationPopup"),
ui:Get("Setting_FPSCap"),
ui:Get("Setting_Links")
}
})
task.spawn(function()
local Players = framework.protected:GetService("Players")
local img1, img2 = ui:Get("UserPFP"), ui:Get("UserPFP2")
local player = Players.LocalPlayer
local userId = player.UserId
local thumbType = Enum.ThumbnailType.AvatarBust
local thumbSize = Enum.ThumbnailSize.Size420x420
local success, content, isReady = pcall(function()
return Players:GetUserThumbnailAsync(userId, thumbType, thumbSize)
end)
if success and isReady then
img1.instance.Image = content
if not img2 or not img2.instance then
return
end
img2.instance.Image = content
end
end)
do -- Floating icon
local btns = framework.protected:GCProtect({})
local debounce = false
local ficon
ficon = ui:AddInstance("ImageButton", {
Id = "FloatingIcon",
Position = UDim2.fromScale(.75, .75),
AnchorPoint = Vector2.new(.5, .5),
Size = UDim2.fromScale(.25, .25),
BackgroundTransparency = 1,
AutoButtonColor = false,
Visible = false
}, framework.protected:GCProtect(function()
for i, page in ipairs(pages) do
local id = `Page_{page.Name}`
local image = ui:AddInstance("ImageLabel", {
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5, .5),
ScaleType = Enum.ScaleType.Fit,
Size = UDim2.fromScale(.3, .3),
BackgroundTransparency = 1,
Image = page.Icon
})
local btn = ui:AddInstance("ImageButton", {
Id = `SubIcon_{page.Name}`,
BackgroundTransparency = 1,
ImageTransparency = .5,
AnchorPoint = Vector2.new(.5, .5),
Position = UDim2.fromScale(.5, .5),
Size = UDim2.fromScale(.65, .65),
AutoButtonColor = false,
LayoutOrder = i,
Visible = false,
ZIndex = i,
MouseButton1Click = framework.protected:GCProtect(function()
if debounce then return end
ficon.toggle(false);
ui.open(); showPage(id, page.Indicator)
end)
}, image, ui:AddInstance("UICorner", {
CornerRadius = UDim.new(1, 0)
}), ui:AddInstance("UIAspectRatioConstraint"))
--btn.ImageLabel = image
page.External = btn
framework.utils.tables.insert(btns, btn)
end
return btns
end), ui:AddInstance("UIAspectRatioConstraint", {
AspectRatio = 1
}), ui:AddInstance("ImageLabel", {
Id = "FloatingIconLogo",
Image = "rbxassetid://102982068367172",
Size = UDim2.fromScale(.3,.3),
Position = UDim2.fromScale(.5, .5),
AnchorPoint = Vector2.new(.5,.5),
ScaleType = Enum.ScaleType.Fit,
ImageTransparency = .25,
BackgroundTransparency = 1
})):SetDraggable(true)
-- Animation
local elapsed, animDuration, spinSpeed = 0, .5, 5
local lastState = false
local animation
local compute = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(i: number, t: number)
local additional_angle = framework.utils.maths.lerp(0, 1, t)
local angle = (i *(2 *framework.utils.maths.pi /#btns)) +framework.utils.maths.pi -(additional_angle *spinSpeed %360)
local floatingIconRadius = ficon.instance.Size.X.Scale /2
local subIconRadius = btns[1].instance.Size.X.Scale /2
local distance = framework.utils.maths.lerp(0, floatingIconRadius +3 *subIconRadius/2, t)
local xScale = .5 +framework.utils.maths.cos(angle) *distance
local yScale = .5 +framework.utils.maths.sin(angle) *distance
return UDim2.fromScale(xScale, yScale)
end))
animation = framework.renderer:BindToRenderer(ficon.id, nil, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(delta: number)
elapsed += delta
if elapsed > animDuration then
animation:Pause()
elapsed = 0
if not lastState then
for _, icon in ipairs(btns) do
icon.instance.Visible = false
end
end
debounce = false
return
end
local t = elapsed /animDuration
local subIconTransparency, imageTransparency
if lastState then
subIconTransparency = framework.utils.maths.lerp(1, .5, framework.utils.maths.outExpo(t))
imageTransparency = 1 -framework.utils.maths.outExpo(t)
else
subIconTransparency = framework.utils.maths.lerp(.5, 1, framework.utils.maths.outExpo(t))
imageTransparency = framework.utils.maths.outExpo(t)
end
if not lastState then
t = 1-t
end
for i, icon in ipairs(btns) do
icon.instance.Position = compute(i, t)
--icon.ImageLabel.instance.ImageTransparency = imageTransparency
--icon.instance.BackgroundTransparency = subIconTransparency
end
end)))
-- Interaction
ficon.toggle = framework.protected:GCProtect(function(status: boolean)
if debounce then return end
debounce = true
if status ~= nil then
lastState = status
else
lastState = not lastState
end
if lastState then
for _, icon in ipairs(btns) do
icon.instance.Visible = true
end
end
animation:Render()
if lastState then
utils:AnimateCascade(ficon, {
ScaleCascade = true,
ScaleDirection = "In",
EnterTweenInfo = TweenInfo.new(.1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out),
TweenInfo = TweenInfo.new(.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
SkipTransparency = true,
DelayBetween = .005
})
else
utils:AnimateCascade(ficon, {
ScaleCascade = true,
ScaleDirection = "Out",
EnterTweenInfo = TweenInfo.new(.1, Enum.EasingStyle.Linear, Enum.EasingDirection.Out),
TweenInfo = TweenInfo.new(.25, Enum.EasingStyle.Back, Enum.EasingDirection.In),
SkipTransparency = true,
DelayBetween = .005
})
end
end)
local holdable = framework.utils.inputs.buttons.holdable(ficon, false)
holdable.OnShortPress:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(elapsed)
if debounce then return end
ficon.toggle(false)
ui.open()
end)))
holdable.OnLongPress:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(clickTime: number)
if clickTime > 1 then return end
ficon.toggle()
for _, icon in ipairs(btns) do icon.Visible = false end
end)))
-- Init
local page = pages[1]
utils.currentPage = page
showPage(`Page_{page.Name}`, page.Indicator)
showNavbar(true)
end
do -- Cloud Scripts
local scriptsgrid, scriptslist, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudBestScriptsBar"), ui:Get("CloudSearchBox")
local RunService: RunService = framework.protected:GetService("RunService")
local cloudscripts = framework.dependencies.cloudscripts
local deb1, deb2 = false, false
cloudscripts.OnFetched:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results: {any}, refreshed: boolean, scope: string)
if scope ~= "topbar" or searchbox.mode ~= "cloudscripts" or deb1 then return end
searchbox.loading = true
deb1 = true
if refreshed then
scriptslist:ClearScripts()
if #results < 1 then
scriptslist:AddScript({
Description = utils:Translate({"No scripts found","Nessuno script trovato","Không tìm thấy kịch bản","Nenhum script encontrado","Tidak ada skrip yang ditemukan","Скрипты не найдены","Keine Skripte gefunden","No se encontraron scripts","Aucun script trouvé","未找到脚本","スクリプトが見つかりません","لم يتم العثور على سكربتات","कोई स्क्रिप्ट नहीं मिली","ไม่พบสคริปต์"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
NoFav = true
})
scriptslist:UpdateList() --:Move(1)
searchbox.loading = false
deb1 = false
return
end
end
for _, info in ipairs(results) do
local img
img = scriptslist:AddScript({
OnFavourite = info.setFavourite,
IsFavourite = info.isFavourite,
Description = info.game,
Title = info.title,
Slug = info.slug,
Image = info.image,
Callback = function()
utils:ShowPopup("CloudScriptInfo", info, {
component = img
})
end
}):GetObject()
info.loadImage(img.instance, true)
RunService.Stepped:Wait()
end
scriptslist:UpdateList()
searchbox.loading = false
deb1 = false
end)))
cloudscripts.OnFetched:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results: {any}, refreshed: boolean, scope: string)
if scope ~= "grid" or searchbox.mode ~= "cloudscripts" or deb2 then return end
searchbox.loading = true
deb2 = true
if refreshed then
for _, v in ipairs(scriptsgrid.instance:GetChildren()) do
if not v:IsA("UIGridLayout") then v:Destroy() end
end
if #results < 1 then
ui:AddComponent("ScriptObj", {
Description = utils:Translate({"No scripts found","Nessuno script trovato","Không tìm thấy kịch bản","Nenhum script encontrado","Tidak ada skrip yang ditemukan","Скрипты не найдены","Keine Skripte gefunden","No se encontraron scripts","Aucun script trouvé","未找到脚本","スクリプトが見つかりません","لم يتم العثور على سكربتات","कोई स्क्रिप्ट नहीं मिली","ไม่พบสคริปต์"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
Parent = scriptsgrid,
NoFav = true
})
searchbox.loading = false
deb2 = false
return
end
end
for i, info in ipairs(results) do
local comp
comp = ui:AddComponent("ScriptObj", {
OnFavourite = info.setFavourite,
IsFavourite = info.isFavourite,
Description = info.game,
Parent = scriptsgrid,
Image = info.image,
Title = info.title,
Slug = info.slug,
LayoutOrder = i,
OnClick = function()
utils:ShowPopup("CloudScriptInfo", info, {
component = comp
})
end
})
info.loadImage(comp.instance, true)
RunService.Stepped:Wait()
end
searchbox.loading = false
deb2 = false
end)))
-- Grid cell size
local scriptslayout = ui:Get("ScriptsGridLayout").instance
local updateCells = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function()
local x = scriptsgrid.instance.AbsoluteSize.X /3 -padding *3
scriptslayout.CellSize = UDim2.fromOffset(x, 9 *x /16)
end))
updateCells()
scriptsgrid.instance:GetPropertyChangedSignal("AbsoluteSize"):Connect(updateCells)
-- Load more
local scripthubscroll: ScrollingFrame = ui:Get("ScriptHubScroll").instance
scripthubscroll:GetPropertyChangedSignal("CanvasPosition"):Connect(LPH_NO_VIRTUALIZE(function()
if framework.utils.maths.floor(scripthubscroll.AbsoluteCanvasSize.Y -scripthubscroll.CanvasPosition.Y)
== framework.utils.maths.floor(scripthubscroll.AbsoluteSize.Y)
then
if searchbox.mode == "serverside" then
return framework.dependencies.serverside:GetGames()
elseif scriptsgrid.lastQuery then
scriptsgrid.lastQuery:Fetch()
end
end
end))
end
do -- Script Hub
local scriptsgrid, scriptslist, searchbox = ui:Get("ScriptsGrid"), ui:Get("CloudBestScriptsBar"), ui:Get("CloudSearchBox")
local scripthub = framework.dependencies.scripthub
local clearScripts = framework.protected:GCProtect(function()
scriptslist:ClearScripts()
for _, v in ipairs(scriptsgrid.instance:GetChildren()) do
if not v:IsA("UIGridLayout") then v:Destroy() end
end
end)
local noResults = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results)
if #results < 1 then
scriptslist:AddScript({
Description = utils:Translate({"No files found","Nessun file trovato","Không tìm thấy tệp nào","Nenhum arquivo encontrado","Tidak ada file yang ditemukan","Файлы не найдены","Keine Dateien gefunden","No se encontraron archivos","Aucun fichier trouvé","未找到文件","ファイルが見つかりません","لم يتم العثور على ملفات","कोई फ़ाइलें नहीं मिलीं","ไม่พบไฟล์"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
IsLocal = true,
NoFav = true
})
ui:AddComponent("ScriptObj", {
Description = utils:Translate({"No files found","Nessun file trovato","Không tìm thấy tệp nào","Nenhum arquivo encontrado","Tidak ada file yang ditemukan","Файлы не найдены","Keine Dateien gefunden","No se encontraron archivos","Aucun fichier trouvé","未找到文件","ファイルが見つかりません","لم يتم العثور على ملفات","कोई फ़ाइलें नहीं मिलीं","ไม่พบไฟล์"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
Parent = scriptsgrid,
IsLocal = true,
NoFav = true
})
scriptslist:UpdateList() --:Move(1)
return true
end
end))
local runService = framework.protected:GetService("RunService")
local loadScripts = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results)
for i, info in ipairs(results) do
local popup = {}
local props = {
IsFavourite = info:GetProperty("favourite"),
Description = info.path,
Parent = scriptsgrid,
Title = info.name,
Slug = info.path,
LayoutOrder = i,
IsLocal = true,
OnClick = function()
utils:ShowPopup("LocalScriptInfo", info, popup)
end,
OnDelete = function()
info:Delete()
popup.component:Remove()
end,
OnFavourite = function()
local status = not (info:GetProperty("favourite") and true or false)
info:SetProperty({ favourite = status })
runService.Heartbeat:Wait()
framework.dependencies.scripthub:Browse(nil, true, "scripthub")
return status
end
}
props.Callback = props.OnClick
popup.component = ui:AddComponent("ScriptObj", props)
local _, content = info:Read()
content = content or {}
if info:GetProperty("favourite")
or framework.utils.tables.find(content.games or {}, game.GameId)
or framework.utils.tables.find(content.places or {}, game.PlaceId)
then
scriptslist:AddScript(props)
end
end
scriptslist:UpdateList()
end))
local loadFolders = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results)
for i, info in ipairs(results) do
ui:AddComponent("ScriptObj", {
LayoutOrder = -100000 +i,
Description = info.path,
Parent = scriptsgrid,
IsFavourite = true,
Title = info.name,
IsFolder = true,
IsLocal = true,
NoFav = true,
OnClick = function()
info:Open()
end
})
end
end))
scripthub.OnQueried:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results: {any}, scope: string)
if (scope ~= "scripthub" and scope ~= "any") or searchbox.mode ~= "scripthub" then return end
clearScripts()
if noResults(results) then return end
loadScripts(results)
end)))
scripthub.OnBrowsed:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(results: {any}, directories: {any}, scope: string)
if (scope ~= "scripthub" and scope ~= "any") or searchbox.mode ~= "scripthub" then return end
ui:Get("PathBar"):SetPath(directories)
clearScripts()
loadFolders(results.folders)
if noResults(results.files) then return end
loadScripts(results.files)
end)))
end
do -- ServerSide games
local serverside = framework.dependencies.serverside
local scriptsgrid, scriptslist = ui:Get("ScriptsGrid"), ui:Get("CloudBestScriptsBar")
local searchbox = ui:Get("CloudSearchBox")
local clearScripts = framework.protected:GCProtect(function()
scriptslist:ClearScripts()
for _, v in ipairs(scriptsgrid.instance:GetChildren()) do
if not v:IsA("UIGridLayout") then v:Destroy() end
end
end)
local loadMore = framework.protected:GCProtect(function()
if searchbox.mode ~= "serverside" then return end
serverside:GetGames()
end)
serverside.OnMessage:Connect(framework.protected:GCProtect(function(msg, arg2, ...: any)
if msg == "Connected" then
ui:Get("EditorSSExecuteButtonShadow").instance.Visible = true
return
elseif msg == "CodeError" then
return utils:ShowToast("ButtonToast", {
AdditionalText = {tostring(arg2)},
AdditionalTitle = {"SS Script Error"}
})
end
end))
serverside.OnFetched:Connect(framework.protected:GCProtect(function(games: {any}, more: boolean)
if searchbox.mode ~= "serverside" then return end
searchbox.loading = true
if not more then
clearScripts()
end
if #games < 1 and not more then
scriptslist:AddScript({
Description = utils:Translate({"No games found","Nessun gioco trovato","Không tìm thấy trò chơi","Nenhum jogo encontrado","Tidak ada game yang ditemukan","Игры не найдены","Keine Spiele gefunden","No se encontraron juegos","Aucun jeu trouvé","未找到游戏","ゲームが見つかりません","لم يتم العثور على ألعاب","कोई गेम नहीं मिला","ไม่พบเกม"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
IsLocal = true,
NoFav = true
})
ui:AddComponent("ScriptObj", {
Description = utils:Translate({"No games found","Nessun gioco trovato","Không tìm thấy trò chơi","Nenhum jogo encontrado","Tidak ada game yang ditemukan","Игры не найдены","Keine Spiele gefunden","No se encontraron juegos","Aucun jeu trouvé","未找到游戏","ゲームが見つかりません","لم يتم العثور على ألعاب","कोई गेम नहीं मिला","ไม่พบเกม"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
Parent = scriptsgrid,
IsLocal = true,
NoFav = true
})
scriptslist:UpdateList()
searchbox.loading = false
return
end
for i, info in ipairs(games) do
local props = {
Description = "Server-Sided Game",
Title = `{info.plrs} 👤 Plrs`,
Parent = scriptsgrid,
OnLoad = loadMore,
LayoutOrder = i,
NoFav = true,
OnClick = function()
utils:ShowToast("ButtonToast", {
AdditionalText = {"Confirm to join the game","Conferma per entrare nel gioco","Xác nhận để tham gia trò chơi","Confirmar para entrar no jogo","Konfirmasi untuk bergabung dalam permainan","Подтвердите, чтобы присоединиться к игре","Bestätigen, um dem Spiel beizutreten","Confirmar para unirse al juego","Confirmer pour rejoindre le jeu","确认加入游戏","ゲームに参加することを確認","تأكيد الانضمام إلى اللعبة","खेल में शामिल होने की पुष्टि करें","ยืนยันการเข้าร่วมเกม"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
serverside:TeleportTo(info.id)
end
})
end
}
props.Callback = props.OnClick
local img = scriptslist:AddScript(props):GetObject()
info.loadImage(img.instance, true)
img = ui:AddComponent("ScriptObj", props)
info.loadImage(img.instance, true)
end
scriptslist:UpdateList()
searchbox.loading = false
end))
end
do -- Best Scripts
local cloudscripts = framework.dependencies.cloudscripts
local bestscripts = ui:Get("BestScriptsBar")
local query = cloudscripts.newQuery(game.GameId, {
verify = framework.enums.ScriptBloxVerify.Verified,
patch = framework.enums.ScriptBloxPatch.Unpatched,
search = framework.enums.ScriptBloxSearch.None,
type = framework.enums.ScriptBloxType.Specific,
sortBy = framework.enums.ScriptBloxSort.Views,
order = framework.enums.ScriptBloxOrder.Desc,
auth = framework.enums.ScriptBloxAuth.None,
mode = framework.enums.ScriptBloxMode.Free
})
task.defer(LPH_NO_VIRTUALIZE(function()
repeat task.wait() until ui.Loaded
local scripts = query:Fetch()
if #scripts < 3 then
scripts = cloudscripts:FetchTrending()
if #scripts < 3 then
bestscripts:AddScript({
Description = utils:Translate({"Try again later.","Riprova più tardi.","Thử lại sau.","Tente novamente mais tarde.","Coba lagi nanti.","Попробуйте позже.","Versuchen Sie es später noch einmal.","Inténtalo de nuevo más tarde.","Réessayez plus tard.","稍后再试。","後でもう一度お試しください。","حاول مرة أخرى لاحقًا.","बाद में पुन: प्रयास करें।","ลองใหม่ภายหลัง"}),
Title = utils:Translate({"No results","Nessun risultato","Không có kết quả","Sem resultados","Tidak ada hasil","Нет результатов","Keine Ergebnisse","Sin resultados","Aucun résultat","无结果","結果がありません","لا توجد نتائج","कोई परिणाम नहीं","ไม่พบผลลัพธ์"}),
NoFav = true,
Callback = function()
-- Popup, "No results were found, try again later."
end
})
return bestscripts:UpdateList()
end
end
for _, info in ipairs(scripts) do
local img
img = bestscripts:AddScript({
OnFavourite = info.setFavourite,
IsFavourite = info.isFavourite,
Description = info.game,
Title = info.title,
Slug = info.slug,
Image = info.image,
Callback = function()
utils:ShowPopup("CloudScriptInfo", info, {
component = img
})
end
}):GetObject()
info.loadImage(img.instance, true)
end
bestscripts:UpdateList()
end))
end
do -- Plugins
local grid, page, content = ui:Get("ExtensionHome"), ui:Get("ExtensionPage"), ui:Get("ExtensionContent")
local backButton, detachButton = ui:Get("ExtensionBackButton"), ui:Get("ExtensionDetachButton")
local plugins = framework.dependencies.plugins
--local parent = ui:Get("Plugins").instance
plugins.OnPluginAtached:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(plug: {any})
backButton.instance.Visible = true
detachButton.instance.Visible = true
content.instance.Visible = true
page.instance.Visible = false
end)))
plugins.OnPluginDetached:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(plug: {any})
backButton.instance.Visible = false
detachButton.instance.Visible = false
content.instance.Visible = false
page.instance.Visible = true
end)))
plugins.OnPluginAdded:Connect(framework.protected:GCProtect(function(data: {any})
local title = data.title or "Extension"
local component
component = ui:AddComponent("ExtensionObj", {
Image = data.icon or "",
Parent = grid,
Title = title,
OnClick = function()
plugins:Open(data.id, content)
end,
OnDelete = data.url and function()
utils:ShowToast("ButtonToast", {
AdditionalText = {`Uninstall {title}?`,`Disinstallare {title}?`,`Gỡ cài đặt {title}?`,`Desinstalar {title}?`,`Copot pemasangan {title}?`,`Удалить {title}?`,`Deinstalliere {title}?`,`¿Desinstalar {title}?`,`Désinstaller {title}?`,`卸载 {title}?`,`{title} をアンインストールしますか?`,`إلغاء تثبيت {title}؟`,`{title} अनइंस्टॉल करें?`,`ถอนการติดตั้ง {title}?`},
AdditionalTitle = {"Uninstall","Disinstalla","Gỡ cài đặt","Desinstalar","Copot pemasangan","Удалить","Deinstallieren","Desinstalar","Désinstaller","卸载","アンインストール","إلغاء التثبيت","अनइंस्टॉल","ถอนการติดตั้ง"},
Style = "confirm",
Callback = function(res: boolean)
if not res then return end
plugins:Remove(data.id)
component:Remove()
end
})
end
})
end))
plugins.OnPluginLoaded:Connect(framework.protected:GCProtect(function(plug: {any}, id: string, ...: any)
local infos = plugins:Setup(id, plug)
plug:SetEnabled(false)
infos:Attach(content)
plug.OnClosed:Connect(framework.protected:GCProtect(function()
infos:Attach(content)
end))
plug.hide(true)
--task.defer(plug.SetEnabled, plug, false)
end))
end
do -- Editor
local editor = framework.utils.inputs.editors:Get("Main_Editor")
local scripthub = framework.dependencies.scripthub
local tabs = framework.dependencies.editortabs
local UIS = framework.protected:GetService("UserInputService")
local savedtabsoffset = 10000 -- slots for unsaved tabs
local maxnamelength = 15
local background = ui:Get("BackgroundGlow")
framework.execution.OnExecuted:Connect(framework.protected:GCProtect(function()
background:Tween(tweens.default, {
ImageColor3 = Color3.fromHex("#707070")
})
task.delay(3, function()
background:Tween(tweens.slow_default, {
ImageColor3 = Color3.fromHex("#000"),
})
end)
end))
do -- Editor Saved Tabs
local savedtabs = framework.protected:GCProtect({})
local formatName = framework.protected:GCProtect(function(name: string, unsaved: boolean?)
if #name > maxnamelength then
name = `{framework.utils.strings.sub(name, 1, maxnamelength)}..`
end
name ..= unsaved and " *" or ""
return name
end)
local list, layout = ui:Get("TabsList"), ui:Get("TabsLayout")
layout.instance:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(framework.protected:GCProtect(function()
list.instance.CanvasSize = UDim2.fromOffset(0, layout.instance.AbsoluteContentSize.Y)
end))
local leastOne = framework.protected:GCProtect(function()
local res = #tabs:GetTabs() < 1
if res then editor:AddTab() end
return res
end)
local addtab = framework.protected:GCProtect(function(idx: number, name: string, saved: boolean, src: string, meta: {any}?)
local component = ui:AddComponent("ScriptTab", {
LayoutOrder = idx,
Parent = list,
Title = name
})
local textlbl = component.instance:FindFirstChildWhichIsA("TextLabel")
local textbox = component.instance:FindFirstChildWhichIsA("TextBox")
local tab, updated
local actions = {
[framework.enums.TabUpdate.Unselected] = function()
local tb = UIS:GetFocusedTextBox()
if tb then tb.FocusLost:Wait() end
component:Unselect()
end,
[framework.enums.TabUpdate.Selected] = function()
updated(framework.enums.TabUpdate.Source)
component:Select()
local data = tab:GetData() -- metti gli id delle immagini qui sure dw
ui:Get("EditorSaveButton").instance.Image = data.isFile and framework.protected:ProtectAsset("rbxassetid://102895040094534") or framework.protected:ProtectAsset("rbxassetid://80105268646831")
ui:Get("FavouriteButtonImage").instance.Image = tab:GetProperty("favourite")
and framework.protected:ProtectAsset("rbxassetid://137934368112423") or "rbxassetid://80350699155696"
end,
[framework.enums.TabUpdate.Removed] = function()
local found = framework.utils.tables.find(savedtabs, tab)
if found then framework.utils.tables.remove(savedtabs, found) end
component:Remove()
leastOne()
end,
[framework.enums.TabUpdate.Source] = function()
if tabs:GetSelection() == tab then
editor:SetText(tab:GetSource())
end
end,
[framework.enums.TabUpdate.Name] = function()
local name = tab:GetName()
textlbl.Text = formatName(name, not tab:GetData().isFile)
textbox.Text = name
end
}
updated = function(updateType: number, ...)
local action = actions[updateType]
if action then action(...) end
end
tab = tabs:AddTab(name, src, component, updated, saved, meta)
tab:GetData().instance = component
updated(framework.enums.TabUpdate.Name)
if saved then framework.utils.tables.insert(savedtabs, tab) end
return tab
end)
local loadsaved = framework.protected:GCProtect(LPH_JIT_MAX(function(res: {any})
for _, tab in ipairs(framework.utils.tables.listCopy(savedtabs)) do tab:Remove() end
for i, file in ipairs(res) do addtab(savedtabsoffset +i, file.name, true, file:Read()) end
end))
function editor:AddTab(name: string?, src: string?, content: {any}?)
local tab = addtab(#tabs:GetTabs() +1, name, false, src or "", content)
tab:Select()
return tab
end
tabs:LoadTabs(framework.protected:GCProtect(function(idx: number, name: string, source: string)
return addtab(idx, name, false, source)
end))
-- For saved tab files
scripthub.OnQueried:Connect(framework.protected:GCProtect(function(res: {any}, scope: string)
if scope ~= "tabs" and scope ~= "any" then return end
loadsaved(res)
end))
scripthub.OnBrowsed:Connect(framework.protected:GCProtect(function(res: {any}, dirs: {any}, scope: string)
if scope ~= "tabs" and scope ~= "any" then return end
loadsaved(res.files)
end))
tabs:GetSaved("tabs")
if not leastOne() then
local all = tabs:GetTabs()
all[#all]:Select()
end
end
do -- Highlighter colors update
--[[
ui.highColors = { -- vscode
local_property = Color3.fromRGB(86, 156, 214), -- keywords: #569CD6
function_color = Color3.fromRGB(220, 220, 170), -- functions: #DCDCAA
local_color = Color3.fromRGB(220, 220, 170), -- same as functions
self_color = Color3.fromRGB(86, 156, 214), -- keywords variant
self_call = Color3.fromRGB(86, 156, 214), -- same
operator = Color3.fromRGB(214, 157, 133), -- operators
comment = Color3.fromRGB(106, 153, 85), -- comments: #6A9955
boolean = Color3.fromRGB(214, 157, 133), -- booleans
numbers = Color3.fromRGB(181, 206, 168), -- numbers: #B5CEA8
call = Color3.fromRGB(86, 156, 214), -- calls: same as keywords
rbx = Color3.fromRGB(86, 156, 214), -- "rbx" library calls
lua = Color3.fromRGB(78, 201, 176), -- maybe types: #4EC9B0
str = Color3.fromRGB(206, 145, 120), -- strings: #CE9178
null = Color3.fromRGB(79, 79, 79) -- literals
}]]
ui.highColors = {
local_property = Color3.fromRGB(255, 98, 138), -- rosa/rosso AI (proprietà locali, parole chiave)
function_color = Color3.fromRGB(255, 198, 91), -- oro caldo per funzioni
local_color = Color3.fromRGB(223, 141, 255), -- lavanda neon (variabili locali)
self_color = Color3.fromRGB(255, 105, 180), -- rosa shocking (self)
self_call = Color3.fromRGB(255, 120, 150), -- rosso AI soft per :call
operator = Color3.fromRGB(255, 92, 92), -- rosso vivo Arceus per simboli `=`, `+`, ecc.
comment = Color3.fromRGB(149, 157, 185), -- grigio violaceo AI-style per commenti
boolean = Color3.fromRGB(255, 128, 64), -- arancio vibrante per `true` / `false`
numbers = Color3.fromRGB(122, 255, 180), -- verde acqua (contrasto neon leggibile)
call = Color3.fromRGB(120, 185, 255), -- azzurro brillante per chiamate funzione
rbx = Color3.fromRGB(185, 130, 255), -- viola Arceus/Roblox
lua = Color3.fromRGB(140, 255, 230), -- turchese AI (per `Instance`, tipi, ecc.)
str = Color3.fromRGB(255, 105, 140), -- rosa caldo per stringhe `"text"`
null = Color3.fromRGB(90, 90, 90) -- grigio neutro scuro per `nil`
}
framework.settings:GetSettingChangedSignal("Colors_Primary"):Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(value: string, default: string)
local succ, err = pcall(Color3.fromHex, value)
value = succ and err or Color3.fromHex(default)
-- set
editor:SetHighlighterColors(ui.highColors)
end)))
end
end
do -- track player
local trackplayer = framework.dependencies.track
local timing = ui:Get("TrackTime").instance
local audio = ui:AddInstance("Sound", {
Id = "SoundTrack"
})
trackplayer:Connect(audio)
local slider = framework.utils.inputs.sliders.horizontal({ui:Get("TrackSlider")}, 0)
slider.OnPercentageChanged:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(percent: number)
trackplayer:SetTime(trackplayer:GetLenght() *percent)
end)))
trackplayer.OnTimeUpdated:Connect(framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function()
local text, percent = trackplayer:GetTiming()
slider:SetPercentage(percent, true)
timing.Text = text
end)))
task.spawn(function()
trackplayer:Play(102518604969857)
trackplayer:Stop()
end)
end
framework.utils.http.OnUrlOpened:Connect(framework.protected:GCProtect(function(url)
framework.utils.clipboard:Set(url)
utils:ShowToast("ButtonToast", {
AdditionalText = {"Link copied to clipboard","Link copiato negli appunti","Liên kết đã sao chép vào khay nhớ tạm","Link copiado para a área de transferência","Tautan disalin ke clipboard","Ссылка скопирована в буфер обмена","Link in die Zwischenablage kopiert","Enlace copiado al portapapeles","Lien copié dans le presse-papiers","链接已复制到剪贴板","リンクがクリップボードにコピーされました","تم نسخ الرابط إلى الحافظة","लिंक क्लिपबोर्ड में कॉपी किया गया","ลิงก์ถูกคัดลอกไปยังคลิปบอร์ด"},
AdditionalTitle = {"Link copied","Link copiato","Liên kết đã sao chép","Enlace copiado","Tautan disalin","Ссылка скопирована","Link kopiert","Link copiado","Lien copié","链接已复制","リンクをコピーしました","تم نسخ الرابط","लिंक कॉपी किया गया","คัดลอกลิงก์แล้ว"}
})
end))
---------------------------------------------------
local animator = framework.animator
local aiColors = {
{255, 0, 0},
{255, 56, 105},
{244, 115, 236},
{21, 166, 254},
{255, 56, 105},
{255, 0, 0},
}
local getScaleFactor = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(resolution)
return framework.utils.maths.min(resolution.X, resolution.Y) /utils:GetAnimationResolution("High").X
end))
local smoothstep = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(edge0, edge1, x)
local t = framework.utils.maths.clamp((x -edge0) /(edge1 -edge0), 0, 1)
return t *t *(3 -2 *t)
end))
local function sdRounded(px, py, L, T, R, B, cr)
local dx = math.max(L+cr - px, 0, px - (R-cr))
local dy = math.max(T+cr - py, 0, py - (B-cr))
local outd = math.sqrt(dx*dx + dy*dy) - cr
if dx==0 and dy==0 then
return -math.min(px - L, R - px, py - T, B - py)
end
return outd
end
local getPaletteColor = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(p)
local n = #aiColors
local seg = p *n
local i1 = framework.utils.maths.floor(seg) %n
local i2 = (i1 +1) %n
local frac = seg -framework.utils.maths.floor(seg)
local c1 = aiColors[i1 +1]
local c2 = aiColors[i2 +1]
local r = c1[1] * (1 -frac) +c2[1] *frac
local g = c1[2] * (1 -frac) +c2[2] *frac
local b = c1[3] * (1 -frac) +c2[3] *frac
return r, g, b
end))
local sdfRoundedRect = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(px, py, w, h, cornerRadius)
local cx = (px +.5) -w/2
local cy = (py +.5) -h/2
local rx = w/2 - cornerRadius
local ry = h/2 - cornerRadius
if rx < 0 then rx = 0 end
if ry < 0 then ry = 0 end
local dx = framework.utils.maths.abs(cx) -rx
local dy = framework.utils.maths.abs(cy) -ry
local outsideDist = framework.utils.maths.sqrt(framework.utils.maths.max(dx, 0)^2 + framework.utils.maths.max(dy, 0)^2)
local insideDist = framework.utils.maths.min(framework.utils.maths.max(dx, dy), 0)
return outsideDist + insideDist - cornerRadius
end))
-- TOAST BACKGROUND GLOW ANIMATION (COMMENTED)
do
-- local image = ui:Get("ToastGlow")
-- -- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
-- local settings = {
-- CornerRadiusRatio = .035, -- Percentuale del lato più corto
-- InnerGlowRadius = 150, -- In "pixel base" (a 128)
-- GlowSoftnessExponent = 30,
-- GlowExtraAlpha = 10,
-- GlowColor = { r = 255, g = 255, b = 255 },
-- BackgroundAlpha = .15*255,
-- UseMultiColorGlow = false,
-- SwirlSpeed = 1,
-- GlowPulseAmplitude = .5,
-- GlowPulseFrequency = .5,
-- LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
-- }
-- -- Aggiungiamo l'animazione tramite il framework
-- utils:AddAnimation(image.id, {
-- Outputs = { image.instance },
-- Duration = 2.5,
-- Resolution = Vector2.new(128, 72),
-- RenderOnLoad = true,
-- }, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
-- local w, h = resolution.X, resolution.Y
-- local TWO_PI = framework.utils.maths.pi *2
-- local t = (frameIndex / totalFrames) *TWO_PI
-- local scaleFactor = getScaleFactor(resolution)
-- local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
-- animator.computePixels(resolution, function(idx, x, y)
-- -- Calcola la distanza dal bordo del rettangolo arrotondato
-- local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
-- local d = framework.utils.maths.abs(shapeDist)
-- -- Applica la scala ai parametri in pixel
-- local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- -- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
-- local effectiveInnerGlowRadius = scaledInnerGlow
-- if x < (w / 2) and settings.LeftGlowBoost>0 then
-- local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
-- effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
-- end
-- -- Calcola il fattore di glow in modo adattivo
-- local factor = 0
-- if d < effectiveInnerGlowRadius then
-- factor = 1 - (d / effectiveInnerGlowRadius)
-- end
-- local baseFade = factor ^ settings.GlowSoftnessExponent
-- local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
-- local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
-- local r, g, b
-- if settings.UseMultiColorGlow then
-- local cx = (x + .5) - (w / 2)
-- local cy = (y + .5) - (h / 2)
-- local angle = framework.utils.maths.atan2(cy, cx)
-- local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
-- swirl = swirl - framework.utils.maths.floor(swirl)
-- local rr, gg, bb = getPaletteColor(swirl)
-- r = rr * finalFade
-- g = gg * finalFade
-- b = bb * finalFade
-- else
-- r = settings.GlowColor.r * finalFade
-- g = settings.GlowColor.g * finalFade
-- b = settings.GlowColor.b * finalFade
-- end
-- local baseAlpha = settings.BackgroundAlpha
-- local glowAlpha = finalFade * settings.GlowExtraAlpha
-- local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
-- writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
-- framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
-- end)
-- end)))
end
-- UI STARTING SCREEN BACKGROUND ANIMATION (COM)
do
local image = ui:Get("StartingScreen")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .035, -- Percentuale del lato più corto
InnerGlowRadius = 3555, -- In "pixel base" (a 128)
GlowSoftnessExponent = 150,
GlowExtraAlpha = 20,
GlowColor = { r = 255, g = 0, b = 0 },
BackgroundAlpha = .75*255,
UseMultiColorGlow = true,
SwirlSpeed = 1,
GlowPulseAmplitude = .5,
GlowPulseFrequency = .5,
LeftGlowBoost = 5, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = 4,
Resolution = Vector2.new(128, 72),
RenderOnLoad = true
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
-- INIT BACKGROUND ANIMATION
if not framework.protected:IsStudio() then
local image = ui:Get("BackgroundOverlay")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .035, -- Percentuale del lato più corto
InnerGlowRadius = 255, -- In "pixel base" (a 128)
GlowSoftnessExponent = 30,
GlowExtraAlpha = 33,
GlowColor = { r = 255, g = 0, b = 0 },
BackgroundAlpha = .5*255,
UseMultiColorGlow = true,
SwirlSpeed = 1,
GlowPulseAmplitude = .5,
GlowPulseFrequency = 1,
LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = 2.5,
Resolution = Vector2.new(128, 72),
--RenderOnLoad = true,
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
-- UI BACKGROUND ANIMATION
do
local image = ui:Get("BackgroundGlow")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .1, -- Percentuale del lato più corto
InnerGlowRadius = 255, -- In "pixel base" (a 128)
GlowSoftnessExponent = 30,
GlowExtraAlpha = 33,
GlowColor = { r = 255, g = 255, b = 255 },
BackgroundAlpha = .75*255,
UseMultiColorGlow = true,
SwirlSpeed = 1,
GlowPulseAmplitude = .5,
GlowPulseFrequency = 1,
LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = 2.5,
Resolution = Vector2.new(128, 72),
--RenderOnLoad = true,
Tags = {"MainFrame"}
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
if framework.protected:IsStudio() then
local image = ui:Get("AnimatedWallpaper")
-- Single-color mode: una sola tonalità per un look ultra-clean
local color = {0, 0, 0} -- puoi cambiare qui il colore [R,G,B]
-- Loop e noise
local durationSeconds = 14
local noiseScale = 1.5
local offsetScale = 1.2
local alphaMax = 90
local gamma = 1.0
-- Funzione smoothstep
local function smoothstep(x)
return x*x*(3 - 2*x)
end
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = durationSeconds,
Tags = { "MainFrame" },
Resolution = Vector2.new(128, 72)
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, res, frameIndex, totalFrames)
local w, h = res.X, res.Y
local tNorm = (frameIndex % totalFrames) / totalFrames
local angle = 2 * math.pi * tNorm
local ox = math.cos(angle) * offsetScale
local oy = math.sin(angle) * offsetScale
-- 2×2 antialiasing offsets
local offs = {0.25, 0.75}
animator.computePixels(res, function(idx, x, y)
if idx < 0 or idx+3 >= w*h*4 then return end
-- media di 4 campioni per pixel (supersampling)
local acc = 0
for _, sx in ipairs(offs) do
for _, sy in ipairs(offs) do
local nx = (x + sx) / w * noiseScale + ox
local ny = (y + sy) / h * noiseScale + oy
acc = acc + ((math.noise(nx, ny, 0) * 0.5) + 0.5)
end
end
local v = acc * 0.25 -- valore medio [0,1]
-- gamma + smoothstep per un contrasto molto dolce
local s = smoothstep(v^gamma)
-- alpha e colore
local a = math.floor(s * alphaMax + 0.5)
if a == 0 then return end -- risparmio calcolo
local r = math.floor(color[1] * 255 + 0.5)
local g = math.floor(color[2] * 255 + 0.5)
local b = math.floor(color[3] * 255 + 0.5)
writePixel(idx, r, g, b, a)
end)
end)))
end
-- SLIDERS CONTAINER, PROFILE PANEL AND BEST SCRIPTS PANEL ANIMATION
do
local image, image2, image3, image4, image5, image6 = ui:Get("SlidersContainerBackground"), ui:Get("ProfilePanelBackground"), ui:Get("HomeTipBackground"), ui:Get("BestScriptsPanelBackground"), ui:Get("AITipsPanelBackground"), ui:Get("AIChatPanelBackgroundOverlay")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .11, -- Percentuale del lato più corto
InnerGlowRadius = 255, -- In "pixel base" (a 128)
GlowSoftnessExponent = 30,
GlowExtraAlpha = 50,
GlowColor = { r = 0, g = 0, b = 0 },
BackgroundAlpha = .45*255,
UseMultiColorGlow = false,
SwirlSpeed = 1,
GlowPulseAmplitude = .2,
GlowPulseFrequency = 1,
LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance, image2.instance, image3.instance, image4.instance, image5.instance, image6.instance },
Duration = 2.5,
--RenderOnLoad = true,
Tags = {"MainFrame"}
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
--[[ ANIMAZIONE SLIDER VERTICALE CON PULSING GLOW, PADDING SEPARATO & DROP/INNER SHADOW (0→100%)
do
local animator = framework.animator
local image, image2, image3 = ui:Get("Slider_Gravity"), ui:Get("Slider_Jump"), ui:Get("Slider_Speed")
local settings = {
-- colore e smussatura
baseColor = {1, 1, 1},
cornerRadius = .7,
paddingLeftPx = 8.5,
paddingRightPx = 9.5,
paddingTopPx = 15.5,
paddingBottomPx = 16.5,
shadowOffsetPx = { x = 0, y = 0 },
shadowRadiusPx = 8,
shadowColor = {1, 1, 1},
shadowOpacity = .4,
glowFrequency = 0,
glowIntensity = .5,
innerShadowRadiusPx = 12.5,
innerShadowColor = {0, 0, 0},
innerShadowOpacity = .35,
bodyAlpha = 255,
}
local resW, resH = 54, 169
-- helper per hit-test su rounded rect
local pointInRounded = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(px, py, L, T, R, B, cr)
if px >= L+cr and px <= R-cr and py >= T and py <= B then return true end
if py >= T+cr and py <= B-cr and px >= L and px <= R then return true end
local corners = {{x=L+cr,y=T+cr},{x=R-cr,y=T+cr},{x=L+cr,y=B-cr},{x=R-cr,y=B-cr}}
for _,c in ipairs(corners) do
local dx, dy = px-c.x, py-c.y
if dx*dx+dy*dy <= cr*cr then return true end
end
return false
end))
local frameGen = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local tNorm = (frameIndex-1)/(totalFrames-1)
-- container bounds e raggio
local L, R = settings.paddingLeftPx, w - settings.paddingRightPx
local T0, B0 = settings.paddingTopPx, h - settings.paddingBottomPx
local effCr = settings.cornerRadius * framework.utils.maths.min(R-L, B0-T0) * .5
-- fill height
local fillTop = B0 - tNorm * (B0 - T0)
local regionH = B0 - fillTop
-- parametri glow/shadow
local shOffX, shOffY = settings.shadowOffsetPx.x, settings.shadowOffsetPx.y
local shR = settings.shadowRadiusPx
local scR,scG,scB = settings.shadowColor[1]*255, settings.shadowColor[2]*255, settings.shadowColor[3]*255
local glow = (framework.utils.maths.sin(2 *framework.utils.maths.pi *settings.glowFrequency *tNorm)+1)*.5 *settings.glowIntensity
local baseShadowOp = settings.shadowOpacity
-- parametri inner shadow
local inR = settings.innerShadowRadiusPx
local iscR,iscG,iscB = settings.innerShadowColor[1]*255, settings.innerShadowColor[2]*255, settings.innerShadowColor[3]*255
animator.computePixels(resolution, function(idx, px, py)
local Rf, Gf, Bf, Af = 0,0,0,0
-- DROP SHADOW + GLOW: bordo del container ma visibile solo nella regione di fill
if regionH > 0 and py >= fillTop - settings.shadowRadiusPx then
local shOpEff = baseShadowOp + glow
-- distance to container rounded rect edge
local dx, dy = 0, 0
local offL = L + effCr + shOffX
local offR = R - effCr + shOffX
local offT = T0 + effCr + shOffY
local offB = B0 - effCr + shOffY
if px < offL then dx = offL - px elseif px > offR then dx = px - offR end
if py < offT then dy = offT - py elseif py > offB then dy = py - offB end
local dRect = (dx>0 and dy>0) and framework.utils.maths.sqrt(dx*dx+dy*dy) or framework.utils.maths.max(dx,dy)
local distToContainer = dRect - effCr
if distToContainer > 0 and distToContainer < shR then
-- clipping all'esterno del container extended by shadowRadius
if pointInRounded(px,py, L-shR, T0-shR, R+shR, B0+shR, effCr+shR) then
local alpha = shOpEff * (1 - distToContainer/shR)
Rf = Rf + scR * alpha; Gf = Gf + scG * alpha; Bf = Bf + scB * alpha
Af = framework.utils.maths.max(Af, framework.utils.maths.floor(alpha*255))
end
end
end
-- FILL principale (solo se c’è realmente fill)
if regionH > 0 and py >= fillTop - settings.shadowRadiusPx and pointInRounded(px,py, L, T0, R, B0, effCr) then
local dC = sdRounded(px, py, L, T0, R, B0, effCr)
-- cov=1 per tutti i pixel interiori, fade su ~1px al bordo
local covF = smoothstep(1*.5, -1*.5, dC)
if covF > 0 then
Rf = settings.baseColor[1]*255
Gf = settings.baseColor[2]*255
Bf = settings.baseColor[3]*255
Af = framework.utils.maths.max(Af, framework.utils.maths.floor(settings.bodyAlpha * covF + .5))
end
end
-- INNER SHADOW sul fill
if regionH > 0 and py >= fillTop - settings.shadowRadiusPx and pointInRounded(px,py, L, T0, R, B0, effCr) then
local dmin = framework.utils.maths.min(px-L, R-px, py-fillTop, B0-py)
local dC2 = sdRounded(px, py, L, fillTop, R, B0, effCr)
if dC2 > -inR and dmin < inR then
local distInside = -framework.utils.maths.min(dC2, 0)
local alpha = settings.innerShadowOpacity * (1 - distInside/inR)
Rf = Rf*(1 - alpha) + iscR*alpha
Gf = Gf*(1 - alpha) + iscG*alpha
Bf = Bf*(1 - alpha) + iscB*alpha
Af = framework.utils.maths.max(Af, framework.utils.maths.floor(alpha*255))
end
end
writePixel(idx,
framework.utils.maths.clamp(framework.utils.maths.floor(Rf+.5),0,255),
framework.utils.maths.clamp(framework.utils.maths.floor(Gf+.5),0,255),
framework.utils.maths.clamp(framework.utils.maths.floor(Bf+.5),0,255),
framework.utils.maths.clamp(framework.utils.maths.floor(Af+.5),0,255))
end)
end))
local a = utils:AddAnimation(image.id, {
Resolution = Vector2.new(resW, resH),
Outputs = {image.instance},
Duration = 2.5
}, frameGen)--:Generate()
utils:AddAnimation(image2.id, {
Resolution = Vector2.new(resW, resH),
Outputs = {image2.instance},
Duration = 2.5,
}, frameGen)
utils:AddAnimation(image3.id, {
Resolution = Vector2.new(resW, resH),
Outputs = {image3.instance},
Duration = 2.5
}, frameGen)
end]]
-- PROFILE OVERLAY ANIMATION
do
local animator = framework.animator
local image, image2= ui:Get("PFPOverlay"), ui:Get("PFPOverlay2")
-- Parametri di personalizzazione (unità base per una risoluzione di riferimento 128×128)
local settings = {
-- Impostazioni per l'inner glow (rosso)
GlowColor = { r = 255, g = 255, b = 255 },
BackgroundAlpha = 0, -- nessun background solido
GlowExtraAlpha = 100,
GlowSoftnessExponent = 5,
InnerGlowRadius = 150, -- valore base in pixel (per risoluzione base 128)
Margin = 0,
-- Corner radius personalizzati (in pixel base; verranno scalati)
CornerRadius = {
topLeft = 50,
topRight = 50,
bottomRight = 50,
bottomLeft = 50,
},
-- Parametri di pulsazione
GlowPulseAmplitude = .3,
GlowPulseFrequency = 1,
}
-- SDF per un rettangolo con corner radii differenti
local sdfRoundedRectMulti = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(px, py, w, h, radii)
local cx = px - w/2
local cy = py - h/2
local r = 0
if cx < 0 and cy < 0 then
r = radii.topLeft
elseif cx >= 0 and cy < 0 then
r = radii.topRight
elseif cx >= 0 and cy >= 0 then
r = radii.bottomRight
else
r = radii.bottomLeft
end
local qx = framework.utils.maths.abs(cx) - (w/2 - r)
local qy = framework.utils.maths.abs(cy) - (h/2 - r)
local outside = framework.utils.maths.sqrt(framework.utils.maths.max(qx, 0)^2 + framework.utils.maths.max(qy, 0)^2)
local inside = framework.utils.maths.min(framework.utils.maths.max(qx, qy), 0)
return outside + inside - r
end))
-- Helper: distanza da un punto a un segmento (con proiezione clamped)
local segmentDistance = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(p, v1, v2)
local vx = v2.x - v1.x
local vy = v2.y - v1.y
local wx = p.x - v1.x
local wy = p.y - v1.y
local dot = vx * wx + vy * wy
local lenSq = vx * vx + vy * vy
local t = framework.utils.maths.clamp(dot / lenSq, 0, 1)
local proj = { x = v1.x + t * vx, y = v1.y + t * vy }
local dx = p.x - proj.x
local dy = p.y - proj.y
return framework.utils.maths.sqrt(dx * dx + dy * dy)
end))
-- Registra l'animazione per il SideNavButton
utils:AddAnimation(image.id, {
Outputs = { image.instance, image2.instance },
Duration = 2.5,
--RenderOnLoad = true,
Tags = {"MainFrame"}
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi * 2
local t = (frameIndex / totalFrames) * TWO_PI
local scaleFactor = getScaleFactor(resolution)
local inset = (settings.Margin or .05) * framework.utils.maths.min(w, h)
local containerX = inset
local containerY = inset
local containerW = w -2 *inset
local containerH = h -2 *inset
local scaledRadii = {
topLeft = settings.CornerRadius.topLeft *scaleFactor,
topRight = settings.CornerRadius.topRight *scaleFactor,
bottomRight = settings.CornerRadius.bottomRight *scaleFactor,
bottomLeft = settings.CornerRadius.bottomLeft *scaleFactor,
}
local scaledInnerGlow = settings.InnerGlowRadius *scaleFactor
local centerX = containerX +containerW /2
local centerY = containerY +containerH /2
-- Funzione per calcolare il fade del background (inner glow) nel container
local function getBackgroundFade(x, y)
local px = x + .5 - containerX
local py = y + .5 - containerY
local sdf = sdfRoundedRectMulti(px, py, containerW, containerH, scaledRadii)
local d = framework.utils.maths.abs(sdf)
local f = 0
if d < scaledInnerGlow then
f = 1 - (d / scaledInnerGlow)
end
local baseFade = f ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
return framework.utils.maths.clamp(baseFade * pulse, 0, 1)
end
animator.computePixels(resolution, function(idx, x, y)
local fade = getBackgroundFade(x, y)
local r_bg = (settings.GlowColor.r or 0) / 255 * fade
local g_bg = (settings.GlowColor.g or 0) / 255 * fade
local b_bg = (settings.GlowColor.b or 0) / 255 * fade
local alpha_bg = framework.utils.maths.clamp(settings.BackgroundAlpha + fade * settings.GlowExtraAlpha, 0, 255)
local finalR, finalG, finalB, finalA = r_bg, g_bg, b_bg, alpha_bg
writePixel(idx,
framework.utils.maths.clamp(framework.utils.maths.floor(finalR * 255 + .5), 0, 255),
framework.utils.maths.clamp(framework.utils.maths.floor(finalG * 255 + .5), 0, 255),
framework.utils.maths.clamp(framework.utils.maths.floor(finalB * 255 + .5), 0, 255),
finalA)
end)
end)))
end
-- AI PANEL ANIMATION
do
local image = ui:Get("AIPanelBackgroundOverlay")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .3, -- Percentuale del lato più corto
InnerGlowRadius = 255, -- In "pixel base" (a 128)
GlowSoftnessExponent = 20,
GlowExtraAlpha = 50,
GlowColor = { r = 255, g = 0, b = 0 },
BackgroundAlpha = .35*255,
UseMultiColorGlow = true,
SwirlSpeed = 1,
GlowPulseAmplitude = .2,
GlowPulseFrequency = 1,
LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = 4,
Resolution = Vector2.new(128, 28),
--RenderOnLoad = true,
Tags = {"MainFrame"}
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
-- AI PLAYER ANIMATION
do
local image = ui:Get("AIPlayerBackgroundOverlay")
-- Parametri di personalizzazione (in unità per la risoluzione base, ad es. 128)
local settings = {
CornerRadiusRatio = .155, -- Percentuale del lato più corto
InnerGlowRadius = 255, -- In "pixel base" (a 128)
GlowSoftnessExponent = 30,
GlowExtraAlpha = 50,
GlowColor = { r = 255, g = 255, b = 255 },
BackgroundAlpha = .45*255,
UseMultiColorGlow = false,
SwirlSpeed = 1,
GlowPulseAmplitude = .5,
GlowPulseFrequency = 1,
LeftGlowBoost = 1, -- Moltiplicatore per il glow a sinistra (1 = nessun boost)
}
-- Aggiungiamo l'animazione tramite il framework
utils:AddAnimation(image.id, {
Outputs = { image.instance },
Duration = 2.5,
--RenderOnLoad = true,
Tags = {"MainFrame"}
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
local TWO_PI = framework.utils.maths.pi *2
local t = (frameIndex / totalFrames) *TWO_PI
local scaleFactor = getScaleFactor(resolution)
local effectiveCornerRadius = framework.utils.maths.min(w, h) * settings.CornerRadiusRatio
animator.computePixels(resolution, function(idx, x, y)
-- Calcola la distanza dal bordo del rettangolo arrotondato
local shapeDist = sdfRoundedRect(x, y, w, h, effectiveCornerRadius)
local d = framework.utils.maths.abs(shapeDist)
-- Applica la scala ai parametri in pixel
local scaledInnerGlow = settings.InnerGlowRadius * scaleFactor
-- Se il pixel è nella metà sinistra, applica un boost (sempre scalato)
local effectiveInnerGlowRadius = scaledInnerGlow
if x < (w / 2) and settings.LeftGlowBoost>0 then
local leftMultiplier = 1 + (settings.LeftGlowBoost - 1) * (1 - (x / (w / 2)))
effectiveInnerGlowRadius = scaledInnerGlow * leftMultiplier
end
-- Calcola il fattore di glow in modo adattivo
local factor = 0
if d < effectiveInnerGlowRadius then
factor = 1 - (d / effectiveInnerGlowRadius)
end
local baseFade = factor ^ settings.GlowSoftnessExponent
local pulse = 1 + settings.GlowPulseAmplitude * framework.utils.maths.sin(settings.GlowPulseFrequency * t)
local finalFade = framework.utils.maths.clamp(baseFade * pulse, 0, 1)
local r, g, b
if settings.UseMultiColorGlow then
local cx = (x + .5) - (w / 2)
local cy = (y + .5) - (h / 2)
local angle = framework.utils.maths.atan2(cy, cx)
local swirl = (angle / TWO_PI) + (settings.SwirlSpeed * t / TWO_PI)
swirl = swirl - framework.utils.maths.floor(swirl)
local rr, gg, bb = getPaletteColor(swirl)
r = rr * finalFade
g = gg * finalFade
b = bb * finalFade
else
r = settings.GlowColor.r * finalFade
g = settings.GlowColor.g * finalFade
b = settings.GlowColor.b * finalFade
end
local baseAlpha = settings.BackgroundAlpha
local glowAlpha = finalFade * settings.GlowExtraAlpha
local alpha = framework.utils.maths.clamp(baseAlpha + glowAlpha, 0, 255)
writePixel(idx, framework.utils.maths.floor(r + .5), framework.utils.maths.floor(g + .5),
framework.utils.maths.floor(b + .5), framework.utils.maths.floor(alpha + .5))
end)
end)))
end
-- ANIMAZIONE AIIcon CON GLOW GRADUALE E SMOOTH LOOP
do
local animator = framework.animator
local image, image2 = ui:Get("AIIcon"), ui:Get("AIIcon2")
local aiColors = {
{1, 0, 0},
{1, 0.22,0.41},
{0.96,0.45,0.93},
{0.08,0.65,1},
{1, 0.22,0.41},
}
local settings = {
coordScale = 1.3,
colorMode = "freeform",
freeformColors = {
{x=-.6,y=-.3,color={1,0,0}},
{x= .6,y=-.2,color={1,0.22,0.41}},
{x=-.4,y=.6, color={0.96,0.45,0.93}},
{x= .4,y=.7, color={0.08,0.65,1}},
},
-- pulsazioni e rotazioni cicliche
colorPulse = 2, -- 2 pulsazioni in 2.5s
colorRotationSpeed = 1, -- 1 rotazione in 2.5s
waveBase = .9,
waveRange = .02,
freq1 = 2,
freq2 = 1,
freq3 = 3,
glowRange = .35,
secondaryGlowFactor = 1,
glowMaxAlpha = .5,
bodyMaxAlpha = 200,
innerShadowWidth = .5,
blurSigma = .7,
}
local AA = 1 / settings.coordScale
local function fract(x) return x - math.floor(x) end
local function clamp(x,a,b) return x<a and a or (x>b and b or x) end
local function smoothstep(e0,e1,x)
local t = clamp((x-e0)/(e1-e0),0,1)
return t*t*(3-2*t)
end
-- colore freeform con rotazione e blur
local getFreeformColor = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(tNorm, nx, ny)
local tAngle = tNorm * 2*math.pi
local ang = tAngle * settings.colorRotationSpeed
local cosA, sinA = framework.utils.maths.cos(ang), framework.utils.maths.sin(ang)
local sumW,sumR,sumG,sumB=0,0,0,0
for _, a in ipairs(settings.freeformColors) do
local ax = a.x * cosA - a.y * sinA
local ay = a.x * sinA + a.y * cosA
local dx, dy = nx-ax, ny-ay
local wght = math.exp(-(dx*dx+dy*dy)/(2*settings.blurSigma^2))
sumW = sumW + wght
sumR = sumR + a.color[1]*wght
sumG = sumG + a.color[2]*wght
sumB = sumB + a.color[3]*wght
end
local r,g,b = sumR/sumW, sumG/sumW, sumB/sumW
-- leggera pulsazione di saturazione
local pulse = 0.5 + 0.5*framework.utils.maths.sin(tAngle*settings.colorPulse/2) -- due volte più lenta
local mix = 0.8 + 0.2*pulse
return clamp(r*mix,0,1), clamp(g*mix,0,1), clamp(b*mix,0,1)
end))
utils:AddAnimation(image.id .. "_SmoothGlowAI", {
Outputs = { image.instance, image2.instance },
RenderOnLoad = true,
Duration = 2.5,
Tags = {"MainFrame"},
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w,h = resolution.X, resolution.Y
local tNorm = (frameIndex-1)/totalFrames
local tAngle = tNorm * 2*math.pi
animator.computePixels(resolution, function(idx, px, py)
local nx = (((px+.5)/w)*2-1)*settings.coordScale
local ny = (((py+.5)/h)*2-1)*settings.coordScale
local dist = framework.utils.maths.sqrt(nx^2+ny^2)
local angD = framework.utils.maths.atan2(ny,nx)
-- raggio ondulato
local waveR = settings.waveBase
+ settings.waveRange*.5 * framework.utils.maths.sin(tAngle*settings.freq1 + angD*3)
+ settings.waveRange*.3 * framework.utils.maths.sin(tAngle*settings.freq2 - angD*2)
+ settings.waveRange*.2 * framework.utils.maths.sin(tAngle*settings.freq3 + angD*5)
waveR = framework.utils.maths.clamp(waveR, .1, 1.1)
local R,G,B,A = 0,0,0,0
if dist < waveR + settings.glowRange then
-- colore
R,G,B = getFreeformColor(tNorm, nx, ny)
if dist < waveR then
-- corpo pieno
A = settings.bodyMaxAlpha
else
-- **pulsazione glow graduale**: uso una sin modulata per rendere il fade dolce
local glowFrac = (dist - waveR) / settings.glowRange
local baseAlpha = (1 - glowFrac) * settings.glowMaxAlpha
local pulseGlow = 0.5 + 0.5 * framework.utils.maths.sin(tAngle * 0.5) -- mezza velocità
local alphaF = baseAlpha * pulseGlow
A = framework.utils.maths.floor(alphaF * 255 + 0.5)
end
end
writePixel(idx,
framework.utils.maths.clamp(math.floor(R*255+.5),0,255),
framework.utils.maths.clamp(math.floor(G*255+.5),0,255),
framework.utils.maths.clamp(math.floor(B*255+.5),0,255),
A
)
end)
end)))
end
-- CLOSE/MAXIMIZE BUTTON ORB LOOP INFINITO E SMOOTH
do
local animator = framework.animator
local image, image2 = ui:Get("CloseButton"), ui:Get("MaximizeButton")
local settings = {
coordScale = 2,
baseColor = {1, 1, 1},
waveBase = .9,
waveRange = .035,
-- Frequenze in cicli interi per un loop seamless
freq1 = 2, -- 2 oscillazioni complete
freq2 = 1, -- 1 oscillazione completa
freq3 = 4, -- 4 oscillazioni complete
glowRange = .4,
glowMaxAlpha = .5,
bodyMaxAlpha = 200,
}
local AA = 1 / settings.coordScale
local function sdCircle(nx, ny, r)
return math.sqrt(nx*nx + ny*ny) - r
end
local function smoothstep(e0, e1, x)
local t = math.clamp((x - e0) / (e1 - e0), 0, 1)
return t * t * (3 - 2*t)
end
utils:AddAnimation(image.id .. "_LoopOrb", {
Outputs = { image.instance, image2.instance },
RenderOnLoad = true,
Duration = 2.5,
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
-- tNorm ∈ [0,1), tAngle ∈ [0,2π)
local tNorm = (frameIndex - 1) / totalFrames
local tAngle = tNorm * (2 * math.pi)
animator.computePixels(resolution, function(idx, px, py)
-- coords normalize [-1,1]
local nx = (((px + .5) / w) * 2 - 1) * settings.coordScale
local ny = (((py + .5) / h) * 2 - 1) * settings.coordScale
-- dynamic radius with integer-cycle sine
local angle = framework.utils.maths.atan2(ny, nx)
local waveR = settings.waveBase
+ settings.waveRange * .5 * framework.utils.maths.sin(tAngle * settings.freq1 + angle * 3)
+ settings.waveRange * .3 * framework.utils.maths.sin(tAngle * settings.freq2 - angle * 2)
+ settings.waveRange * .2 * framework.utils.maths.sin(tAngle * settings.freq3 + angle * 5)
waveR = framework.utils.maths.clamp(waveR, .1, 1.1)
local d = sdCircle(nx, ny, waveR)
-- colore fisso bianco
local r, g, b = settings.baseColor[1], settings.baseColor[2], settings.baseColor[3]
-- body coverage
local covBody = smoothstep(AA * .5, -AA * .5, d)
local alphaBody = covBody * (settings.bodyMaxAlpha / 255)
-- glow coverage & pulsazione
local covGlow = 0
if d > 0 and d < settings.glowRange then
covGlow = smoothstep(settings.glowRange + AA * .5, -AA * .5, d)
end
local pulseGlow = .5 + .5 * framework.utils.maths.sin(tAngle * 1) -- 1 ciclo
local alphaGlow = covGlow * settings.glowMaxAlpha * (.7 + .3 * pulseGlow)
-- alpha finale = max(body, glow)
local a = math.floor(framework.utils.maths.clamp(
math.max(alphaBody, alphaGlow) * 255, 0, 255) + .5)
writePixel(idx,
framework.utils.maths.clamp(math.floor(r*255 + .5), 0, 255),
framework.utils.maths.clamp(math.floor(g*255 + .5), 0, 255),
framework.utils.maths.clamp(math.floor(b*255 + .5), 0, 255),
a
)
end)
end)))
end
-- ORB CONTRASTATO E LOOP INFINITO SEAMLESS
if not framework.protected:IsStudio() then
local animator = framework.animator
local image, image2, image3, image4, image5, image6 =
ui:Get("FloatingIcon"),
ui:Get("SubIcon_Home"),
ui:Get("SubIcon_Executor"),
ui:Get("SubIcon_ScriptHub"),
ui:Get("SubIcon_ArceusIntelligence"),
ui:Get("SubIcon_Extensions")
-- Palette AI normalizzata
local aiColors = {
{1, 0, 0},
{1, 0.22, 0.41},
{0.96, 0.45, 0.93},
{0.08, 0.65, 1},
{1, 0.22, 0.41},
}
local settings = {
coordScale = 1.0,
-- adesso ogni oscillazione è 1 ciclo completo in 1 loop
ringCount = 3,
ringWidth = {0.03, 0.045, 0.06},
ringSpeed = {1, 2, 3 }, -- interi
ringWaveAmp = {0.03, 0.04, 0.05 },
ringWaveFreq = {2, 3, 4 }, -- interi
glowRange = 0.35,
glowAlphaMax = 0.65,
bodyAlphaMax = 255,
particleCount = 80,
particleSpeed = 0.8,
particleSize = 0.01,
shadowWidth = 0.15,
vignetteAmp = 0.6,
}
local AA = 1 / settings.coordScale
local function fract(x) return x - math.floor(x) end
local function clamp(x,a,b) return x<a and a or (x>b and b or x) end
local function smoothstep(e0,e1,x)
local t = clamp((x-e0)/(e1-e0),0,1)
return t*t*(3-2*t)
end
local function hsv2rgb(h,s,v)
local i = math.floor(h*6); local f = h*6 - i
local p, q, t = v*(1-s), v*(1-s*f), v*(1-s*(1-f))
i = i % 6
if i==0 then return v,t,p
elseif i==1 then return q,v,p
elseif i==2 then return p,v,t
elseif i==3 then return p,q,v
elseif i==4 then return t,p,v
else return v,p,q end
end
utils:AddAnimation(image.id .. "_SeamlessOrb", {
Outputs = {
image.instance,
image2.instance,
image3.instance,
image4.instance,
image5.instance,
image6.instance
},
RenderOnLoad = true,
Duration = 5.0, -- rimane 5s, ma tutto è sincronizzato
}, framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function(writePixel, resolution, frameIndex, totalFrames)
local w, h = resolution.X, resolution.Y
-- tNorm [0,1), tAngle [0,2π)
local tNorm = (frameIndex-1) / totalFrames
local tAngle = tNorm * (2 * math.pi)
-- particelle frame-specifiche
local particles = {}
for i=1,settings.particleCount do
local a = math.random() * 2 * math.pi
local s = settings.particleSpeed * (0.5 + math.random() * 0.5)
particles[i] = { vx = math.cos(a)*s, vy = math.sin(a)*s, life = math.random() }
end
animator.computePixels(resolution, function(idx, px, py)
local ux = (px + .5)/w*2 - 1
local uy = (py + .5)/h*2 - 1
local nx, ny = ux * settings.coordScale, uy * settings.coordScale
local r = math.sqrt(nx*nx + ny*ny)
local angle = math.atan2(ny, nx)
-- colore orb
-- mf varia da 0→1→0 in un ciclo esatto
local mf = 0.5 + 0.5 * math.sin(tAngle * 1) -- 1 ciclo
local ci = math.floor(mf * (#aiColors-1)) + 1
local c0, c1 = aiColors[ci], aiColors[ci+1] or aiColors[1]
local lerp = fract(mf * (#aiColors-1))
local br = c0[1] + (c1[1]-c0[1])*lerp
local bg = c0[2] + (c1[2]-c0[2])*lerp
local bb = c0[3] + (c1[3]-c0[3])*lerp
-- pulsazione: 1 ciclo perfetto in tNorm
local pulse = 1 + 0.1 * math.sin(tAngle * 1)
-- corpo
local bodyCov = smoothstep(settings.ringWidth[1]*pulse,
settings.ringWidth[1]*pulse - AA, r)
local aBody = bodyCov * (settings.bodyAlphaMax/255)
-- glow
local glowCov = 0
if r > settings.ringWidth[#settings.ringWidth]*pulse
and r < settings.ringWidth[#settings.ringWidth]*pulse + settings.glowRange then
glowCov = smoothstep(
settings.ringWidth[#settings.ringWidth]*pulse + settings.glowRange,
settings.ringWidth[#settings.ringWidth]*pulse,
r
)
end
local aGlow = glowCov * settings.glowAlphaMax
-- anelli fluidi: ognuno completa N cicli in tNorm
local aRings = 0
for i=1,settings.ringCount do
local w0 = settings.ringWidth[i]*pulse
local phase = tAngle * settings.ringSpeed[i]
local waveR = w0 + settings.ringWaveAmp[i] *
math.sin( phase + r * settings.ringWaveFreq[i] )
local cov = smoothstep(waveR + AA, waveR - AA, r)
aRings = math.max(aRings, cov)
end
-- particelle
local aPart = 0
for _,p in ipairs(particles) do
local pxn = p.vx * p.life * pulse
local pyn = p.vy * p.life * pulse
local dist = math.sqrt((nx-pxn)^2 + (ny-pyn)^2)
if dist < settings.particleSize then
aPart = math.max(aPart, (1-p.life)*p.life*5)
end
end
-- ombra interna
local shadow = smoothstep(settings.shadowWidth + AA,
settings.shadowWidth - AA, r)
local vign = 1 - smoothstep(0.7,1.0,r) * settings.vignetteAmp
-- composizione finale
local alpha = math.max(aBody, aGlow, aRings, aPart)
local cr = br * vign * (1 - shadow*0.5)
local cg = bg * vign * (1 - shadow*0.5)
local cb = bb * vign * (1 - shadow*0.5)
local a = math.floor(clamp(alpha * 255,0,255)+0.5)
writePixel(idx,
clamp(math.floor(cr*255+.5),0,255),
clamp(math.floor(cg*255+.5),0,255),
clamp(math.floor(cb*255+.5),0,255),
a
)
end)
end)))
end
utils:EndSetup()
ui.nextSize(framework.enums.WindowState.Base)
ui.Loaded = true
return ui
end
framework.dependencies:Add("gui", framework.protected:ProtectTable(this))
end
do -- arceus intelligence
local axintelligence, customCmds = {}, framework.protected:GCProtect({})
local arcyTable = framework.protected:GCProtect({})
local lastPrompt, gameInfos = "", "; The following are information about the current game's place the user is playing:"
..`- Place Id: {game.PlaceId}, use this to determinate the place's id`
..`- Game Id: {game.GameId}, use this to determinate the game's id`
task.spawn(function()
local market = framework.protected:GetService("MarketplaceService")
local succ, err = pcall(market.GetProductInfo, market, game.PlaceId)
if not succ or not err then return end
gameInfos ..= (`- Place name: {err.Name}, use this to determinate the place name if required`
..`- Place creator: {err.Creator.Name}, use this to determinate the place creator's name if required`)
end);
(framework.env.getgenv() or {}).arcy = arcyTable
local processMessage = framework.protected:GCProtect(LPH_JIT(function(msg: string)
msg = framework.utils.strings.split(msg, "```")
local data = { codes = {}, texts = {} }
for i=1, #msg, 2 do
framework.utils.tables.insert(data.texts, msg[i])
end
for i=2, #msg, 2 do
local mess = msg[i]
if framework.utils.strings.sub(mess, 1, 4):lower() == "luau" then
mess = framework.utils.strings.sub(mess, 5)
elseif framework.utils.strings.sub(mess, 1, 3):lower() == "lua" then
mess = framework.utils.strings.sub(mess, 4)
end
framework.utils.tables.insert(data.codes, mess)
end
return data
end))
function axintelligence:Chat(prompt: string)
if prompt == lastPrompt or framework.utils.strings.gsub(prompt, "%s", "") == "" then return end
local exploit = framework.dependencies.exploit
local name, ver = framework.env.identifyexecutor()
local player = framework.protected:GetService("Players").LocalPlayer
local sysInfo = "The following are information about the app the user have installed on their device, use these only if needed:"
..`- Operating System: {exploit:IsIos() and "iOS" or (`Android{exploit:IsVng() and " VNG" or ""}`)}`
..`- App Version: {ver} - App Identity: {name};`
..`The following are information about the user, use these only if needed:`
..`- Device hwid/User identificator: {exploit:GetHwid()}`
..`- User Name: {player.DisplayName}, use this when refeering to him`
..`- User Username: {player.Name}, use this when needed in scripts;`
.."You can use the following custom functions accessible from the env within the 'arcy' table:"
for name, values in pairs(customCmds) do
sysInfo ..= `arcy.{values.format}: {values.desc}`
end
sysInfo ..= gameInfos
local token = framework.settings:GetSetting("User_AI_OpenAI")
if token ~= "" then
return processMessage("Response from OpenAI")
end
local req = framework.utils.http:Request(`{endpoints.api}/chat`, "POST", {
[LPH_ENCSTR("Content-Type")] = LPH_ENCSTR("application/json")
}, {
email = framework.protected:IsStudio() and LPH_ENCSTR("arceusxhelp@gmail.com") or framework.settings:GetSetting(LPH_ENCSTR("User_EMail")),
hwid = framework.protected:IsStudio() and LPH_ENCSTR("4cd6f60cb195d6d9") or framework.dependencies.exploit:GetHwid(),
syskey = sysInfo,
key = prompt
})
local fail = "Arceus Intelligence is not available, please try again later."
if not req then return processMessage(fail) end
local json = framework.utils.http.json.decode(req.Body)
if not json.success then return processMessage(fail) end
return processMessage(json.message or fail)
end
function axintelligence:AddCustomFunction(name: string, desc: string, format: string, funct: (any) -> ())
arcyTable[name] = framework.env.newcclosure(framework.env.GCProtectedFunction(funct))
customCmds[name] = {
format = format,
desc = desc
}
end
framework.dependencies:Add("axintelligence", framework.protected:ProtectTable(axintelligence))
end
do -- track player
local marketplace = framework.protected:GetService("MarketplaceService")
local track, cache = {}, framework.utils.caches.newCache()
local timeUpdate = framework.signals.newEvent()
local sound, conn, deb, playing, paused
track.OnTimeUpdated = timeUpdate
function track:Connect(track: Sound)
sound = framework.utils.instances.getRobloxInstance(track)
end
track.Play = LPH_JIT(function(self, url: string?)
if deb then return end
paused = false
deb = true
self:Stop()
local content = framework.protected:ProtectAsset(`rbxassetid://{url}`)
local data = cache:Get(url)
if not url then
content = sound.SoundId
local id = framework.utils.strings.gsub(content, "rbxassetid://", "")
data = { IsPublicDomain = not not tonumber(id) }
elseif tonumber(url) then
if not data then
local succ, err = pcall(marketplace.GetProductInfo, marketplace, url)
if not succ or not err then deb = false return end
cache:Push(url, err)
data = err
end
else
-- temp disabled
if true then deb = false return end
local name = framework.utils.strings.split("?v=")
if #name < 2 then deb = false return end
name = framework.protected:ProtectAsset(`{name[#name]}.mp3`)
if not ARCEUS_FOLDERS.CACHE:IsFile(name) then
-- download
local info = {
Creator = { Name = "IDK" },
IsPublicDomain = true,
Name = "IDK"
}
ARCEUS_FOLDERS.CACHE:WriteFile(name, "raw")
cache:Push(url, info)
data = info
end
local succ, asset = pcall(framework.env.getcustomasset, name)
content = succ and asset or content
end
if not data.IsPublicDomain then deb = false return end
sound.SoundId = content
sound.Looped = true
if not sound.IsLoaded then sound.Loaded:Wait() end
playing = true
conn = task.spawn(LPH_NO_VIRTUALIZE(function()
while playing do
if not sound.Looped and sound.TimePosition >= sound.TimeLength then break end
timeUpdate:Fire(sound.TimePosition)
task.wait(1)
end
end))
sound:Play()
deb = false
return data
end)
function track:GetTiming()
return `{framework.utils.datetimes.secondsToMS(sound.TimePosition)} / {framework.utils.datetimes.secondsToMS(sound.TimeLength)}`, sound.TimePosition/sound.TimeLength
end
function track:GetLenght()
return sound.TimeLength
end
function track:SetTime(seconds: number)
sound.TimePosition = framework.utils.maths.clamp(seconds, 0, sound.TimeLength)
timeUpdate:Fire(sound.TimePosition)
end
function track:Toggle()
if not playing then return self:Play() end
if paused then
sound:Resume()
paused = false
return true
end
paused = true
sound:Pause()
return false
end
function track:Stop()
playing = false
if conn then task.cancel(conn) conn = nil end
sound:Stop()
end
function track:IsPaused()
return paused
end
framework.dependencies:Add("track", framework.protected:ProtectTable(track))
end
do -- plugins
local plugins = framework.protected:IsStudio() and require(script.Parent.Parent:WaitForChild("Arceus Plugins"):WaitForChild("Loader")) or
loadstring(framework.utils.http:Get(`{endpoints.arceus_neo}/plugin-loader`))(framework)
local added, atached, detached = framework.signals.newEvent(), framework.signals.newEvent(), framework.signals.newEvent()
local infos = framework.protected:GCProtect({})
local getPlugin = framework.protected:GCProtect(function(id: string)
for i, info in ipairs(infos) do
if info.id == id then return info, i end
end
return false, 0
end)
plugins.OnPluginAdded = added
plugins.OnPluginAtached = atached
plugins.OnPluginDetached = detached
function plugins:Setup(id: string, plug: {any})
local info = getPlugin(id)
if not info then return false end
info.instance = plug
function info:Detach()
plug.attach()
plug.show(true)
--plug:SetEnabled(true)
detached:Fire(plug)
end
function info:Attach(parent: {any})
plug:SetEnabled(false)
plug.detach(parent)
atached:Fire(plug)
end
return info
end
local last
function plugins:Open(id: string, parent: {any})
local info = getPlugin(id)
if not info then return false end
last = id
if not info.thread then
local succ, thread = pcall(task.spawn, plugins.Load, plugins, info.source, info.id)
if not succ then return framework.console.warn(`Error while loading '{info.title}' plugin: {thread}`) end
info.thread = thread
elseif info.instance then
info:Attach(parent)
end
end
function plugins:GetLastOpened()
return last and self:Get(last) or nil
end
local loaded = 0
function plugins:Add(info: {string})
if info.id and getPlugin(info.id) then return end
local data = {
source = info.source or "error('Missing plugin source')",
title = info.title or "Unknown",
id = info.id or `Plugin_{loaded}`,
icon = info.icon,
url = info.url
}
loaded += 1
table.insert(infos, data)
added:Fire(data)
end
function plugins:Remove(id: string)
local info, idx = getPlugin(id)
if not info then return false end
if last == id then last = nil end
table.remove(infos, idx)
if info.url then
local plugs = self:GetSaved()
local found = framework.utils.tables.find(plugs, info.url)
if found then framework.utils.tables.remove(plugs, found) end
self:Save(plugs)
end
if info.thread then task.cancel(info.thread) end
if info.instance then
info.instance.attach()
info.instance:Remove()
end
end
function plugins:GetSaved()
return ARCEUS_FOLDERS.CONFIGS:ReadJsonFile(EXPLOIT_CONFIGS.PLUGINS_FILE, EXPLOIT_CONFIGS.FILES_KEY) or {}
end
function plugins:Install(url: string)
if framework.utils.strings.gsub(url, "%s", "") == "" then return end
local res = framework.utils.http:Request(url, "GET")
if not res then return end
local json = framework.utils.http.json.decode(res.Body)
if not json then return end
local plugs = self:GetSaved()
framework.utils.tables.insert(plugs, url)
self:Save(plugs)
json.url = url
self:Add(json)
end
function plugins:Save(data: {any})
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile(EXPLOIT_CONFIGS.PLUGINS_FILE, data, EXPLOIT_CONFIGS.FILES_KEY)
end
function plugins:Get(id: string)
return getPlugin(id)
end
framework.dependencies:Add("plugins", framework.protected:ProtectTable(plugins))
end
do -- exploit
local exploit = {}
local urlAttemp = framework.signals.newEvent()
exploit.OnUrlAttemp = urlAttemp
function exploit:IsIos()
return OS_CONFIGS.IS_IOS
end
function exploit:IsVng()
return OS_CONFIGS.IS_VNG
end
function exploit:GetHwid()
return OS_CONFIGS.HWID
end
function exploit:GetDeviceInfo(stat: string)
return OS_CONFIGS.DEVICE_INFO(stat, LPH_ENCSTR("asjhidaheruiwepwasjdhs"))
end
function exploit:LoadUrl(url: string, retries: number?, del: number?, ...)
local res, c = nil, 0
retries = retries or 3
del = del or 2
repeat
if res ~= nil then
c += 1
if retries > 0 and c > retries then break end
task.wait(del)
end
urlAttemp:Fire(url, c)
res = framework.utils.http:Request(url, ...)
until res
urlAttemp:Fire(url, c, res.Body)
return res.Body
end
function exploit:DecryptData(data: string)
return framework.utils.crypt.bytes(framework.utils.crypt.base64.decode(data), EXPLOIT_CONFIGS.FILES_KEY)
end
function exploit:EncryptData(data: string)
return framework.utils.crypt.base64.encode(framework.utils.crypt.bytes(data, EXPLOIT_CONFIGS.FILES_KEY))
end
function exploit:DownloadFile(path: string)
local res = framework.utils.http:Request(`{endpoints.arceus_v}{path}`)
return res and res.Body or false
end
exploit.GetMetadata = function(self, data: {any}|string, source: string?)
data = data or {}
if typeof(data) == "string" then
local firstLine, restOfScript = framework.utils.strings.match(data, "^(.-)\n(.*)$")
if not firstLine then return false, data end
local metadata = framework.utils.strings.match(firstLine, "^%-%-@ArceusMetadata:(.*)$")
if not metadata then return false, data end
return framework.utils.http.json.decode(exploit:DecryptData(metadata)), restOfScript
else
local plrs = framework.protected:GetService("Players")
local tim = os.time()
local current = {
email = framework.settings:GetSetting(LPH_ENCSTR("User_EMail")),
userId = plrs.LocalPlayer.UserId,
hwid = exploit:GetHwid()
}
data.creation = data.creation or tim
data.author = data.author or current
data.editor = current
data.viewed = tim
local json = framework.utils.http.json.encode(data)
if not json then return false, source end
return `--@ArceusMetadata:{exploit:EncryptData(json)}\n{source or ""}`
end
end
exploit.Migrate = LPH_JIT(function(self)
-- Migrate auto-executed files
for _, file in ipairs(ARCEUS_FOLDERS.AUTOEXECUTE:ListFiles()) do
local src = framework.storage.readFile(nil, file)
if not src then continue end
local data, source = self:GetMetadata(src)
if data and data.migrated then continue end
local name = framework.utils.strings.split(file, "/")
name = name[#name]
local meta = self:GetMetadata({
autoexecute = true,
migrated = true
}, source)
--ARCEUS_FOLDERS.AUTOEXECUTE:WriteFile(name, meta)
ARCEUS_FOLDERS.SCRIPT_HUB:WriteFile(name, meta)
end
do -- Migrate tabs
local old_tabs = ARCEUS_FOLDERS.CONFIGS:ReadJsonFile("tabs.ax", "AXExecutor")
local tabs = framework.dependencies.editortabs
if old_tabs then
local new_tabs = tabs:ReadTabs()
for _, tab in ipairs(old_tabs) do
if tab.migrated then continue end
tab.migrated = true
framework.utils.tables.insert(new_tabs, {
src = tab.Source,
name = tab.Name
})
end
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile("tabs.ax", old_tabs, "AXExecutor")
tabs:WriteTabs(new_tabs)
end
end
end)
framework.dependencies:Add("exploit", framework.protected:ProtectTable(exploit))
end
do -- scripts hub
local hub = {}
local history, historyIdx = framework.protected:GCProtect({}), 0
local browsed = framework.signals.newEvent()
local queried = framework.signals.newEvent()
local sortFiles = framework.protected:GCProtect(function(files: {any})
local now = os.time()
framework.utils.tables.sort(files, LPH_NO_VIRTUALIZE(function(a, b)
local _, metaA, _, metaB = a:Read(), b:Read()
if metaA and metaA.edited and metaB and metaB.edited then
metaA, metaB = metaA.edited, metaB.edited
else
metaA, metaB = a.name, b.name
end
return metaA < metaB
end))
return files
end)
local duplicated
duplicated = framework.protected:GCProtect(LPH_JIT_MAX(function(directory: string, name: string, extension: string, overwrite: boolean?, counter: number)
counter = counter or 0
local path = `{directory}/{name}{(counter > 0 and ` ({counter})` or "")}.{extension}`
if not overwrite and ARCEUS_FOLDERS.SCRIPT_HUB:IsFile(path) then
return duplicated(directory, name, extension, false, counter +1)
end
return path
end))
local connectFile = framework.protected:GCProtect(function(info: {any})
local ext = framework.utils.strings.split(info.name, ".")
info.extension = framework.utils.strings.lower(ext[#ext])
info.name = ext[framework.utils.maths.clamp(#ext -1, 1, #ext)]
function info:Read()
local source, content
if self:IsLua() then
local src = framework.storage.readFile(nil, self.path)
content, source = framework.dependencies.exploit:GetMetadata(src or "")
elseif self:IsJson() then
source = framework.storage.readJsonFile(nil, self.path)
end
return source, content
end
function info:Write(source: string, content: {any}?)
if self:IsLua() then
if not content then _, content = self:Read() end
source = framework.dependencies.exploit:GetMetadata(content, source)
framework.storage.writeFile(nil, self.path, source)
elseif self:IsJson() then
framework.storage.writeJsonFile(nil, self.path, source)
end
end
function info:SetProperty(props: {any})
if not self:IsLua() then return end
local source, content = self:Read()
content = content or {}
for prop, value in pairs(props) do
content[prop] = value
end
self:Write(source, content)
end
function info:GetProperty(prop: string)
if not self:IsLua() then return end
local _, content = self:Read()
return (content or {})[prop]
end
function info:Delete() framework.storage.deleteFile(nil, self.path) end
function info:Rename(name: string, extension: string?)
extension = extension and framework.utils.strings.lower(extension) or "lua"
name = framework.utils.strings.gsub(name, "[./]", "")
if name == self.name then return false end
local path = framework.utils.strings.gsub(self.path, self.name, "")
path = duplicated(path, name, extension)
local content = framework.storage.readFile(nil, self.path)
if not content then return false end
framework.storage.writeFile(nil, path, content)
framework.storage.deleteFile(nil, self.path)
self.extension = extension
self.name = name
self.path = path
return true
end
function info:IsLua()
return self.extension == "lua" or self.extension == "luau"
end
function info:IsJson()
return self.extension == "json"
end
return info
end)
local clone
clone = framework.protected:GCProtect(LPH_JIT_MAX(function(path: string, dest: string)
for _, file in ipairs(framework.storage.listFiles(nil, path)) do
local content = framework.storage.readFile(nil, file)
local last = framework.utils.strings.split(file, "/")
local dest = `{dest}/{last[#last]}`
if not content then -- is folder
framework.storage.makeFolder(nil, dest)
clone(file, dest)
continue
end
framework.storage.writeFile(nil, dest, content)
end
end))
local deeprecursion
deeprecursion = framework.protected:GCProtect(LPH_JIT_MAX(function(path: string, data: {any}, indent: {any}, action: (filePath: string, fileName: string) -> boolean)
for _, file in ipairs(framework.storage.listFiles(nil, path)) do
local last = framework.utils.strings.split(file, "/")
last = last[#last]
if framework.storage.isFolder(nil, file) then
local indent = framework.utils.tables.deepCopy(indent)
framework.utils.tables.insert(indent, last)
deeprecursion(file, data, indent, action)
continue
end
if action(path, last) then
framework.utils.tables.insert(data, connectFile({
indent = indent,
path = file,
name = last
}))
end
end
sortFiles(data)
return data
end))
hub.OnBrowsed = browsed
hub.OnQueried = queried
function hub:SetHistory(path: string, overwrite: boolean?)
if overwrite then
for i=historyIdx +1, #history, 1 do
framework.utils.tables.remove(history, i)
end
end
framework.utils.tables.insert(history, path)
historyIdx = #history
end
function hub:LastBrowsed()
return history[historyIdx] or ""
end
function hub:BrowsePrevious(...: any)
local path = history[historyIdx -1]
if path then
historyIdx -= 1
return self:Browse(path, true, ...)
end
end
function hub:BrowseNext(...: any)
local path = history[historyIdx +1]
if path then
historyIdx += 1
return self:Browse(path, true, ...)
end
end
hub:SetHistory(ARCEUS_FOLDERS.SCRIPT_HUB.path)
function hub:Browse(path: string, dontHistory: boolean?, ...: any)
local data = { folders = {}, files = {} }
path = path or self:LastBrowsed()
local extra = {...}
path = framework.utils.strings.gsub(path, `{ARCEUS_FOLDERS.SCRIPT_HUB.path}`, "")
path = framework.utils.strings.sub(path, 1, 1) == "/" and framework.utils.strings.sub(path, 2) or path
path = framework.utils.strings.sub(path, 1, 1) == "/" and framework.utils.strings.sub(path, 2) or path
if not dontHistory then self:SetHistory(path, true) end
for _, file in ipairs(ARCEUS_FOLDERS.SCRIPT_HUB:ListFiles(path)) do
file = framework.utils.strings.gsub(file, "//", "/")
local name = framework.utils.strings.split(file, "/")
name = name[#name]
local info = { path = file, name = name }
local isfile = framework.storage.isFile(nil, file)
if isfile then
framework.utils.tables.insert(data.files, connectFile(info))
continue
end
function info:Delete() framework.storage.deleteFolder(nil, self.path) end
function info:Open()
return hub:Browse(self.path, false, framework.utils.tables.unpack(extra))
end
function info:Rename(name: string)
if name == self.name then return false end
local path = framework.utils.strings.gsub(self.path, self.name, "")
name = framework.utils.strings.gsub(name, "[./]", "")
path = duplicated(path, name, "")
framework.storage.makeFolder(nil, path)
clone(self.path, path)
framework.storage.deleteFolder(nil, self.path)
self.name = name
self.path = path
return true
end
framework.utils.tables.insert(data.folders, info)
end
local basePath = ARCEUS_FOLDERS.SCRIPT_HUB.path
local fullPath = `{basePath}/{path}`
--fullPath = framework.protected:GCProtect(fullPath, "//", "/")
local directories, splittedDirectory = {}, framework.utils.strings.split(fullPath, "/")
for i, directory in ipairs(splittedDirectory) do
local info = { name = directory }
local path = basePath
for j=2, i, 1 do
path ..= `/{splittedDirectory[j]}`
end
info.path = path
function info:Browse()
hub:Browse(self.path, false, framework.utils.tables.unpack(extra))
end
framework.utils.tables.insert(directories, info)
end
sortFiles(data.files)
framework.utils.tables.sort(data.folders, function(a, b)
return a.name < b.name
end)
browsed:Fire(data, directories, ...)
return data, directories
end
function hub:Search(query: string, path: string?, ...: any)
if not query or query == "" then return self:Browse(path, false, ...) end
path = path or self:LastBrowsed()
local res = deeprecursion(path, {}, {}, function(path: string, name: string)
return not not framework.utils.strings.find(framework.utils.strings.lower(name), query)
end)
queried:Fire(res, ...)
return res
end
--props = { prop = {true, false}, prop = {"str"} }
function hub:FindByProperties(props: {string}, path: string?, ...: any)
path = path or self:LastBrowsed()
local res = deeprecursion(path, {}, {}, function(path: string, name: string)
local content = ARCEUS_FOLDERS.TABS:ReadFile(name)
if not content then return false end
local meta = framework.dependencies.exploit:GetMetadata(content)
if not meta then return false end
for prop, values in pairs(props) do
if meta[prop] == nil then return false end
local found = false
for _, value in ipairs(values) do
if meta[prop] == value then found = true end
end
if not found then return false end
end return true
end)
queried:Fire(res, ...)
return res
end
function hub:NewFile(name: string, source: string, extension: string?, content: {any}?, path: string?, overwrite: boolean?, browse: boolean?)
path = path and framework.utils.strings.gsub(path, `/{ARCEUS_FOLDERS.SCRIPT_HUB.path}`, "")
local directory = path or self:LastBrowsed()
name = framework.utils.strings.gsub(name, "[./]", "")
extension = extension and framework.utils.strings.lower(extension) or "lua"
path = duplicated(directory, name, extension, overwrite)
if extension == "lua" or extension == "luau" then
source = framework.dependencies.exploit:GetMetadata(content, source)
ARCEUS_FOLDERS.SCRIPT_HUB:WriteFile(path, source)
elseif extension == "json" then
ARCEUS_FOLDERS.SCRIPT_HUB:WriteJsonFile(path, source)
end
return self:Browse(directory, not browse and true or false)
end
function hub:NewFolder(name: string, path: string?, browse: boolean?)
local directory = path or self:LastBrowsed()
path = `{directory}/{name}`
local res = ARCEUS_FOLDERS.SCRIPT_HUB:MakeFolder(path)
if res and browse then return self:Browse(directory) end
return res
end
function hub:GetFile(path: string, name: string)
if not ARCEUS_FOLDERS.SCRIPT_HUB:IsFile(`{path}/{name}`) then return end
return connectFile({ path = `{ARCEUS_FOLDERS.SCRIPT_HUB.path}/{path}/{name}`, name = name })
end
framework.dependencies:Add("scripthub", framework.protected:ProtectTable(hub))
end
do -- editor tabs
local editortabs, tabsData = {}, framework.protected:GCProtect({})
local scripthub = framework.dependencies.scripthub
local exploit = framework.dependencies.exploit
local tabs = framework.utils.inputs.tabs.new()
local saveTabs = framework.protected:GCProtect(function(data: {any}?)
local tabs = {}
for _, tab in ipairs(data or tabsData) do
framework.utils.tables.insert(tabs, {
meta = exploit:GetMetadata(tab.meta, "-- Editor"),
name = tab.name,
src = tab.src
})
end
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile(EXPLOIT_CONFIGS.TABS_FILE, tabs)
end)
local getFreeName = framework.protected:GCProtect(function()
local found, idx = true, 0
local name
while found do
idx += 1
found = false
name = `Script n.{idx}`
for _, tab in ipairs(tabsData) do
if tab.name == name then
found = true
break
end
end
end
return name
end)
local formatTab = framework.protected:GCProtect(function(data: {any})
data.name = data.name or getFreeName()
data.src = data.src or ""
return data
end)
tabs.OnTabRemoved:Connect(framework.protected:GCProtect(function(tab: {any})
local data = tab:GetData()
local found = 1
if not data.isFile then
found = framework.utils.tables.find(tabsData, data)
if found then framework.utils.tables.remove(tabsData, found) end
saveTabs()
end
tab:Update(framework.enums.TabUpdate.Removed)
data.updated = nil -- prevent events propagation
local newTab = tabsData[found] or tabsData[found -1]
if newTab then newTab.tab:Select() end
end))
local currentTab
tabs.OnTabSelected:Connect(framework.protected:GCProtect(function(tab: {any}, previous: {any})
currentTab = tab
if previous then local data = previous:GetData()
previous:Update(framework.enums.TabUpdate.Unselected)
end
local data = tab:GetData()
tab:Update(framework.enums.TabUpdate.Selected)
end))
function editortabs:AddTab(name: string, source: string, button: GuiButton, updatedCallback: () -> (), isSaved: boolean?, metadata: {any}?)
local data = formatTab({
updated = updatedCallback,
isFile = isSaved,
meta = metadata,
src = source,
name = name
})
if not isSaved then
framework.utils.tables.insert(tabsData, data)
end
local tab = tabs:Add(button, data)
function tab:SetName(name: string)
if not name or name == "" or name == data.name then return end
if data.isFile then self:Delete(false) end
data.name = name
formatTab(data)
if data.isFile then return self:ToFile(true) end
self:Update(framework.enums.TabUpdate.Name)
saveTabs()
end
function tab:Update(type: number)
if data.updated then data.updated(type) end
end
function tab:GetName()
return data.name
end
function tab:SetSource(src: string)
data.src = tostring(src)
self:Update(framework.enums.TabUpdate.Source)
if data.isFile then return self:ToFile(true) end
saveTabs()
end
function tab:GetSource()
return data.src
end
function tab:SetProperty(prop: string, value: any)
data.meta = data.meta or {}
data.meta[prop] = value
if data.isFile then return self:ToFile(true) end
saveTabs()
end
function tab:GetProperty(prop: string)
data.meta = data.meta or {}
return data.meta[prop]
end
function tab:GetProperties()
return data.meta
end
function tab:ToFile(overwrite: boolean?)
if scripthub:NewFile(data.name, data.src, "lua", data.meta, ARCEUS_FOLDERS.TABS.lastPath, overwrite) then
if not overwrite then return self:Delete(true) end
self:Update(framework.enums.TabUpdate.Name)
data.isFile = true
end
end
function tab:GetFile()
return scripthub:GetFile(ARCEUS_FOLDERS.TABS.lastPath, `{data.name}.lua`)
end
function tab:Delete(remove: boolean)
if self:GetData().isFile then
ARCEUS_FOLDERS.TABS:DeleteFile(`{data.name}.lua`)
end
if remove then self:Remove() end
end
data.tab = tab
return tab
end
function editortabs:GetSelection()
return currentTab
end
function editortabs:GetTabs()
local tabs = {}
for _, tab in ipairs(tabsData) do
framework.utils.tables.insert(tabs, tab.tab)
end
return tabs
end
function editortabs:SearchSaved(query: string, ...: any)
return scripthub:Search(query, ARCEUS_FOLDERS.TABS.path, ...)
end
function editortabs:GetSavedByProperties(props: {string}, ...)
return scripthub:FindByProperties(props, ARCEUS_FOLDERS.TABS.path, ...)
end
function editortabs:GetSaved(...: any)
return scripthub:Browse(ARCEUS_FOLDERS.TABS.lastPath, true, ...)
end
function editortabs:ReadTabs()
return ARCEUS_FOLDERS.CONFIGS:ReadJsonFile(EXPLOIT_CONFIGS.TABS_FILE) or {}
end
function editortabs:WriteTabs(data: {any})
return saveTabs(data)
end
function editortabs:LoadTabs(callback: (idx: number, name: string, source: string) -> tab)
for i, tab in ipairs(self:ReadTabs()) do
local obj = callback(i, tab.name, tab.src)
tab.meta = type(tab.meta) == "string" and tab.meta or ""
obj:GetData().meta = exploit:GetMetadata(tab.meta or "")
end
end
framework.dependencies:Add("editortabs", framework.protected:ProtectTable(editortabs))
end
do -- cloudscripts
local favourites = ARCEUS_FOLDERS.CONFIGS:ReadJsonFile(EXPLOIT_CONFIGS.CLOUD_SCRIPTS, EXPLOIT_CONFIGS.FILES_KEY) or {}
local cloudscripts, configs = {}, {
propsWhitelist = {"title", "verified", "isUniversal", "isPatched", "script", "key", "views", "createdAt", "slug", "features"}
}
local fetchCache, detailsCache = framework.utils.caches.newCache(100), framework.utils.caches.newCache(100)
local favCache, imgCache = framework.utils.caches.newCache(), framework.utils.caches.newCache(100)
local marketplace = framework.protected:GetService("MarketplaceService")
local onFetched = framework.signals.newEvent()
local maxResults
local getimageinfo = framework.protected:GCProtect(function(url: string)
local split = framework.utils.strings.split(url, "/")
local last = framework.utils.strings.sub(url, -4)
if framework.utils.strings.sub(url, 1, framework.utils.strings.len(endpoints.rbxcdn.tr)) == endpoints.rbxcdn.tr and framework.utils.strings.find(url, "/Png") then
return url, `{split[4]}.png`
elseif framework.utils.strings.sub(url, 1, 15) == "/images/script/" and last == ".png" then
return `{endpoints.scriptblox}{url}`, split[4]
end
end)
local loadimage = framework.protected:GCProtect(function(url: string, name: string, gameId: number, img: ImageLabel)
if (not url or framework.protected:IsStudio()) and gameId then
local cached = imgCache:Get(gameId)
if not cached then
local success, result = pcall(marketplace.GetProductInfo, marketplace, gameId)
if not success or not result.IconImageAssetId then return end
cached = result.IconImageAssetId
imgCache:Push(cached)
end
img.Image = framework.protected:ProtectAsset("rbxassetid://" ..cached)
img.ImageColor3 = Color3.fromRGB(255, 255, 255)
return
end
if not ARCEUS_FOLDERS.CACHE:IsFile(name) then
local data = framework.utils.http:Get(url)
if not data then return end
ARCEUS_FOLDERS.CACHE:WriteFile(name, data)
end
--img.Image = framework.env.getcustomasset(framework.protected:ProtectAsset(`/{ARCEUS_FOLDERS.CACHE.lastPath}/{name}`))
local succ, asset = pcall(framework.env.getcustomasset, `{ARCEUS_FOLDERS.CACHE.lastPath}/{name}`)
img.ImageColor3 = Color3.fromRGB(255, 255, 255)
img.Image = succ and asset or img.Image
end)
local getimage = framework.protected:GCProtect(function(scriptImg: string, gameImg: string, universal: boolean)
local url, name = getimageinfo(scriptImg)
if not url and not universal then
url, name = getimageinfo(gameImg)
end
return url, name
end)
local saveFavourites = framework.protected:GCProtect(function()
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile(EXPLOIT_CONFIGS.CLOUD_SCRIPTS, favourites, EXPLOIT_CONFIGS.FILES_KEY)
end)
local formatScript = framework.protected:GCProtect(LPH_JIT_MAX(function(scr: {any})
local info = {} -- truncating arguments
info.slug = scr.slug
info.game = scr.game.name
info.gameId = scr.game.gameId
for _, prop in ipairs(configs.propsWhitelist) do
info[prop] = scr[prop]
end
local url, name = getimage(scr.image, scr.game.imageUrl, scr.isUniversal)
info.imageUrl, info.imageName = url, name
info.loadImage = function(img: ImageLabel, sync: boolean?)
if sync then return loadimage(url, name, scr.game.gameId, img) end
task.spawn(loadimage, url, name, scr.game.gameId, img)
end
info.isFavourite = not not favourites[scr.slug]
info.setFavourite = function()
favourites[scr.slug] = (not favourites[scr.slug]) and os.time() or nil
info.isFavourite = not not favourites[scr.slug]
saveFavourites()
return info.isFavourite
end
return info
end))
local fetch
fetch = framework.protected:GCProtect(function(url: string, debounce: {boolean}, c: number)
local cached = fetchCache:Get(url)
if cached then return cached end
if debounce[1] then return end
debounce[1] = true
local res = framework.utils.http:Request(url, "GET", {
["Content-Type"] = "application/json"
});
if not res then
if (c or 0) < 3 then task.wait(1)
debounce[1] = false
return fetch(url, debounce, c and c +1 or 1)
end
return
end
local info = framework.utils.http.json.decode(res.Body)
if not info then return end
info = info.result
local data = {} -- These values can be nil
data.maxPages = info.totalPages
data.nextPage = info.nextPage
local scripts = {}
data.scripts = scripts
for _, scr in ipairs(info.scripts) do
framework.utils.tables.insert(scripts, formatScript(scr))
end
fetchCache:Push(url, data)
debounce[1] = false
return data
end)
local getFilters = framework.protected:GCProtect(function(filters: {boolean}, isFetching: boolean)
local setts = framework.settings:GetSetting("ScriptBlox")
local output = ""
local param, enum = filters.mode, framework.enums.ScriptBloxMode
if param ~= nil and param ~= enum.None then
output ..= `&mode={param == enum.Free and "free" or "paid"}`
end
param, enum = filters.verify, framework.enums.ScriptBloxVerify
if param ~= nil and param ~= enum.None then
output ..= `&verified={param == enum.Verified and 1 or 0}`
end
param, enum = filters.type, framework.enums.ScriptBloxType
if param ~= nil and param ~= enum.None then
output ..= `&universal={param == enum.Universal and 1 or 0}`
end
param, enum = filters.auth, framework.enums.ScriptBloxAuth
if param ~= nil and param ~= enum.None then
output ..= `&key={param == enum.Key and 1 or 0}`
end
param, enum = filters.patch, framework.enums.ScriptBloxPatch
if param ~= nil and param ~= enum.None then
output ..= `&patched={param == enum.Patched and 1 or 0}`
end
param, enum = filters.search, framework.enums.ScriptBloxSearch
if not isFetching and param ~= nil and param ~= enum.None then -- Using search endpoint
output ..= `&strict={param == enum.Strict and true or false}`
end
local sorting
param, enum = filters.sortBy, framework.enums.ScriptBloxSort
if param ~= nil and param ~= enum.None then
local map = {
[enum.DislikeCount] = "dislikeCount",
[enum.CreatedAt] = "createdAt",
[enum.UpdatedAt] = "updatedAt",
[enum.LikeCount] = "likeCount",
[enum.Views] = "views"
}
output ..= `&sortBy={map[param]}`
sorting = true
end
param, enum = filters.order, framework.enums.ScriptBloxOrder
if sorting and param ~= nil and param ~= enum.None then
output ..= `&order={param == enum.Asc and "asc" or "desc"}`
end
return output
end)
cloudscripts.OnFetched = onFetched
cloudscripts.LoadImage = loadimage
function cloudscripts.newQuery(query: string?, filters: {boolean}, ...: any)
query = query or ""
query = framework.utils.http:UrlEncode(query)
local fetching = query == ""
local extra = {...}
local baseUrl = `{endpoints.scriptblox}/api/script/{(fetching and "fetch?" or `search?q={query}&`)}`
local query, data, debounce = {}, {}, {}
function query:Fetch(page: number?)
local page = page or data.nextPage or data.maxPages or 1
local url = `{baseUrl}page={page}` -- &max=
if maxResults then url ..= `&max={maxResults}` end
url ..= getFilters(filters, fetching)
data = fetch(url, debounce) or {}
local scripts = data.scripts or {}
onFetched:Fire(scripts, page == 1, framework.utils.tables.unpack(extra))
return scripts
end
function query:Refresh() -- current page
local data = self:Fetch(data.nextPage and data.nextPage -1 or data.maxPages) or {}
local scripts = data.scripts or {}
onFetched:Fire(scripts, true, framework.utils.tables.unpack(extra))
return scripts
end
function query:GetFilters()
return filters
end
return query
end
function cloudscripts:FetchTrending(...: any)
local data = fetch(`{endpoints.scriptblox}/api/script/trending`, {}) or {}
local scripts = data.scripts or {}
onFetched:Fire(scripts, true, ...)
return scripts
end
function cloudscripts:FetchDetails(slug: string, c: number)
local cached = detailsCache:Get(slug)
if cached then return cached end
local res = framework.utils.http:Request(`{endpoints.scriptblox}/api/script/{slug}`, "GET", {
["Content-Type"] = "application/json"
});
if not res and (c or 0) < 3 then task.wait(1)
return self:FetchDetails(slug, c and c +1 or 1)
end
local info = framework.utils.http.json.decode(res.Body)
if not info then return end
local data = formatScript(info.script)
detailsCache:Push(slug, data)
return data
end
function cloudscripts:FetchFavourites(...: any)
local manager = framework.utils.threading.newTaskManager()
local scripts = {}
for slug, tim in pairs(favourites) do
manager:AddTasks(function()
local scr = {}
scr.time = tim
local data = favCache:Get(slug)
if not data then
data = self:FetchDetails(slug)
if not data then return end
favCache:Push(slug, data)
end
framework.utils.tables.concatenate(scr, data)
framework.utils.tables.insert(scripts, scr)
end)
end
manager:RunTasksAsync()
framework.utils.tables.sort(scripts, function(a: {any}, b: {any})
return a.time < b.time
end)
onFetched:Fire(scripts, true, ...)
return scripts
end
function cloudscripts:SetMaxResults(max: number?)
maxResults = tonumber(max) -- you can unset by passing empty
end
framework.protected:ProtectTable(configs)
framework.dependencies:Add("cloudscripts", framework.protected:ProtectTable(cloudscripts))
end
do -- scripts hanlder
local shandler, scripts = {}, framework.protected:GCProtect({})
local scriptAdded, gcount = framework.signals.newEvent(), 0
local sui = framework.interface.new()
sui.instance.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
sui.instance.ScreenInsets = Enum.ScreenInsets.None
shandler.OnScriptAdded = scriptAdded
local props = framework.protected:GCProtect({
GuiObject = "BackgroundTransparency",
ImageButton = "ImageTransparency",
ImageLabel = "ImageTransparency",
TextButton = "TextTransparency",
TextLabel = "TextTransparency"
})
local setOpacity = framework.protected:GCProtect(function(scr: {any}, obj: GuiObject, value: number)
local cache = scr.caches.opacity
cache = cache:Push(obj, {}, true)
for type, prop in pairs(props) do
if not obj:IsA(type) then continue end
cache[type] = cache[type] or obj[prop]
obj[prop] = cache[type] +value *(1 -cache[type])
end
end)
local guiAdded = framework.protected:GCProtect(function(gui: ScreenGui)
if not gui:IsA("ScreenGui") then return end
gcount += 1
local scr = {
caches = {
children = framework.utils.caches.newCache(),
opacity = framework.utils.caches.newCache()
},
id = `Gui_{gcount}`,
instance = gui,
order = gcount,
opacity = 0,
scale = 1
}
function scr:ToChildren(action: (child: {any}) -> ())
for _, child in ipairs(self:GetChildren()) do
if not child.instance:IsA("GuiObject") then continue end
action(child)
end
end
function scr:Scale(value: number)
scr.scale = value
self:ToChildren(function(child)
child:Scale(value)
end)
end
function scr:Transparency(value: number)
scr.opacity = value
self:ToChildren(function(child)
child:Transparency(value)
end)
end
function scr:Draggable(enabled: number)
self:ToChildren(function(child)
child:Draggable(enabled)
end)
end
function scr:IsDraggable()
local draggable = false
self:ToChildren(function(child)
if child:IsDraggable() then
draggable = true
end
end)
return draggable
end
function scr:Windowed(enabled: number)
self:ToChildren(function(child)
child:Windowed(enabled)
end)
end
function scr:IsWindowed()
local windowed = false
self:ToChildren(function(child)
if child:IsWindowed() then
windowed = true
end
end)
return windowed
end
function scr:GetChildren()
local children = {}
for _, obj in ipairs(gui:GetChildren()) do
if not obj:IsA("GuiObject") then continue end
local ccache = scr.caches.children
local order = ccache:GetSize() +1
local child = ccache:Push(obj, {
interface = { id = `Gui_{scr.id}` },
id = `Obj_{order}`,
instance = obj,
order = order,
draggable = false,
window = nil,
opacity = 0,
scale = 1
}, true)
function child:Scale(value: number)
local scale = gui:FindFirstChildWhichIsA("UIScale") or framework.utils.instances.new("UIScale", {
Parent = obj
}); scale.Scale = value or 1
child.scale = scale.Scale
end
function child:Transparency(value: number)
value = framework.utils.maths.clamp(value, 0, 1)
obj.Visible = value < 1
child.opacity = value
if not obj.Visible then return end
if obj:IsA("CanvasGroup") and gui.ZIndexBehavior == Enum.ZIndexBehavior.Sibling then
local old = scr.caches.opacity:Push(obj, obj.GroupTransparency, true)
obj.GroupTransparency = old +value *(1 -old)
return
end
setOpacity(scr, obj, value)
for _, v in ipairs(obj:GetDescendants()) do
setOpacity(scr, v, value)
end
end
function child:Draggable(enabled: boolean)
child.draggable = enabled
if enabled then
return framework.utils.inputs.makeDraggable(self)
end
framework.utils.inputs.makeUndraggable(self)
end
function child:IsDraggable()
return child.draggable
end
function child:Windowed(enabled: boolean)
local id = `Window-{scr.id}-{child.id}`
local binding = child.window
if binding then
binding.frame:Destroy()
binding:Unbind()
child.window = nil
return
end
if not enabled then return end
binding = framework.renderer:BindToRenderer(id, framework.renderer.FrameworkPriority, function()
local frame = binding.frame
if not frame then self:Windowed(false) end
local pos, siz = obj.AbsolutePosition, obj.AbsoluteSize
local absx = siz.X /10
frame.Position = UDim2.fromOffset(pos.X +siz.X, pos.Y +siz.Y -absx)
frame.Size = UDim2.fromOffset(absx, absx)
end)
local frame = framework.utils.instances.new("ImageButton", {
AnchorPoint = Vector2.new(1, 1)
})
frame.Parent = sui.instance
binding.frame = frame
child.window = binding
binding:Render()
end
function child:IsWindowed()
return not not child.binding
end
framework.utils.tables.insert(children, child)
end
return children
end
local conn; conn = gui.AncestryChanged:Connect(function(_, parent)
if parent then return end
conn:Disconnect()
scripts[gui] = nil
scr:ToChildren(function(child: {any})
child:Draggable(false)
child:Windowed(false)
end)
for _, cache in pairs(scr.caches) do
cache:Remove()
end
end)
scripts[gui] = scr
scriptAdded:Fire(scr)
return scr
end)
local event
function shandler:Start(parent: Folder)
parent = parent or framework.utils.instances.dynamicParent()
event = parent.ChildAdded:Connect(guiAdded)
sui:SetEnabled(true)
end
function shandler:Stop()
sui:SetEnabled(false)
if not event then return end
event:Disconnect()
event = nil
end
function shandler:GetScripts()
local res = {}
for _, v in pairs(scripts) do
framework.utils.tables.insert(res, v)
end
return res
end
framework.dependencies:Add("shandler", framework.protected:ProtectTable(shandler))
end
do
local teleport: TeleportService = framework.protected:GetService("TeleportService")
local location = framework.protected:GetService(LPH_ENCSTR("JointsService"))
local player = framework.protected:GetService("Players").LocalPlayer
local tGui = framework.interface.new("TeleportGui")
local cloudscripts = framework.dependencies.cloudscripts
local exploit = framework.dependencies.exploit
local OnMessage = framework.signals.newEvent()
local OnFetched = framework.signals.newEvent()
local serverside, allGames = {}, nil
local PAGE_SIZE = 15
tGui.instance.ScreenInsets = Enum.ScreenInsets.None
tGui.instance.IgnoreGuiInset = true
tGui:AddInstance("ImageLabel", { -- TODO Teleport Loading UI
Size = UDim2.fromScale(1, 1),
Image = ""
})
local get_email = framework.protected:GCProtect(function()
local email = framework.settings:GetSetting(LPH_ENCSTR("User_EMail"))
if framework.utils.strings.gsub(email, "%s", "") == "" then return end
if not framework.utils.strings.match(email, LPH_ENCSTR("^[%w_%+%.%-]+@[%w%-%.]+%.%a%a+$")) then return end
return email
end)
local onMessage = framework.protected:GCProtect(function(...: any)
OnMessage:Fire(...)
end)
serverside.OnFetched = OnFetched
serverside.OnMessage = OnMessage
lastIdx = 0
function serverside:GetGames(page: number?)
if allGames then
lastIdx = page or lastIdx +1
local more = lastIdx ~= 1
if lastIdx > #allGames then
OnFetched:Fire({}, more)
return {}, more
end
lastIdx = math.clamp(lastIdx or 1, 1, #allGames)
OnFetched:Fire(allGames[lastIdx], more)
return allGames[lastIdx], more
end
local email = get_email()
if not email then
if framework.protected:IsStudio() then
email = LPH_ENCSTR("arceusxhelp99@gmail.com")
else
OnFetched:Fire({}) return false
end
end
local res = framework.utils.http:Request(`{endpoints.api}/getgames`, "POST", {
[LPH_ENCSTR("Content-Type")] = LPH_ENCSTR("application/json")
}, {
hwid = framework.protected:IsStudio() and LPH_ENCSTR("d83f041df3b7c388") or exploit:GetHwid(),
userid = player.UserId,
email = email
})
if not res then OnFetched:Fire({}) return false end
local games = framework.utils.http.json.decode(res.Body) or {}
local gamePages = {}
local lastPage = {}
for i, info in ipairs(games) do
table.insert(lastPage, {
id = info.place_id,
plrs = info.playing,
loadImage = function(img: ImageLabel, sync: boolean?)
if sync then return cloudscripts.LoadImage(nil, nil, info.place_id, img) end
task.spawn(cloudscripts.LoadImage, nil, nil, info.place_id, img)
end
})
if i%PAGE_SIZE ~= 0 then continue end
table.insert(gamePages, lastPage)
lastPage = {}
end
if #lastPage > 0 then
table.insert(gamePages, lastPage)
end
allGames = gamePages
return self:GetGames(1)
end
function serverside:TeleportTo(placeId: number)
return pcall(teleport.Teleport, teleport, placeId, player, nil, tGui.instance)
end
function serverside:Connect()
local remote = location:FindFirstChild(LPH_ENCSTR("JointsRemote"))
if not remote then return end
remote.OnClientEvent:Once(framework.protected:GCProtect(function(devices: {{[string]: any}})
local auth = false
for _, device in ipairs(devices) do
if device.hwid == exploit:GetHwid() then
auth = true
break
end
end
if not auth then return end
self.remote = remote
remote.OnClientEvent:Connect(onMessage)
remote:FireServer(LPH_ENCSTR("Connect"))
end))
end
function serverside:Execute(scr: string)
if not self.remote then return end
self.remote:FireServer(LPH_ENCSTR("Execute"), scr)
end
framework.dependencies:Add(LPH_ENCSTR("serverside"), framework.protected:ProtectTable(serverside))
end
do -- authentication
(function() return [[
Hello, if you are trying to bypass our authentication system,
im letting you know that the license file is only used to prevent ddos attacks,
or other networking issues, to block users in the login page for too long.
This can be disabled anytime with a killswitch, dont waste your time here.
Someone else has already did in the past..
~ riky47
]] end)()
local Players = framework.protected:GetService("Players")
local auth, authData = {}, framework.protected:GCProtect({})
local tim = framework.protected:GetFunction(workspace.GetServerTimeNow) --os.time)
local exploit = framework.dependencies.exploit
local infos
--[[
local plan_infos = framework.protected:GCProtect({
{title = "Free", Color = Color3.fromRGB(255, 255, 255) },
{title = "Basic", Color = Color3.fromRGB(170, 169, 173) },
{title = "Plus", Color = Color3.fromRGB(229, 184, 11) },
{title = "Premium", Color = Color3.fromRGB(89, 219, 248) },
{title = "Ultimate", Color = Color3.fromRGB(255, 0, 0) }
})]]
local onAuthenticationAttemp = framework.signals.newEvent()
exploit.OnUrlAttemp:Connect(framework.protected:GCProtect(function(url: string, retries: number, result: number)
if not result and framework.utils.strings.find(url, "/issubscribed") then
onAuthenticationAttemp:Fire(retries)
end
end))
auth.OnAuthenticationAttemp = onAuthenticationAttemp
local getInfos = framework.protected:GCProtect(function()
if not infos then
local res = exploit:LoadUrl(`{endpoints.arceus_v}/configs.json`, 0)
infos = framework.utils.http.json.decode(res)
end
return infos
end)
function auth:ValidateToken(token: string)
local function ROR(x, n)
return bit32.rrotate(x, n)
end
local function SHR(x, n)
return bit32.rshift(x, n)
end
local function Ch(x, y, z)
return bit32.bxor(bit32.band(x, y), bit32.band(bit32.bnot(x), z))
end
local function Maj(x, y, z)
return bit32.bxor(bit32.band(x, y), bit32.band(x, z), bit32.band(y, z))
end
local function Sigma0(x)
return bit32.bxor(ROR(x, 2), ROR(x, 13), ROR(x, 22))
end
local function Sigma1(x)
return bit32.bxor(ROR(x, 6), ROR(x, 11), ROR(x, 25))
end
local function sigma0(x)
return bit32.bxor(ROR(x, 7), ROR(x, 18), SHR(x, 3))
end
local function sigma1(x)
return bit32.bxor(ROR(x, 17), ROR(x, 19), SHR(x, 10))
end
local K = {
0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
}
local function sha256_luau(msg)
local function toBytes(s)
local bytes = {}
for i = 1, #s do
bytes[#bytes+1] = s:byte(i)
end
return bytes
end
local bytes = toBytes(msg)
local ml = #bytes * 8
-- Padding
bytes[#bytes+1] = 0x80
while (#bytes % 64) ~= 56 do
bytes[#bytes+1] = 0x00
end
for i = 1, 8 do
bytes[#bytes+1] = bit32.band(bit32.rshift(ml, (8 * (8 - i))), 0xFF)
end
local h = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
}
for i = 1, #bytes, 64 do
local w = {}
for j = 0, 15 do
local k = i + j * 4
w[j] = bit32.lshift(bytes[k], 24) + bit32.lshift(bytes[k+1], 16) + bit32.lshift(bytes[k+2], 8) + bytes[k+3]
end
for j = 16, 63 do
w[j] = bit32.band((sigma1(w[j-2]) + w[j-7] + sigma0(w[j-15]) + w[j-16]), 0xFFFFFFFF)
end
local a, b, c, d, e, f, g, h0 = table.unpack(h)
for j = 0, 63 do
local T1 = bit32.band(h0 + Sigma1(e) + Ch(e,f,g) + K[j+1] + w[j], 0xFFFFFFFF)
local T2 = bit32.band(Sigma0(a) + Maj(a,b,c), 0xFFFFFFFF)
h0 = g; g = f; f = e
e = bit32.band(d + T1, 0xFFFFFFFF)
d = c; c = b; b = a
a = bit32.band(T1 + T2, 0xFFFFFFFF)
end
h[1] = bit32.band(h[1] + a, 0xFFFFFFFF)
h[2] = bit32.band(h[2] + b, 0xFFFFFFFF)
h[3] = bit32.band(h[3] + c, 0xFFFFFFFF)
h[4] = bit32.band(h[4] + d, 0xFFFFFFFF)
h[5] = bit32.band(h[5] + e, 0xFFFFFFFF)
h[6] = bit32.band(h[6] + f, 0xFFFFFFFF)
h[7] = bit32.band(h[7] + g, 0xFFFFFFFF)
h[8] = bit32.band(h[8] + h0, 0xFFFFFFFF)
end
local result = ""
for i = 1, 8 do
result = result .. framework.utils.strings.format("%08x", h[i])
end
return result
end
local valid = false
for offset = -1, 0 do
local t = framework.utils.maths.floor(tim(workspace) /30) +offset
if sha256_luau(EXPLOIT_CONFIGS.API_CRYPT .. t .. exploit:GetHwid()) == token then
valid = true
break
end
end
return valid
end
-- We should use Server-Side-Signed RSA JWT for a proper auth and license
function auth:Authenticate()
if authData.authenticated then return true end
local email = framework.settings:GetSetting(LPH_ENCSTR("User_EMail"))
if framework.utils.strings.gsub(email, "%s", "") == "" then
return false
end
if not framework.utils.strings.match(email, LPH_ENCSTR("^[%w_%+%.%-]+@[%w%-%.]+%.%a%a+$")) then
return false, { LPH_ENCSTR("Invalid email format.") }
end
local license if self:UsingLicense() then
license = ARCEUS_FOLDERS.CONFIGS:ReadJsonFile(EXPLOIT_CONFIGS.LICENSE_FILE, EXPLOIT_CONFIGS.FILES_KEY)
end
if license and license.authenticated and license.expiring and license.issuedAt
and license.hwid == exploit:GetHwid() -- Prevents sharing the file
then
license.authenticated = false
authData = license
if self:GetExpiring() > 0 then
authData.authenticated = true
return true
end
end
local device_name = exploit:GetDeviceInfo(LPH_ENCSTR("BRAND"))
if device_name then
device_name = `{device_name} {exploit:GetDeviceInfo(LPH_ENCSTR("DEVICE"))}`
else
device_name = framework.protected:IsStudio() and LPH_ENCSTR("Studio") or
framework.protected:GetService(LPH_ENCSTR("UserInputService")):GetDeviceType().Name
end
local info = exploit:LoadUrl(`{endpoints.api}/issubscribed`, 0, EXPLOIT_CONFIGS.AUTH_FETCH_DELAY, LPH_ENCSTR("POST"), {
[LPH_ENCSTR("Content-Type")] = LPH_ENCSTR("application/json")
}, {
os = exploit:IsIos() and LPH_ENCSTR("iOS") or (`Android{exploit:IsVng() and LPH_ENCSTR(" VNG") or ""}`),
userid = Players.LocalPlayer.UserId,
device_name = device_name,
hwid = exploit:GetHwid(),
email = email
})
local json = framework.utils.http.json.decode(info)
if not json then return false, { LPH_ENCSTR("Invalid data.") } end
if not json.success or not self:ValidateToken(json.token) then return false, {json.message} end
json.issuedAt = json.issuedAt or tim(workspace)
json.hwid = exploit:GetHwid()
json.authenticated = true
json.expiring = json.expiring and json.expiring /1000 or 24*60*60
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile(EXPLOIT_CONFIGS.LICENSE_FILE, framework.utils.http.json.encode(json), EXPLOIT_CONFIGS.FILES_KEY)
authData = json
return true, json.message
end
--[[ function auth:Restore()
if not exploit:LoadUrl(`{endpoints.api}/deletekey?hwid={exploit:GetHwid()}`, 3) then
return false
end
authData.hwid = exploit:GetHwid()
authData.authenticated = false
authData.issuedAt = 0
authData.expiring = 0
local data = framework.utils.crypt.bytes(framework.utils.http.json.encode(authData), EXPLOIT_CONFIGS.FILES_KEY)
ARCEUS_FOLDERS.CONFIGS:WriteFile(EXPLOIT_CONFIGS.LICENSE_FILE, data)
return true
end
function auth:IsPremium()
return authData.isPremium or (authData.plan or 0) >= 3 -- premium or higher
end
function auth:GetPlan()
if not authData.authenticated then return false end
local planId = authData.plan or 0
local info = plan_infos[framework.utils.maths.clamp(planId, 0, #plan_infos) +1]
info = framework.utils.tables.deepCopy(info)
info.id = planId
return info
end]]
function auth:GetVersion()
--[[ local file = exploit:IsIos() and LPH_ENCSTR("ios-version") or (exploit:IsVng() and LPH_ENCSTR("version-vng") or LPH_ENCSTR("version"))
return exploit:LoadUrl(`{endpoints.arceus_neo}/{file}`, 0) ]]
local vng = exploit:IsVng() and LPH_ENCSTR("_vng") or ""
local type = exploit:IsIos() and LPH_ENCSTR("ios") or (LPH_ENCSTR("android") ..vng)
return getInfos()[LPH_ENCSTR("version")][type]
end
function auth:IsKeyless()
return getInfos()[LPH_ENCSTR("keyless")] or false
end
function auth:UsingLicense()
return getInfos()[LPH_ENCSTR("authfile")]
end
function auth:GetExpiring()
return authData.issuedAt and authData.expiring -(tim() -authData.issuedAt) or 0
end
framework.dependencies:Add(LPH_ENCSTR("auth"), framework.protected:ProtectTable(auth))
end
do -- Shared methods
local players = framework.protected:GetService("Players")
local sh = {}
sh.antiAfk = framework.protected:GCProtect(LPH_NO_VIRTUALIZE(function()
local GC = framework.env.getconnections
or framework.env.get_signal_cons
if GC then
for i,v in pairs(GC(players.LocalPlayer.Idled)) do
if v["Disable"] then
v["Disable"](v)
elseif v["Disconnect"] then
v["Disconnect"](v)
end
end
else
local VirtualUser = framework.protected:GetService("VirtualUser")
players.LocalPlayer.Idled:Connect(function()
VirtualUser:CaptureController()
VirtualUser:ClickButton2(Vector2.new())
end)
end
end))
framework.dependencies:Add("shared", framework.protected:ProtectTable(sh))
end
do -- INIT
local name, ver = framework.env.identifyexecutor()
local isStudio = framework.protected:IsStudio()
if not isStudio then -- Check for exploit identity
if not name or not ver then return end
local found = name:lower():find(EXPLOIT_CONFIGS.EXPLOIT_IDENTITY:lower())
if not found then return end
else -- Check if its authorized to run in studio
local succ, err = pcall(function()
return script.Auth.Value == EXPLOIT_CONFIGS.FILES_KEY
end)
if not succ or not err then
return framework.console.error(LPH_ENCSTR("Missing Authorization"))
end
end
do -- On UI updated
local old = ARCEUS_FOLDERS.CONFIGS:ReadJsonFile(EXPLOIT_CONFIGS.VERSION_FILE, EXPLOIT_CONFIGS.FILES_KEY)
framework.utils.versioning:SetVersion(EXPLOIT_CONFIGS.UI_VERSION)
if old and old.version and framework.utils.versioning:Compare(old.version) == framework.enums.versioning.older then -- UI Updated
for _, file in ipairs(ARCEUS_FOLDERS.RAW:ListFiles()) do -- Reset raw content
ARCEUS_FOLDERS.RAW:DeleteFile(file)
end
end
ARCEUS_FOLDERS.CONFIGS:WriteJsonFile(EXPLOIT_CONFIGS.VERSION_FILE, {
version = EXPLOIT_CONFIGS.UI_VERSION
}, EXPLOIT_CONFIGS.FILES_KEY)
end
-- Migrate
framework.dependencies.exploit:Migrate()
-- Build UI
local shandler = framework.dependencies.shandler
local tabs = framework.dependencies.editortabs
local libgui = framework.dependencies.gui
local ui = libgui:Draw(framework) -- Draw
framework.settings:LoadSettings() -- Update
tabs:GetSelection():GetData()
.instance:Select()
libgui:LoadAnimations()
ui:SetEnabled(true)
shandler:Start()
do
local fps = framework.settings:GetSetting("Setting_Fps")
if fps ~= 60 then
framework.env.setfpscap(fps or 60)
end
local afk = not not framework.settings:GetSetting("Setting_Afk")
if afk then
if framework.env.WHWKIWIOSU then
framework.env.WHWKIWIOSU(afk)
else
framework.dependencies.shared.antiAfk()
end
end
end
local loading = ui.getLoading()
if framework.settings:GetSetting("User_Intro") then
loading:Advance(3)
else
loading:Skip(4)
end
if not isStudio then -- Check for exploit versioning
local auth = framework.dependencies.auth
local newer = auth:GetVersion()
framework.utils.versioning:SetVersion(ver or "0.0.0")
if framework.utils.versioning:Compare(newer) == framework.enums.versioning.newer then
libgui.utils:ShowToast("ButtonToast", {
Id = "Update",
Style = "confirm",
AdditionalText = {"An update is available. Download?", "Un aggiornamento è disponibile. Scaricare?"},
AdditionalTitle = {"Update", "Aggiornamento"},
Callback = function(res: boolean)
if not res then return end
framework.utils.http:OpenUrl("https://spdmteam.com/")
end
})
end
if not auth:IsKeyless() then
auth.OnAuthenticationAttemp:Connect(framework.protected:GCProtect(function(retries: number)
--framework.console.print(`Authenticating.. {(retries > 1) and `({retries})` or ""}`)
end))
--[[local waitEvent = framework.signals.newEvent()
local function waitPhase()
task.spawn(loading.Skip, loading, 5, function()
waitEvent:Fire()
end)
waitEvent:Wait()
end]]
loading:Skip(4)
--waitPhase()
local succ, msg = auth:Authenticate()
while not succ do
if msg then libgui.utils:ShowToast("ButtonToast", { AdditionalText = msg }) end
loading:Skip(5, function() end)
--waitPhase()
succ, msg = auth:Authenticate()
end
--framework.console.print("Subscription found")
--waitEvent:Remove()
end
else -- Dev Info
framework.console.print("UI Instances:", #ui.instance:GetDescendants())
end
local serverside = framework.dependencies.serverside
task.spawn(serverside.Connect, serverside)
loading:Skip(6)
do -- Advanced auto-execution
local gameId, placeId = game.GameId, game.PlaceId
local advanceExecute = framework.protected:GCProtect(LPH_JIT(function(source: string, data: {any})
if data and data.autoexecute then
if data.whitelist and (data.games or data.places) then
local whitelisted = (data.games or {})[gameId]
if not whitelisted then
if whitelisted == false then return end
whitelisted = (data.places or {})[placeId]
if not whitelisted then return end
end
end
framework.execution:Execute(source)
end
end))
local recursiveAutoexec
recursiveAutoexec = framework.protected:GCProtect(LPH_JIT(function(files: {string})
for _, file in ipairs(files) do
if framework.storage.isFolder(nil, file) then
recursiveAutoexec(framework.storage.listFiles(nil, file))
continue
end
local src = framework.storage.readFile(nil, file)
if not src then continue end
local data, source = framework.dependencies.exploit:GetMetadata(src)
advanceExecute(source, data)
end
end))
local tabs = framework.dependencies.editortabs:GetTabs()
for _, tab in ipairs(tabs) do
advanceExecute(tab:GetSource(), tab:GetProperties())
end
task.spawn(recursiveAutoexec, ARCEUS_FOLDERS.SCRIPT_HUB:ListFiles())
end
do
local stgui = framework.protected:GetService("StarterGui")
local axintelligence = framework.dependencies.axintelligence
local track = framework.dependencies.track
axintelligence:AddCustomFunction("stop", "stops the current playing song", "stop(): nil", function() track:Stop() end)
axintelligence:AddCustomFunction("close", "closes the UI", "close(): nil", ui.close)
axintelligence:AddCustomFunction("open", "opens the UI", "open(): nil", ui.open)
axintelligence:AddCustomFunction("learn", "makes you, arcy, learn new functions by providing the required parameters, use this when you are asked to learn new abilities", "learn(functName: string, functDescription: string, functDefinition: string, funct: (any) -> ())", function(...: any)
axintelligence:AddCustomFunction(...)
end)
axintelligence:AddCustomFunction("translate", "translates the UI text into the preset languages", "translate(CountryCode: string): nil", function(country_code: string)
local cc = framework.utils.strings.upper(country_code)
if not framework.enums.CountryCode[cc] then return end
framework.settings:SetSetting("Country_Code", cc)
end)
axintelligence:AddCustomFunction("size", "resizes the UI with the preset states: Base, Large, Full", "size(state: string): nil", function(state: string)
state = framework.enums.WindowState[state]
if not state then return end
ui.open()
ui.nextSize(state)
end)
axintelligence:AddCustomFunction("play", "plays or stops music by roblox asset id, if the id is nil it toggles the current song", "play(id: number|nil): nil", function(id: number)
if id and tonumber(id) then track:Play(id) else
track:Toggle()
end
end)
axintelligence:AddCustomFunction("console", "toggles the roblox console using the on/off status", "console(status: boolean): nil", function(status: boolean)
stgui:SetCore("DevConsoleVisible", status)
end)
end
do -- Plugins
local plugins = framework.dependencies.plugins
local loadPlugins = framework.protected:GCProtect(LPH_JIT(function()
local res = framework.utils.http:Request(`{endpoints.arceus_v}/plugins.json`)
if res then local default = framework.utils.http.json.decode(res.Body)
for _, content in ipairs(default or {}) do
plugins:Add(content)
end
end
for _, url in ipairs(plugins:GetSaved()) do
local res = framework.utils.http:Request(url, "GET")
if not res then continue end
local json = framework.utils.http.json.decode(res.Body)
if not json then continue end
json.url = url
plugins:Add(json)
end
if isStudio then
plugins:Add(require("../Arceus Hub/raw"))
end
end))
task.spawn(loadPlugins)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment