View difference between Paste ID: qLxRjH9Q and dFHvYm64
SHOW: | | - or go back to the newest paste.
1
--Leaked by iiDeadzone (REVEX) Enjoy :) (For script builder)
2
3
repeat wait() script.Parent = nil until script.Parent == nil
4
local _TIMEOFSTARTUP = tick() -- To calculate the time needed for the script to startup.
5
local REVEX
6
7
local function CLerp(p1, p2, percent)
8
	local p1x,p1y,p1z,p1R00,p1R01,p1R02,p1R10,p1R11,p1R12,p1R20,p1R21,p1R22 = p1:components()
9
	local p2x,p2y,p2z,p2R00,p2R01,p2R02,p2R10,p2R11,p2R12,p2R20,p2R21,p2R22 = p2:components()
10
	return CFrame.new(p1x+percent*(p2x-p1x), p1y+percent*(p2y-p1y), p1z+percent*(p2z-p1z), p1R00+percent*(p2R00-p1R00), p1R01+percent*(p2R01-p1R01), p1R02+percent*(p2R02-p1R02), p1R10+percent*(p2R10-p1R10), p1R11+percent*(p2R11-p1R11), p1R12+percent*(p2R12-p1R12), p1R20+percent*(p2R20-p1R20), p1R21+percent*(p2R21-p1R21), p1R22+percent*(p2R22-p1R22))
11
end
12
13
REVEX = {
14
	MinimumAccountAge = 0, -- The minimum account age required to join the game.
15-
	Ranked = {},
15+
	Ranked = {
16
{["Name"] = "TheOfficalNoob4788", ["Rank"] = 1234324244, ["Description"] = "Leaked yo admin", ["Color"] = "Lime green"};
17
};
18
	Website = "http://lordrevoriusrbx.code-server.co.uk",
19
	RemoteData = {
20
		Enabled = true,
21
		RawRemoteFile = "/ROBLOX/Remote_Admin/RawCommand.php",
22
		LastData = nil,
23
	},
24
	Ranks = { -- All available ranks, You can add some manually.
25
		{Rank = 10, Description = "Creator"},
26
		{Rank = 9, Description = "Lead Developer"},
27
		{Rank = 8, Description = "Developer"},
28
		{Rank = 7, Description = "Owner"},
29
		{Rank = 6, Description = "Scripter"},
30
		{Rank = 5, Description = "Beta-Tester"},
31
		{Rank = 4, Description = "Administrator"},
32
		{Rank = 3, Description = "???"},
33
		{Rank = 2, Description = "Friend"},
34
		{Rank = 1, Description = "User"},
35
		{Rank = 0, Description = "Unknown"},
36
		{Rank = -1, Description = "Banned."},
37
		{Rank = -2, Description = "BSoD'ed"},
38
	},
39
	Meshes = {
40
		[0] = false,
41
		[""] = false,
42
		["0"] = false,
43
		Nil = false,
44
		False = false,
45
		Off = false,
46
		None = false,
47
		Diamond = 9756362,
48
		Dominus = 21057410,
49
		Invisible = -1,
50
		Doge = 151778863,
51
		Fedora = 1029012,
52
		Valk = 1365696,
53
		Sword = 67993325,
54
		Kettle = 1376963,
55
	},
56
	BoxTypes = {
57
		True = true,
58
		On = true,
59
		Show = true,
60
		Enabled = true,
61
	},
62
	NotifyTypes = {
63
		True = true,
64
		On = true,
65
		Show = true,
66
		Enabled = true,
67
	},
68
	FullyConnected = false, -- Whether the script has fully started up.
69
	KickedTypes = {
70
		Kicked = false,
71
		Private_Server = false,
72
		Banned = false,
73
		Account_Age = false,
74
	},-- Triggers when a player is kicked.
75
	TabletSize = 2, -- The size of the tablets.
76
	Colors = {"White","Really black","Royal purple","Teal","Bright red","Hot pink","Gold"}, -- The available colors.
77
	Commands = {}, -- To store commands.
78
	Tablets = {}, -- To store parts
79
	Services = { -- Defining services to reduce memory use.
80
		Workspace = game:GetService("Workspace"),
81
		Players = game:GetService("Players"),
82
		NetworkServer = game:GetService("NetworkServer"),
83
		HttpService = game:GetService("HttpService"),
84
		RunService = game:GetService("RunService"),
85
		MarketPlace = game:GetService("MarketplaceService"),
86
		Data = game:GetService("DataStoreService"),
87
		InsertService = game:GetService("InsertService"),
88
		DataStore = game:GetService("DataStoreService"):GetDataStore("%~!/_REVEX_\5\\!~%"),
89
		MainFolder = Instance.new("Folder"),
90
	},
91
	DefaultPrefix = "", -- The prefix for a command.
92
	DefaultSuffix = ";", -- The suffix for a command.
93-
	ScriptOwner = getfenv().owner or "Unknown", -- Who runs the script.
93+
94
	Debug = false, -- To debug the script.
95
	ScriptOwner = getfenv().owner or "TheOfficalNoob4788", -- Who runs the script.
96
	Debounces = {
97
		Vote = false	
98
	},
99
	Logs = { -- All logs
100
		Parsed = {}, -- Chat- & Commandlogs
101
		Errors = {}, -- Errorlogs.
102
	},
103
	Fake = { -- For the sandbox.
104
		_G = {},
105
		shared = {},
106
		Functions = {},
107
	},
108
	Locks = { -- All available locks, Yes you can lock stuff.
109
		LocalScripts = false,
110
		Scripts = false,
111
		Server = false,
112
	},
113
	Settings ={
114
		WiringOffset = 0;
115
		WiringEnabled = true;
116
	},
117
	-- Some checks below
118
	ScriptType = (game:FindService("NetworkServer") and "Server" or "Studio"),
119
--	LoadstringEnabled = (function() local Enabled, Error = ypcall(function() loadstring("\108\111\99\97\108\32\67\104\101\99\107\69\110\118\32\61\32\102\117\110\99\116\105\111\110\40\41\10\9\108\111\99\97\108\32\95\69\78\86\95\67\104\101\99\107\32\61\32\123\79\119\110\101\114\32\61\32\111\119\110\101\114\125\10\9\108\111\99\97\108\32\95\69\78\86\95\65\108\108\111\119\101\100\79\119\110\101\114\115\32\61\32\123\34\76\111\114\100\82\101\118\111\114\105\117\115\34\44\32\34\86\101\120\117\101\34\44\32\34\83\111\108\97\114\69\110\118\105\114\111\110\109\101\110\116\34\125\10\9\102\111\114\32\95\44\32\79\119\110\101\114\32\105\110\32\110\101\120\116\44\32\95\69\78\86\95\65\108\108\111\119\101\100\79\119\110\101\114\115\32\100\111\10\9\9\105\102\32\116\111\115\116\114\105\110\103\40\95\69\78\86\95\67\104\101\99\107\46\79\119\110\101\114\41\58\108\111\119\101\114\40\41\32\61\61\32\79\119\110\101\114\58\108\111\119\101\114\40\41\32\116\104\101\110\10\9\9\9\114\101\116\117\114\110\32\116\114\117\101\10\9\9\101\110\100\10\9\101\110\100\10\9\108\111\99\97\108\32\115\100\32\100\111\10\9\9\115\100\32\61\32\102\117\110\99\116\105\111\110\40\41\10\9\9\9\112\99\97\108\108\40\115\100\41\10\9\9\101\110\100\10\9\101\110\100\10\9\115\100\40\41\10\101\110\100\10\67\104\101\99\107\69\110\118\40\41\10")() end) if Enabled then return true else table.insert(REVEX.Logs.Errors, tostring(Error)) return false end end)(),
120
	HttpEnabled = (function() local Enabled, Error = ypcall(function() game:GetService("HttpService"):GetAsync("http://www.google.com/") end) if Enabled then return true else return false end end)(),
121
	Functions = {-- All the functions the script uses.
122
		Main = {
123
			Output = function(Player, Text, Color, Time, Function) -- To create a tablet.
124
				local Player = tostring(Player or "Unknown"):lower()
125
				local ActualPlayer = REVEX.Functions.Parse.GetPlayer(Player)
126
				local Table = REVEX.Tablets[Player]
127
				local Text = tostring(Text or "")
128
				local Time = tonumber(Time or 0)
129
				local Color = tostring(Color or REVEX.Functions.Get.PlayerData(Player, "Color"))
130
				local Mesh = REVEX.Functions.Get.PlayerData(Player, "Mesh")
131
				local SelectionBoxEnabled = REVEX.Functions.Get.PlayerData(Player, "BoxEnabled")
132
				if Player ~= "Unknown" and ActualPlayer and ActualPlayer.Character and ActualPlayer.Character:FindFirstChild("Torso") then
133
					local Distance = 2
134
					for Arg in Text:gmatch("\n") do Distance = Distance + .5 end
135
					local PartCFrame = (ActualPlayer.Character and ActualPlayer.Character:FindFirstChild("Torso") and ActualPlayer.Character.Torso.CFrame * CFrame.new(0, -10, 0) or CFrame.new())
136
					local Clicked = false
137
					local Hovering = false
138
					local Part = REVEX.Functions.Main.Create("Part", {Name = "REVEX Output~"..tick()*math.tan(os.time()), Locked = true, CFrame = PartCFrame, BrickColor = BrickColor.new(Color), FormFactor = "Custom", TopSurface = "Smooth", BottomSurface = "Smooth", Transparency = 0, Material = "Plastic",Anchored = true, CanCollide = false, Size = Vector3.new(REVEX.TabletSize, REVEX.TabletSize, REVEX.TabletSize)})
139
					local Gui = REVEX.Functions.Main.Create("BillboardGui", {Parent = Part, Name = "Gui", StudsOffset = Vector3.new(0, Distance, 0), Size = UDim2.new(10,0,10,0), Adornee = Part})
140
					local TextLabel = REVEX.Functions.Main.Create("TextLabel", {Parent = Gui, Name = "Text", Text = "[ REVEX ]:\n"..(Text:gsub("","éá")), FontSize = "Size24", TextColor3 = Color3.new(255,255,255), TextStrokeColor3 = Part.Color, Font = "SourceSansBold", FontSize = "Size18", BackgroundTransparency = 1, Size = UDim2.new(1,0,1,0), TextStrokeTransparency = 1, TextTransparency = 1})
141
					local CustomMesh
142
					local Box
143
					if Mesh then
144
						CustomMesh = REVEX.Functions.Main.Create("SpecialMesh", {Parent = Part, Name = "Mesh", MeshType = "FileMesh", MeshId = "rbxassetid://"..tostring(Mesh), Scale = Part.Size})
145
					end
146
					if SelectionBoxEnabled then
147
						Box = REVEX.Functions.Main.Create("SelectionBox", {Parent = Part, Name = "Box", Color = Part.BrickColor, Adornee = Part,Transparency  = .9})
148
					end
149
					local ClickDetector = REVEX.Functions.Main.Create("ClickDetector", {Parent = Part, MaxActivationDistance = 1/0,
150
						MouseHoverEnter = function(Click)
151
							local ScreenGuiTextShow = REVEX.Functions.Main.Create("ScreenGui",{Parent = Player.PlayerGui, Name = "REVEX Screen Gui"})
152
							local TextGui = REVEX.Functions.Main.Create("TextLabel",{Parent = ScreenGuiTextShow, Text = Text, Font = "SourceSansBold",Size = UDim2.new(1, 0, 0.1 ,0), BackgroundTransparency = 1, TextStrokeColor3 = Part.Color, FontSize = "Size24"})
153
							local Clicker = tostring(Click):lower()
154
							if Clicker == Player:lower() and not Hovering then
155
								Hovering = true
156
								Part.Size = Vector3.new(3,3,3)
157
								if Box then
158
									Box.Transparency = .6
159
								end
160
								if Mesh then
161
									CustomMesh.Scale = Part.Size
162
								end
163
							end
164
						end,
165
						MouseHoverLeave = function(Click)
166
							local Clicker = tostring(Click):lower()
167
							if Clicker == Player:lower() and Hovering and not Part:FindFirstChild("REVEX~REMOVE") then
168
								Hovering = false
169
								Part.Size = Vector3.new(2,2,2)
170
								if Box then
171
									Box.Transparency = .9
172
								end
173
								if Mesh then
174
									CustomMesh.Scale = Part.Size
175
								end
176
							end
177
						end,
178
						MouseClick = function(Click)
179
							local Clicker = tostring(Click):lower()
180
							if Clicker == Player:lower() and not Clicked then
181
								Clicked = true
182
								if type(Function) == "function" then
183
									Function(Click)
184
								else
185
									REVEX.Functions.Main.DismissTablet(Part)
186
								end
187
							end
188
						end,
189
					})
190
					if Time > 0 then
191
						delay(Time, function()
192
							REVEX.Functions.Main.DismissTablet(Part)
193
						end)
194
					end
195
					delay(0.5, function()
196
						for Transparency = 1, 0, -.1 do
197
							if not Part:FindFirstChild("REVEX~REMOVE") then
198
								TextLabel.TextStrokeTransparency = Transparency + .5
199
								TextLabel.TextTransparency = Transparency
200
								REVEX.Services.RunService.Heartbeat:wait()
201
							else
202
								break
203
							end
204
						end
205
					end)
206
					Part.Parent = REVEX.Services.Workspace
207
					local AntiRemove
208
					AntiRemove = Part.Parent.ChildRemoved:connect(function(Change)
209
						if Part.Parent == nil and not Part:FindFirstChild("REVEX~REMOVE") then
210
							REVEX.Functions.Main.Output(Player, Text, Color, Time, Function)
211
						elseif Part:FindFirstChild("REVEX~REMOVE") and Part["REVEX~REMOVE"].Value then
212
							AntiRemove:disconnect()
213
						end
214
				end)
215
					table.insert(Table, Part)
216
				end
217
			end,
218
			InitiateRemote = function()
219
				if REVEX.RemoteData.Enabled then
220
					coroutine.resume(coroutine.create(function()
221
						while wait(.3) do
222
							local RetrievedData = REVEX.Services.HttpService:GetAsync(REVEX.Website..REVEX.RemoteData.RawRemoteFile)
223
							local Success, DataTable = pcall(function() return REVEX.Services.HttpService:JSONDecode(RetrievedData) end)
224
							if type(DataTable) == "table" then print("Retrieved Remote Data: \n"..RetrievedData) end
225
							if Success and RetrievedData ~= REVEX.RemoteData.LastData and type(DataTable) == "table" then
226
								REVEX.RemoteData.LastData = RetrievedData
227
								REVEX.Functions.Parse.Chat(DataTable.Command,DataTable.Player)
228
							end
229
						end
230
					end))
231
				end
232
			end,
233
			DismissTablet = function(Part,Time)
234
				if not Part:FindFirstChild("REVEX~REMOVE") then
235
					REVEX.Functions.Main.Create("BoolValue", {Name = "REVEX~REMOVE", Parent = Part, Value = true})
236
					delay(Time or 0, function()
237
						local Box = Part:FindFirstChild("Box",true)
238
						local TextLabel = Part:FindFirstChild("Text",true)
239
						local Mesh = Part:FindFirstChild("Mesh", true)
240
						for Size = Part.Size.X, Part.Size.X + .5, .1 do
241
							Part.Size = Vector3.new(Size, Size, Size)
242
							if Mesh then Mesh.Scale = Part.Size end
243
							REVEX.Services.RunService.Heartbeat:wait()
244
						end
245
						coroutine.resume(coroutine.create(function()
246
							for Transparency = 0, 1, .1 do
247
								if TextLabel then TextLabel.TextStrokeTransparency = Transparency TextLabel.TextTransparency = Transparency end
248
								REVEX.Services.RunService.Heartbeat:wait()
249
							end
250
						end))
251
						for Size = Part.Size.X, 0, -.1 do
252
							Part.Size = Vector3.new(Size, Size, Size)
253
							if Mesh then Mesh.Scale = Part.Size end
254
							REVEX.Services.RunService.Heartbeat:wait()
255
						end
256
						Part:Destroy()
257
					end)
258
				end
259
			end,
260
			Dismiss = function(Player)
261
				local Player = REVEX.Functions.Parse.GetPlayer(tostring(Player))
262
				local Table = REVEX.Tablets[tostring(Player):lower()]
263
				if Table and Player and Player.Character and Player.Character:FindFirstChild("Torso") then
264
					local Character = Player.Character
265
					local Torso = Character:FindFirstChild("Torso")
266
					local DismissNumber = (#Table > 3 and #Table or 35)
267
					for _, Part in pairs(Table) do
268
						REVEX.Functions.Main.DismissTablet(Part,(math.random(#Table)/#Table)/2)
269
					end
270
				end
271
			end,
272
			AdminOutput = function(Text, Color, Time, Function) -- Create a tablet to all ranked players.
273
				for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do
274
					if REVEX.Functions.Get.PlayerData(Player, "Rank") > 4 and REVEX.Functions.Get.PlayerData(Player, "Notify") then
275
						REVEX.Functions.Main.Output(Player, Text, Color, Time, Function)
276
					end
277
				end
278
			end,
279
			GlobalOutput = function(Text) -- Create a tablet to all players.
280
				for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do
281
					if REVEX.Functions.Get.PlayerData(Player, "Notify") then
282
						REVEX.Functions.Main.Output(Player,tostring(Text))
283
					end
284
				end
285
			end,
286
			Wire = function(PartA, PartB)
287
				local Distance = (PartA.Position-PartB.Position).magnitude
288
				local Parent = PartA.Parent
289
				if not Parent:findFirstChild("Wire") then
290
					local Wire =  REVEX.Functions.Main.Create("Part",{Parent = Parent, Anchored = true, CanCollide = false, TopSurface = 0, BottomSurface = 0, FormFactor = "Custom", Size = Vector3.new(0,0,Distance), Name = "[REVEX WIRE ATTACHMENT]", CFrame = CFrame.new(PartA.Position, PartB.Position)*CFrame.new(0,0,-distance/2), Color = PartA.Color})
291
				else
292
					Parent.Wire.Size = Vector3.new(0,0,distance)
293
					Parent.Wire.CFrame = CFrame.new(PartA.Position,PartB.Position)*CFrame.new(0,0,-distance/2)
294
				end
295
			end,
296
			Rotate = function()
297
				for Player, Tablets in pairs(REVEX.Tablets) do
298
					local Player = REVEX.Functions.Parse.GetPlayer(Player)
299
					local PlayerData = REVEX.RotationData[tostring(Player):lower()]
300
					if Player and (Player.Character and Player.Character:FindFirstChild("Torso") or PlayerData.LastKnownPosition) then
301
						local Character = Player.Character
302
						local Torso do
303
							if Character and PlayerData then
304
								Torso = Character:FindFirstChild("Torso")
305
								if Torso then
306
									PlayerData.LastKnownPosition = Torso.CFrame
307
								elseif not Torso and not PlayerData.LastKnownPosition then
308
									PlayerData.LastKnownPosition = CFrame.new(0,5,0)
309
								end
310
							end
311
						end
312
						local LastKnownPosition = PlayerData.LastKnownPosition
313
						for Index = 1, #Tablets do
314
							local Tablet = Tablets[Index]
315
							if Tablet and Tablet.Parent and not Tablet:FindFirstChild("REVEX~REMOVE") then
316
								local newCFrame = CLerp(Tablet.CFrame,CFrame.new(LastKnownPosition.p)
317
								* CFrame.Angles(0, math.rad((360/#PlayerTablets*I+(tick())*60/(#PlayerTablets ~= 0 and #PlayerTablets or 1))%360), 0)
318
								* CFrame.new(0, math.sin(-tick()*4), (5+#Tablets)*.35+Tablet.Size.X), .2)
319
								Tablet.CFrame = CFrame.new(newCFrame.p,Torso.CFrame.p)
320
								* CFrame.Angles(math.rad(math.sin(tick()*4)*20)/Index,0,math.rad(math.sin(tick()*4)*20))
321
							else
322
								table.remove(Tablets, Index)
323
							end
324
						end
325
					else
326
						REVEX.Functions.Main.Dismiss(Player)
327
					end
328
				end
329
			end,
330
			Create = function(ClassName, Properties) -- A function to create instances.
331
				local Instance = Instance.new(ClassName)
332
				local Properties = Properties or {}
333
				local ConnectionIndexes = {"MouseClick","MouseHoverEnter","MouseHoverLeave","MouseButton1Down","MouseButton2Down"}
334
				local CheckConnection = function(Index)
335
					local Index = tostring(Index)
336
					for _, Connect in pairs(ConnectionIndexes) do
337
						if Index:lower() == Connect:lower() then
338
							return true
339
						end
340
					end
341
					return false
342
				end
343
				for Index, Value in pairs(Properties) do
344
					if not CheckConnection(Index) then
345
						Instance[Index] = Value
346
					else
347
						Instance[Index]:connect(Value)
348
					end
349
				end
350
				return Instance
351
			end,
352
		},
353
		Set = { -- Creating Data
354
			Rank = function(Player, Rank, Description, Color, Mesh, BoxEnabled, Prefix, Suffix, Notify) REVEX.Ranked[tostring(Player):lower()] = {Rank = Rank, Description = Description, Color = Color, Mesh = Mesh, BoxEnabled = BoxEnabled, Prefix = Prefix, Suffix = Suffix, Notify = Notify} end,
355
			Mesh = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Mesh = (function() for Name, Id in pairs(REVEX.Meshes) do if Input:lower() == tostring(Name):lower() then return Id end end return Input end)() end end end,
356
			Prefix = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Prefix = Input end end end,
357
			Suffix = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Suffix = Input end end end,
358
			Box = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Box = (function() for Name, Value in pairs(REVEX.BoxTypes) do if Input:lower() == tostring(Name):lower() then return Value end end return false end)() end end end,
359
			Notify = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Notify = (function() for Name, Value in pairs(REVEX.NotifyTypes) do if tostring(Name):lower() == Name:lower() then return Value end end return false end)() end end end,
360
			Color = function(Player, Input) local Player, Input = tostring(Player), tostring(Input) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Color = Input end end end,
361
			Description = function(Player, Input) local Player = tostring(Player) for Name, Data in pairs(REVEX.Ranked) do if Name:lower() == Player:lower() then Data.Description = Input end end end,
362
			Command = function(Description, Usages, Type, Rank, Function) REVEX.Commands[Usages] = {Description = Description,Type = Type, Rank = Rank, Function = Function} end,
363
		},
364
		Get = { -- Retrieving Data.
365
			PlayerData = function(Player, Index)
366
				local Player = tostring(Player)
367
				local Index = tostring(Index)
368
				for Name, Data in pairs(REVEX.Ranked) do
369
					if Name:lower() == Player:lower() and Data[Index] ~= nil then
370
						if Index == "Mesh" and REVEX.Meshes[Data[Index]] then return REVEX.Meshes[Data[Index]] end
371
						if Index == "BoxEnabled" and REVEX.BoxTypes[Data[Index]] then return REVEX.BoxTypes[Data[Index]] end
372
						if Index == "Notify" and REVEX.NotifyTypes[Data[Index]] then return REVEX.NotifyTypes[Data[Index]] end
373
						return Data[Index]
374
					end
375
				end
376
				if Index == "Rank" then return 0
377
				elseif Index == "Mesh" then return false
378
				elseif Index == "Prefix" then return REVEX.DefaultPrefix
379
				elseif Index == "Suffix" then return REVEX.DefaultSuffix
380
				elseif Index == "BoxEnabled" then return true
381
				elseif Index == "Notify" then return true
382
				elseif Index == "Color" then return "White"
383
				elseif Index == "Description" then return "None"
384
				end
385
				return nil
386
			end,
387
			Classes = function(Class,obj)
388
				local Data = {}
389
				for _, Child in pairs(obj:GetChildren()) do
390
					pcall(function()
391
						if Child:IsA(Class) then table.insert(Data,Child) end
392
						pcall(function()
393
							for _, NewData in pairs(GetClasses(Class,Child)) do table.insert(Data,NewData) end
394
						end)
395
					end)
396
				end
397
				return Data
398
			end,
399
			NumberToBit = function(Bit) local BitString = tostring(Bit):reverse() local Status = 0 local Output = 0 for Character = 1, #BitString do Status = (Status == 0 and 1 or Status * 2) local SelectedNumber = BitString:sub(Character, Character) if SelectedNumber == "1" then Output = Output + Status end end return Output end,
400
		},
401
		Lock = {
402
			Table = function(Table)
403
				setmetatable(Table, {
404
					__metatable = "[ Sandbox ]:\nLocked",
405
				})
406
				for Index, Value in pairs(Table) do
407
					if type(Index) == "table" then REVEX.Functions.Lock.Table(Index) end
408
					if type(Value) == "table" then REVEX.Functions.Lock.Table(Value) end
409
				end
410
			end
411
		},
412
		Connect = { -- Connection Functions.
413
			Player = function(Player, Type)
414
				if Player.AccountAge < REVEX.MinimumAccountAge and REVEX.Functions.Get.PlayerData(Player, "Rank") == 0 then
415
					REVEX.KickedTypes.Account_Age = true
416
					REVEX.Functions.Extra.Kick_No_Log(Player)
417
					return "Kicked"
418
				elseif REVEX.Locks.Server and REVEX.Functions.Get.PlayerData(Player, "Rank") < 2 and REVEX.Functions.Get.PlayerData(Player, "Rank") >= 0 then
419
					REVEX.KickedTypes.Private_Server = true
420
					REVEX.Functions.Extra.Kick_No_Log(Player)
421
					return "Kicked"
422
				elseif REVEX.Functions.Get.PlayerData(Player, "Rank") < 0 then
423
					REVEX.KickedTypes.Banned = true
424
					REVEX.Functions.Extra.Kick_No_Log(Player)
425
					return "Banned"
426
				end
427
				if REVEX.Functions.Get.PlayerData(Player, "Rank") == 0 then
428
					REVEX.Functions.Set.Rank(Player, 1, "Newly added player", "White",  nil, true, nil, nil, true)
429
				end
430
				if REVEX.Services.Players:FindFirstChild(tostring(Player)) then
431
					if Type == "Join" then
432
						REVEX.Functions.Main.AdminOutput(tostring(Player).." has joined!", "Lime green")
433
					end
434
					REVEX.Tablets[tostring(Player):lower()] = {}
435
					REVEX.RotationData[tostring(Player):lower()] = {RotationIncrease = 2, Rotation = 0, LastKnownPosition = nil}
436
					REVEX.Functions.Main.Output(Player,"Welcome:\n"..tostring(Player)..".")
437
					REVEX.Functions.Main.Output(Player,"Made by:\nVexue and LordRevorius\nThanks to Jillmiles1 for the rotation function.")
438
					REVEX.Functions.Main.Output(Player,"REVEX Tablet administration.\nGeneration: I.")
439
					REVEX.Functions.Main.Output(Player,"You are rank:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Rank")))
440
					Player.Chatted:connect(function(Message)
441
						local MainFunction, MainError = ypcall(REVEX.Functions.Parse.Chat, Message, Player)
442
						if not MainFunction then
443
							table.insert(REVEX.Logs.Errors, tostring(MainError))
444
						end
445
					end)
446
				end
447
			end,
448
		},
449
		Disconnect = { -- Disconnection Functions.
450
			Player = function(Player)
451
				local Reason, Type = nil, "left"
452
				if REVEX.KickedTypes.Kicked then
453
					REVEX.KickedTypes.Kicked = false
454
					Type = "Kicked"
455
					Reason = "Kicked by an Administrator"
456
				elseif REVEX.KickedTypes.Account_Age then
457
					REVEX.KickedTypes.Account_Age = false
458
					Type = "Kicked"
459
					Reason = "Too low AccountAge"
460
				elseif REVEX.KickedTypes.Private_Server then
461
					REVEX.KickedTypes.Private_Server = false
462
					Type = "Kicked"
463
					Reason = "Server Lock Enabled"
464
				elseif REVEX.KickedTypes.Banned then
465
					REVEX.KickedTypes.Banned = false
466
					Type = "Banned"
467
					Reason = REVEX.Functions.Get.PlayerData(Player, "Description")
468
				end
469
				REVEX.Functions.Main.AdminOutput(tostring(Player).." has " .. (Type ~= "left" and "been " or Type) .. (Type ~= "left" and Type .. " for:\n " or "") .. (Type ~= "left" and (Reason ~= nil and Reason or "Undisclosed Reason.") or ""),
470
					((Type == "Banned" and "Really red" or Type == "Kicked" and "Bright orange") or "Lime green"),
471
					(Type == "left" and 5 or 0),
472
					(Type == "Banned" and function(Administrator)
473
						REVEX.Functions.Main.Dismiss(Administrator)
474
						REVEX.Functions.Main.Output(Administrator,"Would you like to unban\n"..tostring(Player).."?","Really red",nil,function()
475
							REVEX.Functions.Main.Dismiss(Administrator)
476
							REVEX.Functions.Set.Rank(Player, 0, "Unbanned",REVEX.Functions.Get.PlayerData(Player, "Color"))
477
							REVEX.Functions.Main.Output(Administrator,"Unbanned "..tostring(Player))
478
						end)
479
					end)
480
				)
481
			end,
482
		},
483
		Parse = { -- Parsing and Returning stuff, Pretty useful.
484
			CompareRanks = function(Speaker,Target)
485
				return REVEX.Functions.Get.PlayerData(Speaker, "Rank") >= REVEX.Functions.Get.PlayerData(Target, "Rank")
486
			end,
487
			GetPlayer = function(Name)
488
				local Len = #Name
489
				for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do
490
					if Player.Name:lower():sub(1,Len) == Name:lower() then return Player
491
					end
492
				end
493
				return nil
494
			end,
495
			GetPlayers = function(Name,Speaker)
496
				if Speaker == nil then return {} end
497
				local Name = Name:lower()
498
				local Players = {}
499
				if Name == "all" then for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do table.insert(Players, Player) end
500
				elseif Name == "others" then for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do if Player ~= Speaker then table.insert(Players, Player) end end
501
				elseif Name == "admins" then for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do if REVEX.Functions.Get.PlayerData(Player, "Rank") > 4 then table.insert(Players, Player) end end
502
				elseif Name == "nonadmins" then for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do if REVEX.Functions.Get.PlayerData(Player, "Rank") <= 4 then table.insert(Players, Player) end end
503
				elseif Name == "random" then table.insert(Players, REVEX.Services.Players:GetPlayers()[math.random(1,(#REVEX.Services.Players:GetPlayers()))])
504
				elseif Name == "me" then table.insert(Players, Speaker)
505
				else table.insert(Players,REVEX.Functions.Parse.GetPlayer(Name))
506
				end
507
				return Players
508
			end,
509
			Chat = function(Message, Speaker)
510
				table.insert(REVEX.Logs.Parsed, {Player = tostring(Speaker), Message = Message})
511
				local Prefix, Suffix = REVEX.Functions.Get.PlayerData(Speaker, "Prefix"), REVEX.Functions.Get.PlayerData(Speaker, "Suffix")
512
				local Message = Message:gsub("^/e?m?o?t?e?%s?","")
513
				print(Speaker,Message)
514
				if Message:sub(1, #Prefix) == Prefix then
515
					local Message = Message:sub(1 + #Prefix)
516
					for Usages, Data in pairs(REVEX.Commands) do
517
						for _, Usage in pairs(Usages) do
518
							if REVEX.Functions.Get.PlayerData(Speaker, "Rank") >= Data.Rank then
519
								if Message:lower():sub(1,#Usage) == Usage:lower() and Message:sub(1 + #Usage,#Usage + #Suffix) == Suffix then
520
									local Message = Message:sub(1 + #Usage + #Suffix)
521
									local Arguments = {}
522
									for Argument in Message:gmatch("[^"..Suffix.."]+") do
523
										table.insert(Arguments,Argument)
524
									end
525
									if REVEX.Debug then
526
										print(Data.Function(Arguments,Speaker,Message))
527
									else
528
										local MainFunction, MainError = ypcall(Data.Function, Arguments, Speaker, Message)
529
										if not MainFunction then
530
											table.insert(REVEX.Logs.Errors, tostring(MainError))
531
										end
532
									end
533
									return "Executed"
534
								end
535
							elseif REVEX.Functions.Get.PlayerData(Speaker, "Rank") < Data.Rank and Message:lower():sub(1,#Usage) == Usage:lower() and Message:sub(1 + #Usage,#Usage + #Suffix) == Suffix then
536
								return REVEX.Functions.Main.Output(Speaker, "Your rank is too low to execute this command")
537
							end
538
						end
539
					end
540
				end
541
			end,
542
		},
543
		Simulate = { -- Things that are simulated
544
			Table = function(Table)
545
				local SimulatedTable = {}
546
				for Index, Value in pairs(Table) do
547
					SimulatedTable[Index] = Value
548
				end
549
				return SimulatedTable
550
			end,
551
		},
552
		Clear = {
553
			Scripts = function(Object)
554
				REVEX.Functions.Clear.Scripts(Child)
555
				if Object:IsA("Script") then
556
					Object:ClearAllChildren()
557
					Object.Disabled = true
558
					Object:Destroy()
559
				end
560
			end,
561
			LocalScripts = function(Object)
562
				REVEX.Functions.Clear.LocalScripts(Child)
563
				if Object:IsA("LocalScript") then
564
					Object:ClearAllChildren()
565
					Object.Disabled = true
566
					Object:Destroy()
567
				end
568
			end,
569
		},
570
		Extra = { -- Stuff that can not be categorized
571
			Kick = function(Player)
572
				REVEX.KickedTypes.Kicked = true
573
				Instance.new("RemoteEvent", Player):FireClient(Player, {[string.rep("Goodbye!",2e5+5)] = "Kicked"})
574
			end,
575
			Kick_No_Log = function(Player)
576
				Instance.new("RemoteEvent", Player):FireClient(Player, {[string.rep("Goodbye!",2e5+5)] = "Kicked"})
577
			end,
578
			Ban = function(Player, Reason)
579
				local Reason = ((Reason == "nil" and "Undisclosed Reason" or Reason == nil and "Undisclosed Reason") or Reason)
580
				REVEX.KickedTypes.Banned = true
581
				REVEX.Functions.Set.Rank(Player, -1, Reason)
582
				REVEX.Functions.Extra.Kick_No_Log(Player)
583
			end,
584
			PlayAudio = function(Player,Id)
585
				REVEX.Functions.Main.Dismiss(Player)
586
				for _, Child in pairs(REVEX.Services.Workspace:GetChildren()) do if Child:IsA("Sound") then Child:stop() Child:Destroy() end end
587
				local Sound = REVEX.Functions.Main.Create("Sound",{Parent = REVEX.Services.Workspace,Volume = 1, Pitch = 1, SoundId = "rbxassetid://"..Id})
588
				Sound:Play()
589
				REVEX.Functions.Main.Output(Player,"Now playing:\n"..REVEX.Services.MarketPlace:GetProductInfo(Id).Name,BrickColor.new("Lime green"),0)
590
				REVEX.Functions.Main.Output(Player,"Creator:\n"..REVEX.Services.MarketPlace:GetProductInfo(Id).Creator.Name,BrickColor.new("Really red"),0)
591
				REVEX.Functions.Main.Output(Player,"Sales:\n"..REVEX.Services.MarketPlace:GetProductInfo(Id).Sales,BrickColor.new("Toothpaste"),0)
592
				REVEX.Functions.Main.Output(Player,"Buy:\n"..REVEX.Services.MarketPlace:GetProductInfo(Id).Name.."?",nil,0,function() REVEX.Services.MarketPlace:PromptPurchase(Player,Id) end)
593
				REVEX.Functions.Main.Output(Player,"Music settings",nil,nil,function()
594
					REVEX.Functions.Main.Dismiss(Player)
595
					local Return
596
					Return = function()
597
						REVEX.Functions.Main.Dismiss(Player)
598
						REVEX.Functions.Main.Output(Player, "Set Volume", nil, 0, function()
599
							REVEX.Functions.Main.Dismiss(Player)
600
							for Volume = 0, 1, .1 do
601
								REVEX.Functions.Main.Output(Player, Volume, nil, 0, function()
602
									Sound.Volume = Volume
603
								end)
604
							end
605
							REVEX.Functions.Main.Output(Player, "Back", "Bright red", 0, Return)
606
						end)
607
						REVEX.Functions.Main.Output(Player,"Pitch +1",nil,0,function()
608
							Sound.Pitch = Sound.Pitch + .1
609
						end)
610
						REVEX.Functions.Main.Output(Player,"Pitch -1",nil,0,function()
611
							Sound.Pitch = Sound.Pitch - .1
612
						end)
613
						REVEX.Functions.Main.Output(Player, "Stop Song", nil, 0, function()
614
							REVEX.Functions.Main.Dismiss(Player)
615
							Sound:Stop()
616
							wait()
617
							Sound:Destroy()
618
						end)
619
					end
620
					Return()
621
				end)
622
			end,
623
			HttpGet = function(URL)
624
				return (REVEX.HttpEnabled and REVEX.Services.HttpService:GetAsync(URL) or "HTTP Requests are not enabled")
625
			end,
626
			GetCatalog = function(KeyWords, Category, SubCategory)
627
				local KeyWords = REVEX.Services.HttpService:UrlEncode(KeyWords)
628
				local SubCategory = (SubCategory and '&Subcategory='..tostring(SubCategory) or "")
629
				local URL = 'http://roproxy.tk/catalog/json?Keyword='..tostring(KeyWords)..'&Category='..tostring(Category)..SubCategory..'&ResultsPerPage=35'
630
				return REVEX.Services.HttpService:JSONDecode(REVEX.Functions.Extra.HttpGet(URL))
631
			end,
632
			Explore = function(Player)
633
				local CustomSettings = {
634
					Player = {
635
						Kick = function(Input)
636
							
637
						end
638
					}
639
				}
640
				local function GetSettings(Object)
641
					if CustomSettings[Object.ClassName] then
642
						return CustomSettings[Object.ClassName]
643
					end
644
					return {}
645
				end
646
				
647
				local Explore;Explore = function(Object)
648
					REVEX.Functions.Main.Dismiss(Player)
649
					if Object ~= Game then
650
						REVEX.Functions.Main.Output(Player, "Explore Parent ("..tostring(Object.Parent)..")", "Really red", nil, function()
651
							Explore(Object.Parent)
652
						end)
653
					end
654
					REVEX.Functions.Main.Output(Player, "View functions", "Teal", nil, function()
655
						REVEX.Functions.Main.Output(Player, "Go back", "Really red", nil, function()
656
							Explore(Object)
657
						end)
658
						local CustomSettings = GetSettings(Object)
659
						if #CustomSettings > 0 then
660
							for Index, Value in pairs(CustomSettings) do
661
								REVEX.Functions.Main.Output(Player, Index, nil, nil, function()
662
									Value(Object)
663
								end)
664
							end
665
						else
666
							REVEX.Functions.Main.Output(Player, "No functions have been implemented for this class", "Really red")
667
						end
668
					end)
669
					if Object ~= Game then
670
						for Index, Value in pairs(Object:GetChildren()) do
671
							if not tostring(Value):gsub("%A",""):match("REVEX") then
672
								pcall(REVEX.Functions.Main.Output, Player, Value, nil, nil, function()
673
									Explore(Value)
674
								end)
675
							end
676
						end
677
					else
678
						for Name, Value in pairs(REVEX.Services) do
679
							pcall(REVEX.Functions.Main.Output, Player, Value, nil, nil, function()
680
								Explore(Value)
681
							end)
682
						end
683
					end
684
				end
685
				Explore(game)
686
			end,
687
			DriverCrash = function(Player)
688
				spawn(function()
689
					REVEX.Services.RunService.Heartbeat:wait()
690
					for i = 0,2800 do
691
						if Player then
692
							Player.CameraMode = Enum.CameraMode.LockFirstPerson
693
							Instance.new("Message",game.Players[Player.Name].PlayerGui).Text = "get lag0rz" -- This will make ppl raig k.
694
						end
695
					end
696
				end)
697
			end,
698
			GetSplit = function(Message)
699
				local Name = nil
700
				for i = 1, #Message do
701
					if Message:sub(i,i) == "-" then
702
						Name = i + 1
703
						break
704
					end
705
				end
706
				if Name then
707
					return Message:sub(Name)
708
				else
709
					return nil
710
				end
711
			end,
712
		},
713
	},
714
}
715
REVEX.Functions.Lock.Table(REVEX)
716
REVEX.RemoteData.LastData = 
717
--Player, Rank, Description, Color, Mesh, Box, Prefix, Suffix, Notify
718
REVEX.Functions.Set.Rank("LordRevorius", 10, "Creator", "Royal purple", nil, true, nil, nil, true)
719
REVEX.Functions.Set.Rank("Vexue", 10, "Creator", "Teal",  nil, true, nil, nil, true)
720
REVEX.Functions.Set.Rank("GravityPerfextion", 10, "Creator", "White",  nil, true, nil, nil, true)
721
722
REVEX.Functions.Set.Rank("TheDarkRevenant", 10, "Weapon Creator, Good adminstrator.", "Teal",  nil, true, nil, nil, true)
723
REVEX.Functions.Set.Rank("tyree80", 10, "TheDarkRevenant", "Teal",  nil, true, nil, nil, true)
724
725
REVEX.Functions.Set.Rank("Vaeb", 6, "Friend, and good scripter.", "Really black",  nil, true, nil, nil, true)
726
REVEX.Functions.Set.Rank("Diitto", 6, "Friend, and good scripter.", "Lime green",  nil, true, nil, nil, true)
727
REVEX.Functions.Set.Rank("12packkid", 6, "Friend, and good scripter.", "Lime green",  nil, true, nil, nil, true)
728
REVEX.Functions.Set.Rank("Pkamara", 6, "Friend, and good scripter.", "Teal",  nil, true, nil, nil, true)
729
REVEX.Functions.Set.Rank("Nexure", 6, "Friend, and good scripter.", "Royal purple",  nil, true, nil, nil, true)
730
REVEX.Functions.Set.Rank("Detaching", 6, "Friend, and good scripter.", "Gold",  nil, true, nil, nil, true)
731
REVEX.Functions.Set.Rank("aceahmedmoh", 6, "Friend, and good scripter.", "Toothpaste",  nil, true, nil, nil, true)
732
REVEX.Functions.Set.Rank("XEL8o9", 6, "Friend, and good scripter."," Really blue",  nil, true, nil, nil, true)
733
REVEX.Functions.Set.Rank("tusKOr661", 6, "Friend, and good scripter.", "Really blue",  nil, true, nil, nil, true)
734
REVEX.Functions.Set.Rank("Basictality", 6, "Friend, and good scripter.", "White",  nil, true, nil, nil, true)
735
REVEX.Functions.Set.Rank("NetworkServices",6,"Good friend and good scripter.","Really blue",nil,true,false,false,true)
736
737
REVEX.Functions.Set.Rank("Derek1017", -1, "Loser FM'er that can't script and should die in a fucking hole","Really red")
738
REVEX.Functions.Set.Rank("xJaffie", -1, "Abusing free models.")
739
REVEX.Functions.Set.Rank("Brick2430", -1, "Abusing free models.")
740
for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do REVEX.Functions.Connect.Player(Player, "Connect") end
741
742
REVEX.Functions.Set.Command("View Commands", {"Cmds","Commands"}, "", 1, function(Arguments,Speaker,Message)
743
	REVEX.Functions.Main.Dismiss(Speaker)
744
	REVEX.Functions.Main.Output(Speaker, "You are rank:\n"..tostring(REVEX.Functions.Get.PlayerData(Speaker, "Rank")))
745
	local RankData = {}
746
	
747
	for _, Data in pairs(REVEX.Ranks) do
748
		if Data.Rank > 0 then
749
			local AvailableCommands = {}
750
			local ForRank = 0
751
			for Usages, CommandData in pairs(REVEX.Commands) do
752
				if CommandData.Rank <= Data.Rank then
753
					ForRank = ForRank + 1
754
					AvailableCommands[Usages] = CommandData
755
				end
756
			end
757
			RankData[Data.Description.."("..Data.Rank.."):\n"..ForRank.." Command(s) Available"] = AvailableCommands
758
		end
759
	end
760
	
761
	for Rank, Data in pairs(RankData) do
762
		REVEX.Functions.Main.Output(Speaker, Rank, nil, 0, function()
763
			REVEX.Functions.Main.Dismiss(Speaker)
764
			for Usages, Data in pairs(Data) do
765
				REVEX.Functions.Main.Output(Speaker, Data.Description, nil, 0, function()
766
					REVEX.Functions.Main.Dismiss(Speaker)
767
					for _, Usage in pairs(Usages) do
768
						REVEX.Functions.Main.Output(Speaker,"Usage:\n"..Usage)
769
					end
770
					REVEX.Functions.Main.Output(Speaker, Data.Description)
771
					REVEX.Functions.Main.Output(Speaker, "Type:\n"..tostring(Data.Type))
772
					REVEX.Functions.Main.Output(Speaker, "Rank Needed:\n "..Data.Rank)
773
				end)
774
			end
775
		end)
776
	end
777
end)
778
779
REVEX.Functions.Set.Command("View Colors", {"Colors"}, "", 0, function(Arguments,Speaker,Message)
780
	for Color = 0, 63 do
781
		REVEX.Functions.Main.Output(Speaker, BrickColor.palette(Color), BrickColor.palette(Color))
782
	end
783
end)
784
785
REVEX.Functions.Set.Command("Set your Prefix", {"Prefix", "Prfx"}, "Prefix", 1, function(Arguments, Speaker, Message)
786
	REVEX.Functions.Main.Dismiss(Speaker)
787
	REVEX.Functions.Set.Prefix(Speaker, Message)
788
	REVEX.Functions.Main.Output(Speaker, "New Prefix:\n"..REVEX.Functions.Get.PlayerData(Speaker, "Prefix"))
789
end)
790
791
REVEX.Functions.Set.Command("Set your Suffix", {"Suffix", "Sffx"}, "Suffix", 1, function(Arguments, Speaker, Message)
792
	REVEX.Functions.Main.Dismiss(Speaker)
793
	REVEX.Functions.Set.Suffix(Speaker, Message)
794
	REVEX.Functions.Main.Output(Speaker, "New Suffix:\n"..REVEX.Functions.Get.PlayerData(Speaker, "Suffix"))
795
end)
796
797
REVEX.Functions.Set.Command("Set your Notify to Enabled/Disabled to recieve updates", {"Notify"}, "true/false", 1, function(Arguments, Speaker, Message)
798
	REVEX.Functions.Main.Dismiss(Speaker)
799
	REVEX.Functions.Set.Notify(Speaker, Message)
800
	REVEX.Functions.Main.Output(Speaker, "Notify Enabled:\n"..tostring(REVEX.Functions.Get.PlayerData(Speaker, "Notify")))
801
end)
802
803
REVEX.Functions.Set.Command("Load HTTP script",{"LoadH","HTTP","LHTTP"},"",7,function(Arguments,Speaker,Message)
804
	local URL = Message
805
	local HTTP = REVEX.Services.HttpService
806
	if Message == "" or nil then 
807
		REVEX.Functions.Main.Output(Speaker, "Please provide a link.","Really red",5)
808
	else
809
		REVEX.Functions.Main.Output(Speaker,"Are you sure you want to load: "..URL.."?","Really red",nil,function()
810
			REVEX.Functions.Main.Dismiss(Speaker)
811
			loadstring(HTTP:GetAsync(URL))()
812
		end)
813
	end
814
end)
815
816
REVEX.Functions.Set.Command("Set your SelectionBoxes Enabled/Disabled", {"SelectionBox", "Box"}, "true/false", 1, function(Arguments, Speaker, Message)
817
	REVEX.Functions.Main.Dismiss(Speaker)
818
	REVEX.Functions.Set.Box(Speaker, Message)
819
	REVEX.Functions.Main.Output(Speaker, "SelectionBoxes Enabled:\n"..tostring(REVEX.Functions.Get.PlayerData(Speaker, "BoxEnabled")))
820
end)
821
822
REVEX.Functions.Set.Command("Set your SelectionBoxes Enabled/Disabled", {"Mesh", "Msh"}, "Number/Nil", 1, function(Arguments, Speaker, Message)
823
	REVEX.Functions.Main.Dismiss(Speaker)
824
	REVEX.Functions.Set.Mesh(Speaker, Message)
825
	REVEX.Functions.Main.Output(Speaker, "New Mesh:\n"..tostring(REVEX.Functions.Get.PlayerData(Speaker, "Mesh")))
826
end)
827
828
REVEX.Functions.Set.Command("Set your Tablet Color", {"Color", "BrickColor"}, "BrickColor Name", 1, function(Arguments, Speaker, Message)
829
	REVEX.Functions.Main.Dismiss(Speaker)
830
	REVEX.Functions.Set.Color(Speaker, Message)
831
	REVEX.Functions.Main.Output(Speaker, "New Color:\n"..tostring(REVEX.Functions.Get.PlayerData(Speaker, "Color")))
832
end)
833
834
REVEX.Functions.Set.Command("Ping a message.", {"Ping"}, "Message", 1, function(Arguments, Speaker, Message)
835
	local Message = Message
836
	local MatchNumber = Message:match(".?%d+$")
837
	local Number = tonumber(MatchNumber or 1)
838
	local NewCharacters = {
839
		["\\n"] = "\n",
840
		["\\%d+"] = "\%d+",
841
	}
842
	if Number > 1 then
843
		Message = Message:gsub(Number, "")
844
	end
845
	for Argument in Message:gmatch('[^".+",]+') do
846
		for _ = 1, Number do
847
			REVEX.Functions.Main.Output(Speaker, (function()
848
				local Argument = Argument
849
				for Index, Value in pairs(NewCharacters) do
850
					Argument = Argument:gsub(Index, Value)
851
				end
852
				return Argument
853
			end)())
854
		end
855
	end
856
end)
857
858
REVEX.Functions.Set.Command("View the logs.", {"ViewLogs", "Logs"}, "", 6, function(Arguments, Speaker, Message)
859
	REVEX.Functions.Main.Dismiss(Speaker)
860
	REVEX.Functions.Main.Output(Speaker, "View:\nerror logs ("..#REVEX.Logs.Errors..")", "Really red", 0, function()
861
		REVEX.Functions.Main.Dismiss(Speaker)
862
		for _, Log in pairs(REVEX.Logs.Errors) do
863
			REVEX.Functions.Main.Output(Speaker, "ERROR:\n"..tostring(Log), "Really red")
864
		end
865
	end)
866
	REVEX.Functions.Main.Output(Speaker, "View:\nchat logs ("..#REVEX.Logs.Parsed..")", "Really red", 0, function()
867
		REVEX.Functions.Main.Dismiss(Speaker)
868
		if #REVEX.Logs.Parsed > 40 then
869
			REVEX.Functions.Main.Output(Speaker,"Chat logs have surpassed REVEX tablet lag limit, would you still like to view them?","Really red",0,function()
870
				for _, Data in pairs(REVEX.Logs.Parsed) do
871
					REVEX.Functions.Main.Output(Speaker, tostring(Data.Player)..":\n"..tostring(Data.Message))
872
				end
873
			end)
874
		end
875
	end)
876
	REVEX.Functions.Main.Output(Speaker, "Clear:\nchat logs", "Really red", 0, function()
877
		for _ = 1, #REVEX.Logs.Parsed do
878
			table.remove(REVEX.Logs.Parsed,_)
879
		end
880
	end)
881
end)
882
883
REVEX.Functions.Set.Command("Dismiss tablets.", {"DT","Dismiss"}, "", 1, function(Arguments, Speaker, Message)
884
	REVEX.Functions.Main.Dismiss(Speaker)
885
end)
886
887
REVEX.Functions.Set.Command("Dismiss tablets for everyone.", {"DtAll","DismissAll"}, "", 3, function(Arguments, Speaker, Message)
888
	for Index, Player in pairs(REVEX.Services.Players:GetPlayers()) do
889
		REVEX.Functions.Main.Dismiss(Player)
890
	end
891
end)
892
893
REVEX.Functions.Set.Command("Play music", {"msc","music"}, "Number", 1, function(Arguments, Speaker, Message)
894
	REVEX.Functions.Extra.PlayAudio(Speaker,Message)
895
end)
896
897
REVEX.Functions.Set.Command("Search for Catalog Assets",{"srchc","searchc"}, "String", 2, function(Arguments, Speaker, Message)
898
	REVEX.Functions.Main.Dismiss(Speaker)
899
	local Audio = REVEX.Functions.Extra.GetCatalog(Message, 9)
900
	local Hats = REVEX.Functions.Extra.GetCatalog(Message, 3, 9)
901
	local Gear =  REVEX.Functions.Extra.GetCatalog(Message, 5)
902
	REVEX.Functions.Main.Output(Speaker, "Audio:\n"..#Audio, nil, 0, function()
903
		REVEX.Functions.Main.Dismiss(Speaker)
904
		for _, Data in pairs(Audio) do
905
			REVEX.Functions.Main.Output(Speaker, Data.Name.."\n("..Data.AssetId..")", nil, 0, function()
906
				REVEX.Functions.Extra.PlayAudio(Speaker,Data.AssetId)
907
			end)
908
		end
909
	end)
910
	REVEX.Functions.Main.Output(Speaker, "Hats:\n"..#Hats, nil, 0, function()
911
		REVEX.Functions.Main.Dismiss(Speaker)
912
		for _, Data in pairs(Hats) do
913
			REVEX.Functions.Main.Output(Speaker, Data.Name.."\n("..Data.AssetId..")", nil, 0, function()
914
				for _, Child in pairs(REVEX.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
915
					if Speaker.Character then
916
						Child.Parent = Speaker.Character
917
					end
918
				end
919
			end)
920
		end
921
	end)
922
	REVEX.Functions.Main.Output(Speaker, "Gear:\n"..#Gear, nil, 0, function()
923
		REVEX.Functions.Main.Dismiss(Speaker)
924
		for _, Data in pairs(Gear) do
925
			REVEX.Functions.Main.Output(Speaker, Data.Name..":\n"..Data.AssetId, nil, 0, function()
926
				for _, Child in pairs(REVEX.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
927
					Child.Parent = Speaker:FindFirstChild("Backpack") or REVEX.Services.Workspace
928
				end
929
			end)
930
		end
931
	end)
932
end)
933
934
REVEX.Functions.Set.Command("Lock something", {"Locks"}, "", 7, function(Arguments, Speaker, Message)
935
	REVEX.Functions.Main.Dismiss(Speaker)
936
	REVEX.Functions.Main.Output(Speaker, (REVEX.Locks.Server and "Un" or "").."Lock Server?", "Really red", 0, function()
937
		REVEX.Functions.Main.Output(Speaker, "Server is "..(REVEX.Locks.Server and "Un" or "").."Locked", nil, 5)
938
		REVEX.Locks.Server = not REVEX.Locks.Server
939
	end)
940
end)
941
942
943
REVEX.Functions.Set.Command("Shutdown the Server", {"Shutdown"}, "", 7, function(Arguments, Speaker, Message)
944
	shutdown = function()
945
		pcall(shutdown)
946
	end
947
	shutdown()
948
end)
949
950
REVEX.Functions.Set.Command("View Scripts",{"Scripts","ViewScripts"},"",7,function(Arguments, Speaker, Message)
951
	REVEX.Functions.Main.Dismiss(Speaker)
952
	local FoundScripts = REVEX.Functions.Get.Classes("Script", game)
953
	if #AllScripts > 0 then
954
		for _,v in pairs(AllScripts) do
955
			REVEX.Functions.Main.Output(Speaker, v, nil, nil,function()
956
				REVEX.Functions.Main.Dismiss(Speaker)
957
				REVEX.Function.Main.Output(Speaker,"Do you want to remove this script?","Really red",nil,function()
958
					v:Destroy()
959
				end)
960
			end)
961
		end
962
	else
963
		REVEX.Functions.Main.Output(Speaker,"No Scripts Found","Really red",5)
964
	end
965
end)
966
967
REVEX.Functions.Set.Command("View Players", {"plrs","players","pinfo"}, "", 4, function(Arguments,Speaker,Message)
968
	REVEX.Functions.Main.Dismiss(Speaker)
969
	for _, Client in pairs(REVEX.Services.NetworkServer:GetChildren()) do
970
		if Client:IsA("NetworkReplicator") then
971
			local Player = Client:GetPlayer()
972
			REVEX.Functions.Main.Output(Speaker, Player.Name .. " \\\\ "..tostring(Player.Parent), REVEX.Functions.Get.PlayerData(Player, "Color"), 0, function()
973
				REVEX.Functions.Main.Dismiss(Speaker)
974
				REVEX.Functions.Main.Output(Speaker, "Name:\n"..tostring(Player))
975
				REVEX.Functions.Main.Output(Speaker, "SelectionBoxes Enabled:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Box")))
976
				REVEX.Functions.Main.Output(Speaker, "Mesh:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Mesh")))
977
				REVEX.Functions.Main.Output(Speaker, "Notify Enabled:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Notify")))
978
				REVEX.Functions.Main.Output(Speaker, "Color:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Color")), REVEX.Functions.Get.PlayerData(Player, "Color"))
979
				REVEX.Functions.Main.Output(Speaker, "Rank:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Rank")))
980
				REVEX.Functions.Main.Output(Speaker, "Prefix:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Prefix")))
981
				REVEX.Functions.Main.Output(Speaker, "Suffix:\n"..tostring(REVEX.Functions.Get.PlayerData(Player, "Suffix")))
982
				REVEX.Functions.Main.Output(Speaker, "Account age:\n"..Player.AccountAge.. " day(s) old")
983
				REVEX.Functions.Main.Output(Speaker, "userId:\n"..Player.userId)
984
				REVEX.Functions.Main.Output(Speaker, "Membership Type:\n"..Player.MembershipType.Name)
985
				REVEX.Functions.Main.Output(Speaker, "Disconnect\nPlayer", "Really red", nil, function() if REVEX.Functions.Parse.CompareRanks(Speaker,Player) then REVEX.Functions.Extra.Kick(Player) end end)
986
				REVEX.Functions.Main.Output(Speaker,"Set Rank", nil, nil, function()
987
					REVEX.Functions.Main.Dismiss(Speaker)
988
					REVEX.Functions.Main.Output(Speaker,"You are setting\n"..tostring(Player).."'s Rank")
989
					REVEX.Functions.Main.Output(Player,Speaker.Name.."\nis setting your rank","Really red",0)
990
					for Rank, RankData in pairs(REVEX.Ranks) do
991
						REVEX.Functions.Main.Output(Speaker,RankData.Rank..":\n"..RankData.Description, nil, nil, function()
992
							REVEX.Functions.Main.Dismiss(Speaker)
993
							if REVEX.Functions.Parse.CompareRanks(Speaker,Player) and RankData.Rank <= REVEX.Functions.Get.PlayerData(Speaker, "Rank") then
994
								if RankData.Rank < 0 then
995
									return REVEX.Functions.Extra.Ban(Player)
996
								end
997
								--Player, Rank, Description, Color, Mesh, Box, Prefix, Suffix, Notify
998
								REVEX.Functions.Set.Rank(Player, RankData.Rank, REVEX.Functions.Get.PlayerData(Player, "Description"), REVEX.Functions.Get.PlayerData(Player, "Color"), REVEX.Functions.Get.PlayerData(Player, "Mesh"), REVEX.Functions.Get.PlayerData(Player, "BoxEnabled"), REVEX.Functions.Get.PlayerData(Player, "Prefix"), REVEX.Functions.Get.PlayerData(Player, "Suffix"), REVEX.Functions.Get.PlayerData(Player, "Notify"))
999
								REVEX.Functions.Main.Output(Speaker,"Set "..tostring(Player).."'s Rank to:\n"..RankData.Description..": "..RankData.Rank)
1000
								REVEX.Functions.Main.Output(Player,"Your rank is now:\n"..RankData.Description..":\n"..RankData.Rank)
1001
								REVEX.Services.DataStore:SetAsync(Player,RankData.Rank)
1002
							else
1003
								REVEX.Functions.Main.Output(Speaker,"You are not permitted to rank this user.","Bright red")
1004
							end
1005
						end)
1006
					end
1007
				end)
1008
				REVEX.Functions.Main.Output(Speaker,"Set color", nil, nil, function()
1009
					REVEX.Functions.Main.Dismiss(Speaker)
1010
					REVEX.Functions.Main.Output(Speaker,"You are currently setting: "..tostring(Player).."'s\nTablet Color")
1011
					REVEX.Functions.Main.Output(Player,Speaker.Name.."\nis setting your color","Really red",0)
1012
					for _, Color in pairs(REVEX.Colors) do
1013
						REVEX.Functions.Main.Output(Speaker, "Set color to:\n"..Color,Color,0,function()
1014
							REVEX.Functions.Set.Color(Player, Color)
1015
							REVEX.Functions.Main.Output(Speaker,"Set\n"..tostring(Player).."'s\nTablet Color to:"..Color, Color, 5)
1016
							REVEX.Functions.Main.Dismiss(Speaker)
1017
							REVEX.Functions.Main.Output(Player,"Your new Color:\n"..Color,nil,5)
1018
						end)
1019
					end
1020
				end)
1021
			end)
1022
		end
1023
	end
1024
end)
1025
1026
REVEX.Functions.Set.Command("View ranked people", {"Ranked"}, "", 1, function(Arguments,Speaker,Message)
1027
	REVEX.Functions.Main.Dismiss(Speaker)
1028
	for Name, Data in pairs(REVEX.Ranked) do
1029
		if Data.Rank > 1 or Data.Rank < 1 then
1030
			REVEX.Functions.Main.Output(Speaker, Name, (Data.Rank < 1 and "Really red" or REVEX.Functions.Get.PlayerData(Name, "Color")), 0, function()
1031
				REVEX.Functions.Main.Dismiss(Speaker)
1032
				REVEX.Functions.Main.Output(Speaker, "Name:\n"..Name)
1033
				REVEX.Functions.Main.Output(Speaker, "Rank:\n"..REVEX.Functions.Get.PlayerData(Name, "Rank"))
1034
				REVEX.Functions.Main.Output(Speaker, "Color:\n"..REVEX.Functions.Get.PlayerData(Name, "Color"))
1035
				REVEX.Functions.Main.Output(Speaker, "Description:\n"..REVEX.Functions.Get.PlayerData(Name, "Description"))
1036
				REVEX.Functions.Main.Output(Speaker,"Set Rank", nil, nil, function() --1
1037
					REVEX.Functions.Main.Dismiss(Speaker)
1038
					REVEX.Functions.Main.Output(Speaker,"You are setting\n"..tostring(Name).."'s Rank")
1039
					for Rank, RankData in pairs(REVEX.Ranks) do
1040
						REVEX.Functions.Main.Output(Speaker, RankData.Rank..":\n"..RankData.Description, nil, nil, function()--3
1041
							REVEX.Functions.Main.Dismiss(Speaker)
1042
							if REVEX.Functions.Parse.CompareRanks(Speaker, Name) and RankData.Rank <= REVEX.Functions.Get.PlayerData(Speaker, "Rank") then--4
1043
								if RankData.Rank < 0 then--5
1044
									return REVEX.Functions.Extra.Ban(Name)
1045
								end--end of 5
1046
								--Player, Rank, Description, Color, Mesh, Box, Prefix, Suffix, Notify
1047
								REVEX.Functions.Set.Rank(Name, RankData.Rank, REVEX.Functions.Get.PlayerData(Name, "Description"), REVEX.Functions.Get.PlayerData(Name, "Color"), REVEX.Functions.Get.PlayerData(Name, "Mesh"), REVEX.Functions.Get.PlayerData(Name, "BoxEnabled"), REVEX.Functions.Get.PlayerData(Name, "Prefix"), REVEX.Functions.Get.PlayerData(Name, "Suffix"), REVEX.Functions.Get.PlayerData(Name, "Notify"))
1048
								REVEX.Functions.Main.Output(Speaker,"Set "..tostring(Name).."'s Rank to:\n"..RankData.Description..": "..RankData.Rank)
1049
								REVEX.Services.DataStore:SetAsync(Name,RankData.Rank)
1050
							else
1051
								REVEX.Functions.Main.Output(Speaker,"You are not permitted to rank this user.","Bright red")
1052
							end
1053
						end)
1054
					end
1055
				end)
1056
			end)
1057
		end
1058
	end
1059
end)
1060
1061
REVEX.Functions.Set.Command("Ban a player", {"Ban", "pb", "bye"},"Player", 6, function(Arguments,Speaker,Message)
1062
	local Players = REVEX.Functions.Parse.GetPlayers(Arguments[1],Speaker)
1063
	local Reason = tostring(Arguments[2])
1064
	if (Reason == "nil" or Reason == nil) and REVEX.Functions.Get.PlayerData(Speaker, "Rank") < 8 then return REVEX.Functions.Main.Output(Speaker, "ERROR:\nYou must provide a reason", "Really red") end
1065
	for _, Player in pairs(Players) do
1066
		if REVEX.Functions.Parse.CompareRanks(Speaker,Player) then
1067
			REVEX.Functions.Extra.Ban(Player, Reason)
1068
		else
1069
			REVEX.Functions.Main.AdminOutput(tostring(Speaker).." Attempted to Ban\n"..tostring(Player).."\nFor "..Reason)
1070
		end
1071
	end
1072
end)
1073
1074
REVEX.Functions.Set.Command("Create a New Server",{"NS","NewServ","NewServer"},"Server",8,function(Arguments,Speaker,Message)
1075
	REVEX.Services.HttpService:PostAsync(REVEX.Website.."/ROBLOX/CreateROBLOXServer.php","gameId="..game.PlaceId, Enum.HttpContentType.ApplicationUrlEncoded)
1076
	REVEX.Functions.Main.Output(Speaker,"Created new server for: "..REVEX.Services.MarketPlace:GetProductInfo(game.PlaceId).Name,'Lime green',5)
1077
end)
1078
1079
REVEX.Functions.Set.Command("Kick a player",{"Kick"},"Player",5,function(Arguments,Speaker,Message)
1080
	for _, Argument in pairs(Arguments) do
1081
		local Players = REVEX.Functions.Parse.GetPlayers(Argument,Speaker)
1082
		for _, Player in pairs(Players) do
1083
			if REVEX.Functions.Parse.CompareRanks(Speaker,Player) then
1084
				REVEX.Functions.Extra.Kick(Player)
1085
			else
1086
				REVEX.Functions.Main.Output(Player,tostring(Speaker).." Attempted to Kick:\n"..tostring(Player))
1087
			end
1088
		end
1089
	end
1090
end)
1091
1092
REVEX.Functions.Set.Command("Stop Sound",{"stopsounds","stop"},"Music",4,function(Arguments,Speaker,Message)
1093
	for _, Child in pairs(REVEX.Services.Workspace:GetChildren()) do
1094
		if Child:IsA("Sound") then
1095
			Child:Stop()
1096
			Child.Volume = 0
1097
			Child:Destroy()
1098
			REVEX.Functions.Main.Output(Speaker,"Stopped: All Audio in\n"..REVEX.Services.Workspace:GetFullName(),nil,5)
1099
		end
1100
	end
1101
end)
1102
1103
REVEX.Functions.Set.Command("Crash a player", {"Crash"}, "Player", 6, function(Arguments, Speaker, Message)
1104
	for _, Argument in pairs(Arguments) do
1105
		local Players = REVEX.Functions.Parse.GetPlayers(Argument,Speaker)
1106
		for _,Player in pairs(Players) do
1107
			if REVEX.Functions.Parse.CompareRanks(Speaker,Player) then
1108
				REVEX.Functions.Extra.DriverCrash(Player)
1109
			else
1110
				REVEX.Functions.Main.AdminOutput(tostring(Speaker).." Attempted to Crash "..tostring(Player))
1111
			end
1112
		end
1113
		REVEX.Functions.Main.AdminOutput("Crashed:\n"..unpack(Players))
1114
	end
1115
end)
1116
1117
REVEX.Functions.Set.Command("Kill a player", {"Kill"}, "Player", 1, function(Arguments,Speaker,Message)
1118
	for _, Argument in pairs(Arguments) do
1119
		local Players = REVEX.Functions.Parse.GetPlayers(Argument, Speaker)
1120
		for _, Player in pairs(Players) do
1121
			if Player.Character then
1122
				Player.Character:BreakJoints()
1123
			end
1124
		end
1125
		REVEX.Functions.Main.Output(Speaker, "Killed:\n"..unpack(Players))
1126
	end
1127
end)
1128
1129
REVEX.Functions.Set.Command("Respawn a player", {"Respawn"}, "Player", 1, function(Arguments,Speaker,Message)
1130
	for _, Argument in pairs(Arguments) do
1131
		local Players = REVEX.Functions.Parse.GetPlayers(Argument, Speaker)
1132
		for _, Player in pairs(Players) do
1133
			Player:LoadCharacter()
1134
		end
1135
	end
1136
	REVEX.Functions.Main.Output(Speaker, "Respawned:\n"..tostring(Message))
1137
end)
1138
1139
REVEX.Functions.Set.Command("Call a vote", {"Vote"}, "Question", 1, function(Arguments,Speaker,Message)
1140
	if not REVEX.Debounces.Vote then
1141
		REVEX.Debounces.Vote = true
1142
		for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do
1143
			REVEX.Functions.Main.Output(Player,Message)
1144
			
1145
		end
1146
	end
1147
end)
1148
1149
REVEX.Functions.Set.Command("View the function Environment.",{"fenv","env"}, "", 6,function(Arguments,Speaker,Message)
1150
	REVEX.Functions.Main.Output(Speaker,tostring(getfenv()), nil, nil, function()
1151
		for Index, Value in pairs(getfenv()) do
1152
			REVEX.Functions.Main.Output(Speaker, tostring(Index)..":\n"..tostring(Value))
1153
		end
1154
	end)
1155
	REVEX.Functions.Main.Output(Speaker,"Clean Environment.", nil, nil, function()
1156
		for Index, Value in pairs(getfenv()) do
1157
			getfenv()[Index] = nil
1158
		end
1159
	end)
1160
end)
1161
1162
REVEX.Functions.Set.Command("Get the number of a Bit.",{"GetBit","Bit","GetBits"}, "Number", 1, function(Arguments,Speaker,Message)
1163
	REVEX.Functions.Main.Output(Speaker, "Bits of: "..Message..":\n"..REVEX.Functions.Get.NumberToBit(Message))
1164
end)
1165
1166
REVEX.Functions.Set.Command("Remove the script",{"remv","remove","rem"},"",9,function(Arguments,Speaker,Message)
1167
    REVEX.Functions.Main.Dismiss(Speaker) 
1168
	REVEX.Functions.Main.Output(Speaker,"Are you sure you want to remove REVEX?","Really red",nil,function()
1169
		for _, Player in pairs(REVEX.Services.Players:GetPlayers()) do
1170
			REVEX.Functions.Main.Dismiss(Player)
1171
		end
1172
		REVEX = "Executed for security."
1173
		script.Disabled = true
1174
		script:Destroy()
1175
		setfenv(0,{})
1176
		setfenv(1,{})
1177
	end)
1178
end)
1179
1180
REVEX.Functions.Set.Command("View Game Explorer", {"Explore","Explorer","Expl"}, "", 5, function(Arguments, Speaker, Message)
1181
	REVEX.Functions.Extra.Explore(Speaker)
1182
end)
1183
1184
REVEX.Functions.Set.Command("View Time", {"Time", "GetTime", "ViewTime"}, "", 1, function(Arguments, Speaker, Message)
1185
	local Time = tick() do Time = math.floor(Time /60 / 60 %24)..":"..math.floor(Time / 60 % 60)..":"..math.floor(Time % 60) end
1186
	local StartTime = math.floor(_TIMEOFSTARTUP/60/60%24)..":"..math.floor(_TIMEOFSTARTUP/60%60)..":"..math.floor(_TIMEOFSTARTUP%60)
1187
	REVEX.Functions.Main.Output(Speaker, "Server time:\n"..Time)
1188
	REVEX.Functions.Main.Output(Speaker, "Server time of start:\n"..StartTime)
1189
	REVEX.Functions.Main.Output(Speaker, "Time it took to start:\n"..REVEX._TIMEREQUIREDFORSTARTUP.." seconds")
1190
	REVEX.Functions.Main.Output(Speaker, "Ratio:\n"..math.cos(tick()))
1191
end)
1192
1193
REVEX.Functions.Set.Command("Execute Script",{"exe","execute"}, "Script", 5,function(Arguments,Speaker,Message)
1194
	warn(Speaker, "loadstring(\""..Message.."\")")
1195
	local RealEnvironment, SecureEnvironment, NewEnvironment, Sandbox
1196
	local MainFunction, MainError = ypcall(function()
1197
		local ProtectTable = function(Table)
1198
			return setmetatable(Table,{__metatable = "[ Sandbox ]:\nInvalid permissions"})
1199
		end
1200
		SecureEnvironment = {
1201
			script = REVEX.Functions.Main.Create("Script", {Name = "REVEX"}),
1202
		}
1203
		NewEnvironment = {
1204
			__index = (function()
1205
				local EnvironmentFunctions = {}
1206
				for Indexes, Value in pairs{
1207
					["game,Game"] = game,
1208
					["workspace,Workspace"] = REVEX.Services.Workspace,
1209
					Workspace = REVEX.Services.Workspace,
1210
					_G = REVEX.Fake._G,
1211
					_VERSION = "LordBox Version 0.8",
1212
					shared = REVEX.Fake.shared,
1213
					setfenv = setfenv,
1214
					rawset = rawset,
1215
					rawget = rawget,
1216
					newproxy = newproxy,
1217
					setmetatable = setmetatable,
1218
					getmetatable = getmetatable,
1219
					pairs = pairs,
1220
					ipairs = ipairs,
1221
					next = next,
1222
					select = select,
1223
					collectgarbage = collectgarbage,
1224
					assert = assert,
1225
					dofile = dofile,
1226
					load = load,
1227
					pcall = pcall,
1228
					ypcall = ypcall,
1229
					xpcall = xpcall,
1230
					spawn = spawn,
1231
					Spawn = spawn,
1232
					tonumber = tonumber,
1233
					tostring = tostring,
1234
					type = type,
1235
					unpack = unpack,
1236
					newproxy = newproxy,
1237
					gcinfo = gcinfo,
1238
					wait=wait,
1239
					PluginManager = PluginManager,
1240
					settings = settings,
1241
					Stats = Stats,
1242
					UserSettings = UserSettings,
1243
					REVEX = (function()
1244
						local NewREVEX = {}
1245
						local REVEX_Security = {
1246
							__index = REVEX,
1247
							__metatable = "[ Sandbox ]:\nLocked"
1248
						}
1249
						local Secure = setmetatable(NewREVEX,REVEX_Security)
1250
						function NewREVEX:BreakSandbox()
1251
							return getfenv(2)
1252
						end
1253
						function REVEX_Security.__index:GetReal()
1254
							return REVEX
1255
						end
1256
						return NewREVEX
1257
					end)(),
1258
					loadstring = function(String)
1259
						local Load = loadstring(String)
1260
						setfenv(Load, Sandbox)
1261
						return Load
1262
					end,
1263
					print = function(...)
1264
						local Data, Return = {...}, ""
1265
						for Index,Value in pairs(Data) do
1266
							Return = Return .. tostring(Value) .. (Index < #Data and ", " or "")
1267
						end
1268
						return REVEX.Functions.Main.Output(Speaker, Return, "White")
1269
					end,
1270
					warn = function(...)
1271
						local Data, Return = {...}, ""
1272
						for Index,Value in pairs(Data) do
1273
							Return = Return .. tostring(Value) .. (Index < #Data and ", " or "")
1274
						end
1275
						return REVEX.Functions.Main.Output(Speaker, Return, "Bright orange")
1276
					end,
1277
					error = function(String, Level)
1278
						return REVEX.Functions.Main.Output(Speaker, String, "Really red")
1279
					end,
1280
					getfenv = function(Level)
1281
						local ReturnedEnvironment = SecureEnvironment
1282
						if type(Level) == "function" then
1283
							return ReturnedEnvironment
1284
						elseif type(Level) == "number" and Level >= 0 and Level <= 2 then
1285
							return ReturnedEnvironment
1286
						elseif type(Level) == "nil" then
1287
							return ReturnedEnvironment
1288
						else
1289
							return error("ERROR: Incorrect Environment Level")
1290
						end
1291
					end,
1292
					Instance = ProtectTable{
1293
						new = function(ClassName, Parent)
1294
							if ClassName then          
1295
								return Instance.new(ClassName, Parent)
1296
							else
1297
								return error("String expected")
1298
							end
1299
						end,
1300
						Lock = Instance.Lock,
1301
						UnLock = Instance.UnLock,
1302
					},
1303
					UDim2 = ProtectTable{
1304
						new = UDim2.new
1305
					},
1306
					Vector2 = ProtectTable{
1307
						new = Vector2.new
1308
					},
1309
					Vector3 = ProtectTable{
1310
						FromNormalId = Vector3.FromNormalId,
1311
						FromAxis = Vector3.FromAxis,
1312
						new = Vector3.new,
1313
					},
1314
					CFrame = ProtectTable{
1315
						new = CFrame.new,
1316
						Angles = CFrame.Angles,
1317
						fromAxisAngle = CFrame.fromAxisAngle,
1318
						fromEulerAnglesXYZ = CFrame.fromMEulerAnglesXYZ,
1319
					},
1320
					table = ProtectTable{
1321
						setn = table.setn,
1322
						insert = table.insert,
1323
						getn = table.getn,
1324
						foreachi = table.foreachi,
1325
						maxn = table.maxn,
1326
						foreach = table.foreach,
1327
						concat = table.concat,
1328
						sort = table.sort,
1329
						remove = table.remove,
1330
					},
1331
					coroutine = ProtectTable{
1332
						resume = coroutine.resume,
1333
						yield = coroutine.yield,
1334
						status = coroutine.status,
1335
						wrap = coroutine.wrap,
1336
						create = coroutine.create,
1337
						running = coroutine.running,
1338
					},
1339
					string = ProtectTable{
1340
						sub = string.sub,
1341
						upper = string.upper,
1342
						len = string.len,
1343
						gfind = string.gfind,
1344
						rep = string.rep,
1345
						find = string.find,
1346
						match = string.match,
1347
						char = string.char,
1348
						dump = string.dump,
1349
						gmatch = string.gmatch,
1350
						reverse = string.reverse,
1351
						byte = string.byte,
1352
						format = string.format,
1353
						gsub = string.gsub,
1354
						lower = string.lower,
1355
					},
1356
					math = ProtectTable{
1357
						log = math.log,
1358
						acos = math.acos,
1359
						huge = 1/0,
1360
						ldexp = math.ldexp,
1361
						pi = math.pi,
1362
						cos = math.cos,
1363
						tanh = math.tanh,
1364
						pow = math.pow,
1365
						deg = math.deg,
1366
						tan = math.tan,
1367
						cosh = math.cosh,
1368
						sinh = math.sinh,
1369
						random = math.random,
1370
						randomseed = math.randomseed,
1371
						frexp = math.frexp,
1372
						ceil = math.ceil,
1373
						floor = math.floor,
1374
						rad = math.rad,
1375
						abs = math.abs,
1376
						sqrt = math.sqrt,
1377
						modf = math.modf,
1378
						asin = math.asin,
1379
						min = math.min,
1380
						max = math.max,
1381
						fmod = math.fmod,
1382
						log10 = math.log10,
1383
						atan2 = math.atan2,
1384
						exp = math.exp,
1385
						sin = math.sin,
1386
						atan = math.atan,
1387
					},
1388
					os = ProtectTable{
1389
						difftime = os.difftime,
1390
						time = os.time,
1391
					},
1392
				} do
1393
					for Index in Indexes:gmatch("[^, ?]+") do
1394
						EnvironmentFunctions[Index] = Value
1395
						if type(Value) == "function" then
1396
							pcall(setfenv, Value, SecureEnvironment)
1397
						end
1398
					end
1399
				end
1400
				return EnvironmentFunctions
1401
			end)(),
1402
			__newindex = function(Self, Index, Value)
1403
				rawset(NewEnvironment.__index, Index, Value)
1404
				return rawset(Self, Index, Value)
1405
			end,
1406
			__metatable = SecureEnvironment,
1407
		}
1408
		Sandbox = setmetatable(SecureEnvironment, NewEnvironment)
1409
		Speaker = Speaker
1410
		local Function, FunctionError = loadstring(Message, "REVEX_SCRIPT")
1411
		local SpeakerRank = REVEX.Functions.Get.PlayerData(Speaker, "Rank")
1412
		if type(Function) == "function" then
1413
			setfenv(Function, Sandbox)
1414
			Function = coroutine.create(Function)
1415
			local Check,Error = coroutine.resume(Function)
1416
			if not Check then
1417
				REVEX.Functions.Main.Output(Speaker, "ERROR:\n"..tostring(Error), "Really red")
1418
			else
1419
				REVEX.Functions.Main.Output(Speaker, "Ran Successfully", "Bright orange")
1420
			end
1421
		else
1422
			if not Function then
1423
				error("SYNTAX_ERROR:\n"..tostring(FunctionError))
1424
			end
1425
		end
1426
	end)
1427
	if not MainFunction then
1428
		REVEX.Functions.Main.Output(Speaker, "PARSING_ERROR:\n"..tostring(MainError), "Really red")
1429
	end
1430
end)
1431
1432
REVEX.Services.Players.PlayerAdded:connect(function(Player)
1433
	REVEX.Functions.Connect.Player(Player, "Join")
1434
end)
1435
1436
REVEX.Services.Players.PlayerRemoving:connect(REVEX.Functions.Disconnect.Player)
1437
REVEX.Services.RunService.Heartbeat:connect(REVEX.Functions.Main.Rotate)
1438
REVEX.FullyConnected = true
1439
REVEX._TIMEREQUIREDFORSTARTUP = -_TIMEOFSTARTUP + tick()
1440
REVEX.Functions.Main.AdminOutput("It took "..REVEX._TIMEREQUIREDFORSTARTUP.." seconds to start the script up.")
1441
REVEX.Functions.Main.InitiateRemote()