View difference between Paste ID: DHnqiJ6E and 6950GjsB
SHOW: | | - or go back to the newest paste.
1
----------------------------------------------------------------------------------------
2
--					    	Epix Inc. Server Suite	 								  --
3
----------------------------------------------------------------------------------------
4
--		 	Epix Incorporated. Not Everything is so Black and White.		   		  --
5
----------------------------------------------------------------------------------------
6
7
local set=require(script.Settings) --This is where to grab settings from.
8
9
--Settings can be found in the Settings ModuleScript parented to this! 
10
--http://prntscr.com/5n9fv5
11
																																		--[[
12
--__________________________________________________________________________________--
13
--__________________________________________________________________________________--																					
14
--__________________________________________________________________________________--
15
--__________________________________________________________________________________--
16
--																					--
17
18
				___________      .__         .___                   
19
				\_   _____/_____ |__|__  ___ |   | ____   ____      
20
				 |    __)_\____ \|  \  \/  / |   |/    \_/ ___\     
21
				 |        \  |_> >  |>    <  |   |   |  \  \___     
22
				/_______  /   __/|__/__/\_ \ |___|___|  /\___  > /\ 
23
				        \/|__|            \/          \/     \/  \/
24
			  --------------------------------------------------------
25
			  Epix Incorporated. Not Everything is so Black and White.
26
			  --------------------------------------------------------
27
		
28
		
29
				  _  __    _ _           _                _        
30
				 | |/ /___| | |_ __ _ __| |_ _ _ ___ _ __| |_  ___ 
31
				 | ' </ _ \ |  _/ _` (_-<  _| '_/ _ \ '_ \ ' \/ -_)
32
				 |_|\_\___/_|\__\__,_/__/\__|_| \___/ .__/_||_\___|
33
				                                    |_|           
34
	 ______  ______  ______  __      ______  ______  ______  ______ __  ______    
35
	/\  ___\/\  ___\/\  ___\/\ \    /\  ___\/\  == \/\  __ \/\__  _/\ \/\  ___\   
36
	\ \___  \ \ \___\ \  __\\ \ \___\ \  __\\ \  __<\ \  __ \/_/\ \\ \ \ \___  \  
37
	 \/\_____\ \_____\ \_____\ \_____\ \_____\ \_\ \_\ \_\ \_\ \ \_\\ \_\/\_____\ 
38
	  \/_____/\/_____/\/_____/\/_____/\/_____/\/_/ /_/\/_/\/_/  \/_/ \/_/\/_____/ 
39
40
41
--__________________________________________________________________________________--
42
--__________________________________________________________________________________--																					--
43
--__________________________________________________________________________________--
44
--__________________________________________________________________________________--
45
--																					--				]]
46
47
--------------------------------------------------------------------------------------
48
--##################################################################################--
49
50
--##[ WARNING: Changing anything below could result errors and break the script! ]##--
51
52
--##################################################################################--
53
54
--#############[ DO NOT MODIFY UNLESS YOU KNOW WHAT YOU ARE DOING! ]################--
55
56
--#################[ I WILL NOT HELP YOU IF YOU BREAK SOMETHING! ]##################--
57
58
--##################################################################################--
59
--------------------------------------------------------------------------------------
60
61
--__________________________________________________________________________________--
62
--__________________________________________________________________________________--																					--
63
--__________________________________________________________________________________--
64
--__________________________________________________________________________________--
65
--																					--																			--
66
set.Debug=false --//DEBUG
67
68
--[ Check for Updates ]--
69
function MainScriptFunction()
70
	if not set.Debug then
71
		script.Parent=game:service('ServerScriptService')
72
	end
73
	local updateCode=script:FindFirstChild("UPDATE_CODE_")
74
	if (updateCode and _G[updateCode.Value]) or _G['Epix Inc. Server Suite Update'] then
75
		local updateTable=_G['Epix Inc. Server Suite Update']
76
		if updateCode then
77
			updateTable=_G[updateCode.Value]
78
		end
79
		local updated,failed=ypcall(function()
80
			print('AutoUpdate: Grabbing update data...')
81
			for i,v in pairs(updateTable) do set[i]=v updateTable[i]=nil end
82
			_G['Epix Inc. Server Suite Update']=nil
83
			if updateCode then
84
				_G[updateCode.Value]=nil
85
				updateCode:Destroy()
86
			end
87
		end)
88
		if failed then
89
			print(script.Name..': AutoUpdate: Update Failed.')
90
			print('Please contact Sceleratis as this may be a bug.')
91
			print('Error: '..failed)
92
			print('If this error persist please check your settings. If needed disable AutoUpdate until the issue is solved.')
93
		end
94
	end 
95
	local Plugins={}
96
	for i,v in pairs(script['Plugins']:children()) do
97
		table.insert(Plugins,v)
98
	end
99
	if set.Debug then
100
		print("~=! DEBUG MODE !=~")
101
		require(script.Parent:FindFirstChild("MainModule"))(set,Plugins) 
102
	else
103
		require(set.MainModuleID)(set,Plugins)
104
	end 
105
end
106
107
set.RunTheScript=function() 
108
	local yes,no=ypcall(MainScriptFunction) 
109
	if no then  
110
		local h=Instance.new('Hint',workspace) 
111
		h.Text=no print(no) 
112
	end 
113
end
114
local ok,no=ypcall(function() local k=game:GetService('InsertService'):LoadAsset(set.LoaderID) if k then k:Destroy() end end)
115
if set['AutoUpdate'] and ok then 
116
	local k,n=ypcall(function() 
117
		local news=game:GetService('InsertService'):LoadAsset(set.LoaderID):children()[1]
118
		local found=news.Version.Value 
119
		local current=script.Version.Value
120
		print('Current version: '..current..' | Found version: '..found) 
121
		if found>current then 
122
			print('Updating...')
123
			local updateCode = Instance.new("StringValue",news)
124
			updateCode.Name="UPDATE_CODE_"
125
			updateCode.Value=math.random()..math.random()
126
			_G[updateCode.Value]=set 
127
			news['Plugins']:Destroy() 
128
			script['Plugins']:clone().Parent=news 
129
			news.Parent=game:service('ServerScriptService') 
130
			script:Destroy() 
131
		else 
132
			news:Destroy() 
133
			set.RunTheScript() 
134
		end 
135
	end) 
136
	if not k or n then 
137
		print('AutoUpdate Broke: '..n..' | Skipping update') 
138
		set.RunTheScript() 
139
	end 
140
else 
141
	print("AutoUpdate is Disabled") 
142
	set.RunTheScript() 
143
end 
144
145
146
return {
147
			
148
			--------------
149
			-- SETTINGS --
150
		    --------------
151
			
152
	------------------------------
153
	--  true=on  --  false=off  --
154
	------------------------------
155
	
156
	--------------------------------------------------------------------------------------------------------------
157
	-- DO NOT MOVE THIS MODULESCRIPT																			--
158
	-- Make sure you READ BEFORE YOU EDIT! Please do not ask me questions about settings before reading.        --
159
	-- Make sure there is a ; after each setting, as shown below!												--
160
	-- Extra Information can be found in the Loader script.														--
161
	-- Don't change something without reading the comment next to it first, you could break something.			--
162
	-- If its in green, it means its a comment, don't edit it as it wont do anything.							--
163
	-- By default tools need to be in ServerStorage, not Lighting, change this by changing the Storage setting.	--
164
	--------------------------------------------------------------------------------------------------------------
165
	
166
	----------------------------------------------------------------------------------
167
	-- Please carefully read each setting's description BEFORE changing something	--
168
	-- as you could break something if you set something the wrong way.				--
169
	----------------------------------------------------------------------------------
170
	
171
	--------------------------
172
	--  Important Settings  --
173
	--------------------------
174
	
175
	['LoaderID'] = 145629584; -- ID to use for updating this script (the MainModule loader). The Loader script MUST be in your models for Loader updating to work.
176
	
177
	['MainModuleID'] = 190572769; -- MainModule that gets loaded by the loader script. You can grab the MainModule script here: http://www.roblox.com/item.aspx?id=190572769
178
	
179
	['ChangedSettingsStick'] = true; --Do settings you change in-game save? (this includes bans, admins, etc etc)
180
	
181
	['SettingsToIgnore'] = {}; --Place settings to ignore here
182
	
183
	['DataStoreKey'] = "2341234j234hjJKh342K3JK$KJh3"; --Datastore key
184
	
185
	['Storage'] = game:service('ServerStorage'); --Set this to where you store things (such as tools) game:service('ServerStorage') is recommended as it does not replicate to clients. Use services, if you use things like game.Lighting it will break if Lighting is renamed.
186
	
187
	['CreatorDebugPowers']=true; --When true gives me place owner powers in your game. This is soley used for the purpose of debugging/fixing problems with the script. I have no interest of messing with your game :p
188
	
189
	--------------
190
	--  Trello  --
191
	--------------
192
	
193
	['Trello'] = false; --Pulls Bans/Admins from a Trello board every set number of seconds on every server of everygame this script is in that has Http enabled and uses the same BoardID
194
	
195
	['BoardID'] = '9HH6BEX2'; --Trello board ID, its in the URL of your board: https://trello.com/b/9HH6BEX2/epix-incorporated-synced-ban-list - The id for this board is 9HH6BEX2.
196
	
197
	['HttpWait'] = 30; --How often (in seconds) should the list(s) update? Recommended 10+ to avoid HttpService problems
198
		--[[
199
		NOTE: The board configured by default is our large constantly updated exploiter ban list. 
200
		If you wish to keep 900+ known exploiters out of your game the defaults are the way to go.
201
			
202
		You NEED to enable HttpEnabled in order for this to work! To enable it follow the below instructions:
203
		Run this following command in the command bar as shown in the screenshot: game:service('HttpService').HttpEnabled=true print('Enabled Http')
204
		Screen shot: http://prntscr.com/46uztz
205
		
206
		How to set up your own multi-game list for your games:
207
		
208
		Below instructions are for bans but can also be applied to admin lists,
209
		refer to "To use this for synced admin lists" under the instructions for admin lists info. 
210
		
211
		By default the Trello settings are set to use our ban list of exploiters, but you may 
212
		want to change it so that you can set up and control your own multi-game, autoupdating 
213
		list(s). So now I am going to tell you how to do that.
214
		
215
		1. Enable Http, refer to a few lines up to learn how to easily and quickly do that.
216
		2. Make a Trello account (or sign in with google)
217
			-Go to http://trello.com, click "Log in with Google" or "Sign up-It's Free" and do the account making stuff it tells you to
218
		3. After you sign up/log in you need to make a new board, click the + then click "New Board..." - http://prntscr.com/46v2fq
219
		4. Give your board a name and click the "Change..." next to "This board will be private" and make sure you make the board public! - http://prntscr.com/46v4bf
220
		5. Change one of the lists titles to "Ban List" In the screenshot I accidentally typed "cards" instead of "lists" - http://prntscr.com/46v5af
221
		6. Add people to the bans by clicking "Add a card..." and then typing their username as the title, username:userid, or if its a group Group: groupname:groupid - http://prntscr.com/46v74e
222
		7. Now you need to just set BoardID to your board's ID, refer to http://prntscr.com/46v74e for this, or refer to the comment next to the BoardID setting
223
		8. You are done, just configure the BoardID and enable Http in each of your games and your multigame banlist is done, confure your board however you want as long as you leave the "Ban List" list that contains name and keep the board public so the script can read it!
224
		Use our site for reference: https://trello.com/b/9HH6BEX2/epix-incorporated-synced-ban-list
225
		
226
		To use this for synced admin lists, simply repeat the above steps replacing Ban List with
227
		Admin List, Mod List, or Owner List, anyone added to these list will appear in
228
		the admin list with [Synced] next to their name, they will not be able to be unadmined.
229
		Admin lists do not yet support Group: NAME:ID however they do support Username:ID format.
230
		You can also add songs, mutes, and edit commands permissions via Trello!
231
		To add songs via Trello make a new list named "Music List" then just add songs in the format
232
		NAME:ID to have them show up in the music list. Adding mutes works the exact same way as bans, just name
233
		the list "Mute List" instead. To edit commands permissions make a new list named "Permissions" then simply
234
		add commands in the following format (WITH THEIR PREFIX!) COMMAND:LEVEL
235
		--]]
236
	
237
	---------------------
238
	--      Tables     --
239
	---------------------
240
	
241-
	['Owners'] = {}; -- Are able to set Admins who can ban/etc... using :pa name, format is USERNAME or USERNAME=USERID
241+
	['Owners'] = {KeroroGunso2016}; -- Are able to set Admins who can ban/etc... using :pa name, format is USERNAME or USERNAME=USERID
242
	
243
	['Admins'] = {}; -- Sets Admins who can use ban/kick/admin or shutdown, format is USERNAME or USERNAME=USERID
244
	
245
	['Mods'] = {}; -- Sets Moderators, basically admins who can't use ban/kick/admin/shutdown and other commands, format is USERNAME or USERNAME=USERID
246
	
247
	['BanList'] = {}; -- Add people to ban here. I personally recommend tomtim365 and his main alt, KohltastropheRBLX. He is the reason the anti new account settings were removed and caused many other problems. Format to use UserId is "Name=UserId" EX: "John32=192845", this bans any player named John32 or has an id of 192845 (This way they can't bypass the ban by changing their username) use $group=GROUPID to ban groups.
248
	
249
	['MuteList'] = {}; -- Add the names of people to mute (makes it so they cant talk), same format as bans.
250
	
251
	------------------------------
252
	--  Prefix/Split/Key Binds  --
253
	------------------------------
254
	
255
	['Prefix'] = ":"; -- This comes before each admin command (:kill scel)
256
	
257
	['AnyPrefix'] = "!"; -- This comes before each player command (commands that can be run by anyone, !rejoin, !ping, etc)
258
	
259
	['SpecialPrefix'] = ""; -- Prefix to use with special functions (!admin,!nonadmins,!all,!others,!random) By default this is now set to nothing to avoid confusion.
260
	
261
	['SplitKey'] = " "; -- This is what seperates command arguments eg: player raiders in :team player raiders
262
	
263
	['BatchKey'] = "|"; --This seperates arguments of the batch command (":batch kill bob/fire me Bright blue/fling scel")
264
	
265
	['ConsoleKey'] = "'"; --Key that opens the console, default is '
266
	
267
	['CustomKeyBinds'] = true; -- Allow players and admins set personal key binds?
268
	
269
	----------------------
270
	--  Basic Settings  --
271
	----------------------
272
	
273
	['Console'] = true; --Determines if the script's console can be used or not
274
	
275
	['AutoUpdate'] = true; -- Automatically get the newest version of the loader? You need to have the model in your inventory on your profile in order for autoupdate to work.
276
	
277
	['FunCommands'] = true; -- Set to false if you don't want any fun commands (For Strict Places)
278
	
279
	['HelpSystem'] = true; -- Enable the Help System? (!help command)
280
	
281
	['ChatLog'] = true; -- Log all chats for the server? 
282
	
283
	['MaxNumberOfLogs'] = 1500; -- How many logs to keep until the oldest entries are removed (MAX is 5000)
284
	
285
	['JoinMessage'] = false; -- Display a message with player info when a player joins, set group id in group settings if you want it to display if a player is in a group or not and if so what rank they are.
286
	
287
	['DonorPerks'] = true; -- Sets if donors are allowed to show off that they donated, when people donate in your place you get 10% of what they payed!
288
	
289
	['PermBanKey'] = '0.49971007415998'; -- Key (Random String) to use in persistent perm ban (change if you perm banned someone by accident, make it 100% random, if you want a random key generator, put print(math.random()) into the command bar in studio and hit enter, then just copy what it gives you in the output window)
290
	
291
	['FreeAdmin'] = false; -- Set to true if you want everyone to get the set type of admin (not recommended)
292
	
293
	['FreeAdminType'] = 'Mod'; -- Type of admin for FreeAdmin (Mod/Admin/Owner)
294
	
295
	['AutoClean'] = true; -- AutoClean the server? (!clean)
296
	
297
	['AutoCleanDelay'] = 30; -- How long to wait between AutoCleans (in seconds)
298
	
299
	['PlayerCommands'] = true; -- Sets whether or not nonadmins can use player commands (!rejoin,!ping,!cmds,etc)
300
	
301
	['OwnersAreTrueOwners'] = false; -- This indicates whether or not Owners are considered True Owners, if set to true Owners get the same commands as the place owner (permban and other true owner cmds)
302
	
303
	['PMUsableByAnyone'] = false; -- Set this to true if you want it so anyone can use the PM command
304
	
305
	['AdminsSpawnWithGuis'] = false; -- This determines if admins spawn with the admin chat and cmd box, note the admin chat is disabled when custom chat is enabled (has a admin mode)
306
	
307
	['HelpGui'] = true; --This determines if players spawn with the helpgui or not, change its button Y Position in the GUI settings near the bottom of settings (Ctrl+F Search HelpGuiYPos).
308
	
309
	['UpdateShutdown'] = false; --Automatically shutdown the game if it was updated
310
	
311
	['MusicList'] = {{Name='SadPiano',Id=130798493}}; -- Add music to this table using the format: {Name='ExampleSong',Id=1234567} so that the table would look like local MusicList={{Name='ExampleSong',Id=1234567};{Name='ExampleSong2',Id=1234568}}, if you want to add pitch/volume simply insert Pitch and/or Volume EX: {Name='ExampleSong2',Id=1234568,Pitch=2,Volume=0.5}
312
	
313
	['CustomChat'] = false; --Custom chat system, aside from chat modes and various other things, the custom chat cannot be muted by exploiters and exploiters can not use it to run chat commands.
314
	
315
	['CustomChatType'] = 'Both'; --Classic/Bubbles/Both, Determines chat mode, simular to ROBLOX's chat settings.
316
	
317
	['SeparatedChannels'] = false; --Determines if the custom chat modes can see eachother, if set to true, for example, anyone whose chat is set to "Team" won't see chats from "Global"
318
	
319
	['CustomPlayerList'] = false; --A very basic and simplistic playerlist that I do not plan to spend much time on, it shows names colored by team color, has a menu for each name (click the name) and does not yet show leader stats, not finished and plan to update in the future.
320
	
321
	['MessageOfTheDay'] = false; --Determines if the Message of the Day is shown to admins on-join, you can set your own decal/model to use with the message of the day below, you simply place the message into its description after you set its ID
322
	
323
	['MessageOfTheDayID'] = 166040615; --ID Of model/decal to grab the message of the day from (needs to be set as the decal/model's description)
324
	
325
	['BuggedCommandMatching'] = false; --Set to true if you want to use the old buggy string matching that let you do things like "Hello :kill me" (really you could always set the prefix to something like "Hello " so you can do "Hello kill me")
326
	
327
	['VoteKick'] = false; --Enable player vote kicking?
328
	
329
	['VoteKickPercentage'] = '75'; --Vote percentage of players in-game needed to kick a player
330
	
331
	['CommandComfirmation'] = false; --Tell the user that the command successfully ran?
332
	
333
	['CommandPermissions'] = {}; --Use this to change command permissions, format is (with prefix!!!) ['CommandPermissions'] = {{Command=":ff",Level=5},{Command="kick",Level=4}}; -3=FunCommand Owners+; -2=FunCommand Admins+; -1=FunCommand Mod+; 0=Any Player; 1=Donors;2=Mod+;3=Admin+;4=Owner+;5=Place Owner
334
	
335
	['SystemMessageTitle'] = "SYSTEM MESSAGE"; --Title to use in system messages (:sm messageHere)
336
	
337
	['DisplayAdvertisements'] = true; --Help support the admin and show advertisements in the help gui? If you choose to show them you are helping me, you can also add custom ones using the "CustomAds" setting :). Want your to appear on the help gui? Send me (Sceleratis) a PM!
338
	
339
	['CustomAds'] = {}; --Add custom advertisements to appear in the help gui here. You just need to add the advertisement's item ID and options using the format {Advert=DecalID,Action="Teleport: PlaceId" or "Purchase: ItemId"}. Advertisements are 390x90 pixels
340
	
341
	['NotificationSound'] = 138222365; --What sound is made when the user recieves a notifiaction? Set it to 0 for no sound.
342
	
343
	['Capes'] = {}; --Add capes here. Colors are BrickColors. Example & Format: ['Capes'] = {{Name="Superman",Material="Fabric",Color="Bright blue",Reflectance=0,ID=1241241},{Name="Bobguy",Material="Plastic",Reflectance=0,Color="Cyan",ID=12312312},{Name="etc",Material="etc",Color="etc",Reflectance=etc,ID=etc}};
344
	
345
	['JumpOnTeleport'] = false; --Jump a player before teleporting (for non-roblox seats)? 
346
	
347
	---------------------
348
	--  Anti-Exploit   --
349
	---------------------
350
351
	['ExclusionList'] = {}; -- Add the names of people you want to exclude from the AntiExploit to this list, note that admins are already excluded
352
	
353
	['ExploitAlert'] = true; --Alerts admins when someone goes nil/chats something thought to be exploit related, this is likely no longer going to work as the anti nil will disconnect a player as they are leaving to make sure they are not lingering in the nil/causing problems. Only notified if the first kick failed.
354
	
355
	['AntiChatCode'] = true; -- Prevents non-admins from running code/commands via chat (Add new things to detect into the WordList table)
356
	
357
	['Detection'] = true; -- Will atModt to detect certain exploits
358
	
359
	['AntiRobloxLocked'] = true; --  Disconnects any player who is or becomes RobloxLocked. (Recommended you keem this enabled, if a player joins RobloxLocked they will not be hooked by the script, this removes them before they break something.)
360
	
361
	['AntiSpeed'] = true; -- Trys to stop speed "hackers"
362
	
363
	['AntiSelection'] = true; -- Disconnects a player if their selection changes (so if they are using studio tools like drag, move, resize, etc)
364
	
365
	['AntiNil'] = true; -- Crashes/Kicks any non-admins who atModt to go "nil"
366
	
367
	['AntiCheatEngine'] = false;-- Kicks a player if a Cheat Engine installation is detected on their computer, not 100%
368
	
369
	['AntiScriptsDisabled'] = true; -- If the client script cannot be loaded onto the player or takes to long to check in, the player is kicked
370
	
371
	['AntiAnimation'] = false; -- Prevents animation exploit
372
	
373
	['AntiNameIdChange'] = true; -- AtModts to stop players from locally changing their name/id to fool local scripts
374
	
375
	['AntiGod'] = false; -- Prevents non-admins from being godded
376
	
377
	['AntiLeak'] = false; -- Makes it a little harder for people to steal your game [BE WARNED, This can possibly ruin personal servers]
378
	
379
	['RenameGameObjects'] = false; -- Renames things like Lighting, Players, and Workspace, will break most scripts that are not coded to work in such situations and confuse most people using badly coded explorers or studio.
380
	
381
	['NerfExplosions'] = false; -- Makes it so any explosions get nerfed, meaning they wont do any damage.
382
	
383
	['AntiDelete'] = false; -- Prevents any scripts, parts, models, or unions in workspace from being deleted. Could cause some interesting problems in your game.
384
	
385
	['AntiDecals'] = false; -- Prevents decals from being added to Workspace, really though you should just use FilteringEnabled ;p
386
	
387
	['AntiSound'] = false; -- Prevents sounds not made by this script from getting inserted into Workspace.
388
	
389
	['WordList'] = {}; -- Add kick words to this list, will kick a player if they say something on the list, works with string patterns.
390
	
391
	['AntiBuildingTools'] = false; -- Prevents non-admins from getting "btools"
392
	
393
	['AntiTools'] = false; -- Removes any tools given to a non-admin that were not present at server start and not created by this script. Does not affect tools in StarterPack when the server starts.
394
	
395
	['AllowedToolsList'] = {}; --Allows you to specify the names of tools allowed when AntiTools is enabled
396
	
397
	['AntiGui'] = false; -- Prevents non-game/admin guis from being spawned on players, such as the account stealing GUI. Does not affect GUIs in StarterGui when the server starts.
398
	
399
	['AllowedGuiList'] = {}; --[[
400
		If there is a gui in your game that is not in startergui 
401
		then add its name to this table, do note that if the 
402
		name of the gui is just ScreenGui or something like 
403
		that, if an exploiter inserts a gui with the same name 
404
		it will not be removed, so make sure you make the name 
405
		of the gui very specific.
406
	]]
407
	
408
	---------------------
409
	-- Group Settings  --
410
	---------------------
411
	
412
	['GroupOnlyJoin'] = false; -- Makes it so ONLY people in the set group can join the game.
413
	
414
	['GroupId'] = 0; -- Id of group, used for info/join message, if set will display a user's rank when the info command is used on them.
415
	
416
	['Ranks'] = {};--Add group ranks to have admin/be banned here. Read below for help.		
417
	--[[
418
		Format is {Group=GROUPID,Rank=RANKNAME/NUMBER,Type=ADMINTYPE}
419
		GROUPID is the ID of the group the rank belongs to and that the player must be in
420
		RANKNAME/NUMBER is either the name of the rank (Generals) or its number (252) if you want to admin rank 252 and every rank above it, simply set it to negative, so Rank=-252 will admin anyone in rank 252 and up
421
		ADMINTYPE is the type of admin players in the rank will get, this can be Mod, Admin, Owner, or Banned
422
		In the end your table should look something like this (THIS IS ONLY AN EXAMPLE, DO NOT USE IT): 
423
			['Ranks'] = {
424
				{Group=124324,Rank=142,Type='Mod'},
425
				{Group=1932348,Rank='Generals',Type='Owner'},
426
				{Group=1284124,Rank=-193,Type='Admin'},
427
				{Group=1399424,Rank=-1,Type='Banned'}
428
			};
429
	--]]
430
	
431
	---------------------
432
	--    VIP Admin    --
433
	---------------------
434
	
435
	['VipAdmin'] = false; -- If someone can have admin for owning an item
436
	
437
	['VipItems'] = {}; --Add VIP items here, format is {Item=ID,Type="Admin"}, so for example ['VipItems'] = {{Item=193945,Type="Mod"},{Item=125263,Type="Admin"}}
438
	
439
	['FriendAdmin'] = false; -- Set to true if you want people on your friendlist to have admin
440
	
441
	['FriendAdminType'] = 'Mod'; -- Type of admin friends will get if "FriendAdmin" is enabled
442
	
443
	---------------------
444
	--  GUI Settings   --
445
	---------------------
446
	
447
	['PrimaryColor'] = Color3.new(0,0,0); -- Primary GUI Color (Default black) (Remember, each 1 translates to a 255, keep that in mind when changing colors, use things like 124/255 to get the color you want)
448
	
449
	['SecondaryColor'] = Color3.new(1,1,1); -- Secondary GUI Color (Default white)
450
	
451
	['Font'] = 'Arial'; -- Text Font, can only be fonts usable on roblox (Arial, ArialBold, Legacy, SourceSans, SourceSansBold)
452
	
453
	['TextColor'] = Color3.new(1,1,1); -- Text Color (Default white)
454
	
455
	['TextStrokeTransparency'] = 0; -- Text Stroke Transparency (0-1)
456
	
457
	['TextStrokeColor'] = Color3.new(0,0,0); -- Color of the text stroke around letters (Default black)
458
	
459
	['Transparency'] = 0.2; -- GUI Transparency (0-1)
460
	
461
	['Animations'] = true; -- Determines if to animate stuff or not
462
	
463
	['MessageAnimations'] = true; -- Same as above but specifically for messages (the ones that cover the entire screen)
464
	
465
	['HelpGuiYPosScale'] = 0.5; --Determines the Y Position of the help gui button. Uses Scale NOT Offset.
466
	
467
	['HelpGuiYPosOffset'] = 0; --Help gui Y offset. Helps to fine tune the position of the help button.
468
	
469
	------------------------------------------------------
470
	--					END OF SETTINGS					--
471
	------------------------------------------------------
472
}
473
474
--[[
475
	---------------------
476
	--    IMPORTANT    --
477
	---------------------	
478
	
479
		Settings can be found in the Settings ModuleScript parented with this! 
480
		http://prntscr.com/5n9fv5
481
482
		For AutoUpdate to work this script's model needs to be in your inventory,
483
		if you got the script from anywhere other than my models the AutoUpdate
484
		will not work due to ROBLOX security nonsense. You can find the model
485
		here: http://www.roblox.com/item.aspx?id=145629584	
486
		It is important to stay up to date!
487
		
488
		To manually update, simply insert the new Loader script from your inventory,
489
		drag the "Settings" ModuleScript to it, and then remove the old version.
490
		
491
		Previously known as Kohl's Admin [Epix Edition]
492
		
493
		For information about LoadStringEnabled please refer to the following:
494
		
495
		http://wiki.roblox.com/index.php?title=Security#LoadStringEnabled
496
		http://wiki.roblox.com/index.php?title=Points_tutorial#Restrictions
497
		
498
		If you want to use the :s command you will need to set LoadStringEnabled
499
		to true. It can be found by going into studio, opening the explorer and properties
500
		windows, clicking on ServerScriptService and under properties checking
501
		LoadStringEnabled. Loadstring is only used in the script for Output and
502
		the scripting command. The script will function fine without it. Currently
503
		:ls and :cs are unusable due to updates that removed loadstring() abilities
504
		from the client, meaning no more local script building in-game.
505
		------------------------------------------------------------------------
506
		IF THERE ARE NEW SETTINGS YOU WILL NEED TO MANUALLY UPDATE THE SCRIPT TO
507
		CHANGE THEM, THEY WILL OTHERWISE BE LEFT AS THE DEFAULT. (Unless you use :settings)
508
		------------------------------------------------------------------------
509
		Please carefully read each setting's description BEFORE changing something
510
		as you could break something if you set something the wrong way.
511
		------------------------------------------------------------------------
512
		Find A security flaw or bug? 
513
		Know of a way to detect an exploit or make the AntiExploit better?
514
		Think of a way to make the script better? 
515
		Send me a message!
516
		
517
	---------------------
518
	-- DISCLAIMER/INFO --
519
	---------------------
520
	
521
		Credit: 
522
		
523
		-Kohltastrophe (Scripth) for the original script this was based on and for sharing
524
		some of his ideas and commands, and his continued help and support.
525
		
526
		-Sceleratis (me <3) for this script.
527
		
528
		-einsteinK for the original SBL older versions used and his help with some things, legit best scripter I know.
529
		
530
		-Arlikas for testing nearly anything I ask him to and being the best of help
531
		
532
		-GigsD4X and the F3X team for the F3X tool, full credit to them. I only made it into a hopperbin for this script.
533
		
534
		-Drezmor for his resize command. Fixed and edited by Kohltastrophe and myself.
535
		
536
		-KingKeith55 for the stickify command
537
		
538
		-Everyone who helped me with testing, suggested new ideas, features, and commands.
539
		
540
		If you have any questions, need help, or want to contact me you can send 
541
		me a Private Message on the main website (roblox.com) via my profile ("Send Message"
542
		under my avatar/character picture.)
543
		
544
		If you want to support the real Kohltastrophe put the following on your profile:
545
		"Scripth is the real Kohltastrophe. Put this on your profile so people know."
546
		
547
		Find members of the Epix Incoprorated team and myself from time to time on eKeynet's
548
		twitch stream! http://www.twitch.tv/keynettv
549
		
550
		I am not responsible for anything that you do with this script. If you do something its on you.
551
		
552
	---------------------
553
	-- Tips and Tricks --
554
	---------------------
555
		
556
			:kill me,noob1,noob2,!random,%raiders,$123456,!nonadmins,#3,radius-5,friends,-sceleratis
557
			-- kills you, noob1, noob2, a random person, team raiders, people in group 123456, nonadmins, 3 random people, anyone within a 5 stud radius of you, friends, and exclude the user Sceleratis.
558
			You can also run silent commands using /e, for example:
559
			"/e :kill scel"
560
			*Note, by silent I just mean people won't see you chat it, it however will still show up in logs. Its better to just use the console.
561
			
562
		You can also use a variety commands for different people;
563
			 all -- Everyone in the server
564
			 others -- Everyone but you
565
			 me -- You
566
			 admins -- Admins in the server
567
			 nonadmins -- People who are not admins in the server
568
			 random -- A random person, this can include you.
569
			 friends -- Anyone on your friends list
570
			 besties -- Anyone on your best friends list
571
			 %TEAMNAME -- Ex: :kill %raiders will kill everyone in team Raiders.
572
			 $GROUPID -- Let you run a command anyone in a specific group, if an ID is not given it will use the GroupId setting.
573
			 -PLAYERNAME -- Lets you exclude players from commands. :kill !all,-scel will kill everyone but scel
574
			 #NUMBER -- Lets you run a command on NUMBER of random people. :ff #5 will ff 5 random players.
575
			 radius-NUMBER -- Lets you run a command on anyone within a NUMBER stud radius of you. :ff radius-5 will ff any player(s) within a 5 stud radius of you.
576
			
577
		If you want to add cameras to your game (like saved into your game so you don't need to use the admin script to spawn them every new server)
578
		then just make a camera, needs to be a single part, so a sphere, brick, what ever it may be, make sure its anchored and locked
579
		just simply position it where you want in workspace, then make its name Camera: NAMEHERE
580
		so for example: Camera: Cam1
581
		the name is very important as the script will look for it in workspace when the game starts.
582
		make sure you name each camera something diffierent. You can preset waypoints the same way, just use Waypoint: instead of Camera:
583
		
584
		MESSAGES/HINTS FOR OTHER SCRIPTS:
585
		If you would like to have the hints/messages from this script usable in other SERVER (not local)
586
		scripts, then simply put the follow at the top of your script,
587
		
588
		message=_G['Message']
589
		hint=_G['Hint']
590
		
591
		USAGE EXAMPLES: 
592
		hint(msg,playerstable) - message(title,msg,playerstable)
593
		
594
		(Do note that playerstable needs to be a table containing players NOT player names! 
595
		Use game:service('Players'):children() to send a message to everyone.)
596
		
597
		hint('Hello people',game:service('Players'):children())  <=== sends "Hello people" to all players in game
598
		hint('Heyo scel',{game:service('Players').Sceleratis}) <=== Sends "Heyo scel" to the player Sceleratis
599
		message('Server Message','Hello people',game:service('Players'):children())  <=== Makes a message with the title "Server Message" and a message of "Hello people"
600
		message('Message from swagyguy','Heyo celary man',{game:service('Players').Sceleratis}) <=== Works the same as above but only the player Sceleratis sees it
601
		
602
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------						]]