SHARE
TWEET

Untitled

a guest Sep 22nd, 2019 106 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local library = {
  2.     windowcount = 0;
  3. }
  4.  
  5. local dragger = {};
  6. local resizer = {};
  7.  
  8. do
  9.     local mouse = game:GetService("Players").LocalPlayer:GetMouse();
  10.     local inputService = game:GetService('UserInputService');
  11.     local heartbeat = game:GetService("RunService").Heartbeat;
  12.     -- // credits to Ririchi / Inori for this cute drag function :)
  13.     function dragger.new(frame)
  14.         local s, event = pcall(function()
  15.             return frame.MouseEnter
  16.         end)
  17.  
  18.         if s then
  19.             frame.Active = true;
  20.  
  21.             event:connect(function()
  22.                 local input = frame.InputBegan:connect(function(key)
  23.                     if key.UserInputType == Enum.UserInputType.MouseButton1 then
  24.                         local objectPosition = Vector2.new(mouse.X - frame.AbsolutePosition.X, mouse.Y - frame.AbsolutePosition.Y);
  25.                         while heartbeat:wait() and inputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) do
  26.                             frame:TweenPosition(UDim2.new(0, mouse.X - objectPosition.X + (frame.Size.X.Offset * frame.AnchorPoint.X), 0, mouse.Y - objectPosition.Y + (frame.Size.Y.Offset * frame.AnchorPoint.Y)), 'Out', 'Quad', 0.1, true);
  27.                         end
  28.                     end
  29.                 end)
  30.  
  31.                 local leave;
  32.                 leave = frame.MouseLeave:connect(function()
  33.                     input:disconnect();
  34.                     leave:disconnect();
  35.                 end)
  36.             end)
  37.         end
  38.     end
  39.    
  40.     function resizer.new(p, s)
  41.         p:GetPropertyChangedSignal('AbsoluteSize'):connect(function()
  42.             s.Size = UDim2.new(s.Size.X.Scale, s.Size.X.Offset, s.Size.Y.Scale, p.AbsoluteSize.Y);
  43.         end)
  44.     end
  45. end
  46.  
  47.  
  48. local defaults = {
  49.     txtcolor = Color3.fromRGB(255, 255, 255),
  50.     underline = Color3.fromRGB(0, 255, 140),
  51.     barcolor = Color3.fromRGB(40, 40, 40),
  52.     bgcolor = Color3.fromRGB(30, 30, 30),
  53. }
  54.  
  55. function library:Create(class, props)
  56.     local object = Instance.new(class);
  57.  
  58.     for i, prop in next, props do
  59.         if i ~= "Parent" then
  60.             object[i] = prop;
  61.         end
  62.     end
  63.  
  64.     object.Parent = props.Parent;
  65.     return object;
  66. end
  67.  
  68. function library:CreateWindow(options)
  69.     assert(options.text, "no name");
  70.     local window = {
  71.         count = 0;
  72.         toggles = {},
  73.         closed = false;
  74.     }
  75.  
  76.     local options = options or {};
  77.     setmetatable(options, {__index = defaults})
  78.  
  79.     self.windowcount = self.windowcount + 1;
  80.  
  81.     library.gui = library.gui or self:Create("ScreenGui", {Name = "UILibrary", Parent = game:GetService("CoreGui")})
  82.     window.frame = self:Create("Frame", {
  83.         Name = options.text;
  84.         Parent = self.gui,
  85.         Active = true,
  86.         BackgroundTransparency = 0,
  87.         Size = UDim2.new(0, 190, 0, 30),
  88.         Position = UDim2.new(0, (15 + ((200 * self.windowcount) - 200)), 0, 15),
  89.         BackgroundColor3 = options.barcolor,
  90.         BorderSizePixel = 0;
  91.     })
  92.  
  93.     window.background = self:Create('Frame', {
  94.         Name = 'Background';
  95.         Parent = window.frame,
  96.         BorderSizePixel = 0;
  97.         BackgroundColor3 = options.bgcolor,
  98.         Position = UDim2.new(0, 0, 1, 0),
  99.         Size = UDim2.new(1, 0, 0, 25),
  100.         ClipsDescendants = true;
  101.     })
  102.    
  103.     window.container = self:Create('Frame', {
  104.         Name = 'Container';
  105.         Parent = window.frame,
  106.         BorderSizePixel = 0;
  107.         BackgroundColor3 = options.bgcolor,
  108.         Position = UDim2.new(0, 0, 1, 0),
  109.         Size = UDim2.new(1, 0, 0, 25),
  110.         ClipsDescendants = true;
  111.     })
  112.    
  113.     window.organizer = self:Create('UIListLayout', {
  114.         Name = 'Sorter';
  115.         --Padding = UDim.new(0, 0);
  116.         SortOrder = Enum.SortOrder.LayoutOrder;
  117.         Parent = window.container;
  118.     })
  119.    
  120.     window.padder = self:Create('UIPadding', {
  121.         Name = 'Padding';
  122.         PaddingLeft = UDim.new(0, 10);
  123.         PaddingTop = UDim.new(0, 5);
  124.         Parent = window.container;
  125.     })
  126.  
  127.     self:Create("Frame", {
  128.         Name = 'Underline';
  129.         Size = UDim2.new(1, 0, 0, 1),
  130.         Position = UDim2.new(0, 0, 1, -1),
  131.         BorderSizePixel = 0;
  132.         BackgroundColor3 = options.underline;
  133.         Parent = window.frame
  134.     })
  135.  
  136.     local togglebutton = self:Create("TextButton", {
  137.         Name = 'Toggle';
  138.         ZIndex = 2,
  139.         BackgroundTransparency = 1;
  140.         Position = UDim2.new(1, -25, 0, 0),
  141.         Size = UDim2.new(0, 25, 1, 0),
  142.         Text = "-",
  143.         TextSize = 17,
  144.         TextColor3 = options.txtcolor,
  145.         Font = Enum.Font.SourceSans;
  146.         Parent = window.frame,
  147.     });
  148.  
  149.     togglebutton.MouseButton1Click:connect(function()
  150.         window.closed = not window.closed
  151.         togglebutton.Text = (window.closed and "+" or "-")
  152.         if window.closed then
  153.             window:Resize(true, UDim2.new(1, 0, 0, 0))
  154.         else
  155.             window:Resize(true)
  156.         end
  157.     end)
  158.  
  159.     self:Create("TextLabel", {
  160.         Size = UDim2.new(0.5, 0, 0.5, 0),
  161.         BackgroundTransparency = 1;
  162.         BorderSizePixel = 0;
  163.         TextColor3 = options.txtcolor,
  164.         TextColor3 = (options.bartextcolor or Color3.fromRGB(255, 255, 255));
  165.         TextSize = 17,
  166.         Font = Enum.Font.SourceSansSemibold;
  167.         Text = options.text or "window",
  168.         Name = "Window",
  169.         Parent = window.frame,
  170.     })
  171.  
  172.     do
  173.         dragger.new(window.frame)
  174.         resizer.new(window.background, window.container);
  175.     end
  176.  
  177.     local function getSize()
  178.         local ySize = 0;
  179.         for i, object in next, window.container:GetChildren() do
  180.             if (not object:IsA('UIListLayout')) and (not object:IsA('UIPadding')) then
  181.                 ySize = ySize + object.AbsoluteSize.Y
  182.             end
  183.         end
  184.         return UDim2.new(1, 0, 0, ySize + 10)
  185.     end
  186.  
  187.     function window:Resize(tween, change)
  188.         local size = change or getSize()
  189.         self.container.ClipsDescendants = true;
  190.        
  191.         if tween then
  192.             self.background:TweenSize(size, "Out", "Sine", 0.5, true)
  193.         else
  194.             self.background.Size = size
  195.         end
  196.     end
  197.  
  198.     function window:AddToggle(text, callback)
  199.         self.count = self.count + 1
  200.  
  201.         callback = callback or function() end
  202.         local label = library:Create("TextLabel", {
  203.             Text =  text,
  204.             Size = UDim2.new(1, -10, 0, 20);
  205.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  206.             BackgroundTransparency = 1;
  207.             TextColor3 = Color3.fromRGB(255, 255, 255);
  208.             TextXAlignment = Enum.TextXAlignment.Left;
  209.             LayoutOrder = self.Count;
  210.             TextSize = 16,
  211.             Font = Enum.Font.SourceSans,
  212.             Parent = self.container;
  213.         })
  214.  
  215.         local button = library:Create("TextButton", {
  216.             Text = "OFF",
  217.             TextColor3 = Color3.fromRGB(255, 25, 25),
  218.             BackgroundTransparency = 1;
  219.             Position = UDim2.new(1, -25, 0, 0),
  220.             Size = UDim2.new(0, 25, 1, 0),
  221.             TextSize = 17,
  222.             Font = Enum.Font.SourceSansSemibold,
  223.             Parent = label;
  224.         })
  225.  
  226.         button.MouseButton1Click:connect(function()
  227.             self.toggles[text] = (not self.toggles[text])
  228.             button.TextColor3 = (self.toggles[text] and Color3.fromRGB(0, 255, 140) or Color3.fromRGB(255, 25, 25))
  229.             button.Text =(self.toggles[text] and "ON" or "OFF")
  230.  
  231.             callback(self.toggles[text])
  232.         end)
  233.  
  234.         self:Resize()
  235.         return button
  236.     end
  237.  
  238.     function window:AddBox(text, callback)
  239.         self.count = self.count + 1
  240.         callback = callback or function() end
  241.  
  242.         local box = library:Create("TextBox", {
  243.             PlaceholderText = text,
  244.             Size = UDim2.new(1, -10, 0, 20);
  245.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  246.             BackgroundTransparency = 0.75;
  247.             BackgroundColor3 = options.boxcolor,
  248.             TextColor3 = Color3.fromRGB(255, 255, 255);
  249.             TextXAlignment = Enum.TextXAlignment.Center;
  250.             TextSize = 16,
  251.             Text = "",
  252.             Font = Enum.Font.SourceSans,
  253.             LayoutOrder = self.Count;
  254.             BorderSizePixel = 0;
  255.             Parent = self.container;
  256.         })
  257.  
  258.         box.FocusLost:connect(function(...)
  259.             callback(box, ...)
  260.         end)
  261.  
  262.         self:Resize()
  263.         return box
  264.     end
  265.  
  266.     function window:AddButton(text, callback)
  267.         self.count = self.count + 1
  268.  
  269.         callback = callback or function() end
  270.         local button = library:Create("TextButton", {
  271.             Text =  text,
  272.             Size = UDim2.new(1, -10, 0, 20);
  273.             --Position = UDim2.new(0, 5, 0, ((20 * self.count) - 20) + 5),
  274.             BackgroundTransparency = 1;
  275.             TextColor3 = Color3.fromRGB(255, 255, 255);
  276.             TextXAlignment = Enum.TextXAlignment.Left;
  277.             TextSize = 16,
  278.             Font = Enum.Font.SourceSans,
  279.             LayoutOrder = self.Count;
  280.             Parent = self.container;
  281.         })
  282.  
  283.         button.MouseButton1Click:connect(callback)
  284.         self:Resize()
  285.         return button
  286.     end
  287.    
  288.     function window:AddLabel(text)
  289.         self.count = self.count + 1;
  290.        
  291.         local tSize = game:GetService('TextService'):GetTextSize(text, 16, Enum.Font.SourceSans, Vector2.new(math.huge, math.huge))
  292.  
  293.         local button = library:Create("TextLabel", {
  294.             Text =  text,
  295.             Size = UDim2.new(1, -10, 0, tSize.Y + 5);
  296.             TextScaled = false;
  297.             BackgroundTransparency = 1;
  298.             TextColor3 = Color3.fromRGB(255, 255, 255);
  299.             TextXAlignment = Enum.TextXAlignment.Left;
  300.             TextSize = 16,
  301.             Font = Enum.Font.SourceSans,
  302.             LayoutOrder = self.Count;
  303.             Parent = self.container;
  304.         })
  305.  
  306.         self:Resize()
  307.         return button
  308.     end
  309.  
  310.     function window:AddDropdown(options, callback)
  311.         self.count = self.count + 1
  312.         local default = options[1] or "";
  313.        
  314.         callback = callback or function() end
  315.         local dropdown = library:Create("TextLabel", {
  316.             Size = UDim2.new(1, -10, 0, 20);
  317.             BackgroundTransparency = 0.75;
  318.             BackgroundColor3 = options.boxcolor,
  319.             TextColor3 = Color3.fromRGB(255, 255, 255);
  320.             TextXAlignment = Enum.TextXAlignment.Center;
  321.             TextSize = 16,
  322.             Text = default,
  323.             Font = Enum.Font.SourceSans,
  324.             BorderSizePixel = 0;
  325.             LayoutOrder = self.Count;
  326.             Parent = self.container;
  327.         })
  328.        
  329.         local button = library:Create("ImageButton",{
  330.             BackgroundTransparency = 1;
  331.             Image = 'rbxassetid://3234893186';
  332.             Size = UDim2.new(0, 18, 1, 0);
  333.             Position = UDim2.new(1, -20, 0, 0);
  334.             Parent = dropdown;
  335.         })
  336.        
  337.         local frame;
  338.        
  339.         local function isInGui(frame)
  340.             local mloc = game:GetService('UserInputService'):GetMouseLocation();
  341.             local mouse = Vector2.new(mloc.X, mloc.Y - 36);
  342.            
  343.             local x1, x2 = frame.AbsolutePosition.X, frame.AbsolutePosition.X + frame.AbsoluteSize.X;
  344.             local y1, y2 = frame.AbsolutePosition.Y, frame.AbsolutePosition.Y + frame.AbsoluteSize.Y;
  345.        
  346.             return (mouse.X >= x1 and mouse.X <= x2) and (mouse.Y >= y1 and mouse.Y <= y2)
  347.         end
  348.  
  349.         local function count(t)
  350.             local c = 0;
  351.             for i, v in next, t do
  352.                 c = c + 1
  353.             end
  354.             return c;
  355.         end
  356.        
  357.         button.MouseButton1Click:connect(function()
  358.             if count(options) == 0 then
  359.                 return
  360.             end
  361.  
  362.             if frame then
  363.                 frame:Destroy();
  364.                 frame = nil;
  365.             end
  366.            
  367.             self.container.ClipsDescendants = false;
  368.  
  369.             frame = library:Create('Frame', {
  370.                 Position = UDim2.new(0, 0, 1, 0);
  371.                 BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  372.                 Size = UDim2.new(0, dropdown.AbsoluteSize.X, 0, (count(options) * 21));
  373.                 BorderSizePixel = 0;
  374.                 Parent = dropdown;
  375.                 ClipsDescendants = true;
  376.                 ZIndex = 2;
  377.             })
  378.            
  379.             library:Create('UIListLayout', {
  380.                 Name = 'Layout';
  381.                 Parent = frame;
  382.             })
  383.  
  384.             for i, option in next, options do
  385.                 local selection = library:Create('TextButton', {
  386.                     Text = option;
  387.                     BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  388.                     TextColor3 = Color3.fromRGB(255, 255, 255);
  389.                     BorderSizePixel = 0;
  390.                     TextSize = 16;
  391.                     Font = Enum.Font.SourceSans;
  392.                     Size = UDim2.new(1, 0, 0, 21);
  393.                     Parent = frame;
  394.                     ZIndex = 2;
  395.                 })
  396.                
  397.                 selection.MouseButton1Click:connect(function()
  398.                     dropdown.Text = option;
  399.                     callback(option)
  400.                     frame.Size = UDim2.new(1, 0, 0, 0);
  401.                     game:GetService('Debris'):AddItem(frame, 0.1)
  402.                 end)
  403.             end
  404.         end);
  405.  
  406.         game:GetService('UserInputService').InputBegan:connect(function(m)
  407.             if m.UserInputType == Enum.UserInputType.MouseButton1 then
  408.                 if frame and (not isInGui(frame)) then
  409.                     game:GetService('Debris'):AddItem(frame);
  410.                 end
  411.             end
  412.         end)
  413.        
  414.         callback(default);
  415.         self:Resize()
  416.         return {
  417.             Refresh = function(self, array)
  418.                 game:GetService('Debris'):AddItem(frame);
  419.                 options = array
  420.                 dropdown.Text = options[1];
  421.             end
  422.         }
  423.     end;
  424.    
  425.    
  426.     return window
  427. end
  428.  
  429. return library
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top