
KeylessUniversal

-- ═══════════════════════════════════════════════════════════════
getgenv().gethui = function() return game.CoreGui end
local success, result = pcall(function()
return _G.firsttimeinjection
end)
if success then
if result then
warn("Multi Instance Detected!!!!!")
return
end
else
return
end
_G.firsttimeinjection = false
-- ═══════════════════════════════════════════════════════════════
-- MODAL BUTTON SYSTEM
-- ═══════════════════════════════════════════════════════════════
local player = game.Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local userInputService = game:GetService("UserInputService")
userInputService.MouseIconEnabled = true
local screenGui = playerGui:FindFirstChild("MyPersistentScreenGui")
if not screenGui then
screenGui = Instance.new("ScreenGui")
screenGui.Name = "MyPersistentScreenGui"
screenGui.Parent = playerGui
end
screenGui.ResetOnSpawn = false
local buttonmodal = Instance.new("TextButton")
buttonmodal.Size = UDim2.new(0, 200, 0, 50)
buttonmodal.Position = UDim2.new(0.5, -100, 0.5, -25)
buttonmodal.BackgroundTransparency = 1
buttonmodal.Text = ""
buttonmodal.Parent = screenGui
buttonmodal.Modal = true
-- ═══════════════════════════════════════════════════════════════
-- SERVICES - Otimizado para performance máxima
-- ═══════════════════════════════════════════════════════════════
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")
local CoreGui = game:GetService("CoreGui")
local PlayerService = game:GetService("Players")
local UserService = game:GetService("UserService")
local TextService = game:GetService("TextService")
local LocalPlayer = PlayerService.LocalPlayer
-- ═══════════════════════════════════════════════════════════════
-- TWEENCACHE - Animações pré-carregadas
-- ═══════════════════════════════════════════════════════════════
local TweenCache = {
UltraFast = TweenInfo.new(0.12, Enum.EasingStyle.Quint, Enum.EasingDirection.Out),
Fast = TweenInfo.new(0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.Out),
Medium = TweenInfo.new(0.32, Enum.EasingStyle.Quint, Enum.EasingDirection.Out),
Smooth = TweenInfo.new(0.4, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out),
Slow = TweenInfo.new(0.55, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out),
Elastic = TweenInfo.new(0.45, Enum.EasingStyle.Elastic, Enum.EasingDirection.Out),
Bounce = TweenInfo.new(0.55, Enum.EasingStyle.Bounce, Enum.EasingDirection.Out),
Back = TweenInfo.new(0.35, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
Cinematic = TweenInfo.new(0.65, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut),
Buttery = TweenInfo.new(0.28, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
Spring = TweenInfo.new(0.5, Enum.EasingStyle.Elastic, Enum.EasingDirection.Out, 0, false, 0)
}
-- COLOR UTILITIES
local function GetLuminance(color)
if typeof(color) ~= "Color3" then return 0.5 end
return (0.299 * color.R + 0.587 * color.G + 0.114 * color.B)
end
local function GetContrastText(backgroundColor)
local luminance = GetLuminance(backgroundColor)
return luminance > 0.5 and Color3.fromRGB(30, 30, 30) or Color3.fromRGB(240, 240, 240)
end
local function SoftenColor(color, amount)
if typeof(color) ~= "Color3" then return color end
local h, s, v = color:ToHSV()
return Color3.fromHSV(h, math.max(0, s - (amount or 0.3)), v)
end
-- TRANSLATION SYSTEM REMOVED
-- ═══════════════════════════════════════════════════════════════
-- FEATHER ICONS - Sistema de ícones modernos (OPCIONAL)
-- FEATHER ICONS - Carregamento assíncrono (não trava)
local Icons = {}
-- Carregar ícones em background (não bloqueia UI)
task.spawn(function()
pcall(function()
local result = game:HttpGetAsync("https://raw.githubusercontent.com/evoincorp/lucideblox/master/src/modules/util/icons.json")
Icons = HttpService:JSONDecode(result).icons or {}
end)
end)
local function GetIcon(IconName)
return Icons[IconName]
end
-- ═══════════════════════════════════════════════════════════════
-- UTILITY FUNCTIONS - Funções auxiliares otimizadas
-- ═══════════════════════════════════════════════════════════════
-- GUI INITIALIZATION - Inicialização da interface
-- ═══════════════════════════════════════════════════════════════
local useStudio = RunService:IsStudio() or false
local Orion = Instance.new("ScreenGui")
local FocusDrag = nil
Orion.Name = "OrionBliz"
-- Proteção da GUI
local ProtectGui = protectgui or (syn and syn.protect_gui) or function() end
local GUIParent = gethui and gethui() or (game.CoreGui or game.Players.LocalPlayer:WaitForChild("PlayerGui"))
Orion.Parent = GUIParent
ProtectGui(Orion)
-- Limpeza de instâncias duplicadas
if gethui then
for _, Interface in ipairs(gethui():GetChildren()) do
if Interface.Name == Orion.Name and Interface ~= Orion then
Interface:Destroy()
end
end
else
for _, Interface in ipairs(game.CoreGui:GetChildren()) do
if Interface.Name == Orion.Name and Interface ~= Orion then
Interface:Destroy()
end
end
end
-- ═══════════════════════════════════════════════════════════════
-- ORIONLIB INITIALIZATION - Inicialização da biblioteca
-- ═══════════════════════════════════════════════════════════════
local OrionLib = {
Flags = {},
Connections = {},
Elements = {},
ThemeObjects = {},
Themes = {
Default = {
Main = Color3.fromRGB(25, 25, 25),
Second = Color3.fromRGB(32, 32, 32),
Stroke = Color3.fromRGB(60, 60, 60),
Divider = Color3.fromRGB(60, 60, 60),
Text = Color3.fromRGB(240, 240, 240),
TextDark = Color3.fromRGB(150, 150, 150)
}
},
SelectedTheme = "Default",
Folder = "",
SaveCfg = false,
CurrentLanguage = "en"
}
-- ═══════════════════════════════════════════════════════════════
-- CONNECTION MANAGEMENT - Gerenciamento de conexões
-- ═══════════════════════════════════════════════════════════════
function OrionLib:IsRunning()
if gethui then
return Orion.Parent == gethui()
else
return Orion.Parent == game:GetService("CoreGui")
end
end
-- Adicionar conexão com gerenciamento automático
local function AddConnection(Signal, Function)
if (not OrionLib:IsRunning()) then
return
end
local SignalConnect = Signal:Connect(Function)
table.insert(OrionLib.Connections, SignalConnect)
return SignalConnect
end
-- Auto-cleanup de conexões quando a GUI é destruída
task.spawn(function()
while (OrionLib:IsRunning()) do
wait()
end
for _, Connection in next, OrionLib.Connections do
Connection:Disconnect()
end
end)
-- ═══════════════════════════════════════════════════════════════
-- DRAG SYSTEM - Sistema de arrastar janelas
-- ═══════════════════════════════════════════════════════════════
local function MakeDraggable(DragPoint, Main)
pcall(function()
local Dragging, DragInput, MousePos, FramePos = false
AddConnection(DragPoint.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
MousePos = Input.Position
FramePos = Main.Position
Input.Changed:Connect(function()
if Input.UserInputState == Enum.UserInputState.End then
Dragging = false
end
end)
end
end)
AddConnection(DragPoint.InputChanged, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch then
DragInput = Input
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if Input == DragInput and Dragging then
local Delta = Input.Position - MousePos
-- Movimento suave e responsivo (SEM BARREIRA)
Main.Position = UDim2.new(FramePos.X.Scale,FramePos.X.Offset + Delta.X, FramePos.Y.Scale, FramePos.Y.Offset + Delta.Y)
end
end)
end)
end
-- ═══════════════════════════════════════════════════════════════
-- ELEMENT CREATION - Sistema de criação de elementos
-- ═══════════════════════════════════════════════════════════════
-- Criar instância com propriedades e filhos
local function Create(Name, Properties, Children)
local Object = Instance.new(Name)
for i, v in next, Properties or {} do
Object[i] = v
end
for i, v in next, Children or {} do
v.Parent = Object
end
return Object
end
-- Registrar elemento customizado
local function CreateElement(ElementName, ElementFunction)
OrionLib.Elements[ElementName] = function(...)
return ElementFunction(...)
end
end
-- Criar elemento registrado
local function MakeElement(ElementName, ...)
local NewElement = OrionLib.Elements[ElementName](...)
return NewElement
end
-- Definir propriedades de elemento
local function SetProps(Element, Props)
table.foreach(Props, function(Property, Value)
Element[Property] = Value
end)
return Element
end
-- Definir filhos de elemento
local function SetChildren(Element, Children)
table.foreach(Children, function(_, Child)
Child.Parent = Element
end)
return Element
end
-- Arredondar número com fator
local function Round(Number, Factor)
local Result = math.floor(Number/Factor + (math.sign(Number) * 0.5)) * Factor
if Result < 0 then Result = Result + Factor end
return Result
end
-- ═══════════════════════════════════════════════════════════════
-- THEME SYSTEM - Sistema de temas dinâmicos
-- ═══════════════════════════════════════════════════════════════
-- Retornar propriedade de cor do objeto
local function ReturnProperty(Object)
if Object:IsA("Frame") or Object:IsA("TextButton") then
return "BackgroundColor3"
end
if Object:IsA("ScrollingFrame") then
return "ScrollBarImageColor3"
end
if Object:IsA("UIStroke") then
return "Color"
end
if Object:IsA("TextLabel") or Object:IsA("TextBox") then
return "TextColor3"
end
if Object:IsA("ImageLabel") or Object:IsA("ImageButton") then
return "ImageColor3"
end
end
-- Adicionar objeto ao sistema de temas
local function AddThemeObject(Object, Type)
if not OrionLib.ThemeObjects[Type] then
OrionLib.ThemeObjects[Type] = {}
end
table.insert(OrionLib.ThemeObjects[Type], Object)
Object[ReturnProperty(Object)] = OrionLib.Themes[OrionLib.SelectedTheme][Type]
return Object
end
-- Aplicar tema a todos os objetos
local function SetTheme()
for Name, Type in pairs(OrionLib.ThemeObjects) do
for _, Object in pairs(Type) do
Object[ReturnProperty(Object)] = OrionLib.Themes[OrionLib.SelectedTheme][Name]
end
end
end
-- ═══════════════════════════════════════════════════════════════
-- CONFIG SYSTEM
-- ═══════════════════════════════════════════════════════════════
-- Pack color for saving (EXACTLY like caos.lua)
local function ColorPack(color)
assert(typeof(color) == "Color3", "ColorPack expects a Color3 value.")
-- Convert to RGB integer values
return {
R = math.round(color.R * 255),
G = math.round(color.G * 255),
B = math.round(color.B * 255)
}
end
-- Unpack saved color (EXACTLY like caos.lua)
local function ColorUnpack(color)
assert(type(color) == "table" or type(color) == "string", "Invalid color format. Expected table (RGB) or string (HEX).")
if type(color) == "table" then
assert(color.R and color.G and color.B, "RGB table must contain 'R', 'G', and 'B' keys.")
return Color3.fromRGB(math.clamp(color.R, 0, 255), math.clamp(color.G, 0, 255), math.clamp(color.B, 0, 255))
elseif type(color) == "string" then
local hex = color:match("^#?(%x%x%x%x%x%x)$")
assert(hex, "Invalid HEX color format. Expected '#RRGGBB' or 'RRGGBB'.")
local r, g, b = tonumber(hex:sub(1, 2), 16), tonumber(hex:sub(3, 4), 16), tonumber(hex:sub(5, 6), 16)
return Color3.fromRGB(r, g, b)
end
end
-- LOAD CONFIG (EXACTLY like caos.lua - loads from workspace folder)
local function LoadCfg(Config)
local success, Data = pcall(function()
return HttpService:JSONDecode(Config)
end)
if not success then
return false
end
local loadedCount = 0
-- Load theme colors from Settings (EXACTLY like caos.lua)
if Data.Settings then
if Data.Settings.ThemeMain and Data.Settings.ThemeMain.Value then
OrionLib.Themes[OrionLib.SelectedTheme].Main = ColorUnpack(Data.Settings.ThemeMain.Value)
loadedCount = loadedCount + 1
end
if Data.Settings.ThemeSecond and Data.Settings.ThemeSecond.Value then
OrionLib.Themes[OrionLib.SelectedTheme].Second = ColorUnpack(Data.Settings.ThemeSecond.Value)
loadedCount = loadedCount + 1
end
if Data.Settings.ThemeStroke and Data.Settings.ThemeStroke.Value then
OrionLib.Themes[OrionLib.SelectedTheme].Stroke = ColorUnpack(Data.Settings.ThemeStroke.Value)
loadedCount = loadedCount + 1
end
if Data.Settings.ThemeDivider and Data.Settings.ThemeDivider.Value then
OrionLib.Themes[OrionLib.SelectedTheme].Divider = ColorUnpack(Data.Settings.ThemeDivider.Value)
loadedCount = loadedCount + 1
end
if Data.Settings.ThemeText and Data.Settings.ThemeText.Value then
OrionLib.Themes[OrionLib.SelectedTheme].Text = ColorUnpack(Data.Settings.ThemeText.Value)
loadedCount = loadedCount + 1
end
if Data.Settings.ThemeTextDark and Data.Settings.ThemeTextDark.Value then
OrionLib.Themes[OrionLib.SelectedTheme].TextDark = ColorUnpack(Data.Settings.ThemeTextDark.Value)
loadedCount = loadedCount + 1
end
-- Apply theme after loading all colors
if loadedCount > 0 then
SetTheme()
end
end
-- Load globals
if Data.Globals then
if Data.Globals.Language then
getgenv().OrionLanguage = Data.Globals.Language
loadedCount = loadedCount + 1
end
end
-- Load flags
for flagName, flagData in pairs(Data.Flags or {}) do
if OrionLib.Flags[flagName] then
task.spawn(function()
if flagData.Type == "ColorPicker" and flagData.Value then
OrionLib.Flags[flagName]:Set(ColorUnpack(flagData.Value))
elseif flagData.Value ~= nil then
OrionLib.Flags[flagName]:Set(flagData.Value)
end
loadedCount = loadedCount + 1
end)
end
end
return loadedCount > 0
end
local AUTO_SAVE_ENABLED = true
local CONFIG_FOLDER = "workspace"
local saveDebounceTime = 2.0 -- 2 segundos - evita lag
local lastSaveTime = 0
local saveScheduled = false
local saveConnection = nil
-- Ensure workspace folder exists
local function ensureConfigFolder()
if not isfolder then return false end
if not isfolder(CONFIG_FOLDER) then
makefolder(CONFIG_FOLDER)
end
return true
end
-- Removed deepCompare - causava lag desnecessário
-- SAVE CONFIG
local function SaveCfg(Name)
if not AUTO_SAVE_ENABLED or not writefile or not ensureConfigFolder() then return end
-- ADVANCED DEBOUNCE SYSTEM TO PREVENT LAG
local currentTime = tick()
if currentTime - lastSaveTime < saveDebounceTime then
if not saveScheduled then
saveScheduled = true
-- Cancel previous scheduled save
if saveConnection then
saveConnection:Disconnect()
end
-- Schedule new save with debounce
saveConnection = task.delay(saveDebounceTime, function()
saveScheduled = false
SaveCfg(Name)
end)
end
return
end
lastSaveTime = currentTime
saveScheduled = false
-- COMPLETE CONFIG WITH EVERYTHING (EXACTLY like caos.lua structure)
local CompleteConfig = {
-- MAIN FLAGS
Flags = {},
-- SETTINGS (theme colors go here)
Settings = {},
-- GLOBALS
Globals = {},
-- TIMESTAMP
SavedAt = os.date("%Y-%m-%d %H:%M:%S")
}
-- SAVE ALL FLAGS (EXACTLY like caos.lua)
for flagName, flagData in pairs(OrionLib.Flags) do
if flagData.Save then
if flagData.Type == "Colorpicker" then
CompleteConfig.Flags[flagName] = {
Type = "ColorPicker",
Value = ColorPack(flagData.Value)
}
else
CompleteConfig.Flags[flagName] = {
Type = flagData.Type or "Unknown",
Value = flagData.Value
}
end
end
end
-- SAVE THEME COLORS IN SETTINGS (EXACTLY like caos.lua)
CompleteConfig.Settings["ThemeMain"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].Main)
}
CompleteConfig.Settings["ThemeSecond"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].Second)
}
CompleteConfig.Settings["ThemeStroke"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].Stroke)
}
CompleteConfig.Settings["ThemeDivider"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].Divider)
}
CompleteConfig.Settings["ThemeText"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].Text)
}
CompleteConfig.Settings["ThemeTextDark"] = {
Type = "ColorPicker",
Value = ColorPack(OrionLib.Themes[OrionLib.SelectedTheme].TextDark)
}
-- SAVE GLOBALS
CompleteConfig.Globals = {
Language = getgenv().OrionLanguage or "en"
}
-- SAVE TO WORKSPACE FOLDER - Async para não lagar
task.spawn(function()
local configPath = CONFIG_FOLDER .. "/" .. Name .. ".json"
local success = pcall(function()
writefile(configPath, HttpService:JSONEncode(CompleteConfig))
end)
if not success then
warn("⚠️ OrionLib: Erro ao salvar config!")
end
end)
end
-- ═══════════════════════════════════════════════════════════════
-- INPUT MANAGEMENT - Gerenciamento de entrada
-- ═══════════════════════════════════════════════════════════════
local WhitelistedMouse = {Enum.UserInputType.MouseButton1, Enum.UserInputType.MouseButton2,Enum.UserInputType.MouseButton3}
local BlacklistedKeys = {Enum.KeyCode.Unknown,Enum.KeyCode.W,Enum.KeyCode.A,Enum.KeyCode.S,Enum.KeyCode.D,Enum.KeyCode.Up,Enum.KeyCode.Left,Enum.KeyCode.Down,Enum.KeyCode.Right,Enum.KeyCode.Slash,Enum.KeyCode.Tab,Enum.KeyCode.Backspace,Enum.KeyCode.Escape}
local freeMouse = Create("TextButton", {Name = "FMouse", Size = UDim2.new(0,0,0,0), BackgroundTransparency = 1, Text = "", Position = UDim2.new(0,0,0,0), Modal = true, Parent = Orion, Visible = false, ZIndex = 999, Active = true})
local mouselock = false
-- Desbloquear cursor do mouse
local function UnlockMouse(Value)
if Value then
mouselock = true
UserInputService.MouseIconEnabled = true
freeMouse.Visible = true
task.spawn(function()
while mouselock do
task.wait(0.5)
end
UserInputService.MouseIconEnabled = false
freeMouse.Visible = false
end)
else
mouselock = false
UserInputService.MouseIconEnabled = false
freeMouse.Visible = false
end
end
-- Verificar se tecla está na tabela
local function CheckKey(Table, Key)
for _, v in next, Table do
if v == Key then
return true
end
end
end
-- ═══════════════════════════════════════════════════════════════
-- UI ELEMENTS - Elementos de interface pré-definidos
-- ═══════════════════════════════════════════════════════════════
CreateElement("Corner", function(Scale, Offset)
local Corner = Create("UICorner", {
CornerRadius = UDim.new(Scale or 0, Offset or 12) -- Bordas mais arredondadas!
})
return Corner
end)
CreateElement("AspectRatio", function()
local AspectRatio = Create("UIAspectRatioConstraint")
return AspectRatio
end)
CreateElement("Stroke", function(Color, Thickness)
local Stroke = Create("UIStroke", {
Color = Color or Color3.fromRGB(255, 255, 255),
Thickness = Thickness or 1
})
return Stroke
end)
CreateElement("List", function(Scale, Offset)
local List = Create("UIListLayout", {
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(Scale or 0, Offset or 0)
})
return List
end)
CreateElement("Padding", function(Bottom, Left, Right, Top)
local Padding = Create("UIPadding", {
PaddingBottom = UDim.new(0, Bottom or 4),
PaddingLeft = UDim.new(0, Left or 4),
PaddingRight = UDim.new(0, Right or 4),
PaddingTop = UDim.new(0, Top or 4)
})
return Padding
end)
CreateElement("TFrame", function()
local TFrame = Create("Frame", {
BackgroundTransparency = 1
})
return TFrame
end)
CreateElement("Frame", function(Color)
local Frame = Create("Frame", {
BackgroundColor3 = Color or Color3.fromRGB(255, 255, 255),
BorderSizePixel = 0
})
return Frame
end)
CreateElement("RoundFrame", function(Color, Scale, Offset)
local Frame = Create("Frame", {
BackgroundColor3 = Color or Color3.fromRGB(255, 255, 255),
BorderSizePixel = 0
}, {
Create("UICorner", {
CornerRadius = UDim.new(Scale, Offset)
})
})
return Frame
end)
CreateElement("Button", function()
local Button = Create("TextButton", {
Text = "",
AutoButtonColor = false,
BackgroundTransparency = 1,
BorderSizePixel = 0
})
return Button
end)
CreateElement("ScrollFrame", function(Color, Width)
local ScrollFrame = Create("ScrollingFrame", {
BackgroundTransparency = 1,
MidImage = "rbxassetid://7445543667",
BottomImage = "rbxassetid://7445543667",
TopImage = "rbxassetid://7445543667",
ScrollBarImageColor3 = Color,
BorderSizePixel = 0,
ScrollBarThickness = Width,
CanvasSize = UDim2.new(0, 0, 0, 0),
ScrollingDirection = Enum.ScrollingDirection.Y,
ScrollBarImageTransparency = 0.3,
ElasticBehavior = Enum.ElasticBehavior.Never -- Reduce lag
})
return ScrollFrame
end)
CreateElement("Image", function(ImageID)
local ImageNew = Create("ImageLabel", {
Image = ImageID,
BackgroundTransparency = 1
})
if GetIcon(ImageID) ~= nil then
ImageNew.Image = GetIcon(ImageID)
end
return ImageNew
end)
CreateElement("ImageButton", function(ImageID)
local Image = Create("ImageButton", {
Image = ImageID,
BackgroundTransparency = 1
})
return Image
end)
CreateElement("Label", function(Text, TextSize, Transparency)
local Label = Create("TextLabel", {
Text = Text or "",
TextColor3 = Color3.fromRGB(240, 240, 240),
TextTransparency = Transparency or 0,
TextSize = TextSize or 15,
Font = Enum.Font.Gotham,
RichText = true,
BackgroundTransparency = 1,
TextXAlignment = Enum.TextXAlignment.Left
})
return Label
end)
local NotificationHolder = SetProps(SetChildren(MakeElement("TFrame"), {
SetProps(MakeElement("List"), {
HorizontalAlignment = Enum.HorizontalAlignment.Center,
SortOrder = Enum.SortOrder.LayoutOrder,
VerticalAlignment = Enum.VerticalAlignment.Bottom,
Padding = UDim.new(0, 5)
})
}), {
Position = UDim2.new(1, -25, 1, -25),
Size = UDim2.new(0, 300, 1, -25),
AnchorPoint = Vector2.new(1, 1),
Parent = Orion
})
function OrionLib:MakeNotification(NotificationConfig)
spawn(function()
NotificationConfig.Name = NotificationConfig.Name or "Notification"
NotificationConfig.Content = NotificationConfig.Content or "Test"
NotificationConfig.Image = NotificationConfig.Image or "rbxassetid://4384403532"
NotificationConfig.Time = NotificationConfig.Time or 15
local NotificationParent = SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y,
Parent = NotificationHolder
})
local NotificationFrame = SetChildren(SetProps(MakeElement("RoundFrame", OrionLib.Themes[OrionLib.SelectedTheme].Second, 0, 15), {
Parent = NotificationParent,
Size = UDim2.new(1, 0, 0, 0),
Position = UDim2.new(1, -55, 0, 0),
BackgroundTransparency = 0.05, -- 🌈 Levemente transparente
AutomaticSize = Enum.AutomaticSize.Y
}), {
MakeElement("Stroke", OrionLib.Themes[OrionLib.SelectedTheme].Stroke, 2), -- 🌈 Borda colorida e grossa!
MakeElement("Padding", 12, 12, 12, 12),
SetProps(MakeElement("Image", NotificationConfig.Image), {
Size = UDim2.new(0, 20, 0, 20),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Icon"
}),
SetProps(MakeElement("Label", NotificationConfig.Name, 15), {
Size = UDim2.new(1, -30, 0, 20),
Position = UDim2.new(0, 30, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Title"
}),
SetProps(MakeElement("Label", NotificationConfig.Content, 14), {
Size = UDim2.new(1, 0, 0, 0),
Position = UDim2.new(0, 0, 0, 25),
Font = Enum.Font.GothamSemibold,
Name = "Content",
AutomaticSize = Enum.AutomaticSize.Y,
TextColor3 = Color3.fromRGB(200, 200, 200),
TextWrapped = true
})
})
TweenService:Create(NotificationFrame, TweenInfo.new(0.5, Enum.EasingStyle.Quint), {Position = UDim2.new(0, 0, 0, 0)}):Play()
wait(NotificationConfig.Time - 0.88)
TweenService:Create(NotificationFrame.Icon, TweenInfo.new(0.4, Enum.EasingStyle.Quint), {ImageTransparency = 1}):Play()
TweenService:Create(NotificationFrame, TweenInfo.new(0.8, Enum.EasingStyle.Quint), {BackgroundTransparency = 0.6}):Play()
wait(0.3)
TweenService:Create(NotificationFrame.UIStroke, TweenInfo.new(0.6, Enum.EasingStyle.Quint), {Transparency = 0.9}):Play()
TweenService:Create(NotificationFrame.Title, TweenInfo.new(0.6, Enum.EasingStyle.Quint), {TextTransparency = 0.4}):Play()
TweenService:Create(NotificationFrame.Content, TweenInfo.new(0.6, Enum.EasingStyle.Quint), {TextTransparency = 0.5}):Play()
wait(0.05)
NotificationFrame:TweenPosition(UDim2.new(1, 20, 0, 0),'In','Quint',0.8,true)
wait(1.35)
NotificationFrame:Destroy()
end)
end
-- Function to change theme dynamically
function OrionLib:ChangeTheme(ThemeName)
if OrionLib.Themes[ThemeName] then
OrionLib.SelectedTheme = ThemeName
SetTheme()
-- Theme changed silently
return true
else
warn("Theme not found: " .. ThemeName)
return false
end
end
-- Function to update theme
function OrionLib:UpdateTheme(Config)
if type(Config) ~= "table" then
warn("[UpdateTheme] Invalid configuration table")
return
end
local updatedKeys = {}
for key, value in pairs(Config) do
if OrionLib.Themes[OrionLib.SelectedTheme][key] ~= nil then
if typeof(OrionLib.Themes[OrionLib.SelectedTheme][key]) == typeof(value) then
OrionLib.Themes[OrionLib.SelectedTheme][key] = value
table.insert(updatedKeys, key)
else
warn(("[UpdateTheme] Type mismatch for key '%s'"):format(key))
end
else
warn("[UpdateTheme] Key '" .. key .. "' does not exist in theme")
end
end
if #updatedKeys > 0 then
SetTheme()
end
end
function OrionLib:Init()
if OrionLib.SaveCfg then
pcall(function()
-- Load from workspace folder (EXACTLY like caos.lua)
local configFile = CONFIG_FOLDER .. "/" .. game.GameId .. ".json"
if isfile and isfile(configFile) then
LoadCfg(readfile(configFile))
end
end)
end
end
function OrionLib:MakeWindow(WindowConfig)
local FirstTab = true
local Minimized = false
local Loaded = false
local UIHidden = false
WindowConfig = WindowConfig or {}
WindowConfig.Name = WindowConfig.Name or "Orion Library"
WindowConfig.ConfigFolder = WindowConfig.ConfigFolder or WindowConfig.Name
WindowConfig.SaveConfig = WindowConfig.SaveConfig or true
WindowConfig.HidePremium = WindowConfig.HidePremium or false
if WindowConfig.IntroEnabled == nil then
WindowConfig.IntroEnabled = true
end
WindowConfig.FreeMouse = WindowConfig.FreeMouse or false
WindowConfig.KeyToOpenWindow = WindowConfig.KeyToOpenWindow or "RightShift"
WindowConfig.IntroText = WindowConfig.IntroText or "Orion Library"
WindowConfig.CloseCallback = WindowConfig.CloseCallback or function() end
WindowConfig.ShowIcon = WindowConfig.ShowIcon or false
WindowConfig.Icon = WindowConfig.Icon or "rbxassetid://8834748103"
WindowConfig.IntroIcon = WindowConfig.IntroIcon or "rbxassetid://8834748103"
OrionLib.Folder = WindowConfig.ConfigFolder
OrionLib.SaveCfg = WindowConfig.SaveConfig
if WindowConfig.SaveConfig then
if not isfolder(WindowConfig.ConfigFolder) then
makefolder(WindowConfig.ConfigFolder)
end
end
if WindowConfig.FreeMouse then
UnlockMouse(true)
end
local MobileOpenButton = SetChildren(SetProps(MakeElement("Button"),
{
BackgroundTransparency = 0,
Parent = Orion,
Text = "Open",
TextScaled = true,
TextSize = 14,
TextColor3 = Color3.new(0, 0, 0),
BackgroundColor = BrickColor.new(0, 0, 0),
TextStrokeColor3 = Color3.new(255, 255, 255),
TextStrokeTransparency = 0,
Size = UDim2.new(0.035, 0, 0.035, 0),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.5, 0),
Visible = false,
Font = Enum.Font.GothamBold
}), {MakeElement("Corner", 0.25), SetProps(MakeElement("AspectRatio"), {DominantAxis = 0, AspectRatio = 0.986, AspectType = 1})})
MakeDraggable(MobileOpenButton, MobileOpenButton)
-- Tabs table para o SearchBar
local Tabs = {}
local TabHolder = AddThemeObject(SetChildren(SetProps(MakeElement("ScrollFrame", Color3.fromRGB(255, 255, 255), 4), {
Size = UDim2.new(1, 0, 1, -90),
Position = UDim2.new(0, 0, 0, 40)
}), {
MakeElement("List"),
MakeElement("Padding", 8, 0, 0, 8)
}), "Divider")
AddConnection(TabHolder.UIListLayout:GetPropertyChangedSignal("AbsoluteContentSize"), function()
TabHolder.CanvasSize = UDim2.new(0, 0, 0, TabHolder.UIListLayout.AbsoluteContentSize.Y + 16)
end)
-- SearchBar (baseado na Orion)
local SearchBox = Create("TextBox", {
Size = UDim2.new(1, 0, 1, 0),
BackgroundTransparency = 1,
TextColor3 = Color3.fromRGB(255, 255, 255),
PlaceholderColor3 = Color3.fromRGB(210, 210, 210),
PlaceholderText = "🔍 Search",
Font = Enum.Font.GothamBold,
TextWrapped = false,
Text = '',
TextXAlignment = Enum.TextXAlignment.Center,
TextSize = 12,
ClearTextOnFocus = true
})
local TextboxActual = AddThemeObject(SearchBox, "Text")
local SearchBar = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 1, 6), {
Size = UDim2.new(1, -16, 0, 28),
Position = UDim2.new(0.5, 0, 0, 6),
AnchorPoint = Vector2.new(0.5, 0)
}), {
AddThemeObject(MakeElement("Stroke"), "Stroke"),
TextboxActual
}), "Main")
local function SearchHandle()
local Text = string.lower(SearchBox.Text)
for i, v in pairs(Tabs) do
if v:IsA('TextButton') then
if string.find(string.lower(i), Text) then
v.Visible = true
else
v.Visible = false
end
end
end
end
AddConnection(TextboxActual:GetPropertyChangedSignal("Text"), SearchHandle)
local CloseBtn = SetChildren(SetProps(MakeElement("Button"), {
Size = UDim2.new(0.5, 0, 1, 0),
Position = UDim2.new(0.5, 0, 0, 0),
BackgroundTransparency = 1
}), {
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://7072725342"), {
Position = UDim2.new(0, 9, 0, 6),
Size = UDim2.new(0, 18, 0, 18)
}), "Text")
})
local MinimizeBtn = SetChildren(SetProps(MakeElement("Button"), {
Size = UDim2.new(0.5, 0, 1, 0),
BackgroundTransparency = 1
}), {
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://7072719338"), {
Position = UDim2.new(0, 9, 0, 6),
Size = UDim2.new(0, 18, 0, 18),
Name = "Ico"
}), "Text")
})
local DragPoint = SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 0, 50)
})
local WindowStuff = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 10), {
Size = UDim2.new(0, 150, 1, -50),
Position = UDim2.new(0, 0, 0, 50)
}), {
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 10),
Position = UDim2.new(0, 0, 0, 0)
}), "Second"),
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 1, 1, 0),
Position = UDim2.new(1, -1, 0, 0)
}), "Stroke"),
SearchBar,
-- RESIZE BUTTON (na borda direita do painel) - IGUAL AO DO WINDOWS
SetChildren(SetProps(MakeElement("ImageButton"), {
Size = UDim2.new(0, 10, 0, 24),
Position = UDim2.new(1, -5, 0.5, 0),
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
Name = "SideResizeBtn",
ZIndex = 10
}), {
-- Dot 1 (top) - IGUAL AO RESIZE DO WINDOWS
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 2),
BackgroundTransparency = 0.7,
Name = "Dot1"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark"),
-- Dot 2 (middle)
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 10),
BackgroundTransparency = 0.7,
Name = "Dot2"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark"),
-- Dot 3 (bottom)
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 18),
BackgroundTransparency = 0.7,
Name = "Dot3"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark")
}),
TabHolder,
SetChildren(SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 0, 50),
Position = UDim2.new(0, 0, 1, -50)
}), {
Create("ImageLabel", {
AnchorPoint = Vector2.new(0.5, 0.5),
Size = UDim2.new(0, 36, 0, 36),
Position = UDim2.new(0.5, 0, 0, 18),
Name = "PlayerAvatar",
BackgroundTransparency = 1,
BorderSizePixel = 0,
Image = "https://www.roblox.com/headshot-thumbnail/image?userId=".. LocalPlayer.UserId .."&width=420&height=420&format=png"
}, {
MakeElement("Corner", 1),
AddThemeObject(MakeElement("Stroke"), "Stroke")
}),
AddThemeObject(SetProps(MakeElement("Label", LocalPlayer.DisplayName, 11), {
Size = UDim2.new(1, -8, 0, 12),
Position = UDim2.new(0, 4, 1, -14),
TextXAlignment = Enum.TextXAlignment.Center,
Name = "PlayerName",
Font = Enum.Font.GothamBold,
TextScaled = true
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", "", 12), {
Size = UDim2.new(1, -60, 0, 12),
Position = UDim2.new(0, 50, 1, -25),
Visible = not WindowConfig.HidePremium
}), "TextDark")
}),
}), "Second")
-- Container para o nome com letras individuais
local WindowNameContainer = SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 400, 0, 30),
Position = UDim2.new(0, 25, 0, 10),
BackgroundTransparency = 1,
ClipsDescendants = true
})
-- Criar letras individuais para o nome
local windowLetters = {}
local windowText = WindowConfig.Name
local letterX = 0
for i = 1, #windowText do
local char = windowText:sub(i, i)
local charWidth = char == " " and 7 or 12
local letterLabel = AddThemeObject(SetProps(MakeElement("Label", char, 20), {
Parent = WindowNameContainer,
Size = UDim2.new(0, charWidth, 1, 0),
Position = UDim2.new(0, letterX, 0, 0),
Font = Enum.Font.GothamBlack,
BackgroundTransparency = 1,
TextXAlignment = Enum.TextXAlignment.Left
}), "Text")
table.insert(windowLetters, letterLabel)
letterX = letterX + charWidth
end
local WindowName = WindowNameContainer -- Manter compatibilidade
-- FPS Counter (média móvel para estabilidade)
local fpsHistory = {}
local fps = 60
RunService.RenderStepped:Connect(function(deltaTime)
table.insert(fpsHistory, 1 / deltaTime)
if #fpsHistory > 30 then
table.remove(fpsHistory, 1)
end
local sum = 0
for _, v in ipairs(fpsHistory) do
sum = sum + v
end
fps = math.floor(sum / #fpsHistory)
end)
-- Stats Label (Data + Hora + FPS + Ping)
local StatsLabel = AddThemeObject(SetProps(MakeElement("Label", "00/00/0000 00:00 | 60 FPS | 0ms", 10), {
Size = UDim2.new(0, 230, 0, 20),
Position = UDim2.new(1, -340, 0, 15),
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Right
}), "TextDark")
-- Update stats every 0.5 second
spawn(function()
while wait(0.5) do
if not StatsLabel or not StatsLabel.Parent then break end
-- Get date and time (horário e data local do PC por fuso horário)
local time = os.date("*t")
local dateStr = string.format("%02d/%02d/%04d", time.day, time.month, time.year)
local timeStr = string.format("%02d:%02d", time.hour, time.min)
-- Get ping (arredondado)
local ping = math.floor(game:GetService("Stats").Network.ServerStatsItem["Data Ping"]:GetValue())
-- Update label (data + hora + FPS + ping)
StatsLabel.Text = string.format("%s %s | %d FPS | %dms", dateStr, timeStr, fps, ping)
end
end)
local WindowTopBarLine = AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1)
}), "Stroke")
local MainWindow = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 16), {
Parent = Orion,
Position = UDim2.new(0.5, -307, 0.5, -172),
Size = UDim2.new(0, 615, 0, 344),
ClipsDescendants = true,
BackgroundTransparency = 0.02, -- Levemente transparente para efeito moderno
Active = true -- Bloqueia cliques que passam através do hub
}), {
MakeElement("Stroke", OrionLib.Themes[OrionLib.SelectedTheme].Stroke, 2.5), -- Borda colorida grossa!
--SetProps(MakeElement("Image", "rbxassetid://3523728077"), {
-- AnchorPoint = Vector2.new(0.5, 0.5),
-- Position = UDim2.new(0.5, 0, 0.5, 0),
-- Size = UDim2.new(1, 80, 1, 320),
-- ImageColor3 = Color3.fromRGB(33, 33, 33),
-- ImageTransparency = 0.7
--}),
SetChildren(SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 0, 50),
Name = "TopBar"
}), {
WindowName,
StatsLabel,
WindowTopBarLine,
AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 7), {
Size = UDim2.new(0, 70, 0, 30),
Position = UDim2.new(1, -90, 0, 10)
}), {
AddThemeObject(MakeElement("Stroke"), "Stroke"),
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 1, 1, 0),
Position = UDim2.new(0.5, 0, 0, 0)
}), "Stroke"),
CloseBtn,
MinimizeBtn
}), "Second"),
}),
DragPoint,
WindowStuff,
-- RESIZE BUTTON (3 dots verticais, subido um pouco)
SetChildren(SetProps(MakeElement("ImageButton"), {
Size = UDim2.new(0, 10, 0, 24),
Position = UDim2.new(1, 0, 1, -6),
AnchorPoint = Vector2.new(1, 1),
BackgroundTransparency = 1,
Name = "ResizeBtn"
}), {
-- Dot 1 (top)
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 2),
BackgroundTransparency = 0.7,
Name = "Dot1"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark"),
-- Dot 2 (middle)
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 9),
BackgroundTransparency = 0.7,
Name = "Dot2"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark"),
-- Dot 3 (bottom)
AddThemeObject(SetChildren(SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 4, 0, 4),
Position = UDim2.new(0, 3, 0, 16),
BackgroundTransparency = 0.7,
Name = "Dot3"
}), {
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
}), "TextDark")
}),
}), "Main")
-- Adicionar WindowNameContainer ao TopBar
WindowNameContainer.Parent = MainWindow.TopBar
if WindowConfig.ShowIcon then
WindowName.Position = UDim2.new(0, 50, 0, -24)
local WindowIcon = SetProps(MakeElement("Image", WindowConfig.Icon), {
Size = UDim2.new(0, 20, 0, 20),
Position = UDim2.new(0, 25, 0, 15)
})
WindowIcon.Parent = MainWindow.TopBar
end
MakeDraggable(DragPoint, MainWindow)
-- 📐 SISTEMA DE RESIZE (3 dots with hover effect)
local Resizing = false
local ResizeBtn = MainWindow:FindFirstChild("ResizeBtn")
if ResizeBtn then
local Dot1 = ResizeBtn:FindFirstChild("Dot1")
local Dot2 = ResizeBtn:FindFirstChild("Dot2")
local Dot3 = ResizeBtn:FindFirstChild("Dot3")
-- Hover effect - show dots more visible
AddConnection(ResizeBtn.MouseEnter, function()
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.2), {BackgroundTransparency = 0.2}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.2), {BackgroundTransparency = 0.2}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.2), {BackgroundTransparency = 0.2}):Play() end
end)
AddConnection(ResizeBtn.MouseLeave, function()
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
end)
local StartSize, StartPos
AddConnection(ResizeBtn.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Resizing = true
StartSize = MainWindow.AbsoluteSize
StartPos = Vector2.new(Input.Position.X, Input.Position.Y)
-- Show dots fully when resizing
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if Resizing and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
local Delta = Vector2.new(Input.Position.X - StartPos.X, Input.Position.Y - StartPos.Y)
local NewWidth = math.max(500, math.min(1200, StartSize.X + Delta.X))
local NewHeight = math.max(300, math.min(800, StartSize.Y + Delta.Y))
-- Resize suave (SEM BARREIRA)
MainWindow.Size = UDim2.new(0, NewWidth, 0, NewHeight)
-- Atualizar OriginalSize para salvar o novo tamanho
OriginalSize = MainWindow.Size
-- Regredir painel lateral SUAVEMENTE apenas se necessário
local currentSideWidth = WindowStuff.AbsoluteSize.X
local maxAllowedWidth = NewWidth * 0.45 -- Máximo 45% da largura da janela
-- Só regride se o painel estiver MUITO grande (> 50% da janela) E a janela for pequena
if NewWidth < 650 and currentSideWidth > maxAllowedWidth and currentSideWidth > 200 then
local targetWidth = math.max(180, maxAllowedWidth)
-- Animação SUAVE de regressão
TweenService:Create(WindowStuff, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Size = UDim2.new(0, targetWidth, 1, -50)
}):Play()
-- Atualizar containers com animação
for _, ItemContainer in pairs(MainWindow:GetChildren()) do
if ItemContainer.Name == "ItemContainer" then
TweenService:Create(ItemContainer, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Size = UDim2.new(1, -targetWidth, 1, -50),
Position = UDim2.new(0, targetWidth, 0, 50)
}):Play()
end
end
end
end
end)
AddConnection(UserInputService.InputEnded, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if Resizing then
Resizing = false
-- Return dots to semi-visible after resizing
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
end
end
end)
end
-- 📐 SISTEMA DE RESIZE LATERAL (3 dots indicator)
local SideResizing = false
local SideResizeBtn = WindowStuff:FindFirstChild("SideResizeBtn")
if SideResizeBtn then
local Dot1 = SideResizeBtn:FindFirstChild("Dot1")
local Dot2 = SideResizeBtn:FindFirstChild("Dot2")
local Dot3 = SideResizeBtn:FindFirstChild("Dot3")
-- Hover effect - MOSTRAR BOLINHAS MAIS VISÍVEIS
AddConnection(SideResizeBtn.MouseEnter, function()
if not SideResizing then
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.15), {BackgroundTransparency = 0.3}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.15), {BackgroundTransparency = 0.3}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.15), {BackgroundTransparency = 0.3}):Play() end
end
end)
AddConnection(SideResizeBtn.MouseLeave, function()
if not SideResizing then
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.15), {BackgroundTransparency = 0.7}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.15), {BackgroundTransparency = 0.7}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.15), {BackgroundTransparency = 0.7}):Play() end
end
end)
local StartSize, StartPos
AddConnection(SideResizeBtn.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
SideResizing = true
StartSize = WindowStuff.AbsoluteSize
StartPos = Vector2.new(Input.Position.X, Input.Position.Y)
-- Mostrar bolinhas totalmente visíveis ao começar resize
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.1), {BackgroundTransparency = 0}):Play() end
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if SideResizing and (Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch) then
local Delta = Vector2.new(Input.Position.X - StartPos.X, 0)
-- Limite máximo é 50% da largura da janela
local MaxWidth = MainWindow.AbsoluteSize.X * 0.5
local NewWidth = math.max(40, math.min(MaxWidth, StartSize.X + Delta.X))
-- Resize WindowStuff (painel lateral)
WindowStuff.Size = UDim2.new(0, NewWidth, 1, -50)
-- Atualizar todos os Containers para respeitar o novo tamanho
for _, ItemContainer in pairs(MainWindow:GetChildren()) do
if ItemContainer.Name == "ItemContainer" then
ItemContainer.Size = UDim2.new(1, -NewWidth, 1, -50)
ItemContainer.Position = UDim2.new(0, NewWidth, 0, 50)
end
end
-- Sistema de responsividade COMPLETO
local PlayerAvatar = WindowStuff:FindFirstChild("PlayerAvatar", true)
local PlayerName = WindowStuff:FindFirstChild("PlayerName", true)
-- SEARCHBAR: Mostrar só emoji quando pequeno
if SearchBox then
if NewWidth < 80 then
SearchBox.PlaceholderText = "🔍"
SearchBox.Text = SearchBox.Text == "" and "" or SearchBox.Text
else
SearchBox.PlaceholderText = "🔍 Search"
end
end
-- ESCONDER TABS (letras das abas) só quando REALMENTE necessário
for _, Tab in pairs(TabHolder:GetChildren()) do
if Tab:IsA("TextButton") then
local TabTitle = Tab:FindFirstChild("Title")
if TabTitle then
-- Esconder só quando muito pequeno (< 60px = só ícones)
if NewWidth < 60 then
TabTitle.Visible = false
else
TabTitle.Visible = true
end
end
end
end
-- Sistema de responsividade SIMPLES - SEM DIMINUIR AVATAR
if NewWidth < 40 then
-- MUITO PEQUENO: esconder TUDO
if PlayerAvatar then PlayerAvatar.Visible = false end
if PlayerName then PlayerName.Visible = false end
elseif NewWidth < 70 then
-- PEQUENO: mostrar só avatar (TAMANHO FIXO) SEM nome
if PlayerAvatar then
PlayerAvatar.Visible = true
-- NÃO MEXER NO TAMANHO!
end
if PlayerName then PlayerName.Visible = false end
else
-- NORMAL: mostrar tudo
if PlayerAvatar then
PlayerAvatar.Visible = true
-- NÃO MEXER NO TAMANHO!
end
if PlayerName then
PlayerName.Visible = true
-- NÃO MEXER NA POSIÇÃO!
end
end
end
end)
AddConnection(UserInputService.InputEnded, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
if SideResizing then
SideResizing = false
-- Resetar bolinhas para semi-transparente
if Dot1 then TweenService:Create(Dot1, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot2 then TweenService:Create(Dot2, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
if Dot3 then TweenService:Create(Dot3, TweenInfo.new(0.2), {BackgroundTransparency = 0.7}):Play() end
end
end
end)
end
AddConnection(MobileOpenButton.MouseButton1Click, function()
MobileOpenButton.Visible = false
MainWindow.Visible = true
UIHidden = false
freeMouse.Modal = true
buttonmodal.Modal = true
UserInputService.MouseIconEnabled = true
freeMouse.Visible = true
end)
local function showMobileOpenButton()
if UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then
if UIHidden then
MobileOpenButton.Visible = true
else
MobileOpenButton.Visible = false
end
end
end
AddConnection(CloseBtn.MouseButton1Up, function()
-- Hide UI (NO FADE - prevents bugs)
MainWindow.Visible = false
UIHidden = true
-- FORÇAR DESATIVAÇÃO DO MOUSE UI E MODAL
mouselock = false
freeMouse.Visible = false
freeMouse.Modal = false
buttonmodal.Modal = false
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseIconEnabled = false
if WindowConfig.FreeMouse then
UnlockMouse(false)
end
OrionLib:MakeNotification({
Name = "Interface Hidden",
Content = "Press " .. WindowConfig.KeyToOpenWindow .. " to reopen the interface",
Time = 5
})
showMobileOpenButton()
WindowConfig.CloseCallback()
end)
AddConnection(UserInputService.InputBegan, function(Input, gameProcessed)
if gameProcessed then return end
if Input.KeyCode == Enum.KeyCode[WindowConfig.KeyToOpenWindow] then
if UIHidden then
-- Show UI
MainWindow.Visible = true
UIHidden = false
freeMouse.Visible = true
freeMouse.Modal = true
buttonmodal.Modal = true
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
if WindowConfig.FreeMouse then
UnlockMouse(true)
end
showMobileOpenButton()
else
-- Hide UI
MainWindow.Visible = false
UIHidden = true
-- FORÇAR DESATIVAÇÃO DO MOUSE UI E MODAL
mouselock = false
freeMouse.Visible = false
freeMouse.Modal = false
buttonmodal.Modal = false
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseIconEnabled = false
if WindowConfig.FreeMouse then
UnlockMouse(false)
end
showMobileOpenButton()
WindowConfig.CloseCallback()
end
end
end)
-- MINIMIZE SYSTEM (COMPLETELY REBUILT FROM SCRATCH)
local OriginalSize = UDim2.new(0, 615, 0, 344)
-- Calcular largura baseada no nome + hora + FPS/MS + botões
local nameWidth = #WindowConfig.Name * 14 -- Aproximadamente 14px por letra (fonte maior)
local statsWidth = 180 -- Espaço para hora + FPS/MS (aumentado para incluir hora)
local buttonsWidth = 90 -- Espaço para botões +/-/X
local padding = 40 -- Padding extra (aumentado)
local minimizedWidth = math.max(300, nameWidth + statsWidth + buttonsWidth + padding)
local MinimizedSize = UDim2.new(0, minimizedWidth, 0, 50)
local savedVisibility = {}
local savedSideWidth = nil -- Salvar largura do painel lateral
local savedWindowSize = nil -- Salvar tamanho da janela
local letterAnimationLoop = nil
-- Função de animação contínua das letras (SEMPRE ATIVA)
local letterAnimationActive = true
local function startLetterAnimation()
if letterAnimationLoop then return end
letterAnimationLoop = task.spawn(function()
task.wait(2) -- Espera inicial de 2 segundos
while letterAnimationActive do
-- Desaparecer letras uma por uma (LENTO E SUAVE)
for i = #windowLetters, 1, -1 do
if not letterAnimationActive then break end
local letter = windowLetters[i]
TweenService:Create(letter, TweenInfo.new(0.4, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {
TextTransparency = 1
}):Play()
task.wait(0.08) -- Delay maior entre letras
end
task.wait(0.6) -- Pausa maior entre desaparecer e reaparecer
-- Reaparecer letras uma por uma (LENTO E SUAVE)
for i = 1, #windowLetters do
if not letterAnimationActive then break end
local letter = windowLetters[i]
TweenService:Create(letter, TweenInfo.new(0.4, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {
TextTransparency = 0
}):Play()
task.wait(0.08) -- Delay maior entre letras
end
task.wait(5) -- Espera 5 segundos antes de repetir
end
letterAnimationLoop = nil
end)
end
-- Iniciar animação automaticamente
startLetterAnimation()
AddConnection(MinimizeBtn.MouseButton1Up, function()
if Resizing then return end -- Prevenir bug ao minimizar durante resize
if Minimized then
-- RESTORE - Animação suave SEM GLITCHES
Minimized = false
MinimizeBtn.Ico.Image = "rbxassetid://7072719338"
freeMouse.Visible = true
freeMouse.Modal = true
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
-- Mostrar elementos ANTES da animação (mas transparentes)
WindowStuff.Visible = true
WindowTopBarLine.Visible = true
if ResizeBtn then ResizeBtn.Visible = true end
if SideResizeBtn then SideResizeBtn.Visible = true end
if ClockLabel then ClockLabel.Visible = true end
-- Restaurar todos os elementos salvos ANTES da animação
for element, wasVisible in pairs(savedVisibility) do
if element and element.Parent then
element.Visible = wasVisible
end
end
-- Restaurar largura do painel lateral
if savedSideWidth then
WindowStuff.Size = UDim2.new(0, savedSideWidth, 1, -50)
-- Atualizar containers
for _, ItemContainer in pairs(MainWindow:GetChildren()) do
if ItemContainer.Name == "ItemContainer" then
ItemContainer.Size = UDim2.new(1, -savedSideWidth, 1, -50)
ItemContainer.Position = UDim2.new(0, savedSideWidth, 0, 50)
end
end
end
-- Restaurar tamanho da janela
if savedWindowSize then
OriginalSize = savedWindowSize
end
-- Restaurar posição do StatsLabel instantaneamente
if StatsLabel then
StatsLabel.TextXAlignment = Enum.TextXAlignment.Right
StatsLabel.Position = UDim2.new(1, -340, 0, 15)
StatsLabel.Size = UDim2.new(0, 230, 0, 20)
end
-- Agora animar o tamanho da janela suavemente
MainWindow.ClipsDescendants = true
local restoreTween = TweenService:Create(MainWindow, TweenInfo.new(0.35, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = OriginalSize})
restoreTween:Play()
-- Desativar ClipsDescendants após a animação
restoreTween.Completed:Connect(function()
MainWindow.ClipsDescendants = false
end)
-- Clear saved states
savedVisibility = {}
else
-- MINIMIZE - Animação suave SEM GLITCHES
Minimized = true
MinimizeBtn.Ico.Image = "rbxassetid://7072720870"
-- Salvar largura atual do painel lateral E tamanho da janela
savedSideWidth = WindowStuff.AbsoluteSize.X
savedWindowSize = MainWindow.Size
-- Save visibility of all descendants
for _, child in pairs(WindowStuff:GetDescendants()) do
if child:IsA("GuiObject") then
savedVisibility[child] = child.Visible
end
end
-- Animar StatsLabel ANTES de esconder elementos
if StatsLabel then
local statsX = nameWidth + 35 -- Logo após o nome + 35px de espaço (mais separado)
StatsLabel.TextXAlignment = Enum.TextXAlignment.Left
TweenService:Create(StatsLabel, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Position = UDim2.new(0, statsX, 0, 15),
Size = UDim2.new(0, statsWidth, 0, 20)
}):Play()
end
-- Iniciar animação de minimização
MainWindow.ClipsDescendants = true
local minimizeTween = TweenService:Create(MainWindow, TweenInfo.new(0.35, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = MinimizedSize})
minimizeTween:Play()
-- Esconder elementos DURANTE a animação (após um pequeno delay)
task.wait(0.1)
WindowStuff.Visible = false
WindowTopBarLine.Visible = false
if ResizeBtn then ResizeBtn.Visible = false end
if SideResizeBtn then SideResizeBtn.Visible = false end
if ClockLabel then ClockLabel.Visible = false end
end
end)
local function LoadSequence()
MainWindow.Visible = false
-- Fundo escuro com blur
local LoadBg = SetProps(MakeElement("Frame"), {
Parent = Orion,
Size = UDim2.new(1, 0, 1, 0),
BackgroundColor3 = Color3.fromRGB(15, 15, 15),
BackgroundTransparency = 0,
ZIndex = 999
})
local LoadSequenceLogo = SetProps(MakeElement("Image", WindowConfig.IntroIcon), {
Parent = LoadBg,
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.45, 0),
Size = UDim2.new(0, 0, 0, 0),
ImageColor3 = Color3.fromRGB(255, 255, 255),
ImageTransparency = 1,
ZIndex = 1000
})
-- Container para as letras individuais
local TextContainer = SetProps(MakeElement("Frame"), {
Parent = LoadBg,
Size = UDim2.new(1, 0, 0, 30),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.58, 0),
BackgroundTransparency = 1,
ZIndex = 1000
})
-- Criar letras individuais
local text = WindowConfig.IntroText
local letters = {}
local totalWidth = 0
-- Calcular largura total aproximada
for i = 1, #text do
local char = text:sub(i, i)
local charWidth = char == " " and 8 or 12
totalWidth = totalWidth + charWidth
end
-- Criar cada letra
local currentX = -totalWidth / 2
for i = 1, #text do
local char = text:sub(i, i)
local charWidth = char == " " and 8 or 12
local letterLabel = SetProps(MakeElement("Label", char, 16), {
Parent = TextContainer,
Size = UDim2.new(0, charWidth, 1, 0),
Position = UDim2.new(0.5, currentX, 0, 0),
Font = Enum.Font.GothamBold,
TextTransparency = 1,
TextColor3 = Color3.fromRGB(255, 255, 255),
BackgroundTransparency = 1,
ZIndex = 1001
})
table.insert(letters, letterLabel)
currentX = currentX + charWidth
end
local LoadingBar = SetChildren(SetProps(MakeElement("Frame"), {
Parent = LoadBg,
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.65, 0),
Size = UDim2.new(0, 200, 0, 3),
BackgroundColor3 = Color3.fromRGB(60, 60, 60),
BackgroundTransparency = 0.5,
ZIndex = 1000
}), {
SetProps(MakeElement("Frame"), {
Size = UDim2.new(0, 0, 1, 0),
BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme].Stroke,
Name = "Fill",
ZIndex = 1001
}),
Create("UICorner", {CornerRadius = UDim.new(1, 0)})
})
-- Animação moderna com letras aparecendo uma por uma
TweenService:Create(LoadSequenceLogo, TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 48, 0, 48), ImageTransparency = 0}):Play()
wait(0.3)
-- Letras aparecem uma por uma
for i, letter in ipairs(letters) do
task.spawn(function()
wait(i * 0.03)
TweenService:Create(letter, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
end)
end
wait(0.2 + #letters * 0.03)
TweenService:Create(LoadingBar.Fill, TweenInfo.new(1.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(1, 0, 1, 0)}):Play()
wait(1.3)
-- Letras desaparecem uma por uma (de trás para frente)
for i = #letters, 1, -1 do
local letter = letters[i]
task.spawn(function()
wait((#letters - i) * 0.025)
TweenService:Create(letter, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
TextTransparency = 1,
Position = letter.Position + UDim2.new(0, 0, 0, -10)
}):Play()
end)
end
-- Fade out do resto
TweenService:Create(LoadBg, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
TweenService:Create(LoadSequenceLogo, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 1}):Play()
TweenService:Create(LoadingBar, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
TweenService:Create(LoadingBar.Fill, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play()
MainWindow.Visible = true
freeMouse.Modal = true
buttonmodal.Modal = true
UserInputService.MouseIconEnabled = true
freeMouse.Visible = true
wait(0.5)
LoadBg:Destroy()
end
if WindowConfig.IntroEnabled then
LoadSequence()
end
-- Ativar freeMouse quando UI abre
freeMouse.Visible = true
if WindowConfig.FreeMouse then
-- Free mouse enabled silently
end
local TabFunction = {}
function TabFunction:MakeTab(TabConfig)
TabConfig = TabConfig or {}
TabConfig.Name = TabConfig.Name or "Tab"
TabConfig.Icon = TabConfig.Icon or ""
TabConfig.PremiumOnly = TabConfig.PremiumOnly or false
local TabFrame = SetChildren(SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 0, 30),
Parent = TabHolder
}), {
AddThemeObject(SetProps(MakeElement("Image", TabConfig.Icon), {
AnchorPoint = Vector2.new(0, 0.5),
Size = UDim2.new(0, 18, 0, 18),
Position = UDim2.new(0, 10, 0.5, 0),
ImageTransparency = 1,
Name = "Ico"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", TabConfig.Name, 14), {
Size = UDim2.new(1, -35, 1, 0),
Position = UDim2.new(0, 35, 0, 0),
Font = Enum.Font.GothamSemibold,
TextTransparency = 1,
Name = "Title"
}), "Text")
})
if GetIcon(TabConfig.Icon) ~= nil then
TabFrame.Ico.Image = GetIcon(TabConfig.Icon)
end
-- Adicionar tab à tabela Tabs para o SearchBar
Tabs[TabConfig.Name] = TabFrame
-- Sem animação = mais rápido
TabFrame.Ico.ImageTransparency = 0.4
TabFrame.Title.TextTransparency = 0.4
local Container = AddThemeObject(SetChildren(SetProps(MakeElement("ScrollFrame", Color3.fromRGB(255, 255, 255), 5), {
Size = UDim2.new(1, -150, 1, -50),
Position = UDim2.new(0, 150, 0, 50),
Parent = MainWindow,
Visible = false,
Name = "ItemContainer",
ClipsDescendants = true,
BorderSizePixel = 0
}), {
MakeElement("List", 0, 6),
MakeElement("Padding", 15, 10, 10, 15)
}), "Divider")
AddConnection(Container.UIListLayout:GetPropertyChangedSignal("AbsoluteContentSize"), function()
Container.CanvasSize = UDim2.new(0, 0, 0, Container.UIListLayout.AbsoluteContentSize.Y + 30)
end)
if FirstTab then
FirstTab = false
TabFrame.Ico.ImageTransparency = 0
TabFrame.Title.TextTransparency = 0
TabFrame.Title.Font = Enum.Font.GothamBlack
Container.Visible = true
end
AddConnection(TabFrame.MouseButton1Click, function()
for _, Tab in next, TabHolder:GetChildren() do
if Tab:IsA("TextButton") then
Tab.Title.Font = Enum.Font.GothamSemibold
TweenService:Create(Tab.Ico, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {ImageTransparency = 0.4}):Play()
TweenService:Create(Tab.Title, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {TextTransparency = 0.4}):Play()
end
end
for _, ItemContainer in next, MainWindow:GetChildren() do
if ItemContainer.Name == "ItemContainer" then
ItemContainer.Visible = false
end
end
TweenService:Create(TabFrame.Ico, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {ImageTransparency = 0}):Play()
TweenService:Create(TabFrame.Title, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {TextTransparency = 0}):Play()
TabFrame.Title.Font = Enum.Font.GothamBlack
Container.Visible = true
end)
local function GetElements(ItemParent)
local ElementFunction = {}
function ElementFunction:AddLabel(Text)
local LabelContent = AddThemeObject(SetProps(MakeElement("Label", "", 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text")
local LabelFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 30),
BackgroundTransparency = 0.7,
Parent = ItemParent
}), {
LabelContent,
AddThemeObject(MakeElement("Stroke"), "Stroke")
}), "Second")
LabelContent.Text = Text
local LabelFunction = {}
function LabelFunction:Set(ToChange)
LabelContent.Text = ToChange
end
return LabelFunction
end
function ElementFunction:AddPlayerParagraph(userId)
userId = userId or 0
local displayName = "Unknown"
local username = "Unknown"
local success, result = pcall(function()
return UserService:GetUserInfosByUserIdsAsync({userId})
end)
if success and result and result[1] then
displayName = result[1].DisplayName or "Unknown"
username = result[1].Username or "Unknown"
end
local ParagraphFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 70),
BackgroundTransparency = 0.7,
Parent = ItemParent
}), {
SetProps(MakeElement("Image", "", 0), {
Name = "Avatar",
Size = UDim2.new(0, 60, 0, 60),
Position = UDim2.new(0, 5, 0, 5),
BackgroundTransparency = 1,
Image = "https://www.roblox.com/headshot-thumbnail/image?userId=" .. userId .. "&width=420&height=420&format=png"
}),
AddThemeObject(SetProps(MakeElement("Label", displayName, 15), {
Name = "DisplayName",
Size = UDim2.new(1, -70, 0, 20),
Position = UDim2.new(0, 70, 0, 10),
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Left
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", username, 13), {
Name = "Username",
Size = UDim2.new(1, -70, 0, 20),
Position = UDim2.new(0, 70, 0, 35),
Font = Enum.Font.GothamSemibold,
TextXAlignment = Enum.TextXAlignment.Left
}), "TextDark"),
AddThemeObject(MakeElement("Stroke"), "Stroke")
}), "Second")
local PlayerParagraph = {}
function PlayerParagraph:Set(newUserId)
newUserId = newUserId or 0
local dname = "Unknown"
local uname = "Unknown"
local ok, data = pcall(function()
return UserService:GetUserInfosByUserIdsAsync({newUserId})
end)
if ok and data and data[1] then
dname = data[1].DisplayName or "Unknown"
uname = data[1].Username or "Unknown"
end
ParagraphFrame.DisplayName.Text = dname
ParagraphFrame.DisplayName.Visible = true
ParagraphFrame.Username.Text = uname
ParagraphFrame.Username.Position = UDim2.new(0, 70, 0, 35)
ParagraphFrame.Avatar.Image = "https://www.roblox.com/headshot-thumbnail/image?userId=" .. newUserId .. "&width=420&height=420&format=png"
end
return PlayerParagraph
end
function ElementFunction:AddParagraph(Text, Content)
Text = Text or "Text"
Content = Content or "Content"
local ParagraphFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 30),
BackgroundTransparency = 0.7,
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Label", Text, 15), {
Size = UDim2.new(1, -12, 0, 14),
Position = UDim2.new(0, 12, 0, 10),
Font = Enum.Font.GothamBold,
Name = "Title"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", "", 13), {
Size = UDim2.new(1, -24, 0, 0),
Position = UDim2.new(0, 12, 0, 26),
Font = Enum.Font.GothamSemibold,
Name = "Content",
TextWrapped = true
}), "TextDark"),
AddThemeObject(MakeElement("Stroke"), "Stroke")
}), "Second")
AddConnection(ParagraphFrame.Content:GetPropertyChangedSignal("Text"), function()
ParagraphFrame.Content.Size = UDim2.new(1, -24, 0, ParagraphFrame.Content.TextBounds.Y)
ParagraphFrame.Size = UDim2.new(1, 0, 0, ParagraphFrame.Content.TextBounds.Y + 35)
end)
ParagraphFrame.Content.Text = Content
local ParagraphFunction = {}
function ParagraphFunction:Set(ToChange)
ParagraphFrame.Content.Text = ToChange
end
return ParagraphFunction
end
function ElementFunction:AddButton(ButtonConfig)
ButtonConfig = ButtonConfig or {}
ButtonConfig.Name = ButtonConfig.Name or "Button"
ButtonConfig.Callback = ButtonConfig.Callback or function() end
ButtonConfig.Icon = ButtonConfig.Icon or "rbxassetid://3944703587"
local Button = {}
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local ButtonLabel = AddThemeObject(SetProps(MakeElement("Label", "", 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text")
local ButtonFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 33),
Parent = ItemParent
}), {
ButtonLabel,
AddThemeObject(SetProps(MakeElement("Image", ButtonConfig.Icon), {
Size = UDim2.new(0, 20, 0, 20),
Position = UDim2.new(1, -30, 0, 7),
}), "TextDark"),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
Click
}), "Second")
ButtonLabel.Text = ButtonConfig.Name
AddConnection(Click.MouseEnter, function()
TweenService:Create(ButtonFrame, TweenCache.Buttery, {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 8, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 8, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 8)}):Play()
end)
AddConnection(Click.MouseLeave, function()
TweenService:Create(ButtonFrame, TweenCache.Buttery, {BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme].Second}):Play()
end)
AddConnection(Click.MouseButton1Up, function()
TweenService:Create(ButtonFrame, TweenCache.Buttery, {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 8, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 8, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 8)}):Play()
spawn(function()
ButtonConfig.Callback()
end)
end)
AddConnection(Click.MouseButton1Down, function()
TweenService:Create(ButtonFrame, TweenCache.UltraFast, {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 12, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 12, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 12)}):Play()
end)
function Button:Set(ButtonText)
ButtonFrame.Content.Text = ButtonText
end
return Button
end
function ElementFunction:AddToggle(ToggleConfig)
ToggleConfig = ToggleConfig or {}
ToggleConfig.Name = ToggleConfig.Name or "Toggle"
ToggleConfig.Default = ToggleConfig.Default or false
ToggleConfig.Callback = ToggleConfig.Callback or function() end
ToggleConfig.Color = ToggleConfig.Color or OrionLib.Themes[OrionLib.SelectedTheme].Stroke
ToggleConfig.Flag = ToggleConfig.Flag or nil
ToggleConfig.Save = ToggleConfig.Save or false
local Toggle = {Value = ToggleConfig.Default, Save = ToggleConfig.Save}
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0),
ZIndex = 5,
Active = true
})
local ToggleBox = SetChildren(SetProps(MakeElement("RoundFrame", ToggleConfig.Color, 0, 4), {
Size = UDim2.new(0, 24, 0, 24),
Position = UDim2.new(1, -24, 0.5, 0),
AnchorPoint = Vector2.new(0.5, 0.5)
}), {
SetProps(MakeElement("Stroke"), {
Color = ToggleConfig.Color,
Name = "Stroke",
Transparency = 0.5
}),
SetProps(MakeElement("Image", "rbxassetid://3944680095"), {
Size = UDim2.new(0, 20, 0, 20),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.5, 0, 0.5, 0),
ImageColor3 = Color3.fromRGB(255, 255, 255),
Name = "Ico"
}),
})
local ToggleFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Label", ToggleConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
ToggleBox,
Click
}), "Second")
function Toggle:Set(Value)
Toggle.Value = Value
local currentColor = OrionLib.Themes[OrionLib.SelectedTheme].Stroke
local offColor = Color3.fromRGB(
math.clamp(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 - 10, 0, 255),
math.clamp(OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 - 10, 0, 255),
math.clamp(OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 - 10, 0, 255)
)
TweenService:Create(ToggleBox, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Toggle.Value and currentColor or offColor}):Play()
TweenService:Create(ToggleBox.Stroke, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Color = Toggle.Value and currentColor or Color3.fromRGB(80, 80, 80), Transparency = Toggle.Value and 0.5 or 0.7}):Play()
TweenService:Create(ToggleBox.Ico, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {ImageTransparency = Toggle.Value and 0 or 1, Size = Toggle.Value and UDim2.new(0, 20, 0, 20) or UDim2.new(0, 8, 0, 8)}):Play()
ToggleConfig.Callback(Toggle.Value)
end
-- Aplicar estado inicial do toggle
task.spawn(function()
Toggle:Set(Toggle.Value)
end)
AddConnection(Click.MouseEnter, function()
TweenService:Create(ToggleFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
end)
AddConnection(Click.MouseLeave, function()
TweenService:Create(ToggleFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme].Second}):Play()
end)
AddConnection(Click.Activated, function()
TweenService:Create(ToggleFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
SaveCfg(game.GameId)
Toggle:Set(not Toggle.Value)
end)
AddConnection(Click.MouseButton1Down, function()
TweenService:Create(ToggleFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 6)}):Play()
end)
if ToggleConfig.Flag then
OrionLib.Flags[ToggleConfig.Flag] = Toggle
end
return Toggle
end
function ElementFunction:AddSlider(SliderConfig)
SliderConfig = SliderConfig or {}
SliderConfig.Name = SliderConfig.Name or "Slider"
SliderConfig.Min = SliderConfig.Min or 0
SliderConfig.Max = SliderConfig.Max or 100
SliderConfig.Increment = SliderConfig.Increment or 1
SliderConfig.Default = SliderConfig.Default or 50
SliderConfig.Callback = SliderConfig.Callback or function() end
SliderConfig.ValueName = SliderConfig.ValueName or ""
SliderConfig.Color = SliderConfig.Color or OrionLib.Themes[OrionLib.SelectedTheme].Stroke
SliderConfig.Flag = SliderConfig.Flag or nil
SliderConfig.Save = SliderConfig.Save or false
local Slider = {Value = SliderConfig.Default, Save = SliderConfig.Save}
local Dragging = false
local SliderDrag = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", SliderConfig.Color, 0, 5), {
Size = UDim2.new(0, 0, 1, 0),
BackgroundTransparency = 0.3,
ClipsDescendants = true
}), {
AddThemeObject(SetProps(MakeElement("Label", "value", 13), {
Size = UDim2.new(1, -12, 0, 14),
Position = UDim2.new(0, 12, 0, 6),
Font = Enum.Font.GothamBold,
Name = "Value",
TextTransparency = 0
}), "Text")
}), "Stroke")
local SliderBar = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", SliderConfig.Color, 0, 5), {
Size = UDim2.new(1, -24, 0, 26),
Position = UDim2.new(0, 12, 0, 30),
BackgroundTransparency = 0.9
}), {
AddThemeObject(SetProps(MakeElement("Stroke"), {
Color = SliderConfig.Color
}), "Stroke"),
AddThemeObject(SetProps(MakeElement("Label", "value", 13), {
Size = UDim2.new(1, -12, 0, 14),
Position = UDim2.new(0, 12, 0, 6),
Font = Enum.Font.GothamBold,
Name = "Value",
TextTransparency = 0.8
}), "Text"),
SliderDrag
}), "Stroke")
local SliderFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 4), {
Size = UDim2.new(1, 0, 0, 65),
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Label", SliderConfig.Name, 15), {
Size = UDim2.new(1, -12, 0, 14),
Position = UDim2.new(0, 12, 0, 10),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
SliderBar
}), "Second")
local Dragging, DragInput, MousePos, FramePos = false
AddConnection(SliderBar.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
MousePos = Input.Position
FramePos = SliderBar.Position
AddConnection(Input.Changed, function()
if Input.UserInputState == Enum.UserInputState.End then
Dragging = false
FocusDrag = nil
end
end)
end
end)
AddConnection(SliderBar.InputChanged, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch and not FocusDrag then
DragInput = Input
FocusDrag = DragInput
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if Input == DragInput and Input == FocusDrag and Dragging then
local SizeScale = math.clamp((Input.Position.X - SliderBar.AbsolutePosition.X) / SliderBar.AbsoluteSize.X, 0, 1)
Slider:Set(SliderConfig.Min + ((SliderConfig.Max - SliderConfig.Min) * SizeScale))
SaveCfg(game.GameId)
end
end)
function Slider:Set(Value)
self.Value = math.clamp(Round(Value, SliderConfig.Increment), SliderConfig.Min, SliderConfig.Max)
TweenService:Create(SliderDrag,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Size = UDim2.fromScale((self.Value - SliderConfig.Min) / (SliderConfig.Max - SliderConfig.Min), 1)}):Play()
SliderBar.Value.Text = tostring(self.Value) .. " " .. SliderConfig.ValueName
SliderDrag.Value.Text = tostring(self.Value) .. " " .. SliderConfig.ValueName
SliderConfig.Callback(self.Value)
end
Slider:Set(Slider.Value)
if SliderConfig.Flag then
OrionLib.Flags[SliderConfig.Flag] = Slider
end
return Slider
end
function ElementFunction:AddMultipleDropdown(DropdownConfig)
DropdownConfig = DropdownConfig or {}
DropdownConfig.Name = DropdownConfig.Name or "Dropdown"
DropdownConfig.Options = DropdownConfig.Options or {}
DropdownConfig.Default = DropdownConfig.Default or ""
DropdownConfig.Callback = DropdownConfig.Callback or function() end
DropdownConfig.Flag = DropdownConfig.Flag or nil
DropdownConfig.Save = DropdownConfig.Save or false
local Dropdown = {Value = DropdownConfig.Default, Options = DropdownConfig.Options, Buttons = {}, Toggled = false, Type = "Dropdown", Save = DropdownConfig.Save}
local MaxElements = 5
if not table.find(Dropdown.Options, Dropdown.Value) then
Dropdown.Value = "..."
end
local SelectedValues = {}
local DropdownList = MakeElement("List")
local DropdownContainer = AddThemeObject(SetProps(SetChildren(MakeElement("ScrollFrame", Color3.fromRGB(40, 40, 40), 4), {
DropdownList
}), {
Parent = ItemParent,
Position = UDim2.new(0, 0, 0, 38),
Size = UDim2.new(1, 0, 1, -38),
ClipsDescendants = true
}), "Divider")
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local DropdownFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent,
ClipsDescendants = true
}), {
DropdownContainer,
SetProps(SetChildren(MakeElement("TFrame"), {
AddThemeObject(SetProps(MakeElement("Label", DropdownConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://7072706796"), {
Size = UDim2.new(0, 20, 0, 20),
AnchorPoint = Vector2.new(0, 0.5),
Position = UDim2.new(1, -30, 0.5, 0),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Ico"
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Label", "Selected", 13), {
Size = UDim2.new(1, -40, 1, 0),
Font = Enum.Font.Gotham,
Name = "Selected",
TextXAlignment = Enum.TextXAlignment.Right
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1),
Name = "Line",
Visible = false
}), "Stroke"),
Click
}), {
Size = UDim2.new(1, 0, 0, 38),
ClipsDescendants = true,
Name = "F"
}),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
MakeElement("Corner")
}), "Second")
AddConnection(DropdownList:GetPropertyChangedSignal("AbsoluteContentSize"), function()
DropdownContainer.CanvasSize = UDim2.new(0, 0, 0, DropdownList.AbsoluteContentSize.Y)
end)
local function AddOptions(Options)
for _, Option in pairs(Options) do
local OptionBtn = AddThemeObject(SetProps(SetChildren(MakeElement("Button", Color3.fromRGB(40, 40, 40)), {
MakeElement("Corner", 0, 6),
AddThemeObject(SetProps(MakeElement("Label", Option, 13, 0.4), {
Position = UDim2.new(0, 8, 0, 0),
Size = UDim2.new(1, -8, 1, 0),
Name = "Title"
}), "Text")
}), {
Parent = DropdownContainer,
Size = UDim2.new(1, 0, 0, 28),
BackgroundTransparency = 1,
ClipsDescendants = true
}), "Divider")
AddConnection(OptionBtn.MouseButton1Click, function()
Dropdown:Set(Option)
SaveCfg(game.GameId)
end)
Dropdown.Buttons[Option] = OptionBtn
end
end
function Dropdown:Refresh(Options, Delete)
if Delete then
for _,v in pairs(Dropdown.Buttons) do
v:Destroy()
end
table.clear(Dropdown.Options)
table.clear(Dropdown.Buttons)
end
Dropdown.Options = Options
AddOptions(Dropdown.Options)
end
function Dropdown:Set(Value)
local n = table.find(SelectedValues, Value)
local text = ""
if not n then
print("Adicionado")
table.insert(SelectedValues, Value)
DropdownFrame.F.Selected.Text = Dropdown.Value
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 0}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0}):Play()
else
print("Removido")
table.remove(SelectedValues, n)
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 1}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0.4}):Play()
end
for i, v in pairs(SelectedValues) do
if #SelectedValues == i then
text = text .. v
else
text = text .. v .. ", "
end
end
Dropdown.Value = Value
DropdownFrame.F.Selected.Text = text
return DropdownConfig.Callback(SelectedValues)
end
AddConnection(Click.MouseButton1Click, function()
Dropdown.Toggled = not Dropdown.Toggled
DropdownFrame.F.Line.Visible = Dropdown.Toggled
TweenService:Create(DropdownFrame.F.Ico,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Rotation = Dropdown.Toggled and 180 or 0}):Play()
if #Dropdown.Options > MaxElements then
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Size = Dropdown.Toggled and UDim2.new(1, 0, 0, 38 + (MaxElements * 28)) or UDim2.new(1, 0, 0, 38)}):Play()
else
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Size = Dropdown.Toggled and UDim2.new(1, 0, 0, DropdownList.AbsoluteContentSize.Y + 38) or UDim2.new(1, 0, 0, 38)}):Play()
end
end)
Dropdown:Refresh(Dropdown.Options, false)
Dropdown:Set(Dropdown.Value)
if DropdownConfig.Flag then
OrionLib.Flags[DropdownConfig.Flag] = Dropdown
end
return Dropdown
end
function ElementFunction:AddPlayersDropdown(DropdownConfig)
DropdownConfig = DropdownConfig or {}
DropdownConfig.Name = DropdownConfig.Name or "Dropdown"
DropdownConfig.Options = DropdownConfig.Options or {}
DropdownConfig.RemoveDp = DropdownConfig.RemoveDP or false
DropdownConfig.Default = DropdownConfig.Default or ""
DropdownConfig.Callback = DropdownConfig.Callback or function() end
DropdownConfig.Flag = DropdownConfig.Flag or nil
DropdownConfig.MultipleSelection = DropdownConfig.MultipleSelection or false
DropdownConfig.Save = DropdownConfig.Save or false
local Dropdown = {Value = DropdownConfig.Default, Options = DropdownConfig.Options, Buttons = {}, Toggled = false, Type = "Dropdown", Save = DropdownConfig.Save, MultipleSelection = DropdownConfig.MultipleSelection}
local MaxElements = 3
if not table.find(Dropdown.Options, Dropdown.Value) then
Dropdown.Value = "..."
end
local SelectedValues = {}
local Options = 0
local DropdownList = MakeElement("List")
local DropdownContainer = AddThemeObject(SetProps(SetChildren(MakeElement("ScrollFrame", Color3.fromRGB(40, 40, 40), 4), {
DropdownList
}), {
Parent = ItemParent,
Position = UDim2.new(0, 0, 0, 38),
Size = UDim2.new(1, 0, 1, -38),
ClipsDescendants = true
}), "Divider")
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local DropdownFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent,
ClipsDescendants = true
}), {
DropdownContainer,
SetProps(SetChildren(MakeElement("TFrame"), {
AddThemeObject(SetProps(MakeElement("Label", DropdownConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://7072706796"), {
Size = UDim2.new(0, 20, 0, 20),
AnchorPoint = Vector2.new(0, 0.5),
Position = UDim2.new(1, -30, 0.5, 0),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Ico"
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Label", "Selected", 13), {
Size = UDim2.new(1, -40, 1, 0),
Font = Enum.Font.Gotham,
Name = "Selected",
TextXAlignment = Enum.TextXAlignment.Right
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1),
Name = "Line",
Visible = false
}), "Stroke"),
Click
}), {
Size = UDim2.new(1, 0, 0, 38),
ClipsDescendants = true,
Name = "F"
}),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
MakeElement("Corner")
}), "Second")
AddConnection(DropdownList:GetPropertyChangedSignal("AbsoluteContentSize"), function()
DropdownContainer.CanvasSize = UDim2.new(0, 0, 0, DropdownList.AbsoluteContentSize.Y)
if Options <= MaxElements then
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = Dropdown.Toggled and UDim2.new(1, 0, 0, 38 + (Options * 45)) or UDim2.new(1, 0, 0, 38)}):Play()
end
end)
local function RemoveOption(Option)
if Dropdown.Buttons[Option] then
local n = table.find(SelectedValues, Option)
if n then
Dropdown.Buttons[Option].State.Visible = true
TweenService:Create(Dropdown.Buttons[Option],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundColor3 = Color3.fromRGB(200, 80, 80)}):Play()
else
Dropdown.Buttons[Option]:Destroy()
Dropdown.Buttons[Option] = nil
Options = Options - 1
end
end
end
local function AddOption(Option)
local Player_Name = Option.Name
local Player_Display = Option.DisplayName
local UId = Option.UserId
local Option = Player_Name
if not Dropdown.Buttons[Option] then
local OptionBtn = AddThemeObject(SetProps(SetChildren(MakeElement("Button", Color3.fromRGB(40, 40, 40)), {
MakeElement("Corner", 0, 6),
SetProps(MakeElement("Image", "https://www.roblox.com/headshot-thumbnail/image?userId=".. UId .."&width=420&height=420&format=png"), {
Size = UDim2.new(0, 40, 0, 40),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.05, 0, 0.5, 0),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Icon"
}),
SetProps(MakeElement("Image", "rbxassetid://118759916599176"), {
Size = UDim2.new(0, 35, 0, 35),
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(0.94, 0, 0.5, 0),
ImageColor3 = Color3.fromRGB(41, 0, 5),
Name = "State",
Visible = false
}),
AddThemeObject(SetProps(MakeElement("Label", "@" .. Option, 13, 0.4), {
Position = UDim2.new(0.135, 0, 0, 7),
Size = UDim2.new(1, -10, 1, 0),
Name = "Title"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", Player_Display, 17, 0.4), {
Position = UDim2.new(0.135, 0, 0, -5),
Size = UDim2.new(1, -8, 1, 0),
Name = "Subtitle"
}), "Text"),
}), {
Parent = DropdownContainer,
Size = UDim2.new(1, 0, 0, 45),
BackgroundTransparency = 1,
ClipsDescendants = true
}), "Divider")
AddConnection(OptionBtn.MouseButton1Click, function()
Dropdown:Set(Option)
SaveCfg(game.GameId)
end)
Dropdown.Buttons[Option] = OptionBtn
Options = Options + 1
else
local n = table.find(SelectedValues, Option)
if n then
Dropdown.Buttons[Option].State.Visible = false
TweenService:Create(Dropdown.Buttons[Option],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme]["Divider"]}):Play()
else
Dropdown.Buttons[Option]:Destroy()
Dropdown.Buttons[Option] = nil
Options = Options - 1
end
end
end
for _, p in pairs(PlayerService:GetPlayers()) do
AddOption(p)
end
PlayerService.PlayerAdded:Connect(function(p)
AddOption(p)
end)
PlayerService.PlayerRemoving:Connect(function(p)
RemoveOption(p.Name)
end)
local function DeleteAllDisconnectedPlayers()
for i, v in pairs(Dropdown.Buttons) do
if v and v:FindFirstChild("State") and v["State"].Visible then
Dropdown.Buttons[i]:Destroy()
Dropdown.Buttons[i] = nil
Options = Options - 1
end
end
end
function Dropdown:Refresh() end
function Dropdown:Set(Value, Once)
local n = table.find(SelectedValues, Value)
local text = ""
local Button = Dropdown.Buttons[Value]
if not Button then
for i = 0, 10 do
if Dropdown.Buttons[Value] then
Button = Dropdown.Buttons[Value]
break
end
wait(0.15)
end
end
if Button then
if Dropdown.MultipleSelection then
if not n then
print("Adicionado")
table.insert(SelectedValues, Value)
DropdownFrame.F.Selected.Text = Dropdown.Value
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 0.5}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0}):Play()
elseif n and not Once then
print("Removido")
table.remove(SelectedValues, n)
if Dropdown.Buttons[Value].State.Visible then
Dropdown.Buttons[Value]:Destroy()
Dropdown.Buttons[Value] = nil
Options = Options - 1
else
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 1}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0.4}):Play()
end
end
for i, v in pairs(SelectedValues) do
if #SelectedValues == 1 then
text = text .. v
elseif i > 3 then
text = text .. "..."
break
else
text = text .. v .. ", "
end
end
Dropdown.Value = Value
DropdownFrame.F.Selected.Text = text
return DropdownConfig.Callback(SelectedValues)
else
table.clear(SelectedValues); table.insert(SelectedValues, Value)
DeleteAllDisconnectedPlayers()
for _, v in pairs(Dropdown.Buttons) do
TweenService:Create(v,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 1}):Play()
TweenService:Create(v.Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0.4}):Play()
end
if Dropdown.Buttons[Value] then
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 0.5}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0}):Play()
Dropdown.Value = Value
DropdownFrame.F.Selected.Text = Dropdown.Value
else
Dropdown.Value = nil
DropdownFrame.F.Selected.Text = ""
end
return DropdownConfig.Callback(Dropdown.Value)
end
end
end
AddConnection(Click.MouseButton1Click, function()
Dropdown.Toggled = not Dropdown.Toggled
DropdownFrame.F.Line.Visible = Dropdown.Toggled
TweenService:Create(DropdownFrame.F.Ico,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Rotation = Dropdown.Toggled and 180 or 0}):Play()
if Options > MaxElements then
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = Dropdown.Toggled and UDim2.new(1, 0, 0, 38 + (MaxElements * 45)) or UDim2.new(1, 0, 0, 38)}):Play()
else
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = Dropdown.Toggled and UDim2.new(1, 0, 0, 38 + (Options * 45)) or UDim2.new(1, 0, 0, 38)}):Play()
end
end)
if DropdownConfig.Flag then
OrionLib.Flags[DropdownConfig.Flag] = Dropdown
end
return Dropdown
end
function ElementFunction:AddDropdown(DropdownConfig)
DropdownConfig = DropdownConfig or {}
DropdownConfig.Name = DropdownConfig.Name or "Dropdown"
DropdownConfig.Options = DropdownConfig.Options or {}
DropdownConfig.Default = DropdownConfig.Default or ""
DropdownConfig.Callback = DropdownConfig.Callback or function() end
DropdownConfig.Flag = DropdownConfig.Flag or nil
DropdownConfig.Save = DropdownConfig.Save or false
local Dropdown = {Value = DropdownConfig.Default, Options = DropdownConfig.Options, Buttons = {}, Toggled = false, Type = "Dropdown", Save = DropdownConfig.Save}
local MaxElements = 5
if not table.find(Dropdown.Options, Dropdown.Value) then
Dropdown.Value = "..."
end
local DropdownList = MakeElement("List")
local DropdownContainer = AddThemeObject(SetProps(SetChildren(MakeElement("ScrollFrame", Color3.fromRGB(40, 40, 40), 4), {
DropdownList
}), {
Parent = ItemParent,
Position = UDim2.new(0, 0, 0, 38),
Size = UDim2.new(1, 0, 1, -38),
ClipsDescendants = true
}), "Divider")
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local DropdownFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent,
ClipsDescendants = true
}), {
DropdownContainer,
SetProps(SetChildren(MakeElement("TFrame"), {
AddThemeObject(SetProps(MakeElement("Label", DropdownConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://7072706796"), {
Size = UDim2.new(0, 20, 0, 20),
AnchorPoint = Vector2.new(0, 0.5),
Position = UDim2.new(1, -30, 0.5, 0),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Ico"
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Label", "Selected", 13), {
Size = UDim2.new(1, -40, 1, 0),
Font = Enum.Font.Gotham,
Name = "Selected",
TextXAlignment = Enum.TextXAlignment.Right
}), "TextDark"),
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1),
Name = "Line",
Visible = false
}), "Stroke"),
Click
}), {
Size = UDim2.new(1, 0, 0, 38),
ClipsDescendants = true,
Name = "F"
}),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
MakeElement("Corner")
}), "Second")
AddConnection(DropdownList:GetPropertyChangedSignal("AbsoluteContentSize"), function()
DropdownContainer.CanvasSize = UDim2.new(0, 0, 0, DropdownList.AbsoluteContentSize.Y)
end)
local function AddOptions(Options)
for _, Option in pairs(Options) do
local OptionBtn = AddThemeObject(SetProps(SetChildren(MakeElement("Button", Color3.fromRGB(40, 40, 40)), {
MakeElement("Corner", 0, 6),
AddThemeObject(SetProps(MakeElement("Label", Option, 13, 0.4), {
Position = UDim2.new(0, 8, 0, 0),
Size = UDim2.new(1, -8, 1, 0),
Name = "Title"
}), "Text")
}), {
Parent = DropdownContainer,
Size = UDim2.new(1, 0, 0, 28),
BackgroundTransparency = 1,
ClipsDescendants = true
}), "Divider")
AddConnection(OptionBtn.MouseButton1Click, function()
Dropdown:Set(Option)
SaveCfg(game.GameId)
end)
Dropdown.Buttons[Option] = OptionBtn
end
end
function Dropdown:Refresh(Options, Delete)
if Delete then
for _,v in pairs(Dropdown.Buttons) do
v:Destroy()
end
table.clear(Dropdown.Options)
table.clear(Dropdown.Buttons)
end
Dropdown.Options = Options
AddOptions(Dropdown.Options)
end
function Dropdown:Set(Value)
if not table.find(Dropdown.Options, Value) then
Dropdown.Value = "..."
DropdownFrame.F.Selected.Text = Dropdown.Value
for _, v in pairs(Dropdown.Buttons) do
TweenService:Create(v,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 1}):Play()
TweenService:Create(v.Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0.4}):Play()
end
return
end
Dropdown.Value = Value
DropdownFrame.F.Selected.Text = Dropdown.Value
for _, v in pairs(Dropdown.Buttons) do
TweenService:Create(v,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 1}):Play()
TweenService:Create(v.Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0.4}):Play()
end
TweenService:Create(Dropdown.Buttons[Value],TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{BackgroundTransparency = 0}):Play()
TweenService:Create(Dropdown.Buttons[Value].Title,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{TextTransparency = 0}):Play()
return DropdownConfig.Callback(Dropdown.Value)
end
AddConnection(Click.MouseButton1Click, function()
Dropdown.Toggled = not Dropdown.Toggled
DropdownFrame.F.Line.Visible = Dropdown.Toggled
TweenService:Create(DropdownFrame.F.Ico,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Rotation = Dropdown.Toggled and 180 or 0}):Play()
if #Dropdown.Options > MaxElements then
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Size = Dropdown.Toggled and UDim2.new(1, 0, 0, 38 + (MaxElements * 28)) or UDim2.new(1, 0, 0, 38)}):Play()
else
TweenService:Create(DropdownFrame,TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),{Size = Dropdown.Toggled and UDim2.new(1, 0, 0, DropdownList.AbsoluteContentSize.Y + 38) or UDim2.new(1, 0, 0, 38)}):Play()
end
end)
Dropdown:Refresh(Dropdown.Options, false)
Dropdown:Set(Dropdown.Value)
if DropdownConfig.Flag then
OrionLib.Flags[DropdownConfig.Flag] = Dropdown
end
return Dropdown
end
function ElementFunction:AddPlayerDropdown(Config)
Config = Config or {}
Config.Name = Config.Name or "PlayerDropdown"
Config.Default = Config.Default or nil
Config.Callback = Config.Callback or function() end
Config.Flag = Config.Flag or nil
Config.Save = Config.Save or false
local Dropdown = {
Value = Config.Default,
Buttons = {},
SelectedPlayers = {},
Toggled = false,
Type = "PlayerDropdown",
Save = Config.Save,
}
local MaxElements = 5
local ButtonColor = Color3.fromRGB(35, 0, 60)
local SelectedColor = Color3.fromRGB(55, 0, 95)
local DropdownList = MakeElement("List")
local DropdownContainer = AddThemeObject(
SetProps(
SetChildren(
MakeElement("ScrollFrame", Color3.fromRGB(40, 40, 40), 4),
{ DropdownList }
),
{
Parent = ItemParent,
Position = UDim2.new(0, 0, 0, 38),
Size = UDim2.new(1, 0, 1, -38),
ClipsDescendants = true,
}
),
"Divider"
)
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0),
BackgroundTransparency = 1,
AutoButtonColor = false,
Name = "ClickRegion",
})
local DropdownFrame = AddThemeObject(
SetChildren(
SetProps(
MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5),
{ Size = UDim2.new(1, 0, 0, 38), Parent = ItemParent, ClipsDescendants = true }
),
{
DropdownContainer,
SetProps(
SetChildren(MakeElement("TFrame"), {
AddThemeObject(
SetProps(MakeElement("Label", Config.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content",
}),
"Text"
),
AddThemeObject(
SetProps(MakeElement("Image", "rbxassetid://7072706796"), {
Size = UDim2.new(0, 20, 0, 20),
AnchorPoint = Vector2.new(0, 0.5),
Position = UDim2.new(1, -30, 0.5, 0),
ImageColor3 = Color3.fromRGB(240, 240, 240),
Name = "Ico",
}),
"TextDark"
),
AddThemeObject(
SetProps(MakeElement("Label", "Selecione", 13), {
Size = UDim2.new(1, -40, 1, 0),
Font = Enum.Font.Gotham,
Name = "Selected",
TextXAlignment = Enum.TextXAlignment.Right,
}),
"TextDark"
),
SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1),
Name = "Line",
Visible = false,
}),
Click,
}),
{
Size = UDim2.new(1, 0, 0, 38),
ClipsDescendants = true,
Name = "F",
}
),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
MakeElement("Corner"),
}
),
"Second"
)
AddConnection(DropdownList:GetPropertyChangedSignal("AbsoluteContentSize"), function()
DropdownContainer.CanvasSize = UDim2.new(0, 0, 0, DropdownList.AbsoluteContentSize.Y)
end)
AddConnection(Click.MouseButton1Click, function()
Dropdown.Toggled = not Dropdown.Toggled
DropdownFrame.F.Line.Visible = Dropdown.Toggled
TweenService:Create(
DropdownFrame.F.Ico,
TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{ Rotation = Dropdown.Toggled and 180 or 0 }
):Play()
local targetHeight = 38
if Dropdown.Toggled then
local listHeight = math.min(DropdownList.AbsoluteContentSize.Y, MaxElements * 40)
targetHeight = 38 + listHeight
end
TweenService:Create(
DropdownFrame,
TweenInfo.new(.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
{ Size = UDim2.new(1, 0, 0, targetHeight) }
):Play()
end)
local function AddOptions(playerList)
for _, player in ipairs(playerList) do
local OptionBtn = SetProps(
MakeElement("Button"),
{
Parent = DropdownContainer,
Size = UDim2.new(1, 0, 0, 40),
BackgroundColor3 = ButtonColor,
BackgroundTransparency = 0,
AutoButtonColor = false,
ClipsDescendants = true,
}
)
AddThemeObject(SetProps(Instance.new("UIStroke"), {
Parent = OptionBtn,
ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
Color = Color3.fromRGB(20, 20, 20),
Thickness = 1,
Transparency = 0.2,
}), "Divider")
MakeElement("Corner", 0, 6).Parent = OptionBtn
local thumbUrl = string.format(
"https://www.roblox.com/headshot-thumbnail/image?userId=%d&width=420&height=420&format=png",
player.UserId
)
SetProps(MakeElement("Image", thumbUrl), {
Parent = OptionBtn,
Size = UDim2.new(0, 30, 0, 30),
Position = UDim2.new(0, 5, 0, 5),
BackgroundTransparency = 1,
Name = "Thumb",
})
AddThemeObject(
SetProps(MakeElement("Label", player.DisplayName, 14), {
Parent = OptionBtn,
Position = UDim2.new(0, 42, 0, 5),
Size = UDim2.new(0.6, -10, 0, 18),
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Left,
Name = "DisplayName",
}),
"Text"
)
AddThemeObject(
SetProps(MakeElement("Label", player.Name, 12), {
Parent = OptionBtn,
Position = UDim2.new(0, 42, 0, 22),
Size = UDim2.new(0.6, -10, 0, 18),
Font = Enum.Font.Gotham,
TextXAlignment = Enum.TextXAlignment.Left,
Name = "UserName",
}),
"TextDark"
)
AddConnection(OptionBtn.MouseButton1Click, function()
if Dropdown.SelectedPlayers[player] then
Dropdown.SelectedPlayers[player] = nil
else
Dropdown.SelectedPlayers[player] = true
end
Dropdown:Set()
if Config.Save then SaveCfg(game.GameId) end
end)
Dropdown.Buttons[player] = OptionBtn
end
end
function Dropdown:Refresh(list, clear)
if clear then
for _, btn in pairs(self.Buttons) do btn:Destroy() end
table.clear(self.Buttons)
end
AddOptions(list)
end
function Dropdown:Set()
local selectedUsernames = {}
for p in pairs(self.SelectedPlayers) do
if PlayerService:FindFirstChild(p.Name) then
table.insert(selectedUsernames, p.Name)
else
self.SelectedPlayers[p] = nil
end
end
-- Atualiza texto do dropdown com os nomes selecionados
if #selectedUsernames > 0 then
DropdownFrame.F.Selected.Text = table.concat(selectedUsernames, ", ")
else
DropdownFrame.F.Selected.Text = "Selecione"
end
-- Atualiza as cores dos botões
for p, btn in pairs(self.Buttons) do
btn.BackgroundColor3 = self.SelectedPlayers[p] and SelectedColor or ButtonColor
end
return Config.Callback(selectedUsernames)
end
local function updateList()
local allPlayers = PlayerService:GetPlayers()
local filtered = {}
for _, p in ipairs(allPlayers) do
if p ~= PlayerService.LocalPlayer then
table.insert(filtered, p)
end
end
Dropdown:Refresh(filtered, true)
Dropdown:Set() -- Atualiza interface após recarregar
end
PlayerService.PlayerAdded:Connect(updateList)
PlayerService.PlayerRemoving:Connect(updateList)
updateList()
if Config.Flag then OrionLib.Flags[Config.Flag] = Dropdown end
return Dropdown
end
function ElementFunction:AddBind(BindConfig)
BindConfig.Name = BindConfig.Name or "Bind"
BindConfig.Default = BindConfig.Default or Enum.KeyCode.Unknown
BindConfig.Hold = BindConfig.Hold or false
BindConfig.Callback = BindConfig.Callback or function() end
BindConfig.Flag = BindConfig.Flag or nil
BindConfig.Save = BindConfig.Save or false
local Bind = {Value, Binding = false, Type = "Bind", Save = BindConfig.Save}
local Holding = false
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local BindBox = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 4), {
Size = UDim2.new(0, 24, 0, 24),
Position = UDim2.new(1, -12, 0.5, 0),
AnchorPoint = Vector2.new(1, 0.5)
}), {
AddThemeObject(MakeElement("Stroke"), "Stroke"),
AddThemeObject(SetProps(MakeElement("Label", BindConfig.Name, 14), {
Size = UDim2.new(1, 0, 1, 0),
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Center,
Name = "Value"
}), "Text")
}), "Main")
local BindFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Label", BindConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
BindBox,
Click
}), "Second")
AddConnection(BindBox.Value:GetPropertyChangedSignal("Text"), function()
--BindBox.Size = UDim2.new(0, BindBox.Value.TextBounds.X + 16, 0, 24)
TweenService:Create(BindBox, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.new(0, BindBox.Value.TextBounds.X + 16, 0, 24)}):Play()
end)
AddConnection(Click.InputEnded, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if Bind.Binding then return end
Bind.Binding = true
BindBox.Value.Text = ""
end
end)
AddConnection(UserInputService.InputBegan, function(Input)
if UserInputService:GetFocusedTextBox() then return end
if (Input.KeyCode.Name == Bind.Value or Input.UserInputType.Name == Bind.Value) and not Bind.Binding then
if BindConfig.Hold then
Holding = true
BindConfig.Callback(Holding)
else
BindConfig.Callback()
end
elseif Bind.Binding then
local Key
pcall(function()
if not CheckKey(BlacklistedKeys, Input.KeyCode) then
Key = Input.KeyCode
end
end)
pcall(function()
if CheckKey(WhitelistedMouse, Input.UserInputType) and not Key then
Key = Input.UserInputType
end
end)
Key = Key or Bind.Value
Bind:Set(Key)
SaveCfg(game.GameId)
end
end)
AddConnection(UserInputService.InputEnded, function(Input)
if Input.KeyCode.Name == Bind.Value or Input.UserInputType.Name == Bind.Value then
if BindConfig.Hold and Holding then
Holding = false
BindConfig.Callback(Holding)
end
end
end)
AddConnection(Click.MouseEnter, function()
TweenService:Create(BindFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
end)
AddConnection(Click.MouseLeave, function()
TweenService:Create(BindFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme].Second}):Play()
end)
AddConnection(Click.MouseButton1Up, function()
TweenService:Create(BindFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
end)
AddConnection(Click.MouseButton1Down, function()
TweenService:Create(BindFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 6)}):Play()
end)
function Bind:Set(Key)
Bind.Binding = false
Bind.Value = Key or Bind.Value
Bind.Value = Bind.Value.Name or Bind.Value
BindBox.Value.Text = Bind.Value
end
Bind:Set(BindConfig.Default)
if BindConfig.Flag then
OrionLib.Flags[BindConfig.Flag] = Bind
end
return Bind
end
function ElementFunction:AddTextbox(TextboxConfig)
TextboxConfig = TextboxConfig or {}
TextboxConfig.Name = TextboxConfig.Name or "Textbox"
TextboxConfig.Default = TextboxConfig.Default or ""
TextboxConfig.TextDisappear = TextboxConfig.TextDisappear or false
TextboxConfig.Callback = TextboxConfig.Callback or function() end
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
local TextboxActual = AddThemeObject(Create("TextBox", {
Size = UDim2.new(1, 0, 1, 0),
BackgroundTransparency = 1,
TextColor3 = Color3.fromRGB(255, 255, 255),
PlaceholderColor3 = Color3.fromRGB(210,210,210),
PlaceholderText = "Input",
Font = Enum.Font.GothamSemibold,
TextXAlignment = Enum.TextXAlignment.Center,
TextSize = 14,
ClearTextOnFocus = false
}), "Text")
local TextContainer = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 4), {
Size = UDim2.new(0, 24, 0, 24),
Position = UDim2.new(1, -12, 0.5, 0),
AnchorPoint = Vector2.new(1, 0.5)
}), {
AddThemeObject(MakeElement("Stroke"), "Stroke"),
TextboxActual
}), "Main")
local TextboxFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Label", TextboxConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
AddThemeObject(MakeElement("Stroke"), "Stroke"),
TextContainer,
Click
}), "Second")
AddConnection(TextboxActual:GetPropertyChangedSignal("Text"), function()
--TextContainer.Size = UDim2.new(0, TextboxActual.TextBounds.X + 16, 0, 24)
TweenService:Create(TextContainer, TweenInfo.new(0.45, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {Size = UDim2.new(0, TextboxActual.TextBounds.X + 16, 0, 24)}):Play()
end)
AddConnection(TextboxActual.FocusLost, function()
TextboxConfig.Callback(TextboxActual.Text)
if TextboxConfig.TextDisappear then
TextboxActual.Text = ""
end
end)
TextboxActual.Text = TextboxConfig.Default
AddConnection(Click.MouseEnter, function()
TweenService:Create(TextboxFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
end)
AddConnection(Click.MouseLeave, function()
TweenService:Create(TextboxFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = OrionLib.Themes[OrionLib.SelectedTheme].Second}):Play()
end)
AddConnection(Click.MouseButton1Up, function()
TweenService:Create(TextboxFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 3, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 3)}):Play()
TextboxActual:CaptureFocus()
end)
AddConnection(Click.MouseButton1Down, function()
TweenService:Create(TextboxFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(OrionLib.Themes[OrionLib.SelectedTheme].Second.R * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.G * 255 + 6, OrionLib.Themes[OrionLib.SelectedTheme].Second.B * 255 + 6)}):Play()
end)
end
function ElementFunction:AddColorpicker(ColorpickerConfig)
ColorpickerConfig = ColorpickerConfig or {}
ColorpickerConfig.Name = ColorpickerConfig.Name or "Colorpicker"
ColorpickerConfig.Default = ColorpickerConfig.Default or Color3.fromRGB(255,255,255)
ColorpickerConfig.Callback = ColorpickerConfig.Callback or function() end
ColorpickerConfig.Flag = ColorpickerConfig.Flag or nil
ColorpickerConfig.Save = ColorpickerConfig.Save or false
-- Inicializar HSV com a cor padrão
local H, S, V = Color3.toHSV(ColorpickerConfig.Default)
local ColorH, ColorS, ColorV = H, S, V
local Colorpicker = {Value = ColorpickerConfig.Default, Toggled = false, Type = "Colorpicker", Save = ColorpickerConfig.Save}
local ColorSelection = Create("ImageLabel", {
Size = UDim2.new(0, 18, 0, 18),
Position = UDim2.new(S, 0, 1 - V, 0),
ScaleType = Enum.ScaleType.Fit,
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
Image = "http://www.roblox.com/asset/?id=4805639000"
})
local HueSelection = Create("ImageLabel", {
Size = UDim2.new(0, 18, 0, 18),
Position = UDim2.new(0.5, 0, 1 - H, 0),
ScaleType = Enum.ScaleType.Fit,
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
Image = "http://www.roblox.com/asset/?id=4805639000"
})
local Color = Create("ImageLabel", {
Size = UDim2.new(1, -25, 1, 0),
Visible = false,
Image = "rbxassetid://4155801252"
}, {
Create("UICorner", {CornerRadius = UDim.new(0, 5)}),
ColorSelection
})
local Hue = Create("Frame", {
Size = UDim2.new(0, 20, 1, 0),
Position = UDim2.new(1, -20, 0, 0),
Visible = false
}, {
Create("UIGradient", {Rotation = 270, Color = ColorSequence.new{ColorSequenceKeypoint.new(0.00, Color3.fromRGB(255, 0, 4)), ColorSequenceKeypoint.new(0.20, Color3.fromRGB(234, 255, 0)), ColorSequenceKeypoint.new(0.40, Color3.fromRGB(21, 255, 0)), ColorSequenceKeypoint.new(0.60, Color3.fromRGB(0, 255, 255)), ColorSequenceKeypoint.new(0.80, Color3.fromRGB(0, 17, 255)), ColorSequenceKeypoint.new(0.90, Color3.fromRGB(255, 0, 251)), ColorSequenceKeypoint.new(1.00, Color3.fromRGB(255, 0, 4))},}),
Create("UICorner", {CornerRadius = UDim.new(0, 5)}),
HueSelection
})
local ColorpickerContainer = Create("Frame", {
Position = UDim2.new(0, 0, 0, 32),
Size = UDim2.new(1, 0, 1, -32),
BackgroundTransparency = 1,
ClipsDescendants = true
}, {
Hue,
Color,
Create("UIPadding", {
PaddingLeft = UDim.new(0, 35),
PaddingRight = UDim.new(0, 35),
PaddingBottom = UDim.new(0, 10),
PaddingTop = UDim.new(0, 17)
})
})
local Click = SetProps(MakeElement("Button"), {
Size = UDim2.new(1, 0, 1, 0)
})
-- COLORPICKER BOX MELHORADO )
local ColorpickerBox = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 8), {
Size = UDim2.new(0, 28, 0, 28),
Position = UDim2.new(1, -16, 0.5, 0),
AnchorPoint = Vector2.new(1, 0.5)
}), {
AddThemeObject(SetProps(MakeElement("Stroke"), {
Thickness = 2.5,
Transparency = 0.3
}), "Stroke"),
-- Glow effect
Create("ImageLabel", {
Size = UDim2.new(1, 20, 1, 20),
Position = UDim2.new(0.5, 0, 0.5, 0),
AnchorPoint = Vector2.new(0.5, 0.5),
BackgroundTransparency = 1,
Image = "rbxassetid://5028857084",
ImageColor3 = Color3.fromRGB(255, 255, 255),
ImageTransparency = 0.7,
ZIndex = 0
})
}), "Main")
local ColorpickerFrame = AddThemeObject(SetChildren(SetProps(MakeElement("RoundFrame", Color3.fromRGB(255, 255, 255), 0, 5), {
Size = UDim2.new(1, 0, 0, 38),
Parent = ItemParent
}), {
SetProps(SetChildren(MakeElement("TFrame"), {
AddThemeObject(SetProps(MakeElement("Label", ColorpickerConfig.Name, 15), {
Size = UDim2.new(1, -12, 1, 0),
Position = UDim2.new(0, 12, 0, 0),
Font = Enum.Font.GothamBold,
Name = "Content"
}), "Text"),
ColorpickerBox,
Click,
AddThemeObject(SetProps(MakeElement("Frame"), {
Size = UDim2.new(1, 0, 0, 1),
Position = UDim2.new(0, 0, 1, -1),
Name = "Line",
Visible = false
}), "Stroke"),
}), {
Size = UDim2.new(1, 0, 0, 38),
ClipsDescendants = true,
Name = "F"
}),
ColorpickerContainer,
AddThemeObject(MakeElement("Stroke"), "Stroke"),
}), "Second")
-- COLORPICKER ANIMATION
local isAnimating = false
AddConnection(Click.MouseButton1Click, function()
if isAnimating then return end
isAnimating = true
Colorpicker.Toggled = not Colorpicker.Toggled
if Colorpicker.Toggled then
-- Open
Color.Visible = true
Hue.Visible = true
ColorpickerFrame.F.Line.Visible = true
TweenService:Create(ColorpickerFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Size = UDim2.new(1, 0, 0, 160)
}):Play()
TweenService:Create(Color, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {ImageTransparency = 0}):Play()
TweenService:Create(Hue, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {BackgroundTransparency = 0}):Play()
task.wait(0.3)
else
-- Close
TweenService:Create(Color, TweenInfo.new(0.15, Enum.EasingStyle.Quad), {ImageTransparency = 1}):Play()
TweenService:Create(Hue, TweenInfo.new(0.15, Enum.EasingStyle.Quad), {BackgroundTransparency = 1}):Play()
TweenService:Create(ColorpickerFrame, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Size = UDim2.new(1, 0, 0, 38)
}):Play()
task.wait(0.2)
Color.Visible = false
Hue.Visible = false
ColorpickerFrame.F.Line.Visible = false
end
isAnimating = false
end)
local lastUpdateTime = 0
local updateDebounce = 0.05 -- Update max 20 times per second
local function UpdateColorPicker()
local currentTime = tick()
if currentTime - lastUpdateTime < updateDebounce then
return
end
lastUpdateTime = currentTime
local newColor = Color3.fromHSV(ColorH, ColorS, ColorV)
Colorpicker.Value = newColor
ColorpickerBox.BackgroundColor3 = newColor
Color.BackgroundColor3 = Color3.fromHSV(ColorH, 1, 1)
ColorpickerConfig.Callback(newColor)
SaveCfg(game.GameId) -- Debounced automatically by SaveCfg
end
local Dragging, DragInput, MousePos, FramePos = false
AddConnection(Color.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
MousePos = Input.Position
FramePos = ColorSelection.Position
AddConnection(Input.Changed, function()
if Input.UserInputState == Enum.UserInputState.End then
Dragging = false
FocusDrag = nil
end
end)
end
end)
AddConnection(Color.InputChanged, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch and not FocusDrag then
DragInput = Input
FocusDrag = DragInput
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if Input == DragInput and Dragging and Input == FocusDrag then
local ColorX = (math.clamp(DragInput.Position.X - Color.AbsolutePosition.X, 0, Color.AbsoluteSize.X) / Color.AbsoluteSize.X)
local ColorY = (math.clamp(Input.Position.Y - Color.AbsolutePosition.Y, 0, Color.AbsoluteSize.Y) / Color.AbsoluteSize.Y)
ColorSelection.Position = UDim2.new(ColorX, 0, ColorY, 0)
ColorS = ColorX
ColorV = 1 - ColorY
UpdateColorPicker()
end
end)
-- Hue
local Dragging_1, DragInput_1, MousePos_1, FramePos_1 = false
AddConnection(Hue.InputBegan, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 or Input.UserInputType == Enum.UserInputType.Touch then
Dragging_1 = true
MousePos_1 = Input.Position
FramePos_1 = HueSelection.Position
AddConnection(Input.Changed, function()
if Input.UserInputState == Enum.UserInputState.End then
Dragging_1 = false
FocusDrag = nil
end
end)
end
end)
AddConnection(Hue.InputChanged, function(Input)
if Input.UserInputType == Enum.UserInputType.MouseMovement or Input.UserInputType == Enum.UserInputType.Touch and not FocusDrag then
DragInput_1 = Input
FocusDrag = DragInput_1
end
end)
AddConnection(UserInputService.InputChanged, function(Input)
if Input == DragInput_1 and Dragging_1 and DragInput_1 == FocusDrag then
local HueY = (math.clamp(Input.Position.Y - Hue.AbsolutePosition.Y, 0, Hue.AbsoluteSize.Y) / Hue.AbsoluteSize.Y)
HueSelection.Position = UDim2.new(0.5, 0, HueY, 0)
ColorH = 1 - HueY
UpdateColorPicker()
end
end)
function Colorpicker:Set(Value)
Colorpicker.Value = Value
ColorpickerBox.BackgroundColor3 = Colorpicker.Value
-- 🔧 ATUALIZAR POSIÇÃO DAS BOLINHAS (CORRIGIDO)
local H, S, V = Color3.toHSV(Value)
ColorH, ColorS, ColorV = H, S, V
-- Atualizar posição da bolinha de cor
ColorSelection.Position = UDim2.new(S, 0, 1 - V, 0)
-- Atualizar posição da bolinha de matiz
HueSelection.Position = UDim2.new(0.5, 0, 1 - H, 0)
-- Atualizar cor de fundo do seletor
Color.BackgroundColor3 = Color3.fromHSV(H, 1, 1)
ColorpickerConfig.Callback(Colorpicker.Value)
end
-- Inicializar com cor padrão
Colorpicker:Set(ColorpickerConfig.Default)
if ColorpickerConfig.Flag then
OrionLib.Flags[ColorpickerConfig.Flag] = Colorpicker
end
return Colorpicker
end
return ElementFunction
end
local ElementFunction = {}
function ElementFunction:AddSection(SectionConfig)
SectionConfig.Name = SectionConfig.Name or "Section"
local SectionFrame = SetChildren(SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 0, 26),
Parent = Container
}), {
AddThemeObject(SetProps(MakeElement("Label", SectionConfig.Name, 14), {
Size = UDim2.new(1, -12, 0, 16),
Position = UDim2.new(0, 0, 0, 3),
Font = Enum.Font.GothamSemibold
}), "TextDark"),
SetChildren(SetProps(MakeElement("TFrame"), {
AnchorPoint = Vector2.new(0, 0),
Size = UDim2.new(1, 0, 1, -24),
Position = UDim2.new(0, 0, 0, 23),
Name = "Holder"
}), {
MakeElement("List", 0, 6)
}),
})
AddConnection(SectionFrame.Holder.UIListLayout:GetPropertyChangedSignal("AbsoluteContentSize"), function()
SectionFrame.Size = UDim2.new(1, 0, 0, SectionFrame.Holder.UIListLayout.AbsoluteContentSize.Y + 31)
SectionFrame.Holder.Size = UDim2.new(1, 0, 0, SectionFrame.Holder.UIListLayout.AbsoluteContentSize.Y)
end)
local SectionFunction = {}
for i, v in next, GetElements(SectionFrame.Holder) do
SectionFunction[i] = v
end
return SectionFunction
end
for i, v in next, GetElements(Container) do
ElementFunction[i] = v
end
if TabConfig.PremiumOnly then
for i, v in next, ElementFunction do
ElementFunction[i] = function() end
end
Container:FindFirstChild("UIListLayout"):Destroy()
Container:FindFirstChild("UIPadding"):Destroy()
SetChildren(SetProps(MakeElement("TFrame"), {
Size = UDim2.new(1, 0, 1, 0),
Parent = ItemParent
}), {
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://3610239960"), {
Size = UDim2.new(0, 18, 0, 18),
Position = UDim2.new(0, 15, 0, 15),
ImageTransparency = 0.4
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", "Unauthorised Access", 14), {
Size = UDim2.new(1, -38, 0, 14),
Position = UDim2.new(0, 38, 0, 18),
TextTransparency = 0.4
}), "Text"),
AddThemeObject(SetProps(MakeElement("Image", "rbxassetid://4483345875"), {
Size = UDim2.new(0, 56, 0, 56),
Position = UDim2.new(0, 84, 0, 110),
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", "Premium Features", 14), {
Size = UDim2.new(1, -150, 0, 14),
Position = UDim2.new(0, 150, 0, 112),
Font = Enum.Font.GothamBold
}), "Text"),
AddThemeObject(SetProps(MakeElement("Label", "This part of the script is locked to Sirius Premium users. Purchase Premium in the Discord server (discord.gg/sirius)", 12), {
Size = UDim2.new(1, -200, 0, 14),
Position = UDim2.new(0, 150, 0, 138),
TextWrapped = true,
TextTransparency = 0.4
}), "Text")
})
end
return ElementFunction
end
return TabFunction
end
return OrionLib



ew
@bliz_t did ts nga just say ew to a script🤞💔
OP THANKS BRO
sooo oppppp omg