local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local InsertService = game:GetService("InsertService")
local HttpService = game:GetService("HttpService")
local TextService = game:GetService("TextService")
local RunService = game:GetService("RunService")
local PlayerService = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local IsLocal,Assets,LocalPlayer = false,{},PlayerService.LocalPlayer
local MainAssetFolder = IsLocal and ReplicatedStorage.BracketV33
or InsertService:LoadLocalAsset("rbxassetid://10827276896")
local function GetAsset(AssetPath)
AssetPath = AssetPath:split("/")
local Asset = MainAssetFolder
for Index,Name in pairs(AssetPath) do
Asset = Asset[Name]
end return Asset:Clone()
end
local function TableToColor(Table)
if type(Table) ~= "table" then return Table end
return Color3.fromHSV(Table[1],Table[2],Table[3])
end
local function ColorToString(Color)
return ("%i,%i,%i"):format(Color.R * 255,Color.G * 255,Color.B * 255)
end
local function Scale(Value,InputMin,InputMax,OutputMin,OutputMax)
return OutputMin + (Value - InputMin) * (OutputMax - OutputMin) / (InputMax - InputMin)
end
local function DeepCopy(Original)
local Copy = {}
for Index,Value in pairs(Original) do
if type(Value) == "table" then
Value = DeepCopy(Value)
end
Copy[Index] = Value
end
return Copy
end
local function Proxify(Table) local Proxy,Events = {},{}
local ChangedEvent = Instance.new("BindableEvent")
Table.Changed = ChangedEvent.Event
Proxy.Internal = Table
function Table:GetPropertyChangedSignal(Property)
local PropertyEvent = Instance.new("BindableEvent")
Events[Property] = Events[Property] or {}
table.insert(Events[Property],PropertyEvent)
return PropertyEvent.Event
end
setmetatable(Proxy,{
__index = function(Self,Key)
return Table[Key]
end,
__newindex = function(Self,Key,Value)
local OldValue = Table[Key]
Table[Key] = Value
ChangedEvent:Fire(Key,Value,OldValue)
if Events[Key] then
for Index,Event in ipairs(Events[Key]) do
Event:Fire(Value,OldValue)
end
end
end
})
return Proxy
end
local function GetType(Object,Default,Type,UseProxify)
if typeof(Object) == Type then
return UseProxify and Proxify(Object) or Object
end
return UseProxify and Proxify(Default) or Default
end
local function GetTextBounds(Text,Font,Size)
return TextService:GetTextSize(Text,Size.Y,Font,Vector2.new(Size.X,1e6))
end
local function MakeDraggable(Dragger,Object,OnTick,OnStop)
local StartPosition,StartDrag = nil,nil
Dragger.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
StartPosition = UserInputService:GetMouseLocation()
StartDrag = Object.AbsolutePosition
end
end)
UserInputService.InputChanged:Connect(function(Input)
if StartDrag and Input.UserInputType == Enum.UserInputType.MouseMovement then
local Mouse = UserInputService:GetMouseLocation()
local Delta = Mouse - StartPosition StartPosition = Mouse
OnTick(Object.Position + UDim2.fromOffset(Delta.X,Delta.Y))
end
end)
Dragger.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
StartPosition,StartDrag = nil,nil
if OnStop then OnStop(Object.Position) end
end
end)
end
local function MakeResizeable(Dragger,Object,MinSize,OnTick,OnStop)
local StartPosition,StartSize = nil,nil
Dragger.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
StartPosition = UserInputService:GetMouseLocation()
StartSize = Object.AbsoluteSize
end
end)
UserInputService.InputChanged:Connect(function(Input)
if StartPosition and Input.UserInputType == Enum.UserInputType.MouseMovement then
local Mouse = UserInputService:GetMouseLocation()
local Delta = Mouse - StartPosition
local Size = StartSize + Delta
local SizeX = math.max(MinSize.X,Size.X)
local SizeY = math.max(MinSize.Y,Size.Y)
OnTick(UDim2.fromOffset(SizeX,SizeY))
end
end)
Dragger.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
StartPosition,StartSize = nil,nil
if OnStop then OnStop(Object.Size) end
end
end)
end
local function ChooseTab(ScreenAsset,TabButtonAsset,TabAsset)
for Index,Object in pairs(ScreenAsset:GetChildren()) do
if Object.Name == "OptionContainer"
or Object.Name == "Palette" then
Object.Visible = false
end
end
for Index,Object in pairs(ScreenAsset.Window.TabContainer:GetChildren()) do
if Object:IsA("ScrollingFrame")
and Object ~= TabAsset then
Object.Visible = false
else
Object.Visible = true
end
end
for Index,Object in pairs(ScreenAsset.Window.TabButtonContainer:GetChildren()) do
if Object:IsA("TextButton") then
Object.Highlight.Visible = Object == TabButtonAsset
end
end
end
local function GetLongestSide(TabAsset)
if TabAsset.LeftSide.ListLayout.AbsoluteContentSize.Y
>= TabAsset.RightSide.ListLayout.AbsoluteContentSize.Y then
return TabAsset.LeftSide
else
return TabAsset.RightSide
end
end
local function GetShortestSide(TabAsset)
if TabAsset.LeftSide.ListLayout.AbsoluteContentSize.Y
<= TabAsset.RightSide.ListLayout.AbsoluteContentSize.Y then
return TabAsset.LeftSide
else
return TabAsset.RightSide
end
end
local function ChooseTabSide(TabAsset,Mode)
if Mode == "Left" then
return TabAsset.LeftSide
elseif Mode == "Right" then
return TabAsset.RightSide
else
return GetShortestSide(TabAsset)
end
end
local function FindElementByFlag(Elements,Flag)
for Index,Element in pairs(Elements) do
if Element.Flag == Flag then
return Element
end
end
end
local function GetConfigs(FolderName)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfolder(FolderName .. "\\Configs") then makefolder(FolderName .. "\\Configs") end
local Configs = {}
for Index,Config in pairs(listfiles(FolderName .. "\\Configs") or {}) do
Config = Config:gsub(FolderName .. "\\Configs\\","")
Config = Config:gsub(".json","")
Configs[#Configs + 1] = Config
end
return Configs
end
local function ConfigsToList(FolderName)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfolder(FolderName .. "\\Configs") then makefolder(FolderName .. "\\Configs") end
if not isfile(FolderName .. "\\AutoLoads.json") then writefile(FolderName .. "\\AutoLoads.json","[]") end
local Configs = {}
local AutoLoads = HttpService:JSONDecode(
readfile(FolderName .. "\\AutoLoads.json")
) local AutoLoad = AutoLoads[tostring(game.GameId)]
for Index,Config in pairs(listfiles(FolderName .. "\\Configs") or {}) do
Config = Config:gsub(FolderName .. "\\Configs\\","")
Config = Config:gsub(".json","")
Configs[#Configs + 1] = {
Name = Config,Mode = "Button",
Value = Config == AutoLoad
}
end
return Configs
end
function Assets:Screen()
local ScreenAsset = GetAsset("Screen/Bracket")
if not IsLocal then sethiddenproperty(ScreenAsset,"OnTopOfCoreBlur",true) end
ScreenAsset.Name = "Bracket " .. game:GetService("HttpService"):GenerateGUID(false)
ScreenAsset.Parent = IsLocal and LocalPlayer:FindFirstChildOfClass("PlayerGui") or CoreGui
return {ScreenAsset = ScreenAsset,TableToColor = TableToColor}
end
function Assets:Window(ScreenAsset,Window)
local WindowAsset = GetAsset("Window/Window")
Window.Background = WindowAsset.Background
Window.RainbowHue,Window.RainbowSpeed = 0,10
Window.Colorable,Window.Elements,Window.Flags = {},{},{}
WindowAsset.Parent = ScreenAsset
WindowAsset.Visible = Window.Enabled
WindowAsset.Title.Text = Window.Name
WindowAsset.Position = Window.Position
WindowAsset.Size = Window.Size
MakeDraggable(WindowAsset.Drag,WindowAsset,function(Position)
Window.Position = Position
end)
MakeResizeable(WindowAsset.Resize,WindowAsset,Vector2.new(296,296),function(Size)
Window.Size = Size
end)
local Month = tonumber(os.date("%m"))
if Month == 12 or Month == 1 then task.spawn(Assets.Snowflakes,WindowAsset) end
WindowAsset.TabButtonContainer.ListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
WindowAsset.TabButtonContainer.CanvasSize = UDim2.fromOffset(
WindowAsset.TabButtonContainer.ListLayout.AbsoluteContentSize.X,0
)
end)
UserInputService.InputChanged:Connect(function(Input)
if WindowAsset.Visible and Input.UserInputType == Enum.UserInputType.MouseMovement then
local Mouse = UserInputService:GetMouseLocation()
ScreenAsset.ToolTip.Position = UDim2.fromOffset(
Mouse.X + 5,Mouse.Y - 5
)
end
end)
RunService.RenderStepped:Connect(function()
Window.RainbowHue = os.clock() % Window.RainbowSpeed / Window.RainbowSpeed
end)
Window:GetPropertyChangedSignal("Enabled"):Connect(function(Enabled)
WindowAsset.Visible = Enabled
if not IsLocal then RunService:SetRobloxGuiFocused(Enabled and Window.Blur) end
if not Enabled then
for Index,Object in pairs(ScreenAsset:GetChildren()) do
if Object.Name == "Palette" or Object.Name == "OptionContainer" then
Object.Visible = false
end
end
end
end)
Window:GetPropertyChangedSignal("Blur"):Connect(function(Blur)
if not IsLocal then RunService:SetRobloxGuiFocused(Window.Enabled and Blur) end
end)
Window:GetPropertyChangedSignal("Name"):Connect(function(Name)
WindowAsset.Title.Text = Name
end)
Window:GetPropertyChangedSignal("Position"):Connect(function(Position)
WindowAsset.Position = Position
end)
Window:GetPropertyChangedSignal("Size"):Connect(function(Size)
WindowAsset.Size = Size
end)
Window:GetPropertyChangedSignal("Color"):Connect(function(Color)
for Object,ColorConfig in pairs(Window.Colorable) do
if ColorConfig[1] then Object[ColorConfig[2]] = Color end
end
end)
function Window:SetValue(Flag,Value)
for Index,Element in pairs(Window.Elements) do
if Element.Flag == Flag then
Element.Value = Value
end
end
end
function Window:GetValue(Flag)
for Index,Element in pairs(Window.Elements) do
if Element.Flag == Flag then
return Element.Value
end
end
end
function Window:Watermark(Watermark)
Watermark = GetType(Watermark,{},"table",true)
Watermark.Enabled = GetType(Watermark.Enabled,false,"boolean")
Watermark.Title = GetType(Watermark.Title,"Hello World!","string")
Watermark.Flag = GetType(Watermark.Flag,"UI/Watermark/Position","string")
ScreenAsset.Watermark.Visible = Watermark.Enabled
ScreenAsset.Watermark.Text = Watermark.Title
ScreenAsset.Watermark.Size = UDim2.fromOffset(
ScreenAsset.Watermark.TextBounds.X + 6,
ScreenAsset.Watermark.TextBounds.Y + 6
)
MakeDraggable(ScreenAsset.Watermark,ScreenAsset.Watermark,function(Position)
ScreenAsset.Watermark.Position = Position
end,function(Position)
Watermark.Value = {
Position.X.Scale,Position.X.Offset,
Position.Y.Scale,Position.Y.Offset
}
end)
Watermark:GetPropertyChangedSignal("Enabled"):Connect(function(Enabled)
ScreenAsset.Watermark.Visible = Enabled
end)
Watermark:GetPropertyChangedSignal("Title"):Connect(function(Title)
ScreenAsset.Watermark.Text = Title
ScreenAsset.Watermark.Size = UDim2.fromOffset(
ScreenAsset.Watermark.TextBounds.X + 6,
ScreenAsset.Watermark.TextBounds.Y + 6
)
end)
Watermark:GetPropertyChangedSignal("Value"):Connect(function(Value)
if type(Value) ~= "table" then return end
ScreenAsset.Watermark.Position = UDim2.new(
Value[1],Value[2],
Value[3],Value[4]
)
Window.Flags[Watermark.Flag] = {
Value[1],Value[2],
Value[3],Value[4]
}
end)
Window.Elements[#Window.Elements + 1] = Watermark
Window.Watermark = Watermark
return Watermark
end
function Window:KeybindList(KeybindList)
KeybindList = GetType(KeybindList,{},"table",true)
KeybindList.Enabled = GetType(KeybindList.Enabled,false,"boolean")
--KeybindList.Title = GetType(KeybindList.Title,"","string")
KeybindList.Position = GetType(KeybindList.Position,UDim2.new(0,10,0.5,-123),"UDim2")
KeybindList.Size = GetType(KeybindList.Size,UDim2.new(0,121,0,246),"UDim2")
KeybindList.List = ScreenAsset.KeybindList.List
ScreenAsset.KeybindList.Visible = KeybindList.Enabled
--ScreenAsset.KeybindList.Title.Text = KeybindList.Title
MakeDraggable(ScreenAsset.KeybindList.Drag,ScreenAsset.KeybindList,function(Position)
KeybindList.Position = Position
end)
MakeResizeable(ScreenAsset.KeybindList.Resize,ScreenAsset.KeybindList,Vector2.new(121,246),function(Size)
KeybindList.Size = Size
end)
--[[KeybindList:GetPropertyChangedSignal("Title"):Connect(function(Title)
ScreenAsset.KeybindList.Title.Text = Title
end)]]
KeybindList:GetPropertyChangedSignal("Enabled"):Connect(function(Enabled)
ScreenAsset.KeybindList.Visible = Enabled
end)
KeybindList:GetPropertyChangedSignal("Position"):Connect(function(Position)
ScreenAsset.KeybindList.Position = Position
end)
KeybindList:GetPropertyChangedSignal("Size"):Connect(function(Size)
ScreenAsset.KeybindList.Size = Size
end)
WindowAsset.Background.Changed:Connect(function(Property)
if Property == "Image" then
ScreenAsset.KeybindList.Background.Image = WindowAsset.Background.Image
elseif Property == "ImageColor3" then
ScreenAsset.KeybindList.Background.ImageColor3 = WindowAsset.Background.ImageColor3
elseif Property == "ImageTransparency" then
ScreenAsset.KeybindList.Background.ImageTransparency = WindowAsset.Background.ImageTransparency
elseif Property == "TileSize" then
ScreenAsset.KeybindList.Background.TileSize = WindowAsset.Background.TileSize
end
end)
for Index, Element in pairs(Window.Elements) do
if type(Element.WaitingForBind) == "boolean" and not Element.IgnoreList then
Element.ListMimic = {}
Element.ListMimic.Asset = GetAsset("KeybindList/KeybindMimic")
Element.ListMimic.Asset.Title.Text = Element.Name or Element.Toggle.Name
Element.ListMimic.Asset.Parent = ScreenAsset.KeybindList.List
Element.ListMimic.ColorConfig = {false,"BackgroundColor3"}
Window.Colorable[Element.ListMimic.Asset.Tick] = Element.ListMimic.ColorConfig
end
end
Window.Elements[#Window.Elements + 1] = KeybindList
Window.KeybindList = KeybindList
return KeybindList
end
function Window:SaveConfig(FolderName,Name)
local Config = {}
for Index,Element in pairs(Window.Elements) do
if Element.Flag and not Element.IgnoreFlag then
Config[Element.Flag] = Window.Flags[Element.Flag]
end
end
writefile(
FolderName .. "\\Configs\\" .. Name .. ".json",
HttpService:JSONEncode(Config)
)
end
function Window:LoadConfig(FolderName,Name)
if table.find(GetConfigs(FolderName),Name) then
local DecodedJSON = HttpService:JSONDecode(
readfile(FolderName .. "\\Configs\\" .. Name .. ".json")
)
for Flag,Value in pairs(DecodedJSON) do
local Element = FindElementByFlag(Window.Elements,Flag)
if Element ~= nil then Element.Value = Value end
end
end
end
function Window:DeleteConfig(FolderName,Name)
if table.find(GetConfigs(FolderName),Name) then
delfile(FolderName .. "\\Configs\\" .. Name .. ".json")
end
end
function Window:GetAutoLoadConfig(FolderName)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfile(FolderName .. "\\AutoLoads.json") then
writefile(FolderName .. "\\AutoLoads.json","[]")
end
local AutoLoads = HttpService:JSONDecode(
readfile(FolderName .. "\\AutoLoads.json")
) local AutoLoad = AutoLoads[tostring(game.GameId)]
if table.find(GetConfigs(FolderName),AutoLoad) then
return AutoLoad
end
end
function Window:AddToAutoLoad(FolderName,Name)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfile(FolderName .. "\\AutoLoads.json") then
writefile(FolderName .. "\\AutoLoads.json","[]")
end
local AutoLoads = HttpService:JSONDecode(
readfile(FolderName .. "\\AutoLoads.json")
) AutoLoads[tostring(game.GameId)] = Name
writefile(FolderName .. "\\AutoLoads.json",
HttpService:JSONEncode(AutoLoads)
)
end
function Window:RemoveFromAutoLoad(FolderName)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfile(FolderName .. "\\AutoLoads.json") then
writefile(FolderName .. "\\AutoLoads.json","[]")
return
end
local AutoLoads = HttpService:JSONDecode(
readfile(FolderName .. "\\AutoLoads.json")
) AutoLoads[tostring(game.GameId)] = nil
writefile(FolderName .. "\\AutoLoads.json",
HttpService:JSONEncode(AutoLoads)
)
end
function Window:AutoLoadConfig(FolderName)
if not isfolder(FolderName) then makefolder(FolderName) end
if not isfile(FolderName .. "\\AutoLoads.json") then
writefile(FolderName .. "\\AutoLoads.json","[]")
end
local AutoLoads = HttpService:JSONDecode(
readfile(FolderName .. "\\AutoLoads.json")
) local AutoLoad = AutoLoads[tostring(game.GameId)]
if table.find(GetConfigs(FolderName),AutoLoad) then
Window:LoadConfig(FolderName,AutoLoad)
end
end
return WindowAsset
end
function Assets:Tab(ScreenAsset,WindowAsset,Window,Tab)
local TabButtonAsset,TabAsset = GetAsset("Tab/TabButton"),GetAsset("Tab/Tab")
Tab.ColorConfig = {true,"BackgroundColor3"}
Window.Colorable[TabButtonAsset.Highlight] = Tab.ColorConfig
TabAsset.Parent = WindowAsset.TabContainer
TabButtonAsset.Parent = WindowAsset.TabButtonContainer
TabAsset.Visible = false
TabButtonAsset.Text = Tab.Name
TabButtonAsset.Highlight.BackgroundColor3 = Window.Color
TabButtonAsset.Size = UDim2.new(0,TabButtonAsset.TextBounds.X + 12,1,-1)
TabButtonAsset.Parent = WindowAsset.TabButtonContainer
TabAsset.LeftSide.ListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
local Side = GetLongestSide(TabAsset)
TabAsset.CanvasSize = UDim2.fromOffset(0,Side.ListLayout.AbsoluteContentSize.Y + 21)
end)
TabAsset.RightSide.ListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
local Side = GetLongestSide(TabAsset)
TabAsset.CanvasSize = UDim2.fromOffset(0,Side.ListLayout.AbsoluteContentSize.Y + 21)
end)
TabButtonAsset.MouseButton1Click:Connect(function()
ChooseTab(ScreenAsset,TabButtonAsset,TabAsset)
end)
if #WindowAsset.TabContainer:GetChildren() == 1 then
ChooseTab(ScreenAsset,TabButtonAsset,TabAsset)
end
Tab:GetPropertyChangedSignal("Name"):Connect(function(Name)
TabButtonAsset.Text = Name
TabButtonAsset.Size = UDim2.new(
0,TabButtonAsset.TextBounds.X + 12,
1,-1
)
end)
return TabAsset
end
function Assets:Section(Parent,Section)
local SectionAsset = GetAsset("Section/Section")
SectionAsset.Parent = Parent
SectionAsset.Title.Text = Section.Name
SectionAsset.Title.Size = UDim2.fromOffset(
SectionAsset.Title.TextBounds.X + 6,2
)
SectionAsset.Container.ListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
SectionAsset.Size = UDim2.new(1,0,0,SectionAsset.Container.ListLayout.AbsoluteContentSize.Y + 15)
end)
Section:GetPropertyChangedSignal("Name"):Connect(function(Name)
SectionAsset.Title.Text = Name
SectionAsset.Title.Size = UDim2.fromOffset(
Section.Title.TextBounds.X + 6,2
)
end)
return SectionAsset.Container
end
function Assets:ToolTip(Parent,ScreenAsset,Text)
Parent.MouseEnter:Connect(function()
ScreenAsset.ToolTip.Text = Text
ScreenAsset.ToolTip.Size = UDim2.fromOffset(
ScreenAsset.ToolTip.TextBounds.X + 6,
ScreenAsset.ToolTip.TextBounds.Y + 6
) ScreenAsset.ToolTip.Visible = true
end)
Parent.MouseLeave:Connect(function()
ScreenAsset.ToolTip.Visible = false
end)
end
function Assets.Snowflakes(WindowAsset)
local ParticleEmitter = loadstring(game:HttpGet("https://raw.githubusercontent.com/AlexR32/rParticle/master/Main.lua"))()
local Emitter = ParticleEmitter.new(WindowAsset.Background,WindowAsset.Snowflake)
local NewRandom = Random.new() Emitter.SpawnRate = 20
Emitter.OnSpawn = function(Particle)
local RandomPosition = NewRandom:NextNumber()
local RandomSize = NewRandom:NextInteger(10,50)
local RandomYVelocity = NewRandom:NextInteger(10,50)
local RandomXVelocity = NewRandom:NextInteger(-50,50)
Particle.Object.ImageTransparency = RandomSize / 50
Particle.Object.Size = UDim2.fromOffset(RandomSize,RandomSize)
Particle.Velocity = Vector2.new(RandomXVelocity,RandomYVelocity)
Particle.Position = Vector2.new(RandomPosition * WindowAsset.Background.AbsoluteSize.X,0)
Particle.MaxAge = 20 task.wait(0.5) Particle.Object.Visible = true
end
Emitter.OnUpdate = function(Particle,Delta)
Particle.Position += Particle.Velocity * Delta
end
end
function Assets:Divider(Parent,Divider)
local DividerAsset = GetAsset("Divider/Divider")
DividerAsset.Parent = Parent
DividerAsset.Title.Text = Divider.Text
DividerAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
if DividerAsset.Title.TextBounds.X > 0 then
DividerAsset.Size = UDim2.new(1,0,0,DividerAsset.Title.TextBounds.Y)
DividerAsset.Left.Size = UDim2.new(0.5,-(DividerAsset.Title.TextBounds.X / 2) - 6,0,2)
DividerAsset.Right.Size = UDim2.new(0.5,-(DividerAsset.Title.TextBounds.X / 2) - 6,0,2)
else
DividerAsset.Size = UDim2.new(1,0,0,14)
DividerAsset.Left.Size = UDim2.new(1,0,0,2)
DividerAsset.Right.Size = UDim2.new(1,0,0,2)
end
end)
Divider:GetPropertyChangedSignal("Text"):Connect(function(Text)
DividerAsset.Title.Text = Text
end)
end
function Assets:Label(Parent,Label)
local LabelAsset = GetAsset("Label/Label")
LabelAsset.Parent = Parent
LabelAsset.Text = Label.Text
LabelAsset:GetPropertyChangedSignal("TextBounds"):Connect(function()
LabelAsset.Size = UDim2.new(1,0,0,LabelAsset.TextBounds.Y)
end)
Label:GetPropertyChangedSignal("Text"):Connect(function(Text)
LabelAsset.Text = Text
end)
end
function Assets:Button(Parent,ScreenAsset,Window,Button)
local ButtonAsset = GetAsset("Button/Button")
Button.ColorConfig = {false,"BorderColor3"}
Window.Colorable[ButtonAsset] = Button.ColorConfig
Button.Connection = ButtonAsset.MouseButton1Click:Connect(Button.Callback)
ButtonAsset.Parent = Parent
ButtonAsset.Title.Text = Button.Name
ButtonAsset.MouseButton1Down:Connect(function()
Button.ColorConfig[1] = true
ButtonAsset.BorderColor3 = Window.Color
end)
ButtonAsset.MouseButton1Up:Connect(function()
Button.ColorConfig[1] = false
ButtonAsset.BorderColor3 = Color3.new(0,0,0)
end)
ButtonAsset.MouseLeave:Connect(function()
Button.ColorConfig[1] = false
ButtonAsset.BorderColor3 = Color3.new(0,0,0)
end)
ButtonAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
ButtonAsset.Size = UDim2.new(1,0,0,ButtonAsset.Title.TextBounds.Y + 2)
end)
Button:GetPropertyChangedSignal("Name"):Connect(function(Name)
ButtonAsset.Title.Text = Name
end)
Button:GetPropertyChangedSignal("Callback"):Connect(function(Callback)
Button.Connection:Disconnect()
Button.Connection = ButtonAsset.MouseButton1Click:Connect(Callback)
end)
function Button:ToolTip(Text)
Assets:ToolTip(ButtonAsset,ScreenAsset,Text)
end
end
function Assets:Toggle(Parent,ScreenAsset,Window,Toggle)
local ToggleAsset = GetAsset("Toggle/Toggle")
Toggle.ColorConfig = {Toggle.Value,"BackgroundColor3"}
Window.Colorable[ToggleAsset.Tick] = Toggle.ColorConfig
ToggleAsset.Parent = Parent
ToggleAsset.Title.Text = Toggle.Name
ToggleAsset.Tick.BackgroundColor3 = Toggle.Value
and Window.Color or Color3.fromRGB(60,60,60)
ToggleAsset.MouseButton1Click:Connect(function()
Toggle.Value = not Toggle.Value
end)
ToggleAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
ToggleAsset.Size = UDim2.new(1,0,0,ToggleAsset.Title.TextBounds.Y)
ToggleAsset.Layout.Size = UDim2.new(1,-ToggleAsset.Title.TextBounds.X - 18,1,0)
end)
Toggle:GetPropertyChangedSignal("Name"):Connect(function(Name)
ToggleAsset.Title.Text = Name
end)
Toggle:GetPropertyChangedSignal("Value"):Connect(function(Value)
Toggle.ColorConfig[1] = Value
ToggleAsset.Tick.BackgroundColor3 = Value
and Window.Color or Color3.fromRGB(60,60,60)
Window.Flags[Toggle.Flag] = Value
Toggle.Callback(Value)
end)
function Toggle:ToolTip(Text)
Assets:ToolTip(ToggleAsset,ScreenAsset,Text)
end
return ToggleAsset
end
function Assets:Slider(Parent,ScreenAsset,Window,Slider)
local SliderAsset = Slider.Wide
and GetAsset("Slider/HighSlider")
or GetAsset("Slider/Slider")
Slider.ColorConfig = {true,"BackgroundColor3"}
Window.Colorable[SliderAsset.Background.Bar] = Slider.ColorConfig
Slider.Active = false
Slider.Value = tonumber(string.format("%." .. Slider.Precise .. "f",Slider.Value))
SliderAsset.Parent = Parent
SliderAsset.Title.Text = Slider.Name
SliderAsset.Background.Bar.BackgroundColor3 = Window.Color
SliderAsset.Background.Bar.Size = UDim2.fromScale(Scale(Slider.Value,Slider.Min,Slider.Max,0,1),1)
SliderAsset.Value.PlaceholderText = #Slider.Unit == 0 and Slider.Value or Slider.Value .. " " .. Slider.Unit
local function AttachToMouse(Input)
local ScaleX = math.clamp((Input.Position.X - SliderAsset.Background.AbsolutePosition.X) / SliderAsset.Background.AbsoluteSize.X,0,1)
Slider.Value = Scale(ScaleX,0,1,Slider.Min,Slider.Max)
end
if Slider.Wide then
SliderAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
SliderAsset.Value.Size = UDim2.new(0,SliderAsset.Value.TextBounds.X,1,0)
SliderAsset.Title.Size = UDim2.new(1,-SliderAsset.Value.Size.X.Offset + 12,1,0)
SliderAsset.Size = UDim2.new(1,0,0,SliderAsset.Title.TextBounds.Y + 2)
end)
SliderAsset.Value:GetPropertyChangedSignal("TextBounds"):Connect(function()
SliderAsset.Value.Size = UDim2.new(0,SliderAsset.Value.TextBounds.X,1,0)
SliderAsset.Title.Size = UDim2.new(1,-SliderAsset.Value.Size.X.Offset + 12,1,0)
end)
else
SliderAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
SliderAsset.Value.Size = UDim2.fromOffset(SliderAsset.Value.TextBounds.X,16)
SliderAsset.Title.Size = UDim2.new(1,-SliderAsset.Value.Size.X.Offset,0,16)
SliderAsset.Size = UDim2.new(1,0,0,SliderAsset.Title.TextBounds.Y + 8)
end)
SliderAsset.Value:GetPropertyChangedSignal("TextBounds"):Connect(function()
SliderAsset.Value.Size = UDim2.fromOffset(SliderAsset.Value.TextBounds.X,16)
SliderAsset.Title.Size = UDim2.new(1,-SliderAsset.Value.Size.X.Offset,0,16)
end)
end
SliderAsset.Value.FocusLost:Connect(function()
if not tonumber(SliderAsset.Value.Text) then
SliderAsset.Value.Text = Slider.Value
elseif tonumber(SliderAsset.Value.Text) <= Slider.Min then
SliderAsset.Value.Text = Slider.Min
elseif tonumber(SliderAsset.Value.Text) >= Slider.Max then
SliderAsset.Value.Text = Slider.Max
end
Slider.Value = SliderAsset.Value.Text
SliderAsset.Value.Text = ""
end)
SliderAsset.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
AttachToMouse(Input)
Slider.Active = true
end
end)
SliderAsset.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
Slider.Active = false
end
end)
UserInputService.InputChanged:Connect(function(Input)
if Slider.Active and Input.UserInputType == Enum.UserInputType.MouseMovement then
AttachToMouse(Input)
end
end)
Slider:GetPropertyChangedSignal("Name"):Connect(function(Name)
SliderAsset.Title.Text = Name
end)
Slider:GetPropertyChangedSignal("Value"):Connect(function(Value)
Value = tonumber(string.format("%." .. Slider.Precise .. "f",Value))
SliderAsset.Background.Bar.Size = UDim2.fromScale(Scale(Value,Slider.Min,Slider.Max,0,1),1)
SliderAsset.Value.PlaceholderText = #Slider.Unit == 0
and Value or Value .. " " .. Slider.Unit
Window.Flags[Slider.Flag] = Value
Slider.Callback(Value)
end)
function Slider:ToolTip(Text)
Assets:ToolTip(SliderAsset,ScreenAsset,Text)
end
end
function Assets:Textbox(Parent,ScreenAsset,Window,Textbox)
local TextboxAsset = GetAsset("Textbox/Textbox")
Textbox.EnterPressed = false
TextboxAsset.Parent = Parent
TextboxAsset.Title.Text = Textbox.Name
TextboxAsset.Background.Input.Text = Textbox.Value
TextboxAsset.Background.Input.PlaceholderText = Textbox.Placeholder
TextboxAsset.Title.Visible = not Textbox.HideName
TextboxAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
TextboxAsset.Title.Size = Textbox.HideName and UDim2.fromScale(1,0)
or UDim2.new(1,0,0,TextboxAsset.Title.TextBounds.Y + 2)
TextboxAsset.Background.Position = UDim2.new(0.5,0,0,TextboxAsset.Title.Size.Y.Offset)
TextboxAsset.Size = UDim2.new(1,0,0,TextboxAsset.Title.Size.Y.Offset + TextboxAsset.Background.Size.Y.Offset)
end)
TextboxAsset.Background.Input:GetPropertyChangedSignal("Text"):Connect(function()
local TextBounds = GetTextBounds(
TextboxAsset.Background.Input.Text,
TextboxAsset.Background.Input.Font.Name,
Vector2.new(TextboxAsset.Background.Input.AbsoluteSize.X,TextboxAsset.Background.Input.TextSize)
)
TextboxAsset.Background.Size = UDim2.new(1,0,0,TextBounds.Y + 2)
TextboxAsset.Size = UDim2.new(1,0,0,TextboxAsset.Title.Size.Y.Offset + TextboxAsset.Background.Size.Y.Offset)
end)
TextboxAsset.Background.Input.Focused:Connect(function()
TextboxAsset.Background.Input.Text = Textbox.Value
end)
TextboxAsset.Background.Input.FocusLost:Connect(function(EnterPressed)
local Input = TextboxAsset.Background.Input
Textbox.EnterPressed = EnterPressed
Textbox.Value = Input.Text Textbox.EnterPressed = false
end)
Textbox:GetPropertyChangedSignal("Name"):Connect(function(Name)
TextboxAsset.Title.Text = Name
end)
Textbox:GetPropertyChangedSignal("Placeholder"):Connect(function(PlaceHolder)
TextboxAsset.Background.Input.PlaceholderText = PlaceHolder
end)
Textbox:GetPropertyChangedSignal("Value"):Connect(function(Value)
local Input = TextboxAsset.Background.Input
Input.Text = Textbox.AutoClear and "" or Value
if Textbox.PasswordMode then Input.Text = string.rep(utf8.char(8226),#Input.Text) end
TextboxAsset.Background.Size = UDim2.new(1,0,0,Input.TextSize + 2)
TextboxAsset.Size = UDim2.new(1,0,0,TextboxAsset.Title.Size.Y.Offset + TextboxAsset.Background.Size.Y.Offset)
Window.Flags[Textbox.Flag] = Value
Textbox.Callback(Value,Textbox.EnterPressed)
end)
function Textbox:ToolTip(Text)
Assets:ToolTip(TextboxAsset,ScreenAsset,Text)
end
end
function Assets:Keybind(Parent,ScreenAsset,Window,Keybind)
local KeybindAsset = GetAsset("Keybind/Keybind")
Keybind.WaitingForBind = false
KeybindAsset.Parent = Parent
KeybindAsset.Title.Text = Keybind.Name
KeybindAsset.Value.Text = "[ " .. Keybind.Value .. " ]"
KeybindAsset.MouseButton1Click:Connect(function()
KeybindAsset.Value.Text = "[ ... ]"
Keybind.WaitingForBind = true
end)
KeybindAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
KeybindAsset.Size = UDim2.new(1,0,0,KeybindAsset.Title.TextBounds.Y)
end)
KeybindAsset.Value:GetPropertyChangedSignal("TextBounds"):Connect(function()
KeybindAsset.Value.Size = UDim2.new(0,KeybindAsset.Value.TextBounds.X,1,0)
KeybindAsset.Title.Size = UDim2.new(1,-KeybindAsset.Value.Size.X.Offset,1,0)
end)
if type(Window.KeybindList) == "table" and not Keybind.IgnoreList then
Keybind.ListMimic = {}
Keybind.ListMimic.Asset = GetAsset("KeybindList/KeybindMimic")
Keybind.ListMimic.Asset.Title.Text = Keybind.Name
Keybind.ListMimic.Asset.Visible = Keybind.Value ~= "NONE"
Keybind.ListMimic.Asset.Parent = Window.KeybindList.List
Keybind.ListMimic.ColorConfig = {false,"BackgroundColor3"}
Window.Colorable[Keybind.ListMimic.Asset.Tick] = Keybind.ListMimic.ColorConfig
end
UserInputService.InputBegan:Connect(function(Input, GameProcessedEvent)
if GameProcessedEvent then return end
local Key = Input.KeyCode.Name
if Keybind.WaitingForBind and Input.UserInputType.Name == "Keyboard" then
Keybind.Value = Key
elseif Input.UserInputType.Name == "Keyboard" then
if Key == Keybind.Value then
Keybind.Toggle = not Keybind.Toggle
if Keybind.ListMimic then
Keybind.ListMimic.ColorConfig[1] = true
Keybind.ListMimic.Asset.Tick.BackgroundColor3 = Window.Color
end
Keybind.Callback(Keybind.Value,true,Keybind.Toggle)
end
end
if Keybind.Mouse then Key = Input.UserInputType.Name
if Keybind.WaitingForBind and (Key == "MouseButton1"
or Key == "MouseButton2" or Key == "MouseButton3") then
Keybind.Value = Key
elseif Key == "MouseButton1"
or Key == "MouseButton2"
or Key == "MouseButton3" then
if Key == Keybind.Value then
Keybind.Toggle = not Keybind.Toggle
if Keybind.ListMimic then
Keybind.ListMimic.ColorConfig[1] = true
Keybind.ListMimic.Asset.Tick.BackgroundColor3 = Window.Color
end
Keybind.Callback(Keybind.Value,true,Keybind.Toggle)
end
end
end
end)
UserInputService.InputEnded:Connect(function(Input, GameProcessedEvent)
if GameProcessedEvent then return end
local Key = Input.KeyCode.Name
if Input.UserInputType.Name == "Keyboard" then
if Key == Keybind.Value then
if Keybind.ListMimic then
Keybind.ListMimic.ColorConfig[1] = false
Keybind.ListMimic.Asset.Tick.BackgroundColor3 = Color3.fromRGB(60,60,60)
end
Keybind.Callback(Keybind.Value,false,Keybind.Toggle)
end
end
if Keybind.Mouse then Key = Input.UserInputType.Name
if Key == "MouseButton1"
or Key == "MouseButton2"
or Key == "MouseButton3" then
if Key == Keybind.Value then
if Keybind.ListMimic then
Keybind.ListMimic.ColorConfig[1] = false
Keybind.ListMimic.Asset.Tick.BackgroundColor3 = Color3.fromRGB(60,60,60)
end
Keybind.Callback(Keybind.Value,false,Keybind.Toggle)
end
end
end
end)
Keybind:GetPropertyChangedSignal("Name"):Connect(function(Name)
KeybindAsset.Title.Text = Name
end)
Keybind:GetPropertyChangedSignal("Value"):Connect(function(Value,OldValue)
if table.find(Keybind.Blacklist,Value) then
if Keybind.DoNotClear then
Keybind.Internal.Value = OldValue
Value = OldValue
else
Keybind.Internal.Value = "NONE"
Value = "NONE"
end
end
KeybindAsset.Value.Text = "[ " .. tostring(Value) .. " ]"
if Keybind.ListMimic then
Keybind.ListMimic.Asset.Visible = Value ~= "NONE"
Keybind.ListMimic.Asset.Layout.TKeybind.Text = "[ " .. tostring(Value) .. " ]"
end
Keybind.WaitingForBind = false
Window.Flags[Keybind.Flag] = Value
Keybind.Callback(Value,false,Keybind.Toggle)
end)
function Keybind:ToolTip(Text)
Assets:ToolTip(KeybindAsset,ScreenAsset,Text)
end
end
function Assets:ToggleKeybind(Parent,ScreenAsset,Window,Keybind,Toggle)
local KeybindAsset = GetAsset("Keybind/TKeybind")
Keybind.WaitingForBind = false
Keybind.Toggle = Toggle
KeybindAsset.Parent = Parent
KeybindAsset.Text = "[ " .. Keybind.Value .. " ]"
KeybindAsset.MouseButton1Click:Connect(function()
KeybindAsset.Text = "[ ... ]"
Keybind.WaitingForBind = true
end)
KeybindAsset:GetPropertyChangedSignal("TextBounds"):Connect(function()
KeybindAsset.Size = UDim2.new(0,KeybindAsset.TextBounds.X,1,0)
end)
if type(Window.KeybindList) == "table" and not Keybind.IgnoreList then
Keybind.ListMimic = {}
Keybind.ListMimic.Asset = GetAsset("KeybindList/KeybindMimic")
Keybind.ListMimic.Asset.Title.Text = Toggle.Name
Keybind.ListMimic.Asset.Visible = Keybind.Value ~= "NONE"
Keybind.ListMimic.Asset.Parent = Window.KeybindList.List
Keybind.ListMimic.ColorConfig = {false,"BackgroundColor3"}
Window.Colorable[Keybind.ListMimic.Asset.Tick] = Keybind.ListMimic.ColorConfig
end
UserInputService.InputBegan:Connect(function(Input, GameProcessedEvent)
if GameProcessedEvent then return end
local Key = Input.KeyCode.Name
if Keybind.WaitingForBind and Input.UserInputType.Name == "Keyboard" then
Keybind.Value = Key
elseif Input.UserInputType.Name == "Keyboard" then
if Key == Keybind.Value then
if not Keybind.DisableToggle then Toggle.Value = not Toggle.Value end
Keybind.Callback(Keybind.Value,true,Toggle.Value)
end
end
if Keybind.Mouse then Key = Input.UserInputType.Name
if Keybind.WaitingForBind and (Key == "MouseButton1"
or Key == "MouseButton2" or Key == "MouseButton3") then
Keybind.Value = Key
elseif Key == "MouseButton1"
or Key == "MouseButton2"
or Key == "MouseButton3" then
if Key == Keybind.Value then
if not Keybind.DisableToggle then Toggle.Value = not Toggle.Value end
Keybind.Callback(Keybind.Value,true,Toggle.Value)
end
end
end
end)
UserInputService.InputEnded:Connect(function(Input, GameProcessedEvent)
if GameProcessedEvent then return end
local Key = Input.KeyCode.Name
if Input.UserInputType.Name == "Keyboard" then
if Key == Keybind.Value then
Keybind.Callback(Keybind.Value,false,Toggle.Value)
end
end
if Keybind.Mouse then Key = Input.UserInputType.Name
if Key == "MouseButton1"
or Key == "MouseButton2"
or Key == "MouseButton3" then
if Key == Keybind.Value then
Keybind.Callback(Keybind.Value,false,Toggle.Value)
end
end
end
end)
Toggle:GetPropertyChangedSignal("Value"):Connect(function(Value)
if Keybind.ListMimic then
Keybind.ListMimic.ColorConfig[1] = Value
Keybind.ListMimic.Asset.Tick.BackgroundColor3 = Value
and Window.Color or Color3.fromRGB(60,60,60)
end
end)
Keybind:GetPropertyChangedSignal("Value"):Connect(function(Value,OldValue)
if table.find(Keybind.Blacklist,Value) then
if Keybind.DoNotClear then
Keybind.Internal.Value = OldValue
Value = OldValue
else
Keybind.Internal.Value = "NONE"
Value = "NONE"
end
end
KeybindAsset.Text = "[ " .. tostring(Value) .. " ]"
if Keybind.ListMimic then
Keybind.ListMimic.Asset.Visible = Value ~= "NONE"
Keybind.ListMimic.Asset.Layout.TKeybind.Text = "[ " .. tostring(Value) .. " ]"
end
Keybind.WaitingForBind = false
Window.Flags[Keybind.Flag] = Value
Keybind.Callback(Value,false,Toggle.Value)
end)
end
function Assets:Dropdown(Parent,ScreenAsset,Window,Dropdown)
local OptionContainerAsset = GetAsset("Dropdown/OptionContainer")
local DropdownAsset = GetAsset("Dropdown/Dropdown")
Dropdown.Internal.Value = {}
local ContainerRender = nil
DropdownAsset.Parent = Parent
OptionContainerAsset.Parent = ScreenAsset
DropdownAsset.Title.Text = Dropdown.Name
DropdownAsset.Title.Visible = not Dropdown.HideName
DropdownAsset.MouseButton1Click:Connect(function()
if not OptionContainerAsset.Visible and OptionContainerAsset.ListLayout.AbsoluteContentSize.Y ~= 0 then
ContainerRender = RunService.RenderStepped:Connect(function()
if not OptionContainerAsset.Visible then ContainerRender:Disconnect() end
OptionContainerAsset.Position = UDim2.fromOffset(
DropdownAsset.Background.AbsolutePosition.X + 1,
DropdownAsset.Background.AbsolutePosition.Y + DropdownAsset.Background.AbsoluteSize.Y + 40
)
OptionContainerAsset.Size = UDim2.fromOffset(
DropdownAsset.Background.AbsoluteSize.X,
math.clamp(OptionContainerAsset.ListLayout.AbsoluteContentSize.Y,16,112) + 4
--OptionContainerAsset.ListLayout.AbsoluteContentSize.Y + 2
)
end)
OptionContainerAsset.Visible = true
else
OptionContainerAsset.Visible = false
end
end)
DropdownAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
DropdownAsset.Title.Size = Dropdown.HideName and UDim2.fromScale(1,0)
or UDim2.new(1,0,0,DropdownAsset.Title.TextBounds.Y + 2)
DropdownAsset.Background.Position = UDim2.new(0.5,0,0,DropdownAsset.Title.Size.Y.Offset)
DropdownAsset.Size = UDim2.new(1,0,0,DropdownAsset.Title.Size.Y.Offset + DropdownAsset.Background.Size.Y.Offset)
end)
OptionContainerAsset.ListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
OptionContainerAsset.CanvasSize = UDim2.fromOffset(0,OptionContainerAsset.ListLayout.AbsoluteContentSize.Y + 4)
end)
--[[DropdownAsset.Background.Value:GetPropertyChangedSignal("TextBounds"):Connect(function()
DropdownAsset.Background.Size = UDim2.new(1,0,0,DropdownAsset.Background.Value.TextBounds.Y + 2)
DropdownAsset.Size = UDim2.new(1,0,0,DropdownAsset.Title.Size.Y.Offset + DropdownAsset.Background.Size.Y.Offset)
end)]]
local function RefreshSelected()
table.clear(Dropdown.Internal.Value)
for Index,Option in pairs(Dropdown.List) do
if Option.Value then
table.insert(Dropdown.Internal.Value,Option.Name)
end
end
Window.Flags[Dropdown.Flag] = Dropdown.Internal.Value
DropdownAsset.Background.Value.Text = #Dropdown.Internal.Value == 0
and "..." or table.concat(Dropdown.Internal.Value,", ")
end
local function SetValue(Option,Value)
Option.Value = Value
Option.ColorConfig[1] = Value
Option.Object.Tick.BackgroundColor3 = Value
and Window.Color or Color3.fromRGB(60,60,60)
--Option.Callback(Dropdown.Selected,Option)
end
local function AddOption(Option,AddToList,Order)
Option = GetType(Option,{},"table",true)
Option.Name = GetType(Option.Name,"Option","string")
Option.Mode = GetType(Option.Mode,"Button","string")
Option.Value = GetType(Option.Value,false,"boolean")
Option.Callback = GetType(Option.Callback,function() end,"function")
local OptionAsset = GetAsset("Dropdown/Option")
Option.Object = OptionAsset
OptionAsset.LayoutOrder = Order
OptionAsset.Parent = OptionContainerAsset
OptionAsset.Title.Text = Option.Name
OptionAsset.Tick.BackgroundColor3 = Option.Value
and Window.Color or Color3.fromRGB(60,60,60)
Option.ColorConfig = {Option.Value,"BackgroundColor3"}
Window.Colorable[OptionAsset.Tick] = Option.ColorConfig
if AddToList then table.insert(Dropdown.List,Option) end
OptionAsset.MouseButton1Click:Connect(function()
Option.Value = not Option.Value
end)
OptionAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
OptionAsset.Layout.Size = UDim2.new(1,-OptionAsset.Title.TextBounds.X - 22,1,0)
end)
Option:GetPropertyChangedSignal("Name"):Connect(function(Name)
OptionAsset.Title.Text = Name
end)
Option:GetPropertyChangedSignal("Value"):Connect(function(Value)
if Option.Mode == "Button" then
for Index,OldOption in pairs(Dropdown.List) do
SetValue(OldOption.Internal,false)
end Option.Internal.Value = true
Value = Option.Internal.Value
OptionContainerAsset.Visible = false
end
RefreshSelected()
Option.ColorConfig[1] = Value
Option.Object.Tick.BackgroundColor3 = Value
and Window.Color or Color3.fromRGB(60,60,60)
Option.Callback(Dropdown.Value,Option)
end)
for Index,Value in pairs(Option.Internal) do
if string.find(Index,"Colorpicker") then
Option[Index] = GetType(Option[Index],{},"table",true)
Option[Index].Flag = GetType(Option[Index].Flag,
Dropdown.Flag .. "/" .. Option.Name .. "/Colorpicker","string")
Option[Index].Value = GetType(Option[Index].Value,{1,1,1,0,false},"table")
Option[Index].Callback = GetType(Option[Index].Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Option[Index]
Window.Flags[Option[Index].Flag] = Option[Index].Value
Assets:ToggleColorpicker(OptionAsset.Layout,ScreenAsset,Window,Option[Index])
end
end
return Option
end
-- Dropdown Update
for Index,Option in pairs(Dropdown.List) do
Dropdown.List[Index] = AddOption(Option,false,Index)
end for Index,Option in pairs(Dropdown.List) do
if Option.Value then Option.Value = true end
end RefreshSelected()
function Dropdown:BulkAdd(Table)
for Index,Option in pairs(Table) do
AddOption(Option,true,Index)
end
end
function Dropdown:AddOption(Option)
AddOption(Option,true,#Dropdown.List)
end
function Dropdown:Clear()
for Index,Option in pairs(Dropdown.List) do
Option.Object:Destroy()
end table.clear(Dropdown.List)
end
function Dropdown:RemoveOption(Name)
for Index,Option in pairs(Dropdown.List) do
if Option.Name == Name then
Option.Object:Destroy()
table.remove(Dropdown.List,Index)
end
end
for Index,Option in pairs(Dropdown.List) do
Option.Object.LayoutOrder = Index
end
end
function Dropdown:RefreshToPlayers(ToggleMode)
local Players = {}
for Index,Player in pairs(PlayerService:GetPlayers()) do
if Player == LocalPlayer then continue end
table.insert(Players,{Name = Player.Name,
Mode = ToggleMode == "Toggle" or "Button"
})
end
Dropdown:Clear()
Dropdown:BulkAdd(Players)
end
--[[function Dropdown:SetValue(Options)
for Index,Option in pairs(Dropdown.List) do
if table.find(Options,Option.Name) then
Option.Value = true
else
Option.Value = false
end
end
end]]
Dropdown:GetPropertyChangedSignal("Name"):Connect(function(Name)
DropdownAsset.Title.Text = Name
end)
Dropdown:GetPropertyChangedSignal("Value"):Connect(function(Value)
if type(Value) ~= "table" then return end
if #Value == 0 then RefreshSelected() return end
for Index,Option in pairs(Dropdown.List) do
if table.find(Value,Option.Name) then
Option.Value = true
else
if Option.Mode ~= "Button" then
Option.Value = false
end
end
end
end)
function Dropdown:ToolTip(Text)
Assets:ToolTip(DropdownAsset,ScreenAsset,Text)
end
end
function Assets:Colorpicker(Parent,ScreenAsset,Window,Colorpicker)
local ColorpickerAsset = GetAsset("Colorpicker/Colorpicker")
local PaletteAsset = GetAsset("Colorpicker/Palette")
Colorpicker.ColorConfig = {Colorpicker.Value[5],"BackgroundColor3"}
Window.Colorable[PaletteAsset.Rainbow.Tick] = Colorpicker.ColorConfig
local PaletteRender,SVRender,HueRender,AlphaRender = nil,nil,nil,nil
ColorpickerAsset.Parent = Parent
PaletteAsset.Parent = ScreenAsset
ColorpickerAsset.Title.Text = Colorpicker.Name
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
ColorpickerAsset.Title:GetPropertyChangedSignal("TextBounds"):Connect(function()
ColorpickerAsset.Size = UDim2.new(1,0,0,ColorpickerAsset.Title.TextBounds.Y)
end)
ColorpickerAsset.MouseButton1Click:Connect(function()
if not PaletteAsset.Visible then
PaletteAsset.Visible = true
PaletteRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then PaletteRender:Disconnect() end
PaletteAsset.Position = UDim2.fromOffset(
(ColorpickerAsset.Color.AbsolutePosition.X - PaletteAsset.AbsoluteSize.X) + 21,
ColorpickerAsset.Color.AbsolutePosition.Y + 50
)
end)
else
PaletteAsset.Visible = false
end
end)
PaletteAsset.Rainbow.MouseButton1Click:Connect(function()
Colorpicker.Value[5] = not Colorpicker.Value[5]
Colorpicker.ColorConfig[1] = Colorpicker.Value[5]
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
end)
PaletteAsset.SVPicker.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if SVRender then SVRender:Disconnect() end
SVRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then SVRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.SVPicker.AbsolutePosition.X,0,PaletteAsset.SVPicker.AbsoluteSize.X) / PaletteAsset.SVPicker.AbsoluteSize.X
local ColorY = math.clamp(Mouse.Y - (PaletteAsset.SVPicker.AbsolutePosition.Y + 36),0,PaletteAsset.SVPicker.AbsoluteSize.Y) / PaletteAsset.SVPicker.AbsoluteSize.Y
Colorpicker.Value[2] = ColorX
Colorpicker.Value[3] = 1 - ColorY
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.SVPicker.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if SVRender then SVRender:Disconnect() end
end
end)
PaletteAsset.Hue.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if HueRender then HueRender:Disconnect() end
HueRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then HueRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.Hue.AbsolutePosition.X,0,PaletteAsset.Hue.AbsoluteSize.X) / PaletteAsset.Hue.AbsoluteSize.X
Colorpicker.Value[1] = 1 - ColorX
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.Hue.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if HueRender then HueRender:Disconnect() end
end
end)
PaletteAsset.Alpha.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if AlphaRender then AlphaRender:Disconnect() end
AlphaRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then AlphaRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.Alpha.AbsolutePosition.X,0,PaletteAsset.Alpha.AbsoluteSize.X) / PaletteAsset.Alpha.AbsoluteSize.X
Colorpicker.Value[4] = math.floor(ColorX * 10^2) / (10^2) -- idk %.2f little bit broken with this
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.Alpha.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if AlphaRender then AlphaRender:Disconnect() end
end
end)
PaletteAsset.RGB.RGBBox.FocusLost:Connect(function(Enter)
if not Enter then return end
local ColorString = string.split(string.gsub(PaletteAsset.RGB.RGBBox.Text," ",""),",")
local Hue,Saturation,Value = Color3.fromRGB(ColorString[1],ColorString[2],ColorString[3]):ToHSV()
PaletteAsset.RGB.RGBBox.Text = ""
Colorpicker.Value[1] = Hue
Colorpicker.Value[2] = Saturation
Colorpicker.Value[3] = Value
Colorpicker.Value = Colorpicker.Value
end)
PaletteAsset.HEX.HEXBox.FocusLost:Connect(function(Enter)
if not Enter then return end
local Hue,Saturation,Value = Color3.fromHex("#" .. PaletteAsset.HEX.HEXBox.Text):ToHSV()
PaletteAsset.RGB.RGBBox.Text = ""
Colorpicker.Value[1] = Hue
Colorpicker.Value[2] = Saturation
Colorpicker.Value[3] = Value
Colorpicker.Value = Colorpicker.Value
end)
RunService.Heartbeat:Connect(function()
if Colorpicker.Value[5] then
if PaletteAsset.Visible then
Colorpicker.Value[1] = Window.RainbowHue
Colorpicker.Value = Colorpicker.Value
else
Colorpicker.Value[1] = Window.RainbowHue
Colorpicker.Value[6] = TableToColor(Colorpicker.Value)
ColorpickerAsset.Color.BackgroundColor3 = Colorpicker.Value[6]
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Colorpicker.Callback(Colorpicker.Value,Colorpicker.Value[6])
end
end
end)
Colorpicker:GetPropertyChangedSignal("Name"):Connect(function(Name)
ColorpickerAsset.Title.Text = Name
end)
Colorpicker:GetPropertyChangedSignal("Value"):Connect(function(Value)
Value[6] = TableToColor(Value)
Colorpicker.ColorConfig[1] = Colorpicker.Value[5]
ColorpickerAsset.Color.BackgroundColor3 = Value[6]
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
PaletteAsset.SVPicker.BackgroundColor3 = Color3.fromHSV(Value[1],1,1)
PaletteAsset.SVPicker.Pin.Position = UDim2.fromScale(Value[2],1 - Value[3])
PaletteAsset.Hue.Pin.Position = UDim2.fromScale(1 - Value[1],0.5)
PaletteAsset.Alpha.Pin.Position = UDim2.fromScale(Value[4],0.5)
PaletteAsset.Alpha.Value.Text = Value[4]
PaletteAsset.Alpha.BackgroundColor3 = Value[6]
PaletteAsset.RGB.RGBBox.PlaceholderText = ColorToString(Value[6])
PaletteAsset.HEX.HEXBox.PlaceholderText = Value[6]:ToHex()
Window.Flags[Colorpicker.Flag] = Value
Colorpicker.Callback(Value,Value[6])
end) Colorpicker.Value = Colorpicker.Value
function Colorpicker:ToolTip(Text)
Assets:ToolTip(ColorpickerAsset,ScreenAsset,Text)
end
end
function Assets:ToggleColorpicker(Parent,ScreenAsset,Window,Colorpicker)
local ColorpickerAsset = GetAsset("Colorpicker/TColorpicker")
local PaletteAsset = GetAsset("Colorpicker/Palette")
Colorpicker.ColorConfig = {Colorpicker.Value[5],"BackgroundColor3"}
Window.Colorable[PaletteAsset.Rainbow.Tick] = Colorpicker.ColorConfig
local PaletteRender,SVRender,HueRender,AlphaRender = nil,nil,nil,nil
ColorpickerAsset.Parent = Parent
PaletteAsset.Parent = ScreenAsset
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
ColorpickerAsset.MouseButton1Click:Connect(function()
if not PaletteAsset.Visible then
PaletteAsset.Visible = true
PaletteRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then PaletteRender:Disconnect() end
PaletteAsset.Position = UDim2.fromOffset(
(ColorpickerAsset.AbsolutePosition.X - PaletteAsset.AbsoluteSize.X) + 21,
ColorpickerAsset.AbsolutePosition.Y + 50
)
end)
else
PaletteAsset.Visible = false
end
end)
PaletteAsset.Rainbow.MouseButton1Click:Connect(function()
Colorpicker.Value[5] = not Colorpicker.Value[5]
Colorpicker.ColorConfig[1] = Colorpicker.Value[5]
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
end)
PaletteAsset.SVPicker.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if SVRender then SVRender:Disconnect() end
SVRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then SVRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.SVPicker.AbsolutePosition.X,0,PaletteAsset.SVPicker.AbsoluteSize.X) / PaletteAsset.SVPicker.AbsoluteSize.X
local ColorY = math.clamp(Mouse.Y - (PaletteAsset.SVPicker.AbsolutePosition.Y + 36),0,PaletteAsset.SVPicker.AbsoluteSize.Y) / PaletteAsset.SVPicker.AbsoluteSize.Y
Colorpicker.Value[2] = ColorX
Colorpicker.Value[3] = 1 - ColorY
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.SVPicker.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if SVRender then SVRender:Disconnect() end
end
end)
PaletteAsset.Hue.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if HueRender then HueRender:Disconnect() end
HueRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then HueRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.Hue.AbsolutePosition.X,0,PaletteAsset.Hue.AbsoluteSize.X) / PaletteAsset.Hue.AbsoluteSize.X
Colorpicker.Value[1] = 1 - ColorX
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.Hue.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if HueRender then HueRender:Disconnect() end
end
end)
PaletteAsset.Alpha.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if AlphaRender then AlphaRender:Disconnect() end
AlphaRender = RunService.RenderStepped:Connect(function()
if not PaletteAsset.Visible then AlphaRender:Disconnect() end
local Mouse = UserInputService:GetMouseLocation()
local ColorX = math.clamp(Mouse.X - PaletteAsset.Alpha.AbsolutePosition.X,0,PaletteAsset.Alpha.AbsoluteSize.X) / PaletteAsset.Alpha.AbsoluteSize.X
Colorpicker.Value[4] = math.floor(ColorX * 10^2) / (10^2) -- idk %.2f little bit broken with this
Colorpicker.Value = Colorpicker.Value
end)
end
end)
PaletteAsset.Alpha.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
if AlphaRender then AlphaRender:Disconnect() end
end
end)
PaletteAsset.RGB.RGBBox.FocusLost:Connect(function(Enter)
if not Enter then return end
local ColorString = string.split(string.gsub(PaletteAsset.RGB.RGBBox.Text," ",""),",")
local Hue,Saturation,Value = Color3.fromRGB(ColorString[1],ColorString[2],ColorString[3]):ToHSV()
PaletteAsset.RGB.RGBBox.Text = ""
Colorpicker.Value[1] = Hue
Colorpicker.Value[2] = Saturation
Colorpicker.Value[3] = Value
Colorpicker.Value = Colorpicker.Value
end)
PaletteAsset.HEX.HEXBox.FocusLost:Connect(function(Enter)
if not Enter then return end
local Hue,Saturation,Value = Color3.fromHex("#" .. PaletteAsset.HEX.HEXBox.Text):ToHSV()
PaletteAsset.RGB.RGBBox.Text = ""
Colorpicker.Value[1] = Hue
Colorpicker.Value[2] = Saturation
Colorpicker.Value[3] = Value
Colorpicker.Value = Colorpicker.Value
end)
RunService.Heartbeat:Connect(function()
if Colorpicker.Value[5] then
if PaletteAsset.Visible then
Colorpicker.Value[1] = Window.RainbowHue
Colorpicker.Value = Colorpicker.Value
else
Colorpicker.Value[1] = Window.RainbowHue
Colorpicker.Value[6] = TableToColor(Colorpicker.Value)
ColorpickerAsset.BackgroundColor3 = Colorpicker.Value[6]
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Colorpicker.Callback(Colorpicker.Value,Colorpicker.Value[6])
end
end
end)
Colorpicker:GetPropertyChangedSignal("Value"):Connect(function(Value)
Value[6] = TableToColor(Value)
Colorpicker.ColorConfig[1] = Colorpicker.Value[5]
ColorpickerAsset.BackgroundColor3 = Value[6]
PaletteAsset.Rainbow.Tick.BackgroundColor3 = Colorpicker.Value[5]
and Window.Color or Color3.fromRGB(60,60,60)
PaletteAsset.SVPicker.BackgroundColor3 = Color3.fromHSV(Value[1],1,1)
PaletteAsset.SVPicker.Pin.Position = UDim2.fromScale(Value[2],1 - Value[3])
PaletteAsset.Hue.Pin.Position = UDim2.fromScale(1 - Value[1],0.5)
PaletteAsset.Alpha.Pin.Position = UDim2.fromScale(Value[4],0.5)
PaletteAsset.Alpha.Value.Text = Value[4]
PaletteAsset.Alpha.BackgroundColor3 = Value[6]
PaletteAsset.RGB.RGBBox.PlaceholderText = ColorToString(Value[6])
PaletteAsset.HEX.HEXBox.PlaceholderText = Value[6]:ToHex()
Window.Flags[Colorpicker.Flag] = Value
Colorpicker.Callback(Value,Value[6])
end) Colorpicker.Value = Colorpicker.Value
end
local Bracket = Assets:Screen()
function Bracket:Window(Window)
Window = GetType(Window,{},"table",true)
Window.Blur = GetType(Window.Blur,false,"boolean")
Window.Name = GetType(Window.Name,"Window","string")
Window.Enabled = GetType(Window.Enabled,true,"boolean")
Window.Color = GetType(Window.Color,Color3.new(1,0.5,0.25),"Color3")
Window.Position = GetType(Window.Position,UDim2.new(0.5,-248,0.5,-248),"UDim2")
Window.Size = GetType(Window.Size,UDim2.new(0,496,0,496),"UDim2")
local WindowAsset = Assets:Window(Bracket.ScreenAsset,Window)
function Window:Tab(Tab)
Tab = GetType(Tab,{},"table",true)
Tab.Name = GetType(Tab.Name,"Tab","string")
local TabAsset = Assets:Tab(Bracket.ScreenAsset,WindowAsset,Window,Tab)
function Tab:AddConfigSection(FolderName,Side)
local ConfigSection = Tab:Section({Name = "Config System",Side = Side}) do
local ConfigList,ConfigDropdown = ConfigsToList(FolderName),nil
local ALConfig = Window:GetAutoLoadConfig(FolderName)
local function UpdateList(Name) ConfigDropdown:Clear()
ConfigList = ConfigsToList(FolderName) ConfigDropdown:BulkAdd(ConfigList)
ConfigDropdown.Value = {}
--ConfigDropdown.Value = {Name or (ConfigList[#ConfigList] and ConfigList[#ConfigList].Name)}
end
local ConfigTextbox = ConfigSection:Textbox({HideName = true,Placeholder = "Config Name",IgnoreFlag = true})
ConfigSection:Button({Name = "Create",Callback = function()
Window:SaveConfig(FolderName,ConfigTextbox.Value) UpdateList(ConfigTextbox.Value)
end})
ConfigSection:Divider({Text = "Configs"})
ConfigDropdown = ConfigSection:Dropdown({HideName = true,IgnoreFlag = true,List = ConfigList})
--ConfigDropdown.Value = {ConfigList[#ConfigList] and ConfigList[#ConfigList].Name}
ConfigSection:Button({Name = "Save",Callback = function()
if ConfigDropdown.Value and ConfigDropdown.Value[1] then
Window:SaveConfig(FolderName,ConfigDropdown.Value[1])
else
Bracket:Notification({
Title = "Config System",
Description = "Select Config First",
Duration = 10
})
end
end})
ConfigSection:Button({Name = "Load",Callback = function()
if ConfigDropdown.Value and ConfigDropdown.Value[1] then
Window:LoadConfig(FolderName,ConfigDropdown.Value[1])
else
Bracket:Notification({
Title = "Config System",
Description = "Select Config First",
Duration = 10
})
end
end})
ConfigSection:Button({Name = "Delete",Callback = function()
if ConfigDropdown.Value and ConfigDropdown.Value[1] then
Window:DeleteConfig(FolderName,ConfigDropdown.Value[1])
UpdateList()
else
Bracket:Notification({
Title = "Config System",
Description = "Select Config First",
Duration = 10
})
end
end})
ConfigSection:Button({Name = "Refresh",Callback = UpdateList})
local ConfigDivider = ConfigSection:Divider({Text = not ALConfig and "AutoLoad Config"
or "AutoLoad Config\n[ " .. ALConfig .. " ]"})
ConfigSection:Button({Name = "Set AutoLoad Config",Callback = function()
if ConfigDropdown.Value and ConfigDropdown.Value[1] then
Window:AddToAutoLoad(FolderName,ConfigDropdown.Value[1])
ConfigDivider.Text = "AutoLoad Config\n[ " .. ConfigDropdown.Value[1] .. " ]"
else
Bracket:Notification({
Title = "Config System",
Description = "Select Config First",
Duration = 10
})
end
end})
ConfigSection:Button({Name = "Clear AutoLoad Config",Callback = function()
Window:RemoveFromAutoLoad(FolderName)
ConfigDivider.Text = "AutoLoad Config"
end})
end
end
function Tab:Divider(Divider)
Divider = GetType(Divider,{},"table",true)
Divider.Text = GetType(Divider.Text,"","string")
Assets:Divider(ChooseTabSide(TabAsset,Divider.Side),Divider)
return Divider
end
function Tab:Label(Label)
Label = GetType(Label,{},"table",true)
Label.Text = GetType(Label.Text,"Label","string")
Assets:Label(ChooseTabSide(TabAsset,Label.Side),Label)
return Label
end
function Tab:Button(Button)
Button = GetType(Button,{},"table",true)
Button.Name = GetType(Button.Name,"Button","string")
Button.Callback = GetType(Button.Callback,function() end,"function")
Assets:Button(ChooseTabSide(TabAsset,Button.Side),Bracket.ScreenAsset,Window,Button)
return Button
end
function Tab:Toggle(Toggle)
Toggle = GetType(Toggle,{},"table",true)
Toggle.Name = GetType(Toggle.Name,"Toggle","string")
Toggle.Flag = GetType(Toggle.Flag,Toggle.Name,"string")
Toggle.Value = GetType(Toggle.Value,false,"boolean")
Toggle.Callback = GetType(Toggle.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Toggle
Window.Flags[Toggle.Flag] = Toggle.Value
local ToggleAsset = Assets:Toggle(ChooseTabSide(TabAsset,Toggle.Side),Bracket.ScreenAsset,Window,Toggle)
function Toggle:Keybind(Keybind)
Keybind = GetType(Keybind,{},"table",true)
Keybind.Flag = GetType(Keybind.Flag,Toggle.Flag .. "/Keybind","string")
Keybind.Value = GetType(Keybind.Value,"NONE","string")
Keybind.Mouse = GetType(Keybind.Mouse,false,"boolean")
Keybind.Callback = GetType(Keybind.Callback,function() end,"function")
Keybind.Blacklist = GetType(Keybind.Blacklist,{"W","A","S","D","Slash","Tab","Backspace","Escape","Space","Delete","Unknown","Backquote"},"table")
Window.Elements[#Window.Elements + 1] = Keybind
Window.Flags[Keybind.Flag] = Keybind.Value
Assets:ToggleKeybind(ToggleAsset.Layout,Bracket.ScreenAsset,Window,Keybind,Toggle)
return Keybind
end
function Toggle:Colorpicker(Colorpicker)
Colorpicker = GetType(Colorpicker,{},"table",true)
Colorpicker.Flag = GetType(Colorpicker.Flag,Toggle.Flag .. "/Colorpicker","string")
Colorpicker.Value = GetType(Colorpicker.Value,{1,1,1,0,false},"table")
Colorpicker.Callback = GetType(Colorpicker.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Colorpicker
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Assets:ToggleColorpicker(ToggleAsset.Layout,Bracket.ScreenAsset,Window,Colorpicker)
return Colorpicker
end
return Toggle
end
function Tab:Slider(Slider)
Slider = GetType(Slider,{},"table",true)
Slider.Name = GetType(Slider.Name,"Slider","string")
Slider.Flag = GetType(Slider.Flag,Slider.Name,"string")
Slider.Min = GetType(Slider.Min,0,"number")
Slider.Max = GetType(Slider.Max,100,"number")
Slider.Precise = GetType(Slider.Precise,0,"number")
Slider.Unit = GetType(Slider.Unit,"","string")
Slider.Value = GetType(Slider.Value,Slider.Max / 2,"number")
Slider.Callback = GetType(Slider.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Slider
Window.Flags[Slider.Flag] = Slider.Value
Assets:Slider(ChooseTabSide(TabAsset,Slider.Side),Bracket.ScreenAsset,Window,Slider)
return Slider
end
function Tab:Textbox(Textbox)
Textbox = GetType(Textbox,{},"table",true)
Textbox.Name = GetType(Textbox.Name,"Textbox","string")
Textbox.Flag = GetType(Textbox.Flag,Textbox.Name,"string")
Textbox.Value = GetType(Textbox.Value,"","string")
Textbox.NumbersOnly = GetType(Textbox.NumbersOnly,false,"boolean")
Textbox.Placeholder = GetType(Textbox.Placeholder,"Input here","string")
Textbox.Callback = GetType(Textbox.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Textbox
Window.Flags[Textbox.Flag] = Textbox.Value
Assets:Textbox(ChooseTabSide(TabAsset,Textbox.Side),Bracket.ScreenAsset,Window,Textbox)
return Textbox
end
function Tab:Keybind(Keybind)
Keybind = GetType(Keybind,{},"table",true)
Keybind.Name = GetType(Keybind.Name,"Keybind","string")
Keybind.Flag = GetType(Keybind.Flag,Keybind.Name,"string")
Keybind.Value = GetType(Keybind.Value,"NONE","string")
Keybind.Mouse = GetType(Keybind.Mouse,false,"boolean")
Keybind.Callback = GetType(Keybind.Callback,function() end,"function")
Keybind.Blacklist = GetType(Keybind.Blacklist,{"W","A","S","D","Slash","Tab","Backspace","Escape","Space","Delete","Unknown","Backquote"},"table")
Window.Elements[#Window.Elements + 1] = Keybind
Window.Flags[Keybind.Flag] = Keybind.Value
Assets:Keybind(ChooseTabSide(TabAsset,Keybind.Side),Bracket.ScreenAsset,Window,Keybind)
return Keybind
end
function Tab:Dropdown(Dropdown)
Dropdown = GetType(Dropdown,{},"table",true)
Dropdown.Name = GetType(Dropdown.Name,"Dropdown","string")
Dropdown.Flag = GetType(Dropdown.Flag,Dropdown.Name,"string")
Dropdown.List = GetType(Dropdown.List,{},"table")
Window.Elements[#Window.Elements + 1] = Dropdown
Window.Flags[Dropdown.Flag] = Dropdown.Value
Assets:Dropdown(ChooseTabSide(TabAsset,Dropdown.Side),Bracket.ScreenAsset,Window,Dropdown)
return Dropdown
end
function Tab:Colorpicker(Colorpicker)
Colorpicker = GetType(Colorpicker,{},"table",true)
Colorpicker.Name = GetType(Colorpicker.Name,"Colorpicker","string")
Colorpicker.Flag = GetType(Colorpicker.Flag,Colorpicker.Name,"string")
Colorpicker.Value = GetType(Colorpicker.Value,{1,1,1,0,false},"table")
Colorpicker.Callback = GetType(Colorpicker.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Colorpicker
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Assets:Colorpicker(ChooseTabSide(TabAsset,Colorpicker.Side),Bracket.ScreenAsset,Window,Colorpicker)
return Colorpicker
end
function Tab:Section(Section)
Section = GetType(Section,{},"table",true)
Section.Name = GetType(Section.Name,"Section","string")
local SectionContainer = Assets:Section(ChooseTabSide(TabAsset,Section.Side),Section)
function Section:Divider(Divider)
Divider = GetType(Divider,{},"table",true)
Divider.Text = GetType(Divider.Text,"","string")
Assets:Divider(SectionContainer,Divider)
return Divider
end
function Section:Label(Label)
Label = GetType(Label,{},"table",true)
Label.Text = GetType(Label.Text,"Label","string")
Assets:Label(SectionContainer,Label)
return Label
end
function Section:Button(Button)
Button = GetType(Button,{},"table",true)
Button.Name = GetType(Button.Name,"Button","string")
Button.Callback = GetType(Button.Callback,function() end,"function")
Assets:Button(SectionContainer,Bracket.ScreenAsset,Window,Button)
return Button
end
function Section:Toggle(Toggle)
Toggle = GetType(Toggle,{},"table",true)
Toggle.Name = GetType(Toggle.Name,"Toggle","string")
Toggle.Flag = GetType(Toggle.Flag,Toggle.Name,"string")
Toggle.Value = GetType(Toggle.Value,false,"boolean")
Toggle.Callback = GetType(Toggle.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Toggle
Window.Flags[Toggle.Flag] = Toggle.Value
local ToggleAsset = Assets:Toggle(SectionContainer,Bracket.ScreenAsset,Window,Toggle)
function Toggle:Keybind(Keybind)
Keybind = GetType(Keybind,{},"table",true)
Keybind.Flag = GetType(Keybind.Flag,Toggle.Flag .. "/Keybind","string")
Keybind.Value = GetType(Keybind.Value,"NONE","string")
Keybind.Mouse = GetType(Keybind.Mouse,false,"boolean")
Keybind.Callback = GetType(Keybind.Callback,function() end,"function")
Keybind.Blacklist = GetType(Keybind.Blacklist,{"W","A","S","D","Slash","Tab","Backspace","Escape","Space","Delete","Unknown","Backquote"},"table")
Window.Elements[#Window.Elements + 1] = Keybind
Window.Flags[Keybind.Flag] = Keybind.Value
Assets:ToggleKeybind(ToggleAsset.Layout,Bracket.ScreenAsset,Window,Keybind,Toggle)
return Keybind
end
function Toggle:Colorpicker(Colorpicker)
Colorpicker = GetType(Colorpicker,{},"table",true)
Colorpicker.Flag = GetType(Colorpicker.Flag,Toggle.Flag .. "/Colorpicker","string")
Colorpicker.Value = GetType(Colorpicker.Value,{1,1,1,0,false},"table")
Colorpicker.Callback = GetType(Colorpicker.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Colorpicker
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Assets:ToggleColorpicker(ToggleAsset.Layout,Bracket.ScreenAsset,Window,Colorpicker)
return Colorpicker
end
return Toggle
end
function Section:Slider(Slider)
Slider = GetType(Slider,{},"table",true)
Slider.Name = GetType(Slider.Name,"Slider","string")
Slider.Flag = GetType(Slider.Flag,Slider.Name,"string")
Slider.Min = GetType(Slider.Min,0,"number")
Slider.Max = GetType(Slider.Max,100,"number")
Slider.Precise = GetType(Slider.Precise,0,"number")
Slider.Unit = GetType(Slider.Unit,"","string")
Slider.Value = GetType(Slider.Value,Slider.Max / 2,"number")
Slider.Callback = GetType(Slider.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Slider
Window.Flags[Slider.Flag] = Slider.Value
Assets:Slider(SectionContainer,Bracket.ScreenAsset,Window,Slider)
return Slider
end
function Section:Textbox(Textbox)
Textbox = GetType(Textbox,{},"table",true)
Textbox.Name = GetType(Textbox.Name,"Textbox","string")
Textbox.Flag = GetType(Textbox.Flag,Textbox.Name,"string")
Textbox.Value = GetType(Textbox.Value,"","string")
Textbox.NumbersOnly = GetType(Textbox.NumbersOnly,false,"boolean")
Textbox.Placeholder = GetType(Textbox.Placeholder,"Input here","string")
Textbox.Callback = GetType(Textbox.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Textbox
Window.Flags[Textbox.Flag] = Textbox.Value
Assets:Textbox(SectionContainer,Bracket.ScreenAsset,Window,Textbox)
return Textbox
end
function Section:Keybind(Keybind)
Keybind = GetType(Keybind,{},"table",true)
Keybind.Name = GetType(Keybind.Name,"Keybind","string")
Keybind.Flag = GetType(Keybind.Flag,Keybind.Name,"string")
Keybind.Value = GetType(Keybind.Value,"NONE","string")
Keybind.Mouse = GetType(Keybind.Mouse,false,"boolean")
Keybind.Callback = GetType(Keybind.Callback,function() end,"function")
Keybind.Blacklist = GetType(Keybind.Blacklist,{"W","A","S","D","Slash","Tab","Backspace","Escape","Space","Delete","Unknown","Backquote"},"table")
Window.Elements[#Window.Elements + 1] = Keybind
Window.Flags[Keybind.Flag] = Keybind.Value
Assets:Keybind(SectionContainer,Bracket.ScreenAsset,Window,Keybind)
return Keybind
end
function Section:Dropdown(Dropdown)
Dropdown = GetType(Dropdown,{},"table",true)
Dropdown.Name = GetType(Dropdown.Name,"Dropdown","string")
Dropdown.Flag = GetType(Dropdown.Flag,Dropdown.Name,"string")
Dropdown.List = GetType(Dropdown.List,{},"table")
Window.Elements[#Window.Elements + 1] = Dropdown
Window.Flags[Dropdown.Flag] = Dropdown.Value
Assets:Dropdown(SectionContainer,Bracket.ScreenAsset,Window,Dropdown)
return Dropdown
end
function Section:Colorpicker(Colorpicker)
Colorpicker = GetType(Colorpicker,{},"table",true)
Colorpicker.Name = GetType(Colorpicker.Name,"Colorpicker","string")
Colorpicker.Flag = GetType(Colorpicker.Flag,Colorpicker.Name,"string")
Colorpicker.Value = GetType(Colorpicker.Value,{1,1,1,0,false},"table")
Colorpicker.Callback = GetType(Colorpicker.Callback,function() end,"function")
Window.Elements[#Window.Elements + 1] = Colorpicker
Window.Flags[Colorpicker.Flag] = Colorpicker.Value
Assets:Colorpicker(SectionContainer,Bracket.ScreenAsset,Window,Colorpicker)
return Colorpicker
end
return Section
end
return Tab
end
return Window
end
-- NDHandle = NotificationDescriptionHandle
function Bracket:Notification(Notification)
Notification = GetType(Notification,{},"table")
Notification.Title = GetType(Notification.Title,"Title","string")
Notification.Description = GetType(Notification.Description,"Description","string")
local NotificationAsset = GetAsset("Notification/ND")
NotificationAsset.Parent = Bracket.ScreenAsset.NDHandle
NotificationAsset.Title.Text = Notification.Title
NotificationAsset.Description.Text = Notification.Description
NotificationAsset.Title.Size = UDim2.new(1,0,0,NotificationAsset.Title.TextBounds.Y)
NotificationAsset.Description.Size = UDim2.new(1,0,0,NotificationAsset.Description.TextBounds.Y)
NotificationAsset.Size = UDim2.fromOffset(
(NotificationAsset.Title.TextBounds.X > NotificationAsset.Description.TextBounds.X
and NotificationAsset.Title.TextBounds.X or NotificationAsset.Description.TextBounds.X) + 24,
NotificationAsset.ListLayout.AbsoluteContentSize.Y + 8
)
if Notification.Duration then
task.spawn(function()
for Time = Notification.Duration,1,-1 do
NotificationAsset.Title.Close.Text = Time
task.wait(1)
end
NotificationAsset.Title.Close.Text = 0
NotificationAsset:Destroy()
if Notification.Callback then
Notification.Callback()
end
end)
else
NotificationAsset.Title.Close.MouseButton1Click:Connect(function()
NotificationAsset:Destroy()
end)
end
end
-- NLHandle = NotificationLineHandle
function Bracket:Notification2(Notification)
Notification = GetType(Notification,{},"table")
Notification.Title = GetType(Notification.Title,"Title","string")
Notification.Duration = GetType(Notification.Duration,5,"number")
Notification.Color = GetType(Notification.Color,Color3.new(1,0.5,0.25),"Color3")
local NotificationAsset = GetAsset("Notification/NL")
NotificationAsset.Parent = Bracket.ScreenAsset.NLHandle
NotificationAsset.Main.Title.Text = Notification.Title
NotificationAsset.Main.GLine.BackgroundColor3 = Notification.Color
NotificationAsset.Main.Size = UDim2.fromOffset(
NotificationAsset.Main.Title.TextBounds.X + 10,
NotificationAsset.Main.Title.TextBounds.Y + 6
)
NotificationAsset.Size = UDim2.fromOffset(0,
NotificationAsset.Main.Size.Y.Offset + 4
)
local function TweenSize(X,Y,Callback)
NotificationAsset:TweenSize(
UDim2.fromOffset(X,Y),
Enum.EasingDirection.InOut,
Enum.EasingStyle.Linear,
0.25,false,Callback
)
end
TweenSize(NotificationAsset.Main.Size.X.Offset + 4,NotificationAsset.Main.Size.Y.Offset + 4,function()
task.wait(Notification.Duration) TweenSize(0,NotificationAsset.Main.Size.Y.Offset + 4,function()
NotificationAsset:Destroy() if Notification.Callback then Notification.Callback() end
end)
end)
end
return Bracket