SHARE
TWEET

Bara UI

a guest Aug 22nd, 2019 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local Heartbeat = game:GetService("RunService").Heartbeat;
  2. local library = {
  3.     windowcount = 0;
  4. }
  5.  
  6. local defaults = defaults or {
  7.     boxcolor = nil,
  8.     Rainbow = true,
  9.     slidingbarcolor = nil,
  10.     txtcolor = Color3.fromRGB(255, 255, 255),
  11.     underline = Color3.fromRGB(0, 255, 140),
  12.     barcolor = Color3.fromRGB(50, 50, 50),
  13.     bgcolor = Color3.fromRGB(50, 50, 50)
  14. };
  15.  
  16. if game:GetService("Players").LocalPlayer.PlayerGui:FindFirstChild("Bara's UI") then
  17.     game:GetService("Players").LocalPlayer.PlayerGui:FindFirstChild("Bara's UI"):Destroy();
  18. end
  19.  
  20. local tweenPosition = function (object, newpos)
  21.     object.Position = newpos
  22. end;
  23.  
  24. local dragger = {};
  25. local resizer = {};
  26. local frames = {};
  27. local Callbacks = {};
  28. local Enabled = {};
  29.  
  30. do
  31.     local mouse = game:GetService("Players").LocalPlayer:GetMouse();
  32.     local inputService = game:GetService('UserInputService');
  33.    
  34.     function dragger.new(frame)
  35.         local s, event = pcall(function()
  36.             return frame.MouseEnter;
  37.         end);
  38.  
  39.         if s then
  40.             frame.Active = true;
  41.  
  42.             event:connect(function()
  43.                 local input = frame.InputBegan:connect(function(key)
  44.                     if key.UserInputType == Enum.UserInputType.MouseButton1 then
  45.                         local objectPosition = Vector2.new(mouse.X - frame.AbsolutePosition.X, mouse.Y - frame.AbsolutePosition.Y);
  46.                         while Heartbeat:wait() and inputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) do
  47.                             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, true);
  48.                         end;
  49.                     end;
  50.                 end);
  51.  
  52.                 local leave;
  53.                 leave = frame.MouseLeave:connect(function()
  54.                     input:disconnect();
  55.                     leave:disconnect();
  56.                 end)
  57.             end)
  58.         end
  59.     end
  60.  
  61.     function resizer.new(p, s)
  62.         p:GetPropertyChangedSignal('AbsoluteSize'):connect(function()
  63.             s.Size = UDim2.new(s.Size.X.Scale, s.Size.X.Offset, s.Size.Y.Scale, p.AbsoluteSize.Y);
  64.         end)
  65.     end
  66. end;
  67.  
  68. function library:Create(class, props)
  69.     local object = Instance.new(class);
  70.    
  71.     for i, prop in next, props do
  72.         if i ~= "Parent" then
  73.             object[i] = prop;
  74.         end
  75.     end
  76.  
  77.     object.Parent = props.Parent;
  78.     return object;
  79. end
  80.  
  81.  
  82. function library:CreateWindow(options)
  83.     assert(options.text, "no name");
  84.     local window = {
  85.         count = 0;
  86.         toggles = {},
  87.         closed = false;
  88.     }
  89.  
  90.     local options = options or {};
  91.     setmetatable(options, {__index = defaults})
  92.  
  93.     self.windowcount = self.windowcount + 1;
  94.  
  95.     library.gui = library.gui or self:Create("ScreenGui", {Name = "Bara's UI", Parent = game:GetService("Players").LocalPlayer.PlayerGui})
  96.     library.gui.ResetOnSpawn = false
  97.  
  98.     window.frame = self:Create("Frame", {
  99.         Name = options.text;
  100.         Parent = self.gui,
  101.         Visible = false,
  102.         Active = true,
  103.         BackgroundTransparency = 0,
  104.         Size = UDim2.new(0, 178, 0, 30),
  105.         Position = UDim2.new(0, (5 + ((178 * self.windowcount) - 178)), 0, 5),
  106.         BackgroundColor3 = options.barcolor,
  107.         BorderSizePixel = 0
  108.     });
  109.  
  110.     frames[#frames + 1] = window.frame;
  111.  
  112.     window.background = self:Create('Frame', {
  113.         Name = 'Background';
  114.         Parent = window.frame,
  115.         BorderSizePixel = 0;
  116.         BackgroundColor3 = options.bgcolor,
  117.         Position = UDim2.new(0, 0, 1, 0),
  118.         Size = UDim2.new(1, 0, 0, 25),
  119.         BackgroundTransparency = 0.4,
  120.         ClipsDescendants = true;
  121.     })
  122.  
  123.     window.container = self:Create('ScrollingFrame', {
  124.         Name = 'Container';
  125.         Parent = window.frame,
  126.         BorderSizePixel = 0,
  127.         BorderSizePixel = 0,
  128.         BackgroundColor3 = options.bgcolor,
  129.         CanvasSize = UDim2.new(0, 0, 0, 0),
  130.         BottomImage = "rbxasset://textures/ui/Scroll/scroll-middle.png",
  131.         TopImage = "rbxasset://textures/ui/Scroll/scroll-middle.png",
  132.         Position = UDim2.new(0, 0, 1, 0),
  133.         Size = UDim2.new(1, 0, 0, 25),
  134.         BackgroundTransparency = 0.4,
  135.         ClipsDescendants = true,
  136.         ScrollBarThickness = 10
  137.     })
  138.  
  139.     window.organizer = self:Create('UIListLayout', {
  140.         Name = 'Sorter';
  141.         SortOrder = Enum.SortOrder.LayoutOrder;
  142.         Parent = window.container;
  143.     })
  144.  
  145.     window.padder = self:Create('UIPadding', {
  146.         Name = 'Padding';
  147.         PaddingLeft = UDim.new(0, 10);
  148.         PaddingTop = UDim.new(0, 5);
  149.         Parent = window.container;
  150.     })
  151.  
  152.     local underline = self:Create("Frame", {
  153.         Name = 'Underline';
  154.         Size = UDim2.new(1, 0, 0, 3),
  155.         Position = UDim2.new(0, 0, 1, -1),
  156.         BorderSizePixel = 0;
  157.         BackgroundColor3 = options.underline;
  158.         Parent = window.frame
  159.     })
  160.  
  161.     local togglebutton = self:Create("TextButton", {
  162.         Name = 'Toggle';
  163.         ZIndex = 2,
  164.         BackgroundTransparency = 1;
  165.         Position = UDim2.new(1, -25, 0, 0),
  166.         Size = UDim2.new(0, 25, 1, 0),
  167.         Text = "-",
  168.         TextSize = 17,
  169.         TextColor3 = options.txtcolor,
  170.         Font = Enum.Font.SourceSans,
  171.         Parent = window.frame,
  172.     });
  173.  
  174.     togglebutton.MouseButton1Click:connect(function()
  175.         window.closed = not window.closed;
  176.         togglebutton.Text = (window.closed and "+" or "-");
  177.         if window.closed then
  178.             window:Resize(true, UDim2.new(1, 0, 0, 0));
  179.             wait(0.4)
  180.             window.container.Visible = false
  181.         else
  182.             window.container.Visible = true
  183.             window:Resize(true);
  184.         end;
  185.     end);
  186.  
  187.     self:Create("TextLabel", {
  188.         Size = UDim2.new(1, 0, 1, 0),
  189.         BackgroundTransparency = 1,
  190.         BorderSizePixel = 0,
  191.         TextColor3 = options.txtcolor,
  192.         TextColor3 = (options.bartextcolor or Color3.fromRGB(255, 255, 255)),
  193.         TextSize = 17,
  194.         Font = Enum.Font.SourceSansSemibold,
  195.         Text = options.text or "window",
  196.         Name = "Window",
  197.         Parent = window.frame,
  198.     })
  199.  
  200.     local open = {}
  201.  
  202.     do
  203.         dragger.new(window.frame)
  204.         resizer.new(window.background, window.container);
  205.     end
  206.  
  207.     local function getSize()
  208.         local ySize = 0;
  209.         for i, object in next, window.container:GetChildren() do
  210.             if (not object:IsA('UIListLayout')) and (not object:IsA('UIPadding')) then
  211.                 ySize = ySize + object.AbsoluteSize.Y
  212.             end
  213.         end
  214.        
  215.         if ySize > 400 then
  216.             ySize = 400;
  217.             window.container.CanvasSize = UDim2.new(0, 0, 0, (#window.container:GetChildren() - 1) * 20)
  218.         end;
  219.        
  220.         return UDim2.new(1, 0, 0, ySize + 10)
  221.     end
  222.  
  223.     function window:Resize(tween, change)
  224.         local size = change or getSize()
  225.         self.container.ClipsDescendants = true;
  226.  
  227.         if tween then
  228.             self.background:TweenSize(size, "Out", "Sine", 0.5, true)
  229.         else
  230.             self.background.Size = size
  231.         end
  232.     end
  233.  
  234.     function window:AddSlidingBar(text, minval, maxval, callback)
  235.         self.count = self.count + 1;
  236.         callback = callback or function() end;
  237.         minval = minval or 0;
  238.         maxval = maxval or 100;
  239.  
  240.         maxval = maxval / 8;
  241.        
  242.         local newContainer = library:Create("Frame", {
  243.             Parent = self.container,
  244.             Size = UDim2.new(1, -10, 0, 20),
  245.             BackgroundColor3 = options.slidingbarcolor,
  246.             BackgroundTransparency = 1,
  247.         })
  248.  
  249.         local slidingbar = library:Create("ScrollingFrame", {
  250.             Parent = newContainer,
  251.             Size = UDim2.new(1, -10, 0, 20),
  252.             CanvasSize = UDim2.new(8, 0, 0, 0),
  253.             BackgroundColor3 = options.slidingbarcolor,
  254.             BottomImage = "rbxasset://textures/ui/Scroll/scroll-middle.png",
  255.             TopImage = "rbxasset://textures/ui/Scroll/scroll-middle.png",
  256.             MidImage = "rbxasset://textures/ui/Scroll/scroll-middle.png",
  257.             ScrollBarThickness = 20,
  258.             ScrollBarImageColor3 = Color3.fromRGB(0, 0, 0),
  259.             ScrollBarImageTransparency = 0.3,
  260.         });
  261.  
  262.         local label = library:Create("TextLabel", {
  263.             Size = UDim2.new(1, 0, 1, 0),
  264.             BackgroundTransparency = 1,
  265.             BackgroundColor3 = options.slidingbarcolor,
  266.             TextColor3 = Color3.fromRGB(255, 255, 255),
  267.             TextXAlignment = Enum.TextXAlignment.Center,
  268.             TextSize = 16,
  269.             Text = text .. ": " .. minval,
  270.             Font = Enum.Font.SourceSans,
  271.             LayoutOrder = self.Count,
  272.             BorderSizePixel = 0,
  273.             Parent = newContainer,
  274.         })
  275.  
  276.         slidingbar.Changed:Connect(function(p)
  277.             if p ~= "CanvasPosition" then return end
  278.  
  279.             local Val = minval - math.floor((slidingbar.CanvasPosition.X / (slidingbar.CanvasSize.X.Offset - slidingbar.AbsoluteWindowSize.X)) * maxval)
  280.             label.Text = text .. ": " .. tostring(Val);
  281.             callback(Val);
  282.         end)
  283.  
  284.         self:Resize();
  285.  
  286.     end;
  287.  
  288.     function window:AddToggle(text, callback)
  289.         self.count = self.count + 1;
  290.  
  291.         callback = callback or function() end;
  292.  
  293.         local label = library:Create("TextLabel", {
  294.             Text =  text,
  295.             Size = UDim2.new(1, -10, 0, 20),
  296.             BackgroundTransparency = 1,
  297.             TextColor3 = Color3.fromRGB(255, 255, 255),
  298.             TextXAlignment = Enum.TextXAlignment.Left,
  299.             LayoutOrder = self.Count,
  300.             TextSize = 16,
  301.             Font = Enum.Font.SourceSans,
  302.             Parent = self.container,
  303.         })
  304.  
  305.         local button = library:Create("TextButton", {
  306.             Text = "OFF",
  307.             TextColor3 = Color3.fromRGB(255, 25, 25),
  308.             BackgroundTransparency = 1,
  309.             Position = UDim2.new(1, -25, 0, 0),
  310.             Size = UDim2.new(0, 25, 1, 0),
  311.             TextSize = 17,
  312.             Font = Enum.Font.SourceSansSemibold,
  313.             Parent = label,
  314.         })
  315.  
  316.         Callbacks[text] = function(toggle)
  317.             if not toggle then
  318.                 toggle = not self.toggles[text];
  319.             end;
  320.  
  321.             self.toggles[text] = toggle;
  322.             Enabled[text] = toggle;
  323.             button.TextColor3 = (self.toggles[text] and Color3.fromRGB(0, 255, 140) or Color3.fromRGB(255, 25, 25));
  324.             button.Text = (self.toggles[text] and "ON" or "OFF");
  325.  
  326.             callback(self.toggles[text]);
  327.         end;
  328.  
  329.         button.MouseButton1Click:connect(Callbacks[text]);
  330.  
  331.         self:Resize();
  332.         return button;
  333.     end
  334.  
  335.     function window:AddBox(text, callback)
  336.         self.count = self.count + 1
  337.         callback = callback or function() end
  338.  
  339.         local box = library:Create("TextBox", {
  340.             PlaceholderText = text,
  341.             Size = UDim2.new(1, -10, 0, 20),
  342.             BackgroundTransparency = 0.75,
  343.             BackgroundColor3 = options.boxcolor,
  344.             TextColor3 = Color3.fromRGB(255, 255, 255),
  345.             TextXAlignment = Enum.TextXAlignment.Center,
  346.             TextSize = 16,
  347.             Text = "",
  348.             Font = Enum.Font.SourceSans,
  349.             LayoutOrder = self.Count,
  350.             BorderSizePixel = 0,
  351.             Parent = self.container,
  352.         })
  353.  
  354.         box.FocusLost:connect(function(...)
  355.             callback(box, ...)
  356.         end)
  357.  
  358.         self:Resize()
  359.         return box
  360.     end
  361.  
  362.     function window:AddButton(text, callback)
  363.         self.count = self.count + 1
  364.  
  365.         callback = callback or function() end
  366.        
  367.         local button = library:Create("TextButton", {
  368.             Text = text,
  369.             Size = UDim2.new(1, -10, 0, 20),
  370.             BackgroundTransparency = 1,
  371.             TextColor3 = Color3.fromRGB(255, 255, 255),
  372.             TextXAlignment = Enum.TextXAlignment.Left,
  373.             TextSize = 16,
  374.             Font = Enum.Font.SourceSans,
  375.             LayoutOrder = self.Count,
  376.             Parent = self.container,
  377.         })
  378.  
  379.         button.MouseButton1Click:connect(callback)
  380.         self:Resize()
  381.         return button
  382.     end
  383.  
  384.     function window:AddLabel(text)
  385.         self.count = self.count + 1;
  386.  
  387.         local tSize = game:GetService('TextService'):GetTextSize(text, 16, Enum.Font.SourceSans, Vector2.new(math.huge, math.huge))
  388.  
  389.         local button = library:Create("TextLabel", {
  390.             Text =  text,
  391.             Size = UDim2.new(1, -10, 0, tSize.Y + 5),
  392.             TextScaled = false,
  393.             BackgroundTransparency = 1,
  394.             TextColor3 = Color3.fromRGB(255, 255, 255),
  395.             TextXAlignment = Enum.TextXAlignment.Left,
  396.             TextSize = 16,
  397.             Font = Enum.Font.SourceSans,
  398.             LayoutOrder = self.Count,
  399.             Parent = self.container,
  400.         });
  401.  
  402.         self:Resize();
  403.         return button;
  404.     end;
  405.  
  406.     function window:AddDropdown(options, callback)
  407.         self.count = self.count + 1
  408.         local default = options[1] or "";
  409.  
  410.         callback = callback or function() end
  411.         local dropdown = library:Create("TextLabel", {
  412.             Size = UDim2.new(1, -10, 0, 20),
  413.             BackgroundTransparency = 0.75,
  414.             BackgroundColor3 = options.boxcolor,
  415.             TextColor3 = Color3.fromRGB(255, 255, 255),
  416.             TextXAlignment = Enum.TextXAlignment.Center,
  417.             TextSize = 16,
  418.             Text = default,
  419.             Font = Enum.Font.SourceSans,
  420.             BorderSizePixel = 0;
  421.             LayoutOrder = self.Count,
  422.             Parent = self.container,
  423.         })
  424.  
  425.         local button = library:Create("ImageButton",{
  426.             BackgroundTransparency = 1,
  427.             Image = 'rbxassetid://3234893186',
  428.             Size = UDim2.new(0, 18, 1, 0),
  429.             Position = UDim2.new(1, -20, 0, 0),
  430.             Parent = dropdown,
  431.         })
  432.  
  433.         local frame;
  434.  
  435.         local function isInGui(frame)
  436.             local mloc = game:GetService('UserInputService'):GetMouseLocation();
  437.             local mouse = Vector2.new(mloc.X, mloc.Y - 36);
  438.  
  439.             local x1, x2 = frame.AbsolutePosition.X, frame.AbsolutePosition.X + frame.AbsoluteSize.X;
  440.             local y1, y2 = frame.AbsolutePosition.Y, frame.AbsolutePosition.Y + frame.AbsoluteSize.Y;
  441.  
  442.             return (mouse.X >= x1 and mouse.X <= x2) and (mouse.Y >= y1 and mouse.Y <= y2);
  443.         end;
  444.  
  445.         local function count(t)
  446.             local c = 0;
  447.             for i, v in next, t do
  448.                 c = c + 1;
  449.             end;
  450.             return c;
  451.         end;
  452.  
  453.         button.MouseButton1Click:connect(function()
  454.             if count(options) == 0 then
  455.                 return;
  456.             end;
  457.  
  458.             if frame then
  459.                 frame:Destroy();
  460.                 frame = nil;
  461.             end
  462.  
  463.             self.container.ClipsDescendants = false;
  464.  
  465.             frame = library:Create('Frame', {
  466.                 Position = UDim2.new(0, 0, 1, 0);
  467.                 BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  468.                 Size = UDim2.new(0, dropdown.AbsoluteSize.X, 0, (count(options) * 21));
  469.                 BorderSizePixel = 0;
  470.                 Parent = dropdown;
  471.                 ClipsDescendants = true;
  472.                 ZIndex = 2;
  473.             })
  474.  
  475.             library:Create('UIListLayout', {
  476.                 Name = 'Layout';
  477.                 Parent = frame;
  478.             })
  479.  
  480.             for i, option in next, options do
  481.                 local selection = library:Create('TextButton', {
  482.                     Text = option;
  483.                     BackgroundColor3 = Color3.fromRGB(40, 40, 40);
  484.                     TextColor3 = Color3.fromRGB(255, 255, 255);
  485.                     BorderSizePixel = 0;
  486.                     TextSize = 16;
  487.                     Font = Enum.Font.SourceSans;
  488.                     Size = UDim2.new(1, 0, 0, 21);
  489.                     Parent = frame;
  490.                     ZIndex = 2;
  491.                 })
  492.  
  493.                 selection.MouseButton1Click:connect(function()
  494.                     dropdown.Text = option;
  495.                     callback(option);
  496.                     frame.Size = UDim2.new(1, 0, 0, 0);
  497.                     game:GetService('Debris'):AddItem(frame, 0.1);
  498.                 end);
  499.             end;
  500.         end);
  501.  
  502.         game:GetService('UserInputService').InputBegan:connect(function(m)
  503.             if m.UserInputType == Enum.UserInputType.MouseButton1 then
  504.                 if frame and (not isInGui(frame)) then
  505.                     game:GetService('Debris'):AddItem(frame);
  506.                 end
  507.             end
  508.         end)
  509.  
  510.         callback(default);
  511.         self:Resize();
  512.         return {
  513.             Refresh = function(self, array)
  514.                 game:GetService('Debris'):AddItem(frame);
  515.                 options = array;
  516.                 dropdown.Text = options[1];
  517.             end;
  518.         };
  519.     end;
  520.  
  521.     return window;
  522. end;
  523.  
  524. if defaults.Rainbow then
  525.     Heartbeat:Connect(function()
  526.         for i, v in pairs(frames) do
  527.             if v.Parent ~= nil then
  528.                 local r = (math.sin(workspace.DistributedGameTime/2)/2)+0.5
  529.                 local g = (math.sin(workspace.DistributedGameTime)/2)+0.5
  530.                 local b = (math.sin(workspace.DistributedGameTime*1.5)/2)+0.5
  531.                 local color = Color3.new(r, g, b);
  532.                 v.Underline.BackgroundColor3 = color;
  533.             end;
  534.         end;
  535.     end);
  536. end;
  537.  
  538. return library, frames, Callbacks, Enabled
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