├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── Documentation.lua ├── Example.lua ├── MLLicense ├── Module.lua └── README.md /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /Documentation.lua: -------------------------------------------------------------------------------- 1 | local Material = [[ MaterialLuaModule ]] 2 | 3 | local NewUI = Material.Load({ 4 | -> Title 5 | -> Style 6 | -> SizeX 7 | -> SizeY 8 | -> Theme 9 | -> ColorOverrides 10 | }) 11 | 12 | local NewPage = NewUI.New({ 13 | -> Title 14 | -> ImageID 15 | }) 16 | 17 | local Banner = NewPage.Banner({ 18 | -> Text 19 | -> Options
20 | }) 21 | 22 | local NewButton = NewPage.Button({ 23 | -> Text 24 | -> Callback 25 | -> Menu
26 | }) 27 | 28 | local NewToggle = NewPage.Toggle({ 29 | -> Text 30 | -> Callback 31 | -> Enabled 32 | -> Menu
33 | }) 34 | 35 | local NewSlider = NewPage.Slider({ 36 | -> Text 37 | -> Callback 38 | -> Min 39 | -> Max 40 | -> Def 41 | -> Menu
42 | }) 43 | 44 | local NewDropdown = NewPage.Dropdown({ 45 | -> Text 46 | -> Callback 47 | -> Options
48 | -> Menu
49 | }) 50 | 51 | local NewChipSet = NewPage.ChipSet({ 52 | -> Callback 53 | -> Options
54 | }) 55 | 56 | local NewDataTable = NewPage.DataTable({ 57 | -> Callback 58 | -> Options
59 | }) 60 | 61 | local NewColorPicker = NewPage.ColorPicker({ 62 | -> Text 63 | -> Default 64 | -> Callback 65 | -> Menu
66 | }) 67 | 68 | local NewTextField = NewPage.TextField({ 69 | -> Text 70 | -> Type 71 | -> Callback 72 | -> Menu
73 | }) 74 | 75 | -- Custom Functions 76 | 77 | NewButton:SetText() 78 | NewButton:GetText() 79 | 80 | NewToggle:SetText() 81 | NewToggle:GetText() 82 | NewToggle:SetState() 83 | NewToggle:GetState() 84 | 85 | NewSlider:SetText() 86 | NewSlider:GetText() 87 | NewSlider:GetValue() 88 | NewSlider:SetMin() 89 | NewSlider:SetMax() 90 | NewSlider:GetMin() 91 | NewSlider:GetMax() 92 | 93 | NewDropdown:SetText() 94 | NewDropdown:GetText() 95 | NewDropdown:SetOptions(
) 96 |
NewDropdown:GetOptions() 97 | 98 | NewChipSet:SetOptions(
) 99 |
NewChipSet:GetOptions() 100 | 101 | NewDataTable:SetOptions(
) 102 |
NewDataTable:GetOptions() 103 | 104 | NewColorPicker:SetText(
) 105 | NewColorPicker:SetColor() 106 | NewColorPicker:GetText() 107 | NewColorPicker:GetColor() 108 | 109 | NewTextField:SetText( NewTextField:GetText() 111 | -------------------------------------------------------------------------------- /Example.lua: -------------------------------------------------------------------------------- 1 | local Material = loadstring(game:HttpGet("https://raw.githubusercontent.com/Kinlei/MaterialLua/master/Module.lua"))() 2 | 3 | local X = Material.Load({ 4 | Title = "ChibuHub", 5 | Style = 3, 6 | SizeX = 500, 7 | SizeY = 350, 8 | Theme = "Light", 9 | ColorOverrides = { 10 | MainFrame = Color3.fromRGB(235,235,235) 11 | } 12 | }) 13 | 14 | local Y = X.New({ 15 | Title = "1" 16 | }) 17 | 18 | local Z = X.New({ 19 | Title = "2" 20 | }) 21 | 22 | local A = Y.Button({ 23 | Text = "Kill All", 24 | Callback = function() 25 | print("hello") 26 | end, 27 | Menu = { 28 | Information = function(self) 29 | X.Banner({ 30 | Text = "This function can get you banned in up-to-date servers; use at your own risk." 31 | }) 32 | end 33 | } 34 | }) 35 | 36 | local B = Y.Toggle({ 37 | Text = "I'm a switch", 38 | Callback = function(Value) 39 | print(Value) 40 | end, 41 | Enabled = false 42 | }) 43 | 44 | local C = Y.Slider({ 45 | Text = "Slip and... you get the idea", 46 | Callback = function(Value) 47 | print(Value) 48 | end, 49 | Min = 200, 50 | Max = 400, 51 | Def = 300 52 | }) 53 | 54 | local D = Y.Dropdown({ 55 | Text = "Dropping care package", 56 | Callback = function(Value) 57 | print(Value) 58 | end, 59 | Options = { 60 | "Floor 1", 61 | "Floor 2", 62 | "Floor 3", 63 | "Floor 4", 64 | "Floor 5" 65 | }, 66 | Menu = { 67 | Information = function(self) 68 | X.Banner({ 69 | Text = "Test alert!" 70 | }) 71 | end 72 | } 73 | }) 74 | 75 | local E = Y.ChipSet({ 76 | Text = "Chipping away", 77 | Callback = function(ChipSet) 78 | table.foreach(ChipSet, function(Option, Value) 79 | print(Option, Value) 80 | end) 81 | end, 82 | Options = { 83 | ESP = true, 84 | TeamCheck = false, 85 | UselessBool = { 86 | Enabled = true, 87 | Menu = { 88 | Information = function(self) 89 | X.Banner({ 90 | Text = "This bool has absolutely no purpose whatsoever." 91 | }) 92 | end 93 | } 94 | } 95 | } 96 | }) 97 | 98 | local F = Y.DataTable({ 99 | Text = "Chipping away", 100 | Callback = function(ChipSet) 101 | table.foreach(ChipSet, function(Option, Value) 102 | print(Option, Value) 103 | end) 104 | end, 105 | Options = { 106 | ESP2 = true, 107 | TeamCheck2 = false, 108 | UselessBool2 = { 109 | Enabled = true, 110 | Menu = { 111 | Information = function(self) 112 | X.Banner({ 113 | Text = "This bool ALSO has absolutely no purpose. Sorry." 114 | }) 115 | end 116 | } 117 | } 118 | } 119 | }) 120 | 121 | local G = Y.ColorPicker({ 122 | Text = "ESP Colour", 123 | Default = Color3.fromRGB(0,255,110), 124 | Callback = function(Value) 125 | print("RGB:", Value.R * 255, Value.G * 255, Value.B * 255) 126 | end, 127 | Menu = { 128 | Information = function(self) 129 | X.Banner({ 130 | Text = "This changes the color of your ESP." 131 | }) 132 | end 133 | } 134 | }) 135 | 136 | local H = Y.TextField({ 137 | Text = "Country", 138 | Callback = function(Value) 139 | print(Value) 140 | end, 141 | Menu = { 142 | GB = function(self) 143 | self.SetText("GB") 144 | end, 145 | JP = function(self) 146 | self.SetText("JP") 147 | end, 148 | KO = function(self) 149 | self.SetText("KO") 150 | end 151 | } 152 | }) 153 | -------------------------------------------------------------------------------- /MLLicense: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 aKinlei 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Module.lua: -------------------------------------------------------------------------------- 1 | local Player = game:GetService("Players").LocalPlayer 2 | local Mouse = Player:GetMouse() 3 | 4 | local TextService = game:GetService("TextService") 5 | local TweenService = game:GetService("TweenService") 6 | local RunService = game:GetService("RunService") 7 | local InputService = game:GetService("UserInputService") 8 | local CoreGuiService = game:GetService("CoreGui") 9 | local ContentService = game:GetService("ContentProvider") 10 | 11 | local Themes = { 12 | Light = { 13 | MainFrame = Color3.fromRGB(255,255,255), 14 | Minimise = Color3.fromRGB(255,106,0), 15 | MinimiseAccent = Color3.fromRGB(147,59,0), 16 | Maximise = Color3.fromRGB(25,255,0), 17 | MaximiseAccent = Color3.fromRGB(0,255,110), 18 | NavBar = Color3.fromRGB(124,37,255), 19 | NavBarAccent = Color3.fromRGB(255,255,255), 20 | NavBarInvert = Color3.fromRGB(30,30,30), 21 | TitleBar = Color3.fromRGB(124,37,255), 22 | TitleBarAccent = Color3.fromRGB(255,255,255), 23 | Overlay = Color3.fromRGB(124,37,255), 24 | Banner = Color3.fromRGB(255,255,255), 25 | BannerAccent = Color3.fromRGB(124,37,255), 26 | Content = Color3.fromRGB(124,37,255), 27 | Button = Color3.fromRGB(124,37,255), 28 | ButtonAccent = Color3.fromRGB(255,255,255), 29 | ChipSet = Color3.fromRGB(124,37,255), 30 | ChipSetAccent = Color3.fromRGB(255,255,255), 31 | DataTable = Color3.fromRGB(124,37,255), 32 | DataTableAccent = Color3.fromRGB(255,255,255), 33 | Slider = Color3.fromRGB(255,255,255), 34 | SliderAccent = Color3.fromRGB(124,37,255), 35 | Toggle = Color3.fromRGB(124,37,255), 36 | ToggleAccent = Color3.fromRGB(255,255,255), 37 | Dropdown = Color3.fromRGB(255,255,255), 38 | DropdownAccent = Color3.fromRGB(124,37,255), 39 | ColorPicker = Color3.fromRGB(255,255,255), 40 | ColorPickerAccent = Color3.fromRGB(124,37,255), 41 | TextField = Color3.fromRGB(124,37,255), 42 | TextFieldAccent = Color3.fromRGB(124,37,255), 43 | }, 44 | Dark = { 45 | MainFrame = Color3.fromRGB(30,30,30), 46 | Minimise = Color3.fromRGB(255,106,0), 47 | MinimiseAccent = Color3.fromRGB(147,59,0), 48 | Maximise = Color3.fromRGB(25,255,0), 49 | MaximiseAccent = Color3.fromRGB(0,255,110), 50 | NavBar = Color3.fromRGB(55,55,55), 51 | NavBarAccent = Color3.fromRGB(255,255,255), 52 | NavBarInvert = Color3.fromRGB(235,235,235), 53 | TitleBar = Color3.fromRGB(55,55,55), 54 | TitleBarAccent = Color3.fromRGB(255,255,255), 55 | Overlay = Color3.fromRGB(175,175,175), 56 | Banner = Color3.fromRGB(55,55,55), 57 | BannerAccent = Color3.fromRGB(255,255,255), 58 | Content = Color3.fromRGB(85,85,85), 59 | Button = Color3.fromRGB(85,85,85), 60 | ButtonAccent = Color3.fromRGB(255,255,255), 61 | ChipSet = Color3.fromRGB(235,235,235), 62 | ChipSetAccent = Color3.fromRGB(85,85,85), 63 | DataTable = Color3.fromRGB(235,235,235), 64 | DataTableAccent = Color3.fromRGB(85,85,85), 65 | Slider = Color3.fromRGB(85,85,85), 66 | SliderAccent = Color3.fromRGB(235,235,235), 67 | Toggle = Color3.fromRGB(205,205,205), 68 | ToggleAccent = Color3.fromRGB(125,125,125), 69 | Dropdown = Color3.fromRGB(85,85,85), 70 | DropdownAccent = Color3.fromRGB(235,235,235), 71 | ColorPicker = Color3.fromRGB(85,85,85), 72 | ColorPickerAccent = Color3.fromRGB(235,235,235), 73 | TextField = Color3.fromRGB(175,175,175), 74 | TextFieldAccent = Color3.fromRGB(255,255,255), 75 | }, 76 | Mocha = { 77 | MainFrame = Color3.fromRGB(255,255,255), 78 | Minimise = Color3.fromRGB(219, 210, 202), 79 | MinimiseAccent = Color3.fromRGB(219, 210, 202), 80 | Maximise = Color3.fromRGB(189, 183, 177), 81 | MaximiseAccent = Color3.fromRGB(189, 183, 177), 82 | NavBar = Color3.fromRGB(176, 148, 125), 83 | NavBarAccent = Color3.fromRGB(255,255,255), 84 | NavBarInvert = Color3.fromRGB(30,30,30), 85 | TitleBar = Color3.fromRGB(176, 148, 125), 86 | TitleBarAccent = Color3.fromRGB(255,255,255), 87 | Overlay = Color3.fromRGB(176, 148, 125), 88 | Banner = Color3.fromRGB(255,255,255), 89 | BannerAccent = Color3.fromRGB(176, 148, 125), 90 | Content = Color3.fromRGB(176, 148, 125), 91 | Button = Color3.fromRGB(176, 148, 125), 92 | ButtonAccent = Color3.fromRGB(255,255,255), 93 | ChipSet = Color3.fromRGB(176, 148, 125), 94 | ChipSetAccent = Color3.fromRGB(255,255,255), 95 | DataTable = Color3.fromRGB(176, 148, 125), 96 | DataTableAccent = Color3.fromRGB(255,255,255), 97 | Slider = Color3.fromRGB(255,255,255), 98 | SliderAccent = Color3.fromRGB(176, 148, 125), 99 | Toggle = Color3.fromRGB(176, 148, 125), 100 | ToggleAccent = Color3.fromRGB(255,255,255), 101 | Dropdown = Color3.fromRGB(255,255,255), 102 | DropdownAccent = Color3.fromRGB(176, 148, 125), 103 | ColorPicker = Color3.fromRGB(255,255,255), 104 | ColorPickerAccent = Color3.fromRGB(176, 148, 125), 105 | TextField = Color3.fromRGB(175,175,175), 106 | TextFieldAccent = Color3.fromRGB(255,255,255) 107 | }, 108 | Aqua = { 109 | MainFrame = Color3.fromRGB(255,255,255), 110 | Minimise = Color3.fromRGB(219, 210, 202), 111 | MinimiseAccent = Color3.fromRGB(219, 210, 202), 112 | Maximise = Color3.fromRGB(189, 183, 177), 113 | MaximiseAccent = Color3.fromRGB(189, 183, 177), 114 | NavBar = Color3.fromRGB(116, 112, 140), 115 | NavBarAccent = Color3.fromRGB(255,255,255), 116 | NavBarInvert = Color3.fromRGB(30,30,30), 117 | TitleBar = Color3.fromRGB(116, 112, 140), 118 | TitleBarAccent = Color3.fromRGB(255,255,255), 119 | Overlay = Color3.fromRGB(116, 112, 140), 120 | Banner = Color3.fromRGB(255,255,255), 121 | BannerAccent = Color3.fromRGB(116, 112, 140), 122 | Content = Color3.fromRGB(116, 112, 140), 123 | Button = Color3.fromRGB(116, 112, 140), 124 | ButtonAccent = Color3.fromRGB(255,255,255), 125 | ChipSet = Color3.fromRGB(116, 112, 140), 126 | ChipSetAccent = Color3.fromRGB(255,255,255), 127 | DataTable = Color3.fromRGB(116, 112, 140), 128 | DataTableAccent = Color3.fromRGB(255,255,255), 129 | Slider = Color3.fromRGB(255,255,255), 130 | SliderAccent = Color3.fromRGB(116, 112, 140), 131 | Toggle = Color3.fromRGB(116, 112, 140), 132 | ToggleAccent = Color3.fromRGB(255,255,255), 133 | Dropdown = Color3.fromRGB(255,255,255), 134 | DropdownAccent = Color3.fromRGB(116, 112, 140), 135 | ColorPicker = Color3.fromRGB(255,255,255), 136 | ColorPickerAccent = Color3.fromRGB(116, 112, 140), 137 | TextField = Color3.fromRGB(175,175,175), 138 | TextFieldAccent = Color3.fromRGB(255,255,255) 139 | }, 140 | Jester = { 141 | MainFrame = Color3.fromRGB(255,255,255), 142 | Minimise = Color3.fromRGB(219, 210, 202), 143 | MinimiseAccent = Color3.fromRGB(219, 210, 202), 144 | Maximise = Color3.fromRGB(189, 183, 177), 145 | MaximiseAccent = Color3.fromRGB(189, 183, 177), 146 | NavBar = Color3.fromRGB(219, 68, 103), 147 | NavBarAccent = Color3.fromRGB(255,255,255), 148 | NavBarInvert = Color3.fromRGB(30,30,30), 149 | TitleBar = Color3.fromRGB(219, 68, 103), 150 | TitleBarAccent = Color3.fromRGB(255,255,255), 151 | Overlay = Color3.fromRGB(219, 68, 103), 152 | Banner = Color3.fromRGB(255,255,255), 153 | BannerAccent = Color3.fromRGB(219, 68, 103), 154 | Content = Color3.fromRGB(219, 68, 103), 155 | Button = Color3.fromRGB(219, 68, 103), 156 | ButtonAccent = Color3.fromRGB(255,255,255), 157 | ChipSet = Color3.fromRGB(219, 68, 103), 158 | ChipSetAccent = Color3.fromRGB(255,255,255), 159 | DataTable = Color3.fromRGB(219, 68, 103), 160 | DataTableAccent = Color3.fromRGB(255,255,255), 161 | Slider = Color3.fromRGB(255,255,255), 162 | SliderAccent = Color3.fromRGB(219, 68, 103), 163 | Toggle = Color3.fromRGB(219, 68, 103), 164 | ToggleAccent = Color3.fromRGB(255,255,255), 165 | Dropdown = Color3.fromRGB(255,255,255), 166 | DropdownAccent = Color3.fromRGB(219, 68, 103), 167 | ColorPicker = Color3.fromRGB(255,255,255), 168 | ColorPickerAccent = Color3.fromRGB(219, 68, 103), 169 | TextField = Color3.fromRGB(175,175,175), 170 | TextFieldAccent = Color3.fromRGB(255,255,255), 171 | } 172 | } 173 | 174 | local Types = { 175 | "RoundFrame", 176 | "Shadow", 177 | "Circle", 178 | "CircleButton", 179 | "Frame", 180 | "Label", 181 | "Button", 182 | "SmoothButton", 183 | "Box", 184 | "ScrollingFrame", 185 | "Menu", 186 | "NavBar" 187 | } 188 | 189 | local ActualTypes = { 190 | RoundFrame = "ImageLabel", 191 | Shadow = "ImageLabel", 192 | Circle = "ImageLabel", 193 | CircleButton = "ImageButton", 194 | Frame = "Frame", 195 | Label = "TextLabel", 196 | Button = "TextButton", 197 | SmoothButton = "ImageButton", 198 | Box = "TextBox", 199 | ScrollingFrame = "ScrollingFrame", 200 | Menu = "ImageButton", 201 | NavBar = "ImageButton" 202 | } 203 | 204 | local Properties = { 205 | RoundFrame = { 206 | BackgroundTransparency = 1, 207 | Image = "http://www.roblox.com/asset/?id=5554237731", 208 | ScaleType = Enum.ScaleType.Slice, 209 | SliceCenter = Rect.new(3,3,297,297) 210 | }, 211 | SmoothButton = { 212 | AutoButtonColor = false, 213 | BackgroundTransparency = 1, 214 | Image = "http://www.roblox.com/asset/?id=5554237731", 215 | ScaleType = Enum.ScaleType.Slice, 216 | SliceCenter = Rect.new(3,3,297,297) 217 | }, 218 | Shadow = { 219 | Name = "Shadow", 220 | BackgroundTransparency = 1, 221 | Image = "http://www.roblox.com/asset/?id=5554236805", 222 | ScaleType = Enum.ScaleType.Slice, 223 | SliceCenter = Rect.new(23,23,277,277), 224 | Size = UDim2.fromScale(1,1) + UDim2.fromOffset(30,30), 225 | Position = UDim2.fromOffset(-15,-15) 226 | }, 227 | Circle = { 228 | BackgroundTransparency = 1, 229 | Image = "http://www.roblox.com/asset/?id=5554831670" 230 | }, 231 | CircleButton = { 232 | BackgroundTransparency = 1, 233 | AutoButtonColor = false, 234 | Image = "http://www.roblox.com/asset/?id=5554831670" 235 | }, 236 | Frame = { 237 | BackgroundTransparency = 1, 238 | BorderSizePixel = 0, 239 | Size = UDim2.fromScale(1,1) 240 | }, 241 | Label = { 242 | BackgroundTransparency = 1, 243 | Position = UDim2.fromOffset(5,0), 244 | Size = UDim2.fromScale(1,1) - UDim2.fromOffset(5,0), 245 | TextSize = 14, 246 | TextXAlignment = Enum.TextXAlignment.Left 247 | }, 248 | Button = { 249 | BackgroundTransparency = 1, 250 | Position = UDim2.fromOffset(5,0), 251 | Size = UDim2.fromScale(1,1) - UDim2.fromOffset(5,0), 252 | TextSize = 14, 253 | TextXAlignment = Enum.TextXAlignment.Left 254 | }, 255 | Box = { 256 | BackgroundTransparency = 1, 257 | Position = UDim2.fromOffset(5,0), 258 | Size = UDim2.fromScale(1,1) - UDim2.fromOffset(5,0), 259 | TextSize = 14, 260 | TextXAlignment = Enum.TextXAlignment.Left 261 | }, 262 | ScrollingFrame = { 263 | BackgroundTransparency = 1, 264 | ScrollBarThickness = 0, 265 | CanvasSize = UDim2.fromScale(0,0), 266 | Size = UDim2.fromScale(1,1) 267 | }, 268 | Menu = { 269 | Name = "More", 270 | AutoButtonColor = false, 271 | BackgroundTransparency = 1, 272 | Image = "http://www.roblox.com/asset/?id=5555108481", 273 | Size = UDim2.fromOffset(20,20), 274 | Position = UDim2.fromScale(1,0.5) - UDim2.fromOffset(25,10) 275 | }, 276 | NavBar = { 277 | Name = "SheetToggle", 278 | Image = "http://www.roblox.com/asset/?id=5576439039", 279 | BackgroundTransparency = 1, 280 | Size = UDim2.fromOffset(20,20), 281 | Position = UDim2.fromOffset(5,5), 282 | AutoButtonColor = false 283 | } 284 | } 285 | 286 | function FindType(String) 287 | for _, Type in next, Types do 288 | if Type:sub(1, #String):lower() == String:lower() then 289 | return Type 290 | end 291 | end 292 | return false 293 | end 294 | 295 | local Objects = {} 296 | 297 | function Objects.new(Type) 298 | local TargetType = FindType(Type) 299 | if TargetType then 300 | local NewImage = Instance.new(ActualTypes[TargetType]) 301 | if Properties[TargetType] then 302 | for Property, Value in next, Properties[TargetType] do 303 | NewImage[Property] = Value 304 | end 305 | end 306 | return NewImage 307 | else 308 | return Instance.new(Type) 309 | end 310 | end 311 | 312 | local function GetXY(GuiObject) 313 | local Max, May = GuiObject.AbsoluteSize.X, GuiObject.AbsoluteSize.Y 314 | local Px, Py = math.clamp(Mouse.X - GuiObject.AbsolutePosition.X, 0, Max), math.clamp(Mouse.Y - GuiObject.AbsolutePosition.Y, 0, May) 315 | return Px/Max, Py/May 316 | end 317 | 318 | local function CircleAnim(GuiObject, EndColour, StartColour) 319 | local PX, PY = GetXY(GuiObject) 320 | local Circle = Objects.new("Circle") 321 | Circle.Size = UDim2.fromScale(0,0) 322 | Circle.Position = UDim2.fromScale(PX,PY) 323 | Circle.ImageColor3 = StartColour or GuiObject.ImageColor3 324 | Circle.ZIndex = 200 325 | Circle.Parent = GuiObject 326 | local Size = GuiObject.AbsoluteSize.X 327 | TweenService:Create(Circle, TweenInfo.new(1), {Position = UDim2.fromScale(PX,PY) - UDim2.fromOffset(Size/2,Size/2), ImageTransparency = 1, ImageColor3 = EndColour, Size = UDim2.fromOffset(Size,Size)}):Play() 328 | spawn(function() 329 | wait(2) 330 | Circle:Destroy() 331 | end) 332 | end 333 | 334 | local Material = {} 335 | 336 | local Styles = { 337 | [1] = "Normal", 338 | [2] = "Invert", 339 | [3] = "Sheets" 340 | } 341 | 342 | local ThisTheme 343 | 344 | local NavBar = { 345 | Normal = function() 346 | local NewNavBar = Objects.new("Round") 347 | NewNavBar.Name = "NavBar" 348 | NewNavBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,30) 349 | NewNavBar.Position = UDim2.fromOffset(5,35) 350 | NewNavBar.ImageColor3 = ThisTheme.NavBar 351 | NewNavBar.ZIndex = 100 352 | 353 | local NavBarShadow = Objects.new("Shadow") 354 | NavBarShadow.ImageColor3 = ThisTheme.NavBar 355 | NavBarShadow.Parent = NewNavBar 356 | NavBarShadow.ZIndex = 100 357 | 358 | local NavBarContent = Objects.new("Frame") 359 | NavBarContent.Name = "Content" 360 | NavBarContent.Parent = NewNavBar 361 | 362 | NavBarContent.ChildAdded:Connect(function(Child) 363 | pcall(function() 364 | local Children = #NavBarContent:GetChildren() - 2 365 | TweenService:Create(Child, TweenInfo.new(1), {TextTransparency = (Children > 1) and 0.5 or 0}):Play() 366 | end) 367 | pcall(function() 368 | local Children = #NavBarContent:GetChildren() - 2 369 | TweenService:Create(Child, TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 370 | end) 371 | pcall(function() 372 | local Children = #NavBarContent:GetChildren() - 2 373 | TweenService:Create(Child:FindFirstChildWhichIsA("ImageLabel"), TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 374 | end) 375 | pcall(function() 376 | Child.TextColor3 = ThisTheme.NavBarAccent 377 | end) 378 | pcall(function() 379 | Child:FindFirstChildWhichIsA("ImageLabel").ImageColor3 = ThisTheme.NavBarAccent 380 | end) 381 | pcall(function() 382 | Child.ImageColor3 = ThisTheme.NavBarAccent 383 | end) 384 | end) 385 | 386 | local NavBarList = Objects.new("UIListLayout") 387 | NavBarList.FillDirection = Enum.FillDirection.Horizontal 388 | NavBarList.HorizontalAlignment = Enum.HorizontalAlignment.Left 389 | NavBarList.VerticalAlignment = Enum.VerticalAlignment.Center 390 | NavBarList.SortOrder = Enum.SortOrder.LayoutOrder 391 | NavBarList.Parent = NavBarContent 392 | 393 | local NavBarPadding = Objects.new("UIPadding") 394 | NavBarPadding.PaddingLeft = UDim.new(0,5) 395 | NavBarPadding.Parent = NavBarContent 396 | 397 | return NewNavBar, NavBarContent 398 | end, 399 | Invert = function() 400 | local NewNavBar = Objects.new("Round") 401 | NewNavBar.Name = "NavBar" 402 | NewNavBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,30) 403 | NewNavBar.Position = UDim2.fromOffset(5,35) 404 | NewNavBar.ImageColor3 = ThisTheme.NavBarAccent 405 | NewNavBar.ImageTransparency = 1 406 | NewNavBar.ZIndex = 100 407 | 408 | local NavBarShadow = Objects.new("Shadow") 409 | NavBarShadow.ImageColor3 = ThisTheme.NavBarInvert 410 | NavBarShadow.ImageTransparency = 1 411 | NavBarShadow.Parent = NewNavBar 412 | NavBarShadow.ZIndex = 100 413 | 414 | TweenService:Create(NewNavBar, TweenInfo.new(1), {ImageTransparency = 0}):Play() 415 | TweenService:Create(NavBarShadow, TweenInfo.new(1), {ImageTransparency = 0}):Play() 416 | 417 | local NavBarContent = Objects.new("Frame") 418 | NavBarContent.Name = "Content" 419 | NavBarContent.Parent = NewNavBar 420 | 421 | NavBarContent.ChildAdded:Connect(function(Child) 422 | pcall(function() 423 | local Children = #NavBarContent:GetChildren() - 2 424 | TweenService:Create(Child, TweenInfo.new(1), {TextTransparency = (Children > 1) and 0.5 or 0}):Play() 425 | end) 426 | pcall(function() 427 | local Children = #NavBarContent:GetChildren() - 2 428 | TweenService:Create(Child, TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 429 | end) 430 | pcall(function() 431 | local Children = #NavBarContent:GetChildren() - 2 432 | TweenService:Create(Child:FindFirstChildWhichIsA("ImageLabel"), TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 433 | end) 434 | pcall(function() 435 | Child.TextColor3 = ThisTheme.NavBar 436 | end) 437 | pcall(function() 438 | Child:FindFirstChildWhichIsA("ImageLabel").ImageColor3 = ThisTheme.NavBar 439 | end) 440 | pcall(function() 441 | Child.ImageColor3 = ThisTheme.NavBar 442 | end) 443 | end) 444 | 445 | local NavBarList = Objects.new("UIListLayout") 446 | NavBarList.FillDirection = Enum.FillDirection.Horizontal 447 | NavBarList.HorizontalAlignment = Enum.HorizontalAlignment.Left 448 | NavBarList.VerticalAlignment = Enum.VerticalAlignment.Center 449 | NavBarList.SortOrder = Enum.SortOrder.LayoutOrder 450 | NavBarList.Parent = NavBarContent 451 | 452 | local NavBarPadding = Objects.new("UIPadding") 453 | NavBarPadding.PaddingLeft = UDim.new(0,5) 454 | NavBarPadding.Parent = NavBarContent 455 | 456 | return NewNavBar, NavBarContent 457 | end, 458 | Sheets = function() 459 | local NewNavBar = Objects.new("Round") 460 | NewNavBar.ClipsDescendants = true 461 | NewNavBar.Name = "NavBar" 462 | NewNavBar.Size = UDim2.fromScale(0,1) - UDim2.fromOffset(0,30) 463 | NewNavBar.Position = UDim2.fromOffset(0,30) 464 | NewNavBar.ImageColor3 = ThisTheme.NavBarAccent 465 | NewNavBar.ZIndex = 100 466 | 467 | local NavBarOverlay = Objects.new("Frame") 468 | NavBarOverlay.Name = "Overlay" 469 | NavBarOverlay.BackgroundColor3 = ThisTheme.NavBar 470 | NavBarOverlay.BackgroundTransparency = 1 471 | NavBarOverlay.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(0,30) 472 | NavBarOverlay.Position = UDim2.fromOffset(0,30) 473 | NavBarOverlay.ZIndex = 75 474 | 475 | local NavBarMenu = Objects.new("NavBar") 476 | NavBarMenu.ZIndex = 100 477 | 478 | local NavBarShadow = Objects.new("Shadow") 479 | NavBarShadow.ImageColor3 = ThisTheme.NavBar 480 | NavBarShadow.Parent = NewNavBar 481 | NavBarShadow.ZIndex = 100 482 | 483 | local Effect1, Effect2, Effect3 = Objects.new("Frame"), Objects.new("Frame"), Objects.new("Frame") 484 | 485 | Effect1.ZIndex = 100 486 | Effect2.ZIndex = 100 487 | Effect3.ZIndex = 100 488 | 489 | Effect1.BackgroundTransparency = 0 490 | Effect2.BackgroundTransparency = 0 491 | Effect3.BackgroundTransparency = 0 492 | 493 | Effect1.BackgroundColor3 = ThisTheme.NavBarAccent 494 | Effect2.BackgroundColor3 = ThisTheme.NavBarAccent 495 | Effect3.BackgroundColor3 = ThisTheme.NavBar 496 | 497 | Effect1.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,5) 498 | Effect2.Size = UDim2.fromScale(0,1) + UDim2.fromOffset(5,0) 499 | Effect3.Size = UDim2.fromScale(0,1) + UDim2.fromOffset(1,0) 500 | 501 | Effect1.Position = UDim2.fromScale(0,0) 502 | Effect2.Position = UDim2.fromScale(1,0) - UDim2.fromOffset(5,0) 503 | Effect3.Position = UDim2.fromScale(1,0) 504 | 505 | Effect1.Parent = NewNavBar 506 | Effect2.Parent = NewNavBar 507 | Effect3.Parent = NewNavBar 508 | 509 | local NavBarContent = Objects.new("Frame") 510 | NavBarContent.Name = "Content" 511 | NavBarContent.Parent = NewNavBar 512 | 513 | local NavBarList = Objects.new("UIListLayout") 514 | NavBarList.FillDirection = Enum.FillDirection.Vertical 515 | NavBarList.HorizontalAlignment = Enum.HorizontalAlignment.Center 516 | NavBarList.VerticalAlignment = Enum.VerticalAlignment.Top 517 | NavBarList.SortOrder = Enum.SortOrder.LayoutOrder 518 | NavBarList.Parent = NavBarContent 519 | 520 | local NavBarPadding = Objects.new("UIPadding") 521 | NavBarPadding.PaddingLeft = UDim.new(0,5) 522 | NavBarPadding.PaddingRight = UDim.new(0,5) 523 | NavBarPadding.PaddingTop = UDim.new(0,5) 524 | NavBarPadding.PaddingBottom = UDim.new(0,5) 525 | NavBarPadding.Parent = NavBarContent 526 | 527 | NavBarContent.ChildAdded:Connect(function(Child) 528 | pcall(function() 529 | local Children = #NavBarContent:GetChildren() - 2 530 | TweenService:Create(Child, TweenInfo.new(1), {TextTransparency = (Children > 1) and 0.5 or 0}):Play() 531 | end) 532 | pcall(function() 533 | local Children = #NavBarContent:GetChildren() - 2 534 | TweenService:Create(Child, TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 535 | end) 536 | pcall(function() 537 | local Children = #NavBarContent:GetChildren() - 2 538 | TweenService:Create(Child:FindFirstChildWhichIsA("ImageLabel"), TweenInfo.new(1), {ImageTransparency = (Children > 1) and 0.5 or 0}):Play() 539 | end) 540 | pcall(function() 541 | Child.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 542 | end) 543 | pcall(function() 544 | Child:FindFirstChildWhichIsA("ImageLabel").ImageColor3 = ThisTheme.NavBar 545 | end) 546 | pcall(function() 547 | Child.TextColor3 = ThisTheme.NavBar 548 | end) 549 | pcall(function() 550 | Child.ImageColor3 = ThisTheme.NavBar 551 | end) 552 | end) 553 | 554 | return NewNavBar, NavBarContent, NavBarMenu, NavBarOverlay 555 | end 556 | } 557 | 558 | local MainGUI 559 | 560 | function TryAddMenu(Object, Menu, ReturnTable) 561 | local Menu = Menu 562 | local ReturnTable = ReturnTable 563 | ReturnTable.Object = Object 564 | local Total = 0 565 | 566 | table.foreach(Menu, function(_, Value) 567 | Total = Total + ((typeof(Value) == "function") and 1 or 0) 568 | end) 569 | 570 | if Total > 0 then 571 | local MenuToggle = false 572 | 573 | local MenuButton = Objects.new("Menu") 574 | MenuButton.ImageTransparency = 1 575 | MenuButton.Parent = Object 576 | 577 | TweenService:Create(MenuButton, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 578 | 579 | local Size = Total * 30 + ((Total + 1) * 2) 580 | 581 | local MenuBuild = Objects.new("Round") 582 | MenuBuild.Name = "Menu" 583 | MenuBuild.ImageColor3 = ThisTheme.ButtonAccent 584 | MenuBuild.Size = UDim2.fromOffset(120,0) 585 | MenuBuild.Position = UDim2.fromOffset(MenuButton.AbsolutePosition.X,MenuButton.AbsolutePosition.Y) - UDim2.fromOffset(125,5) 586 | MenuBuild.ZIndex = 100 587 | MenuBuild.ClipsDescendants = true 588 | MenuBuild.Parent = MainGUI 589 | 590 | MenuButton:GetPropertyChangedSignal("AbsolutePosition"):Connect(function() 591 | MenuBuild.Position = UDim2.fromOffset(MenuButton.AbsolutePosition.X,MenuButton.AbsolutePosition.Y) - UDim2.fromOffset(125,5) 592 | end) 593 | 594 | local MenuContent = Objects.new("Frame") 595 | MenuContent.Name = "Content" 596 | MenuContent.Parent = MenuBuild 597 | 598 | local MenuList = Objects.new("UIListLayout") 599 | MenuList.Padding = UDim.new(0,2) 600 | MenuList.Parent = MenuContent 601 | 602 | local MenuPadding = Objects.new("UIPadding") 603 | MenuPadding.PaddingTop = UDim.new(0,2) 604 | MenuPadding.PaddingRight = UDim.new(0,2) 605 | MenuPadding.PaddingLeft = UDim.new(0,2) 606 | MenuPadding.PaddingBottom = UDim.new(0,2) 607 | MenuPadding.Parent = MenuContent 608 | 609 | MenuButton.MouseButton1Down:Connect(function() 610 | MenuToggle = not MenuToggle 611 | TweenService:Create(MenuBuild, TweenInfo.new(0.15), {Size = MenuToggle and UDim2.fromOffset(120,Size) or UDim2.fromOffset(120,0)}):Play() 612 | end) 613 | 614 | table.foreach(Menu, function(Option, Value) 615 | if typeof(Value) == "function" then 616 | local MenuOption = Objects.new("SmoothButton") 617 | MenuOption.Name = "MenuOption" 618 | MenuOption.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 619 | MenuOption.ImageColor3 = ThisTheme.Button 620 | MenuOption.ImageTransparency = 1 621 | MenuOption.ZIndex = 150 622 | MenuOption.Parent = MenuContent 623 | 624 | local OptionShadow = Objects.new("Shadow") 625 | OptionShadow.ImageColor3 = ThisTheme.Button 626 | OptionShadow.ImageTransparency = 1 627 | OptionShadow.Parent = MenuOption 628 | 629 | local OptionValue = Objects.new("Label") 630 | OptionValue.Name = "Value" 631 | OptionValue.Position = UDim2.fromScale(0,0) 632 | OptionValue.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(5,0) 633 | OptionValue.Text = Option 634 | OptionValue.TextColor3 = ThisTheme.Button 635 | OptionValue.Font = Enum.Font.Gotham 636 | OptionValue.TextSize = 12 637 | OptionValue.ZIndex = 150 638 | OptionValue.TextXAlignment = Enum.TextXAlignment.Right 639 | OptionValue.Parent = MenuOption 640 | 641 | MenuOption.MouseButton1Down:Connect(function() 642 | Value(ReturnTable) 643 | MenuToggle = false 644 | TweenService:Create(MenuBuild, TweenInfo.new(0.15), {Size = UDim2.fromOffset(120,0)}):Play() 645 | end) 646 | 647 | MenuOption.MouseEnter:Connect(function() 648 | TweenService:Create(MenuOption, TweenInfo.new(0.15), {ImageTransparency = 0.8}):Play() 649 | TweenService:Create(OptionShadow, TweenInfo.new(0.15), {ImageTransparency = 0.8}):Play() 650 | end) 651 | 652 | MenuOption.MouseLeave:Connect(function() 653 | TweenService:Create(MenuOption, TweenInfo.new(0.15), {ImageTransparency = 1}):Play() 654 | TweenService:Create(OptionShadow, TweenInfo.new(0.15), {ImageTransparency = 1}):Play() 655 | end) 656 | end 657 | end) 658 | return true, MenuButton 659 | end 660 | return false 661 | end 662 | 663 | function CreateNewButton(ButtonConfig, Parent) 664 | local ButtonText = ButtonConfig.Text or "nil button" 665 | local ButtonCallback = ButtonConfig.Callback or function() print("nil button") end 666 | local Menu = ButtonConfig.Menu or {} 667 | 668 | local Button = Objects.new("SmoothButton") 669 | Button.Name = "Button" 670 | Button.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 671 | Button.ImageColor3 = ThisTheme.Button 672 | Button.ImageTransparency = 1 673 | Button.Parent = Parent 674 | 675 | local ButtonShadow = Objects.new("Shadow") 676 | ButtonShadow.ImageColor3 = ThisTheme.Button 677 | ButtonShadow.ImageTransparency = 1 678 | ButtonShadow.Parent = Button 679 | 680 | local ButtonLabel = Objects.new("Label") 681 | ButtonLabel.Text = ButtonText 682 | ButtonLabel.TextColor3 = ThisTheme.ButtonAccent 683 | ButtonLabel.Font = Enum.Font.GothamSemibold 684 | ButtonLabel.TextSize = 14 685 | ButtonLabel.ClipsDescendants = true 686 | ButtonLabel.TextTransparency = 1 687 | ButtonLabel.Parent = Button 688 | 689 | TweenService:Create(Button, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 690 | TweenService:Create(ButtonShadow, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 691 | TweenService:Create(ButtonLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 692 | 693 | Button.MouseButton1Down:Connect(function() 694 | CircleAnim(ButtonLabel, ThisTheme.ButtonAccent, ThisTheme.Button) 695 | ButtonCallback() 696 | end) 697 | 698 | local MenuAdded = TryAddMenu(Button, Menu, {}) 699 | 700 | return Button, ButtonLabel 701 | end 702 | 703 | function Material.Load(Config) 704 | local Style = (Config.Style and math.clamp(Config.Style, 1, 3)) or 1 705 | local Title = Config.Title or "MaterialLua" 706 | local SizeX = Config.SizeX or 300 707 | local SizeY = Config.SizeY or 500 708 | local Theme = Config.Theme or "Light" 709 | local Overrides = Config.ColorOverrides or {} 710 | local Open = true 711 | 712 | Theme = Themes[Theme] 713 | 714 | ThisTheme = Theme 715 | 716 | for KeyOverride, ValueOverride in next, Overrides do 717 | ThisTheme[KeyOverride] = ValueOverride 718 | end 719 | 720 | pcall(function() OldInstance:Destroy() end); 721 | 722 | local function GetExploit() 723 | local Table = {}; 724 | Table.Synapse = syn; 725 | Table.ProtoSmasher = pebc_create; 726 | Table.Sentinel = issentinelclosure; 727 | Table.ScriptWare = getexecutorname; 728 | 729 | for ExploitName, ExploitFunction in next, Table do 730 | if (ExploitFunction) then 731 | return ExploitName; 732 | end; 733 | end; 734 | 735 | return "Undefined"; 736 | end; 737 | 738 | local ProtectFunctions = {}; 739 | ProtectFunctions.Synapse = function(GuiObject) syn.protect_gui(GuiObject); GuiObject.Parent = CoreGuiService; end; 740 | ProtectFunctions.ProtoSmasher = function(GuiObject) GuiObject.Parent = get_hidden_gui(); end; 741 | ProtectFunctions.Sentinel = function(GuiObject) GuiObject.Parent = CoreGuiService; end; 742 | ProtectFunctions.ScriptWare = function(GuiObject) GuiObject.Parent = gethui(); end; 743 | ProtectFunctions.Undefined = function(GuiObject) GuiObject.Parent = CoreGuiService; end; 744 | 745 | local NewInstance = Objects.new("ScreenGui") 746 | NewInstance.Name = Title 747 | ProtectFunctions[GetExploit()](NewInstance); 748 | 749 | getgenv().OldInstance = NewInstance; 750 | 751 | MainGUI = NewInstance 752 | 753 | local MainFrame = Objects.new("Round") 754 | MainFrame.Name = "MainFrame" 755 | MainFrame.Size = UDim2.fromOffset(0,SizeY) 756 | MainFrame.Position = UDim2.fromScale(0.5,0.5) - UDim2.fromOffset(SizeX/2,SizeY/2) 757 | MainFrame.ImageColor3 = Theme.MainFrame 758 | MainFrame.Parent = NewInstance 759 | 760 | TweenService:Create(MainFrame, TweenInfo.new(1), {Size = UDim2.fromOffset(SizeX,SizeY)}):Play() 761 | 762 | wait(1) 763 | 764 | local MainShadow = Objects.new("Shadow") 765 | MainShadow.ImageColor3 = Theme.MainFrame 766 | MainShadow.Parent = MainFrame 767 | 768 | local TitleBar = Objects.new("SmoothButton") 769 | TitleBar.Name = "TitleBar" 770 | TitleBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 771 | TitleBar.ImageColor3 = Theme.TitleBar 772 | TitleBar.ImageTransparency = 1 773 | TitleBar.Parent = MainFrame 774 | 775 | local ExtraBar = Objects.new("Frame") 776 | ExtraBar.Name = "Hidden" 777 | ExtraBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,5) 778 | ExtraBar.Position = UDim2.fromScale(0,1) - UDim2.fromOffset(0,5) 779 | ExtraBar.BackgroundColor3 = Theme.TitleBar 780 | ExtraBar.Parent = TitleBar 781 | 782 | local TitleShadow = Objects.new("Shadow") 783 | TitleShadow.ImageColor3 = Theme.TitleBar 784 | TitleShadow.ImageTransparency = 1 785 | TitleShadow.Parent = TitleBar 786 | 787 | local TitleText = Objects.new("Button") 788 | TitleText.Name = "Title" 789 | TitleText.Text = Title 790 | TitleText.TextColor3 = Theme.TitleBarAccent 791 | TitleText.TextTransparency = 1 792 | TitleText.Font = Enum.Font.GothamBold 793 | TitleText.Parent = TitleBar 794 | 795 | TitleText.MouseButton1Down:Connect(function() 796 | local Mx, My = Mouse.X, Mouse.Y 797 | local MouseMove, MouseKill 798 | MouseMove = Mouse.Move:Connect(function() 799 | local nMx, nMy = Mouse.X, Mouse.Y 800 | local Dx, Dy = nMx - Mx, nMy - My 801 | MainFrame.Position = MainFrame.Position + UDim2.fromOffset(Dx, Dy) 802 | Mx, My = nMx, nMy 803 | end) 804 | MouseKill = InputService.InputEnded:Connect(function(UserInput) 805 | if UserInput.UserInputType == Enum.UserInputType.MouseButton1 then 806 | MouseMove:Disconnect() 807 | MouseKill:Disconnect() 808 | end 809 | end) 810 | end) 811 | 812 | local MinimiseButton = Objects.new("SmoothButton") 813 | MinimiseButton.Size = UDim2.fromOffset(20,20) 814 | MinimiseButton.Position = UDim2.fromScale(1,0) + UDim2.fromOffset(-25,5) 815 | MinimiseButton.ImageColor3 = Theme.Minimise 816 | MinimiseButton.ImageTransparency = 1 817 | MinimiseButton.Parent = TitleBar 818 | 819 | local MinimiseShadow = Objects.new("Shadow") 820 | MinimiseShadow.ImageColor3 = Theme.MinimiseAccent 821 | MinimiseShadow.ImageTransparency = 1 822 | MinimiseShadow.Parent = MinimiseButton 823 | 824 | MinimiseButton.MouseButton1Down:Connect(function() 825 | Open = not Open 826 | TweenService:Create(MainShadow, TweenInfo.new(0.15), {ImageTransparency = 1}):Play() 827 | TweenService:Create(MainFrame, TweenInfo.new(0.15), {Size = Open and UDim2.fromOffset(SizeX,SizeY) or UDim2.fromOffset(SizeX,30)}):Play() 828 | TweenService:Create(MinimiseButton, TweenInfo.new(0.15), {ImageColor3 = Open and Theme.Minimise or Theme.Maximise}):Play() 829 | TweenService:Create(MinimiseShadow, TweenInfo.new(0.15), {ImageColor3 = Open and Theme.MinimiseAccent or Theme.MaximiseAccent}):Play() 830 | if Open then 831 | wait(0.15) 832 | MainFrame.ClipsDescendants = false 833 | TweenService:Create(MainShadow, TweenInfo.new(0.15), {ImageTransparency = 0}):Play() 834 | else 835 | MainFrame.ClipsDescendants = true 836 | end 837 | end) 838 | 839 | local Content = Objects.new("Round") 840 | Content.Name = "Content" 841 | Content.ImageColor3 = Theme.Content 842 | Content.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(10,75) 843 | Content.Position = UDim2.fromOffset(5,70) 844 | Content.ImageTransparency = 1 845 | Content.Parent = MainFrame 846 | 847 | local NavigationBar, NavigationBarContent, NavBarMenu, NavBarOverlay = NavBar[Styles[Style]]() 848 | NavigationBar.Parent = MainFrame 849 | 850 | TweenService:Create(TitleBar, TweenInfo.new(1), {ImageTransparency = 0}):Play() 851 | TweenService:Create(ExtraBar, TweenInfo.new(1), {BackgroundTransparency = 0}):Play() 852 | TweenService:Create(TitleShadow, TweenInfo.new(1), {ImageTransparency = 0}):Play() 853 | TweenService:Create(TitleText, TweenInfo.new(1), {TextTransparency = 0}):Play() 854 | TweenService:Create(MinimiseButton, TweenInfo.new(1), {ImageTransparency = 0}):Play() 855 | TweenService:Create(MinimiseShadow, TweenInfo.new(1), {ImageTransparency = 0}):Play() 856 | TweenService:Create(Content, TweenInfo.new(1), {ImageTransparency = 0.8}):Play() 857 | 858 | wait(1) 859 | 860 | if NavBarMenu then 861 | TweenService:Create(TitleText, TweenInfo.new(0.5), { 862 | Size = TitleText.Size - UDim2.fromOffset(25,0), 863 | Position = TitleText.Position + UDim2.fromOffset(25,0) 864 | }):Play() 865 | TweenService:Create(Content, TweenInfo.new(0.5), { 866 | Size = Content.Size + UDim2.fromOffset(0,35), 867 | Position = Content.Position - UDim2.fromOffset(0,35) 868 | }):Play() 869 | 870 | NavBarMenu.ImageTransparency = 1 871 | NavBarMenu.Parent = TitleBar 872 | 873 | TweenService:Create(NavBarMenu, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 874 | 875 | NavBarOverlay.Parent = MainFrame 876 | 877 | local MenuToggle = false 878 | 879 | NavBarMenu.MouseButton1Down:Connect(function() 880 | MenuToggle = not MenuToggle 881 | TweenService:Create(NavigationBar, TweenInfo.new(0.15), {Size = (MenuToggle and UDim2.fromScale(0.5,1) or UDim2.fromScale(0,1)) - UDim2.fromOffset(0,30)}):Play() 882 | TweenService:Create(NavBarOverlay, TweenInfo.new(0.15), {BackgroundTransparency = MenuToggle and 0.5 or 1}):Play() 883 | if MenuToggle then 884 | wait(0.15) 885 | NavigationBar.ClipsDescendants = false 886 | else 887 | NavigationBar.ClipsDescendants = true 888 | end 889 | end) 890 | end 891 | 892 | local TabCount = 0 893 | 894 | local TabLibrary = {} 895 | 896 | local ButtonTrack = {} 897 | local PageTrack = {} 898 | 899 | function TabLibrary.Banner(BannerConfig) 900 | local BannerText = BannerConfig.Text 901 | local BannerOptions = BannerConfig.Options or {} 902 | 903 | local ExistingBanner, ExistingBannerOverlay = MainFrame:FindFirstChild("BannerOverlay"), MainFrame:FindFirstChild("Banner") 904 | 905 | if ExistingBanner then 906 | ExistingBanner:Destroy() 907 | end 908 | 909 | if ExistingBannerOverlay then 910 | ExistingBannerOverlay:Destroy() 911 | end 912 | 913 | local BannerOverlay = Objects.new("Frame") 914 | BannerOverlay.Name = "BannerOverlay" 915 | BannerOverlay.BackgroundColor3 = Theme.BannerAccent 916 | BannerOverlay.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(0,30) 917 | BannerOverlay.Position = UDim2.fromOffset(0,30) 918 | BannerOverlay.ZIndex = 75 919 | BannerOverlay.Parent = MainFrame 920 | 921 | local TextSize = TextService:GetTextSize(BannerText, 12, Enum.Font.Gotham, Vector2.new(0,0)).X 922 | 923 | local Lines = math.ceil((TextSize) / (MainFrame.AbsoluteSize.X - 10)) 924 | 925 | local BannerSize = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,(Lines*20)+40) 926 | local BannerPosition = UDim2.fromScale(0,1) + UDim2.fromOffset(5,(-Lines*20)-45) 927 | 928 | local Banner = Objects.new("Round") 929 | Banner.Name = "Banner" 930 | Banner.ImageTransparency = 1 931 | Banner.ImageColor3 = Theme.Banner 932 | Banner.Size = BannerSize 933 | Banner.Position = BannerPosition 934 | Banner.ZIndex = 80 935 | Banner.Parent = MainFrame 936 | 937 | local BannerLabel = Objects.new("Label") 938 | BannerLabel.Name = "Value" 939 | BannerLabel.Text = BannerText 940 | BannerLabel.TextColor3 = Theme.BannerAccent 941 | BannerLabel.TextSize = 12 942 | BannerLabel.Font = Enum.Font.Gotham 943 | BannerLabel.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-5,(Lines*20)+5) 944 | BannerLabel.TextWrapped = true 945 | BannerLabel.Position = UDim2.fromOffset(5,0) 946 | BannerLabel.TextTransparency = 1 947 | BannerLabel.ZIndex = 80 948 | BannerLabel.Parent = Banner 949 | 950 | TweenService:Create(BannerOverlay, TweenInfo.new(0.5), {BackgroundTransparency = 0.5}):Play() 951 | TweenService:Create(Banner, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 952 | TweenService:Create(BannerLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 953 | 954 | local BannerContainer = Objects.new("Frame") 955 | BannerContainer.Name = "Options" 956 | BannerContainer.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,0) 957 | BannerContainer.Position = UDim2.fromScale(0,1) - UDim2.fromOffset(-5,35) 958 | BannerContainer.ZIndex = 80 959 | BannerContainer.ClipsDescendants = true 960 | BannerContainer.Parent = Banner 961 | 962 | local BannerList = Objects.new("UIListLayout") 963 | BannerList.FillDirection = Enum.FillDirection.Horizontal 964 | BannerList.HorizontalAlignment = Enum.HorizontalAlignment.Right 965 | BannerList.SortOrder = Enum.SortOrder.LayoutOrder 966 | BannerList.Padding = UDim.new(0,5) 967 | BannerList.Parent = BannerContainer 968 | 969 | BannerOptions["Ok"] = function() 970 | TweenService:Create(BannerContainer, TweenInfo.new(0.5), {Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,0)}):Play() 971 | TweenService:Create(BannerOverlay, TweenInfo.new(0.5), {BackgroundTransparency = 1}):Play() 972 | TweenService:Create(Banner, TweenInfo.new(0.5), {ImageTransparency = 1}):Play() 973 | TweenService:Create(BannerLabel, TweenInfo.new(0.5), {TextTransparency = 1}):Play() 974 | end 975 | 976 | table.foreach(BannerOptions, function(Option, Value) 977 | if typeof(Value) == "function" then 978 | local TextSize = TextService:GetTextSize(Option:upper(), 12, Enum.Font.GothamBold, Vector2.new(0,0)).X 979 | 980 | local OptionItem = Objects.new("SmoothButton") 981 | OptionItem.ImageColor3 = Theme.BannerAccent 982 | OptionItem.ImageTransparency = 0.9 983 | OptionItem.Size = UDim2.fromOffset(TextSize+10,30) 984 | OptionItem.ZIndex = 80 985 | OptionItem.ClipsDescendants = true 986 | OptionItem.Parent = BannerContainer 987 | 988 | local OptionLabel = Objects.new("Label") 989 | OptionLabel.Text = Option:upper() 990 | OptionLabel.TextSize = 12 991 | OptionLabel.TextColor3 = Theme.BannerAccent 992 | OptionLabel.Font = Enum.Font.GothamBold 993 | OptionLabel.Size = UDim2.fromScale(1,1) 994 | OptionLabel.Position = UDim2.fromScale(0,0) 995 | OptionLabel.TextXAlignment = Enum.TextXAlignment.Center 996 | OptionLabel.ZIndex = 80 997 | OptionLabel.Parent = OptionItem 998 | 999 | OptionItem.MouseButton1Down:Connect(function() 1000 | Value() 1001 | CircleAnim(OptionItem, Theme.Banner) 1002 | end) 1003 | end 1004 | end) 1005 | 1006 | TweenService:Create(BannerContainer, TweenInfo.new(0.5), {Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,30)}):Play() 1007 | end 1008 | 1009 | function TabLibrary.New(TabConfig) 1010 | local ImageID = TabConfig.ID 1011 | local Title = TabConfig.Title 1012 | 1013 | local Button 1014 | 1015 | if ImageID then 1016 | if Title then 1017 | local Settings = { 1018 | TextSize = 12, 1019 | Font = Enum.Font.GothamBold, 1020 | Vector = Vector2.new(0,0) 1021 | } 1022 | 1023 | local TextSize = TextService:GetTextSize(Title:upper(), Settings.TextSize, Settings.Font, Settings.Vector).X 1024 | 1025 | Button = Objects.new("Button") 1026 | Button.Name = Title:upper() 1027 | Button.TextXAlignment = Enum.TextXAlignment.Right 1028 | Button.TextSize = Settings.TextSize 1029 | Button.Font = Settings.Font 1030 | Button.Text = Title:upper() 1031 | Button.Size = UDim2.fromScale(0,1) + UDim2.fromOffset(TextSize+35) 1032 | Button.ZIndex = 200 1033 | Button.TextTransparency = 1 1034 | end 1035 | 1036 | local FetchURL = "rbxassetid://"..ImageID 1037 | 1038 | local Image = RunService:IsStudio() and "http://www.roblox.com/asset/?id=5472131383" or game:GetObjects(FetchURL)[1].Texture 1039 | 1040 | local NewImage = Objects.new(Button and "Round" or "SmoothButton") 1041 | NewImage.Name = ImageID 1042 | NewImage.BackgroundTransparency = 1 1043 | NewImage.Size = UDim2.fromOffset(20,20) 1044 | NewImage.ScaleType = Enum.ScaleType.Stretch 1045 | NewImage.Image = Image 1046 | NewImage.ZIndex = 200 1047 | NewImage.ImageTransparency = 1 1048 | 1049 | if Button then 1050 | NewImage.Position = UDim2.fromScale(0,0.5) - UDim2.fromOffset(0,10) 1051 | NewImage.Parent = Button 1052 | else 1053 | Button = NewImage 1054 | end 1055 | 1056 | else 1057 | local Settings = { 1058 | TextSize = 12, 1059 | Font = Enum.Font.GothamBold, 1060 | Vector = Vector2.new(0,0) 1061 | } 1062 | 1063 | local TextSize = TextService:GetTextSize(Title:upper(), Settings.TextSize, Settings.Font, Settings.Vector).X 1064 | 1065 | Button = Objects.new("Button") 1066 | Button.Name = Title:upper() 1067 | Button.TextXAlignment = Enum.TextXAlignment.Center 1068 | Button.TextSize = Settings.TextSize 1069 | Button.Font = Settings.Font 1070 | Button.Text = Title:upper() 1071 | Button.Size = UDim2.fromScale(0,1) + UDim2.fromOffset(TextSize+10) 1072 | Button.ZIndex = 200 1073 | Button.TextTransparency = 1 1074 | end 1075 | 1076 | Button.Parent = NavigationBarContent 1077 | 1078 | local PageContentFrame = Objects.new("Scroll") 1079 | PageContentFrame.Name = Title:upper() or ImageID 1080 | PageContentFrame.Visible = (TabCount == 0) 1081 | PageContentFrame.ZIndex = 50 1082 | PageContentFrame.Parent = Content 1083 | 1084 | table.insert(ButtonTrack, Button) 1085 | table.insert(PageTrack, PageContentFrame) 1086 | 1087 | Button.MouseButton1Down:Connect(function() 1088 | for _, Track in next, ButtonTrack do 1089 | if not (Track == Button) then 1090 | TweenService:Create(Track, TweenInfo.new(0.15), {TextTransparency = 0.5}):Play() 1091 | pcall(function() 1092 | TweenService:Create(Track:FindFirstChildWhichIsA("ImageLabel"), TweenInfo.new(0.15), {ImageTransparency = 0.5}):Play() 1093 | end) 1094 | else 1095 | TweenService:Create(Track, TweenInfo.new(0.15), {TextTransparency = 0}):Play() 1096 | pcall(function() 1097 | TweenService:Create(Track:FindFirstChildWhichIsA("ImageLabel"), TweenInfo.new(0.15), {ImageTransparency = 0}):Play() 1098 | end) 1099 | end 1100 | end 1101 | for _, Track in next, PageTrack do 1102 | Track.Visible = (Track == PageContentFrame) 1103 | end 1104 | end) 1105 | 1106 | local PagePadding = Objects.new("UIPadding") 1107 | PagePadding.PaddingLeft = UDim.new(0,5) 1108 | PagePadding.PaddingRight = UDim.new(0,5) 1109 | PagePadding.PaddingTop = UDim.new(0,5) 1110 | PagePadding.PaddingBottom = UDim.new(0,5) 1111 | PagePadding.Parent = PageContentFrame 1112 | 1113 | local PageList = Objects.new("UIListLayout") 1114 | PageList.SortOrder = Enum.SortOrder.LayoutOrder 1115 | PageList.Padding = UDim.new(0,5) 1116 | PageList.Parent = PageContentFrame 1117 | 1118 | PageList:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() 1119 | PageContentFrame.CanvasSize = UDim2.fromOffset(0,PageList.AbsoluteContentSize.Y+10) 1120 | end) 1121 | 1122 | TabCount = TabCount + 1 1123 | 1124 | local OptionLibrary = {} 1125 | 1126 | function OptionLibrary.Button(ButtonConfig) 1127 | local NewButton, ButtonLabel = CreateNewButton(ButtonConfig, PageContentFrame) 1128 | 1129 | local ButtonLibrary = {} 1130 | 1131 | function ButtonLibrary:SetText(Value) 1132 | ButtonLabel.Text = Value 1133 | end 1134 | 1135 | function ButtonLibrary:GetText() 1136 | return ButtonLabel.Text 1137 | end 1138 | 1139 | return ButtonLibrary 1140 | end 1141 | 1142 | function OptionLibrary.Dropdown(DropdownConfig) 1143 | local DropdownText = DropdownConfig.Text or "nil dropdown" 1144 | local DropdownValue = DropdownConfig.Default 1145 | local DropdownCallback = DropdownConfig.Callback or function() print("nil dropdown") end 1146 | local DropdownOptions = DropdownConfig.Options or {} 1147 | local Menu = DropdownConfig.Menu or {} 1148 | 1149 | local Dropdown = Objects.new("Frame") 1150 | Dropdown.Name = "Dropdown" 1151 | Dropdown.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1152 | Dropdown.Parent = PageContentFrame 1153 | 1154 | local DropdownBar = Objects.new("Round") 1155 | DropdownBar.Name = "TitleBar" 1156 | DropdownBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1157 | DropdownBar.ImageColor3 = Theme.Dropdown 1158 | DropdownBar.ImageTransparency = 1 1159 | DropdownBar.Parent = Dropdown 1160 | 1161 | local DropdownTitle = Objects.new("Button") 1162 | DropdownTitle.Name = "Title" 1163 | DropdownTitle.Font = Enum.Font.GothamSemibold 1164 | DropdownTitle.Text = DropdownValue and DropdownText..": "..DropdownValue or DropdownText 1165 | DropdownTitle.TextColor3 = Theme.DropdownAccent 1166 | DropdownTitle.TextTransparency = 1 1167 | DropdownTitle.TextSize = 14 1168 | DropdownTitle.Parent = DropdownBar 1169 | 1170 | local DropdownToggle = Objects.new("Round") 1171 | DropdownToggle.Name = "Container" 1172 | DropdownToggle.Size = UDim2.fromOffset(24,24) 1173 | DropdownToggle.Position = UDim2.fromScale(1,0.5) - UDim2.fromOffset(27,12) 1174 | DropdownToggle.ImageColor3 = Theme.DropdownAccent 1175 | DropdownToggle.ImageTransparency = 1 -- 0.8 1176 | DropdownToggle.Parent = DropdownBar 1177 | 1178 | local DropdownButton = Objects.new("Round") 1179 | DropdownButton.Name = "Drop" 1180 | DropdownButton.Image = "http://www.roblox.com/asset/?id=5574299686" 1181 | DropdownButton.ScaleType = Enum.ScaleType.Stretch 1182 | DropdownButton.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(4,4) 1183 | DropdownButton.Position = UDim2.fromOffset(2,2) 1184 | DropdownButton.ImageColor3 = Theme.DropdownAccent 1185 | DropdownButton.ImageTransparency = 1 1186 | DropdownButton.Parent = DropdownToggle 1187 | 1188 | TweenService:Create(DropdownBar, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1189 | TweenService:Create(DropdownTitle, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1190 | TweenService:Create(DropdownToggle, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 1191 | TweenService:Create(DropdownButton, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1192 | 1193 | local DropdownContent = Objects.new("Frame") 1194 | DropdownContent.Name = "Content" 1195 | DropdownContent.Size = UDim2.fromScale(1,0) 1196 | DropdownContent.Position = UDim2.fromOffset(0,35) 1197 | DropdownContent.ClipsDescendants = true 1198 | DropdownContent.Parent = Dropdown 1199 | 1200 | local NumberOfOptions = #DropdownOptions 1201 | local DropToggle = false 1202 | local DropdownSize = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(NumberOfOptions*20) + ((NumberOfOptions - 1) * 5)) 1203 | 1204 | local DropdownList = Objects.new("UIListLayout") 1205 | DropdownList.SortOrder = Enum.SortOrder.LayoutOrder 1206 | DropdownList.Padding = UDim.new(0,5) 1207 | DropdownList.Parent = DropdownContent 1208 | 1209 | DropdownList:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() 1210 | if DropToggle then 1211 | DropdownContent.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(DropdownList.AbsoluteContentSize.Y) 1212 | DropdownSize = UDim2.fromScale(1,0) + UDim2.fromOffset(DropdownList.AbsoluteContentSize.Y) 1213 | end 1214 | end) 1215 | 1216 | table.foreach(DropdownOptions, function(_, Value) 1217 | local NewButton = CreateNewButton({ 1218 | Text = Value, 1219 | Callback = function() end 1220 | }, DropdownContent) 1221 | 1222 | NewButton.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,20) 1223 | NewButton.MouseButton1Down:Connect(function() 1224 | DropdownCallback(Value) 1225 | DropdownTitle.Text = DropdownText..": "..Value 1226 | DropdownValue = Value 1227 | end) 1228 | end) 1229 | 1230 | DropdownTitle.MouseButton1Down:Connect(function() 1231 | DropToggle = not DropToggle 1232 | TweenService:Create(DropdownButton, TweenInfo.new(0.15), {Rotation = DropToggle and 135 or 0}):Play() 1233 | TweenService:Create(DropdownContent, TweenInfo.new(0.15), {Size = DropToggle and DropdownSize or UDim2.fromScale(1,0)}):Play() 1234 | TweenService:Create(Dropdown, TweenInfo.new(0.15), {Size = DropToggle and (DropdownSize + UDim2.fromOffset(0,35)) or (UDim2.fromScale(1,0) + UDim2.fromOffset(0,30))}):Play() 1235 | end) 1236 | 1237 | local MenuAdded, MenuButton = TryAddMenu(DropdownBar, Menu, {}) 1238 | 1239 | if MenuAdded then 1240 | DropdownToggle.Position = DropdownToggle.Position - UDim2.fromOffset(25,0) 1241 | MenuButton.ImageColor3 = Theme.DropdownAccent 1242 | end 1243 | 1244 | local DropdownLibrary = {} 1245 | 1246 | function DropdownLibrary:SetText(Value) 1247 | DropdownTitle.Text = Value 1248 | end 1249 | 1250 | function DropdownLibrary:GetText() 1251 | return DropdownTitle.Text 1252 | end 1253 | 1254 | function DropdownLibrary:GetValue() 1255 | return DropdownValue 1256 | end 1257 | 1258 | function DropdownLibrary:SetOptions(NewMenu) 1259 | DropdownOptions = NewMenu or {} 1260 | NumberOfOptions = #DropdownOptions 1261 | DropdownSize = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(NumberOfOptions*20) + ((NumberOfOptions - 1) * 5)) 1262 | 1263 | if DropdownContent then 1264 | DropdownContent:Destroy() 1265 | end 1266 | 1267 | TweenService:Create(Dropdown, TweenInfo.new(0.15), {Size = DropToggle and (DropdownSize + UDim2.fromOffset(0,35)) or (UDim2.fromScale(1,0) + UDim2.fromOffset(0,30))}):Play() 1268 | 1269 | DropdownContent = Objects.new("Frame") 1270 | DropdownContent.Name = "Content" 1271 | DropdownContent.Size = DropToggle and DropdownSize or UDim2.fromScale(1,0) 1272 | DropdownContent.Position = UDim2.fromOffset(0,35) 1273 | DropdownContent.ClipsDescendants = true 1274 | DropdownContent.Parent = Dropdown 1275 | 1276 | local DropdownList = Objects.new("UIListLayout") 1277 | DropdownList.SortOrder = Enum.SortOrder.LayoutOrder 1278 | DropdownList.Padding = UDim.new(0,5) 1279 | DropdownList.Parent = DropdownContent 1280 | 1281 | table.foreach(DropdownOptions, function(_, Value) 1282 | local NewButton = CreateNewButton({ 1283 | Text = Value, 1284 | Callback = function() end 1285 | }, DropdownContent) 1286 | 1287 | NewButton.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,20) 1288 | NewButton.MouseButton1Down:Connect(function() 1289 | DropdownCallback(Value) 1290 | DropdownTitle.Text = DropdownText..": "..Value 1291 | DropdownValue = Value 1292 | end) 1293 | end) 1294 | end 1295 | 1296 | function DropdownLibrary:GetOptions() 1297 | return DropdownOptions 1298 | end 1299 | 1300 | if DropdownOptions.Default then 1301 | DropdownTitle.Text = DropdownText..": "..DropdownOptions.Default 1302 | end 1303 | 1304 | return DropdownLibrary 1305 | end 1306 | 1307 | function OptionLibrary.ChipSet(ChipSetConfig) 1308 | local ChipSetText = ChipSetConfig.Text or "nil chipset" 1309 | local ChipSetCallback = ChipSetConfig.Callback or function() print("nil chipset") end 1310 | local ChipSetOptions = ChipSetConfig.Options or {} 1311 | 1312 | local TotalOptions = 0 1313 | 1314 | table.foreach(ChipSetOptions, function() 1315 | TotalOptions = TotalOptions + 1 1316 | end) 1317 | 1318 | if TotalOptions > 0 then 1319 | local Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(TotalOptions*30)+((TotalOptions+1)*5)) 1320 | 1321 | local ChipSet = Objects.new("Round") 1322 | ChipSet.Name = "ChipSet" 1323 | ChipSet.Size = Size 1324 | ChipSet.ImageColor3 = Theme.ChipSet 1325 | ChipSet.ImageTransparency = 1 1326 | ChipSet.Parent = PageContentFrame 1327 | 1328 | local ChipList = Objects.new("UIListLayout") 1329 | ChipList.SortOrder = Enum.SortOrder.LayoutOrder 1330 | ChipList.Padding = UDim.new(0,5) 1331 | ChipList.Parent = ChipSet 1332 | 1333 | local ChipPadding = Objects.new("UIPadding") 1334 | ChipPadding.PaddingBottom = UDim.new(0,5) 1335 | ChipPadding.PaddingTop = UDim.new(0,5) 1336 | ChipPadding.PaddingRight= UDim.new(0,5) 1337 | ChipPadding.PaddingLeft = UDim.new(0,5) 1338 | ChipPadding.Parent = ChipSet 1339 | 1340 | local BuildTable = {} 1341 | 1342 | table.foreach(ChipSetOptions, function(Key, Value) 1343 | if typeof(Value) == "table" then 1344 | BuildTable[Key] = Value.Enabled 1345 | else 1346 | BuildTable[Key] = Value 1347 | end 1348 | end) 1349 | 1350 | ChipSetCallback(BuildTable) 1351 | 1352 | TweenService:Create(ChipSet, TweenInfo.new(0.5), {ImageTransparency = 0.9}):Play() 1353 | 1354 | table.foreach(ChipSetOptions, function(Key, Value) 1355 | local ChipItem = Objects.new("SmoothButton") 1356 | ChipItem.Name = "ChipItem" 1357 | ChipItem.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1358 | ChipItem.ImageColor3 = BuildTable[Key] and Theme.ChipSet or Theme.ChipSetAccent 1359 | ChipItem.ImageTransparency = 1 1360 | ChipItem.Parent = ChipSet 1361 | 1362 | local ChipShadow = Objects.new("Shadow") 1363 | ChipShadow.ImageColor3 = BuildTable[Key] and Theme.ChipSet or Theme.ChipSetAccent 1364 | ChipShadow.ImageTransparency = 1 1365 | ChipShadow.Parent = ChipItem 1366 | 1367 | local Tick = Objects.new("Round") 1368 | Tick.ScaleType = Enum.ScaleType.Stretch 1369 | Tick.Image = "http://www.roblox.com/asset/?id=5554953789" 1370 | Tick.ImageColor3 = Theme.ChipSetAccent 1371 | Tick.ImageTransparency = 1 1372 | Tick.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(10,10) 1373 | Tick.SizeConstraint = Enum.SizeConstraint.RelativeYY 1374 | Tick.Position = UDim2.fromOffset(5,5) 1375 | Tick.Parent = ChipItem 1376 | 1377 | local ChipLabel = Objects.new("Label") 1378 | ChipLabel.Size = BuildTable[Key] and (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) or (UDim2.fromScale(1,1) - UDim2.fromOffset(5)) 1379 | ChipLabel.Position = BuildTable[Key] and UDim2.fromOffset(30) or UDim2.fromOffset(5) 1380 | ChipLabel.Text = Key 1381 | ChipLabel.Font = Enum.Font.Gotham 1382 | ChipLabel.TextSize = 12 1383 | ChipLabel.TextColor3 = BuildTable[Key] and Theme.ChipSetAccent or Theme.ChipSet 1384 | ChipLabel.TextTransparency = 1 1385 | ChipLabel.Parent = ChipItem 1386 | 1387 | TweenService:Create(ChipItem, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1388 | TweenService:Create(ChipShadow, TweenInfo.new(0.5), {ImageTransparency = 0.2}):Play() 1389 | TweenService:Create(Tick, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 1}):Play() 1390 | TweenService:Create(ChipLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1391 | 1392 | local ChipMenu 1393 | 1394 | if typeof(Value) == "table" then 1395 | local Menu = Value.Menu or {} 1396 | 1397 | local MenuAdded, MenuButton = TryAddMenu(ChipItem, Menu, {}) 1398 | 1399 | MenuButton.ImageColor3 = BuildTable[Key] and Theme.ChipSetAccent or Theme.ChipSet 1400 | 1401 | ChipMenu = MenuButton 1402 | end 1403 | 1404 | ChipItem.MouseButton1Down:Connect(function() 1405 | BuildTable[Key] = not BuildTable[Key] 1406 | local Enabled = BuildTable[Key] 1407 | TweenService:Create(ChipItem, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSet or Theme.ChipSetAccent}):Play() 1408 | TweenService:Create(ChipShadow, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSet or Theme.ChipSetAccent}):Play() 1409 | TweenService:Create(Tick, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 1}):Play() 1410 | TweenService:Create(ChipLabel, TweenInfo.new(0.15), {TextColor3 = Enabled and Theme.ChipSetAccent or Theme.ChipSet, Position = Enabled and UDim2.fromOffset(30) or UDim2.fromOffset(5), Size = Enabled and (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) or (UDim2.fromScale(1,1) - UDim2.fromOffset(5))}):Play() 1411 | if ChipMenu then 1412 | TweenService:Create(ChipMenu, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSetAccent or Theme.ChipSet}):Play() 1413 | end 1414 | ChipSetCallback(BuildTable) 1415 | end) 1416 | end) 1417 | 1418 | local ChipSetLibrary = {} 1419 | 1420 | function ChipSetLibrary:SetOptions(NewMenu) 1421 | ChipSetOptions = NewMenu or {} 1422 | 1423 | TotalOptions = 0 1424 | 1425 | table.foreach(ChipSetOptions, function() 1426 | TotalOptions = TotalOptions + 1 1427 | end) 1428 | 1429 | for _, Element in next, ChipSet:GetChildren() do 1430 | Element:Destroy() 1431 | end 1432 | 1433 | Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(TotalOptions*30)+((TotalOptions+1)*5)) 1434 | 1435 | TweenService:Create(ChipSet, TweenInfo.new(0.15), {Size = Size}):Play() 1436 | 1437 | local ChipList = Objects.new("UIListLayout") 1438 | ChipList.SortOrder = Enum.SortOrder.LayoutOrder 1439 | ChipList.Padding = UDim.new(0,5) 1440 | ChipList.Parent = ChipSet 1441 | 1442 | local ChipPadding = Objects.new("UIPadding") 1443 | ChipPadding.PaddingBottom = UDim.new(0,5) 1444 | ChipPadding.PaddingTop = UDim.new(0,5) 1445 | ChipPadding.PaddingRight= UDim.new(0,5) 1446 | ChipPadding.PaddingLeft = UDim.new(0,5) 1447 | ChipPadding.Parent = ChipSet 1448 | 1449 | local BuildTable = {} 1450 | 1451 | table.foreach(ChipSetOptions, function(Key, Value) 1452 | if typeof(Value) == "table" then 1453 | BuildTable[Key] = Value.Enabled 1454 | else 1455 | BuildTable[Key] = Value 1456 | end 1457 | end) 1458 | 1459 | ChipSetCallback(BuildTable) 1460 | 1461 | TweenService:Create(ChipSet, TweenInfo.new(0.5), {ImageTransparency = 0.9}):Play() 1462 | 1463 | table.foreach(ChipSetOptions, function(Key, Value) 1464 | local ChipItem = Objects.new("SmoothButton") 1465 | ChipItem.Name = "ChipItem" 1466 | ChipItem.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1467 | ChipItem.ImageColor3 = BuildTable[Key] and Theme.ChipSet or Theme.ChipSetAccent 1468 | ChipItem.ImageTransparency = 1 1469 | ChipItem.Parent = ChipSet 1470 | 1471 | local ChipShadow = Objects.new("Shadow") 1472 | ChipShadow.ImageColor3 = BuildTable[Key] and Theme.ChipSet or Theme.ChipSetAccent 1473 | ChipShadow.ImageTransparency = 1 1474 | ChipShadow.Parent = ChipItem 1475 | 1476 | local Tick = Objects.new("Round") 1477 | Tick.ScaleType = Enum.ScaleType.Stretch 1478 | Tick.Image = "http://www.roblox.com/asset/?id=5554953789" 1479 | Tick.ImageColor3 = Theme.ChipSetAccent 1480 | Tick.ImageTransparency = 1 1481 | Tick.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(10,10) 1482 | Tick.SizeConstraint = Enum.SizeConstraint.RelativeYY 1483 | Tick.Position = UDim2.fromOffset(5,5) 1484 | Tick.Parent = ChipItem 1485 | 1486 | local ChipLabel = Objects.new("Label") 1487 | ChipLabel.Size = BuildTable[Key] and (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) or (UDim2.fromScale(1,1) - UDim2.fromOffset(5)) 1488 | ChipLabel.Position = BuildTable[Key] and UDim2.fromOffset(30) or UDim2.fromOffset(5) 1489 | ChipLabel.Text = Key 1490 | ChipLabel.Font = Enum.Font.Gotham 1491 | ChipLabel.TextSize = 12 1492 | ChipLabel.TextColor3 = BuildTable[Key] and Theme.ChipSetAccent or Theme.ChipSet 1493 | ChipLabel.TextTransparency = 1 1494 | ChipLabel.Parent = ChipItem 1495 | 1496 | TweenService:Create(ChipItem, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1497 | TweenService:Create(ChipShadow, TweenInfo.new(0.5), {ImageTransparency = 0.2}):Play() 1498 | TweenService:Create(Tick, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 1}):Play() 1499 | TweenService:Create(ChipLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1500 | 1501 | local ChipMenu 1502 | 1503 | if typeof(Value) == "table" then 1504 | local Menu = Value.Menu or {} 1505 | 1506 | local MenuAdded, MenuButton = TryAddMenu(ChipItem, Menu, {}) 1507 | 1508 | MenuButton.ImageColor3 = BuildTable[Key] and Theme.ChipSetAccent or Theme.ChipSet 1509 | 1510 | ChipMenu = MenuButton 1511 | end 1512 | 1513 | ChipItem.MouseButton1Down:Connect(function() 1514 | BuildTable[Key] = not BuildTable[Key] 1515 | local Enabled = BuildTable[Key] 1516 | TweenService:Create(ChipItem, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSet or Theme.ChipSetAccent}):Play() 1517 | TweenService:Create(ChipShadow, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSet or Theme.ChipSetAccent}):Play() 1518 | TweenService:Create(Tick, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 1}):Play() 1519 | TweenService:Create(ChipLabel, TweenInfo.new(0.15), {TextColor3 = Enabled and Theme.ChipSetAccent or Theme.ChipSet, Position = Enabled and UDim2.fromOffset(30) or UDim2.fromOffset(5), Size = Enabled and (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) or (UDim2.fromScale(1,1) - UDim2.fromOffset(5))}):Play() 1520 | if ChipMenu then 1521 | TweenService:Create(ChipMenu, TweenInfo.new(0.15), {ImageColor3 = Enabled and Theme.ChipSetAccent or Theme.ChipSet}):Play() 1522 | end 1523 | ChipSetCallback(BuildTable) 1524 | end) 1525 | end) 1526 | end 1527 | 1528 | function ChipSetLibrary:GetOptions() 1529 | return ChipSetOptions 1530 | end 1531 | 1532 | return ChipSetLibrary 1533 | end 1534 | end 1535 | 1536 | function OptionLibrary.DataTable(DataTableConfig) 1537 | local DataTableText = DataTableConfig.Text or "nil chipset" 1538 | local DataTableCallback = DataTableConfig.Callback or function() print("nil chipset") end 1539 | local DataTableOptions = DataTableConfig.Options or {} 1540 | 1541 | local TotalOptions = 0 1542 | 1543 | table.foreach(DataTableOptions, function() 1544 | TotalOptions = TotalOptions + 1 1545 | end) 1546 | 1547 | if TotalOptions > 0 then 1548 | 1549 | local Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(TotalOptions*30)+((TotalOptions+1)*5)) 1550 | 1551 | local DataTable = Objects.new("Round") 1552 | DataTable.Name = "DataTable" 1553 | DataTable.Size = Size 1554 | DataTable.ImageColor3 = Theme.DataTable 1555 | DataTable.ImageTransparency = 1 1556 | DataTable.Parent = PageContentFrame 1557 | 1558 | local DataShadow = Objects.new("Shadow") 1559 | DataShadow.ImageColor3 = Theme.DataTable 1560 | DataShadow.ImageTransparency = 1 1561 | DataShadow.Parent = DataTable 1562 | 1563 | local DataContainer = Objects.new("Frame") 1564 | DataContainer.Name = "Container" 1565 | DataContainer.Parent = DataTable 1566 | 1567 | local DataList = Objects.new("UIListLayout") 1568 | DataList.SortOrder = Enum.SortOrder.LayoutOrder 1569 | DataList.Padding = UDim.new(0,5) 1570 | DataList.Parent = DataContainer 1571 | 1572 | local DataPadding = Objects.new("UIPadding") 1573 | DataPadding.PaddingBottom = UDim.new(0,5) 1574 | DataPadding.PaddingTop = UDim.new(0,5) 1575 | DataPadding.PaddingRight= UDim.new(0,5) 1576 | DataPadding.PaddingLeft = UDim.new(0,5) 1577 | DataPadding.Parent = DataContainer 1578 | 1579 | local BuildTable = {} 1580 | 1581 | table.foreach(DataTableOptions, function(Key, Value) 1582 | if typeof(Value) == "table" then 1583 | BuildTable[Key] = Value.Enabled 1584 | else 1585 | BuildTable[Key] = Value 1586 | end 1587 | end) 1588 | 1589 | DataTableCallback(BuildTable) 1590 | 1591 | TweenService:Create(DataTable, TweenInfo.new(0.5), {ImageTransparency = 0.9}):Play() 1592 | TweenService:Create(DataShadow, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 1593 | 1594 | table.foreach(DataTableOptions, function(Key, Value) 1595 | local DataItem = Objects.new("SmoothButton") 1596 | DataItem.Name = "DataItem" 1597 | DataItem.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1598 | DataItem.ImageColor3 = BuildTable[Key] and Theme.DataTable or Theme.DataTableAccent 1599 | DataItem.ImageTransparency = 1 1600 | DataItem.Parent = DataContainer 1601 | 1602 | local DataTracker = Objects.new("Round") 1603 | DataTracker.Name = "Tracker" 1604 | DataTracker.Size = UDim2.fromOffset(24,24) 1605 | DataTracker.Position = UDim2.fromScale(0,0.5) + UDim2.fromOffset(3,-12) 1606 | DataTracker.ImageColor3 = Theme.DataTable 1607 | DataTracker.ImageTransparency = 1 1608 | DataTracker.Parent = DataItem 1609 | 1610 | local Tick = Objects.new("Round") 1611 | Tick.Name = "Tick" 1612 | Tick.ScaleType = Enum.ScaleType.Stretch 1613 | Tick.Image = "http://www.roblox.com/asset/?id=5554953789" 1614 | Tick.ImageColor3 = Theme.DataTableAccent 1615 | Tick.ImageTransparency = 1 1616 | Tick.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(4,4) 1617 | Tick.SizeConstraint = Enum.SizeConstraint.RelativeYY 1618 | Tick.Position = UDim2.fromOffset(2,2) 1619 | Tick.Parent = DataTracker 1620 | 1621 | local DataLabel = Objects.new("Label") 1622 | DataLabel.Name = "Value" 1623 | DataLabel.Size = (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) 1624 | DataLabel.Position = UDim2.fromOffset(30) or UDim2.fromOffset(5) 1625 | DataLabel.Text = Key 1626 | DataLabel.Font = Enum.Font.Gotham 1627 | DataLabel.TextSize = 14 1628 | DataLabel.TextColor3 = Theme.DataTable 1629 | DataLabel.TextTransparency = 1 1630 | DataLabel.Parent = DataItem 1631 | 1632 | TweenService:Create(DataItem, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0.8 or 0}):Play() 1633 | TweenService:Create(DataTracker, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 0.8}):Play() 1634 | TweenService:Create(Tick, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 0.7}):Play() 1635 | TweenService:Create(DataLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1636 | 1637 | local DataMenu 1638 | 1639 | if typeof(Value) == "table" then 1640 | local Menu = Value.Menu or {} 1641 | 1642 | local MenuAdded, MenuButton = TryAddMenu(DataItem, Menu, {}) 1643 | 1644 | MenuButton.ImageColor3 = Theme.DataTable 1645 | 1646 | DataMenu = MenuButton 1647 | end 1648 | 1649 | DataItem.MouseButton1Down:Connect(function() 1650 | BuildTable[Key] = not BuildTable[Key] 1651 | local Enabled = BuildTable[Key] 1652 | TweenService:Create(DataItem, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0.8 or 0, ImageColor3 = Enabled and Theme.DataTable or Theme.DataTableAccent}):Play() 1653 | TweenService:Create(Tick, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 0.7}):Play() 1654 | TweenService:Create(DataTracker, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 0.8}):Play() 1655 | DataTableCallback(BuildTable) 1656 | end) 1657 | end) 1658 | 1659 | local DataTableLibrary = {} 1660 | 1661 | function DataTableLibrary:SetOptions(NewMenu) 1662 | if DataContainer then 1663 | DataContainer:Destroy() 1664 | end 1665 | 1666 | DataTableOptions = NewMenu or {} 1667 | 1668 | TotalOptions = 0 1669 | 1670 | table.foreach(DataTableOptions, function() 1671 | TotalOptions = TotalOptions + 1 1672 | end) 1673 | 1674 | Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,(TotalOptions*30)+((TotalOptions+1)*5)) 1675 | 1676 | DataTable.Size = Size 1677 | 1678 | DataContainer = Objects.new("Frame") 1679 | DataContainer.Name = "Container" 1680 | DataContainer.Parent = DataTable 1681 | 1682 | local DataList = Objects.new("UIListLayout") 1683 | DataList.SortOrder = Enum.SortOrder.LayoutOrder 1684 | DataList.Padding = UDim.new(0,5) 1685 | DataList.Parent = DataContainer 1686 | 1687 | local DataPadding = Objects.new("UIPadding") 1688 | DataPadding.PaddingBottom = UDim.new(0,5) 1689 | DataPadding.PaddingTop = UDim.new(0,5) 1690 | DataPadding.PaddingRight= UDim.new(0,5) 1691 | DataPadding.PaddingLeft = UDim.new(0,5) 1692 | DataPadding.Parent = DataContainer 1693 | 1694 | local BuildTable = {} 1695 | 1696 | table.foreach(DataTableOptions, function(Key, Value) 1697 | if typeof(Value) == "table" then 1698 | BuildTable[Key] = Value.Enabled 1699 | else 1700 | BuildTable[Key] = Value 1701 | end 1702 | end) 1703 | 1704 | DataTableCallback(BuildTable) 1705 | 1706 | TweenService:Create(DataTable, TweenInfo.new(0.5), {ImageTransparency = 0.9}):Play() 1707 | TweenService:Create(DataShadow, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 1708 | 1709 | table.foreach(DataTableOptions, function(Key, Value) 1710 | local DataItem = Objects.new("SmoothButton") 1711 | DataItem.Name = "DataItem" 1712 | DataItem.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 1713 | DataItem.ImageColor3 = BuildTable[Key] and Theme.DataTable or Theme.DataTableAccent 1714 | DataItem.ImageTransparency = 1 1715 | DataItem.Parent = DataContainer 1716 | 1717 | local DataTracker = Objects.new("Round") 1718 | DataTracker.Name = "Tracker" 1719 | DataTracker.Size = UDim2.fromOffset(24,24) 1720 | DataTracker.Position = UDim2.fromScale(0,0.5) + UDim2.fromOffset(3,-12) 1721 | DataTracker.ImageColor3 = Theme.DataTable 1722 | DataTracker.ImageTransparency = 1 1723 | DataTracker.Parent = DataItem 1724 | 1725 | local Tick = Objects.new("Round") 1726 | Tick.Name = "Tick" 1727 | Tick.ScaleType = Enum.ScaleType.Stretch 1728 | Tick.Image = "http://www.roblox.com/asset/?id=5554953789" 1729 | Tick.ImageColor3 = Theme.DataTableAccent 1730 | Tick.ImageTransparency = 1 1731 | Tick.Size = UDim2.fromScale(1,1) - UDim2.fromOffset(4,4) 1732 | Tick.SizeConstraint = Enum.SizeConstraint.RelativeYY 1733 | Tick.Position = UDim2.fromOffset(2,2) 1734 | Tick.Parent = DataTracker 1735 | 1736 | local DataLabel = Objects.new("Label") 1737 | DataLabel.Name = "Value" 1738 | DataLabel.Size = (UDim2.fromScale(1,1) - UDim2.fromOffset(30)) 1739 | DataLabel.Position = UDim2.fromOffset(30) or UDim2.fromOffset(5) 1740 | DataLabel.Text = Key 1741 | DataLabel.Font = Enum.Font.Gotham 1742 | DataLabel.TextSize = 14 1743 | DataLabel.TextColor3 = Theme.DataTable 1744 | DataLabel.TextTransparency = 1 1745 | DataLabel.Parent = DataItem 1746 | 1747 | TweenService:Create(DataItem, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0.8 or 0}):Play() 1748 | TweenService:Create(DataTracker, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 0.8}):Play() 1749 | TweenService:Create(Tick, TweenInfo.new(0.5), {ImageTransparency = BuildTable[Key] and 0 or 0.7}):Play() 1750 | TweenService:Create(DataLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1751 | 1752 | local DataMenu 1753 | 1754 | if typeof(Value) == "table" then 1755 | local Menu = Value.Menu or {} 1756 | 1757 | local MenuAdded, MenuButton = TryAddMenu(DataItem, Menu, {}) 1758 | 1759 | MenuButton.ImageColor3 = Theme.DataTable 1760 | 1761 | DataMenu = MenuButton 1762 | end 1763 | 1764 | DataItem.MouseButton1Down:Connect(function() 1765 | BuildTable[Key] = not BuildTable[Key] 1766 | local Enabled = BuildTable[Key] 1767 | TweenService:Create(DataItem, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0.8 or 0, ImageColor3 = Enabled and Theme.DataTable or Theme.DataTableAccent}):Play() 1768 | TweenService:Create(Tick, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 0.7}):Play() 1769 | TweenService:Create(DataTracker, TweenInfo.new(0.15), {ImageTransparency = Enabled and 0 or 0.8}):Play() 1770 | DataTableCallback(BuildTable) 1771 | end) 1772 | end) 1773 | end 1774 | 1775 | function DataTableLibrary:GetOptions() 1776 | return DataTableOptions 1777 | end 1778 | 1779 | return DataTableLibrary 1780 | end 1781 | end 1782 | 1783 | function OptionLibrary.ColorPicker(ColorPickerConfig) 1784 | local ColorPickerText = ColorPickerConfig.Text or "nil color picker" 1785 | local ColorPickerCallback = ColorPickerConfig.Callback or function() print("nil color picker") end 1786 | local ColorPickerDefault = ColorPickerConfig.Default or Color3.fromRGB(255,255,255) 1787 | local ColorPickerMenu = ColorPickerConfig.Menu or {} 1788 | local ColorPickerToggle = false 1789 | 1790 | local H, S, V = Objects.new("NumberValue"), Objects.new("NumberValue"), Objects.new("NumberValue") 1791 | 1792 | H.Value, S.Value, V.Value = Color3.toHSV(ColorPickerDefault) 1793 | 1794 | local ColorPicker = Objects.new("SmoothButton") 1795 | ColorPicker.Name = "ColorPicker" 1796 | ColorPicker.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,40) 1797 | ColorPicker.ImageColor3 = Theme.ColorPicker 1798 | ColorPicker.ImageTransparency = 1 1799 | ColorPicker.ClipsDescendants = true 1800 | ColorPicker.Parent = PageContentFrame 1801 | 1802 | ColorPicker.MouseButton1Down:Connect(function() 1803 | ColorPickerToggle = not ColorPickerToggle 1804 | TweenService:Create(ColorPicker, TweenInfo.new(0.15), {Size = UDim2.fromScale(1,0) + (ColorPickerToggle and UDim2.fromOffset(0,115) or UDim2.fromOffset(0,40))}):Play() 1805 | end) 1806 | 1807 | local ColorBar = Objects.new("Round") 1808 | ColorBar.Name = "TitleBar" 1809 | ColorBar.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-10,30) 1810 | ColorBar.Position = UDim2.fromOffset(5,5) 1811 | ColorBar.ImageColor3 = Theme.ColorPickerAccent 1812 | ColorBar.ImageTransparency = 1 1813 | ColorBar.Parent = ColorPicker 1814 | 1815 | local ColorShadow = Objects.new("Shadow") 1816 | ColorShadow.ImageColor3 = Theme.ColorPickerAccent 1817 | ColorShadow.ImageTransparency = 1 1818 | ColorShadow.Parent = ColorBar 1819 | 1820 | local ColorLabel = Objects.new("Label") 1821 | ColorLabel.Name = "Title" 1822 | ColorLabel.Font = Enum.Font.GothamSemibold 1823 | ColorLabel.TextColor3 = Theme.ColorPickerAccent 1824 | ColorLabel.TextSize = 14 1825 | ColorLabel.Text = ColorPickerText 1826 | ColorLabel.TextTransparency = 1 1827 | ColorLabel.Parent = ColorBar 1828 | 1829 | local ColorTracker = Objects.new("Round") 1830 | ColorTracker.Name = "Tracker" 1831 | ColorTracker.Size = UDim2.fromOffset(50,20) 1832 | ColorTracker.Position = UDim2.fromScale(1,0) + UDim2.fromOffset(-55,5) 1833 | ColorTracker.ImageColor3 = ColorPickerDefault 1834 | ColorTracker.ImageTransparency = 1 1835 | ColorTracker.Parent = ColorBar 1836 | 1837 | local TrackerShadow = Objects.new("Shadow") 1838 | TrackerShadow.ImageColor3 = ColorTracker.ImageColor3 1839 | TrackerShadow.ImageTransparency = 1 1840 | TrackerShadow.Parent = ColorTracker 1841 | 1842 | ColorTracker:GetPropertyChangedSignal("ImageColor3"):Connect(function() 1843 | TrackerShadow.ImageColor3 = ColorTracker.ImageColor3 1844 | end) 1845 | 1846 | local Hue = Objects.new("Round") 1847 | Hue.Name = "Container" 1848 | Hue.Position = UDim2.fromOffset(5,40) 1849 | Hue.Size = UDim2.fromOffset(25,20) 1850 | Hue.ImageColor3 = Theme.ColorPickerAccent 1851 | Hue.ImageTransparency = 0.8 1852 | Hue.Parent = ColorPicker 1853 | 1854 | local Saturation = Hue:Clone() 1855 | Saturation.Position = Saturation.Position + UDim2.fromOffset(0,25) 1856 | Saturation.Parent = ColorPicker 1857 | 1858 | local Value = Saturation:Clone() 1859 | Value.Position = Value.Position + UDim2.fromOffset(0,25) 1860 | Value.Parent = ColorPicker 1861 | 1862 | local HueLabel = Objects.new("Label") 1863 | HueLabel.Name = "Label" 1864 | HueLabel.TextXAlignment = Enum.TextXAlignment.Center 1865 | HueLabel.Position = UDim2.fromScale(0,0) 1866 | HueLabel.Size = UDim2.fromScale(1,1) 1867 | HueLabel.Text = "H" 1868 | HueLabel.TextColor3 = Theme.ColorPickerAccent 1869 | HueLabel.TextSize = 12 1870 | HueLabel.Font = Enum.Font.GothamBold 1871 | HueLabel.TextTransparency = 1 1872 | HueLabel.Parent = Hue 1873 | 1874 | local SaturationLabel = HueLabel:Clone() 1875 | SaturationLabel.Text = "S" 1876 | SaturationLabel.Parent = Saturation 1877 | 1878 | local ValueLabel = HueLabel:Clone() 1879 | ValueLabel.Text = "V" 1880 | ValueLabel.Parent = Value 1881 | 1882 | local function CSK(T,C) 1883 | return ColorSequenceKeypoint.new(T,C) 1884 | end 1885 | 1886 | local RainbowGradient = Objects.new("UIGradient") 1887 | RainbowGradient.Color = ColorSequence.new({ 1888 | CSK(0, Color3.fromRGB(255,0,0)), 1889 | CSK(0.157, Color3.fromRGB(255,0,255)), 1890 | CSK(0.323, Color3.fromRGB(0,0,255)), 1891 | CSK(0.488, Color3.fromRGB(0,255,255)), 1892 | CSK(0.66, Color3.fromRGB(0,255,0)), 1893 | CSK(0.817, Color3.fromRGB(255,255,0)), 1894 | CSK(1, Color3.fromRGB(255,0,0)) 1895 | }) 1896 | 1897 | local BlackWhiteGradient = Objects.new("UIGradient") 1898 | BlackWhiteGradient.Color = ColorSequence.new( 1899 | Color3.new(1,1,1), 1900 | Color3.new(0,0,0) 1901 | ) 1902 | 1903 | local SaturationGradient = Objects.new("UIGradient") 1904 | SaturationGradient.Color = ColorSequence.new( 1905 | Color3.fromHSV(H.Value,1,V.Value), 1906 | Color3.new(0,0,0):Lerp(Color3.fromRGB(255,255,255), V.Value) 1907 | ) 1908 | 1909 | local HueTracker = Objects.new("SmoothButton") 1910 | HueTracker.Name = "Tracker" 1911 | HueTracker.ImageColor3 = Color3.fromRGB(255,255,255) 1912 | HueTracker.ImageTransparency = 1 1913 | HueTracker.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-40,20) 1914 | HueTracker.Position = UDim2.fromOffset(35,40) 1915 | HueTracker.Parent = ColorPicker 1916 | 1917 | local SaturationTracker = HueTracker:Clone() 1918 | SaturationTracker.Position = SaturationTracker.Position + UDim2.fromOffset(0,25) 1919 | SaturationTracker.Parent = ColorPicker 1920 | 1921 | local ValueTracker = SaturationTracker:Clone() 1922 | ValueTracker.Position = ValueTracker.Position + UDim2.fromOffset(0,25) 1923 | ValueTracker.Parent = ColorPicker 1924 | 1925 | local HueShadow = Objects.new("Shadow") 1926 | HueShadow.ImageColor3 = Color3.fromRGB(255,255,255) 1927 | HueShadow.ImageTransparency = 1 1928 | HueShadow.Parent = HueTracker 1929 | 1930 | local SaturationShadow = HueShadow:Clone() 1931 | SaturationShadow.Parent = SaturationTracker 1932 | 1933 | local ValueShadow = HueShadow:Clone() 1934 | ValueShadow.Parent = ValueTracker 1935 | 1936 | local HueGrad = RainbowGradient:Clone() 1937 | HueGrad.Parent = HueTracker 1938 | local HueShadowGrad = RainbowGradient:Clone() 1939 | HueShadowGrad.Parent = HueShadow 1940 | 1941 | local ValueGrad = BlackWhiteGradient:Clone() 1942 | ValueGrad.Parent = ValueTracker 1943 | local ValueShadowGrad = BlackWhiteGradient:Clone() 1944 | ValueShadowGrad.Parent = ValueShadow 1945 | 1946 | local SaturationGrad = SaturationGradient:Clone() 1947 | SaturationGrad.Parent = SaturationTracker 1948 | local SaturationShadowGrad = SaturationGradient:Clone() 1949 | SaturationShadowGrad.Parent = SaturationShadow 1950 | 1951 | TweenService:Create(ColorPicker, TweenInfo.new(0.5), {ImageTransparency = 0.5}):Play() 1952 | TweenService:Create(ColorBar, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 1953 | TweenService:Create(ColorShadow, TweenInfo.new(0.5), {ImageTransparency = 0.5}):Play() 1954 | TweenService:Create(ColorLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1955 | TweenService:Create(HueLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1956 | TweenService:Create(SaturationLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1957 | TweenService:Create(ValueLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 1958 | TweenService:Create(ColorTracker, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1959 | TweenService:Create(TrackerShadow, TweenInfo.new(0.5), {ImageTransparency = 0.2}):Play() 1960 | TweenService:Create(HueTracker, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1961 | TweenService:Create(ValueTracker, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1962 | TweenService:Create(SaturationTracker, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1963 | TweenService:Create(HueShadow, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1964 | TweenService:Create(SaturationShadow, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1965 | TweenService:Create(ValueShadow, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 1966 | 1967 | H:GetPropertyChangedSignal("Value"):Connect(function() 1968 | ColorTracker.ImageColor3 = Color3.fromHSV(H.Value,S.Value,V.Value) 1969 | SaturationGrad.Color = ColorSequence.new( 1970 | Color3.fromHSV(H.Value,1,V.Value), 1971 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 1972 | ) 1973 | SaturationShadowGrad.Color = ColorSequence.new( 1974 | Color3.fromHSV(H.Value,1,V.Value), 1975 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 1976 | ) 1977 | ColorPickerCallback(Color3.fromHSV(H.Value,S.Value,V.Value)) 1978 | end) 1979 | 1980 | S:GetPropertyChangedSignal("Value"):Connect(function() 1981 | ColorTracker.ImageColor3 = Color3.fromHSV(H.Value,S.Value,V.Value) 1982 | SaturationGrad.Color = ColorSequence.new( 1983 | Color3.fromHSV(H.Value,1,V.Value), 1984 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 1985 | ) 1986 | SaturationShadowGrad.Color = ColorSequence.new( 1987 | Color3.fromHSV(H.Value,1,V.Value), 1988 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 1989 | ) 1990 | ColorPickerCallback(Color3.fromHSV(H.Value,S.Value,V.Value)) 1991 | end) 1992 | 1993 | V:GetPropertyChangedSignal("Value"):Connect(function() 1994 | ColorTracker.ImageColor3 = Color3.fromHSV(H.Value,S.Value,V.Value) 1995 | SaturationGrad.Color = ColorSequence.new( 1996 | Color3.fromHSV(H.Value,1,V.Value), 1997 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 1998 | ) 1999 | SaturationShadowGrad.Color = ColorSequence.new( 2000 | Color3.fromHSV(H.Value,1,V.Value), 2001 | Color3.fromRGB(0,0,0):Lerp(Color3.fromRGB(255,255,255),V.Value) 2002 | ) 2003 | ColorPickerCallback(Color3.fromHSV(H.Value,S.Value,V.Value)) 2004 | end) 2005 | 2006 | HueTracker.MouseButton1Down:Connect(function() 2007 | H.Value = 1 - GetXY(HueTracker) 2008 | local MouseMove, MouseKill 2009 | MouseMove = Mouse.Move:Connect(function() 2010 | H.Value = 1 - GetXY(HueTracker) 2011 | end) 2012 | MouseKill = InputService.InputEnded:Connect(function(UserInput) 2013 | if UserInput.UserInputType == Enum.UserInputType.MouseButton1 then 2014 | MouseMove:Disconnect() 2015 | MouseKill:Disconnect() 2016 | end 2017 | end) 2018 | end) 2019 | 2020 | ValueTracker.MouseButton1Down:Connect(function() 2021 | V.Value = 1 - GetXY(HueTracker) 2022 | local MouseMove, MouseKill 2023 | MouseMove = Mouse.Move:Connect(function() 2024 | V.Value = 1 - GetXY(HueTracker) 2025 | end) 2026 | MouseKill = InputService.InputEnded:Connect(function(UserInput) 2027 | if UserInput.UserInputType == Enum.UserInputType.MouseButton1 then 2028 | MouseMove:Disconnect() 2029 | MouseKill:Disconnect() 2030 | end 2031 | end) 2032 | end) 2033 | 2034 | SaturationTracker.MouseButton1Down:Connect(function() 2035 | S.Value = 1 - GetXY(HueTracker) 2036 | local MouseMove, MouseKill 2037 | MouseMove = Mouse.Move:Connect(function() 2038 | S.Value = 1 - GetXY(HueTracker) 2039 | end) 2040 | MouseKill = InputService.InputEnded:Connect(function(UserInput) 2041 | if UserInput.UserInputType == Enum.UserInputType.MouseButton1 then 2042 | MouseMove:Disconnect() 2043 | MouseKill:Disconnect() 2044 | end 2045 | end) 2046 | end) 2047 | 2048 | local MenuAdded, MenuButton = TryAddMenu(ColorLabel, ColorPickerMenu, {}) 2049 | 2050 | if MenuAdded then 2051 | ColorTracker.Position = ColorTracker.Position - UDim2.fromOffset(25,0) 2052 | MenuButton.ImageColor3 = Theme.ColorPickerAccent 2053 | end 2054 | 2055 | local ColorPickerLibrary = {} 2056 | 2057 | function ColorPickerLibrary:SetText(Value) 2058 | ColorLabel.Text = Value 2059 | end 2060 | 2061 | function ColorPickerLibrary:GetText() 2062 | return ColorLabel.Text 2063 | end 2064 | 2065 | function ColorPickerLibrary:SetColor(Value) 2066 | H.Value, S.Value, V.Value = Color3.toHSV(Value) 2067 | end 2068 | 2069 | function ColorPickerLibrary:GetColor() 2070 | return ColorTracker.ImageColor3 2071 | end 2072 | 2073 | return ColorPickerLibrary 2074 | end 2075 | 2076 | function OptionLibrary.Toggle(ToggleConfig) 2077 | local ToggleText = ToggleConfig.Text or "nil toggle" 2078 | local ToggleCallback = ToggleConfig.Callback or function() print("nil toggle") end 2079 | local ToggleDefault = ToggleConfig.Enabled or false 2080 | local Menu = ToggleConfig.Menu or {} 2081 | 2082 | local Toggle = Objects.new("SmoothButton") 2083 | Toggle.Name = "Toggle" 2084 | Toggle.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 2085 | Toggle.ImageColor3 = Theme.Toggle 2086 | Toggle.ImageTransparency = 1 2087 | Toggle.Parent = PageContentFrame 2088 | 2089 | local ToggleTracker = Objects.new("Round") 2090 | ToggleTracker.Name = "Tracker" 2091 | ToggleTracker.Image = "rbxassetid://3570695787" 2092 | ToggleTracker.SliceCenter = Rect.new(100,100,100,100) 2093 | ToggleTracker.SliceScale = 1 2094 | ToggleTracker.Size = UDim2.fromOffset(26,12) 2095 | ToggleTracker.Position = UDim2.fromScale(1,0.5) - UDim2.fromOffset(41,6) 2096 | ToggleTracker.ImageColor3 = Theme.Toggle 2097 | ToggleTracker.ImageTransparency = 1 2098 | ToggleTracker.Parent = Toggle 2099 | 2100 | local Dot = Objects.new("Circle") 2101 | Dot.Name = "Dot" 2102 | Dot.Size = UDim2.fromOffset(16,16) 2103 | Dot.Position = UDim2.fromScale(0,0.5) - UDim2.fromOffset(8,8) 2104 | Dot.ImageColor3 = Theme.ToggleAccent 2105 | Dot.ImageTransparency = 1 2106 | Dot.Parent = ToggleTracker 2107 | 2108 | local DotShadow = Objects.new("Round") 2109 | DotShadow.Name = "Shadow" 2110 | DotShadow.Image = "http://www.roblox.com/asset/?id=5554831957" 2111 | DotShadow.ScaleType = Enum.ScaleType.Stretch 2112 | DotShadow.Size = UDim2.fromOffset(31,31) 2113 | DotShadow.Position = UDim2.fromOffset(-8,-8) 2114 | DotShadow.ImageColor3 = Theme.Toggle 2115 | DotShadow.ImageTransparency = 1 2116 | DotShadow.Parent = Dot 2117 | 2118 | local ToggleLabel = Objects.new("Label") 2119 | ToggleLabel.Font = Enum.Font.GothamSemibold 2120 | ToggleLabel.TextSize = 14 2121 | ToggleLabel.Text = ToggleText 2122 | ToggleLabel.TextColor3 = Theme.Toggle 2123 | ToggleLabel.TextTransparency = 1 2124 | ToggleLabel.ClipsDescendants = true 2125 | ToggleLabel.Parent = Toggle 2126 | 2127 | TweenService:Create(Toggle, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 2128 | TweenService:Create(ToggleTracker, TweenInfo.new(0.5), {ImageTransparency = 0.5}):Play() 2129 | TweenService:Create(Dot, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 2130 | TweenService:Create(DotShadow, TweenInfo.new(0.5), {ImageTransparency = 0.5}):Play() 2131 | TweenService:Create(ToggleLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 2132 | 2133 | TweenService:Create(Dot, TweenInfo.new(0.15), {Position = (ToggleDefault and UDim2.fromScale(1,0.5) or UDim2.fromScale(0,0.5)) - UDim2.fromOffset(8,8), ImageColor3 = ToggleDefault and Theme.Toggle or Theme.ToggleAccent}):Play() 2134 | ToggleCallback(ToggleDefault) 2135 | 2136 | Toggle.MouseButton1Down:Connect(function() 2137 | ToggleDefault = not ToggleDefault 2138 | TweenService:Create(Dot, TweenInfo.new(0.15), {Position = (ToggleDefault and UDim2.fromScale(1,0.5) or UDim2.fromScale(0,0.5)) - UDim2.fromOffset(8,8), ImageColor3 = ToggleDefault and Theme.Toggle or Theme.ToggleAccent}):Play() 2139 | ToggleCallback(ToggleDefault) 2140 | CircleAnim(ToggleLabel, Theme.ToggleAccent, Theme.Toggle) 2141 | end) 2142 | 2143 | local MenuAdded, MenuButton = TryAddMenu(Toggle, Menu, {}) 2144 | 2145 | if MenuAdded then 2146 | ToggleTracker.Position = ToggleTracker.Position - UDim2.fromOffset(15,0) 2147 | MenuButton.ImageColor3 = Theme.Toggle 2148 | end 2149 | 2150 | local ToggleLibrary = {} 2151 | 2152 | function ToggleLibrary:SetText(Value) 2153 | ToggleLabel.Text = Value 2154 | end 2155 | 2156 | function ToggleLibrary:GetText() 2157 | return ToggleLabel.Text 2158 | end 2159 | 2160 | function ToggleLibrary:SetState(Value) 2161 | ToggleDefault = Value 2162 | TweenService:Create(Dot, TweenInfo.new(0.15), {Position = (ToggleDefault and UDim2.fromScale(1,0.5) or UDim2.fromScale(0,0.5)) - UDim2.fromOffset(8,8), ImageColor3 = ToggleDefault and Theme.Toggle or Theme.ToggleAccent}):Play() 2163 | ToggleCallback(ToggleDefault) 2164 | end 2165 | 2166 | function ToggleLibrary:GetState() 2167 | return ToggleDefault 2168 | end 2169 | 2170 | return ToggleLibrary 2171 | end 2172 | 2173 | function OptionLibrary.TextField(TextFieldConfig) 2174 | local TextFieldText = TextFieldConfig.Text or "nil text field" 2175 | local TextFieldInputType = TextFieldConfig.Type or TextFieldConfig.type or "Default" 2176 | local TextFieldCallback = TextFieldConfig.Callback or function() print("nil text field") end 2177 | local Menu = TextFieldConfig.Menu or {} 2178 | 2179 | local TextField = Objects.new("Round") 2180 | TextField.Name = "TextField" 2181 | TextField.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,30) 2182 | TextField.ImageColor3 = Theme.TextField 2183 | TextField.ImageTransparency = 1 2184 | TextField.Parent = PageContentFrame 2185 | 2186 | local TextEffect = Objects.new("Frame") 2187 | TextEffect.Name = "Effect" 2188 | TextEffect.BackgroundTransparency = 1 2189 | TextEffect.BackgroundColor3 = Theme.TextField 2190 | TextEffect.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,2) 2191 | TextEffect.Position = UDim2.fromScale(0,1) - UDim2.fromOffset(0,2) 2192 | TextEffect.Parent = TextField 2193 | 2194 | local TextShadow = Objects.new("Shadow") 2195 | TextShadow.ImageColor3 = Theme.TextField 2196 | TextShadow.ImageTransparency = 1 2197 | TextShadow.Parent = TextField 2198 | 2199 | local TextInput = Objects.new("Box") 2200 | TextInput.Name = "Value" 2201 | TextInput.PlaceholderText = TextFieldText 2202 | TextInput.PlaceholderColor3 = Theme.TextFieldAccent 2203 | TextInput.TextInputType = Enum.TextInputType[TextFieldInputType] 2204 | TextInput.TextColor3 = Theme.TextFieldAccent 2205 | TextInput.Text = "" 2206 | TextInput.Font = Enum.Font.GothamSemibold 2207 | TextInput.TextSize = 14 2208 | TextInput.TextTransparency = 1 2209 | TextInput.Parent = TextField 2210 | 2211 | TweenService:Create(TextField, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 2212 | TweenService:Create(TextEffect, TweenInfo.new(0.5), {BackgroundTransparency = 0.2}):Play() 2213 | TweenService:Create(TextShadow, TweenInfo.new(0.5), {ImageTransparency = 0.7}):Play() 2214 | TweenService:Create(TextInput, TweenInfo.new(0.5), {TextTransparency = 0.5}):Play() 2215 | 2216 | TextInput.Focused:Connect(function() 2217 | TweenService:Create(TextField, TweenInfo.new(0.5), {ImageTransparency = 0.7}):Play() 2218 | TweenService:Create(TextInput, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 2219 | end) 2220 | 2221 | TextInput.FocusLost:Connect(function() 2222 | TweenService:Create(TextField, TweenInfo.new(0.5), {ImageTransparency = 0.8}):Play() 2223 | TweenService:Create(TextInput, TweenInfo.new(0.5), {TextTransparency = 0.5}):Play() 2224 | TextFieldCallback(TextInput.Text) 2225 | end) 2226 | 2227 | local MenuAdded, MenuBar = TryAddMenu(TextField, Menu, { 2228 | SetText = function(Value) 2229 | TextInput.Text = Value 2230 | TextFieldCallback(TextInput.Text) 2231 | end 2232 | }) 2233 | 2234 | if MenuAdded then 2235 | MenuBar.ImageColor3 = Theme.TextFieldAccent 2236 | end 2237 | 2238 | local TextFieldLibrary = {} 2239 | 2240 | function TextFieldLibrary:SetText(Value) 2241 | TextInput.Text = Value 2242 | end 2243 | 2244 | function TextFieldLibrary:GetText() 2245 | return TextInput.Text 2246 | end 2247 | 2248 | return TextFieldLibrary 2249 | end 2250 | 2251 | function OptionLibrary.Label(LabelConfig) 2252 | local LabelText = LabelConfig.Text or "nil label" 2253 | 2254 | local LabelContainer = Objects.new("Round") 2255 | LabelContainer.Name = "Label" 2256 | LabelContainer.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,20) 2257 | LabelContainer.ImageColor3 = Theme.MainFrame 2258 | LabelContainer.Parent = PageContentFrame 2259 | 2260 | local LabelContent = Objects.new("Label") 2261 | LabelContent.TextColor3 = Theme.ChipSet 2262 | LabelContent.Text = LabelText:upper() 2263 | LabelContent.TextSize = 12 2264 | LabelContent.Font = Enum.Font.GothamSemibold 2265 | LabelContent.Size = UDim2.fromScale(1,1) + UDim2.fromOffset(-5,0) 2266 | LabelContent.Position = UDim2.fromOffset(5,0) 2267 | LabelContent.Parent = LabelContainer 2268 | 2269 | local LabelOptions = {} 2270 | 2271 | function LabelOptions.SetText(Text) 2272 | LabelContent.Text = Text 2273 | end 2274 | 2275 | return LabelOptions 2276 | end 2277 | 2278 | function OptionLibrary.Slider(SliderConfig) 2279 | local SliderText = SliderConfig.Text or "nil slider" 2280 | local SliderCallback = SliderConfig.Callback or function() print("nil slider") end 2281 | local SliderMin = SliderConfig.Min or 0 2282 | local SliderMax = SliderConfig.Max or 100 2283 | local SliderPrecision = SliderConfig.Precision or 0 2284 | local Menu = SliderConfig.Menu or {} 2285 | 2286 | if SliderMin > SliderMax then 2287 | local ValueBefore = SliderMin 2288 | SliderMin, SliderMax = SliderMax, ValueBefore 2289 | end 2290 | 2291 | local SliderDef = math.clamp(SliderConfig.Def, SliderMin, SliderMax) or math.clamp(50, SliderMin, SliderMax) 2292 | local DefaultScale = (SliderDef - SliderMin) / (SliderMax - SliderMin) 2293 | 2294 | local Slider = Objects.new("Round") 2295 | Slider.Name = "Slider" 2296 | Slider.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(0,35) 2297 | Slider.ImageColor3 = Theme.Slider 2298 | Slider.ImageTransparency = 1 2299 | Slider.Parent = PageContentFrame 2300 | 2301 | local SliderShadow = Objects.new("Shadow") 2302 | SliderShadow.ImageColor3 = Theme.Slider 2303 | SliderShadow.ImageTransparency = 1 2304 | SliderShadow.Parent = Slider 2305 | 2306 | local SliderTitle = Objects.new("Label") 2307 | SliderTitle.TextColor3 = Theme.SliderAccent 2308 | SliderTitle.Text = SliderText 2309 | SliderTitle.TextSize = 14 2310 | SliderTitle.Font = Enum.Font.GothamSemibold 2311 | SliderTitle.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-5,25) 2312 | SliderTitle.TextTransparency = 1 2313 | SliderTitle.Parent = Slider 2314 | 2315 | local SliderValue = Objects.new("Label") 2316 | SliderValue.Text = tostring(SliderDef) 2317 | SliderValue.TextColor3 = Theme.SliderAccent 2318 | SliderValue.TextTransparency = 1 2319 | SliderValue.TextSize = 14 2320 | SliderValue.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-5,25) 2321 | SliderValue.Position = UDim2.fromScale(0,0) 2322 | SliderValue.TextXAlignment = Enum.TextXAlignment.Right 2323 | SliderValue.Font = Enum.Font.GothamSemibold 2324 | SliderValue.Parent = Slider 2325 | 2326 | local SliderTracker = Objects.new("Frame") 2327 | SliderTracker.BackgroundColor3 = Theme.SliderAccent 2328 | SliderTracker.BackgroundTransparency = 1 2329 | SliderTracker.Size = UDim2.fromScale(1,0) + UDim2.fromOffset(-20,3) 2330 | SliderTracker.Position = UDim2.fromScale(0,1) + UDim2.fromOffset(10,-10) 2331 | SliderTracker.Parent = Slider 2332 | 2333 | local SliderFill = SliderTracker:Clone() 2334 | SliderFill.BackgroundTransparency = 1 2335 | SliderFill.Position = UDim2.fromScale(0,0) 2336 | SliderFill.Size = UDim2.fromScale(DefaultScale,1) 2337 | SliderFill.Parent = SliderTracker 2338 | 2339 | local MinSize = 10 2340 | local MaxSize = 36 2341 | 2342 | local SizeFromScale = (MinSize + (MaxSize - MinSize)) * DefaultScale 2343 | SizeFromScale = SizeFromScale - (SizeFromScale % 2) 2344 | 2345 | local SliderDot = Objects.new("CircleButton") 2346 | SliderDot.Size = UDim2.fromOffset(10,10) 2347 | SliderDot.Position = UDim2.fromScale(DefaultScale,0.5) - UDim2.fromOffset(5,5) 2348 | SliderDot.ImageColor3 = Theme.SliderAccent 2349 | SliderDot.ImageTransparency = 1 2350 | SliderDot.ZIndex = 50 2351 | SliderDot.Parent = SliderTracker 2352 | 2353 | local SliderFadedDot = Objects.new("Circle") 2354 | SliderFadedDot.Size = UDim2.fromOffset(SizeFromScale,SizeFromScale) 2355 | SliderFadedDot.Position = UDim2.fromScale(0.5,0.5) - UDim2.fromOffset(SizeFromScale/2,SizeFromScale/2) 2356 | SliderFadedDot.ImageColor3 = Theme.SliderAccent 2357 | SliderFadedDot.ImageTransparency = 1 2358 | SliderFadedDot.ZIndex = 50 2359 | SliderFadedDot.Parent = SliderDot 2360 | 2361 | TweenService:Create(Slider, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 2362 | TweenService:Create(SliderShadow, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 2363 | TweenService:Create(SliderTitle, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 2364 | TweenService:Create(SliderValue, TweenInfo.new(0.5), {TextTransparency = 0}):Play() 2365 | TweenService:Create(SliderTracker, TweenInfo.new(0.5), {BackgroundTransparency = 0.5}):Play() 2366 | TweenService:Create(SliderFill, TweenInfo.new(0.5), {BackgroundTransparency = 0}):Play() 2367 | TweenService:Create(SliderDot, TweenInfo.new(0.5), {ImageTransparency = 0}):Play() 2368 | 2369 | SliderDot.MouseButton1Down:Connect(function() 2370 | TweenService:Create(SliderFadedDot, TweenInfo.new(0.15), {ImageTransparency = 0.8}):Play() 2371 | local MouseMove, MouseKill 2372 | MouseMove = Mouse.Move:Connect(function() 2373 | local Px = GetXY(SliderTracker) 2374 | local SizeFromScale = (MinSize + (MaxSize - MinSize)) * Px 2375 | local Power = 10 ^ SliderPrecision 2376 | local Value = math.floor((SliderMin + ((SliderMax - SliderMin) * Px)) * Power) / Power 2377 | SizeFromScale = SizeFromScale - (SizeFromScale % 2) 2378 | TweenService:Create(SliderDot, TweenInfo.new(0.15), {Position = UDim2.fromScale(Px,0.5) - UDim2.fromOffset(5,5)}):Play() 2379 | TweenService:Create(SliderFill, TweenInfo.new(0.15), {Size = UDim2.fromScale(Px, 1)}):Play() 2380 | SliderFadedDot.Size = UDim2.fromOffset(SizeFromScale,SizeFromScale) 2381 | SliderFadedDot.Position = UDim2.fromScale(0.5,0.5) - UDim2.fromOffset(SizeFromScale/2,SizeFromScale/2) 2382 | SliderValue.Text = tostring(Value) 2383 | SliderCallback(Value) 2384 | end) 2385 | MouseKill = InputService.InputEnded:Connect(function(UserInput) 2386 | if UserInput.UserInputType == Enum.UserInputType.MouseButton1 then 2387 | TweenService:Create(SliderFadedDot, TweenInfo.new(0.15), {ImageTransparency = 1}):Play() 2388 | MouseMove:Disconnect() 2389 | MouseKill:Disconnect() 2390 | end 2391 | end) 2392 | end) 2393 | 2394 | local MenuAdded, MenuButton = TryAddMenu(Slider, Menu, {}) 2395 | 2396 | if MenuAdded then 2397 | SliderValue.Position = SliderValue.Position - UDim2.fromOffset(25,0) 2398 | SliderTracker.Size = SliderTracker.Size - UDim2.fromOffset(20,0) 2399 | MenuButton.ImageColor3 = Theme.SliderAccent 2400 | end 2401 | 2402 | local SliderLibrary = {} 2403 | 2404 | function SliderLibrary:SetText(Value) 2405 | SliderTitle.Text = Value 2406 | end 2407 | 2408 | function SliderLibrary:GetText() 2409 | return SliderTitle.Text 2410 | end 2411 | 2412 | function SliderLibrary:GetValue() 2413 | return tonumber(SliderValue.Text) 2414 | end 2415 | 2416 | function SliderLibrary:SetMin(Value) 2417 | SliderMin = Value 2418 | local SliderDef = math.clamp(SliderConfig.Def, SliderMin, SliderMax) or math.clamp(50, SliderMin, SliderMax) 2419 | local DefaultScale = (SliderDef - SliderMin) / (SliderMax - SliderMin) 2420 | local SizeFromScale = (MinSize + (MaxSize - MinSize)) * DefaultScale 2421 | SizeFromScale = SizeFromScale - (SizeFromScale % 2) 2422 | SliderDot.Position = UDim2.fromScale(DefaultScale,0.5) - UDim2.fromOffset(SizeFromScale/2,SizeFromScale/2) 2423 | end 2424 | 2425 | function SliderLibrary:SetMax(Value) 2426 | SliderMax = Value 2427 | local SliderDef = math.clamp(SliderConfig.Def, SliderMin, SliderMax) or math.clamp(50, SliderMin, SliderMax) 2428 | local DefaultScale = (SliderDef - SliderMin) / (SliderMax - SliderMin) 2429 | local SizeFromScale = (MinSize + (MaxSize - MinSize)) * DefaultScale 2430 | SizeFromScale = SizeFromScale - (SizeFromScale % 2) 2431 | SliderDot.Position = UDim2.fromScale(DefaultScale,0.5) - UDim2.fromOffset(SizeFromScale/2,SizeFromScale/2) 2432 | end 2433 | 2434 | function SliderLibrary:GetMin() 2435 | return SliderMin 2436 | end 2437 | 2438 | function SliderLibrary:GetMax() 2439 | return SliderMax 2440 | end 2441 | 2442 | return SliderLibrary 2443 | end 2444 | 2445 | return OptionLibrary 2446 | end 2447 | 2448 | return TabLibrary 2449 | end 2450 | 2451 | return Material 2452 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MaterialLua 2 | A material design library, designed for use in Roblox. 3 | 4 | # Discord 5 | [Balance](https://discord.gg/jzR3vfV) 6 | 7 | # Documentation Site 8 | [MLDocs](http://materiallua.gq) 9 | --------------------------------------------------------------------------------