View difference between Paste ID: ZgbrK9hA and TTCVqRPL
SHOW: | | - or go back to the newest paste.
1
roblox_typeof = typeof or type;
2
roblox_typeof_new = {
3
	BrickColor = true, 
4
	Color3 = true, 
5
	Vector2 = true,
6
	Vector3 = true,
7
	CFrame = true,
8
	Region3 = true,
9
	UDim2 = true
10
};
11
12
push_and_clone = function (tbl, val)
13
	local clone = {};
14
	
15
	for k, v in next, tbl do 
16
		clone[k] = v; 
17
	end;
18
	
19
	clone [#clone + 1] = val;
20
	return clone;
21
end;
22
23
table_to_string = function (tbl, index, path)
24
	local index = index or 1;
25
	local path = path or {};
26
	local output = (getmetatable (tbl) == nil and '' or '[METATABLE]') .. '{\n';
27
	
28
	for i, v in next, path do
29
		if (v == tbl and i ~= #path) then
30
			return '[Circular Reference]';
31
		end;
32
	end;
33
	
34
	for k, v in next, tbl do
35
		output = output .. string.rep ('\t', index) .. '[';
36
		
37
		if (roblox_typeof (k) == 'table') then
38
			output = output .. table_to_string (k, 1, push_and_clone (path, k));
39
		elseif (roblox_typeof (k) == 'string') then	
40
			output = output .. '"' .. k .. '"';
41
		elseif (roblox_typeof_new [roblox_typeof (k)]) then
42
			output = output .. roblox_typeof (k) .. '.new (' .. tostring(v) .. ')'
43
		else
44
			output = output .. tostring (k);
45
		end;
46
		
47
		output = output .. '] = ';
48
		
49
		if (roblox_typeof (v) == 'table') then
50
			output = output .. table_to_string (v, index + 1, push_and_clone (path, v));
51
		elseif (roblox_typeof (v) == 'string') then
52
			output = output .. '"' .. v .. '"';
53
		elseif (roblox_typeof_new [roblox_typeof (v)]) then
54
			output = output .. roblox_typeof (v) .. '.new (' .. tostring(v) .. ')'
55
		else
56
			output = output .. tostring (v);
57
		end;
58
		
59
		output = output .. '\n';
60
	end;
61
	
62
	return output .. string.rep ('\t', math.max (index - 1, 0)) .. '};';
63
end;