Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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")
- 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
Add Comment
Please, Sign In to add comment