--[[ Rayfield Interface Suite by Sirius shlex | Designing + Programming iRay | Programming Max | Programming Damian | Programming ]] if debugX then warn('Initialising Rayfield') end local function getService(name) local service = game:GetService(name) return if cloneref then cloneref(service) else service end -- Loads and executes a function hosted on a remote URL. Cancels the request if the requested URL takes too long to respond. -- Errors with the function are caught and logged to the output local function loadWithTimeout(url: string, timeout: number?): ...any assert(type(url) == "string", "Expected string, got " .. type(url)) timeout = timeout or 5 local requestCompleted = false local success, result = false, nil local requestThread = task.spawn(function() local fetchSuccess, fetchResult = pcall(game.HttpGet, game, url) -- game:HttpGet(url) -- If the request fails the content can be empty, even if fetchSuccess is true if not fetchSuccess or #fetchResult == 0 then if #fetchResult == 0 then fetchResult = "Empty response" -- Set the error message end success, result = false, fetchResult requestCompleted = true return end local content = fetchResult -- Fetched content local execSuccess, execResult = pcall(function() return loadstring(content)() end) success, result = execSuccess, execResult requestCompleted = true end) local timeoutThread = task.delay(timeout, function() if not requestCompleted then warn(`Request for {url} timed out after {timeout} seconds`) task.cancel(requestThread) result = "Request timed out" requestCompleted = true end end) -- Wait for completion or timeout while not requestCompleted do task.wait() end -- Cancel timeout thread if still running when request completes if coroutine.status(timeoutThread) ~= "dead" then task.cancel(timeoutThread) end if not success then warn(`Failed to process {url}: {result}`) end return if success then result else nil end local requestsDisabled = true --getgenv and getgenv().DISABLE_RAYFIELD_REQUESTS local InterfaceBuild = '3K3W' local Release = "Build 1.68" local RayfieldFolder = "Rayfield" local ConfigurationFolder = RayfieldFolder.."/Configurations" local ConfigurationExtension = ".rfld" local settingsTable = { General = { -- if needs be in order just make getSetting(name) rayfieldOpen = {Type = 'bind', Value = 'K', Name = 'Rayfield Keybind'}, -- buildwarnings -- rayfieldprompts }, System = { usageAnalytics = {Type = 'toggle', Value = true, Name = 'Anonymised Analytics'}, } } -- Settings that have been overridden by the developer. These will not be saved to the user's configuration file -- Overridden settings always take precedence over settings in the configuration file, and are cleared if the user changes the setting in the UI local overriddenSettings: { [string]: any } = {} -- For example, overriddenSettings["System.rayfieldOpen"] = "J" local function overrideSetting(category: string, name: string, value: any) overriddenSettings[`{category}.{name}`] = value end local function getSetting(category: string, name: string): any if overriddenSettings[`{category}.{name}`] ~= nil then return overriddenSettings[`{category}.{name}`] elseif settingsTable[category][name] ~= nil then return settingsTable[category][name].Value end end -- If requests/analytics have been disabled by developer, set the user-facing setting to false as well if requestsDisabled then overrideSetting("System", "usageAnalytics", false) end local HttpService = getService('HttpService') local RunService = getService('RunService') -- Environment Check local useStudio = RunService:IsStudio() or false local settingsCreated = false local settingsInitialized = false -- Whether the UI elements in the settings page have been set to the proper values local cachedSettings local prompt = useStudio and require(script.Parent.prompt) or loadWithTimeout('https://raw.githubusercontent.com/SiriusSoftwareLtd/Sirius/refs/heads/request/prompt.lua') local requestFunc = (syn and syn.request) or (fluxus and fluxus.request) or (http and http.request) or http_request or request -- Validate prompt loaded correctly if not prompt and not useStudio then warn("Failed to load prompt library, using fallback") prompt = { create = function() end -- No-op fallback } end local function loadSettings() local file = nil local success, result = pcall(function() task.spawn(function() if isfolder and isfolder(RayfieldFolder) then if isfile and isfile(RayfieldFolder..'/settings'..ConfigurationExtension) then file = readfile(RayfieldFolder..'/settings'..ConfigurationExtension) end end -- for debug in studio if useStudio then file = [[ {"General":{"rayfieldOpen":{"Value":"K","Type":"bind","Name":"Rayfield Keybind","Element":{"HoldToInteract":false,"Ext":true,"Name":"Rayfield Keybind","Set":null,"CallOnChange":true,"Callback":null,"CurrentKeybind":"K"}}},"System":{"usageAnalytics":{"Value":false,"Type":"toggle","Name":"Anonymised Analytics","Element":{"Ext":true,"Name":"Anonymised Analytics","Set":null,"CurrentValue":false,"Callback":null}}}} ]] end if file then local success, decodedFile = pcall(function() return HttpService:JSONDecode(file) end) if success then file = decodedFile else file = {} end else file = {} end if not settingsCreated then cachedSettings = file return end if file ~= {} then for categoryName, settingCategory in pairs(settingsTable) do if file[categoryName] then for settingName, setting in pairs(settingCategory) do if file[categoryName][settingName] then setting.Value = file[categoryName][settingName].Value setting.Element:Set(getSetting(categoryName, settingName)) end end end end end settingsInitialized = true end) end) if not success then if writefile then warn('Rayfield had an issue accessing configuration saving capability.') end end end if debugX then warn('Now Loading Settings Configuration') end loadSettings() if debugX then warn('Settings Loaded') end local analyticsLib local sendReport = function(ev_n, sc_n) warn("Failed to load report function") end if not requestsDisabled then if debugX then warn('Querying Settings for Reporter Information') end analyticsLib = loadWithTimeout("https://analytics.sirius.menu/script") if not analyticsLib then warn("Failed to load analytics reporter") analyticsLib = nil elseif analyticsLib and type(analyticsLib.load) == "function" then analyticsLib:load() else warn("Analytics library loaded but missing load function") analyticsLib = nil end sendReport = function(ev_n, sc_n) if not (type(analyticsLib) == "table" and type(analyticsLib.isLoaded) == "function" and analyticsLib:isLoaded()) then warn("Analytics library not loaded") return end if useStudio then print('Sending Analytics') else if debugX then warn('Reporting Analytics') end analyticsLib:report( { ["name"] = ev_n, ["script"] = {["name"] = sc_n, ["version"] = Release} }, { ["version"] = InterfaceBuild } ) if debugX then warn('Finished Report') end end end if cachedSettings and (#cachedSettings == 0 or (cachedSettings.System and cachedSettings.System.usageAnalytics and cachedSettings.System.usageAnalytics.Value)) then sendReport("execution", "Rayfield") elseif not cachedSettings then sendReport("execution", "Rayfield") end end local promptUser = math.random(1,6) if promptUser == 1 and prompt and type(prompt.create) == "function" then prompt.create( 'Be cautious when running scripts', [[Please be careful when running scripts from unknown developers. This script has already been ran. Some scripts may steal your items or in-game goods.]], 'Okay', '', function() end ) end if debugX then warn('Moving on to continue initialisation') end local RayfieldLibrary = { Flags = {}, Theme = { Default = { TextColor = Color3.fromRGB(240, 240, 240), Background = Color3.fromRGB(25, 25, 25), Topbar = Color3.fromRGB(34, 34, 34), Shadow = Color3.fromRGB(20, 20, 20), NotificationBackground = Color3.fromRGB(20, 20, 20), NotificationActionsBackground = Color3.fromRGB(230, 230, 230), TabBackground = Color3.fromRGB(80, 80, 80), TabStroke = Color3.fromRGB(85, 85, 85), TabBackgroundSelected = Color3.fromRGB(210, 210, 210), TabTextColor = Color3.fromRGB(240, 240, 240), SelectedTabTextColor = Color3.fromRGB(50, 50, 50), ElementBackground = Color3.fromRGB(35, 35, 35), ElementBackgroundHover = Color3.fromRGB(40, 40, 40), SecondaryElementBackground = Color3.fromRGB(25, 25, 25), ElementStroke = Color3.fromRGB(50, 50, 50), SecondaryElementStroke = Color3.fromRGB(40, 40, 40), SliderBackground = Color3.fromRGB(50, 138, 220), SliderProgress = Color3.fromRGB(50, 138, 220), SliderStroke = Color3.fromRGB(58, 163, 255), ToggleBackground = Color3.fromRGB(30, 30, 30), ToggleEnabled = Color3.fromRGB(0, 146, 214), ToggleDisabled = Color3.fromRGB(100, 100, 100), ToggleEnabledStroke = Color3.fromRGB(0, 170, 255), ToggleDisabledStroke = Color3.fromRGB(125, 125, 125), ToggleEnabledOuterStroke = Color3.fromRGB(100, 100, 100), ToggleDisabledOuterStroke = Color3.fromRGB(65, 65, 65), DropdownSelected = Color3.fromRGB(40, 40, 40), DropdownUnselected = Color3.fromRGB(30, 30, 30), InputBackground = Color3.fromRGB(30, 30, 30), InputStroke = Color3.fromRGB(65, 65, 65), PlaceholderColor = Color3.fromRGB(178, 178, 178) }, Ocean = { TextColor = Color3.fromRGB(230, 240, 240), Background = Color3.fromRGB(20, 30, 30), Topbar = Color3.fromRGB(25, 40, 40), Shadow = Color3.fromRGB(15, 20, 20), NotificationBackground = Color3.fromRGB(25, 35, 35), NotificationActionsBackground = Color3.fromRGB(230, 240, 240), TabBackground = Color3.fromRGB(40, 60, 60), TabStroke = Color3.fromRGB(50, 70, 70), TabBackgroundSelected = Color3.fromRGB(100, 180, 180), TabTextColor = Color3.fromRGB(210, 230, 230), SelectedTabTextColor = Color3.fromRGB(20, 50, 50), ElementBackground = Color3.fromRGB(30, 50, 50), ElementBackgroundHover = Color3.fromRGB(40, 60, 60), SecondaryElementBackground = Color3.fromRGB(30, 45, 45), ElementStroke = Color3.fromRGB(45, 70, 70), SecondaryElementStroke = Color3.fromRGB(40, 65, 65), SliderBackground = Color3.fromRGB(0, 110, 110), SliderProgress = Color3.fromRGB(0, 140, 140), SliderStroke = Color3.fromRGB(0, 160, 160), ToggleBackground = Color3.fromRGB(30, 50, 50), ToggleEnabled = Color3.fromRGB(0, 130, 130), ToggleDisabled = Color3.fromRGB(70, 90, 90), ToggleEnabledStroke = Color3.fromRGB(0, 160, 160), ToggleDisabledStroke = Color3.fromRGB(85, 105, 105), ToggleEnabledOuterStroke = Color3.fromRGB(50, 100, 100), ToggleDisabledOuterStroke = Color3.fromRGB(45, 65, 65), DropdownSelected = Color3.fromRGB(30, 60, 60), DropdownUnselected = Color3.fromRGB(25, 40, 40), InputBackground = Color3.fromRGB(30, 50, 50), InputStroke = Color3.fromRGB(50, 70, 70), PlaceholderColor = Color3.fromRGB(140, 160, 160) }, AmberGlow = { TextColor = Color3.fromRGB(255, 245, 230), Background = Color3.fromRGB(45, 30, 20), Topbar = Color3.fromRGB(55, 40, 25), Shadow = Color3.fromRGB(35, 25, 15), NotificationBackground = Color3.fromRGB(50, 35, 25), NotificationActionsBackground = Color3.fromRGB(245, 230, 215), TabBackground = Color3.fromRGB(75, 50, 35), TabStroke = Color3.fromRGB(90, 60, 45), TabBackgroundSelected = Color3.fromRGB(230, 180, 100), TabTextColor = Color3.fromRGB(250, 220, 200), SelectedTabTextColor = Color3.fromRGB(50, 30, 10), ElementBackground = Color3.fromRGB(60, 45, 35), ElementBackgroundHover = Color3.fromRGB(70, 50, 40), SecondaryElementBackground = Color3.fromRGB(55, 40, 30), ElementStroke = Color3.fromRGB(85, 60, 45), SecondaryElementStroke = Color3.fromRGB(75, 50, 35), SliderBackground = Color3.fromRGB(220, 130, 60), SliderProgress = Color3.fromRGB(250, 150, 75), SliderStroke = Color3.fromRGB(255, 170, 85), ToggleBackground = Color3.fromRGB(55, 40, 30), ToggleEnabled = Color3.fromRGB(240, 130, 30), ToggleDisabled = Color3.fromRGB(90, 70, 60), ToggleEnabledStroke = Color3.fromRGB(255, 160, 50), ToggleDisabledStroke = Color3.fromRGB(110, 85, 75), ToggleEnabledOuterStroke = Color3.fromRGB(200, 100, 50), ToggleDisabledOuterStroke = Color3.fromRGB(75, 60, 55), DropdownSelected = Color3.fromRGB(70, 50, 40), DropdownUnselected = Color3.fromRGB(55, 40, 30), InputBackground = Color3.fromRGB(60, 45, 35), InputStroke = Color3.fromRGB(90, 65, 50), PlaceholderColor = Color3.fromRGB(190, 150, 130) }, Light = { TextColor = Color3.fromRGB(40, 40, 40), Background = Color3.fromRGB(245, 245, 245), Topbar = Color3.fromRGB(230, 230, 230), Shadow = Color3.fromRGB(200, 200, 200), NotificationBackground = Color3.fromRGB(250, 250, 250), NotificationActionsBackground = Color3.fromRGB(240, 240, 240), TabBackground = Color3.fromRGB(235, 235, 235), TabStroke = Color3.fromRGB(215, 215, 215), TabBackgroundSelected = Color3.fromRGB(255, 255, 255), TabTextColor = Color3.fromRGB(80, 80, 80), SelectedTabTextColor = Color3.fromRGB(0, 0, 0), ElementBackground = Color3.fromRGB(240, 240, 240), ElementBackgroundHover = Color3.fromRGB(225, 225, 225), SecondaryElementBackground = Color3.fromRGB(235, 235, 235), ElementStroke = Color3.fromRGB(210, 210, 210), SecondaryElementStroke = Color3.fromRGB(210, 210, 210), SliderBackground = Color3.fromRGB(150, 180, 220), SliderProgress = Color3.fromRGB(100, 150, 200), SliderStroke = Color3.fromRGB(120, 170, 220), ToggleBackground = Color3.fromRGB(220, 220, 220), ToggleEnabled = Color3.fromRGB(0, 146, 214), ToggleDisabled = Color3.fromRGB(150, 150, 150), ToggleEnabledStroke = Color3.fromRGB(0, 170, 255), ToggleDisabledStroke = Color3.fromRGB(170, 170, 170), ToggleEnabledOuterStroke = Color3.fromRGB(100, 100, 100), ToggleDisabledOuterStroke = Color3.fromRGB(180, 180, 180), DropdownSelected = Color3.fromRGB(230, 230, 230), DropdownUnselected = Color3.fromRGB(220, 220, 220), InputBackground = Color3.fromRGB(240, 240, 240), InputStroke = Color3.fromRGB(180, 180, 180), PlaceholderColor = Color3.fromRGB(140, 140, 140) }, Amethyst = { TextColor = Color3.fromRGB(240, 240, 240), Background = Color3.fromRGB(30, 20, 40), Topbar = Color3.fromRGB(40, 25, 50), Shadow = Color3.fromRGB(20, 15, 30), NotificationBackground = Color3.fromRGB(35, 20, 40), NotificationActionsBackground = Color3.fromRGB(240, 240, 250), TabBackground = Color3.fromRGB(60, 40, 80), TabStroke = Color3.fromRGB(70, 45, 90), TabBackgroundSelected = Color3.fromRGB(180, 140, 200), TabTextColor = Color3.fromRGB(230, 230, 240), SelectedTabTextColor = Color3.fromRGB(50, 20, 50), ElementBackground = Color3.fromRGB(45, 30, 60), ElementBackgroundHover = Color3.fromRGB(50, 35, 70), SecondaryElementBackground = Color3.fromRGB(40, 30, 55), ElementStroke = Color3.fromRGB(70, 50, 85), SecondaryElementStroke = Color3.fromRGB(65, 45, 80), SliderBackground = Color3.fromRGB(100, 60, 150), SliderProgress = Color3.fromRGB(130, 80, 180), SliderStroke = Color3.fromRGB(150, 100, 200), ToggleBackground = Color3.fromRGB(45, 30, 55), ToggleEnabled = Color3.fromRGB(120, 60, 150), ToggleDisabled = Color3.fromRGB(94, 47, 117), ToggleEnabledStroke = Color3.fromRGB(140, 80, 170), ToggleDisabledStroke = Color3.fromRGB(124, 71, 150), ToggleEnabledOuterStroke = Color3.fromRGB(90, 40, 120), ToggleDisabledOuterStroke = Color3.fromRGB(80, 50, 110), DropdownSelected = Color3.fromRGB(50, 35, 70), DropdownUnselected = Color3.fromRGB(35, 25, 50), InputBackground = Color3.fromRGB(45, 30, 60), InputStroke = Color3.fromRGB(80, 50, 110), PlaceholderColor = Color3.fromRGB(178, 150, 200) }, Green = { TextColor = Color3.fromRGB(30, 60, 30), Background = Color3.fromRGB(235, 245, 235), Topbar = Color3.fromRGB(210, 230, 210), Shadow = Color3.fromRGB(200, 220, 200), NotificationBackground = Color3.fromRGB(240, 250, 240), NotificationActionsBackground = Color3.fromRGB(220, 235, 220), TabBackground = Color3.fromRGB(215, 235, 215), TabStroke = Color3.fromRGB(190, 210, 190), TabBackgroundSelected = Color3.fromRGB(245, 255, 245), TabTextColor = Color3.fromRGB(50, 80, 50), SelectedTabTextColor = Color3.fromRGB(20, 60, 20), ElementBackground = Color3.fromRGB(225, 240, 225), ElementBackgroundHover = Color3.fromRGB(210, 225, 210), SecondaryElementBackground = Color3.fromRGB(235, 245, 235), ElementStroke = Color3.fromRGB(180, 200, 180), SecondaryElementStroke = Color3.fromRGB(180, 200, 180), SliderBackground = Color3.fromRGB(90, 160, 90), SliderProgress = Color3.fromRGB(70, 130, 70), SliderStroke = Color3.fromRGB(100, 180, 100), ToggleBackground = Color3.fromRGB(215, 235, 215), ToggleEnabled = Color3.fromRGB(60, 130, 60), ToggleDisabled = Color3.fromRGB(150, 175, 150), ToggleEnabledStroke = Color3.fromRGB(80, 150, 80), ToggleDisabledStroke = Color3.fromRGB(130, 150, 130), ToggleEnabledOuterStroke = Color3.fromRGB(100, 160, 100), ToggleDisabledOuterStroke = Color3.fromRGB(160, 180, 160), DropdownSelected = Color3.fromRGB(225, 240, 225), DropdownUnselected = Color3.fromRGB(210, 225, 210), InputBackground = Color3.fromRGB(235, 245, 235), InputStroke = Color3.fromRGB(180, 200, 180), PlaceholderColor = Color3.fromRGB(120, 140, 120) }, Bloom = { TextColor = Color3.fromRGB(60, 40, 50), Background = Color3.fromRGB(255, 240, 245), Topbar = Color3.fromRGB(250, 220, 225), Shadow = Color3.fromRGB(230, 190, 195), NotificationBackground = Color3.fromRGB(255, 235, 240), NotificationActionsBackground = Color3.fromRGB(245, 215, 225), TabBackground = Color3.fromRGB(240, 210, 220), TabStroke = Color3.fromRGB(230, 200, 210), TabBackgroundSelected = Color3.fromRGB(255, 225, 235), TabTextColor = Color3.fromRGB(80, 40, 60), SelectedTabTextColor = Color3.fromRGB(50, 30, 50), ElementBackground = Color3.fromRGB(255, 235, 240), ElementBackgroundHover = Color3.fromRGB(245, 220, 230), SecondaryElementBackground = Color3.fromRGB(255, 235, 240), ElementStroke = Color3.fromRGB(230, 200, 210), SecondaryElementStroke = Color3.fromRGB(230, 200, 210), SliderBackground = Color3.fromRGB(240, 130, 160), SliderProgress = Color3.fromRGB(250, 160, 180), SliderStroke = Color3.fromRGB(255, 180, 200), ToggleBackground = Color3.fromRGB(240, 210, 220), ToggleEnabled = Color3.fromRGB(255, 140, 170), ToggleDisabled = Color3.fromRGB(200, 180, 185), ToggleEnabledStroke = Color3.fromRGB(250, 160, 190), ToggleDisabledStroke = Color3.fromRGB(210, 180, 190), ToggleEnabledOuterStroke = Color3.fromRGB(220, 160, 180), ToggleDisabledOuterStroke = Color3.fromRGB(190, 170, 180), DropdownSelected = Color3.fromRGB(250, 220, 225), DropdownUnselected = Color3.fromRGB(240, 210, 220), InputBackground = Color3.fromRGB(255, 235, 240), InputStroke = Color3.fromRGB(220, 190, 200), PlaceholderColor = Color3.fromRGB(170, 130, 140) }, DarkBlue = { TextColor = Color3.fromRGB(230, 230, 230), Background = Color3.fromRGB(20, 25, 30), Topbar = Color3.fromRGB(30, 35, 40), Shadow = Color3.fromRGB(15, 20, 25), NotificationBackground = Color3.fromRGB(25, 30, 35), NotificationActionsBackground = Color3.fromRGB(45, 50, 55), TabBackground = Color3.fromRGB(35, 40, 45), TabStroke = Color3.fromRGB(45, 50, 60), TabBackgroundSelected = Color3.fromRGB(40, 70, 100), TabTextColor = Color3.fromRGB(200, 200, 200), SelectedTabTextColor = Color3.fromRGB(255, 255, 255), ElementBackground = Color3.fromRGB(30, 35, 40), ElementBackgroundHover = Color3.fromRGB(40, 45, 50), SecondaryElementBackground = Color3.fromRGB(35, 40, 45), ElementStroke = Color3.fromRGB(45, 50, 60), SecondaryElementStroke = Color3.fromRGB(40, 45, 55), SliderBackground = Color3.fromRGB(0, 90, 180), SliderProgress = Color3.fromRGB(0, 120, 210), SliderStroke = Color3.fromRGB(0, 150, 240), ToggleBackground = Color3.fromRGB(35, 40, 45), ToggleEnabled = Color3.fromRGB(0, 120, 210), ToggleDisabled = Color3.fromRGB(70, 70, 80), ToggleEnabledStroke = Color3.fromRGB(0, 150, 240), ToggleDisabledStroke = Color3.fromRGB(75, 75, 85), ToggleEnabledOuterStroke = Color3.fromRGB(20, 100, 180), ToggleDisabledOuterStroke = Color3.fromRGB(55, 55, 65), DropdownSelected = Color3.fromRGB(30, 70, 90), DropdownUnselected = Color3.fromRGB(25, 30, 35), InputBackground = Color3.fromRGB(25, 30, 35), InputStroke = Color3.fromRGB(45, 50, 60), PlaceholderColor = Color3.fromRGB(150, 150, 160) }, Serenity = { TextColor = Color3.fromRGB(50, 55, 60), Background = Color3.fromRGB(240, 245, 250), Topbar = Color3.fromRGB(215, 225, 235), Shadow = Color3.fromRGB(200, 210, 220), NotificationBackground = Color3.fromRGB(210, 220, 230), NotificationActionsBackground = Color3.fromRGB(225, 230, 240), TabBackground = Color3.fromRGB(200, 210, 220), TabStroke = Color3.fromRGB(180, 190, 200), TabBackgroundSelected = Color3.fromRGB(175, 185, 200), TabTextColor = Color3.fromRGB(50, 55, 60), SelectedTabTextColor = Color3.fromRGB(30, 35, 40), ElementBackground = Color3.fromRGB(210, 220, 230), ElementBackgroundHover = Color3.fromRGB(220, 230, 240), SecondaryElementBackground = Color3.fromRGB(200, 210, 220), ElementStroke = Color3.fromRGB(190, 200, 210), SecondaryElementStroke = Color3.fromRGB(180, 190, 200), SliderBackground = Color3.fromRGB(200, 220, 235), -- Lighter shade SliderProgress = Color3.fromRGB(70, 130, 180), SliderStroke = Color3.fromRGB(150, 180, 220), ToggleBackground = Color3.fromRGB(210, 220, 230), ToggleEnabled = Color3.fromRGB(70, 160, 210), ToggleDisabled = Color3.fromRGB(180, 180, 180), ToggleEnabledStroke = Color3.fromRGB(60, 150, 200), ToggleDisabledStroke = Color3.fromRGB(140, 140, 140), ToggleEnabledOuterStroke = Color3.fromRGB(100, 120, 140), ToggleDisabledOuterStroke = Color3.fromRGB(120, 120, 130), DropdownSelected = Color3.fromRGB(220, 230, 240), DropdownUnselected = Color3.fromRGB(200, 210, 220), InputBackground = Color3.fromRGB(220, 230, 240), InputStroke = Color3.fromRGB(180, 190, 200), PlaceholderColor = Color3.fromRGB(150, 150, 150) }, } } -- Services local UserInputService = getService("UserInputService") local TweenService = getService("TweenService") local Players = getService("Players") local CoreGui = getService("CoreGui") -- Interface Management local Rayfield = useStudio and script.Parent:FindFirstChild('Rayfield') or game:GetObjects("rbxassetid://10804731440")[1] local buildAttempts = 0 local correctBuild = false local warned local globalLoaded local rayfieldDestroyed = false -- True when RayfieldLibrary:Destroy() is called repeat if Rayfield:FindFirstChild('Build') and Rayfield.Build.Value == InterfaceBuild then correctBuild = true break end correctBuild = false if not warned then warn('Rayfield | Build Mismatch') print('Rayfield may encounter issues as you are running an incompatible interface version ('.. ((Rayfield:FindFirstChild('Build') and Rayfield.Build.Value) or 'No Build') ..').\n\nThis version of Rayfield is intended for interface build '..InterfaceBuild..'.') warned = true end toDestroy, Rayfield = Rayfield, useStudio and script.Parent:FindFirstChild('Rayfield') or game:GetObjects("rbxassetid://10804731440")[1] if toDestroy and not useStudio then toDestroy:Destroy() end buildAttempts = buildAttempts + 1 until buildAttempts >= 2 Rayfield.Enabled = false if gethui then Rayfield.Parent = gethui() elseif syn and syn.protect_gui then syn.protect_gui(Rayfield) Rayfield.Parent = CoreGui elseif not useStudio and CoreGui:FindFirstChild("RobloxGui") then Rayfield.Parent = CoreGui:FindFirstChild("RobloxGui") elseif not useStudio then Rayfield.Parent = CoreGui end if gethui then for _, Interface in ipairs(gethui():GetChildren()) do if Interface.Name == Rayfield.Name and Interface ~= Rayfield then Interface.Enabled = false Interface.Name = "Rayfield-Old" end end elseif not useStudio then for _, Interface in ipairs(CoreGui:GetChildren()) do if Interface.Name == Rayfield.Name and Interface ~= Rayfield then Interface.Enabled = false Interface.Name = "Rayfield-Old" end end end local minSize = Vector2.new(1024, 768) local useMobileSizing if Rayfield.AbsoluteSize.X < minSize.X and Rayfield.AbsoluteSize.Y < minSize.Y then useMobileSizing = true end if UserInputService.TouchEnabled then useMobilePrompt = true end -- Object Variables local Main = Rayfield.Main local MPrompt = Rayfield:FindFirstChild('Prompt') local Topbar = Main.Topbar local Elements = Main.Elements local LoadingFrame = Main.LoadingFrame local TabList = Main.TabList local dragBar = Rayfield:FindFirstChild('Drag') local dragInteract = dragBar and dragBar.Interact or nil local dragBarCosmetic = dragBar and dragBar.Drag or nil local dragOffset = 255 local dragOffsetMobile = 150 Rayfield.DisplayOrder = 100 LoadingFrame.Version.Text = Release -- Thanks to Latte Softworks for the Lucide integration for Roblox local Icons = useStudio and require(script.Parent.icons) or loadWithTimeout('https://raw.githubusercontent.com/SiriusSoftwareLtd/Rayfield/refs/heads/main/icons.lua') -- Variables local CFileName = nil local CEnabled = false local Minimised = false local Hidden = false local Debounce = false local searchOpen = false local Notifications = Rayfield.Notifications local SelectedTheme = RayfieldLibrary.Theme.Default local function ChangeTheme(Theme) if typeof(Theme) == 'string' then SelectedTheme = RayfieldLibrary.Theme[Theme] elseif typeof(Theme) == 'table' then SelectedTheme = Theme end Rayfield.Main.BackgroundColor3 = SelectedTheme.Background Rayfield.Main.Topbar.BackgroundColor3 = SelectedTheme.Topbar Rayfield.Main.Topbar.CornerRepair.BackgroundColor3 = SelectedTheme.Topbar Rayfield.Main.Shadow.Image.ImageColor3 = SelectedTheme.Shadow Rayfield.Main.Topbar.ChangeSize.ImageColor3 = SelectedTheme.TextColor Rayfield.Main.Topbar.Hide.ImageColor3 = SelectedTheme.TextColor Rayfield.Main.Topbar.Search.ImageColor3 = SelectedTheme.TextColor if Topbar:FindFirstChild('Settings') then Rayfield.Main.Topbar.Settings.ImageColor3 = SelectedTheme.TextColor Rayfield.Main.Topbar.Divider.BackgroundColor3 = SelectedTheme.ElementStroke end Main.Search.BackgroundColor3 = SelectedTheme.TextColor Main.Search.Shadow.ImageColor3 = SelectedTheme.TextColor Main.Search.Search.ImageColor3 = SelectedTheme.TextColor Main.Search.Input.PlaceholderColor3 = SelectedTheme.TextColor Main.Search.UIStroke.Color = SelectedTheme.SecondaryElementStroke if Main:FindFirstChild('Notice') then Main.Notice.BackgroundColor3 = SelectedTheme.Background end for _, text in ipairs(Rayfield:GetDescendants()) do if text.Parent.Parent ~= Notifications then if text:IsA('TextLabel') or text:IsA('TextBox') then text.TextColor3 = SelectedTheme.TextColor end end end for _, TabPage in ipairs(Elements:GetChildren()) do for _, Element in ipairs(TabPage:GetChildren()) do if Element.ClassName == "Frame" and Element.Name ~= "Placeholder" and Element.Name ~= "SectionSpacing" and Element.Name ~= "Divider" and Element.Name ~= "SectionTitle" and Element.Name ~= "SearchTitle-fsefsefesfsefesfesfThanks" then Element.BackgroundColor3 = SelectedTheme.ElementBackground Element.UIStroke.Color = SelectedTheme.ElementStroke end end end end local function getIcon(name : string): {id: number, imageRectSize: Vector2, imageRectOffset: Vector2} if not Icons then warn("Lucide Icons: Cannot use icons as icons library is not loaded") return end name = string.match(string.lower(name), "^%s*(.*)%s*$") :: string local sizedicons = Icons['48px'] local r = sizedicons[name] if not r then error(`Lucide Icons: Failed to find icon by the name of "{name}"`, 2) end local rirs = r[2] local riro = r[3] if type(r[1]) ~= "number" or type(rirs) ~= "table" or type(riro) ~= "table" then error("Lucide Icons: Internal error: Invalid auto-generated asset entry") end local irs = Vector2.new(rirs[1], rirs[2]) local iro = Vector2.new(riro[1], riro[2]) local asset = { id = r[1], imageRectSize = irs, imageRectOffset = iro, } return asset end -- Converts ID to asset URI. Returns rbxassetid://0 if ID is not a number local function getAssetUri(id: any): string local assetUri = "rbxassetid://0" -- Default to empty image if type(id) == "number" then assetUri = "rbxassetid://" .. id elseif type(id) == "string" and not Icons then warn("Rayfield | Cannot use Lucide icons as icons library is not loaded") else warn("Rayfield | The icon argument must either be an icon ID (number) or a Lucide icon name (string)") end return assetUri end local function makeDraggable(object, dragObject, enableTaptic, tapticOffset) local dragging = false local relative = nil local offset = Vector2.zero local screenGui = object:FindFirstAncestorWhichIsA("ScreenGui") if screenGui and screenGui.IgnoreGuiInset then offset += getService('GuiService'):GetGuiInset() end local function connectFunctions() if dragBar and enableTaptic then dragBar.MouseEnter:Connect(function() if not dragging and not Hidden then TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 0.5, Size = UDim2.new(0, 120, 0, 4)}):Play() end end) dragBar.MouseLeave:Connect(function() if not dragging and not Hidden then TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 0.7, Size = UDim2.new(0, 100, 0, 4)}):Play() end end) end end connectFunctions() dragObject.InputBegan:Connect(function(input, processed) if processed then return end local inputType = input.UserInputType.Name if inputType == "MouseButton1" or inputType == "Touch" then dragging = true relative = object.AbsolutePosition + object.AbsoluteSize * object.AnchorPoint - UserInputService:GetMouseLocation() if enableTaptic and not Hidden then TweenService:Create(dragBarCosmetic, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 110, 0, 4), BackgroundTransparency = 0}):Play() end end end) local inputEnded = UserInputService.InputEnded:Connect(function(input) if not dragging then return end local inputType = input.UserInputType.Name if inputType == "MouseButton1" or inputType == "Touch" then dragging = false connectFunctions() if enableTaptic and not Hidden then TweenService:Create(dragBarCosmetic, TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 100, 0, 4), BackgroundTransparency = 0.7}):Play() end end end) local renderStepped = RunService.RenderStepped:Connect(function() if dragging and not Hidden then local position = UserInputService:GetMouseLocation() + relative + offset if enableTaptic and tapticOffset then TweenService:Create(object, TweenInfo.new(0.4, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Position = UDim2.fromOffset(position.X, position.Y)}):Play() TweenService:Create(dragObject.Parent, TweenInfo.new(0.05, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Position = UDim2.fromOffset(position.X, position.Y + ((useMobileSizing and tapticOffset[2]) or tapticOffset[1]))}):Play() else if dragBar and tapticOffset then dragBar.Position = UDim2.fromOffset(position.X, position.Y + ((useMobileSizing and tapticOffset[2]) or tapticOffset[1])) end object.Position = UDim2.fromOffset(position.X, position.Y) end end end) object.Destroying:Connect(function() if inputEnded then inputEnded:Disconnect() end if renderStepped then renderStepped:Disconnect() end end) end local function PackColor(Color) return {R = Color.R * 255, G = Color.G * 255, B = Color.B * 255} end local function UnpackColor(Color) return Color3.fromRGB(Color.R, Color.G, Color.B) end local function LoadConfiguration(Configuration) local success, Data = pcall(function() return HttpService:JSONDecode(Configuration) end) local changed if not success then warn('Rayfield had an issue decoding the configuration file, please try delete the file and reopen Rayfield.') return end -- Iterate through current UI elements' flags for FlagName, Flag in pairs(RayfieldLibrary.Flags) do local FlagValue = Data[FlagName] if (typeof(FlagValue) == 'boolean' and FlagValue == false) or FlagValue then task.spawn(function() if Flag.Type == "ColorPicker" then changed = true Flag:Set(UnpackColor(FlagValue)) else if (Flag.CurrentValue or Flag.CurrentKeybind or Flag.CurrentOption or Flag.Color) ~= FlagValue then changed = true Flag:Set(FlagValue) end end end) else warn("Rayfield | Unable to find '"..FlagName.. "' in the save file.") print("The error above may not be an issue if new elements have been added or not been set values.") --RayfieldLibrary:Notify({Title = "Rayfield Flags", Content = "Rayfield was unable to find '"..FlagName.. "' in the save file. Check sirius.menu/discord for help.", Image = 3944688398}) end end return changed end local function SaveConfiguration() if not CEnabled or not globalLoaded then return end if debugX then print('Saving') end local Data = {} for i, v in pairs(RayfieldLibrary.Flags) do if v.Type == "ColorPicker" then Data[i] = PackColor(v.Color) else if typeof(v.CurrentValue) == 'boolean' then if v.CurrentValue == false then Data[i] = false else Data[i] = v.CurrentValue or v.CurrentKeybind or v.CurrentOption or v.Color end else Data[i] = v.CurrentValue or v.CurrentKeybind or v.CurrentOption or v.Color end end end if useStudio then if script.Parent:FindFirstChild('configuration') then script.Parent.configuration:Destroy() end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Parent = script.Parent ScreenGui.Name = 'configuration' local TextBox = Instance.new("TextBox") TextBox.Parent = ScreenGui TextBox.Size = UDim2.new(0, 800, 0, 50) TextBox.AnchorPoint = Vector2.new(0.5, 0) TextBox.Position = UDim2.new(0.5, 0, 0, 30) TextBox.Text = HttpService:JSONEncode(Data) TextBox.ClearTextOnFocus = false end if debugX then warn(HttpService:JSONEncode(Data)) end if writefile then writefile(ConfigurationFolder .. "/" .. CFileName .. ConfigurationExtension, tostring(HttpService:JSONEncode(Data))) end end function RayfieldLibrary:Notify(data) -- action e.g open messages task.spawn(function() -- Notification Object Creation local newNotification = Notifications.Template:Clone() newNotification.Name = data.Title or 'No Title Provided' newNotification.Parent = Notifications newNotification.LayoutOrder = #Notifications:GetChildren() newNotification.Visible = false -- Set Data newNotification.Title.Text = data.Title or "Unknown Title" newNotification.Description.Text = data.Content or "Unknown Content" if data.Image then if typeof(data.Image) == 'string' and Icons then local asset = getIcon(data.Image) newNotification.Icon.Image = 'rbxassetid://'..asset.id newNotification.Icon.ImageRectOffset = asset.imageRectOffset newNotification.Icon.ImageRectSize = asset.imageRectSize else newNotification.Icon.Image = getAssetUri(data.Image) end else newNotification.Icon.Image = "rbxassetid://" .. 0 end -- Set initial transparency values newNotification.Title.TextColor3 = SelectedTheme.TextColor newNotification.Description.TextColor3 = SelectedTheme.TextColor newNotification.BackgroundColor3 = SelectedTheme.Background newNotification.UIStroke.Color = SelectedTheme.TextColor newNotification.Icon.ImageColor3 = SelectedTheme.TextColor newNotification.BackgroundTransparency = 1 newNotification.Title.TextTransparency = 1 newNotification.Description.TextTransparency = 1 newNotification.UIStroke.Transparency = 1 newNotification.Shadow.ImageTransparency = 1 newNotification.Size = UDim2.new(1, 0, 0, 800) newNotification.Icon.ImageTransparency = 1 newNotification.Icon.BackgroundTransparency = 1 task.wait() newNotification.Visible = true if data.Actions then warn('Rayfield | Not seeing your actions in notifications?') print("Notification Actions are being sunset for now, keep up to date on when they're back in the discord. (sirius.menu/discord)") end -- Calculate textbounds and set initial values local bounds = {newNotification.Title.TextBounds.Y, newNotification.Description.TextBounds.Y} newNotification.Size = UDim2.new(1, -60, 0, -Notifications:FindFirstChild("UIListLayout").Padding.Offset) newNotification.Icon.Size = UDim2.new(0, 32, 0, 32) newNotification.Icon.Position = UDim2.new(0, 20, 0.5, 0) TweenService:Create(newNotification, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, 0, 0, math.max(bounds[1] + bounds[2] + 31, 60))}):Play() task.wait(0.15) TweenService:Create(newNotification, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.45}):Play() TweenService:Create(newNotification.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(newNotification.Icon, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() task.wait(0.05) TweenService:Create(newNotification.Description, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.35}):Play() TweenService:Create(newNotification.UIStroke, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {Transparency = 0.95}):Play() TweenService:Create(newNotification.Shadow, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0.82}):Play() local waitDuration = math.min(math.max((#newNotification.Description.Text * 0.1) + 2.5, 3), 10) task.wait(data.Duration or waitDuration) newNotification.Icon.Visible = false TweenService:Create(newNotification, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(newNotification.UIStroke, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(newNotification.Shadow, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(newNotification.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(newNotification.Description, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(newNotification, TweenInfo.new(1, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -90, 0, 0)}):Play() task.wait(1) TweenService:Create(newNotification, TweenInfo.new(1, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -90, 0, -Notifications:FindFirstChild("UIListLayout").Padding.Offset)}):Play() newNotification.Visible = false newNotification:Destroy() end) end local function openSearch() searchOpen = true Main.Search.BackgroundTransparency = 1 Main.Search.Shadow.ImageTransparency = 1 Main.Search.Input.TextTransparency = 1 Main.Search.Search.ImageTransparency = 1 Main.Search.UIStroke.Transparency = 1 Main.Search.Size = UDim2.new(1, 0, 0, 80) Main.Search.Position = UDim2.new(0.5, 0, 0, 70) Main.Search.Input.Interactable = true Main.Search.Visible = true for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then tabbtn.Interact.Visible = false TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() end end Main.Search.Input:CaptureFocus() TweenService:Create(Main.Search.Shadow, TweenInfo.new(0.05, Enum.EasingStyle.Quint), {ImageTransparency = 0.95}):Play() TweenService:Create(Main.Search, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.5, 0, 0, 57), BackgroundTransparency = 0.9}):Play() TweenService:Create(Main.Search.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0.8}):Play() TweenService:Create(Main.Search.Input, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(Main.Search.Search, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0.5}):Play() TweenService:Create(Main.Search, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -35, 0, 35)}):Play() end local function closeSearch() searchOpen = false TweenService:Create(Main.Search, TweenInfo.new(0.35, Enum.EasingStyle.Quint), {BackgroundTransparency = 1, Size = UDim2.new(1, -55, 0, 30)}):Play() TweenService:Create(Main.Search.Search, TweenInfo.new(0.15, Enum.EasingStyle.Quint), {ImageTransparency = 1}):Play() TweenService:Create(Main.Search.Shadow, TweenInfo.new(0.15, Enum.EasingStyle.Quint), {ImageTransparency = 1}):Play() TweenService:Create(Main.Search.UIStroke, TweenInfo.new(0.15, Enum.EasingStyle.Quint), {Transparency = 1}):Play() TweenService:Create(Main.Search.Input, TweenInfo.new(0.15, Enum.EasingStyle.Quint), {TextTransparency = 1}):Play() for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then tabbtn.Interact.Visible = true if tostring(Elements.UIPageLayout.CurrentPage) == tabbtn.Title.Text then TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() else TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() end end end Main.Search.Input.Text = '' Main.Search.Input.Interactable = false end local function Hide(notify: boolean?) if MPrompt then MPrompt.Title.TextColor3 = Color3.fromRGB(255, 255, 255) MPrompt.Position = UDim2.new(0.5, 0, 0, -50) MPrompt.Size = UDim2.new(0, 40, 0, 10) MPrompt.BackgroundTransparency = 1 MPrompt.Title.TextTransparency = 1 MPrompt.Visible = true end task.spawn(closeSearch) Debounce = true if notify then if useMobilePrompt then RayfieldLibrary:Notify({Title = "Interface Hidden", Content = "The interface has been hidden, you can unhide the interface by tapping 'Show'.", Duration = 7, Image = 4400697855}) else RayfieldLibrary:Notify({Title = "Interface Hidden", Content = `The interface has been hidden, you can unhide the interface by tapping {getSetting("General", "rayfieldOpen")}.`, Duration = 7, Image = 4400697855}) end end TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 470, 0, 0)}):Play() TweenService:Create(Main.Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 470, 0, 45)}):Play() TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Main.Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Main.Topbar.Divider, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Main.Topbar.CornerRepair, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Main.Topbar.Title, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(Topbar.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play() if useMobilePrompt and MPrompt then TweenService:Create(MPrompt, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 120, 0, 30), Position = UDim2.new(0.5, 0, 0, 20), BackgroundTransparency = 0.3}):Play() TweenService:Create(MPrompt.Title, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0.3}):Play() end for _, TopbarButton in ipairs(Topbar:GetChildren()) do if TopbarButton.ClassName == "ImageButton" then TweenService:Create(TopbarButton, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() end end for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() end end dragInteract.Visible = false for _, tab in ipairs(Elements:GetChildren()) do if tab.Name ~= "Template" and tab.ClassName == "ScrollingFrame" and tab.Name ~= "Placeholder" then for _, element in ipairs(tab:GetChildren()) do if element.ClassName == "Frame" then if element.Name ~= "SectionSpacing" and element.Name ~= "Placeholder" then if element.Name == "SectionTitle" or element.Name == 'SearchTitle-fsefsefesfsefesfesfThanks' then TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() elseif element.Name == 'Divider' then TweenService:Create(element.Divider, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() else TweenService:Create(element, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(element.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() end for _, child in ipairs(element:GetChildren()) do if child.ClassName == "Frame" or child.ClassName == "TextLabel" or child.ClassName == "TextBox" or child.ClassName == "ImageButton" or child.ClassName == "ImageLabel" then child.Visible = false end end end end end end end task.wait(0.5) Main.Visible = false Debounce = false end local function Maximise() Debounce = true Topbar.ChangeSize.Image = "rbxassetid://"..10137941941 TweenService:Create(Topbar.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 0.6}):Play() TweenService:Create(Topbar.CornerRepair, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Topbar.Divider, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 0.7}):Play() TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = useMobileSizing and UDim2.new(0, 500, 0, 275) or UDim2.new(0, 500, 0, 475)}):Play() TweenService:Create(Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 500, 0, 45)}):Play() TabList.Visible = true task.wait(0.2) Elements.Visible = true for _, tab in ipairs(Elements:GetChildren()) do if tab.Name ~= "Template" and tab.ClassName == "ScrollingFrame" and tab.Name ~= "Placeholder" then for _, element in ipairs(tab:GetChildren()) do if element.ClassName == "Frame" then if element.Name ~= "SectionSpacing" and element.Name ~= "Placeholder" then if element.Name == "SectionTitle" or element.Name == 'SearchTitle-fsefsefesfsefesfesfThanks' then TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.4}):Play() elseif element.Name == 'Divider' then TweenService:Create(element.Divider, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.85}):Play() else TweenService:Create(element, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(element.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() end for _, child in ipairs(element:GetChildren()) do if child.ClassName == "Frame" or child.ClassName == "TextLabel" or child.ClassName == "TextBox" or child.ClassName == "ImageButton" or child.ClassName == "ImageLabel" then child.Visible = true end end end end end end end task.wait(0.1) for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then if tostring(Elements.UIPageLayout.CurrentPage) == tabbtn.Title.Text then TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() else TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() end end end task.wait(0.5) Debounce = false end local function Unhide() Debounce = true Main.Position = UDim2.new(0.5, 0, 0.5, 0) Main.Visible = true TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = useMobileSizing and UDim2.new(0, 500, 0, 275) or UDim2.new(0, 500, 0, 475)}):Play() TweenService:Create(Main.Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 500, 0, 45)}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.6}):Play() TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.Topbar.Divider, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.Topbar.CornerRepair, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.Topbar.Title, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() if MPrompt then TweenService:Create(MPrompt, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 40, 0, 10), Position = UDim2.new(0.5, 0, 0, -50), BackgroundTransparency = 1}):Play() TweenService:Create(MPrompt.Title, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() task.spawn(function() task.wait(0.5) MPrompt.Visible = false end) end if Minimised then task.spawn(Maximise) end dragBar.Position = useMobileSizing and UDim2.new(0.5, 0, 0.5, dragOffsetMobile) or UDim2.new(0.5, 0, 0.5, dragOffset) dragInteract.Visible = true for _, TopbarButton in ipairs(Topbar:GetChildren()) do if TopbarButton.ClassName == "ImageButton" then if TopbarButton.Name == 'Icon' then TweenService:Create(TopbarButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() else TweenService:Create(TopbarButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() end end end for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then if tostring(Elements.UIPageLayout.CurrentPage) == tabbtn.Title.Text then TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() else TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() end end end for _, tab in ipairs(Elements:GetChildren()) do if tab.Name ~= "Template" and tab.ClassName == "ScrollingFrame" and tab.Name ~= "Placeholder" then for _, element in ipairs(tab:GetChildren()) do if element.ClassName == "Frame" then if element.Name ~= "SectionSpacing" and element.Name ~= "Placeholder" then if element.Name == "SectionTitle" or element.Name == 'SearchTitle-fsefsefesfsefesfesfThanks' then TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0.4}):Play() elseif element.Name == 'Divider' then TweenService:Create(element.Divider, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.85}):Play() else TweenService:Create(element, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(element.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() end for _, child in ipairs(element:GetChildren()) do if child.ClassName == "Frame" or child.ClassName == "TextLabel" or child.ClassName == "TextBox" or child.ClassName == "ImageButton" or child.ClassName == "ImageLabel" then child.Visible = true end end end end end end end TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 0.5}):Play() task.wait(0.5) Minimised = false Debounce = false end local function Minimise() Debounce = true Topbar.ChangeSize.Image = "rbxassetid://"..11036884234 Topbar.UIStroke.Color = SelectedTheme.ElementStroke task.spawn(closeSearch) for _, tabbtn in ipairs(TabList:GetChildren()) do if tabbtn.ClassName == "Frame" and tabbtn.Name ~= "Placeholder" then TweenService:Create(tabbtn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(tabbtn.Image, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(tabbtn.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(tabbtn.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() end end for _, tab in ipairs(Elements:GetChildren()) do if tab.Name ~= "Template" and tab.ClassName == "ScrollingFrame" and tab.Name ~= "Placeholder" then for _, element in ipairs(tab:GetChildren()) do if element.ClassName == "Frame" then if element.Name ~= "SectionSpacing" and element.Name ~= "Placeholder" then if element.Name == "SectionTitle" or element.Name == 'SearchTitle-fsefsefesfsefesfesfThanks' then TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() elseif element.Name == 'Divider' then TweenService:Create(element.Divider, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() else TweenService:Create(element, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(element.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(element.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() end for _, child in ipairs(element:GetChildren()) do if child.ClassName == "Frame" or child.ClassName == "TextLabel" or child.ClassName == "TextBox" or child.ClassName == "ImageButton" or child.ClassName == "ImageLabel" then child.Visible = false end end end end end end end TweenService:Create(dragBarCosmetic, TweenInfo.new(0.25, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play() TweenService:Create(Topbar.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(Topbar.CornerRepair, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Topbar.Divider, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 495, 0, 45)}):Play() TweenService:Create(Topbar, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 495, 0, 45)}):Play() task.wait(0.3) Elements.Visible = false TabList.Visible = false task.wait(0.2) Debounce = false end local function saveSettings() -- Save settings to config file local encoded local success, err = pcall(function() encoded = HttpService:JSONEncode(settingsTable) end) if success then if useStudio then if script.Parent['get.val'] then script.Parent['get.val'].Value = encoded end end if writefile then writefile(RayfieldFolder..'/settings'..ConfigurationExtension, encoded) end end end local function updateSetting(category: string, setting: string, value: any) if not settingsInitialized then return end settingsTable[category][setting].Value = value overriddenSettings[`{category}.{setting}`] = nil -- If user changes an overriden setting, remove the override saveSettings() end local function createSettings(window) if not (writefile and isfile and readfile and isfolder and makefolder) and not useStudio then if Topbar['Settings'] then Topbar.Settings.Visible = false end Topbar['Search'].Position = UDim2.new(1, -75, 0.5, 0) warn('Can\'t create settings as no file-saving functionality is available.') return end local newTab = window:CreateTab('Rayfield Settings', 0, true) if TabList['Rayfield Settings'] then TabList['Rayfield Settings'].LayoutOrder = 1000 end if Elements['Rayfield Settings'] then Elements['Rayfield Settings'].LayoutOrder = 1000 end -- Create sections and elements for categoryName, settingCategory in pairs(settingsTable) do newTab:CreateSection(categoryName) for settingName, setting in pairs(settingCategory) do if setting.Type == 'input' then setting.Element = newTab:CreateInput({ Name = setting.Name, CurrentValue = setting.Value, PlaceholderText = setting.Placeholder, Ext = true, RemoveTextAfterFocusLost = setting.ClearOnFocus, Callback = function(Value) updateSetting(categoryName, settingName, Value) end, }) elseif setting.Type == 'toggle' then setting.Element = newTab:CreateToggle({ Name = setting.Name, CurrentValue = setting.Value, Ext = true, Callback = function(Value) updateSetting(categoryName, settingName, Value) end, }) elseif setting.Type == 'bind' then setting.Element = newTab:CreateKeybind({ Name = setting.Name, CurrentKeybind = setting.Value, HoldToInteract = false, Ext = true, CallOnChange = true, Callback = function(Value) updateSetting(categoryName, settingName, Value) end, }) end end end settingsCreated = true loadSettings() saveSettings() end function RayfieldLibrary:CreateWindow(Settings) print('creating window') if Rayfield:FindFirstChild('Loading') then if getgenv and not getgenv().rayfieldCached then Rayfield.Enabled = true Rayfield.Loading.Visible = true task.wait(1.4) Rayfield.Loading.Visible = false end end if getgenv then getgenv().rayfieldCached = true end if not correctBuild and not Settings.DisableBuildWarnings then task.delay(3, function() RayfieldLibrary:Notify({Title = 'Build Mismatch', Content = 'Rayfield may encounter issues as you are running an incompatible interface version ('.. ((Rayfield:FindFirstChild('Build') and Rayfield.Build.Value) or 'No Build') ..').\n\nThis version of Rayfield is intended for interface build '..InterfaceBuild..'.\n\nTry rejoining and then run the script twice.', Image = 4335487866, Duration = 15}) end) end if Settings.ToggleUIKeybind then -- Can either be a string or an Enum.KeyCode local keybind = Settings.ToggleUIKeybind if type(keybind) == "string" then keybind = string.upper(keybind) assert(pcall(function() return Enum.KeyCode[keybind] end), "ToggleUIKeybind must be a valid KeyCode") overrideSetting("General", "rayfieldOpen", keybind) elseif typeof(keybind) == "EnumItem" then assert(keybind.EnumType == Enum.KeyCode, "ToggleUIKeybind must be a KeyCode enum") overrideSetting("General", "rayfieldOpen", keybind.Name) else error("ToggleUIKeybind must be a string or KeyCode enum") end end if isfolder and not isfolder(RayfieldFolder) then makefolder(RayfieldFolder) end -- Attempt to report an event to analytics if not requestsDisabled then sendReport("window_created", Settings.Name or "Unknown") end local Passthrough = false Topbar.Title.Text = Settings.Name Main.Size = UDim2.new(0, 420, 0, 100) Main.Visible = true Main.BackgroundTransparency = 1 if Main:FindFirstChild('Notice') then Main.Notice.Visible = false end Main.Shadow.Image.ImageTransparency = 1 LoadingFrame.Title.TextTransparency = 1 LoadingFrame.Subtitle.TextTransparency = 1 if Settings.ShowText then MPrompt.Title.Text = 'Show '..Settings.ShowText end LoadingFrame.Version.TextTransparency = 1 LoadingFrame.Title.Text = Settings.LoadingTitle or "Rayfield" LoadingFrame.Subtitle.Text = Settings.LoadingSubtitle or "Interface Suite" if Settings.LoadingTitle ~= "Rayfield Interface Suite" then LoadingFrame.Version.Text = "Rayfield UI" end if Settings.Icon and Settings.Icon ~= 0 and Topbar:FindFirstChild('Icon') then Topbar.Icon.Visible = true Topbar.Title.Position = UDim2.new(0, 47, 0.5, 0) if Settings.Icon then if typeof(Settings.Icon) == 'string' and Icons then local asset = getIcon(Settings.Icon) Topbar.Icon.Image = 'rbxassetid://'..asset.id Topbar.Icon.ImageRectOffset = asset.imageRectOffset Topbar.Icon.ImageRectSize = asset.imageRectSize else Topbar.Icon.Image = getAssetUri(Settings.Icon) end else Topbar.Icon.Image = "rbxassetid://" .. 0 end end if dragBar then dragBar.Visible = false dragBarCosmetic.BackgroundTransparency = 1 dragBar.Visible = true end if Settings.Theme then local success, result = pcall(ChangeTheme, Settings.Theme) if not success then local success, result2 = pcall(ChangeTheme, 'Default') if not success then warn('CRITICAL ERROR - NO DEFAULT THEME') print(result2) end warn('issue rendering theme. no theme on file') print(result) end end Topbar.Visible = false Elements.Visible = false LoadingFrame.Visible = true if not Settings.DisableRayfieldPrompts then task.spawn(function() while true do task.wait(math.random(180, 600)) RayfieldLibrary:Notify({ Title = "Rayfield Interface", Content = "Enjoying this UI library? Find it at sirius.menu/discord", Duration = 7, Image = 4370033185, }) end end) end pcall(function() if not Settings.ConfigurationSaving.FileName then Settings.ConfigurationSaving.FileName = tostring(game.PlaceId) end if Settings.ConfigurationSaving.Enabled == nil then Settings.ConfigurationSaving.Enabled = false end CFileName = Settings.ConfigurationSaving.FileName ConfigurationFolder = Settings.ConfigurationSaving.FolderName or ConfigurationFolder CEnabled = Settings.ConfigurationSaving.Enabled if Settings.ConfigurationSaving.Enabled then if not isfolder(ConfigurationFolder) then makefolder(ConfigurationFolder) end end end) makeDraggable(Main, Topbar, false, {dragOffset, dragOffsetMobile}) if dragBar then dragBar.Position = useMobileSizing and UDim2.new(0.5, 0, 0.5, dragOffsetMobile) or UDim2.new(0.5, 0, 0.5, dragOffset) makeDraggable(Main, dragInteract, true, {dragOffset, dragOffsetMobile}) end for _, TabButton in ipairs(TabList:GetChildren()) do if TabButton.ClassName == "Frame" and TabButton.Name ~= "Placeholder" then TabButton.BackgroundTransparency = 1 TabButton.Title.TextTransparency = 1 TabButton.Image.ImageTransparency = 1 TabButton.UIStroke.Transparency = 1 end end if Settings.Discord and Settings.Discord.Enabled and not useStudio then if isfolder and not isfolder(RayfieldFolder.."/Discord Invites") then makefolder(RayfieldFolder.."/Discord Invites") end if isfile and not isfile(RayfieldFolder.."/Discord Invites".."/"..Settings.Discord.Invite..ConfigurationExtension) then if requestFunc then pcall(function() requestFunc({ Url = 'http://127.0.0.1:6463/rpc?v=1', Method = 'POST', Headers = { ['Content-Type'] = 'application/json', Origin = 'https://discord.com' }, Body = HttpService:JSONEncode({ cmd = 'INVITE_BROWSER', nonce = HttpService:GenerateGUID(false), args = {code = Settings.Discord.Invite} }) }) end) end if Settings.Discord.RememberJoins then -- We do logic this way so if the developer changes this setting, the user still won't be prompted, only new users writefile(RayfieldFolder.."/Discord Invites".."/"..Settings.Discord.Invite..ConfigurationExtension,"Rayfield RememberJoins is true for this invite, this invite will not ask you to join again") end end end if (Settings.KeySystem) then if not Settings.KeySettings then Passthrough = true return end if isfolder and not isfolder(RayfieldFolder.."/Key System") then makefolder(RayfieldFolder.."/Key System") end if typeof(Settings.KeySettings.Key) == "string" then Settings.KeySettings.Key = {Settings.KeySettings.Key} end if Settings.KeySettings.GrabKeyFromSite then for i, Key in ipairs(Settings.KeySettings.Key) do local Success, Response = pcall(function() Settings.KeySettings.Key[i] = tostring(game:HttpGet(Key):gsub("[\n\r]", " ")) Settings.KeySettings.Key[i] = string.gsub(Settings.KeySettings.Key[i], " ", "") end) if not Success then print("Rayfield | "..Key.." Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') end end end if not Settings.KeySettings.FileName then Settings.KeySettings.FileName = "No file name specified" end if isfile and isfile(RayfieldFolder.."/Key System".."/"..Settings.KeySettings.FileName..ConfigurationExtension) then for _, MKey in ipairs(Settings.KeySettings.Key) do if string.find(readfile(RayfieldFolder.."/Key System".."/"..Settings.KeySettings.FileName..ConfigurationExtension), MKey) then Passthrough = true end end end if not Passthrough then local AttemptsRemaining = math.random(2, 5) Rayfield.Enabled = false local KeyUI = useStudio and script.Parent:FindFirstChild('Key') or game:GetObjects("rbxassetid://11380036235")[1] KeyUI.Enabled = true if gethui then KeyUI.Parent = gethui() elseif syn and syn.protect_gui then syn.protect_gui(KeyUI) KeyUI.Parent = CoreGui elseif not useStudio and CoreGui:FindFirstChild("RobloxGui") then KeyUI.Parent = CoreGui:FindFirstChild("RobloxGui") elseif not useStudio then KeyUI.Parent = CoreGui end if gethui then for _, Interface in ipairs(gethui():GetChildren()) do if Interface.Name == KeyUI.Name and Interface ~= KeyUI then Interface.Enabled = false Interface.Name = "KeyUI-Old" end end elseif not useStudio then for _, Interface in ipairs(CoreGui:GetChildren()) do if Interface.Name == KeyUI.Name and Interface ~= KeyUI then Interface.Enabled = false Interface.Name = "KeyUI-Old" end end end local KeyMain = KeyUI.Main KeyMain.Title.Text = Settings.KeySettings.Title or Settings.Name KeyMain.Subtitle.Text = Settings.KeySettings.Subtitle or "Key System" KeyMain.NoteMessage.Text = Settings.KeySettings.Note or "No instructions" KeyMain.Size = UDim2.new(0, 467, 0, 175) KeyMain.BackgroundTransparency = 1 KeyMain.Shadow.Image.ImageTransparency = 1 KeyMain.Title.TextTransparency = 1 KeyMain.Subtitle.TextTransparency = 1 KeyMain.KeyNote.TextTransparency = 1 KeyMain.Input.BackgroundTransparency = 1 KeyMain.Input.UIStroke.Transparency = 1 KeyMain.Input.InputBox.TextTransparency = 1 KeyMain.NoteTitle.TextTransparency = 1 KeyMain.NoteMessage.TextTransparency = 1 KeyMain.Hide.ImageTransparency = 1 TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 500, 0, 187)}):Play() TweenService:Create(KeyMain.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 0.5}):Play() task.wait(0.05) TweenService:Create(KeyMain.Title, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(KeyMain.Subtitle, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(KeyMain.KeyNote, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(KeyMain.Input, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(KeyMain.Input.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(KeyMain.Input.InputBox, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(KeyMain.NoteTitle, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(KeyMain.NoteMessage, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.15) TweenService:Create(KeyMain.Hide, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {ImageTransparency = 0.3}):Play() KeyUI.Main.Input.InputBox.FocusLost:Connect(function() if #KeyUI.Main.Input.InputBox.Text == 0 then return end local KeyFound = false local FoundKey = '' for _, MKey in ipairs(Settings.KeySettings.Key) do --if string.find(KeyMain.Input.InputBox.Text, MKey) then -- KeyFound = true -- FoundKey = MKey --end -- stricter key check if KeyMain.Input.InputBox.Text == MKey then KeyFound = true FoundKey = MKey end end if KeyFound then TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 467, 0, 175)}):Play() TweenService:Create(KeyMain.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(KeyMain.Title, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Subtitle, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.KeyNote, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Input, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain.Input.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(KeyMain.Input.InputBox, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteTitle, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteMessage, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Hide, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() task.wait(0.51) Passthrough = true KeyMain.Visible = false if Settings.KeySettings.SaveKey then if writefile then writefile(RayfieldFolder.."/Key System".."/"..Settings.KeySettings.FileName..ConfigurationExtension, FoundKey) end RayfieldLibrary:Notify({Title = "Key System", Content = "The key for this script has been saved successfully.", Image = 3605522284}) end else if AttemptsRemaining == 0 then TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 467, 0, 175)}):Play() TweenService:Create(KeyMain.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(KeyMain.Title, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Subtitle, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.KeyNote, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Input, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain.Input.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(KeyMain.Input.InputBox, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteTitle, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteMessage, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Hide, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() task.wait(0.45) Players.LocalPlayer:Kick("No Attempts Remaining") game:Shutdown() end KeyMain.Input.InputBox.Text = "" AttemptsRemaining = AttemptsRemaining - 1 TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 467, 0, 175)}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.4, Enum.EasingStyle.Elastic), {Position = UDim2.new(0.495,0,0.5,0)}):Play() task.wait(0.1) TweenService:Create(KeyMain, TweenInfo.new(0.4, Enum.EasingStyle.Elastic), {Position = UDim2.new(0.505,0,0.5,0)}):Play() task.wait(0.1) TweenService:Create(KeyMain, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.5,0,0.5,0)}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 500, 0, 187)}):Play() end end) KeyMain.Hide.MouseButton1Click:Connect(function() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 467, 0, 175)}):Play() TweenService:Create(KeyMain.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(KeyMain.Title, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Subtitle, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.KeyNote, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Input, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(KeyMain.Input.UIStroke, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(KeyMain.Input.InputBox, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteTitle, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.NoteMessage, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(KeyMain.Hide, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() task.wait(0.51) RayfieldLibrary:Destroy() KeyUI:Destroy() end) else Passthrough = true end end if Settings.KeySystem then repeat task.wait() until Passthrough end Notifications.Template.Visible = false Notifications.Visible = true Rayfield.Enabled = true task.wait(0.5) TweenService:Create(Main, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.6}):Play() task.wait(0.1) TweenService:Create(LoadingFrame.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(LoadingFrame.Subtitle, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(LoadingFrame.Version, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() Elements.Template.LayoutOrder = 100000 Elements.Template.Visible = false Elements.UIPageLayout.FillDirection = Enum.FillDirection.Horizontal TabList.Template.Visible = false -- Tab local FirstTab = false local Window = {} function Window:CreateTab(Name, Image, Ext) local SDone = false local TabButton = TabList.Template:Clone() TabButton.Name = Name TabButton.Title.Text = Name TabButton.Parent = TabList TabButton.Title.TextWrapped = false TabButton.Size = UDim2.new(0, TabButton.Title.TextBounds.X + 30, 0, 30) if Image and Image ~= 0 then if typeof(Image) == 'string' and Icons then local asset = getIcon(Image) TabButton.Image.Image = 'rbxassetid://'..asset.id TabButton.Image.ImageRectOffset = asset.imageRectOffset TabButton.Image.ImageRectSize = asset.imageRectSize else TabButton.Image.Image = getAssetUri(Image) end TabButton.Title.AnchorPoint = Vector2.new(0, 0.5) TabButton.Title.Position = UDim2.new(0, 37, 0.5, 0) TabButton.Image.Visible = true TabButton.Title.TextXAlignment = Enum.TextXAlignment.Left TabButton.Size = UDim2.new(0, TabButton.Title.TextBounds.X + 52, 0, 30) end TabButton.BackgroundTransparency = 1 TabButton.Title.TextTransparency = 1 TabButton.Image.ImageTransparency = 1 TabButton.UIStroke.Transparency = 1 TabButton.Visible = not Ext or false -- Create Elements Page local TabPage = Elements.Template:Clone() TabPage.Name = Name TabPage.Visible = true TabPage.LayoutOrder = #Elements:GetChildren() or Ext and 10000 for _, TemplateElement in ipairs(TabPage:GetChildren()) do if TemplateElement.ClassName == "Frame" and TemplateElement.Name ~= "Placeholder" then TemplateElement:Destroy() end end TabPage.Parent = Elements if not FirstTab and not Ext then Elements.UIPageLayout.Animated = false Elements.UIPageLayout:JumpTo(TabPage) Elements.UIPageLayout.Animated = true end TabButton.UIStroke.Color = SelectedTheme.TabStroke if Elements.UIPageLayout.CurrentPage == TabPage then TabButton.BackgroundColor3 = SelectedTheme.TabBackgroundSelected TabButton.Image.ImageColor3 = SelectedTheme.SelectedTabTextColor TabButton.Title.TextColor3 = SelectedTheme.SelectedTabTextColor else TabButton.BackgroundColor3 = SelectedTheme.TabBackground TabButton.Image.ImageColor3 = SelectedTheme.TabTextColor TabButton.Title.TextColor3 = SelectedTheme.TabTextColor end -- Animate task.wait(0.1) if FirstTab or Ext then TabButton.BackgroundColor3 = SelectedTheme.TabBackground TabButton.Image.ImageColor3 = SelectedTheme.TabTextColor TabButton.Title.TextColor3 = SelectedTheme.TabTextColor TweenService:Create(TabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(TabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(TabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(TabButton.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() elseif not Ext then FirstTab = Name TabButton.BackgroundColor3 = SelectedTheme.TabBackgroundSelected TabButton.Image.ImageColor3 = SelectedTheme.SelectedTabTextColor TabButton.Title.TextColor3 = SelectedTheme.SelectedTabTextColor TweenService:Create(TabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(TabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(TabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() end TabButton.Interact.MouseButton1Click:Connect(function() if Minimised then return end TweenService:Create(TabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(TabButton.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(TabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(TabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(TabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.TabBackgroundSelected}):Play() TweenService:Create(TabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextColor3 = SelectedTheme.SelectedTabTextColor}):Play() TweenService:Create(TabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageColor3 = SelectedTheme.SelectedTabTextColor}):Play() for _, OtherTabButton in ipairs(TabList:GetChildren()) do if OtherTabButton.Name ~= "Template" and OtherTabButton.ClassName == "Frame" and OtherTabButton ~= TabButton and OtherTabButton.Name ~= "Placeholder" then TweenService:Create(OtherTabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.TabBackground}):Play() TweenService:Create(OtherTabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextColor3 = SelectedTheme.TabTextColor}):Play() TweenService:Create(OtherTabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageColor3 = SelectedTheme.TabTextColor}):Play() TweenService:Create(OtherTabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(OtherTabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(OtherTabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(OtherTabButton.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() end end if Elements.UIPageLayout.CurrentPage ~= TabPage then Elements.UIPageLayout:JumpTo(TabPage) end end) local Tab = {} -- Button function Tab:CreateButton(ButtonSettings) local ButtonValue = {} local Button = Elements.Template.Button:Clone() Button.Name = ButtonSettings.Name Button.Title.Text = ButtonSettings.Name Button.Visible = true Button.Parent = TabPage Button.BackgroundTransparency = 1 Button.UIStroke.Transparency = 1 Button.Title.TextTransparency = 1 TweenService:Create(Button, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Button.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Button.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() Button.Interact.MouseButton1Click:Connect(function() local Success, Response = pcall(ButtonSettings.Callback) -- Prevents animation from trying to play if the button's callback called RayfieldLibrary:Destroy() if rayfieldDestroyed then return end if not Success then TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(Button.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Button.Title.Text = "Callback Error" print("Rayfield | "..ButtonSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Button.Title.Text = ButtonSettings.Name TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 0.9}):Play() TweenService:Create(Button.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() else if not ButtonSettings.Ext then SaveConfiguration(ButtonSettings.Name..'\n') end TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(Button.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() task.wait(0.2) TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 0.9}):Play() TweenService:Create(Button.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end end) Button.MouseEnter:Connect(function() TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 0.7}):Play() end) Button.MouseLeave:Connect(function() TweenService:Create(Button, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Button.ElementIndicator, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 0.9}):Play() end) function ButtonValue:Set(NewButton) Button.Title.Text = NewButton Button.Name = NewButton end return ButtonValue end -- ColorPicker function Tab:CreateColorPicker(ColorPickerSettings) -- by Throit ColorPickerSettings.Type = "ColorPicker" local ColorPicker = Elements.Template.ColorPicker:Clone() local Background = ColorPicker.CPBackground local Display = Background.Display local Main = Background.MainCP local Slider = ColorPicker.ColorSlider ColorPicker.ClipsDescendants = true ColorPicker.Name = ColorPickerSettings.Name ColorPicker.Title.Text = ColorPickerSettings.Name ColorPicker.Visible = true ColorPicker.Parent = TabPage ColorPicker.Size = UDim2.new(1, -10, 0, 45) Background.Size = UDim2.new(0, 39, 0, 22) Display.BackgroundTransparency = 0 Main.MainPoint.ImageTransparency = 1 ColorPicker.Interact.Size = UDim2.new(1, 0, 1, 0) ColorPicker.Interact.Position = UDim2.new(0.5, 0, 0.5, 0) ColorPicker.RGB.Position = UDim2.new(0, 17, 0, 70) ColorPicker.HexInput.Position = UDim2.new(0, 17, 0, 90) Main.ImageTransparency = 1 Background.BackgroundTransparency = 1 for _, rgbinput in ipairs(ColorPicker.RGB:GetChildren()) do if rgbinput:IsA("Frame") then rgbinput.BackgroundColor3 = SelectedTheme.InputBackground rgbinput.UIStroke.Color = SelectedTheme.InputStroke end end ColorPicker.HexInput.BackgroundColor3 = SelectedTheme.InputBackground ColorPicker.HexInput.UIStroke.Color = SelectedTheme.InputStroke local opened = false local mouse = Players.LocalPlayer:GetMouse() Main.Image = "http://www.roblox.com/asset/?id=11415645739" local mainDragging = false local sliderDragging = false ColorPicker.Interact.MouseButton1Down:Connect(function() task.spawn(function() TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(ColorPicker.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() task.wait(0.2) TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(ColorPicker.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end) if not opened then opened = true TweenService:Create(Background, TweenInfo.new(0.45, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 18, 0, 15)}):Play() task.wait(0.1) TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -10, 0, 120)}):Play() TweenService:Create(Background, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 173, 0, 86)}):Play() TweenService:Create(Display, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(ColorPicker.Interact, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.289, 0, 0.5, 0)}):Play() TweenService:Create(ColorPicker.RGB, TweenInfo.new(0.8, Enum.EasingStyle.Exponential), {Position = UDim2.new(0, 17, 0, 40)}):Play() TweenService:Create(ColorPicker.HexInput, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Position = UDim2.new(0, 17, 0, 73)}):Play() TweenService:Create(ColorPicker.Interact, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0.574, 0, 1, 0)}):Play() TweenService:Create(Main.MainPoint, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() TweenService:Create(Main, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {ImageTransparency = SelectedTheme ~= RayfieldLibrary.Theme.Default and 0.25 or 0.1}):Play() TweenService:Create(Background, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() else opened = false TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -10, 0, 45)}):Play() TweenService:Create(Background, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(0, 39, 0, 22)}):Play() TweenService:Create(ColorPicker.Interact, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, 0, 1, 0)}):Play() TweenService:Create(ColorPicker.Interact, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.5, 0, 0.5, 0)}):Play() TweenService:Create(ColorPicker.RGB, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Position = UDim2.new(0, 17, 0, 70)}):Play() TweenService:Create(ColorPicker.HexInput, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Position = UDim2.new(0, 17, 0, 90)}):Play() TweenService:Create(Display, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Main.MainPoint, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(Main, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {ImageTransparency = 1}):Play() TweenService:Create(Background, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() end end) UserInputService.InputEnded:Connect(function(input, gameProcessed) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then mainDragging = false sliderDragging = false end end) Main.MouseButton1Down:Connect(function() if opened then mainDragging = true end end) Main.MainPoint.MouseButton1Down:Connect(function() if opened then mainDragging = true end end) Slider.MouseButton1Down:Connect(function() sliderDragging = true end) Slider.SliderPoint.MouseButton1Down:Connect(function() sliderDragging = true end) local h,s,v = ColorPickerSettings.Color:ToHSV() local color = Color3.fromHSV(h,s,v) local hex = string.format("#%02X%02X%02X",color.R*0xFF,color.G*0xFF,color.B*0xFF) ColorPicker.HexInput.InputBox.Text = hex local function setDisplay() --Main Main.MainPoint.Position = UDim2.new(s,-Main.MainPoint.AbsoluteSize.X/2,1-v,-Main.MainPoint.AbsoluteSize.Y/2) Main.MainPoint.ImageColor3 = Color3.fromHSV(h,s,v) Background.BackgroundColor3 = Color3.fromHSV(h,1,1) Display.BackgroundColor3 = Color3.fromHSV(h,s,v) --Slider local x = h * Slider.AbsoluteSize.X Slider.SliderPoint.Position = UDim2.new(0,x-Slider.SliderPoint.AbsoluteSize.X/2,0.5,0) Slider.SliderPoint.ImageColor3 = Color3.fromHSV(h,1,1) local color = Color3.fromHSV(h,s,v) local r,g,b = math.floor((color.R*255)+0.5),math.floor((color.G*255)+0.5),math.floor((color.B*255)+0.5) ColorPicker.RGB.RInput.InputBox.Text = tostring(r) ColorPicker.RGB.GInput.InputBox.Text = tostring(g) ColorPicker.RGB.BInput.InputBox.Text = tostring(b) hex = string.format("#%02X%02X%02X",color.R*0xFF,color.G*0xFF,color.B*0xFF) ColorPicker.HexInput.InputBox.Text = hex end setDisplay() ColorPicker.HexInput.InputBox.FocusLost:Connect(function() if not pcall(function() local r, g, b = string.match(ColorPicker.HexInput.InputBox.Text, "^#?(%w%w)(%w%w)(%w%w)$") local rgbColor = Color3.fromRGB(tonumber(r, 16),tonumber(g, 16), tonumber(b, 16)) h,s,v = rgbColor:ToHSV() hex = ColorPicker.HexInput.InputBox.Text setDisplay() ColorPickerSettings.Color = rgbColor end) then ColorPicker.HexInput.InputBox.Text = hex end pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) local r,g,b = math.floor((h*255)+0.5),math.floor((s*255)+0.5),math.floor((v*255)+0.5) ColorPickerSettings.Color = Color3.fromRGB(r,g,b) if not ColorPickerSettings.Ext then SaveConfiguration() end end) --RGB local function rgbBoxes(box,toChange) local value = tonumber(box.Text) local color = Color3.fromHSV(h,s,v) local oldR,oldG,oldB = math.floor((color.R*255)+0.5),math.floor((color.G*255)+0.5),math.floor((color.B*255)+0.5) local save if toChange == "R" then save = oldR;oldR = value elseif toChange == "G" then save = oldG;oldG = value else save = oldB;oldB = value end if value then value = math.clamp(value,0,255) h,s,v = Color3.fromRGB(oldR,oldG,oldB):ToHSV() setDisplay() else box.Text = tostring(save) end local r,g,b = math.floor((h*255)+0.5),math.floor((s*255)+0.5),math.floor((v*255)+0.5) ColorPickerSettings.Color = Color3.fromRGB(r,g,b) if not ColorPickerSettings.Ext then SaveConfiguration(ColorPickerSettings.Flag..'\n'..tostring(ColorPickerSettings.Color)) end end ColorPicker.RGB.RInput.InputBox.FocusLost:connect(function() rgbBoxes(ColorPicker.RGB.RInput.InputBox,"R") pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) end) ColorPicker.RGB.GInput.InputBox.FocusLost:connect(function() rgbBoxes(ColorPicker.RGB.GInput.InputBox,"G") pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) end) ColorPicker.RGB.BInput.InputBox.FocusLost:connect(function() rgbBoxes(ColorPicker.RGB.BInput.InputBox,"B") pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) end) RunService.RenderStepped:connect(function() if mainDragging then local localX = math.clamp(mouse.X-Main.AbsolutePosition.X,0,Main.AbsoluteSize.X) local localY = math.clamp(mouse.Y-Main.AbsolutePosition.Y,0,Main.AbsoluteSize.Y) Main.MainPoint.Position = UDim2.new(0,localX-Main.MainPoint.AbsoluteSize.X/2,0,localY-Main.MainPoint.AbsoluteSize.Y/2) s = localX / Main.AbsoluteSize.X v = 1 - (localY / Main.AbsoluteSize.Y) Display.BackgroundColor3 = Color3.fromHSV(h,s,v) Main.MainPoint.ImageColor3 = Color3.fromHSV(h,s,v) Background.BackgroundColor3 = Color3.fromHSV(h,1,1) local color = Color3.fromHSV(h,s,v) local r,g,b = math.floor((color.R*255)+0.5),math.floor((color.G*255)+0.5),math.floor((color.B*255)+0.5) ColorPicker.RGB.RInput.InputBox.Text = tostring(r) ColorPicker.RGB.GInput.InputBox.Text = tostring(g) ColorPicker.RGB.BInput.InputBox.Text = tostring(b) ColorPicker.HexInput.InputBox.Text = string.format("#%02X%02X%02X",color.R*0xFF,color.G*0xFF,color.B*0xFF) pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) ColorPickerSettings.Color = Color3.fromRGB(r,g,b) if not ColorPickerSettings.Ext then SaveConfiguration() end end if sliderDragging then local localX = math.clamp(mouse.X-Slider.AbsolutePosition.X,0,Slider.AbsoluteSize.X) h = localX / Slider.AbsoluteSize.X Display.BackgroundColor3 = Color3.fromHSV(h,s,v) Slider.SliderPoint.Position = UDim2.new(0,localX-Slider.SliderPoint.AbsoluteSize.X/2,0.5,0) Slider.SliderPoint.ImageColor3 = Color3.fromHSV(h,1,1) Background.BackgroundColor3 = Color3.fromHSV(h,1,1) Main.MainPoint.ImageColor3 = Color3.fromHSV(h,s,v) local color = Color3.fromHSV(h,s,v) local r,g,b = math.floor((color.R*255)+0.5),math.floor((color.G*255)+0.5),math.floor((color.B*255)+0.5) ColorPicker.RGB.RInput.InputBox.Text = tostring(r) ColorPicker.RGB.GInput.InputBox.Text = tostring(g) ColorPicker.RGB.BInput.InputBox.Text = tostring(b) ColorPicker.HexInput.InputBox.Text = string.format("#%02X%02X%02X",color.R*0xFF,color.G*0xFF,color.B*0xFF) pcall(function()ColorPickerSettings.Callback(Color3.fromHSV(h,s,v))end) ColorPickerSettings.Color = Color3.fromRGB(r,g,b) if not ColorPickerSettings.Ext then SaveConfiguration() end end end) if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and ColorPickerSettings.Flag then RayfieldLibrary.Flags[ColorPickerSettings.Flag] = ColorPickerSettings end end function ColorPickerSettings:Set(RGBColor) ColorPickerSettings.Color = RGBColor h,s,v = ColorPickerSettings.Color:ToHSV() color = Color3.fromHSV(h,s,v) setDisplay() end ColorPicker.MouseEnter:Connect(function() TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end) ColorPicker.MouseLeave:Connect(function() TweenService:Create(ColorPicker, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() for _, rgbinput in ipairs(ColorPicker.RGB:GetChildren()) do if rgbinput:IsA("Frame") then rgbinput.BackgroundColor3 = SelectedTheme.InputBackground rgbinput.UIStroke.Color = SelectedTheme.InputStroke end end ColorPicker.HexInput.BackgroundColor3 = SelectedTheme.InputBackground ColorPicker.HexInput.UIStroke.Color = SelectedTheme.InputStroke end) return ColorPickerSettings end -- Section function Tab:CreateSection(SectionName) local SectionValue = {} if SDone then local SectionSpace = Elements.Template.SectionSpacing:Clone() SectionSpace.Visible = true SectionSpace.Parent = TabPage end local Section = Elements.Template.SectionTitle:Clone() Section.Title.Text = SectionName Section.Visible = true Section.Parent = TabPage Section.Title.TextTransparency = 1 TweenService:Create(Section.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0.4}):Play() function SectionValue:Set(NewSection) Section.Title.Text = NewSection end SDone = true return SectionValue end -- Divider function Tab:CreateDivider() local DividerValue = {} local Divider = Elements.Template.Divider:Clone() Divider.Visible = true Divider.Parent = TabPage Divider.Divider.BackgroundTransparency = 1 TweenService:Create(Divider.Divider, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.85}):Play() function DividerValue:Set(Value) Divider.Visible = Value end return DividerValue end -- Label function Tab:CreateLabel(LabelText : string, Icon: number, Color : Color3, IgnoreTheme : boolean) local LabelValue = {} local Label = Elements.Template.Label:Clone() Label.Title.Text = LabelText Label.Visible = true Label.Parent = TabPage Label.BackgroundColor3 = Color or SelectedTheme.SecondaryElementBackground Label.UIStroke.Color = Color or SelectedTheme.SecondaryElementStroke if Icon then if typeof(Icon) == 'string' and Icons then local asset = getIcon(Icon) Label.Icon.Image = 'rbxassetid://'..asset.id Label.Icon.ImageRectOffset = asset.imageRectOffset Label.Icon.ImageRectSize = asset.imageRectSize else Label.Icon.Image = getAssetUri(Icon) end else Label.Icon.Image = "rbxassetid://" .. 0 end if Icon and Label:FindFirstChild('Icon') then Label.Title.Position = UDim2.new(0, 45, 0.5, 0) Label.Title.Size = UDim2.new(1, -100, 0, 14) if Icon then if typeof(Icon) == 'string' and Icons then local asset = getIcon(Icon) Label.Icon.Image = 'rbxassetid://'..asset.id Label.Icon.ImageRectOffset = asset.imageRectOffset Label.Icon.ImageRectSize = asset.imageRectSize else Label.Icon.Image = getAssetUri(Icon) end else Label.Icon.Image = "rbxassetid://" .. 0 end Label.Icon.Visible = true end Label.Icon.ImageTransparency = 1 Label.BackgroundTransparency = 1 Label.UIStroke.Transparency = 1 Label.Title.TextTransparency = 1 TweenService:Create(Label, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = Color and 0.8 or 0}):Play() TweenService:Create(Label.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = Color and 0.7 or 0}):Play() TweenService:Create(Label.Icon, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(Label.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = Color and 0.2 or 0}):Play() function LabelValue:Set(NewLabel, Icon, Color) Label.Title.Text = NewLabel if Color then Label.BackgroundColor3 = Color or SelectedTheme.SecondaryElementBackground Label.UIStroke.Color = Color or SelectedTheme.SecondaryElementStroke end if Icon and Label:FindFirstChild('Icon') then Label.Title.Position = UDim2.new(0, 45, 0.5, 0) Label.Title.Size = UDim2.new(1, -100, 0, 14) if Icon then if typeof(Icon) == 'string' and Icons then local asset = getIcon(Icon) Label.Icon.Image = 'rbxassetid://'..asset.id Label.Icon.ImageRectOffset = asset.imageRectOffset Label.Icon.ImageRectSize = asset.imageRectSize else Label.Icon.Image = getAssetUri(Icon) end else Label.Icon.Image = "rbxassetid://" .. 0 end Label.Icon.Visible = true end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Label.BackgroundColor3 = IgnoreTheme and (Color or Label.BackgroundColor3) or SelectedTheme.SecondaryElementBackground Label.UIStroke.Color = IgnoreTheme and (Color or Label.BackgroundColor3) or SelectedTheme.SecondaryElementStroke end) return LabelValue end -- Paragraph function Tab:CreateParagraph(ParagraphSettings) local ParagraphValue = {} local Paragraph = Elements.Template.Paragraph:Clone() Paragraph.Title.Text = ParagraphSettings.Title Paragraph.Content.Text = ParagraphSettings.Content Paragraph.Visible = true Paragraph.Parent = TabPage Paragraph.BackgroundTransparency = 1 Paragraph.UIStroke.Transparency = 1 Paragraph.Title.TextTransparency = 1 Paragraph.Content.TextTransparency = 1 Paragraph.BackgroundColor3 = SelectedTheme.SecondaryElementBackground Paragraph.UIStroke.Color = SelectedTheme.SecondaryElementStroke TweenService:Create(Paragraph, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Paragraph.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Paragraph.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() TweenService:Create(Paragraph.Content, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() function ParagraphValue:Set(NewParagraphSettings) Paragraph.Title.Text = NewParagraphSettings.Title Paragraph.Content.Text = NewParagraphSettings.Content end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Paragraph.BackgroundColor3 = SelectedTheme.SecondaryElementBackground Paragraph.UIStroke.Color = SelectedTheme.SecondaryElementStroke end) return ParagraphValue end -- Input function Tab:CreateInput(InputSettings) local Input = Elements.Template.Input:Clone() Input.Name = InputSettings.Name Input.Title.Text = InputSettings.Name Input.Visible = true Input.Parent = TabPage Input.BackgroundTransparency = 1 Input.UIStroke.Transparency = 1 Input.Title.TextTransparency = 1 Input.InputFrame.InputBox.Text = InputSettings.CurrentValue or '' Input.InputFrame.BackgroundColor3 = SelectedTheme.InputBackground Input.InputFrame.UIStroke.Color = SelectedTheme.InputStroke TweenService:Create(Input, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Input.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Input.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() Input.InputFrame.InputBox.PlaceholderText = InputSettings.PlaceholderText Input.InputFrame.Size = UDim2.new(0, Input.InputFrame.InputBox.TextBounds.X + 24, 0, 30) Input.InputFrame.InputBox.FocusLost:Connect(function() local Success, Response = pcall(function() InputSettings.Callback(Input.InputFrame.InputBox.Text) InputSettings.CurrentValue = Input.InputFrame.InputBox.Text end) if not Success then TweenService:Create(Input, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Input.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Input.Title.Text = "Callback Error" print("Rayfield | "..InputSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Input.Title.Text = InputSettings.Name TweenService:Create(Input, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Input.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end if InputSettings.RemoveTextAfterFocusLost then Input.InputFrame.InputBox.Text = "" end if not InputSettings.Ext then SaveConfiguration() end end) Input.MouseEnter:Connect(function() TweenService:Create(Input, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end) Input.MouseLeave:Connect(function() TweenService:Create(Input, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) Input.InputFrame.InputBox:GetPropertyChangedSignal("Text"):Connect(function() TweenService:Create(Input.InputFrame, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = UDim2.new(0, Input.InputFrame.InputBox.TextBounds.X + 24, 0, 30)}):Play() end) function InputSettings:Set(text) Input.InputFrame.InputBox.Text = text InputSettings.CurrentValue = text local Success, Response = pcall(function() InputSettings.Callback(text) end) if not InputSettings.Ext then SaveConfiguration() end end if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and InputSettings.Flag then RayfieldLibrary.Flags[InputSettings.Flag] = InputSettings end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Input.InputFrame.BackgroundColor3 = SelectedTheme.InputBackground Input.InputFrame.UIStroke.Color = SelectedTheme.InputStroke end) return InputSettings end -- Dropdown function Tab:CreateDropdown(DropdownSettings) local Dropdown = Elements.Template.Dropdown:Clone() if string.find(DropdownSettings.Name,"closed") then Dropdown.Name = "Dropdown" else Dropdown.Name = DropdownSettings.Name end Dropdown.Title.Text = DropdownSettings.Name Dropdown.Visible = true Dropdown.Parent = TabPage Dropdown.List.Visible = false if DropdownSettings.CurrentOption then if type(DropdownSettings.CurrentOption) == "string" then DropdownSettings.CurrentOption = {DropdownSettings.CurrentOption} end if not DropdownSettings.MultipleOptions and type(DropdownSettings.CurrentOption) == "table" then DropdownSettings.CurrentOption = {DropdownSettings.CurrentOption[1]} end else DropdownSettings.CurrentOption = {} end if DropdownSettings.MultipleOptions then if DropdownSettings.CurrentOption and type(DropdownSettings.CurrentOption) == "table" then if #DropdownSettings.CurrentOption == 1 then Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] elseif #DropdownSettings.CurrentOption == 0 then Dropdown.Selected.Text = "None" else Dropdown.Selected.Text = "Various" end else DropdownSettings.CurrentOption = {} Dropdown.Selected.Text = "None" end else Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] or "None" end Dropdown.Toggle.ImageColor3 = SelectedTheme.TextColor TweenService:Create(Dropdown, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() Dropdown.BackgroundTransparency = 1 Dropdown.UIStroke.Transparency = 1 Dropdown.Title.TextTransparency = 1 Dropdown.Size = UDim2.new(1, -10, 0, 45) TweenService:Create(Dropdown, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Dropdown.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() for _, ununusedoption in ipairs(Dropdown.List:GetChildren()) do if ununusedoption.ClassName == "Frame" and ununusedoption.Name ~= "Placeholder" then ununusedoption:Destroy() end end Dropdown.Toggle.Rotation = 180 Dropdown.Interact.MouseButton1Click:Connect(function() TweenService:Create(Dropdown, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() task.wait(0.1) TweenService:Create(Dropdown, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() if Debounce then return end if Dropdown.List.Visible then Debounce = true TweenService:Create(Dropdown, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -10, 0, 45)}):Play() for _, DropdownOpt in ipairs(Dropdown.List:GetChildren()) do if DropdownOpt.ClassName == "Frame" and DropdownOpt.Name ~= "Placeholder" then TweenService:Create(DropdownOpt, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(DropdownOpt.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(DropdownOpt.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() end end TweenService:Create(Dropdown.List, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ScrollBarImageTransparency = 1}):Play() TweenService:Create(Dropdown.Toggle, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Rotation = 180}):Play() task.wait(0.35) Dropdown.List.Visible = false Debounce = false else TweenService:Create(Dropdown, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -10, 0, 180)}):Play() Dropdown.List.Visible = true TweenService:Create(Dropdown.List, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ScrollBarImageTransparency = 0.7}):Play() TweenService:Create(Dropdown.Toggle, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Rotation = 0}):Play() for _, DropdownOpt in ipairs(Dropdown.List:GetChildren()) do if DropdownOpt.ClassName == "Frame" and DropdownOpt.Name ~= "Placeholder" then if DropdownOpt.Name ~= Dropdown.Selected.Text then TweenService:Create(DropdownOpt.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end TweenService:Create(DropdownOpt, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(DropdownOpt.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() end end end end) Dropdown.MouseEnter:Connect(function() if not Dropdown.List.Visible then TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end end) Dropdown.MouseLeave:Connect(function() TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) local function SetDropdownOptions() for _, Option in ipairs(DropdownSettings.Options) do local DropdownOption = Elements.Template.Dropdown.List.Template:Clone() DropdownOption.Name = Option DropdownOption.Title.Text = Option DropdownOption.Parent = Dropdown.List DropdownOption.Visible = true DropdownOption.BackgroundTransparency = 1 DropdownOption.UIStroke.Transparency = 1 DropdownOption.Title.TextTransparency = 1 --local Dropdown = Tab:CreateDropdown({ -- Name = "Dropdown Example", -- Options = {"Option 1","Option 2"}, -- CurrentOption = {"Option 1"}, -- MultipleOptions = true, -- Flag = "Dropdown1", -- Callback = function(TableOfOptions) -- end, --}) DropdownOption.Interact.ZIndex = 50 DropdownOption.Interact.MouseButton1Click:Connect(function() if not DropdownSettings.MultipleOptions and table.find(DropdownSettings.CurrentOption, Option) then return end if table.find(DropdownSettings.CurrentOption, Option) then table.remove(DropdownSettings.CurrentOption, table.find(DropdownSettings.CurrentOption, Option)) if DropdownSettings.MultipleOptions then if #DropdownSettings.CurrentOption == 1 then Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] elseif #DropdownSettings.CurrentOption == 0 then Dropdown.Selected.Text = "None" else Dropdown.Selected.Text = "Various" end else Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] end else if not DropdownSettings.MultipleOptions then table.clear(DropdownSettings.CurrentOption) end table.insert(DropdownSettings.CurrentOption, Option) if DropdownSettings.MultipleOptions then if #DropdownSettings.CurrentOption == 1 then Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] elseif #DropdownSettings.CurrentOption == 0 then Dropdown.Selected.Text = "None" else Dropdown.Selected.Text = "Various" end else Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] end TweenService:Create(DropdownOption.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(DropdownOption, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.DropdownSelected}):Play() Debounce = true end local Success, Response = pcall(function() DropdownSettings.Callback(DropdownSettings.CurrentOption) end) if not Success then TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Dropdown.Title.Text = "Callback Error" print("Rayfield | "..DropdownSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Dropdown.Title.Text = DropdownSettings.Name TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end for _, droption in ipairs(Dropdown.List:GetChildren()) do if droption.ClassName == "Frame" and droption.Name ~= "Placeholder" and not table.find(DropdownSettings.CurrentOption, droption.Name) then TweenService:Create(droption, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.DropdownUnselected}):Play() end end if not DropdownSettings.MultipleOptions then task.wait(0.1) TweenService:Create(Dropdown, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, -10, 0, 45)}):Play() for _, DropdownOpt in ipairs(Dropdown.List:GetChildren()) do if DropdownOpt.ClassName == "Frame" and DropdownOpt.Name ~= "Placeholder" then TweenService:Create(DropdownOpt, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {BackgroundTransparency = 1}):Play() TweenService:Create(DropdownOpt.UIStroke, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(DropdownOpt.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() end end TweenService:Create(Dropdown.List, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {ScrollBarImageTransparency = 1}):Play() TweenService:Create(Dropdown.Toggle, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Rotation = 180}):Play() task.wait(0.35) Dropdown.List.Visible = false end Debounce = false if not DropdownSettings.Ext then SaveConfiguration() end end) Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() DropdownOption.UIStroke.Color = SelectedTheme.ElementStroke end) end end SetDropdownOptions() for _, droption in ipairs(Dropdown.List:GetChildren()) do if droption.ClassName == "Frame" and droption.Name ~= "Placeholder" then if not table.find(DropdownSettings.CurrentOption, droption.Name) then droption.BackgroundColor3 = SelectedTheme.DropdownUnselected else droption.BackgroundColor3 = SelectedTheme.DropdownSelected end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() if not table.find(DropdownSettings.CurrentOption, droption.Name) then droption.BackgroundColor3 = SelectedTheme.DropdownUnselected else droption.BackgroundColor3 = SelectedTheme.DropdownSelected end end) end end function DropdownSettings:Set(NewOption) DropdownSettings.CurrentOption = NewOption if typeof(DropdownSettings.CurrentOption) == "string" then DropdownSettings.CurrentOption = {DropdownSettings.CurrentOption} end if not DropdownSettings.MultipleOptions then DropdownSettings.CurrentOption = {DropdownSettings.CurrentOption[1]} end if DropdownSettings.MultipleOptions then if #DropdownSettings.CurrentOption == 1 then Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] elseif #DropdownSettings.CurrentOption == 0 then Dropdown.Selected.Text = "None" else Dropdown.Selected.Text = "Various" end else Dropdown.Selected.Text = DropdownSettings.CurrentOption[1] end local Success, Response = pcall(function() DropdownSettings.Callback(NewOption) end) if not Success then TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Dropdown.Title.Text = "Callback Error" print("Rayfield | "..DropdownSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Dropdown.Title.Text = DropdownSettings.Name TweenService:Create(Dropdown, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Dropdown.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end for _, droption in ipairs(Dropdown.List:GetChildren()) do if droption.ClassName == "Frame" and droption.Name ~= "Placeholder" then if not table.find(DropdownSettings.CurrentOption, droption.Name) then droption.BackgroundColor3 = SelectedTheme.DropdownUnselected else droption.BackgroundColor3 = SelectedTheme.DropdownSelected end end end --SaveConfiguration() end function DropdownSettings:Refresh(optionsTable: table) -- updates a dropdown with new options from optionsTable DropdownSettings.Options = optionsTable for _, option in Dropdown.List:GetChildren() do if option.ClassName == "Frame" and option.Name ~= "Placeholder" then option:Destroy() end end SetDropdownOptions() end if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and DropdownSettings.Flag then RayfieldLibrary.Flags[DropdownSettings.Flag] = DropdownSettings end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Dropdown.Toggle.ImageColor3 = SelectedTheme.TextColor TweenService:Create(Dropdown, TweenInfo.new(0.4, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) return DropdownSettings end -- Keybind function Tab:CreateKeybind(KeybindSettings) local CheckingForKey = false local Keybind = Elements.Template.Keybind:Clone() Keybind.Name = KeybindSettings.Name Keybind.Title.Text = KeybindSettings.Name Keybind.Visible = true Keybind.Parent = TabPage Keybind.BackgroundTransparency = 1 Keybind.UIStroke.Transparency = 1 Keybind.Title.TextTransparency = 1 Keybind.KeybindFrame.BackgroundColor3 = SelectedTheme.InputBackground Keybind.KeybindFrame.UIStroke.Color = SelectedTheme.InputStroke TweenService:Create(Keybind, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Keybind.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Keybind.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() Keybind.KeybindFrame.KeybindBox.Text = KeybindSettings.CurrentKeybind Keybind.KeybindFrame.Size = UDim2.new(0, Keybind.KeybindFrame.KeybindBox.TextBounds.X + 24, 0, 30) Keybind.KeybindFrame.KeybindBox.Focused:Connect(function() CheckingForKey = true Keybind.KeybindFrame.KeybindBox.Text = "" end) Keybind.KeybindFrame.KeybindBox.FocusLost:Connect(function() CheckingForKey = false if Keybind.KeybindFrame.KeybindBox.Text == nil or Keybind.KeybindFrame.KeybindBox.Text == "" then Keybind.KeybindFrame.KeybindBox.Text = KeybindSettings.CurrentKeybind if not KeybindSettings.Ext then SaveConfiguration() end end end) Keybind.MouseEnter:Connect(function() TweenService:Create(Keybind, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end) Keybind.MouseLeave:Connect(function() TweenService:Create(Keybind, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) UserInputService.InputBegan:Connect(function(input, processed) if CheckingForKey then if input.KeyCode ~= Enum.KeyCode.Unknown then local SplitMessage = string.split(tostring(input.KeyCode), ".") local NewKeyNoEnum = SplitMessage[3] Keybind.KeybindFrame.KeybindBox.Text = tostring(NewKeyNoEnum) KeybindSettings.CurrentKeybind = tostring(NewKeyNoEnum) Keybind.KeybindFrame.KeybindBox:ReleaseFocus() if not KeybindSettings.Ext then SaveConfiguration() end if KeybindSettings.CallOnChange then KeybindSettings.Callback(tostring(NewKeyNoEnum)) end end elseif not KeybindSettings.CallOnChange and KeybindSettings.CurrentKeybind ~= nil and (input.KeyCode == Enum.KeyCode[KeybindSettings.CurrentKeybind] and not processed) then -- Test local Held = true local Connection Connection = input.Changed:Connect(function(prop) if prop == "UserInputState" then Connection:Disconnect() Held = false end end) if not KeybindSettings.HoldToInteract then local Success, Response = pcall(KeybindSettings.Callback) if not Success then TweenService:Create(Keybind, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Keybind.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Keybind.Title.Text = "Callback Error" print("Rayfield | "..KeybindSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Keybind.Title.Text = KeybindSettings.Name TweenService:Create(Keybind, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Keybind.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end else task.wait(0.25) if Held then local Loop; Loop = RunService.Stepped:Connect(function() if not Held then KeybindSettings.Callback(false) -- maybe pcall this Loop:Disconnect() else KeybindSettings.Callback(true) -- maybe pcall this end end) end end end end) Keybind.KeybindFrame.KeybindBox:GetPropertyChangedSignal("Text"):Connect(function() TweenService:Create(Keybind.KeybindFrame, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = UDim2.new(0, Keybind.KeybindFrame.KeybindBox.TextBounds.X + 24, 0, 30)}):Play() end) function KeybindSettings:Set(NewKeybind) Keybind.KeybindFrame.KeybindBox.Text = tostring(NewKeybind) KeybindSettings.CurrentKeybind = tostring(NewKeybind) Keybind.KeybindFrame.KeybindBox:ReleaseFocus() if not KeybindSettings.Ext then SaveConfiguration() end if KeybindSettings.CallOnChange then KeybindSettings.Callback(tostring(NewKeybind)) end end if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and KeybindSettings.Flag then RayfieldLibrary.Flags[KeybindSettings.Flag] = KeybindSettings end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Keybind.KeybindFrame.BackgroundColor3 = SelectedTheme.InputBackground Keybind.KeybindFrame.UIStroke.Color = SelectedTheme.InputStroke end) return KeybindSettings end -- Toggle function Tab:CreateToggle(ToggleSettings) local ToggleValue = {} local Toggle = Elements.Template.Toggle:Clone() Toggle.Name = ToggleSettings.Name Toggle.Title.Text = ToggleSettings.Name Toggle.Visible = true Toggle.Parent = TabPage Toggle.BackgroundTransparency = 1 Toggle.UIStroke.Transparency = 1 Toggle.Title.TextTransparency = 1 Toggle.Switch.BackgroundColor3 = SelectedTheme.ToggleBackground if SelectedTheme ~= RayfieldLibrary.Theme.Default then Toggle.Switch.Shadow.Visible = false end TweenService:Create(Toggle, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Toggle.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() if ToggleSettings.CurrentValue == true then Toggle.Switch.Indicator.Position = UDim2.new(1, -20, 0.5, 0) Toggle.Switch.Indicator.UIStroke.Color = SelectedTheme.ToggleEnabledStroke Toggle.Switch.Indicator.BackgroundColor3 = SelectedTheme.ToggleEnabled Toggle.Switch.UIStroke.Color = SelectedTheme.ToggleEnabledOuterStroke else Toggle.Switch.Indicator.Position = UDim2.new(1, -40, 0.5, 0) Toggle.Switch.Indicator.UIStroke.Color = SelectedTheme.ToggleDisabledStroke Toggle.Switch.Indicator.BackgroundColor3 = SelectedTheme.ToggleDisabled Toggle.Switch.UIStroke.Color = SelectedTheme.ToggleDisabledOuterStroke end Toggle.MouseEnter:Connect(function() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end) Toggle.MouseLeave:Connect(function() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) Toggle.Interact.MouseButton1Click:Connect(function() if ToggleSettings.CurrentValue == true then ToggleSettings.CurrentValue = false TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.45, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(1, -40, 0.5, 0)}):Play() TweenService:Create(Toggle.Switch.Indicator.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleDisabledStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.8, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {BackgroundColor3 = SelectedTheme.ToggleDisabled}):Play() TweenService:Create(Toggle.Switch.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleDisabledOuterStroke}):Play() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() else ToggleSettings.CurrentValue = true TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(1, -20, 0.5, 0)}):Play() TweenService:Create(Toggle.Switch.Indicator.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleEnabledStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.8, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {BackgroundColor3 = SelectedTheme.ToggleEnabled}):Play() TweenService:Create(Toggle.Switch.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleEnabledOuterStroke}):Play() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end local Success, Response = pcall(function() if debugX then warn('Running toggle \''..ToggleSettings.Name..'\' (Interact)') end ToggleSettings.Callback(ToggleSettings.CurrentValue) end) if not Success then TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Toggle.Title.Text = "Callback Error" print("Rayfield | "..ToggleSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Toggle.Title.Text = ToggleSettings.Name TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end if not ToggleSettings.Ext then SaveConfiguration() end end) function ToggleSettings:Set(NewToggleValue) if NewToggleValue == true then ToggleSettings.CurrentValue = true TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(1, -20, 0.5, 0)}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.4, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0,12,0,12)}):Play() TweenService:Create(Toggle.Switch.Indicator.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleEnabledStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.8, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {BackgroundColor3 = SelectedTheme.ToggleEnabled}):Play() TweenService:Create(Toggle.Switch.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleEnabledOuterStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.45, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0,17,0,17)}):Play() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() else ToggleSettings.CurrentValue = false TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.45, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Position = UDim2.new(1, -40, 0.5, 0)}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.4, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0,12,0,12)}):Play() TweenService:Create(Toggle.Switch.Indicator.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleDisabledStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.8, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {BackgroundColor3 = SelectedTheme.ToggleDisabled}):Play() TweenService:Create(Toggle.Switch.UIStroke, TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Color = SelectedTheme.ToggleDisabledOuterStroke}):Play() TweenService:Create(Toggle.Switch.Indicator, TweenInfo.new(0.4, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0,17,0,17)}):Play() TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end local Success, Response = pcall(function() if debugX then warn('Running toggle \''..ToggleSettings.Name..'\' (:Set)') end ToggleSettings.Callback(ToggleSettings.CurrentValue) end) if not Success then TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Toggle.Title.Text = "Callback Error" print("Rayfield | "..ToggleSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Toggle.Title.Text = ToggleSettings.Name TweenService:Create(Toggle, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Toggle.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end if not ToggleSettings.Ext then SaveConfiguration() end end if not ToggleSettings.Ext then if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and ToggleSettings.Flag then RayfieldLibrary.Flags[ToggleSettings.Flag] = ToggleSettings end end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() Toggle.Switch.BackgroundColor3 = SelectedTheme.ToggleBackground if SelectedTheme ~= RayfieldLibrary.Theme.Default then Toggle.Switch.Shadow.Visible = false end task.wait() if not ToggleSettings.CurrentValue then Toggle.Switch.Indicator.UIStroke.Color = SelectedTheme.ToggleDisabledStroke Toggle.Switch.Indicator.BackgroundColor3 = SelectedTheme.ToggleDisabled Toggle.Switch.UIStroke.Color = SelectedTheme.ToggleDisabledOuterStroke else Toggle.Switch.Indicator.UIStroke.Color = SelectedTheme.ToggleEnabledStroke Toggle.Switch.Indicator.BackgroundColor3 = SelectedTheme.ToggleEnabled Toggle.Switch.UIStroke.Color = SelectedTheme.ToggleEnabledOuterStroke end end) return ToggleSettings end -- Slider function Tab:CreateSlider(SliderSettings) local SLDragging = false local Slider = Elements.Template.Slider:Clone() Slider.Name = SliderSettings.Name Slider.Title.Text = SliderSettings.Name Slider.Visible = true Slider.Parent = TabPage Slider.BackgroundTransparency = 1 Slider.UIStroke.Transparency = 1 Slider.Title.TextTransparency = 1 if SelectedTheme ~= RayfieldLibrary.Theme.Default then Slider.Main.Shadow.Visible = false end Slider.Main.BackgroundColor3 = SelectedTheme.SliderBackground Slider.Main.UIStroke.Color = SelectedTheme.SliderStroke Slider.Main.Progress.UIStroke.Color = SelectedTheme.SliderStroke Slider.Main.Progress.BackgroundColor3 = SelectedTheme.SliderProgress TweenService:Create(Slider, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Slider.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() TweenService:Create(Slider.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() Slider.Main.Progress.Size = UDim2.new(0, Slider.Main.AbsoluteSize.X * ((SliderSettings.CurrentValue + SliderSettings.Range[1]) / (SliderSettings.Range[2] - SliderSettings.Range[1])) > 5 and Slider.Main.AbsoluteSize.X * (SliderSettings.CurrentValue / (SliderSettings.Range[2] - SliderSettings.Range[1])) or 5, 1, 0) if not SliderSettings.Suffix then Slider.Main.Information.Text = tostring(SliderSettings.CurrentValue) else Slider.Main.Information.Text = tostring(SliderSettings.CurrentValue) .. " " .. SliderSettings.Suffix end Slider.MouseEnter:Connect(function() TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackgroundHover}):Play() end) Slider.MouseLeave:Connect(function() TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() end) Slider.Main.Interact.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then TweenService:Create(Slider.Main.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() TweenService:Create(Slider.Main.Progress.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() SLDragging = true end end) Slider.Main.Interact.InputEnded:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then TweenService:Create(Slider.Main.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0.4}):Play() TweenService:Create(Slider.Main.Progress.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0.3}):Play() SLDragging = false end end) Slider.Main.Interact.MouseButton1Down:Connect(function(X) local Current = Slider.Main.Progress.AbsolutePosition.X + Slider.Main.Progress.AbsoluteSize.X local Start = Current local Location = X local Loop; Loop = RunService.Stepped:Connect(function() if SLDragging then Location = UserInputService:GetMouseLocation().X Current = Current + 0.025 * (Location - Start) if Location < Slider.Main.AbsolutePosition.X then Location = Slider.Main.AbsolutePosition.X elseif Location > Slider.Main.AbsolutePosition.X + Slider.Main.AbsoluteSize.X then Location = Slider.Main.AbsolutePosition.X + Slider.Main.AbsoluteSize.X end if Current < Slider.Main.AbsolutePosition.X + 5 then Current = Slider.Main.AbsolutePosition.X + 5 elseif Current > Slider.Main.AbsolutePosition.X + Slider.Main.AbsoluteSize.X then Current = Slider.Main.AbsolutePosition.X + Slider.Main.AbsoluteSize.X end if Current <= Location and (Location - Start) < 0 then Start = Location elseif Current >= Location and (Location - Start) > 0 then Start = Location end TweenService:Create(Slider.Main.Progress, TweenInfo.new(0.45, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = UDim2.new(0, Current - Slider.Main.AbsolutePosition.X, 1, 0)}):Play() local NewValue = SliderSettings.Range[1] + (Location - Slider.Main.AbsolutePosition.X) / Slider.Main.AbsoluteSize.X * (SliderSettings.Range[2] - SliderSettings.Range[1]) NewValue = math.floor(NewValue / SliderSettings.Increment + 0.5) * (SliderSettings.Increment * 10000000) / 10000000 NewValue = math.clamp(NewValue, SliderSettings.Range[1], SliderSettings.Range[2]) if not SliderSettings.Suffix then Slider.Main.Information.Text = tostring(NewValue) else Slider.Main.Information.Text = tostring(NewValue) .. " " .. SliderSettings.Suffix end if SliderSettings.CurrentValue ~= NewValue then local Success, Response = pcall(function() SliderSettings.Callback(NewValue) end) if not Success then TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Slider.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Slider.Title.Text = "Callback Error" print("Rayfield | "..SliderSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Slider.Title.Text = SliderSettings.Name TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Slider.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end SliderSettings.CurrentValue = NewValue if not SliderSettings.Ext then SaveConfiguration() end end else TweenService:Create(Slider.Main.Progress, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = UDim2.new(0, Location - Slider.Main.AbsolutePosition.X > 5 and Location - Slider.Main.AbsolutePosition.X or 5, 1, 0)}):Play() Loop:Disconnect() end end) end) function SliderSettings:Set(NewVal) local NewVal = math.clamp(NewVal, SliderSettings.Range[1], SliderSettings.Range[2]) TweenService:Create(Slider.Main.Progress, TweenInfo.new(0.45, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = UDim2.new(0, Slider.Main.AbsoluteSize.X * ((NewVal + SliderSettings.Range[1]) / (SliderSettings.Range[2] - SliderSettings.Range[1])) > 5 and Slider.Main.AbsoluteSize.X * (NewVal / (SliderSettings.Range[2] - SliderSettings.Range[1])) or 5, 1, 0)}):Play() Slider.Main.Information.Text = tostring(NewVal) .. " " .. (SliderSettings.Suffix or "") local Success, Response = pcall(function() SliderSettings.Callback(NewVal) end) if not Success then TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = Color3.fromRGB(85, 0, 0)}):Play() TweenService:Create(Slider.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 1}):Play() Slider.Title.Text = "Callback Error" print("Rayfield | "..SliderSettings.Name.." Callback Error " ..tostring(Response)) warn('Check docs.sirius.menu for help with Rayfield specific development.') task.wait(0.5) Slider.Title.Text = SliderSettings.Name TweenService:Create(Slider, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.ElementBackground}):Play() TweenService:Create(Slider.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {Transparency = 0}):Play() end SliderSettings.CurrentValue = NewVal if not SliderSettings.Ext then SaveConfiguration() end end if Settings.ConfigurationSaving then if Settings.ConfigurationSaving.Enabled and SliderSettings.Flag then RayfieldLibrary.Flags[SliderSettings.Flag] = SliderSettings end end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() if SelectedTheme ~= RayfieldLibrary.Theme.Default then Slider.Main.Shadow.Visible = false end Slider.Main.BackgroundColor3 = SelectedTheme.SliderBackground Slider.Main.UIStroke.Color = SelectedTheme.SliderStroke Slider.Main.Progress.UIStroke.Color = SelectedTheme.SliderStroke Slider.Main.Progress.BackgroundColor3 = SelectedTheme.SliderProgress end) return SliderSettings end Rayfield.Main:GetPropertyChangedSignal('BackgroundColor3'):Connect(function() TabButton.UIStroke.Color = SelectedTheme.TabStroke if Elements.UIPageLayout.CurrentPage == TabPage then TabButton.BackgroundColor3 = SelectedTheme.TabBackgroundSelected TabButton.Image.ImageColor3 = SelectedTheme.SelectedTabTextColor TabButton.Title.TextColor3 = SelectedTheme.SelectedTabTextColor else TabButton.BackgroundColor3 = SelectedTheme.TabBackground TabButton.Image.ImageColor3 = SelectedTheme.TabTextColor TabButton.Title.TextColor3 = SelectedTheme.TabTextColor end end) return Tab end Elements.Visible = true task.wait(1.1) TweenService:Create(Main, TweenInfo.new(0.7, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Size = UDim2.new(0, 390, 0, 90)}):Play() task.wait(0.3) TweenService:Create(LoadingFrame.Title, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(LoadingFrame.Subtitle, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() TweenService:Create(LoadingFrame.Version, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() task.wait(0.1) TweenService:Create(Main, TweenInfo.new(0.6, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {Size = useMobileSizing and UDim2.new(0, 500, 0, 275) or UDim2.new(0, 500, 0, 475)}):Play() TweenService:Create(Main.Shadow.Image, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {ImageTransparency = 0.6}):Play() Topbar.BackgroundTransparency = 1 Topbar.Divider.Size = UDim2.new(0, 0, 0, 1) Topbar.Divider.BackgroundColor3 = SelectedTheme.ElementStroke Topbar.CornerRepair.BackgroundTransparency = 1 Topbar.Title.TextTransparency = 1 Topbar.Search.ImageTransparency = 1 if Topbar:FindFirstChild('Settings') then Topbar.Settings.ImageTransparency = 1 end Topbar.ChangeSize.ImageTransparency = 1 Topbar.Hide.ImageTransparency = 1 task.wait(0.5) Topbar.Visible = true TweenService:Create(Topbar, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() TweenService:Create(Topbar.CornerRepair, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0}):Play() task.wait(0.1) TweenService:Create(Topbar.Divider, TweenInfo.new(1, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, 0, 0, 1)}):Play() TweenService:Create(Topbar.Title, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {TextTransparency = 0}):Play() task.wait(0.05) TweenService:Create(Topbar.Search, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() task.wait(0.05) if Topbar:FindFirstChild('Settings') then TweenService:Create(Topbar.Settings, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() task.wait(0.05) end TweenService:Create(Topbar.ChangeSize, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() task.wait(0.05) TweenService:Create(Topbar.Hide, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() task.wait(0.3) if dragBar then TweenService:Create(dragBarCosmetic, TweenInfo.new(0.6, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() end function Window.ModifyTheme(NewTheme) local success = pcall(ChangeTheme, NewTheme) if not success then RayfieldLibrary:Notify({Title = 'Unable to Change Theme', Content = 'We are unable find a theme on file.', Image = 4400704299}) else RayfieldLibrary:Notify({Title = 'Theme Changed', Content = 'Successfully changed theme to '..(typeof(NewTheme) == 'string' and NewTheme or 'Custom Theme')..'.', Image = 4483362748}) end end local success, result = pcall(function() createSettings(Window) end) if not success then warn('Rayfield had an issue creating settings.') end return Window end local function setVisibility(visibility: boolean, notify: boolean?) if Debounce then return end if visibility then Hidden = false Unhide() else Hidden = true Hide(notify) end end function RayfieldLibrary:SetVisibility(visibility: boolean) setVisibility(visibility, false) end function RayfieldLibrary:IsVisible(): boolean return not Hidden end local hideHotkeyConnection -- Has to be initialized here since the connection is made later in the script function RayfieldLibrary:Destroy() rayfieldDestroyed = true hideHotkeyConnection:Disconnect() Rayfield:Destroy() end Topbar.ChangeSize.MouseButton1Click:Connect(function() if Debounce then return end if Minimised then Minimised = false Maximise() else Minimised = true Minimise() end end) Main.Search.Input:GetPropertyChangedSignal('Text'):Connect(function() if #Main.Search.Input.Text > 0 then if not Elements.UIPageLayout.CurrentPage:FindFirstChild('SearchTitle-fsefsefesfsefesfesfThanks') then local searchTitle = Elements.Template.SectionTitle:Clone() searchTitle.Parent = Elements.UIPageLayout.CurrentPage searchTitle.Name = 'SearchTitle-fsefsefesfsefesfesfThanks' searchTitle.LayoutOrder = -100 searchTitle.Title.Text = "Results from '"..Elements.UIPageLayout.CurrentPage.Name.."'" searchTitle.Visible = true end else local searchTitle = Elements.UIPageLayout.CurrentPage:FindFirstChild('SearchTitle-fsefsefesfsefesfesfThanks') if searchTitle then searchTitle:Destroy() end end for _, element in ipairs(Elements.UIPageLayout.CurrentPage:GetChildren()) do if element.ClassName ~= 'UIListLayout' and element.Name ~= 'Placeholder' and element.Name ~= 'SearchTitle-fsefsefesfsefesfesfThanks' then if element.Name == 'SectionTitle' then if #Main.Search.Input.Text == 0 then element.Visible = true else element.Visible = false end else if string.lower(element.Name):find(string.lower(Main.Search.Input.Text), 1, true) then element.Visible = true else element.Visible = false end end end end end) Main.Search.Input.FocusLost:Connect(function(enterPressed) if #Main.Search.Input.Text == 0 and searchOpen then task.wait(0.12) closeSearch() end end) Topbar.Search.MouseButton1Click:Connect(function() task.spawn(function() if searchOpen then closeSearch() else openSearch() end end) end) if Topbar:FindFirstChild('Settings') then Topbar.Settings.MouseButton1Click:Connect(function() task.spawn(function() for _, OtherTabButton in ipairs(TabList:GetChildren()) do if OtherTabButton.Name ~= "Template" and OtherTabButton.ClassName == "Frame" and OtherTabButton ~= TabButton and OtherTabButton.Name ~= "Placeholder" then TweenService:Create(OtherTabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundColor3 = SelectedTheme.TabBackground}):Play() TweenService:Create(OtherTabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextColor3 = SelectedTheme.TabTextColor}):Play() TweenService:Create(OtherTabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageColor3 = SelectedTheme.TabTextColor}):Play() TweenService:Create(OtherTabButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {BackgroundTransparency = 0.7}):Play() TweenService:Create(OtherTabButton.Title, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {TextTransparency = 0.2}):Play() TweenService:Create(OtherTabButton.Image, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.2}):Play() TweenService:Create(OtherTabButton.UIStroke, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {Transparency = 0.5}):Play() end end Elements.UIPageLayout:JumpTo(Elements['Rayfield Settings']) end) end) end Topbar.Hide.MouseButton1Click:Connect(function() setVisibility(Hidden, not useMobileSizing) end) hideHotkeyConnection = UserInputService.InputBegan:Connect(function(input, processed) if (input.KeyCode == Enum.KeyCode[getSetting("General", "rayfieldOpen")]) and not processed then if Debounce then return end if Hidden then Hidden = false Unhide() else Hidden = true Hide() end end end) if MPrompt then MPrompt.Interact.MouseButton1Click:Connect(function() if Debounce then return end if Hidden then Hidden = false Unhide() end end) end for _, TopbarButton in ipairs(Topbar:GetChildren()) do if TopbarButton.ClassName == "ImageButton" and TopbarButton.Name ~= 'Icon' then TopbarButton.MouseEnter:Connect(function() TweenService:Create(TopbarButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0}):Play() end) TopbarButton.MouseLeave:Connect(function() TweenService:Create(TopbarButton, TweenInfo.new(0.7, Enum.EasingStyle.Exponential), {ImageTransparency = 0.8}):Play() end) end end function RayfieldLibrary:LoadConfiguration() local config if debugX then warn('Loading Configuration') end if useStudio then config = [[{"Toggle1adwawd":true,"ColorPicker1awd":{"B":255,"G":255,"R":255},"Slider1dawd":100,"ColorPicfsefker1":{"B":255,"G":255,"R":255},"Slidefefsr1":80,"dawdawd":"","Input1":"hh","Keybind1":"B","Dropdown1":["Ocean"]}]] end if CEnabled then local notified local loaded local success, result = pcall(function() if useStudio and config then loaded = LoadConfiguration(config) return end if isfile then if isfile(ConfigurationFolder .. "/" .. CFileName .. ConfigurationExtension) then loaded = LoadConfiguration(readfile(ConfigurationFolder .. "/" .. CFileName .. ConfigurationExtension)) end else notified = true RayfieldLibrary:Notify({Title = "Rayfield Configurations", Content = "We couldn't enable Configuration Saving as you are not using software with filesystem support.", Image = 4384402990}) end end) if success and loaded and not notified then RayfieldLibrary:Notify({Title = "Rayfield Configurations", Content = "The configuration file for this script has been loaded from a previous session.", Image = 4384403532}) elseif not success and not notified then warn('Rayfield Configurations Error | '..tostring(result)) RayfieldLibrary:Notify({Title = "Rayfield Configurations", Content = "We've encountered an issue loading your configuration correctly.\n\nCheck the Developer Console for more information.", Image = 4384402990}) end end globalLoaded = true end if useStudio then -- run w/ studio -- Feel free to place your own script here to see how it'd work in Roblox Studio before running it on your execution software. --local Window = RayfieldLibrary:CreateWindow({ -- Name = "Rayfield Example Window", -- LoadingTitle = "Rayfield Interface Suite", -- Theme = 'Default', -- Icon = 0, -- LoadingSubtitle = "by Sirius", -- ConfigurationSaving = { -- Enabled = true, -- FolderName = nil, -- Create a custom folder for your hub/game -- FileName = "Big Hub52" -- }, -- Discord = { -- Enabled = false, -- Invite = "noinvitelink", -- The Discord invite code, do not include discord.gg/. E.g. discord.gg/ABCD would be ABCD -- RememberJoins = true -- Set this to false to make them join the discord every time they load it up -- }, -- KeySystem = false, -- Set this to true to use our key system -- KeySettings = { -- Title = "Untitled", -- Subtitle = "Key System", -- Note = "No method of obtaining the key is provided", -- FileName = "Key", -- It is recommended to use something unique as other scripts using Rayfield may overwrite your key file -- SaveKey = true, -- The user's key will be saved, but if you change the key, they will be unable to use your script -- GrabKeyFromSite = false, -- If this is true, set Key below to the RAW site you would like Rayfield to get the key from -- Key = {"Hello"} -- List of keys that will be accepted by the system, can be RAW file links (pastebin, github etc) or simple strings ("hello","key22") -- } --}) --local Tab = Window:CreateTab("Tab Example", 'key-round') -- Title, Image --local Tab2 = Window:CreateTab("Tab Example 2", 4483362458) -- Title, Image --local Section = Tab2:CreateSection("Section") --local ColorPicker = Tab2:CreateColorPicker({ -- Name = "Color Picker", -- Color = Color3.fromRGB(255,255,255), -- Flag = "ColorPicfsefker1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Value) -- -- The function that takes place every time the color picker is moved/changed -- -- The variable (Value) is a Color3fromRGB value based on which color is selected -- end --}) --local Slider = Tab2:CreateSlider({ -- Name = "Slider Example", -- Range = {0, 100}, -- Increment = 10, -- Suffix = "Bananas", -- CurrentValue = 40, -- Flag = "Slidefefsr1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Value) -- -- The function that takes place when the slider changes -- -- The variable (Value) is a number which correlates to the value the slider is currently at -- end, --}) --local Input = Tab2:CreateInput({ -- Name = "Input Example", -- CurrentValue = '', -- PlaceholderText = "Input Placeholder", -- Flag = 'dawdawd', -- RemoveTextAfterFocusLost = false, -- Callback = function(Text) -- -- The function that takes place when the input is changed -- -- The variable (Text) is a string for the value in the text box -- end, --}) ----RayfieldLibrary:Notify({Title = "Rayfield Interface", Content = "Welcome to Rayfield. These - are the brand new notification design for Rayfield, with custom sizing and Rayfield calculated wait times.", Image = 4483362458}) --local Section = Tab:CreateSection("Section Example") --local Button = Tab:CreateButton({ -- Name = "Change Theme", -- Callback = function() -- -- The function that takes place when the button is pressed -- Window.ModifyTheme('DarkBlue') -- end, --}) --local Toggle = Tab:CreateToggle({ -- Name = "Toggle Example", -- CurrentValue = false, -- Flag = "Toggle1adwawd", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Value) -- -- The function that takes place when the toggle is pressed -- -- The variable (Value) is a boolean on whether the toggle is true or false -- end, --}) --local ColorPicker = Tab:CreateColorPicker({ -- Name = "Color Picker", -- Color = Color3.fromRGB(255,255,255), -- Flag = "ColorPicker1awd", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Value) -- -- The function that takes place every time the color picker is moved/changed -- -- The variable (Value) is a Color3fromRGB value based on which color is selected -- end --}) --local Slider = Tab:CreateSlider({ -- Name = "Slider Example", -- Range = {0, 100}, -- Increment = 10, -- Suffix = "Bananas", -- CurrentValue = 40, -- Flag = "Slider1dawd", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Value) -- -- The function that takes place when the slider changes -- -- The variable (Value) is a number which correlates to the value the slider is currently at -- end, --}) --local Input = Tab:CreateInput({ -- Name = "Input Example", -- CurrentValue = "Helo", -- PlaceholderText = "Adaptive Input", -- RemoveTextAfterFocusLost = false, -- Flag = 'Input1', -- Callback = function(Text) -- -- The function that takes place when the input is changed -- -- The variable (Text) is a string for the value in the text box -- end, --}) --local thoptions = {} --for themename, theme in pairs(RayfieldLibrary.Theme) do -- table.insert(thoptions, themename) --end --local Dropdown = Tab:CreateDropdown({ -- Name = "Theme", -- Options = thoptions, -- CurrentOption = {"Default"}, -- MultipleOptions = false, -- Flag = "Dropdown1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Options) -- --Window.ModifyTheme(Options[1]) -- -- The function that takes place when the selected option is changed -- -- The variable (Options) is a table of strings for the current selected options -- end, --}) --Window.ModifyTheme({ -- TextColor = Color3.fromRGB(50, 55, 60), -- Background = Color3.fromRGB(240, 245, 250), -- Topbar = Color3.fromRGB(215, 225, 235), -- Shadow = Color3.fromRGB(200, 210, 220), -- NotificationBackground = Color3.fromRGB(210, 220, 230), -- NotificationActionsBackground = Color3.fromRGB(225, 230, 240), -- TabBackground = Color3.fromRGB(200, 210, 220), -- TabStroke = Color3.fromRGB(180, 190, 200), -- TabBackgroundSelected = Color3.fromRGB(175, 185, 200), -- TabTextColor = Color3.fromRGB(50, 55, 60), -- SelectedTabTextColor = Color3.fromRGB(30, 35, 40), -- ElementBackground = Color3.fromRGB(210, 220, 230), -- ElementBackgroundHover = Color3.fromRGB(220, 230, 240), -- SecondaryElementBackground = Color3.fromRGB(200, 210, 220), -- ElementStroke = Color3.fromRGB(190, 200, 210), -- SecondaryElementStroke = Color3.fromRGB(180, 190, 200), -- SliderBackground = Color3.fromRGB(200, 220, 235), -- Lighter shade -- SliderProgress = Color3.fromRGB(70, 130, 180), -- SliderStroke = Color3.fromRGB(150, 180, 220), -- ToggleBackground = Color3.fromRGB(210, 220, 230), -- ToggleEnabled = Color3.fromRGB(70, 160, 210), -- ToggleDisabled = Color3.fromRGB(180, 180, 180), -- ToggleEnabledStroke = Color3.fromRGB(60, 150, 200), -- ToggleDisabledStroke = Color3.fromRGB(140, 140, 140), -- ToggleEnabledOuterStroke = Color3.fromRGB(100, 120, 140), -- ToggleDisabledOuterStroke = Color3.fromRGB(120, 120, 130), -- DropdownSelected = Color3.fromRGB(220, 230, 240), -- DropdownUnselected = Color3.fromRGB(200, 210, 220), -- InputBackground = Color3.fromRGB(220, 230, 240), -- InputStroke = Color3.fromRGB(180, 190, 200), -- PlaceholderColor = Color3.fromRGB(150, 150, 150) --}) --local Keybind = Tab:CreateKeybind({ -- Name = "Keybind Example", -- CurrentKeybind = "Q", -- HoldToInteract = false, -- Flag = "Keybind1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps -- Callback = function(Keybind) -- -- The function that takes place when the keybind is pressed -- -- The variable (Keybind) is a boolean for whether the keybind is being held or not (HoldToInteract needs to be true) -- end, --}) --local Label = Tab:CreateLabel("Label Example") --local Label2 = Tab:CreateLabel("Warning", 4483362458, Color3.fromRGB(255, 159, 49), true) --local Paragraph = Tab:CreateParagraph({Title = "Paragraph Example", Content = "Paragraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph ExampleParagraph Example"}) end if CEnabled and Main:FindFirstChild('Notice') then Main.Notice.BackgroundTransparency = 1 Main.Notice.Title.TextTransparency = 1 Main.Notice.Size = UDim2.new(0, 0, 0, 0) Main.Notice.Position = UDim2.new(0.5, 0, 0, -100) Main.Notice.Visible = true TweenService:Create(Main.Notice, TweenInfo.new(0.5, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Size = UDim2.new(0, 280, 0, 35), Position = UDim2.new(0.5, 0, 0, -50), BackgroundTransparency = 0.5}):Play() TweenService:Create(Main.Notice.Title, TweenInfo.new(0.5, Enum.EasingStyle.Exponential), {TextTransparency = 0.1}):Play() end -- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA why :( --if not useStudio then -- task.spawn(loadWithTimeout, "https://raw.githubusercontent.com/SiriusSoftwareLtd/Sirius/refs/heads/request/boost.lua") --end task.delay(4, function() RayfieldLibrary.LoadConfiguration() if Main:FindFirstChild('Notice') and Main.Notice.Visible then TweenService:Create(Main.Notice, TweenInfo.new(0.5, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Size = UDim2.new(0, 100, 0, 25), Position = UDim2.new(0.5, 0, 0, -100), BackgroundTransparency = 1}):Play() TweenService:Create(Main.Notice.Title, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {TextTransparency = 1}):Play() task.wait(0.5) Main.Notice.Visible = false end end) return RayfieldLibrary