0% found this document useful (0 votes)
880 views85 pages

Code For Blox Fruit

The Rayfield Interface Suite is a programming library designed for use in game development, featuring functions for loading remote scripts with timeout handling and customizable settings. It includes a settings management system, analytics reporting, and various themes for user interface elements. The library also incorporates error handling and user prompts for safety when executing scripts from unknown sources.

Uploaded by

dincemirata
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
880 views85 pages

Code For Blox Fruit

The Rayfield Interface Suite is a programming library designed for use in game development, featuring functions for loading remote scripts with timeout handling and customizable settings. It includes a settings management system, analytics reporting, and various themes for user interface elements. The library also incorporates error handling and user prompts for safety when executing scripts from unknown sources.

Uploaded by

dincemirata
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

--[[

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"}}},"Sy
stem":{"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.

<font transparency='0.3'>Some scripts may steal your items or in-game


goods.</font>]],
'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

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

You might also like