local library = {flags = {}, windows = {}, open = true} --Services local runService = game:GetService"RunService" local tweenService = game:GetService"TweenService" local textService = game:GetService"TextService" local inputService = game:GetService"UserInputService" --Locals local dragging, dragInput, dragStart, startPos, dragObject local blacklistedKeys = { --add or remove keys if you find the need to Enum.KeyCode.Unknown,Enum.KeyCode.W,Enum.KeyCode.A,Enum.KeyCode.S,Enum.KeyCode.D,Enum.KeyCode.Slash,Enum.KeyCode.Tab,Enum.KeyCode.Backspace,Enum.KeyCode.Escape } local whitelistedMouseinputs = { --add or remove mouse inputs if you find the need to Enum.UserInputType.MouseButton1,Enum.UserInputType.MouseButton2,Enum.UserInputType.MouseButton3 } --Functions local function round(num, bracket) bracket = bracket or 1 local a = math.floor(num/bracket + (math.sign(num) * 0.5)) * bracket if a < 0 then a = a + bracket end return a end local function keyCheck(x,x1) for _,v in next, x1 do if v == x then return true end end end local function update(input) local delta = input.Position - dragStart local yPos = (startPos.Y.Offset + delta.Y) < -36 and -36 or startPos.Y.Offset + delta.Y dragObject:TweenPosition(UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, yPos), "Out", "Quint", 0.1, true) end --From: https://devforum.roblox.com/t/how-to-create-a-simple-rainbow-effect-using-tweenService/221849/2 local chromaColor local rainbowTime = 5 spawn(function() while wait() do chromaColor = Color3.fromHSV(tick() % rainbowTime / rainbowTime, 1, 1) end end) function library:Create(class, properties) properties = typeof(properties) == "table" and properties or {} local inst = Instance.new(class) for property, value in next, properties do inst[property] = value end return inst end local function createOptionHolder(holderTitle, parent, parentTable, subHolder) local size = subHolder and 34 or 40 parentTable.main = library:Create("ImageButton", { LayoutOrder = subHolder and parentTable.position or 0, Position = UDim2.new(0, 20 + (250 * (parentTable.position or 0)), 0, 20), Size = UDim2.new(0, 230, 0, size), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.04, ClipsDescendants = true, Parent = parent }) local round if not subHolder then round = library:Create("ImageLabel", { Size = UDim2.new(1, 0, 0, size), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = parentTable.open and (subHolder and Color3.fromRGB(16, 16, 16) or Color3.fromRGB(10, 10, 10)) or (subHolder and Color3.fromRGB(10, 10, 10) or Color3.fromRGB(6, 6, 6)), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.04, Parent = parentTable.main }) end local title = library:Create("TextLabel", { Size = UDim2.new(1, 0, 0, size), BackgroundTransparency = subHolder and 0 or 1, BackgroundColor3 = Color3.fromRGB(10, 10, 10), BorderSizePixel = 0, Text = holderTitle, TextSize = subHolder and 16 or 17, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = parentTable.main }) local closeHolder = library:Create("Frame", { Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(-1, 0, 1, 0), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Parent = title }) local close = library:Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, 0), Size = UDim2.new(1, -size - 10, 1, -size - 10), Rotation = parentTable.open and 90 or 180, BackgroundTransparency = 1, Image = "rbxassetid://4918373417", ImageColor3 = parentTable.open and Color3.fromRGB(50, 50, 50) or Color3.fromRGB(30, 30, 30), ScaleType = Enum.ScaleType.Fit, Parent = closeHolder }) parentTable.content = library:Create("Frame", { Position = UDim2.new(0, 0, 0, size), Size = UDim2.new(1, 0, 1, -size), BackgroundTransparency = 1, Parent = parentTable.main }) local layout = library:Create("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, Parent = parentTable.content }) layout.Changed:connect(function() parentTable.content.Size = UDim2.new(1, 0, 0, layout.AbsoluteContentSize.Y) parentTable.main.Size = #parentTable.options > 0 and parentTable.open and UDim2.new(0, 230, 0, layout.AbsoluteContentSize.Y + size) or UDim2.new(0, 230, 0, size) end) if not subHolder then library:Create("UIPadding", { Parent = parentTable.content }) title.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragObject = parentTable.main dragging = true dragStart = input.Position startPos = dragObject.Position end end) title.InputChanged:connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) title.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) end closeHolder.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then parentTable.open = not parentTable.open tweenService:Create(close, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Rotation = parentTable.open and 90 or 180, ImageColor3 = parentTable.open and Color3.fromRGB(50, 50, 50) or Color3.fromRGB(30, 30, 30)}):Play() if subHolder then tweenService:Create(title, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = parentTable.open and Color3.fromRGB(16, 16, 16) or Color3.fromRGB(10, 10, 10)}):Play() else tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = parentTable.open and Color3.fromRGB(10, 10, 10) or Color3.fromRGB(6, 6, 6)}):Play() end parentTable.main:TweenSize(#parentTable.options > 0 and parentTable.open and UDim2.new(0, 230, 0, layout.AbsoluteContentSize.Y + size) or UDim2.new(0, 230, 0, size), "Out", "Quad", 0.2, true) end end) function parentTable:SetTitle(newTitle) title.Text = tostring(newTitle) end return parentTable end local function createLabel(option, parent) local main = library:Create("TextLabel", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 26), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = parent.content }) setmetatable(option, {__newindex = function(t, i, v) if i == "Text" then main.Text = " " .. tostring(v) end end}) end function createToggle(option, parent) local main = library:Create("TextLabel", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 31), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = parent.content }) local tickboxOutline = library:Create("ImageLabel", { Position = UDim2.new(1, -6, 0, 4), Size = UDim2.new(-1, 10, 1, -10), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = option.state and Color3.fromRGB(255, 65, 65) or Color3.fromRGB(100, 100, 100), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local tickboxInner = library:Create("ImageLabel", { Position = UDim2.new(0, 2, 0, 2), Size = UDim2.new(1, -4, 1, -4), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = option.state and Color3.fromRGB(255, 65, 65) or Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = tickboxOutline }) local checkmarkHolder = library:Create("Frame", { Position = UDim2.new(0, 4, 0, 4), Size = option.state and UDim2.new(1, -8, 1, -8) or UDim2.new(0, 0, 1, -8), BackgroundTransparency = 1, ClipsDescendants = true, Parent = tickboxOutline }) local checkmark = library:Create("ImageLabel", { Size = UDim2.new(1, 0, 1, 0), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Image = "rbxassetid://4919148038", ImageColor3 = Color3.fromRGB(20, 20, 20), Parent = checkmarkHolder }) local inContact main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then option:SetState(not option.state) end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not option.state then tweenService:Create(tickboxOutline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(140, 140, 140)}):Play() end end end) main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not option.state then tweenService:Create(tickboxOutline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() end end end) function option:SetState(state) library.flags[self.flag] = state self.state = state checkmarkHolder:TweenSize(option.state and UDim2.new(1, -8, 1, -8) or UDim2.new(0, 0, 1, -8), "Out", "Quad", 0.2, true) tweenService:Create(tickboxInner, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = state and Color3.fromRGB(255, 65, 65) or Color3.fromRGB(20, 20, 20)}):Play() if state then tweenService:Create(tickboxOutline, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() else if inContact then tweenService:Create(tickboxOutline, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(140, 140, 140)}):Play() else tweenService:Create(tickboxOutline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() end end self.callback(state) end if option.state then delay(1, function() option.callback(true) end) end setmetatable(option, {__newindex = function(t, i, v) if i == "Text" then main.Text = " " .. tostring(v) end end}) end function createButton(option, parent) local main = library:Create("TextLabel", { ZIndex = 2, LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 34), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = parent.content }) local round = library:Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(0.5, 0, 0.5, 0), Size = UDim2.new(1, -12, 1, -10), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(40, 40, 40), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local inContact local clicking main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then library.flags[option.flag] = true clicking = true tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() option.callback() end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end) main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then clicking = false if inContact then tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() else tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(40, 40, 40)}):Play() end end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false if not clicking then tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(40, 40, 40)}):Play() end end end) end local function createBind(option, parent) local binding local holding local loop local text = string.match(option.key, "Mouse") and string.sub(option.key, 1, 5) .. string.sub(option.key, 12, 13) or option.key local main = library:Create("TextLabel", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 33), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = parent.content }) local round = library:Create("ImageLabel", { Position = UDim2.new(1, -6, 0, 4), Size = UDim2.new(0, -textService:GetTextSize(text, 16, Enum.Font.Gotham, Vector2.new(9e9, 9e9)).X - 16, 1, -10), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(40, 40, 40), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local bindinput = library:Create("TextLabel", { Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = text, TextSize = 16, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = round }) local inContact main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not binding then tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end end) main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then binding = true bindinput.Text = "..." tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false if not binding then tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(40, 40, 40)}):Play() end end end) inputService.InputBegan:connect(function(input) if inputService:GetFocusedTextBox() then return end if (input.KeyCode.Name == option.key or input.UserInputType.Name == option.key) and not binding then if option.hold then loop = runService.Heartbeat:connect(function() if binding then option.callback(true) loop:Disconnect() loop = nil else option.callback() end end) else option.callback() end elseif binding then local key pcall(function() if not keyCheck(input.KeyCode, blacklistedKeys) then key = input.KeyCode end end) pcall(function() if keyCheck(input.UserInputType, whitelistedMouseinputs) and not key then key = input.UserInputType end end) key = key or option.key option:SetKey(key) end end) inputService.InputEnded:connect(function(input) if input.KeyCode.Name == option.key or input.UserInputType.Name == option.key or input.UserInputType.Name == "MouseMovement" then if loop then loop:Disconnect() loop = nil option.callback(true) end end end) function option:SetKey(key) binding = false if loop then loop:Disconnect() loop = nil end self.key = key or self.key self.key = self.key.Name or self.key library.flags[self.flag] = self.key if string.match(self.key, "Mouse") then bindinput.Text = string.sub(self.key, 1, 5) .. string.sub(self.key, 12, 13) else bindinput.Text = self.key end tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = inContact and Color3.fromRGB(60, 60, 60) or Color3.fromRGB(40, 40, 40)}):Play() round.Size = UDim2.new(0, -textService:GetTextSize(bindinput.Text, 15, Enum.Font.Gotham, Vector2.new(9e9, 9e9)).X - 16, 1, -10) end end local function createSlider(option, parent) local main = library:Create("Frame", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 50), BackgroundTransparency = 1, Parent = parent.content }) local title = library:Create("TextLabel", { Position = UDim2.new(0, 0, 0, 4), Size = UDim2.new(1, 0, 0, 20), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = main }) local slider = library:Create("ImageLabel", { Position = UDim2.new(0, 10, 0, 34), Size = UDim2.new(1, -20, 0, 5), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(30, 30, 30), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local fill = library:Create("ImageLabel", { BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(60, 60, 60), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = slider }) local circle = library:Create("ImageLabel", { AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new((option.value - option.min) / (option.max - option.min), 0, 0.5, 0), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(60, 60, 60), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 1, Parent = slider }) local valueRound = library:Create("ImageLabel", { Position = UDim2.new(1, -6, 0, 4), Size = UDim2.new(0, -60, 0, 18), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(40, 40, 40), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local inputvalue = library:Create("TextBox", { Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = option.value, TextColor3 = Color3.fromRGB(235, 235, 235), TextSize = 15, TextWrapped = true, Font = Enum.Font.Gotham, Parent = valueRound }) if option.min >= 0 then fill.Size = UDim2.new((option.value - option.min) / (option.max - option.min), 0, 1, 0) else fill.Position = UDim2.new((0 - option.min) / (option.max - option.min), 0, 0, 0) fill.Size = UDim2.new(option.value / (option.max - option.min), 0, 1, 0) end local sliding local inContact main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then tweenService:Create(fill, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(3.5, 0, 3.5, 0), ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() sliding = true option:SetValue(option.min + ((input.Position.X - slider.AbsolutePosition.X) / slider.AbsoluteSize.X) * (option.max - option.min)) end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not sliding then tweenService:Create(fill, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(2.8, 0, 2.8, 0), ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() end end end) inputService.InputChanged:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement and sliding then option:SetValue(option.min + ((input.Position.X - slider.AbsolutePosition.X) / slider.AbsoluteSize.X) * (option.max - option.min)) end end) main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then sliding = false if inContact then tweenService:Create(fill, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(2.8, 0, 2.8, 0), ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() else tweenService:Create(fill, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0, 0, 0, 0), ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false inputvalue:ReleaseFocus() if not sliding then tweenService:Create(fill, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0, 0, 0, 0), ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end end) inputvalue.FocusLost:connect(function() tweenService:Create(circle, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0, 0, 0, 0), ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() option:SetValue(tonumber(inputvalue.Text) or option.value) end) function option:SetValue(value) value = round(value, option.float) value = math.clamp(value, self.min, self.max) circle:TweenPosition(UDim2.new((value - self.min) / (self.max - self.min), 0, 0.5, 0), "Out", "Quad", 0.1, true) if self.min >= 0 then fill:TweenSize(UDim2.new((value - self.min) / (self.max - self.min), 0, 1, 0), "Out", "Quad", 0.1, true) else fill:TweenPosition(UDim2.new((0 - self.min) / (self.max - self.min), 0, 0, 0), "Out", "Quad", 0.1, true) fill:TweenSize(UDim2.new(value / (self.max - self.min), 0, 1, 0), "Out", "Quad", 0.1, true) end library.flags[self.flag] = value self.value = value inputvalue.Text = value self.callback(value) end end local function createList(option, parent, holder) local valueCount = 0 local main = library:Create("Frame", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 52), BackgroundTransparency = 1, Parent = parent.content }) local round = library:Create("ImageLabel", { Position = UDim2.new(0, 6, 0, 4), Size = UDim2.new(1, -12, 1, -10), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(40, 40, 40), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local title = library:Create("TextLabel", { Position = UDim2.new(0, 12, 0, 8), Size = UDim2.new(1, -24, 0, 14), BackgroundTransparency = 1, Text = option.text, TextSize = 14, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(140, 140, 140), TextXAlignment = Enum.TextXAlignment.Left, Parent = main }) local listvalue = library:Create("TextLabel", { Position = UDim2.new(0, 12, 0, 20), Size = UDim2.new(1, -24, 0, 24), BackgroundTransparency = 1, Text = option.value, TextSize = 18, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = main }) library:Create("ImageLabel", { Position = UDim2.new(1, -16, 0, 16), Size = UDim2.new(-1, 32, 1, -32), SizeConstraint = Enum.SizeConstraint.RelativeYY, Rotation = 90, BackgroundTransparency = 1, Image = "rbxassetid://4918373417", ImageColor3 = Color3.fromRGB(140, 140, 140), ScaleType = Enum.ScaleType.Fit, Parent = round }) option.mainHolder = library:Create("ImageButton", { ZIndex = 3, Size = UDim2.new(0, 240, 0, 52), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(30, 30, 30), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Visible = false, Parent = library.base }) local content = library:Create("ScrollingFrame", { ZIndex = 3, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarImageColor3 = Color3.fromRGB(), ScrollBarThickness = 0, ScrollingDirection = Enum.ScrollingDirection.Y, Parent = option.mainHolder }) library:Create("UIPadding", { PaddingTop = UDim.new(0, 6), Parent = content }) local layout = library:Create("UIListLayout", { Parent = content }) layout.Changed:connect(function() option.mainHolder.Size = UDim2.new(0, 240, 0, (valueCount > 4 and (4 * 40) or layout.AbsoluteContentSize.Y) + 12) content.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 12) end) local inContact round.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if library.activePopup then library.activePopup:Close() end local position = main.AbsolutePosition option.mainHolder.Position = UDim2.new(0, position.X - 5, 0, position.Y - 10) option.open = true option.mainHolder.Visible = true library.activePopup = option content.ScrollBarThickness = 6 tweenService:Create(option.mainHolder, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {ImageTransparency = 0, Position = UDim2.new(0, position.X - 5, 0, position.Y - 4)}):Play() tweenService:Create(option.mainHolder, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out, 0, false, 0.1), {Position = UDim2.new(0, position.X - 5, 0, position.Y + 1)}):Play() for _,label in next, content:GetChildren() do if label:IsA"TextLabel" then tweenService:Create(label, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 0, TextTransparency = 0}):Play() end end end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not option.open then tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end end) round.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false if not option.open then tweenService:Create(round, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(40, 40, 40)}):Play() end end end) function option:AddValue(value) valueCount = valueCount + 1 local label = library:Create("TextLabel", { ZIndex = 3, Size = UDim2.new(1, 0, 0, 40), BackgroundColor3 = Color3.fromRGB(30, 30, 30), BorderSizePixel = 0, Text = " " .. value, TextSize = 14, TextTransparency = self.open and 0 or 1, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = content }) local inContact local clicking label.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then clicking = true tweenService:Create(label, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(10, 10, 10)}):Play() self:SetValue(value) end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not clicking then tweenService:Create(label, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(20, 20, 20)}):Play() end end end) label.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then clicking = false tweenService:Create(label, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = inContact and Color3.fromRGB(20, 20, 20) or Color3.fromRGB(30, 30, 30)}):Play() end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false if not clicking then tweenService:Create(label, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundColor3 = Color3.fromRGB(30, 30, 30)}):Play() end end end) end if not table.find(option.values, option.value) then option:AddValue(option.value) end for _, value in next, option.values do option:AddValue(tostring(value)) end function option:RemoveValue(value) for _,label in next, content:GetChildren() do if label:IsA"TextLabel" and label.Text == " " .. value then label:Destroy() valueCount = valueCount - 1 break end end if self.value == value then self:SetValue("") end end function option:SetValue(value) library.flags[self.flag] = tostring(value) self.value = tostring(value) listvalue.Text = self.value self.callback(value) end function option:Close() library.activePopup = nil self.open = false content.ScrollBarThickness = 0 local position = main.AbsolutePosition tweenService:Create(round, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = inContact and Color3.fromRGB(60, 60, 60) or Color3.fromRGB(40, 40, 40)}):Play() tweenService:Create(self.mainHolder, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 1, Position = UDim2.new(0, position.X - 5, 0, position.Y -10)}):Play() for _,label in next, content:GetChildren() do if label:IsA"TextLabel" then tweenService:Create(label, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 1, TextTransparency = 1}):Play() end end wait(0.3) --delay(0.3, function() if not self.open then self.mainHolder.Visible = false end --end) end return option end local function createBox(option, parent) local main = library:Create("Frame", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 52), BackgroundTransparency = 1, Parent = parent.content }) local outline = library:Create("ImageLabel", { Position = UDim2.new(0, 6, 0, 4), Size = UDim2.new(1, -12, 1, -10), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(60, 60, 60), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = main }) local round = library:Create("ImageLabel", { Position = UDim2.new(0, 8, 0, 6), Size = UDim2.new(1, -16, 1, -14), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.01, Parent = main }) local title = library:Create("TextLabel", { Position = UDim2.new(0, 12, 0, 8), Size = UDim2.new(1, -24, 0, 14), BackgroundTransparency = 1, Text = option.text, TextSize = 14, Font = Enum.Font.GothamBold, TextColor3 = Color3.fromRGB(100, 100, 100), TextXAlignment = Enum.TextXAlignment.Left, Parent = main }) local inputvalue = library:Create("TextBox", { Position = UDim2.new(0, 12, 0, 20), Size = UDim2.new(1, -24, 0, 24), BackgroundTransparency = 1, Text = option.value, TextSize = 18, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, TextWrapped = true, Parent = main }) local inContact local focused main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if not focused then inputvalue:CaptureFocus() end end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not focused then tweenService:Create(outline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() end end end) main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = false if not focused then tweenService:Create(outline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() end end end) inputvalue.Focused:connect(function() focused = true tweenService:Create(outline, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(255, 65, 65)}):Play() end) inputvalue.FocusLost:connect(function(enter) focused = false tweenService:Create(outline, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(60, 60, 60)}):Play() option:SetValue(inputvalue.Text, enter) end) function option:SetValue(value, enter) library.flags[self.flag] = tostring(value) self.value = tostring(value) inputvalue.Text = self.value self.callback(value, enter) end end local function createColorPickerWindow(option) option.mainHolder = library:Create("ImageButton", { ZIndex = 3, Size = UDim2.new(0, 240, 0, 180), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(30, 30, 30), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = library.base }) local hue, sat, val = Color3.toHSV(option.color) hue, sat, val = hue == 0 and 1 or hue, sat + 0.005, val - 0.005 local editinghue local editingsatval local currentColor = option.color local previousColors = {[1] = option.color} local originalColor = option.color local rainbowEnabled local rainbowLoop function option:updateVisuals(Color) currentColor = Color self.visualize2.ImageColor3 = Color hue, sat, val = Color3.toHSV(Color) hue = hue == 0 and 1 or hue self.satval.BackgroundColor3 = Color3.fromHSV(hue, 1, 1) self.hueSlider.Position = UDim2.new(1 - hue, 0, 0, 0) self.satvalSlider.Position = UDim2.new(sat, 0, 1 - val, 0) end option.hue = library:Create("ImageLabel", { ZIndex = 3, AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 8, 1, -8), Size = UDim2.new(1, -100, 0, 22), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) local Gradient = library:Create("UIGradient", { Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)), ColorSequenceKeypoint.new(0.157, Color3.fromRGB(255, 0, 255)), ColorSequenceKeypoint.new(0.323, Color3.fromRGB(0, 0, 255)), ColorSequenceKeypoint.new(0.488, Color3.fromRGB(0, 255, 255)), ColorSequenceKeypoint.new(0.66, Color3.fromRGB(0, 255, 0)), ColorSequenceKeypoint.new(0.817, Color3.fromRGB(255, 255, 0)), ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 0)), }), Parent = option.hue }) option.hueSlider = library:Create("Frame", { ZIndex = 3, Position = UDim2.new(1 - hue, 0, 0, 0), Size = UDim2.new(0, 2, 1, 0), BackgroundTransparency = 1, BackgroundColor3 = Color3.fromRGB(30, 30, 30), BorderColor3 = Color3.fromRGB(255, 255, 255), Parent = option.hue }) option.hue.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then editinghue = true X = (option.hue.AbsolutePosition.X + option.hue.AbsoluteSize.X) - option.hue.AbsolutePosition.X X = (Input.Position.X - option.hue.AbsolutePosition.X) / X X = X < 0 and 0 or X > 0.995 and 0.995 or X option:updateVisuals(Color3.fromHSV(1 - X, sat, val)) end end) inputService.InputChanged:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and editinghue then X = (option.hue.AbsolutePosition.X + option.hue.AbsoluteSize.X) - option.hue.AbsolutePosition.X X = (Input.Position.X - option.hue.AbsolutePosition.X) / X X = X <= 0 and 0 or X >= 0.995 and 0.995 or X option:updateVisuals(Color3.fromHSV(1 - X, sat, val)) end end) option.hue.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then editinghue = false end end) option.satval = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(0, 8, 0, 8), Size = UDim2.new(1, -100, 1, -42), BackgroundTransparency = 1, BackgroundColor3 = Color3.fromHSV(hue, 1, 1), BorderSizePixel = 0, Image = "rbxassetid://4155801252", ImageTransparency = 1, ClipsDescendants = true, Parent = option.mainHolder }) option.satvalSlider = library:Create("Frame", { ZIndex = 3, AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.new(sat, 0, 1 - val, 0), Size = UDim2.new(0, 4, 0, 4), Rotation = 45, BackgroundTransparency = 1, BackgroundColor3 = Color3.fromRGB(255, 255, 255), Parent = option.satval }) option.satval.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then editingsatval = true X = (option.satval.AbsolutePosition.X + option.satval.AbsoluteSize.X) - option.satval.AbsolutePosition.X Y = (option.satval.AbsolutePosition.Y + option.satval.AbsoluteSize.Y) - option.satval.AbsolutePosition.Y X = (Input.Position.X - option.satval.AbsolutePosition.X) / X Y = (Input.Position.Y - option.satval.AbsolutePosition.Y) / Y X = X <= 0.005 and 0.005 or X >= 1 and 1 or X Y = Y <= 0 and 0 or Y >= 0.995 and 0.995 or Y option:updateVisuals(Color3.fromHSV(hue, X, 1 - Y)) end end) inputService.InputChanged:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and editingsatval then X = (option.satval.AbsolutePosition.X + option.satval.AbsoluteSize.X) - option.satval.AbsolutePosition.X Y = (option.satval.AbsolutePosition.Y + option.satval.AbsoluteSize.Y) - option.satval.AbsolutePosition.Y X = (Input.Position.X - option.satval.AbsolutePosition.X) / X Y = (Input.Position.Y - option.satval.AbsolutePosition.Y) / Y X = X <= 0.005 and 0.005 or X >= 1 and 1 or X Y = Y <= 0 and 0 or Y >= 0.995 and 0.995 or Y option:updateVisuals(Color3.fromHSV(hue, X, 1 - Y)) end end) option.satval.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then editingsatval = false end end) option.visualize2 = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(1, -8, 0, 8), Size = UDim2.new(0, -80, 0, 80), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = currentColor, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) option.resetColor = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(1, -8, 0, 92), Size = UDim2.new(0, -80, 0, 18), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) option.resetText = library:Create("TextLabel", { ZIndex = 3, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "Reset", TextTransparency = 1, Font = Enum.Font.Code, TextSize = 15, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = option.resetColor }) option.resetColor.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 and not rainbowEnabled then previousColors = {originalColor} option:SetColor(originalColor) end if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.resetColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(10, 10, 10)}):Play() end end) option.resetColor.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.resetColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(20, 20, 20)}):Play() end end) option.undoColor = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(1, -8, 0, 112), Size = UDim2.new(0, -80, 0, 18), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) option.undoText = library:Create("TextLabel", { ZIndex = 3, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "Undo", TextTransparency = 1, Font = Enum.Font.Code, TextSize = 15, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = option.undoColor }) option.undoColor.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 and not rainbowEnabled then local Num = #previousColors == 1 and 0 or 1 option:SetColor(previousColors[#previousColors - Num]) if #previousColors ~= 1 then table.remove(previousColors, #previousColors) end end if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.undoColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(10, 10, 10)}):Play() end end) option.undoColor.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.undoColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(20, 20, 20)}):Play() end end) option.setColor = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(1, -8, 0, 132), Size = UDim2.new(0, -80, 0, 18), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) option.setText = library:Create("TextLabel", { ZIndex = 3, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "Set", TextTransparency = 1, Font = Enum.Font.Code, TextSize = 15, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = option.setColor }) option.setColor.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 and not rainbowEnabled then table.insert(previousColors, currentColor) option:SetColor(currentColor) end if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.setColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(10, 10, 10)}):Play() end end) option.setColor.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.setColor, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(20, 20, 20)}):Play() end end) option.rainbow = library:Create("ImageLabel", { ZIndex = 3, Position = UDim2.new(1, -8, 0, 152), Size = UDim2.new(0, -80, 0, 18), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageTransparency = 1, ImageColor3 = Color3.fromRGB(20, 20, 20), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.mainHolder }) option.rainbowText = library:Create("TextLabel", { ZIndex = 3, Size = UDim2.new(1, 0, 1, 0), BackgroundTransparency = 1, Text = "Rainbow", TextTransparency = 1, Font = Enum.Font.Code, TextSize = 15, TextColor3 = Color3.fromRGB(255, 255, 255), Parent = option.rainbow }) option.rainbow.InputBegan:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseButton1 then rainbowEnabled = not rainbowEnabled if rainbowEnabled then rainbowLoop = runService.Heartbeat:connect(function() option:SetColor(chromaColor) option.rainbowText.TextColor3 = chromaColor end) else rainbowLoop:Disconnect() option:SetColor(previousColors[#previousColors]) option.rainbowText.TextColor3 = Color3.fromRGB(255, 255, 255) end end if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.rainbow, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(10, 10, 10)}):Play() end end) option.rainbow.InputEnded:connect(function(Input) if Input.UserInputType == Enum.UserInputType.MouseMovement and not dragging then tweenService:Create(option.rainbow, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(20, 20, 20)}):Play() end end) return option end local function createColor(option, parent, holder) option.main = library:Create("TextLabel", { LayoutOrder = option.position, Size = UDim2.new(1, 0, 0, 31), BackgroundTransparency = 1, Text = " " .. option.text, TextSize = 17, Font = Enum.Font.Gotham, TextColor3 = Color3.fromRGB(255, 255, 255), TextXAlignment = Enum.TextXAlignment.Left, Parent = parent.content }) local colorBoxOutline = library:Create("ImageLabel", { Position = UDim2.new(1, -6, 0, 4), Size = UDim2.new(-1, 10, 1, -10), SizeConstraint = Enum.SizeConstraint.RelativeYY, BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = Color3.fromRGB(100, 100, 100), ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = option.main }) option.visualize = library:Create("ImageLabel", { Position = UDim2.new(0, 2, 0, 2), Size = UDim2.new(1, -4, 1, -4), BackgroundTransparency = 1, Image = "rbxassetid://3570695787", ImageColor3 = option.color, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(100, 100, 100, 100), SliceScale = 0.02, Parent = colorBoxOutline }) local inContact option.main.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if not option.mainHolder then createColorPickerWindow(option) end if library.activePopup then library.activePopup:Close() end local position = option.main.AbsolutePosition option.mainHolder.Position = UDim2.new(0, position.X - 5, 0, position.Y - 10) option.open = true option.mainHolder.Visible = true library.activePopup = option tweenService:Create(option.mainHolder, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {ImageTransparency = 0, Position = UDim2.new(0, position.X - 5, 0, position.Y - 4)}):Play() tweenService:Create(option.mainHolder, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out, 0, false, 0.1), {Position = UDim2.new(0, position.X - 5, 0, position.Y + 1)}):Play() tweenService:Create(option.satval, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundTransparency = 0}):Play() for _,object in next, option.mainHolder:GetDescendants() do if object:IsA"TextLabel" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0}):Play() elseif object:IsA"ImageLabel" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 0}):Play() elseif object:IsA"Frame" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 0}):Play() end end end if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not option.open then tweenService:Create(colorBoxOutline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(140, 140, 140)}):Play() end end end) option.main.InputEnded:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then inContact = true if not option.open then tweenService:Create(colorBoxOutline, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageColor3 = Color3.fromRGB(100, 100, 100)}):Play() end end end) function option:SetColor(newColor) if self.mainHolder then self:updateVisuals(newColor) end self.visualize.ImageColor3 = newColor library.flags[self.flag] = newColor self.color = newColor self.callback(newColor) end function option:Close() library.activePopup = nil self.open = false local position = self.main.AbsolutePosition tweenService:Create(self.mainHolder, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 1, Position = UDim2.new(0, position.X - 5, 0, position.Y - 10)}):Play() tweenService:Create(self.satval, TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play() for _,object in next, self.mainHolder:GetDescendants() do if object:IsA"TextLabel" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 1}):Play() elseif object:IsA"ImageLabel" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {ImageTransparency = 1}):Play() elseif object:IsA"Frame" then tweenService:Create(object, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {BackgroundTransparency = 1}):Play() end end delay(0.3, function() if not self.open then self.mainHolder.Visible = false end end) end end local function loadOptions(option, holder) for _,newOption in next, option.options do if newOption.type == "label" then createLabel(newOption, option) elseif newOption.type == "toggle" then createToggle(newOption, option) elseif newOption.type == "button" then createButton(newOption, option) elseif newOption.type == "list" then createList(newOption, option, holder) elseif newOption.type == "box" then createBox(newOption, option) elseif newOption.type == "bind" then createBind(newOption, option) elseif newOption.type == "slider" then createSlider(newOption, option) elseif newOption.type == "color" then createColor(newOption, option, holder) elseif newOption.type == "folder" then newOption:init() end end end local function getFnctions(parent) function parent:AddLabel(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.type = "label" option.position = #self.options table.insert(self.options, option) return option end function parent:AddToggle(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.state = typeof(option.state) == "boolean" and option.state or false option.callback = typeof(option.callback) == "function" and option.callback or function() end option.type = "toggle" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.state table.insert(self.options, option) return option end function parent:AddButton(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.callback = typeof(option.callback) == "function" and option.callback or function() end option.type = "button" option.position = #self.options option.flag = option.flag or option.text table.insert(self.options, option) return option end function parent:AddBind(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.key = (option.key and option.key.Name) or option.key or "F" option.hold = typeof(option.hold) == "boolean" and option.hold or false option.callback = typeof(option.callback) == "function" and option.callback or function() end option.type = "bind" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.key table.insert(self.options, option) return option end function parent:AddSlider(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.min = typeof(option.min) == "number" and option.min or 0 option.max = typeof(option.max) == "number" and option.max or 0 option.dual = typeof(option.dual) == "boolean" and option.dual or false option.value = math.clamp(typeof(option.value) == "number" and option.value or option.min, option.min, option.max) option.value2 = typeof(option.value2) == "number" and option.value2 or option.max option.callback = typeof(option.callback) == "function" and option.callback or function() end option.float = typeof(option.value) == "number" and option.float or 1 option.type = "slider" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.value table.insert(self.options, option) return option end function parent:AddList(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.values = typeof(option.values) == "table" and option.values or {} option.value = tostring(option.value or option.values[1] or "") option.callback = typeof(option.callback) == "function" and option.callback or function() end option.open = false option.type = "list" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.value table.insert(self.options, option) return option end function parent:AddBox(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.value = tostring(option.value or "") option.callback = typeof(option.callback) == "function" and option.callback or function() end option.type = "box" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.value table.insert(self.options, option) return option end function parent:AddColor(option) option = typeof(option) == "table" and option or {} option.text = tostring(option.text) option.color = typeof(option.color) == "table" and Color3.new(tonumber(option.color[1]), tonumber(option.color[2]), tonumber(option.color[3])) or option.color or Color3.new(255, 255, 255) option.callback = typeof(option.callback) == "function" and option.callback or function() end option.open = false option.type = "color" option.position = #self.options option.flag = option.flag or option.text library.flags[option.flag] = option.color table.insert(self.options, option) return option end function parent:AddFolder(title) local option = {} option.title = tostring(title) option.options = {} option.open = false option.type = "folder" option.position = #self.options table.insert(self.options, option) getFnctions(option) function option:init() createOptionHolder(self.title, parent.content, self, true) loadOptions(self, parent) end return option end end function library:CreateWindow(title) local window = {title = tostring(title), options = {}, open = true, canInit = true, init = false, position = #self.windows} getFnctions(window) table.insert(library.windows, window) return window end local UIToggle local UnlockMouse function library:Init() self.base = self.base or self:Create("ScreenGui") if syn and syn.protect_gui then syn.protect_gui(self.base) elseif get_hidden_gui then get_hidden_gui(self.base) else game:GetService"Players".LocalPlayer:Kick("Error: protect_gui function not found") return end self.base.Parent = game:GetService"CoreGui" self.cursor = self.cursor or self:Create("Frame", { ZIndex = 100, AnchorPoint = Vector2.new(0, 0), Size = UDim2.new(0, 5, 0, 5), BackgroundColor3 = Color3.fromRGB(255, 255, 255), Parent = self.base }) for _, window in next, self.windows do if window.canInit and not window.init then window.init = true createOptionHolder(window.title, self.base, window) loadOptions(window) end end end function library:Close() self.open = not self.open self.cursor.Visible = self.open if self.activePopup then self.activePopup:Close() end for _, window in next, self.windows do if window.main then window.main.Visible = self.open end end end inputService.InputBegan:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if library.activePopup then if input.Position.X < library.activePopup.mainHolder.AbsolutePosition.X or input.Position.Y < library.activePopup.mainHolder.AbsolutePosition.Y then library.activePopup:Close() end end if library.activePopup then if input.Position.X > library.activePopup.mainHolder.AbsolutePosition.X + library.activePopup.mainHolder.AbsoluteSize.X or input.Position.Y > library.activePopup.mainHolder.AbsolutePosition.Y + library.activePopup.mainHolder.AbsoluteSize.Y then library.activePopup:Close() end end end end) inputService.InputChanged:connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement and library.cursor then local mouse = inputService:GetMouseLocation() + Vector2.new(0, -36) library.cursor.Position = UDim2.new(0, mouse.X - 2, 0, mouse.Y - 2) end if input == dragInput and dragging then update(input) end end) return library