-- venyx ui lib reuploaded by me -- init local player = game.Players.LocalPlayer local mouse = player:GetMouse() -- services local input = game:GetService("UserInputService") local run = game:GetService("RunService") local tween = game:GetService("TweenService") local tweeninfo = TweenInfo.new -- additional local utility = {} -- themes local objects = {} local themes = { Background = Color3.fromRGB(24, 24, 24), Glow = Color3.fromRGB(0, 0, 0), Accent = Color3.fromRGB(10, 10, 10), LightContrast = Color3.fromRGB(20, 20, 20), DarkContrast = Color3.fromRGB(14, 14, 14), TextColor = Color3.fromRGB(255, 255, 255) } do function utility:Create(instance, properties, children) local object = Instance.new(instance) for i, v in pairs(properties or {}) do object[i] = v if typeof(v) == "Color3" then -- save for theme changer later local theme = utility:Find(themes, v) if theme then objects[theme] = objects[theme] or {} objects[theme][i] = objects[theme][i] or setmetatable({}, {_mode = "k"}) table.insert(objects[theme][i], object) end end end for i, module in pairs(children or {}) do module.Parent = object end return object end function utility:Tween(instance, properties, duration, ...) tween:Create(instance, tweeninfo(duration, ...), properties):Play() end function utility:Wait() run.RenderStepped:Wait() return true end function utility:Find(table, value) -- table.find doesn't work for dictionaries for i, v in pairs(table) do if v == value then return i end end end function utility:Sort(pattern, values) local new = {} pattern = pattern:lower() if pattern == "" then return values end for i, value in pairs(values) do if tostring(value):lower():find(pattern) then table.insert(new, value) end end return new end function utility:Pop(object, shrink) local clone = object:Clone() clone.AnchorPoint = Vector2.new(0.5, 0.5) clone.Size = clone.Size - UDim2.new(0, shrink, 0, shrink) clone.Position = UDim2.new(0.5, 0, 0.5, 0) clone.Parent = object clone:ClearAllChildren() object.ImageTransparency = 1 utility:Tween(clone, {Size = object.Size}, 0.2) spawn(function() wait(0.2) object.ImageTransparency = 0 clone:Destroy() end) return clone end function utility:InitializeKeybind() self.keybinds = {} self.ended = {} input.InputBegan:Connect(function(key,proc) if self.keybinds[key.KeyCode] and not proc then for i, bind in pairs(self.keybinds[key.KeyCode]) do bind() end end end) input.InputEnded:Connect(function(key) if key.UserInputType == Enum.UserInputType.MouseButton1 then for i, callback in pairs(self.ended) do callback() end end end) end function utility:BindToKey(key, callback) self.keybinds[key] = self.keybinds[key] or {} table.insert(self.keybinds[key], callback) return { UnBind = function() for i, bind in pairs(self.keybinds[key]) do if bind == callback then table.remove(self.keybinds[key], i) end end end } end function utility:KeyPressed() -- yield until next key is pressed local key = input.InputBegan:Wait() while key.UserInputType ~= Enum.UserInputType.Keyboard do key = input.InputBegan:Wait() end wait() -- overlapping connection return key end function utility:DraggingEnabled(frame, parent) parent = parent or frame -- stolen from wally or kiriot, kek local dragging = false local dragInput, mousePos, framePos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true mousePos = input.Position framePos = parent.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) input.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - mousePos parent.Position = UDim2.new(framePos.X.Scale, framePos.X.Offset + delta.X, framePos.Y.Scale, framePos.Y.Offset + delta.Y) end end) end function utility:DraggingEnded(callback) table.insert(self.ended, callback) end end -- classes local library = {} -- main local page = {} local section = {} do library.__index = library page.__index = page section.__index = section -- new classes function library.new(title) local container = utility:Create("ScreenGui", { Name = title, Parent = game.CoreGui }, { utility:Create("ImageLabel", { Name = "Main", BackgroundTransparency = 1, Position = UDim2.new(0.25, 0, 0.052435593, 0), Size = UDim2.new(0, 511, 0, 428), Image = "rbxassetid://4641149554", ImageColor3 = themes.Background, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(4, 4, 296, 296) }, { utility:Create("ImageLabel", { Name = "Glow", BackgroundTransparency = 1, Position = UDim2.new(0, -15, 0, -15), Size = UDim2.new(1, 30, 1, 30), ZIndex = 0, Image = "rbxassetid://5028857084", ImageColor3 = themes.Glow, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(24, 24, 276, 276) }), utility:Create("ImageLabel", { Name = "Pages", BackgroundTransparency = 1, ClipsDescendants = true, Position = UDim2.new(0, 0, 0, 38), Size = UDim2.new(0, 126, 1, -38), ZIndex = 3, Image = "rbxassetid://5012534273", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(4, 4, 296, 296) }, { utility:Create("ScrollingFrame", { Name = "Pages_Container", Active = true, BackgroundTransparency = 1, Position = UDim2.new(0, 0, 0, 10), Size = UDim2.new(1, 0, 1, -20), CanvasSize = UDim2.new(0, 0, 0, 314), ScrollBarThickness = 0 }, { utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 10) }) }) }), utility:Create("ImageLabel", { Name = "TopBar", BackgroundTransparency = 1, ClipsDescendants = true, Size = UDim2.new(1, 0, 0, 38), ZIndex = 5, Image = "rbxassetid://4595286933", ImageColor3 = themes.Accent, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(4, 4, 296, 296) }, { utility:Create("TextLabel", { -- title Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 12, 0, 19), Size = UDim2.new(1, -46, 0, 16), ZIndex = 5, Font = Enum.Font.GothamBold, Text = title, TextColor3 = themes.TextColor, TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left }) }) }) }) utility:InitializeKeybind() utility:DraggingEnabled(container.Main.TopBar, container.Main) return setmetatable({ container = container, pagesContainer = container.Main.Pages.Pages_Container, pages = {} }, library) end function page.new(library, title, icon) local button = utility:Create("TextButton", { Name = title, Parent = library.pagesContainer, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 26), ZIndex = 3, AutoButtonColor = false, Font = Enum.Font.Gotham, Text = "", TextSize = 14 }, { utility:Create("TextLabel", { Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 40, 0.5, 0), Size = UDim2.new(0, 76, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.65, TextXAlignment = Enum.TextXAlignment.Left }), icon and utility:Create("ImageLabel", { Name = "Icon", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 12, 0.5, 0), Size = UDim2.new(0, 16, 0, 16), ZIndex = 3, Image = "rbxassetid://" .. tostring(icon), ImageColor3 = themes.TextColor, ImageTransparency = 0.64 }) or {} }) local container = utility:Create("ScrollingFrame", { Name = title, Parent = library.container.Main, Active = true, BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0, 134, 0, 46), Size = UDim2.new(1, -142, 1, -56), CanvasSize = UDim2.new(0, 0, 0, 466), ScrollBarThickness = 3, ScrollBarImageColor3 = themes.DarkContrast, Visible = false }, { utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 10) }) }) return setmetatable({ library = library, container = container, button = button, sections = {} }, page) end function section.new(page, title) local container = utility:Create("ImageLabel", { Name = title, Parent = page.container, BackgroundTransparency = 1, Size = UDim2.new(1, -10, 0, 28), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.LightContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(4, 4, 296, 296), ClipsDescendants = true }, { utility:Create("Frame", { Name = "Container", Active = true, BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0, 8, 0, 8), Size = UDim2.new(1, -16, 1, -16) }, { utility:Create("TextLabel", { Name = "Title", BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 20), ZIndex = 2, Font = Enum.Font.GothamSemibold, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, TextTransparency = 1 }), utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 4) }) }) }) return setmetatable({ page = page, container = container.Container, colorpickers = {}, modules = {}, binds = {}, lists = {}, }, section) end function library:addPage(...) local page = page.new(self, ...) local button = page.button table.insert(self.pages, page) button.MouseButton1Click:Connect(function() self:SelectPage(page, true) end) return page end function page:addSection(...) local section = section.new(self, ...) table.insert(self.sections, section) return section end -- functions function library:setTheme(theme, color3) themes[theme] = color3 for property, objects in pairs(objects[theme]) do for i, object in pairs(objects) do if not object.Parent or (object.Name == "Button" and object.Parent.Name == "ColorPicker") then objects[i] = nil -- i can do this because weak tables :D else object[property] = color3 end end end end function library:toggle() if self.toggling then return end self.toggling = true local container = self.container.Main local topbar = container.TopBar if self.position then utility:Tween(container, { Size = UDim2.new(0, 511, 0, 428), Position = self.position }, 0.2) wait(0.2) utility:Tween(topbar, {Size = UDim2.new(1, 0, 0, 38)}, 0.2) wait(0.2) container.ClipsDescendants = false self.position = nil else self.position = container.Position container.ClipsDescendants = true utility:Tween(topbar, {Size = UDim2.new(1, 0, 1, 0)}, 0.2) wait(0.2) utility:Tween(container, { Size = UDim2.new(0, 511, 0, 0), Position = self.position + UDim2.new(0, 0, 0, 428) }, 0.2) wait(0.2) end self.toggling = false end -- new modules function library:Notify(title, text, callback) -- overwrite last notification if self.activeNotification then self.activeNotification = self.activeNotification() end -- standard create local notification = utility:Create("ImageLabel", { Name = "Notification", Parent = self.container, BackgroundTransparency = 1, Size = UDim2.new(0, 200, 0, 60), Image = "rbxassetid://5028857472", ImageColor3 = themes.Background, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(4, 4, 296, 296), ZIndex = 3, ClipsDescendants = true }, { utility:Create("ImageLabel", { Name = "Flash", Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Image = "rbxassetid://4641149554", ImageColor3 = themes.TextColor, ZIndex = 5 }), utility:Create("ImageLabel", { Name = "Glow", BackgroundTransparency = 1, Position = UDim2.new(0, -15, 0, -15), Size = UDim2.new(1, 30, 1, 30), ZIndex = 2, Image = "rbxassetid://5028857084", ImageColor3 = themes.Glow, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(24, 24, 276, 276) }), utility:Create("TextLabel", { Name = "Title", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 8), Size = UDim2.new(1, -40, 0, 16), ZIndex = 4, Font = Enum.Font.GothamSemibold, TextColor3 = themes.TextColor, TextSize = 14.000, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 1, -24), Size = UDim2.new(1, -40, 0, 16), ZIndex = 4, Font = Enum.Font.Gotham, TextColor3 = themes.TextColor, TextSize = 12.000, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageButton", { Name = "Accept", BackgroundTransparency = 1, Position = UDim2.new(1, -26, 0, 8), Size = UDim2.new(0, 16, 0, 16), Image = "rbxassetid://5012538259", ImageColor3 = themes.TextColor, ZIndex = 4 }), utility:Create("ImageButton", { Name = "Decline", BackgroundTransparency = 1, Position = UDim2.new(1, -26, 1, -24), Size = UDim2.new(0, 16, 0, 16), Image = "rbxassetid://5012538583", ImageColor3 = themes.TextColor, ZIndex = 4 }) }) -- dragging utility:DraggingEnabled(notification) -- position and size title = title or "Notification" text = text or "" notification.Title.Text = title notification.Text.Text = text local padding = 10 local textSize = game:GetService("TextService"):GetTextSize(text, 12, Enum.Font.Gotham, Vector2.new(math.huge, 16)) notification.Position = library.lastNotification or UDim2.new(0, padding, 1, -(notification.AbsoluteSize.Y + padding)) notification.Size = UDim2.new(0, 0, 0, 60) utility:Tween(notification, {Size = UDim2.new(0, textSize.X + 70, 0, 60)}, 0.2) wait(0.2) notification.ClipsDescendants = false utility:Tween(notification.Flash, { Size = UDim2.new(0, 0, 0, 60), Position = UDim2.new(1, 0, 0, 0) }, 0.2) -- callbacks local active = true local close = function() if not active then return end active = false notification.ClipsDescendants = true library.lastNotification = notification.Position notification.Flash.Position = UDim2.new(0, 0, 0, 0) utility:Tween(notification.Flash, {Size = UDim2.new(1, 0, 1, 0)}, 0.2) wait(0.2) utility:Tween(notification, { Size = UDim2.new(0, 0, 0, 60), Position = notification.Position + UDim2.new(0, textSize.X + 70, 0, 0) }, 0.2) wait(0.2) notification:Destroy() end self.activeNotification = close notification.Accept.MouseButton1Click:Connect(function() if not active then return end if callback then callback(true) end close() end) notification.Decline.MouseButton1Click:Connect(function() if not active then return end if callback then callback(false) end close() end) end function section:addButton(title, callback) local button = utility:Create("ImageButton", { Name = "Button", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Title", BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012 }) }) table.insert(self.modules, button) --self:Resize() local text = button.Title local debounce button.MouseButton1Click:Connect(function() if debounce then return end -- animation utility:Pop(button, 10) debounce = true text.TextSize = 0 utility:Tween(button.Title, {TextSize = 14}, 0.2) wait(0.2) utility:Tween(button.Title, {TextSize = 12}, 0.2) if callback then callback(function(...) self:updateButton(button, ...) end) end debounce = false end) return button end function section:addToggle(title, default, callback) local toggle = utility:Create("ImageButton", { Name = "Toggle", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) },{ utility:Create("TextLabel", { Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0.5, 1), Size = UDim2.new(0.5, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageLabel", { Name = "Button", BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(1, -50, 0.5, -8), Size = UDim2.new(0, 40, 0, 16), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.LightContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("ImageLabel", { Name = "Frame", BackgroundTransparency = 1, Position = UDim2.new(0, 2, 0.5, -6), Size = UDim2.new(1, -22, 1, -4), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.TextColor, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }) }) }) table.insert(self.modules, toggle) --self:Resize() local active = default self:updateToggle(toggle, nil, active) toggle.MouseButton1Click:Connect(function() active = not active self:updateToggle(toggle, nil, active) if callback then callback(active, function(...) self:updateToggle(toggle, ...) end) end end) return toggle end function section:addTextbox(title, default, callback) local textbox = utility:Create("ImageButton", { Name = "Textbox", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0.5, 1), Size = UDim2.new(0.5, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageLabel", { Name = "Button", BackgroundTransparency = 1, Position = UDim2.new(1, -110, 0.5, -8), Size = UDim2.new(0, 100, 0, 16), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.LightContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextBox", { Name = "Textbox", BackgroundTransparency = 1, TextTruncate = Enum.TextTruncate.AtEnd, Position = UDim2.new(0, 5, 0, 0), Size = UDim2.new(1, -10, 1, 0), ZIndex = 3, Font = Enum.Font.GothamSemibold, Text = default or "", TextColor3 = themes.TextColor, TextSize = 11 }) }) }) table.insert(self.modules, textbox) --self:Resize() local button = textbox.Button local input = button.Textbox textbox.MouseButton1Click:Connect(function() if textbox.Button.Size ~= UDim2.new(0, 100, 0, 16) then return end utility:Tween(textbox.Button, { Size = UDim2.new(0, 200, 0, 16), Position = UDim2.new(1, -210, 0.5, -8) }, 0.2) wait() input.TextXAlignment = Enum.TextXAlignment.Left input:CaptureFocus() end) input:GetPropertyChangedSignal("Text"):Connect(function() if button.ImageTransparency == 0 and (button.Size == UDim2.new(0, 200, 0, 16) or button.Size == UDim2.new(0, 100, 0, 16)) then -- i know, i dont like this either utility:Pop(button, 10) end if callback then callback(input.Text, nil, function(...) self:updateTextbox(textbox, ...) end) end end) input.FocusLost:Connect(function() input.TextXAlignment = Enum.TextXAlignment.Center utility:Tween(textbox.Button, { Size = UDim2.new(0, 100, 0, 16), Position = UDim2.new(1, -110, 0.5, -8) }, 0.2) if callback then callback(input.Text, true, function(...) self:updateTextbox(textbox, ...) end) end end) return textbox end function section:addKeybind(title, default, callback, changedCallback) local keybind = utility:Create("ImageButton", { Name = "Keybind", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0.5, 1), Size = UDim2.new(1, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageLabel", { Name = "Button", BackgroundTransparency = 1, Position = UDim2.new(1, -110, 0.5, -8), Size = UDim2.new(0, 100, 0, 16), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.LightContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, ClipsDescendants = true, Size = UDim2.new(1, 0, 1, 0), ZIndex = 3, Font = Enum.Font.GothamSemibold, Text = default and default.Name or "None", TextColor3 = themes.TextColor, TextSize = 11 }) }) }) table.insert(self.modules, keybind) --self:Resize() local text = keybind.Button.Text local button = keybind.Button local animate = function() if button.ImageTransparency == 0 then utility:Pop(button, 10) end end self.binds[keybind] = {callback = function() animate() if callback then callback(function(...) self:updateKeybind(keybind, ...) end) end end} if default and callback then self:updateKeybind(keybind, nil, default) end keybind.MouseButton1Click:Connect(function() animate() if self.binds[keybind].connection then -- unbind return self:updateKeybind(keybind) end if text.Text == "None" then -- new bind text.Text = "..." local key = utility:KeyPressed() self:updateKeybind(keybind, nil, key.KeyCode) animate() if changedCallback then changedCallback(key, function(...) self:updateKeybind(keybind, ...) end) end end end) return keybind end function section:addColorPicker(title, default, callback) local colorpicker = utility:Create("ImageButton", { Name = "ColorPicker", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) },{ utility:Create("TextLabel", { Name = "Title", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0.5, 1), Size = UDim2.new(0.5, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageButton", { Name = "Button", BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(1, -50, 0.5, -7), Size = UDim2.new(0, 40, 0, 14), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = Color3.fromRGB(255, 255, 255), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }) }) local tab = utility:Create("ImageLabel", { Name = "ColorPicker", Parent = self.page.library.container, BackgroundTransparency = 1, Position = UDim2.new(0.75, 0, 0.400000006, 0), Selectable = true, AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.new(0, 162, 0, 169), Image = "rbxassetid://5028857472", ImageColor3 = themes.Background, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298), Visible = false, }, { utility:Create("ImageLabel", { Name = "Glow", BackgroundTransparency = 1, Position = UDim2.new(0, -15, 0, -15), Size = UDim2.new(1, 30, 1, 30), ZIndex = 0, Image = "rbxassetid://5028857084", ImageColor3 = themes.Glow, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(22, 22, 278, 278) }), utility:Create("TextLabel", { Name = "Title", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 8), Size = UDim2.new(1, -40, 0, 16), ZIndex = 2, Font = Enum.Font.GothamSemibold, Text = title, TextColor3 = themes.TextColor, TextSize = 14, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageButton", { Name = "Close", BackgroundTransparency = 1, Position = UDim2.new(1, -26, 0, 8), Size = UDim2.new(0, 16, 0, 16), ZIndex = 2, Image = "rbxassetid://5012538583", ImageColor3 = themes.TextColor }), utility:Create("Frame", { Name = "Container", BackgroundTransparency = 1, Position = UDim2.new(0, 8, 0, 32), Size = UDim2.new(1, -18, 1, -40) }, { utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 6) }), utility:Create("ImageButton", { Name = "Canvas", BackgroundTransparency = 1, BorderColor3 = themes.LightContrast, Size = UDim2.new(1, 0, 0, 60), AutoButtonColor = false, Image = "rbxassetid://5108535320", ImageColor3 = Color3.fromRGB(255, 0, 0), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("ImageLabel", { Name = "White_Overlay", BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 60), Image = "rbxassetid://5107152351", SliceCenter = Rect.new(2, 2, 298, 298) }), utility:Create("ImageLabel", { Name = "Black_Overlay", BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 60), Image = "rbxassetid://5107152095", SliceCenter = Rect.new(2, 2, 298, 298) }), utility:Create("ImageLabel", { Name = "Cursor", BackgroundColor3 = themes.TextColor, AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1.000, Size = UDim2.new(0, 10, 0, 10), Position = UDim2.new(0, 0, 0, 0), Image = "rbxassetid://5100115962", SliceCenter = Rect.new(2, 2, 298, 298) }) }), utility:Create("ImageButton", { Name = "Color", BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0, 0, 0, 4), Selectable = false, Size = UDim2.new(1, 0, 0, 16), ZIndex = 2, AutoButtonColor = false, Image = "rbxassetid://5028857472", ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("Frame", { Name = "Select", BackgroundColor3 = themes.TextColor, BorderSizePixel = 1, Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(0, 2, 1, 0), ZIndex = 2 }), utility:Create("UIGradient", { -- rainbow canvas Color = ColorSequence.new({ ColorSequenceKeypoint.new(0.00, Color3.fromRGB(255, 0, 0)), ColorSequenceKeypoint.new(0.17, Color3.fromRGB(255, 255, 0)), ColorSequenceKeypoint.new(0.33, Color3.fromRGB(0, 255, 0)), ColorSequenceKeypoint.new(0.50, Color3.fromRGB(0, 255, 255)), ColorSequenceKeypoint.new(0.66, Color3.fromRGB(0, 0, 255)), ColorSequenceKeypoint.new(0.82, Color3.fromRGB(255, 0, 255)), ColorSequenceKeypoint.new(1.00, Color3.fromRGB(255, 0, 0)) }) }) }), utility:Create("Frame", { Name = "Inputs", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 158), Size = UDim2.new(1, 0, 0, 16) }, { utility:Create("UIListLayout", { FillDirection = Enum.FillDirection.Horizontal, SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 6) }), utility:Create("ImageLabel", { Name = "R", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(0.305, 0, 1, 0), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, Size = UDim2.new(0.400000006, 0, 1, 0), ZIndex = 2, Font = Enum.Font.Gotham, Text = "R:", TextColor3 = themes.TextColor, TextSize = 10.000 }), utility:Create("TextBox", { Name = "Textbox", BackgroundTransparency = 1, Position = UDim2.new(0.300000012, 0, 0, 0), Size = UDim2.new(0.600000024, 0, 1, 0), ZIndex = 2, Font = Enum.Font.Gotham, PlaceholderColor3 = themes.DarkContrast, Text = "255", TextColor3 = themes.TextColor, TextSize = 10.000 }) }), utility:Create("ImageLabel", { Name = "G", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(0.305, 0, 1, 0), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, ZIndex = 2, Size = UDim2.new(0.400000006, 0, 1, 0), Font = Enum.Font.Gotham, Text = "G:", TextColor3 = themes.TextColor, TextSize = 10.000 }), utility:Create("TextBox", { Name = "Textbox", BackgroundTransparency = 1, Position = UDim2.new(0.300000012, 0, 0, 0), Size = UDim2.new(0.600000024, 0, 1, 0), ZIndex = 2, Font = Enum.Font.Gotham, Text = "255", TextColor3 = themes.TextColor, TextSize = 10.000 }) }), utility:Create("ImageLabel", { Name = "B", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(0.305, 0, 1, 0), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, Size = UDim2.new(0.400000006, 0, 1, 0), ZIndex = 2, Font = Enum.Font.Gotham, Text = "B:", TextColor3 = themes.TextColor, TextSize = 10.000 }), utility:Create("TextBox", { Name = "Textbox", BackgroundTransparency = 1, Position = UDim2.new(0.300000012, 0, 0, 0), Size = UDim2.new(0.600000024, 0, 1, 0), ZIndex = 2, Font = Enum.Font.Gotham, Text = "255", TextColor3 = themes.TextColor, TextSize = 10.000 }) }), }), utility:Create("ImageButton", { Name = "Button", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 20), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Text", BackgroundTransparency = 1, Size = UDim2.new(1, 0, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = "Submit", TextColor3 = themes.TextColor, TextSize = 11.000 }) }) }) }) utility:DraggingEnabled(tab) table.insert(self.modules, colorpicker) --self:Resize() local allowed = { [""] = true } local canvas = tab.Container.Canvas local color = tab.Container.Color local canvasSize, canvasPosition = canvas.AbsoluteSize, canvas.AbsolutePosition local colorSize, colorPosition = color.AbsoluteSize, color.AbsolutePosition local draggingColor, draggingCanvas local color3 = default or Color3.fromRGB(255, 255, 255) local hue, sat, brightness = 0, 0, 1 local rgb = { r = 255, g = 255, b = 255 } self.colorpickers[colorpicker] = { tab = tab, callback = function(prop, value) rgb[prop] = value hue, sat, brightness = Color3.toHSV(Color3.fromRGB(rgb.r, rgb.g, rgb.b)) end } local callback = function(value) if callback then callback(value, function(...) self:updateColorPicker(colorpicker, ...) end) end end utility:DraggingEnded(function() draggingColor, draggingCanvas = false, false end) if default then self:updateColorPicker(colorpicker, nil, default) hue, sat, brightness = Color3.toHSV(default) default = Color3.fromHSV(hue, sat, brightness) for i, prop in pairs({"r", "g", "b"}) do rgb[prop] = default[prop:upper()] * 255 end end for i, container in pairs(tab.Container.Inputs:GetChildren()) do -- i know what you are about to say, so shut up if container:IsA("ImageLabel") then local textbox = container.Textbox local focused textbox.Focused:Connect(function() focused = true end) textbox.FocusLost:Connect(function() focused = false if not tonumber(textbox.Text) then textbox.Text = math.floor(rgb[container.Name:lower()]) end end) textbox:GetPropertyChangedSignal("Text"):Connect(function() local text = textbox.Text if not allowed[text] and not tonumber(text) then textbox.Text = text:sub(1, #text - 1) elseif focused and not allowed[text] then rgb[container.Name:lower()] = math.clamp(tonumber(textbox.Text), 0, 255) local color3 = Color3.fromRGB(rgb.r, rgb.g, rgb.b) hue, sat, brightness = Color3.toHSV(color3) self:updateColorPicker(colorpicker, nil, color3) callback(color3) end end) end end canvas.MouseButton1Down:Connect(function() draggingCanvas = true while draggingCanvas do local x, y = mouse.X, mouse.Y sat = math.clamp((x - canvasPosition.X) / canvasSize.X, 0, 1) brightness = 1 - math.clamp((y - canvasPosition.Y) / canvasSize.Y, 0, 1) color3 = Color3.fromHSV(hue, sat, brightness) for i, prop in pairs({"r", "g", "b"}) do rgb[prop] = color3[prop:upper()] * 255 end self:updateColorPicker(colorpicker, nil, {hue, sat, brightness}) -- roblox is literally retarded utility:Tween(canvas.Cursor, {Position = UDim2.new(sat, 0, 1 - brightness, 0)}, 0.1) -- overwrite callback(color3) utility:Wait() end end) color.MouseButton1Down:Connect(function() draggingColor = true while draggingColor do hue = 1 - math.clamp(1 - ((mouse.X - colorPosition.X) / colorSize.X), 0, 1) color3 = Color3.fromHSV(hue, sat, brightness) for i, prop in pairs({"r", "g", "b"}) do rgb[prop] = color3[prop:upper()] * 255 end local x = hue -- hue is updated self:updateColorPicker(colorpicker, nil, {hue, sat, brightness}) -- roblox is literally retarded utility:Tween(tab.Container.Color.Select, {Position = UDim2.new(x, 0, 0, 0)}, 0.1) -- overwrite callback(color3) utility:Wait() end end) -- click events local button = colorpicker.Button local toggle, debounce, animate lastColor = Color3.fromHSV(hue, sat, brightness) animate = function(visible, overwrite) if overwrite then if not toggle then return end if debounce then while debounce do utility:Wait() end end elseif not overwrite then if debounce then return end if button.ImageTransparency == 0 then utility:Pop(button, 10) end end toggle = visible debounce = true if visible then if self.page.library.activePicker and self.page.library.activePicker ~= animate then self.page.library.activePicker(nil, true) end self.page.library.activePicker = animate lastColor = Color3.fromHSV(hue, sat, brightness) local x1, x2 = button.AbsoluteSize.X / 2, 162--tab.AbsoluteSize.X local px, py = button.AbsolutePosition.X, button.AbsolutePosition.Y tab.ClipsDescendants = true tab.Visible = true tab.Size = UDim2.new(0, 0, 0, 0) tab.Position = UDim2.new(0, x1 + x2 + px, 0, py) utility:Tween(tab, {Size = UDim2.new(0, 162, 0, 169)}, 0.2) -- update size and position wait(0.2) tab.ClipsDescendants = false canvasSize, canvasPosition = canvas.AbsoluteSize, canvas.AbsolutePosition colorSize, colorPosition = color.AbsoluteSize, color.AbsolutePosition else utility:Tween(tab, {Size = UDim2.new(0, 0, 0, 0)}, 0.2) tab.ClipsDescendants = true wait(0.2) tab.Visible = false end debounce = false end local toggleTab = function() animate(not toggle) end button.MouseButton1Click:Connect(toggleTab) colorpicker.MouseButton1Click:Connect(toggleTab) tab.Container.Button.MouseButton1Click:Connect(function() animate() end) tab.Close.MouseButton1Click:Connect(function() self:updateColorPicker(colorpicker, nil, lastColor) animate() end) return colorpicker end function section:addSlider(title, default, min, max, callback) local slider = utility:Create("ImageButton", { Name = "Slider", Parent = self.container, BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0.292817682, 0, 0.299145311, 0), Size = UDim2.new(1, 0, 0, 50), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { Name = "Title", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 6), Size = UDim2.new(0.5, 0, 0, 16), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("TextBox", { Name = "TextBox", BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(1, -30, 0, 6), Size = UDim2.new(0, 20, 0, 16), ZIndex = 3, Font = Enum.Font.GothamSemibold, Text = default or min, TextColor3 = themes.TextColor, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Right }), utility:Create("TextLabel", { Name = "Slider", BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 28), Size = UDim2.new(1, -20, 0, 16), ZIndex = 3, Text = "", }, { utility:Create("ImageLabel", { Name = "Bar", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, Position = UDim2.new(0, 0, 0.5, 0), Size = UDim2.new(1, 0, 0, 4), ZIndex = 3, Image = "rbxassetid://5028857472", ImageColor3 = themes.LightContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("ImageLabel", { Name = "Fill", BackgroundTransparency = 1, Size = UDim2.new(0.8, 0, 1, 0), ZIndex = 3, Image = "rbxassetid://5028857472", ImageColor3 = themes.TextColor, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("ImageLabel", { Name = "Circle", AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, ImageTransparency = 1.000, ImageColor3 = themes.TextColor, Position = UDim2.new(1, 0, 0.5, 0), Size = UDim2.new(0, 10, 0, 10), ZIndex = 3, Image = "rbxassetid://4608020054" }) }) }) }) }) table.insert(self.modules, slider) --self:Resize() local allowed = { [""] = true, ["-"] = true } local textbox = slider.TextBox local circle = slider.Slider.Bar.Fill.Circle local value = default or min local dragging, last local callback = function(value) if callback then callback(value, function(...) self:updateSlider(slider, ...) end) end end self:updateSlider(slider, nil, value, min, max) utility:DraggingEnded(function() dragging = false end) slider.MouseButton1Down:Connect(function(input) dragging = true while dragging do utility:Tween(circle, {ImageTransparency = 0}, 0.1) value = self:updateSlider(slider, nil, nil, min, max, value) callback(value) utility:Wait() end wait(0.5) utility:Tween(circle, {ImageTransparency = 1}, 0.2) end) textbox.FocusLost:Connect(function() if not tonumber(textbox.Text) then value = self:updateSlider(slider, nil, default or min, min, max) callback(value) end end) textbox:GetPropertyChangedSignal("Text"):Connect(function() local text = textbox.Text if not allowed[text] and not tonumber(text) then textbox.Text = text:sub(1, #text - 1) elseif not allowed[text] then value = self:updateSlider(slider, nil, tonumber(text) or value, min, max) callback(value) end end) return slider end function section:addDropdown(title, list, callback) local dropdown = utility:Create("Frame", { Name = "Dropdown", Parent = self.container, BackgroundTransparency = 1, Size = UDim2.new(1, 0, 0, 30), ClipsDescendants = true }, { utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 4) }), utility:Create("ImageLabel", { Name = "Search", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextBox", { Name = "TextBox", AnchorPoint = Vector2.new(0, 0.5), BackgroundTransparency = 1, TextTruncate = Enum.TextTruncate.AtEnd, Position = UDim2.new(0, 10, 0.5, 1), Size = UDim2.new(1, -42, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = title, TextColor3 = themes.TextColor, TextSize = 12, TextTransparency = 0.10000000149012, TextXAlignment = Enum.TextXAlignment.Left }), utility:Create("ImageButton", { Name = "Button", BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(1, -28, 0.5, -9), Size = UDim2.new(0, 18, 0, 18), ZIndex = 3, Image = "rbxassetid://5012539403", ImageColor3 = themes.TextColor, SliceCenter = Rect.new(2, 2, 298, 298) }) }), utility:Create("ImageLabel", { Name = "List", BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 1, -34), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.Background, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("ScrollingFrame", { Name = "Frame", Active = true, BackgroundTransparency = 1, BorderSizePixel = 0, Position = UDim2.new(0, 4, 0, 4), Size = UDim2.new(1, -8, 1, -8), CanvasPosition = Vector2.new(0, 28), CanvasSize = UDim2.new(0, 0, 0, 120), ZIndex = 2, ScrollBarThickness = 3, ScrollBarImageColor3 = themes.DarkContrast }, { utility:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Padding = UDim.new(0, 4) }) }) }) }) table.insert(self.modules, dropdown) --self:Resize() local search = dropdown.Search local focused list = list or {} search.Button.MouseButton1Click:Connect(function() if search.Button.Rotation == 0 then self:updateDropdown(dropdown, nil, list, callback) else self:updateDropdown(dropdown, nil, nil, callback) end end) search.TextBox.Focused:Connect(function() if search.Button.Rotation == 0 then self:updateDropdown(dropdown, nil, list, callback) end focused = true end) search.TextBox.FocusLost:Connect(function() focused = false end) search.TextBox:GetPropertyChangedSignal("Text"):Connect(function() if focused then local list = utility:Sort(search.TextBox.Text, list) list = #list ~= 0 and list self:updateDropdown(dropdown, nil, list, callback) end end) dropdown:GetPropertyChangedSignal("Size"):Connect(function() self:Resize() end) return dropdown end -- class functions function library:SelectPage(page, toggle) if toggle and self.focusedPage == page then -- already selected return end local button = page.button if toggle then -- page button button.Title.TextTransparency = 0 button.Title.Font = Enum.Font.GothamSemibold if button:FindFirstChild("Icon") then button.Icon.ImageTransparency = 0 end -- update selected page local focusedPage = self.focusedPage self.focusedPage = page if focusedPage then self:SelectPage(focusedPage) end -- sections local existingSections = focusedPage and #focusedPage.sections or 0 local sectionsRequired = #page.sections - existingSections page:Resize() for i, section in pairs(page.sections) do section.container.Parent.ImageTransparency = 0 end if sectionsRequired < 0 then -- "hides" some sections for i = existingSections, #page.sections + 1, -1 do local section = focusedPage.sections[i].container.Parent utility:Tween(section, {ImageTransparency = 1}, 0.1) end end wait(0.1) page.container.Visible = true if focusedPage then focusedPage.container.Visible = false end if sectionsRequired > 0 then -- "creates" more section for i = existingSections + 1, #page.sections do local section = page.sections[i].container.Parent section.ImageTransparency = 1 utility:Tween(section, {ImageTransparency = 0}, 0.05) end end wait(0.05) for i, section in pairs(page.sections) do utility:Tween(section.container.Title, {TextTransparency = 0}, 0.1) section:Resize(true) wait(0.05) end wait(0.05) page:Resize(true) else -- page button button.Title.Font = Enum.Font.Gotham button.Title.TextTransparency = 0.65 if button:FindFirstChild("Icon") then button.Icon.ImageTransparency = 0.65 end -- sections for i, section in pairs(page.sections) do utility:Tween(section.container.Parent, {Size = UDim2.new(1, -10, 0, 28)}, 0.1) utility:Tween(section.container.Title, {TextTransparency = 1}, 0.1) end wait(0.1) page.lastPosition = page.container.CanvasPosition.Y page:Resize() end end function page:Resize(scroll) local padding = 10 local size = 0 for i, section in pairs(self.sections) do size = size + section.container.Parent.AbsoluteSize.Y + padding end self.container.CanvasSize = UDim2.new(0, 0, 0, size) self.container.ScrollBarImageTransparency = size > self.container.AbsoluteSize.Y if scroll then utility:Tween(self.container, {CanvasPosition = Vector2.new(0, self.lastPosition or 0)}, 0.2) end end function section:Resize(smooth) if self.page.library.focusedPage ~= self.page then return end local padding = 4 local size = (4 * padding) + self.container.Title.AbsoluteSize.Y -- offset for i, module in pairs(self.modules) do size = size + module.AbsoluteSize.Y + padding end if smooth then utility:Tween(self.container.Parent, {Size = UDim2.new(1, -10, 0, size)}, 0.05) else self.container.Parent.Size = UDim2.new(1, -10, 0, size) self.page:Resize() end end function section:getModule(info) if table.find(self.modules, info) then return info end for i, module in pairs(self.modules) do if (module:FindFirstChild("Title") or module:FindFirstChild("TextBox", true)).Text == info then return module end end error("No module found under "..tostring(info)) end -- updates function section:updateButton(button, title) button = self:getModule(button) button.Title.Text = title end function section:updateToggle(toggle, title, value) toggle = self:getModule(toggle) local position = { In = UDim2.new(0, 2, 0.5, -6), Out = UDim2.new(0, 20, 0.5, -6) } local frame = toggle.Button.Frame value = value and "Out" or "In" if title then toggle.Title.Text = title end utility:Tween(frame, { Size = UDim2.new(1, -22, 1, -9), Position = position[value] + UDim2.new(0, 0, 0, 2.5) }, 0.2) wait(0.1) utility:Tween(frame, { Size = UDim2.new(1, -22, 1, -4), Position = position[value] }, 0.1) end function section:updateTextbox(textbox, title, value) textbox = self:getModule(textbox) if title then textbox.Title.Text = title end if value then textbox.Button.Textbox.Text = value end end function section:updateKeybind(keybind, title, key) keybind = self:getModule(keybind) local text = keybind.Button.Text local bind = self.binds[keybind] if title then keybind.Title.Text = title end if bind.connection then bind.connection = bind.connection:UnBind() end if key then self.binds[keybind].connection = utility:BindToKey(key, bind.callback) text.Text = key.Name else text.Text = "None" end end function section:updateColorPicker(colorpicker, title, color) colorpicker = self:getModule(colorpicker) local picker = self.colorpickers[colorpicker] local tab = picker.tab local callback = picker.callback if title then colorpicker.Title.Text = title tab.Title.Text = title end local color3 local hue, sat, brightness if type(color) == "table" then -- roblox is literally retarded x2 hue, sat, brightness = unpack(color) color3 = Color3.fromHSV(hue, sat, brightness) else color3 = color hue, sat, brightness = Color3.toHSV(color3) end utility:Tween(colorpicker.Button, {ImageColor3 = color3}, 0.5) utility:Tween(tab.Container.Color.Select, {Position = UDim2.new(hue, 0, 0, 0)}, 0.1) utility:Tween(tab.Container.Canvas, {ImageColor3 = Color3.fromHSV(hue, 1, 1)}, 0.5) utility:Tween(tab.Container.Canvas.Cursor, {Position = UDim2.new(sat, 0, 1 - brightness)}, 0.5) for i, container in pairs(tab.Container.Inputs:GetChildren()) do if container:IsA("ImageLabel") then local value = math.clamp(color3[container.Name], 0, 1) * 255 container.Textbox.Text = math.floor(value) --callback(container.Name:lower(), value) end end end function section:updateSlider(slider, title, value, min, max, lvalue) slider = self:getModule(slider) if title then slider.Title.Text = title end local bar = slider.Slider.Bar local percent = (mouse.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X if value then -- support negative ranges percent = (value - min) / (max - min) end percent = math.clamp(percent, 0, 1) value = value or math.floor(min + (max - min) * percent) slider.TextBox.Text = value utility:Tween(bar.Fill, {Size = UDim2.new(percent, 0, 1, 0)}, 0.1) if value ~= lvalue and slider.ImageTransparency == 0 then utility:Pop(slider, 10) end return value end function section:updateDropdown(dropdown, title, list, callback) dropdown = self:getModule(dropdown) if title then dropdown.Search.TextBox.Text = title end local entries = 0 utility:Pop(dropdown.Search, 10) for i, button in pairs(dropdown.List.Frame:GetChildren()) do if button:IsA("ImageButton") then button:Destroy() end end for i, value in pairs(list or {}) do local button = utility:Create("ImageButton", { Parent = dropdown.List.Frame, BackgroundTransparency = 1, BorderSizePixel = 0, Size = UDim2.new(1, 0, 0, 30), ZIndex = 2, Image = "rbxassetid://5028857472", ImageColor3 = themes.DarkContrast, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(2, 2, 298, 298) }, { utility:Create("TextLabel", { BackgroundTransparency = 1, Position = UDim2.new(0, 10, 0, 0), Size = UDim2.new(1, -10, 1, 0), ZIndex = 3, Font = Enum.Font.Gotham, Text = value, TextColor3 = themes.TextColor, TextSize = 12, TextXAlignment = "Left", TextTransparency = 0.10000000149012 }) }) button.MouseButton1Click:Connect(function() if callback then callback(value, function(...) self:updateDropdown(dropdown, ...) end) end self:updateDropdown(dropdown, value, nil, callback) end) entries = entries + 1 end local frame = dropdown.List.Frame utility:Tween(dropdown, {Size = UDim2.new(1, 0, 0, (entries == 0 and 30) or math.clamp(entries, 0, 3) * 34 + 38)}, 0.3) utility:Tween(dropdown.Search.Button, {Rotation = list and 180 or 0}, 0.3) if entries > 3 then for i, button in pairs(dropdown.List.Frame:GetChildren()) do if button:IsA("ImageButton") then button.Size = UDim2.new(1, -6, 0, 30) end end frame.CanvasSize = UDim2.new(0, 0, 0, (entries * 34) - 4) frame.ScrollBarImageTransparency = 0 else frame.CanvasSize = UDim2.new(0, 0, 0, 0) frame.ScrollBarImageTransparency = 1 end end end return library
Write, Run & Share Lua code online using OneCompiler's Lua online compiler for free. It's one of the robust, feature-rich online compilers for Lua language, running the latest Lua version 5.4. Getting started with the OneCompiler's Lua editor is easy and fast. The editor shows sample boilerplate code when you choose language as Lua and start coding.
OneCompiler's Lua online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample Lua program which takes name as input and prints hello message with your name.
name = io.read("*a")
print ("Hello ", name)
Lua is a light weight embeddable scripting language which is built on top of C. It is used in almost all kind of applications like games, web applications, mobile applications, image processing etc. It's a very powerful, fast, easy to learn, open-source scripting language.
-- global variables
a = 10
-- local variables
local x = 30
Value Type | Description |
---|---|
number | Represents numbers |
string | Represents text |
nil | Differentiates values whether it has data or not |
boolean | Value can be either true or false |
function | Represents a sub-routine |
userdata | Represents arbitary C data |
thread | Represents independent threads of execution. |
table | Can hold any value except nil |
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition)
do
--code
end
Repeat-Until is also used to iterate a set of statements based on a condition. It is very similar to Do-While, it is mostly used when you need to execute the statements atleast once.
repeat
--code
until( condition )
For loop is used to iterate a set of statements based on a condition.
for init,max/min value, increment
do
--code
end
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increase re-usuability and modularity.
optional_function_scope function function_name( argument1, argument2, argument3........, argumentn)
--code
return params with comma seperated
end