View difference between Paste ID: eiLDFWnb and B51wR47J
SHOW: | | - or go back to the newest paste.
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(255,255,0),
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 = "PrisonGutterUI", Parent = game:GetService('CoreGui')})
81+
	library.gui = library.gui or self:Create("ScreenGui", {Name = "PrisonGutterUI", Parent = game:GetService("Players").LocalPlayer.PlayerGui})
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(1, 0, 1, 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