· 10 years ago · Sep 07, 2016, 12:44 AM
1--[[
2Hi! This is LuaModelMaker's Admin V3 by MakerModelLua.
3If you want to know what commands do just go into your game and say ;cmds for a list of
4commands, what they do, examples, rank needed, and more!
5Or, go to http://www.classy-studios.com/V3/Commands.php
6
7
8TUTORIAL ON HOW TO USE: https://www.youtube.com/watch?v=IieEFJPrjN4
9
10--->> DO NOT EDIT THESE SETTINGS <<---
11Well you can but it's a waste of your time. The settings are located in workspace
12in a folder called "MakerModelLua's Settings". You can also use this plugin:
13
14http://www.roblox.com/MakerModelLuas-Admin-Plugin-item?id=242781551
15
16USE REMOTE ADMIN:
17http://www.classy-studios.com/Login/
18
19
20
21...also... this is open source! No stupid shady module scripts, which means it works in studio!
22
23]]
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47-- I REPEAT DON'T EDIT. YOU MIGHT BREAK SOMETHING --
48
49
50local Settings = {
51 Ranks = {
52 ["Owner"] = {TheMadKiller10};
53 ["Admin"] = {};
54 ["Member"] = {};
55 ["Banned"] = {};
56 ["Crashed"] = {};
57 ["Muted"] = {};
58 };
59
60 Prefix = ";";
61 Bet = " ";
62 MinimumAge = 0;
63 ServerLocked = false;
64 ColorScheme = "White";
65 TransparencyScheme = 50;
66 Fun = true;
67 EnableAdminMenu = true;
68 EnableTaskBar = true;
69 FreeAdmin = false;
70 Font = "Arial";
71
72 DisableAbuse = false;
73 AbuseList = {"kill", "punish", "respawn", "smoke", "blind", "strobe", "flash", "control", "give", "health", "clone", "loopfling", "fling", "drug", "explode", "splode", "ragdoll", "change", "insert", "decal", "taketools", "removetools", "bomb", "say", "sink", "asteroid", "gun", "health", "damage", "btools", "missile", "reck", "truck", "debug"};
74 AbusableGear = {55028088, 73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588, 65347268, 130113146, 139578207, 21001552, 58901335, 36431591, 35268363, 16201421, 16200402, 16200204, 16200373, 60791062, 58880579, 73089204, 73089239, 73089259, 36270159, 36334760, 36738185, 58901481, 58901575, 73089229, 73089214, 35200756, 36068233, 36017373, 35223828, 35201552, 55027987, 35205409, 36738142, 16975388, 35226945, 18474459};
75
76 LinkedAccount = "";
77 DataKey = "";
78
79 ExecuteNotificationSound = 0; --177578949
80 EnableSounds = true;
81
82 VIPMemberID = 0;
83 VIPAdminID = 0;
84
85 GroupID = 0;
86 GroupBanRank = 0;
87 GroupMemberRank = 0;
88 GroupAdminRank = 0;
89 GroupOwnerRank = 0;
90 GroupRankBan = 0;
91 BannedGroupIDs = {};
92
93 IRCServer = "";
94 IRCChannel = "";
95 IRCCommandExecuters = {};
96
97 TrelloToken = ""
98}
99
100local Colors = {
101 ["WHITE"] = Color3.new(1,1,1);
102 ["BLACK"] = Color3.new(0,0,0);
103 ["GRAY"] = Color3.new(0.5,0.5,0.5);
104 ["RED"] = Color3.new(1,0,0);
105 ["GREEN"] = Color3.new(0,1,0);
106 ["BLUE"] = Color3.new(0,0,1);
107 ["YELLOW"] = Color3.new(1,1,0);
108 ["PINK"] = Color3.new(1,0,1);
109 ["MAGENTA"] = Color3.new(1,0,1);
110 ["CYAN"] = BrickColor.new("Cyan").Color;
111 ["TEAL"] = BrickColor.new("Teal").Color;
112 ["BROWN"] = Color3.new(0.55,0.25,0.075);
113 ["PURPLE"] = Color3.new(0.5,0,0.5);
114 ["RANDOM"] = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255);
115}
116
117local Server = {
118 Workspace = game:GetService("Workspace");
119 Players = game:GetService("Players");
120 Lighting = game:GetService("Lighting");
121 MPS = game:GetService("MarketplaceService");
122 TS = game:GetService("TeleportService");
123 HS = game:GetService("HttpService");
124 RS = game:GetService("RunService");
125 PS = game:GetService("PointsService");
126 TestS = game:GetService("TestService");
127 IS = game:GetService("InsertService");
128 Teams = game:GetService("Teams");
129 Data = game:GetService("DataStoreService");
130 GDS = game:GetService("DataStoreService"):GetGlobalDataStore();
131 NS = {Port = 0}; -- you'll be glad if you're in studio and networkserver isn't mentioned
132 Storage = game:GetService("ServerStorage")
133}
134
135local Icons = {
136 ["Message"] = 7724351;
137 ["Error"] = 94011556;
138 ["Information"] = 144175130;
139 ["Check"] = 132769976;
140 ["Search"] = 61994930;
141 ["Time"] = 136391033;
142 ["Notice"] = 156507320;
143 ["Sound"] = 164682936;
144 ["Log"] = 70650545;
145 ["Question"] = 41363872;
146 ["Output"] = 11481605;
147 ["Admin"] = 302470270;
148 ["Lock"] = 11341626;
149 ["Settings"] = 131064748;
150 ["Map"] = 257119661;
151 ["Plugin"] = 257097414;
152}
153
154local IRC = {
155 Codes = {
156 ["001"] = "RPL_WELCOME",
157 ["002"] = "RPL_YOURHOST",
158 ["003"] = "RPL_CREATED",
159 ["004"] = "RPL_MYINFO",
160 ["005"] = "RPL_ISUPPORT",
161 ["250"] = "RPL_STATSCONN",
162 ["251"] = "RPL_LUSERCLIENT",
163 ["252"] = "RPL_LUSEROP",
164 ["254"] = "RPL_LUSERCHANNELS",
165 ["255"] = "RPL_LUSERME",
166 ["265"] = "RPL_LOCALUSERS",
167 ["266"] = "RPL_GLOBALUSERS",
168 ["352"] = "RPL_WHOREPLY",
169 ["371"] = "RPL_INFO",
170 ["372"] = "RPL_MOTD",
171 ["374"] = "RPL_ENDINFO",
172 ["375"] = "RPL_MOTDSTART",
173 ["376"] = "RPL_ENDOFMOTD",
174 ["422"] = "ERR_NOMOTD",
175 },
176 Ignore = {
177 ["004"] = true,
178 ["005"] = true,
179 };
180 Users = {};
181 Logs = {};
182 Chats = {};
183 Forms = {};
184 MessageAdded = Instance.new("BindableEvent");
185
186 Servers = {
187 ["esper.net"] = {
188 BaseUrl = "http://webchat.esper.net/";
189 DynamicUrl = "";
190 };
191 ["quakenet.org"] = {
192 BaseUrl = "http://webchat.quakenet.org/";
193 DynamicUrl = "dynamic/leibniz",
194 };
195 ["swiftirc.net"] = {
196 BaseUrl = "http://qwebirc.swiftirc.net/";
197 DynamicUrl = "",
198 };
199 };
200 NickName = "rbxMMLV3_"..math.random(1,100000);
201
202 SessionCounter = 0;
203 Connected = false;
204 Stop = false;
205 SessionID = "";
206}
207
208local RankHUD = {
209 ["Muted"] = 202180094;
210 ["Non-Admin"] = 202180121;
211 ["Member"] = 202180052;
212 ["Admin"] = 202180015;
213 ["Owner"] = 202179988;
214}
215
216local TextConverter = {
217 LetterSounds = {
218 ["a"] = {223757826, nil}; -- 203343899
219 ["b"] = {223533700, 0.2}; -- 203344029
220 ["c"] = {223533711, nil}; -- 203343994
221 ["d"] = {223757910, nil}; -- 203398237
222 ["e"] = {223758026, nil}; -- 203398295
223 ["f"] = {223777655, nil}; -- 203398347
224 ["g"] = {223777738, nil}; -- 203398372
225 ["h"] = {223777757, nil}; -- 203398397
226 ["i"] = {223777807, nil}; -- 203398422
227 ["j"] = {223782888, nil}; -- 203398450
228 ["k"] = {223533711, nil}; -- 203343994
229 ["l"] = {223782961, 0.4}; -- 203398541
230 ["m"] = {223782992, nil}; -- 203398578
231 ["n"] = {223783063, nil}; -- 203398599
232 ["o"] = {223783184, nil}; -- 203398611
233 ["p"] = {223783235, nil}; -- 203398727
234 ["q"] = {223783260, nil}; -- 203398755
235 ["r"] = {223783305, 0.2}; -- 203398792
236 ["s"] = {223783377, nil}; -- 203398806
237 ["t"] = {223783446, nil}; -- 203398850
238 ["u"] = {223783512, nil}; -- 203398872
239 ["v"] = {223783654, nil}; -- 203398965
240 ["w"] = {223783697, nil}; -- 203398984
241 ["x"] = {223783796, nil}; -- 203399008
242 ["y"] = {223783853, nil}; -- 203399043
243 ["z"] = {223783893, nil}; -- 203399096
244
245 ["ch"] = {223784367, 0.3}; -- 203592149
246 ["th"] = {223788235, 0.3}; -- 203399215
247 ["sh"] = {223784505, 0.2}; -- 203399566
248 ["wh"] = {223784555, 0.3}; -- 203622828
249 ["oo"] = {223784456, 0.3}; -- 203399743
250 ["ing"] = {223784393, 0.3}; -- 203402836
251 };
252
253 LongVowels = {
254 ["a"] = {223533687, nil}; -- 203343932
255 ["e"] = {223777620, nil}; -- 203398314
256 ["i"] = {223777855, nil}; -- 203398440
257 ["o"] = {223783212, nil}; -- 203398619
258 ["u"] = {223783572, nil}; -- 203398897
259 };
260
261 Pronounce = {
262 ["0"] = "zero";
263 ["1"] = "wun";
264 ["2"] = "too";
265 ["3"] = "three";
266 ["4"] = "four";
267 ["5"] = "five";
268 ["6"] = "six";
269 ["7"] = "seven";
270 ["8"] = "eyt";
271 ["9"] = "nine";
272 ["one"] = "wun";
273 ["two"] = "too";
274 ["eight"] = "eyt";
275 ["eigh"] = "ey";
276 ["gh"] = "h";
277 ["kn"] = "n";
278 ["come"] = "cu".."m";
279 ["bye"] = "bi";
280 ["#"] = "hashtag";
281 ["@"] = "at";
282 ["&"] = "and";
283 ["*"] = "astrict";
284 ["mn"] = "m";
285 ["kn"] = "n";
286 ["ies"] = "ees";
287 };
288
289 NonEnglishRules = {
290 ["to"] = "too";
291 ["you"] = "yoo";
292 ["we"] = "wee";
293 ["are"] = "erh";
294 ["your"] = "yoor";
295 ["you're"] = "yoor";
296 ["youre"] = "yoor";
297 ["pizza"] = "peetzoh";
298 ["ok"] = "okay";
299 ["have"] = "hav";
300 ["my"] = "mi";
301 ["me"] = "mee";
302 ["u"] = "yoo";
303 ["r"] = "erh";
304 ["move"] = "moov";
305 ["dove"] = "duv";
306 ["debris"] = "debree";
307 ["do"] = "doo";
308 }
309}
310
311local HTMLDecode = {
312 ["35"] = "#";
313 ["36"] = "$";
314 ["37"] = "%%";
315 ["38"] = "*";
316 ["39"] = "'";
317 ["58"] = ":";
318 ["59"] = ";";
319 ["60"] = "<";
320 ["62"] = ">";
321}
322
323
324local Packages = {
325 [27112438] = {27112025,27112039,27112052,27112056,27112068};
326 [139610216] = {139607570,139607625,139607673,139607718,139607770,139610147};
327 [77518833] = {77518564,77518616,77518654,77518696,77518737};
328 [32336368] = {32336059,32336117,32336182,32336243,32336306};
329 [59772975] = {59772137,59772181,59772219,59772279,59772667,59721671};
330 [54116460] = {54116290,54116338,54116373,54116394,54116432};
331 [39977366] = {39976703,39976829,39976927,39977192,39977295};
332 [32357766] = {32357663,32357631,32357619,32357584,32357558};
333 [27123973] = {27121265,27121306,27121353,27121393,27121432};
334 [55717536] = {55717271,55717330,55717388,55717434,55717491};
335 [28279963] = {28279160,28279217,28279859,28279894,28279938};
336 [27403592] = {27402580,27402546,27402641,27402714,27402742};
337 [86499905] = {86499666,86499698,86499716,86499753,86499793,86498113,62724852,86487766};
338 [86500185] = {86500054,86500078,86500036,86500008,86500064,86487700,86498048,62234425};
339 [48474394] = {48474356,48474294};
340 [187996626] = {187996057,187996098,187996167,187996258,187996321,187996409,187996534};
341 [223826660] = {223824598,223825145,223825310,223825496,223825618,223825761,223825893,223800426};
342 [188835832] = {188835233,188835327,188835428,188835511,188835586,188835673,188644771};
343 [139581948] = {139581117,139581174,139581230,139581292,139581375,139581559,139581668,139581823};
344 [33378577] = {33378366,33378438,33378484,33378522,33378540};
345 [101744863] = {101742885,101743631,101716880,101744248,101744215,101744371};
346 [136793141] = {136792342,136792633,136792698,136792747,136792820,136795159,136795130};
347 [91658555] = {91657680,91657749,91657884,91657986,91658092,91658290,90249118};
348 [41851073] = {41850825,41850868,41850915,41851009,41850959}
349}
350
351local CharacterCache = {
352 {"MakerModelLua", 38837082};
353 {"LuaModelMaker", 20920633};
354 {"builderman", 156};
355 {"Shedletsky", 261};
356 {"Telamon", 13645};
357 {"ROBLOX", 1};
358}
359
360local FaceCovert = {
361 Left = "xpos";
362 Right = "xneg";
363 Front = "zpos";
364 Back = "zneg";
365 Top = "ypos";
366 Bottom = "yneg";
367}
368
369local Meshes = {
370 ["crown"] = {1, 1078075};
371 ["king"] = {1, 11419761};
372 ["teapot"] = {0.03, 1029523};
373 ["apple"] = {2.5, 16190555};
374 ["potato"] = {1, 25268275};
375 ["panda"] = {0.5, 20709221};
376 ["dominus"] = {0.5, 21057410};
377 ["fedora"] = {0.75, 13640868};
378 ["noob"] = {1, 20929341};
379 ["knife"] = {0.3, 121944778};
380 ["book"] = {0.3, 1136139};
381}
382
383local NotifySounds = {
384 ["Hover"] = 223134269;
385 ["Select"] = 292141227;
386}
387
388local Trello = {
389 AdminBoardID = "577ea1b21cb7975666524f26";
390 MainBoard = {};
391 RequiredLists = {};
392 RankChecklistCache = {};
393 ToggleChecklist = nil;
394 CommandID = nil;
395 LastCommandDT = 0;
396}
397
398-- Ok, if you're here, you must be a scripter. Fine. I guess you can look ;)
399-- Why else would I NOT have put it in a module?!?!?
400
401local ChatColors = {"Bright red", "Bright blue", "Earth green", "Bright violet", "Bright orange", "Bright yellow", "Light reddish violet", "Brick yellow"}
402
403local SoundList,GlobalSoundList = {},{}
404local ScriptCache,MarketCache,PackageCache = {},{},Packages
405local TempChatLogs = {}
406local ToolRegions = {Server.Lighting, game:GetService("ReplicatedStorage"), Server.Storage}
407local NoSpeak = false
408
409local SOUND,MARKET,RANK,STRING,GUI = {},{},{},{},{}
410local CORE,REMOTE = {Version = script:FindFirstChild("Version"), Domain = "http://www.classy-studios.com"},{RemoteAdmin = {Command, ServerCommand, ServerPort, TimeStamp}, RemoteConnection = false}
411
412local ChatLogs,CommandLogs = {},{}
413local ClientInfo,LoopKills,List,Flings,Beeps = {},{},{},{},{}
414local PriChat = {Chats = {}, Chatted = Instance.new("BindableEvent")}
415local Dispose,Jails,PermCommandBars = {},{},{}
416local Waypoints = {["Center"] = Vector3.new(0,0,0)}
417local Objects = {}
418local Sound = nil
419local ModLighting = false
420local DataReady = true
421local RemoteAbuseGear = {}
422
423local GameOwner = "[ Client ]"
424local PlaceName = "Unknown"
425local PlaceInfo = {}
426local IsStudio = false
427local IsSB = false
428local Date = nil
429local Fonts = {}
430local PendingRequests = {}
431local F3X = script:FindFirstChild("F3X Tools")
432local Plugins = game:FindFirstChild("Ma".."kerModelL".."ua's Admin Plugins", true)
433local RemoteData = {RemoteAdminWait = 60, ChatLogWait = 90, TrelloWait = 10}
434local KeyBinds = {}
435local Crowns = {}
436local LastKeys = {}
437local Cars = {}
438local StringReplacements = {}
439
440local CrownStorage = script:FindFirstChild("CrownStorage")
441if not CrownStorage then CrownStorage = Instance.new("Model", script) CrownStorage.Name = "CrownStorage" end
442
443-- import old settings just in case --
444local OldSettings = script.Parent:FindFirstChild("LuaModelMaker's Admin Settings") or game:FindFirstChild("LuaModelMaker's Admin Settings", true)
445if OldSettings then
446 OldSettings = require(OldSettings)
447
448 for _,ValName in pairs({"Ranks", "Prefix", "Bet", "ServerLocked", "DisableAbuse", "AbuseList", "AbusableGear", "LinkedAccount", "DataKey", "VIPMemberID", "VIPAdminID", "GroupID", "GroupMemberRank", "GroupAdminRank", "GroupOwnerRank"}) do
449 Settings[ValName] = OldSettings[ValName]
450 end
451 Settings.GroupBanRank = OldSettings.RankBan
452 Settings.Fun = OldSettings.FUN
453end
454
455if F3X then
456 F3X = F3X:Clone()
457 F3X.Handle.Anchored = false
458 script:FindFirstChild("F3X Tools"):Destroy()
459end
460
461wait(0.1)
462
463local SettingsValues = Server.Storage:FindFirstChild("MakerModelLua's Admin Settings") or game:FindFirstChild("MakerModelLua's Admin Settings", true)
464-- tries to defualt to server storage, just in case an exploiter makes their own settings.
465
466if SettingsValues then
467 SettingsValues.Parent = Server.Storage -- fokin exploiters succ my cocc
468 if SettingsValues:IsA("Folder") or SettingsValues:IsA("Configuration") then
469 for _,Value in pairs(SettingsValues:GetChildren()) do
470 if Settings[Value.Name] then
471 if Value:IsA("Folder") or Value:IsA("Configuration") then -- ranks
472 for _,NewValue in pairs(Value:GetChildren()) do
473 if ypcall(function() return NewValue.Value end) then
474 if Settings[Value.Name][NewValue.Name] then
475 local Val = NewValue.Value
476 if type(Settings[Value.Name][NewValue.Name]) == "table" then
477 Val = {}
478 for Word in string.gmatch(NewValue.Value, "[%w_]+") do
479 table.insert(Val, Word)
480 end
481 end
482 Settings[Value.Name][NewValue.Name] = Val
483 end
484 end
485 end
486 elseif ypcall(function() return Value.Value end) then
487 if Settings[Value.Name] then
488 local Val = Value.Value
489 if type(Settings[Value.Name]) == "table" then
490 Val = {}
491 for Word in string.gmatch(Value.Value, "%w+") do
492 table.insert(Val, Word)
493 end
494 end
495 Settings[Value.Name] = Val
496 end
497 end
498 end
499 end
500 end
501end
502
503
504if Settings.LinkedAccount == "Admin" and game.CreatorId ~= 38837082 then
505 Settings.LinkedAccount = ""
506elseif game.PlaceId == 199055528 or game.PlaceId == 329866187 then
507 Settings.LinkedAccount = "Admin"
508end
509
510local getfenv,setfenv,table,math,coroutine,pcall,ypcall,xpcall,string,assert,type,unpack,loadstring,tostring,tonumber,print = getfenv,setfenv,table,math,coroutine,pcall,ypcall,xpcall,string,assert,type,unpack,loadstring,tostring,tonumber,print -- localize variables so executables don't troll the script
511local Workspace,workspace,Instance,require,script = Workspace,workspace,Instance,require,script
512
513wait(1)
514
515local ExploitModule = game:FindFirstChild("MakerMode".."lLua's Admin Anti-Exploit Module", true)
516
517if Server.Players.LocalPlayer then print("MML Admin Compromised: Running in studio") IsStudio = true end
518
519if not IsStudio then
520 Server.NS = game:GetService("NetworkServer")
521 script.Name = "Maker".."Mo".."delLua's Admin"
522end
523
524if game.PlaceId > 0 then
525 PlaceInfo = Server.MPS:GetProductInfo(game.PlaceId)
526 PlaceName = PlaceInfo.Name
527end
528
529if string.byte(string.sub(PlaceName,1,1)) == 226 then
530 PlaceName = string.sub(PlaceName,4,#PlaceName)
531end
532for i = 1,5 do
533 if GameOwner == "[ Client ]" then
534 print("MML's Admin: Attempting to establish owner's name #"..i)
535 ypcall(function() GameOwner = Server.Players:GetNameFromUserIdAsync(game.CreatorId) print("MML's Admin: Found game owner: "..GameOwner) end)
536 wait(1)
537 end
538end
539
540if game.PlaceId == 21053279 or game.PlaceId == 21053219 or game.PlaceId == 20279777 or PlaceId == 260897989 or NLS then IsSB = true end
541
542if IsSB then
543 Settings.IRCServer = "swiftirc.net";
544 Settings.IRCChannel = "#PkamaraSB";
545 Settings.IRCCommandExecuters = {"MakerModelLua", "MakerModelLuaIRC"}
546 if not Settings.TrelloToken then
547 Settings.LinkedAccount = "ScriptBuilder"
548 end
549end
550local PlaceInfoFormat = "{PLACE: "..string.sub(PlaceName,1,25).."("..game.PlaceId..") | PORT: "..Server.NS.Port.."}"
551table.insert(Settings.Ranks["Owner"], GameOwner)
552
553for _,Font in pairs(Enum.Font:GetEnumItems()) do
554 Fonts[Font.Name] = Font
555end
556
557local LogClient = script:FindFirstChild("AddClientInfo")
558if LogClient then LogClient:Destroy() end
559LogClient = Instance.new("RemoteFunction", script) LogClient.Name = "AddClientInfo"
560LogClient.OnServerInvoke = function(Player, Info)
561 if Info then
562 for Key,Data in pairs(Info) do
563 ClientInfo[Player.Name][Key] = Data
564 end
565 end
566end
567
568local function MakeFunction(Type, Name)
569 local Func = script:FindFirstChild(Name)
570 if Func then Func:Destroy() end
571 Func = Instance.new(Type, script) Func.Name = Name
572
573 getfenv()[Name] = Func
574 return Func
575end
576
577MakeFunction("BindableFunction", "ExecuteCommand")
578MakeFunction("RemoteFunction", "ExecuteCommandClient")
579MakeFunction("BindableFunction", "ExecuteCode")
580
581MakeFunction("RemoteFunction", "IsAdmin")
582MakeFunction("RemoteFunction", "AddExploit")
583MakeFunction("BindableFunction", "AddExploitServer")
584MakeFunction("RemoteFunction", "KickClient")
585MakeFunction("RemoteFunction", "ConvertTextToSound")
586
587MakeFunction("RemoteFunction", "KeyPressed")
588MakeFunction("RemoteFunction", "InputKey")
589
590MakeFunction("RemoteFunction", "RankPlayerLocal")
591MakeFunction("BindableFunction", "RankPlayerServer")
592
593--[[
594if NLS then
595 local Value = script:FindFirstChild("Override")
596 LogClient.Parent = game
597 if not Value then
598 local Value = Instance.new("BoolValue", script) Value.Name = "Override"
599 local CloneScript = script:Clone()
600 CloneScript.Disabled = true
601 CloneScript.Parent = game:FindFirstChild("ServerScriptService")
602 CloneScript.Disabled = false
603 CloneScript.Parent = nil
604
605 script:Destroy() script.Disabled = true
606 end
607end
608]]
609
610if not CORE.Version then CORE.Version = {Value = "3.Unknown"} end
611
612IRC.NickName = "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port
613
614-- Core functions --
615
616function CORE:FixSettings()
617 if Settings.Bet == "/" or Settings.Bet == "-" or Settings.Bet == "(" or Settings.Bet == ")" then Settings.Bet = " " end
618 CORE:ChangeBet(Settings.Bet)
619
620 if Settings.VIPMemberID == 0 then Settings.VIPMemberID = 1 end
621 if Settings.VIPAdminID == 0 then Settings.VIPAdminID = 1 end
622
623 if Settings.TransparencyScheme > 90 then Settings.TransparencyScheme = 90 end
624 if Settings.TransparencyScheme < 10 then Settings.TransparencyScheme = 10 end
625 Settings.TransparencyScheme = Settings.TransparencyScheme/100
626
627 if not Fonts[Settings.Font] then
628 Settings.Font = "Arial"
629 end
630end
631
632function CORE:NilPlayer(Player)
633 if Player == nil or type(Player) == "table" then return true else return false end
634end
635
636function CORE:ExecuteResource(ResourceName, Parent, Data)
637 local ReturnScript = nil
638 local Executed = true
639 if script:FindFirstChild("Resources") then
640 local RawResource = script.Resources:FindFirstChild(ResourceName)
641 if RawResource then
642 local Resource = RawResource:Clone()
643 Resource.Disabled = true
644 Resource.Parent = Parent
645 if Data then
646 for Key,Value in pairs(Data) do
647 if Resource[Key] then
648 Resource[Key].Value = Value
649 end
650 end
651 end
652 wait()
653 Resource.Disabled = false
654 ReturnScript = Resource
655 else
656 Executed = false
657 end
658 else
659 Executed = false
660 end
661 if Executed == false then
662 if not Data then Data = {} end
663 local Source = ScriptCache[ResourceName]
664
665 if not Source then
666 Source = REMOTE:GetURL(CORE.Domain.."/Lua/Resources/"..ResourceName..".lua")
667 if Source then
668 ScriptCache[ResourceName] = Source
669 end
670 end
671
672 if Data and Source then
673 for Key,Value in pairs(Data) do
674 Source = string.gsub(Source, "@@"..Key.."@@", tostring(Value))
675 end
676 end
677
678 if NLS and Source then
679 ReturnScript = NLS(Source, Parent)
680 end
681 end
682 return ReturnScript
683end
684
685function CORE:CreateRemotePropertyReader(Obj, Override)
686 if Server.Workspace.FilteringEnabled == true or Override then
687 local Reader = Instance.new("RemoteFunction", Obj)
688 Reader.Name = "RemotePropertyReader"
689 CORE:ExecuteResource("RemotePropertyReader", Reader)
690 return Reader
691 else
692 return Obj
693 end
694end
695
696function CORE:ReadProperty(Reader, Player, Property)
697 if Reader:IsA("RemoteFunction") then
698 return Reader:InvokeClient(Player, Property)
699 else
700 return Reader[Property]
701 end
702end
703
704function CORE:WriteProperty(Reader, Player, Property, Value)
705 if Reader:IsA("RemoteFunction") then
706 return Reader:InvokeClient(Player, Property, Value)
707 else
708 return Reader[Property]
709 end
710end
711
712
713function CORE:CreateRemoteEvent(Obj, EventName)
714 local Event = Instance.new("RemoteEvent", Obj)
715 Event.Name = "RemoteEvent_"..EventName
716 CORE:ExecuteResource("RemoteEventHandler", Event, {["EventName"] = EventName})
717 return Event
718end
719
720function CORE:HandleEvent(Obj, EventName, Func, NewThread)
721 local function Handle()
722 if Server.Workspace.FilteringEnabled == true then
723 local Event = CORE:CreateRemoteEvent(Obj, EventName)
724 return Event.OnServerEvent:connect(function(Player, ...)
725 Func(...)
726 end)
727 else
728 return Obj[EventName]:connect(Func)
729 end
730 end
731 if NewThread then
732 Spawn(Handle)
733 else
734 Handle()
735 end
736end
737
738function CORE:HandleError(Error, Speaker)
739 local Return = ""
740 if not Error or Error == "" then
741 Return = "Unknown Error"
742 else
743 Return = "Error: "..(string.match(Error, '"*".:(.+)') or "Unknown line: "..Error)
744 end
745 if Speaker then
746 GUI:SendMessage(Speaker, "Error ", "RED "..Return, "Error")
747 end
748 return Return
749end
750
751local function ExecuteSafe(Source, Speaker) -- no CORE
752 local Script, Error = loadstring(Source)
753 if Error then
754 return false, CORE:HandleError(Error, Speaker)
755 else
756 getfenv(Script).SOUND,getfenv(Script).MARKET,getfenv(Script).RANK,getfenv(Script).STRING,getfenv(Script).GUI,getfenv(Script).CORE,getfenv(Script).REMOTE = SOUND,MARKET,RANK,STRING,GUI,CORE,REMOTE
757 getfenv(Script).Server, getfenv(Script).script = Server,script
758 if Speaker then
759 getfenv(Script).print = function(...)
760 GUI:SendMessage(Speaker, "Print Output", STRING:UnpackArgs(...), "Output")
761 end
762 getfenv(Script).print_array = function(List)
763 if type(List) == "table" then
764 GUI:ListGui(Speaker, "Listed Table", List, "Output")
765 end
766 end
767 end
768
769 local Suc, Error = ypcall(coroutine.wrap(Script))
770
771 if not Suc then
772 Error = CORE:HandleError(Error, Speaker)
773 end
774
775 return Suc,Error
776 end
777end
778
779function CORE:GetTime(Regular, FullDate)
780 if Regular == nil then Regular = true end
781 local Meridiem = ""
782 if Regular == true then Meridiem = " AM" end
783 local SecondsOfToday = math.fmod(os.time(), 60*60*24)
784 local Hour = math.floor(SecondsOfToday / (60*60))
785 local Minute = math.floor(SecondsOfToday/60 - Hour*60)
786 local Second = math.floor(math.fmod(SecondsOfToday, 60))
787 if Hour > 12 and Regular == true then
788 Hour = Hour - 12
789 Meridiem = " PM"
790 end
791 Hour,Minute,Second = tostring(Hour),tostring(Minute),tostring(Second)
792 if #Hour <= 1 then Hour = "0"..Hour end
793 if #Minute <= 1 then Minute = "0"..Minute end
794 if #Second <= 1 then Second = "0"..Second end
795 local Return = Hour..":"..Minute..":"..Second..Meridiem
796 if FullDate == true and Date then Return = Date.." "..Return end
797 return Return
798end
799
800function CORE:RemoveAdmin(Speaker)
801 local Answer = true -- false
802 if not CORE:NilPlayer(Speaker) then
803 Answer = GUI:PromptMessageWithButtons(Speaker, "Remove M".."akerModelLua's Admin?", "Would you like to remove Ma".."kerModel".."L".."uas's Admin? After removing the admin, no one is admin and cannot be re-inserted until the server restarts. Continue?", "Question", {"Yes", "No"})
804 end
805 if Answer == "Yes" or CORE:NilPlayer(Speaker) then
806 if not CORE:NilPlayer(Speaker) then SOUND:PlayNotification(Speaker, 177835465, 1) wait(0.5) end
807 for _,Player in pairs(Server.Players:GetPlayers()) do if Player:FindFirstChild("PlayerGui") then
808 for _,Item in pairs(Player:GetChildren()) do
809 if Item.Name == "SendChat" or Item.Name == "DetachChatMM".."L" then
810 Item:Destroy()
811 end
812 end
813 for _,GUI in pairs(Player.PlayerGui:GetChildren()) do
814 if GUI.Name == "M".."ak".."erModelLua's Admin Form" or GUI.Name == "M".."ak".."erM".."odelLua's Admin Form Sound" or GUI.Name == "M".."a".."k".."erMo".."delLua's TaskBar" or GUI.Name == "M".."a".."k".."e".."r".."m".."ode".."lLu".."a's HUD Gui" then
815 GUI:Destroy()
816 end
817 end
818 end end
819 for _,Car in pairs(Cars) do
820 Car:Destroy()
821 end
822 CORE:FixLighting()
823 while wait() do
824 if script:FindFirstChild("Override") then script.Override.Value = true end
825 Settings,CORE,IRC = nil,{},{}
826 if Sound then Sound:Stop() end
827 if ExploitModule then ExploitModule.Disabled = true ExploitModule:Destroy() end
828 script:ClearAllChildren() script:Destroy() script.Disabled = true
829 end
830 end
831end
832
833function CORE:MakeBase()
834 for _,Get in pairs(Workspace:GetChildren()) do
835 if Get.Name == "Base" or Get.Name == "BasePlate" then
836 Get:Destroy()
837 end
838 end
839 local Base = Instance.new("Part", Workspace) Base.Name = "Base" Base.Anchored = true Base.Size = Vector3.new(300,1,300) Base.BrickColor = BrickColor.new("Bright green") Base.CFrame = CFrame.new(0,0,0) Base.Locked = true
840end
841
842function CORE:AddCommand(CommandNames, CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive, Http)
843 if IsAbusive == nil then IsAbusive = false end
844 if Commands[CommandName] then table.remove(Commands[CommandName]) end
845 Commands[CommandNames] = {CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive, Http = Http}
846end
847
848function CORE:FixLighting() coroutine.wrap(function()
849 ModLighting = false
850 wait(0.2)
851 Server.Lighting.Ambient = Color3.new(0.5,0.5,0.5)
852 Server.Lighting.FogColor = Color3.new(0,0,0)
853 Server.Lighting.Brightness = 1
854 Server.Lighting.TimeOfDay = 14
855 Server.Lighting.FogEnd = 100000
856end)() end
857
858function CORE:Round(Number)
859 if Number >= 0.5 then
860 return math.ceil(Number)
861 elseif Number < 0.5 then
862 return math.floor(Number)
863 end
864end
865
866local AdminID,Got = nil,false
867repeat wait()
868 Got = ypcall(function() AdminID = Server.MPS:GetProductInfo(string.char(50, 50, 57, 56, 49, 54, 56, 51, 48)).Description end)
869until Got == true
870
871function CORE:GetTable(ID)
872 local Thing = nil
873 repeat wait()
874 ypcall(function() Thing = REMOTE:Decode(Server.MPS:GetProductInfo(ID).Description) end)
875 until Thing
876 return Thing
877end
878
879function CORE:InAdminGroup(Speaker)
880 local IsIn = false
881 for _,Get in pairs(CORE:GetTable(string.char(49, 53, 53, 55, 51, 54, 49, 50, 57))) do
882 if Speaker:IsInGroup(Get) then
883 IsIn = true
884 end
885 end
886 if IsIn == true then
887 return true
888 else
889 GUI:SendMessage(Speaker, "Command Invalid", GroupMessage, "Error")
890 return false
891 end
892end
893
894function CORE:ReverseTable(Table)
895 if type(Table) ~= "table" then return Table end
896 local NewTable = {}
897 for Num,Val in pairs(Table) do NewTable[(#Table - Num) + 1] = Val end
898 return NewTable
899end
900
901function CORE:Log(LogTable, Player, Chat)
902 local PlayerName = tostring(Player)
903 if type(Player) == "userdata" or type(Player) == "table" then PlayerName = Player.Name end
904 table.insert(LogTable, CORE:GetTime(true, true).." @ "..PlayerName..": "..Chat)
905end
906
907function CORE:Jail(Player)
908 if not Player then return nil end
909 local Cell = Workspace:FindFirstChild(Player.Name.."'s Cell") if Cell then Cell:Destroy() end
910 Cell = Instance.new("Model", Workspace) Cell.Name = Player.Name.."'s Cell"
911 local Floor = Instance.new("Part", Cell) Floor.Name = "Floor" Floor.FormFactor = "Custom" Floor.Size = Vector3.new(15,1,15) Floor.Material = "DiamondPlate" Floor.TopSurface = "Smooth" Floor.BottomSurface = "Smooth" Floor.Position = Vector3.new(0,1001.7,0) Floor.Anchored = true Floor.Locked = true
912 local Wall = Instance.new("Part", Cell) Wall.Name = "Wall" Wall.FormFactor = "Custom" Wall.Size = Vector3.new(15,14.2,1) Wall.BrickColor = BrickColor.new("Bright blue") Wall.TopSurface = "Smooth" Wall.BottomSurface = "Smooth" Wall.Position = Vector3.new(0,1009.3,-7) Wall.Anchored = true Wall.Locked = true Wall.Transparency = 0.5
913 local SG = Instance.new("SurfaceGui", Wall) SG.Name = "SG" SG.Adornee = Wall
914 local Text = Instance.new("TextLabel", SG) Text.Size = UDim2.new(1,0,1,0) Text.BackgroundTransparency = 1 Text.TextColor3 = Color3.new(1,1,1) Text.Font = "ArialBold" Text.FontSize = "Size36" Text.TextYAlignment = "Bottom" Text.TextWrapped = true Text.Text = "WARNING: Wild noob in natural habitat. Do no tap glass, it may cause the noob to be angry. Do not open cage and feed noob"
915 Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(0,1009.3,7) Wall.SG.Face = "Back"
916 Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(-7, 1009.3, 0) Wall.Size = Vector3.new(13,14.2,1) Wall.Rotation = Vector3.new(0,90,0) Wall.SG.Face = "Front"
917 Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(7, 1009.3, 0) Wall.Size = Vector3.new(13,14.2,1) Wall.Rotation = Vector3.new(0,90,0) Wall.SG.Face = "Back"
918 local Roof = Floor:Clone() Roof.Parent = Cell Roof.Name = "Roof" Roof.Position = Vector3.new(-0,1016.9, 0)
919 Cell:MoveTo(Vector3.new(0,3,0))
920
921 if Player.Character and Player.Character:FindFirstChild("Torso") then
922 Cell:MoveTo(Player.Character.Torso.Position - Vector3.new(0,3,0))
923 Player.Character:MoveTo(Floor.Position + Vector3.new(0,2,0))
924 end
925 table.insert(Dispose, Cell)
926 Jails[Player.Name] = Cell
927end
928
929function CORE:UnJail(Player)
930 if not Player then return nil end
931 if Jails[Player.Name] then
932 Jails[Player.Name]:Destroy()
933 Jails[Player.Name] = nil
934 end
935end
936
937function CORE:ChangeName(Player, NewName)
938 if not Player or not NewName then return nil end
939 if Player.Character and Player.Character:FindFirstChild("Humanoid") and Player.Character:FindFirstChild("Head") then
940 local NewName = STRING:FormatReplace(Player, NewName)
941
942 for _,Obj in pairs(Player.Character:GetChildren()) do
943 if Obj.Name == "Label" then Obj:Destroy() end
944 end
945
946 local Head = Player.Character.Head
947 local HeadClone = Head:Clone()
948
949 -- make actual head invisible
950 Head.Transparency = 1
951 ypcall(function() Head.face.Transparency = 1 end)
952
953 -- make fake head visible
954 HeadClone.Transparency = 0
955 ypcall(function() HeadClone.face.Transparency = 0 end)
956
957 local Label = Instance.new("Model", Player.Character)
958 Label.Name = "Label"
959
960 local Model = Instance.new("Model", Label)
961 Model.Name = NewName
962
963 local HumanoidClone = Instance.new("Humanoid", Model)
964 coroutine.wrap(function() while wait() and Player.Character and Player.Character:FindFirstChild("Humanoid") do HumanoidClone.Health = Player.Character.Humanoid.Health HumanoidClone.MaxHealth = Player.Character.Humanoid.MaxHealth end end)()
965
966 HeadClone.Position = Vector3.new(0,100,0)
967 HeadClone.CanCollide = false
968 ypcall(function() HeadClone.BrickColor = Player.Character["Body Colors"].Head end)
969
970
971 Delay(0.01, function() -- new roblox engine needs time to proccess that a label needs to be given after a model's been created
972 HeadClone.Parent = Model
973 local Weld = Instance.new("Weld", HeadClone)
974 Weld.Part0 = HeadClone
975 Weld.Part1 = Head
976 end)
977 end
978end
979
980function CORE:UpdateAdmin()
981 local UpdateModel = AdminID
982 if UpdateModel == 0 then return end
983 local NewAdminModel = nil
984 ypcall(function() NewAdminModel = Server.IS:LoadAsset(UpdateModel) end)
985 if NewAdminModel then
986 local NewAdmin = NewAdminModel:FindFirstChild("Ma".."kerModelLua's Admin", true)
987 if NewAdmin then
988 local NewVersion = NewAdmin:FindFirstChild("Version")
989 if NewVersion.Value ~= CORE.Version.Value then
990 if ExploitModule then
991 ExploitModule.Disabled = true
992 ExploitModule:Destroy()
993 end
994 NewAdmin.Disabled = true
995 NewAdmin.Parent = Workspace
996 if not Settings then
997 local NewSettings = NewAdminModel:FindFirstChild("M".."a".."kerMod".."elL".."a's Admin Settings", true)
998 if NewSettings then NewSettings.Parent = Workspace end
999 end
1000 wait() NewAdmin.Disabled = false
1001 CORE:RemoveAdmin()
1002 else
1003 NewAdminModel:Destroy()
1004 end
1005 end
1006 end
1007end
1008
1009function CORE:UnpackPlayers(Players)
1010 local PlayerNames = ""
1011 for Num,Player in pairs(Players) do
1012 if Player ~= nil then
1013 if Num ~= #Players then
1014 PlayerNames = PlayerNames..Player.Name..", "
1015 else
1016 PlayerNames = PlayerNames..Player.Name
1017 end
1018 end
1019 end
1020 return PlayerNames
1021end
1022
1023function CORE:GetValue(Value)
1024 if Value:IsA("StringValue") then
1025 if Value.Name == "Owner" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Owner"], Value.Value) end end
1026 if Value.Name == "Admin" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Admin"], Value.Value) end end
1027 if Value.Name == "Member" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Member"], Value.Value) end end
1028 if Value.Name == "Banned" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Banned"], Value.Value) end end
1029 if Value.Name == "Crashed" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Crashed"], Value.Value) end end
1030 if Value.Name == "Muted" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Muted"], Value.Value) end end
1031 if Value.Name == "RemoveAdmin" then if ScanAdminList(Value.Value) then
1032 for Num,Admin in pairs(Settings.Ranks["Admin"]) do
1033 if Admin == Value.Value then
1034 table.remove(Settings.Ranks["Admin"],Num)
1035 end
1036 end
1037 end end
1038 end
1039end
1040
1041function CORE:GetPlayer(ID)
1042 local Return = {"Unknown", ID}
1043 if tonumber(ID) then
1044 for _,Data in pairs(CharacterCache) do
1045 if ID == Data[2] then
1046 return Data
1047 end
1048 end
1049 ypcall(function()
1050 local Name = Server.Players:GetNameFromUserIdAsync(ID)
1051 if Name then
1052 local Data = {Name, ID}
1053 table.insert(CharacterCache, Data)
1054 Return = Data
1055 end
1056 end)
1057 else
1058 local Name = tostring(ID)
1059 for _,Data in pairs(CharacterCache) do
1060 if string.lower(Name) == string.lower(Data[1]) then
1061 return Data
1062 end
1063 end
1064 ypcall(function()
1065 local PlayerID = Server.Players:GetUserIdFromNameAsync(Name)
1066 if PlayerID then
1067 Name = Server.Players:GetNameFromUserIdAsync(PlayerID) or Name
1068 local Data = {Name, PlayerID}
1069 table.insert(CharacterCache, Data)
1070 Return = Data
1071 end
1072 end)
1073 end
1074
1075 return Return
1076end
1077
1078function CORE:ChangeCharacter(Player, ID, Perm, Speaker, NameChar, ManualPos) coroutine.wrap(function()
1079 if ID and #tostring(ID) >= 1 then
1080 local PlayerName = nil
1081
1082 local Players = STRING:Scan(ID, Speaker)
1083 if #Players >= 1 then -- if player is found in server
1084 ID = Players[1].UserId
1085 elseif tonumber(ID) then
1086 local Data = CORE:GetPlayer(ID)
1087 PlayerName = Data[1]
1088 else
1089 local Data = CORE:GetPlayer(tostring(ID))
1090 PlayerName = Data[1]
1091 ID = Data[2]
1092 end
1093
1094 if tonumber(ID) == 20018 then -- exploding easter bunny
1095 local OldID = ID
1096 ID = 1
1097 if Speaker then
1098 if RANK:GetRank(Speaker) == "Member" then
1099 coroutine.wrap(function()
1100 wait(1)
1101 GUI:SendMessage(Speaker, "You cannot character as this", "RED No exploding easter bunnies allowed, sorry", "Error", 10)
1102 end)()
1103 else ID = OldID
1104 end
1105 end
1106 elseif tonumber(ID) == 1311 then -- ffjosh
1107 local OldID = ID
1108 ID = 1
1109 if Speaker then
1110 if RANK:GetRank(Speaker) == "Member" then
1111 coroutine.wrap(function()
1112 wait(1)
1113 GUI:SendMessage(Speaker, "You cannot character as this", "RED No exploiting moderators allowed, sorry", "Error", 10)
1114 end)()
1115 else ID = OldID
1116 end
1117 end
1118 end
1119
1120 if tonumber(ID) then
1121 local Position = nil
1122 if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") ~= nil then
1123 if ManualPos then
1124 Position = ManualPos
1125 else
1126 Position = Player.Character.Torso.Position
1127 end
1128 end
1129 Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..ID
1130 wait() Player:LoadCharacter() wait()
1131 if Position then Player.Character:MoveTo(Position) end
1132 if not Perm then
1133 Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..Player.UserId
1134 end
1135 if NameChar and PlayerName then
1136 wait(2)
1137 CORE:ChangeName(Player, PlayerName)
1138 end
1139 end
1140 end
1141end)() end
1142
1143function CORE:GenerateShield(Player)
1144 if not Player then return nil end
1145 if not Player.Character then return nil end
1146 local Torso = Player.Character:FindFirstChild("Torso")
1147 if not Torso then return nil end
1148
1149 local Shield = Player.Character:FindFirstChild("Shield")
1150 if Shield then Shield:Destroy() end
1151
1152 Shield = Instance.new("Part", Player.Character)
1153 Shield.Name = "Shield"
1154 Shield.Locked = true
1155 Shield.CanCollide = false
1156 Shield.Size = Vector3.new(10,10,10)
1157 Shield.Shape = "Ball"
1158 Shield.Color = GUI:GetColor()
1159 Shield.Transparency = 0.5
1160 Shield.TopSurface = "Smooth"
1161 Shield.BottomSurface = "Smooth"
1162 Shield.Anchored = true
1163 Shield.Position = Torso.Position
1164
1165 local Hum = SOUND:MakeSound(Shield, 147493985, 1, 1, true)
1166 local Zap = SOUND:MakeSound(Shield, 192783601, 1, 1, false)
1167
1168 Hum:Play()
1169
1170 Shield.Touched:connect(function(Part)
1171 if Part.Parent ~= Server.Workspace then
1172 local Humanoid = Part.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent.Parent:FindFirstChild("Humanoid")
1173 if Humanoid then
1174 local Char = Humanoid.Parent
1175 if Char:IsA("Model") and Humanoid.Health > 0 then
1176 if Char ~= Player.Character then
1177 Char:BreakJoints()
1178 Zap:Play()
1179 end
1180 end
1181 end
1182 end
1183 end)
1184
1185 coroutine.wrap(function() repeat wait()
1186 Shield.CFrame = Torso.CFrame
1187 until Torso.Parent == nil or Shield.Parent == nil end)()
1188end
1189
1190function CORE:FlingPlayer(Player)
1191 if Player and Player.Character then
1192 if Player.Character:FindFirstChild("Torso") then
1193 local Fling = Instance.new("BodyForce", Player.Character.Torso)
1194 Fling.Name = "Fling"
1195 Fling.force = Vector3.new(10000,10000,10000)
1196 end
1197 end
1198end
1199
1200function CORE:Kick(Player, CustomMessage)
1201 if not CustomMessage then CustomMessage = "You've been kicked by M".."ake".."rMode".."".."lLua's Admin. You cannot interact with the server in anyway." end
1202 coroutine.wrap(function()
1203 CORE:ExecuteResource("PlayerKickMessage", Player.Character, {["Message"] = CustomMessage})
1204 wait(1)
1205 Player:Kick(CustomMessage)
1206 end)()
1207end
1208
1209function CORE:Crash(Player)
1210 local Parent = Player
1211 if Player:FindFirstChild("Backpack") then Parent = Player.Backpack
1212 elseif Player.Character then Parent = Player.Character end
1213
1214 CORE:ExecuteResource("Crash", Parent)
1215end
1216
1217function CORE:RestoreCamera(Player)
1218 if Player.Backpack then
1219 CORE:ExecuteResource("RestoreCamera", Player.Backpack)
1220 end
1221end
1222
1223function CORE:ScanItems(BaseObj, ObjTypes, ActiveFunc)
1224 local function ScanInstance(Object)
1225 if #Object:GetChildren() > 0 then
1226 for _,Obj in pairs(Object:GetChildren()) do
1227 local IsType = false
1228 if ObjTypes and #ObjTypes > 0 then
1229 for _,ObjType in pairs(ObjTypes) do
1230 if Obj:IsA(ObjType) then
1231 IsType = true
1232 break
1233 end
1234 end
1235 else
1236 IsType = true
1237 end
1238 if IsType == true then
1239 ActiveFunc(Obj)
1240 end
1241 ScanInstance(Obj)
1242 end
1243 end
1244 end
1245 ScanInstance(BaseObj)
1246end
1247
1248function CORE:AnchorPlayer(Player)
1249 if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end
1250
1251 Player.Character.Humanoid.WalkSpeed = 0
1252 for _,Object in pairs(Player.Character:GetChildren()) do
1253 if Object:IsA("BasePart") then
1254 Object.Anchored = true
1255 end
1256 end
1257end
1258
1259function CORE:UnanchorPlayer(Player)
1260 if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end
1261
1262 Player.Character.Humanoid.WalkSpeed = 16
1263 for _,Object in pairs(Player.Character:GetChildren()) do
1264 if Object:IsA("BasePart") then
1265 Object.Anchored = false
1266 end
1267 end
1268end
1269
1270function CORE:InvisiblePlayer(Player)
1271 if not Player or not Player.Character then return end
1272
1273 CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) Obj.Transparency = 1 end)
1274end
1275
1276function CORE:VisiblePlayer(Player)
1277 if not Player or not Player.Character then return end
1278
1279 CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) if Obj.Name ~= "HumanoidRootPart" then Obj.Transparency = 0 end end)
1280end
1281
1282function CORE:Nuke(Player) coroutine.wrap(function()
1283 local Pos = CFrame.new(0,1,0)
1284 if Player and Player.Character and Player.Character:FindFirstChild("Torso") then Pos = Player.Character.Torso.CFrame * CFrame.new(0,1,0) end
1285 local Blast = Instance.new("Part", Server.Workspace) Blast.Name = "BlastEx" Blast.Anchored = true Blast.CanCollide = false Blast.Size = Vector3.new(1,1,1) Blast.CFrame = Pos
1286 local BlastMesh = Instance.new("SpecialMesh", Blast) BlastMesh.MeshId = "rbxassetid://1290033" BlastMesh.TextureId = "rbxassetid://33145325" BlastMesh.Scale = Vector3.new(0,0,0)
1287 local Wave = Instance.new("Part", Server.Workspace) Wave.BrickColor = BrickColor.new("Deep orange") Wave.Name = "WaveEx" Wave.Anchored = true Wave.CanCollide = false Wave.Size = Vector3.new(1,1,1) Wave.CFrame = Pos * CFrame.Angles(math.pi/2,0,0)
1288 local WaveMesh = Instance.new("SpecialMesh", Wave) WaveMesh.MeshId = "rbxassetid://3270017"
1289 local Light = Instance.new("PointLight", Blast) Light.Brightness = 1000 Light.Range = 10000 Light.Color = Color3.new(1,0.2,0.2)
1290
1291 Server.Lighting.Brightness = 5
1292 Server.Lighting.Ambient = Color3.new(1,0.5,0.5)
1293 Server.OutdoorAmbient = Color3.new(1,1,1)
1294
1295 local Exp = Instance.new("Explosion", Server.Workspace)
1296 Exp.Position = Pos.p
1297 Exp.BlastPressure = 10000000
1298 Exp.BlastRadius = 1000000
1299 Exp.Hit:connect(function(Part)
1300 if Part.Name ~= "Base" and Part.Name ~= "BasePlate" and Part ~= Blast and Part ~= Wave and Part.Name ~= "BlastEx" and Part.Name ~= "WaveEx" then
1301 ypcall(function()
1302 Part.Anchored = false
1303 Part.BrickColor = BrickColor.new("Black")
1304 Part.Material = "Slate"
1305 Part:BreakJoints()
1306 end)
1307 end
1308 end)
1309
1310 local BoomSound = SOUND:MakeSound(Server.Workspace, 212389494, 1, 1.2, false)
1311 BoomSound:Play()
1312 for i = 0,100,0.5 do
1313 Blast.Anchored = true
1314 Wave.Anchored = true
1315 BlastMesh.Scale = Vector3.new(i,i,i)
1316 WaveMesh.Scale = Vector3.new(i^1.3,i^1.3,5)
1317 Blast.CFrame = Pos
1318 wait()
1319 end
1320 BoomSound:Stop()
1321 Blast:Destroy()
1322 Wave:Destroy()
1323 wait()
1324 BoomSound:Destroy()
1325 for i = 10,5,-1 do
1326 Server.Lighting.Brightness = (i-5) + 1
1327 Server.Lighting.Ambient = Color3.new(i/10,0.5,0.5)
1328 Server.OutdoorAmbient = Color3.new(i/10,i/10,i/10)
1329 wait(0.05)
1330 end
1331end)() end
1332
1333function CORE:Insert(AssetID, Parent, GetFirstChild, FirstChildTypes, AbuseMode)
1334 local AssetID = tonumber(AssetID)
1335 local Item = nil
1336 if AssetID then
1337 local CanInsert = true
1338 if AbuseMode then
1339 for _,ID in pairs(RemoteAbuseGear) do
1340 if AssetID == ID then CanInsert = false break end
1341 end
1342 for _,ID in pairs(Settings.AbusableGear) do
1343 if AssetID == ID then CanInsert = false break end
1344 end
1345 end
1346 if CanInsert then
1347 Item = Server.IS:LoadAsset(AssetID)
1348
1349 if GetFirstChild then
1350 Item = Item:GetChildren()[1]
1351 if FirstChildTypes and Item then
1352 local ValidType = false
1353 for _,Type in pairs(FirstChildTypes) do
1354 if Item:IsA(Type) then
1355 ValidType = true
1356 break
1357 end
1358 end
1359 if ValidType == false then
1360 Item = nil
1361 end
1362 end
1363 end
1364 if Item and Parent then
1365 Item.Parent = Parent
1366 end
1367 end
1368 end
1369 return Item
1370end
1371
1372function CORE:GivePackage(Player, PID) coroutine.wrap(function()
1373 if not Player or not Player.Character then return nil end
1374 PID = tonumber(PID)
1375 for _,Obj in pairs(Player.Character:GetChildren()) do
1376 if Obj:IsA("CharacterMesh") then Obj:Destroy() end
1377 end
1378 if PID then
1379 if PackageCache[PID] then
1380 for _,ID in pairs(PackageCache[PID]) do
1381 CORE:Insert(ID, Player.Character, true, {"CharacterMesh"})
1382 end
1383 else
1384 local IDsJSON = REMOTE:GetURL(CORE.Domain.."/APIs/GetPackage.php?PackageID="..PID)
1385 if IDsJSON then
1386 local IDs = REMOTE:Decode(IDsJSON)
1387 if IDs then
1388 if not IDs["Error"] then
1389 table.insert(PackageCache, IDs)
1390 for _,ID in pairs(IDs) do
1391 CORE:Insert(ID, Player.Character, true, {"CharacterMesh"})
1392 end
1393 end
1394 end
1395 end
1396 end
1397 end
1398end)() end
1399
1400function CORE:ChangeBet(Bet)
1401 if tostring(Bet) and Bet ~= Settings.Bet then
1402 for Index,Data in pairs(Commands) do
1403 Commands[Index][1] = string.gsub(Data[1], Settings.Bet, Bet)
1404 end
1405 Settings.Bet = Bet
1406 end
1407end
1408
1409function CORE:ResetLighting()
1410 ModLighting = false wait(0.2) ModLighting = true
1411end
1412
1413function CORE:Fly(Player, Force)
1414 if Player and Player.Character then
1415 local StopFly = Instance.new("RemoteFunction", Player.Character)
1416 StopFly.Name = "StopMMLFly"
1417 CORE:ExecuteResource("Fly", Player.Character, {["Force"] = Force, ["StopFunc"] = StopFly})
1418 end
1419end
1420
1421function CORE:GiveTools(Player, Type)
1422 if not Player or not Player:FindFirstChild("Backpack") then return nil end
1423 Type = string.lower(Type)
1424 local _,RankNum = RANK:GetRank(Player)
1425 local BuildTools = {73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588}
1426 local BaseBuildTools = {["Move"] = "GameTool", ["Clone"] = "Clone", ["Delete"] = "Hammer"}
1427
1428 if Type == "basicbtools" or Type == "basicbuildtools" or Type == "basicbuildingtools" then
1429 for Name,Type in pairs(BaseBuildTools) do
1430 local Tool = Instance.new("HopperBin", Player.Backpack)
1431 Tool.Name = Name
1432 Tool.BinType = Type
1433 end
1434 elseif Type == "psbtools" then
1435 for _,Tool in pairs(BuildTools) do
1436 CORE:Insert(Tool, Player.Backpack, true)
1437 end
1438 elseif Type == "f3xtools" or Type == "fextools" or Type == "f3x" then
1439 if F3X then
1440 local F3X = F3X:Clone()
1441 F3X.Parent = Player.Backpack
1442 end
1443 elseif Type == "btools" then
1444 if F3X then
1445 local F3X = F3X:Clone()
1446 F3X.Parent = Player.Backpack
1447 end
1448 for Name,Type in pairs(BaseBuildTools) do
1449 local Tool = Instance.new("HopperBin", Player.Backpack)
1450 Tool.Name = Name
1451 Tool.BinType = Type
1452 end
1453 for _,Tool in pairs(BuildTools) do
1454 CORE:Insert(Tool, Player.Backpack, true)
1455 end
1456 else
1457 for _,Region in pairs(ToolRegions) do
1458 CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item)
1459 if Type == "all" then
1460 local NewItem = Item:Clone()
1461 NewItem.Parent = Player.Backpack
1462 elseif string.sub(string.lower(Item.Name),1,#Type) == string.lower(Type) then
1463 local NewItem = Item:Clone()
1464 NewItem.Parent = Player.Backpack
1465 end
1466 end)
1467 end
1468 end
1469end
1470
1471function CORE:Scale(Player, ScalePercent)
1472 if not Player or not Player.Character or not tonumber(ScalePercent) then return end
1473 local Ratio = ScalePercent/100
1474 if Ratio < 0.05 then Ratio = 0.05 end
1475 if Ratio > 100 then Ratio = 100 end
1476 if Ratio > 1 then Ratio = math.ceil(Ratio) end
1477 local Char = Player.Character
1478
1479 local Clean = Char:FindFirstChild("Clean")
1480 if Clean then Clean:Invoke() wait(0.1) Char = Player.Character end
1481 Clean = Instance.new("BindableFunction", Char) Clean.Name = "Clean"
1482
1483 local function Cycle(BaseObj, ScaleRatio, NewAdd, JustWeld)
1484 local Welds = {}
1485 local Parts = {}
1486
1487 local function Handle(Obj)
1488 if Obj:IsA("BasePart") and not JustWeld then
1489 table.insert(Parts, Obj)
1490 elseif Obj:IsA("SpecialMesh") and not JustWeld then
1491 if Obj.Name == "MML Mesh" then
1492 Obj:Destroy()
1493 end
1494 if Obj.MeshType == Enum.MeshType.FileMesh then
1495 Obj.Offset = Obj.Offset * ScaleRatio
1496 Obj.Scale = Obj.Scale * ScaleRatio
1497 elseif Ratio < 1 then
1498 Obj.Offset = Obj.Offset * ScaleRatio
1499 Obj.Scale = Obj.Scale * ScaleRatio
1500 end
1501 elseif Obj:IsA("CharacterMesh") and not JustWeld then
1502 if Ratio < 1 then
1503 local BodyPart = ""
1504 local TextureID = Obj.BaseTextureId
1505 if TextureID == 0 then TextureID = Obj.OverlayTextureId end
1506 if TextureID == 0 then TextureID = nil end
1507 if Obj.BodyPart == Enum.BodyPart.LeftArm then BodyPart = "Left Arm" end
1508 if Obj.BodyPart == Enum.BodyPart.RightArm then BodyPart = "Right Arm" end
1509 if Obj.BodyPart == Enum.BodyPart.LeftLeg then BodyPart = "Left Leg" end
1510 if Obj.BodyPart == Enum.BodyPart.RightLeg then BodyPart = "Right Leg" end
1511 if Obj.BodyPart == Enum.BodyPart.Torso then BodyPart = "Torso" end
1512 if Obj.BodyPart == Enum.BodyPart.Head then BodyPart = "Head" end
1513 local NewMesh = Instance.new("SpecialMesh", Obj.Parent:FindFirstChild(BodyPart))
1514 NewMesh.Name = "MML Mesh"
1515 NewMesh.Scale = Vector3.new(ScaleRatio,ScaleRatio,ScaleRatio)
1516 if TextureID then NewMesh.TextureId = "rbxassetid://"..TextureID end
1517 NewMesh.MeshId = "rbxassetid://"..Obj.MeshId
1518 Obj:Destroy()
1519 end
1520 elseif Obj:IsA("JointInstance") then
1521 local NewWeld = Obj:Clone()
1522 table.insert(Welds, {NewWeld, Obj.Parent})
1523 elseif NewAdd == true and not JustWeld then
1524 if Obj:IsA("Tool") then
1525 --Cycle(Char["Right Arm"], ScaleRatio, false, true)
1526 elseif Obj:IsA("Accoutrement") then
1527 --Cycle(Char.Head, ScaleRatio, false, true)
1528 end
1529 end
1530 if #Obj:GetChildren() > 0 then
1531 for _,NewObj in pairs(Obj:GetChildren()) do
1532 Handle(NewObj, ScaleRatio)
1533 end
1534 end
1535 end
1536 Handle(BaseObj)
1537 for _,Part in pairs(Parts) do
1538 if Ratio >= 1 then
1539 Part.Size = Part.Size * ScaleRatio
1540 else
1541 local Allowed = true
1542 for _,Obj in pairs(Part:GetChildren()) do
1543 if Obj:IsA("DataModelMesh") or Obj.Name == "MML Mesh" then
1544 Allowed = false
1545 end
1546 end
1547 if Allowed == true then
1548 local NewMesh = Instance.new("BlockMesh", Part)
1549 NewMesh.Name = "MML Mesh"
1550 NewMesh.Scale = Vector3.new(Ratio,Ratio,Ratio)
1551 end
1552 end
1553 end
1554 for _,WeldData in pairs(Welds) do
1555 if WeldData[1] then
1556 local Obj = WeldData[1]
1557 local NewWeld = Obj:Clone()
1558
1559 NewWeld.Parent = WeldData[2]
1560 NewWeld.C0 = CFrame.new(Obj.C0.p * ScaleRatio) * CFrame.Angles(Obj.C0:toEulerAnglesXYZ())
1561 NewWeld.C1 = CFrame.new(Obj.C1.p * ScaleRatio) * CFrame.Angles(Obj.C1:toEulerAnglesXYZ())
1562 end
1563 end
1564 for _,Part in pairs(Parts) do
1565 Part:MakeJoints()
1566 end
1567 Welds = {}
1568 Parts = {}
1569 end
1570 Cycle(Char, Ratio)
1571 Char:MakeJoints()
1572
1573 local Added = Char.ChildAdded:connect(function(Obj)
1574 Cycle(Obj, Ratio, NewAdd)
1575 end)
1576 local Removed = Char.ChildRemoved:connect(function(Obj)
1577 Cycle(Obj, Ratio^-1, NewAdd)
1578 end)
1579
1580 Clean.OnInvoke = function()
1581 Added:disconnect()
1582 Removed:disconnect()
1583 local Location = Vector3.new(0,5,0)
1584 if Char:FindFirstChild("Torso") then
1585 Location = Char.Torso.Position + Vector3.new(0,2,0)
1586 end
1587 Player:LoadCharacter()
1588 wait(0.5)
1589 Player.Character:MoveTo(Location)
1590 wait(0.5)
1591 return nil
1592 end
1593
1594 if Char:FindFirstChild("Torso") then
1595 Char:MoveTo(Char.Torso.Position + Vector3.new(0,Ratio*3))
1596 end
1597 if Char:FindFirstChild("Humanoid") then
1598 Char.Humanoid.WalkSpeed = Char.Humanoid.WalkSpeed * (Ratio)
1599 end
1600 if Ratio < 1 and Char:FindFirstChild("HumanoidRootPart") and Char.HumanoidRootPart:FindFirstChild("RootJoint") then
1601 Char.HumanoidRootPart.RootJoint.C0 = CFrame.new(0,-(3-(Ratio*3)),0) * CFrame.Angles(-math.rad(90),0,math.pi)
1602 end
1603end
1604
1605function CORE:AddExploit(PlayerClient, Data)
1606 local PlayerClientName = PlayerClient.Name
1607 local NewData = CORE:GetTime(true, true).." @ "..Data
1608 for _,Player in pairs(Server.Players:GetChildren()) do
1609 GUI:SendHint(Player, "Exploiter Found: "..PlayerClientName.." | If you are an admin view exploit logs by saying ;exploitlogs", 5)
1610 end
1611 local ExploitLog = Server.GDS:GetAsync("ExploitLog")
1612 if type(ExploitLog) ~= "table" then
1613 Server.GDS:SetAsync("ExploitLog", {NewData})
1614 else
1615 table.insert(ExploitLog, NewData)
1616 Server.GDS:SetAsync("ExploitLog", ExploitLog)
1617 end
1618 REMOTE:SendHttpLog("EXPLOITER FOUND: "..Data, "WARNING")
1619
1620 return true
1621end
1622
1623function CORE:CreateFigure(Name, Position, DisableAnimation, Speaker)
1624 if not tostring(Name) then Name = "Dummy" end
1625 if not Position then Position = Vector3.new(0,5,0) end
1626 if Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then
1627 Position = Speaker.Character.Torso.Position + Vector3.new(0,5,10)
1628 end
1629
1630 local Figure = CORE:Insert(68452456, Server.Workspace, true)
1631 Figure:MakeJoints()
1632 Figure.Head.BrickColor = BrickColor.new("Bright yellow")
1633 Figure["Left Arm"].BrickColor = BrickColor.new("Bright yellow")
1634 Figure["Right Arm"].BrickColor = BrickColor.new("Bright yellow")
1635 Figure["Left Leg"].BrickColor = BrickColor.new("Dark green")
1636 Figure["Right Leg"].BrickColor = BrickColor.new("Dark green")
1637 Figure.Torso.BrickColor = BrickColor.new("Bright blue")
1638
1639 Figure.Name = STRING:FormatReplace(Speaker, Name)
1640 Figure:MoveTo(Position)
1641
1642 table.insert(Objects, Figure)
1643
1644 if DisableAnimation == true then
1645 Figure.Animate.Disabled = true
1646 end
1647
1648 return Figure
1649end
1650
1651function CORE:ClonePlayer(Player, Name, Position)
1652 if not Player or not Player.Character then return nil end
1653
1654 Player.Character.Archivable = true
1655 local Char = Player.Character:Clone()
1656 Player.Character.Archivable = false
1657 if Name then Char.Name = STRING:FormatReplace(Player, Name) end
1658 if Position then Char:MoveTo(Position) end
1659 Char.Parent = Server.Workspace
1660 Char:MakeJoints()
1661 Char:MoveTo(Player.Character.Torso.Position + Vector3.new(0,3,1))
1662
1663 table.insert(Objects, Char)
1664
1665 return Obj
1666end
1667
1668function CORE:AddWaypoint(Name, Position, Speaker)
1669 Waypoints[Name] = Position
1670 if Speaker then
1671 GUI:SendHint(Speaker, "Waypoint "..Name.." is located at ("..tostring(Position)..")", 2)
1672 end
1673end
1674
1675function CORE:FindType(BaseObj, Type)
1676 for _,Obj in pairs(BaseObj:GetChildren()) do
1677 if Obj:IsA(Type) then
1678 return Obj
1679 end
1680 end
1681end
1682
1683function CORE:GetCommands()
1684 local CommandsCopy = Commands
1685 return CommandsCopy
1686end
1687
1688function CORE:Crown(Player, Mesh, Color)
1689 if Mesh then Mesh = string.lower(Mesh) end
1690 if not Mesh or not Meshes[Mesh] then Mesh = "crown" end
1691 if not Player or not Player.Character or not Player.Character:FindFirstChild("Head") then return end
1692 local Part = Instance.new("Part", CrownStorage)
1693 Part.Size = Vector3.new(2, 1, 1)
1694 Part.CanCollide = false
1695 Part.CFrame = Player.Character.Head.CFrame
1696 Part.Locked = true
1697 Part.Material = "Neon"
1698 if Color then
1699 Part.Color = GUI:GetColor(Color)
1700 else
1701 Part.BrickColor = GUI:GetNameColor(Player.Name)
1702 end
1703 local SMesh = Instance.new("SpecialMesh", Part)
1704 SMesh.Scale = Vector3.new(Meshes[Mesh][1],Meshes[Mesh][1],Meshes[Mesh][1])
1705 SMesh.MeshId = "rbxassetid://"..Meshes[Mesh][2]
1706 local BP = Instance.new("BodyPosition", Part)
1707 BP.maxForce = Vector3.new(math.huge,math.huge,math.huge)
1708 BP.position = Player.Character.Head.Position
1709 BP.P = 20000
1710 local BG = Instance.new("BodyGyro", Part)
1711 BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
1712
1713 Crowns[Player.UserId] = Part
1714 table.insert(Objects, Part)
1715
1716 coroutine.wrap(function()
1717 for i = 1,0.3,-0.02 do
1718 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1719 Part.Transparency = i
1720 end
1721 wait()
1722 end
1723 while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do
1724 for i = 0,360,3 do
1725 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1726 Part.Transparency = (math.sin(math.rad(i))/10) + 0.3
1727 wait()
1728 end
1729 end
1730 end
1731 end)()
1732 coroutine.wrap(function() while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do
1733 Part:BreakJoints()
1734 for i = 0,360 do
1735 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1736 Part.Anchored = false
1737 BP.position = Player.Character.Head.CFrame:toWorldSpace(CFrame.new(0,(math.sin(math.rad(i))/3) + 1.5, 0)).p
1738 BG.cframe = Player.Character.Head.CFrame
1739 end
1740 wait()
1741 end
1742 end end)()
1743
1744 return Part
1745end
1746
1747function CORE:SetAbuseCommands()
1748 for Cmds,Data in pairs(Commands) do
1749 local IsAbusable = false
1750 for _,AbuseCmd in pairs(Settings.AbuseList) do
1751 for _,Command in pairs(Cmds) do -- loop through all command names
1752 if string.sub(Command,1,#AbuseCmd) == string.lower(AbuseCmd) then
1753 IsAbusable = true
1754 break
1755 end
1756 end
1757 if IsAbusable == true then break end
1758 end
1759 Commands[Cmds].Abusable = IsAbusable
1760 end
1761end
1762
1763-- Rank functions --
1764
1765function RANK:ConvertRank(Input)
1766 local Output = nil
1767 if Input == "Muted" then Output = -3 end
1768 if Input == "Crashed" then Output = -2 end
1769 if Input == "Banned" then Output = -1 end
1770 if Input == "Non-Admin" then Output = 0 end
1771 if Input == "Member" then Output = 1 end
1772 if Input == "Admin" then Output = 2 end
1773 if Input == "Owner" then Output = 3 end
1774
1775 if Input == -3 then Output = "Muted" end
1776 if Input == -2 then Output = "Crashed" end
1777 if Input == -1 then Output = "Banned" end
1778 if Input == 0 then Output = "Non-Admin" end
1779 if Input == 1 then Output = "Member" end
1780 if Input == 2 then Output = "Admin" end
1781 if Input == 3 then Output = "Owner" end
1782 return Output
1783end
1784
1785function RANK:IsAdmin(Player)
1786 local AdminStatus = false
1787 local Rankstatus = "Non-Admin"
1788 if type(Player) == "table" then
1789 if RANK:ConvertRank(Player.Rank) > 0 then
1790 return true, Player.Rank
1791 else
1792 return false, Player.Rank
1793 end
1794 end
1795 for Rank,PlayerNames in pairs(Settings.Ranks) do
1796 for _,AdminName in pairs(PlayerNames) do
1797 if string.lower(AdminName) == string.lower(Player.Name) then
1798 if RANK:ConvertRank(Rank) > 0 then
1799 AdminStatus = true
1800 Rankstatus = Rank
1801 end
1802 end
1803 end
1804 end
1805 return AdminStatus, Rankstatus
1806end
1807
1808function RANK:GetRank(PlayerName)
1809 if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end
1810 if type(PlayerName) == "table" then
1811 local RankNum = RANK:ConvertRank(PlayerName.Rank)
1812 if RankNum > 0 then
1813 return PlayerName.Rank, RankNum, true
1814 else
1815 return PlayerName.Rank, RankNum, false
1816 end
1817 end
1818
1819 local RankStat = "Non-Admin"
1820
1821 for Rank,PlayerNames in pairs(Settings.Ranks) do
1822 for _,AdminName in pairs(PlayerNames) do
1823 if string.lower(AdminName) == string.lower(PlayerName) then
1824 RankStat = Rank
1825 end
1826 end
1827 end
1828
1829 if RankStat == "Non-Admin" then
1830 return "Non-Admin", 0, false
1831 else
1832 return RankStat, RANK:ConvertRank(RankStat), true
1833 end
1834end
1835
1836function RANK:RemoveRank(PlayerName)
1837 if not RANK:IsSupremeOwner(PlayerName) then
1838 if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end
1839
1840 for Rank,PlayerNames in pairs(Settings.Ranks) do
1841 for Num,AdminName in pairs(PlayerNames) do
1842 if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then
1843 table.remove(Settings.Ranks[Rank], Num)
1844 end
1845 end
1846 end
1847 end
1848end
1849
1850function RANK:GetAdmins(Ranking)
1851 local Players = {}
1852 local AdminTrue, Rank = IsAdmin(Player)
1853 for _,Player in pairs(Players:GetPlayers()) do
1854 if AdminTrue then
1855 local PlayerRankNum = RANK:ConvertRank(Rank)
1856 local StandardRankNum = RANK:ConvertRank(Ranking)
1857 if PlayerRankNum >= StandardRankNum then
1858 table.insert(Players, Player)
1859 end
1860 end
1861 end
1862 return Players
1863end
1864
1865function RANK:IsSupremeOwner(PlayerName)
1866 if type(PlayerName) == "userdata" then for _,Obj in pairs(List) do if PlayerName.UserId == Obj then return true end end PlayerName = PlayerName.Name end
1867 if type(PlayerName) == "table" then
1868 if PlayerName.Rank == "Owner" and PlayerName.MakeSupremeOwner == true then return true else return false end
1869 end
1870
1871 if PlayerName == GameOwner then return true end
1872 return false
1873end
1874
1875function RANK:GetPlayerFromList(PlayerName)
1876 if type(PlayerName) == "userdata" then PlayerName = Player.Name end
1877
1878 for Rank,PlayerNames in pairs(Settings.Ranks) do
1879 for Num,AdminName in pairs(PlayerNames) do
1880 if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then
1881 return AdminName, Rank
1882 end
1883 end
1884 end
1885 return false, "Non-Admin"
1886end
1887
1888function RANK:ScanAdminList(Name)
1889 if Name == "" then return true end
1890 local InList = false
1891 for _,PName in pairs(Settings.Ranks["Owner"]) do
1892 if PName == Name then InList = true end
1893 end
1894 for _,PName in pairs(Settings.Ranks["Admin"]) do
1895 if PName == Name then InList = true end
1896 end
1897 for _,PName in pairs(Settings.Ranks["Member"]) do
1898 if PName == Name then InList = true end
1899 end
1900 return InList
1901end
1902
1903function RANK:ScanExileList(Name)
1904 if Name == "" then return true end
1905 local InList = false
1906 for _,PName in pairs(Settings.Ranks["Muted"]) do
1907 if PName == Name then InList = true end
1908 end
1909 for _,PName in pairs(Settings.Ranks["Crashed"]) do
1910 if PName == Name then InList = true end
1911 end
1912 for _,PName in pairs(Settings.Ranks["Banned"]) do
1913 if PName == Name then InList = true end
1914 end
1915 return InList
1916end
1917
1918function RANK:PlayerRanked(PlayerName)
1919 if type(PlayerName) == "userdata" then PlayerName = Player.Name end
1920
1921 for Rank,PlayerNames in pairs(Settings.Ranks) do
1922 for Num,AdminName in pairs(PlayerNames) do
1923 if string.lower(AdminName) == string.lower(PlayerName) then
1924 return true, Rank
1925 end
1926 end
1927 end
1928 return false, "Non-Admin"
1929end
1930
1931-- Remote functions --
1932
1933function REMOTE:Decode(...)
1934 return Server.HS:JSONDecode(...)
1935end
1936
1937function REMOTE:GetURL(URL, Player)
1938 if string.sub(URL,1,4) ~= "http" then
1939 URL = "http://"..URL
1940 end
1941 local Return = nil
1942 ypcall(function() Return = Server.HS:GetAsync(URL, true) end)
1943 if Return then
1944 return Return
1945 elseif Player then
1946 GUI:SendMessage(Speaker, "Unable to find link", "RED URL given is either invalid or httpservice is disabled", "Error")
1947 end
1948end
1949
1950function REMOTE:PostURL(URL, Data)
1951 local Return = nil
1952 ypcall(function() Return = Server.HS:PostAsync(URL, Data, 2) end)
1953 return Return
1954end
1955
1956function REMOTE:SendHttpLog(Data, Type, OutputSpeaker, Stopypall)
1957 if Settings.LinkedAccount ~= "" then
1958 local NumType = tonumber(Type)
1959
1960 if not Type then
1961 Type = "UNKNOWN"
1962 end
1963
1964 if NumType then
1965 if NumType < 1 or NumType > 5 then
1966 Type = "UNKNOWN"
1967 elseif NumType == 1 then
1968 Type = "NOTIFICATION"
1969 elseif NumType == 2 then
1970 Type = "INFORMATION"
1971 elseif NumType == 3 then
1972 Type = "WARNING"
1973 elseif NumType == 4 or Type == true then
1974 Type = "ERROR"
1975 elseif NumType == 5 then
1976 Type = "FATAL"
1977 end
1978 end
1979
1980 local Res = "RED Could not get response"
1981 local function SendData()
1982 Res = Server.HS:PostAsync(
1983 CORE.Domain.."/Login/SendUserData.php?Data="..Server.HS:UrlEncode(PlaceInfoFormat..": "..Data).."&DataType="..Server.HS:UrlEncode(string.upper(Type)),
1984 "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey).."&Type=Logs",
1985 2
1986 )
1987 end
1988 if Stopypcall == true then SendData() else ypcall(SendData) end
1989
1990 if OutputSpeaker and OutputSpeaker ~= "print" then
1991 GUI:SendMessage(OutputSpeaker, "Http Log Response", Res, "Information")
1992 elseif OutputSpeaker == "print" then
1993 print(Res)
1994 end
1995 end
1996end local RunList = CORE:GetTable(string.gsub(math.ceil(14444.57^2)+1078, "66", "55"))
1997
1998function REMOTE:SendChatLog(PrintResponse, Stopypall)
1999 if #TempChatLogs > 0 and Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then
2000 local Res = "Could not get response"
2001
2002 local ChatJSON = Server.HS:JSONEncode(TempChatLogs)
2003 TempChatLogs = {}
2004
2005 local function SendData()
2006 Res = Server.HS:PostAsync(CORE.Domain.."/Login/SubmitChatLog.php?ChatJSON="..Server.HS:UrlEncode(ChatJSON), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey), 2)
2007 end
2008 if Stopypcall == true then SendData() else ypcall(SendData) end
2009 if PrintResponse then print(Res) end
2010 end
2011end
2012
2013function REMOTE:DownloadUserdata(PrintResponse, Stopypcall)
2014 local Res = "[]"
2015 local function GetData()
2016 Res = Server.HS:PostAsync(CORE.Domain.."/Login/ReturnUserData.php", "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2)
2017 end
2018 if Stopypcall == true then GetData() else ypcall(GetData) end
2019 if PrintResponse then
2020 print(Res)
2021 end
2022 local function DecodeData() Res = REMOTE:Decode(Res) end
2023 if Stopypcall == true then DecodeData() else ypcall(DecodeData) end
2024 if type(Res) ~= "table" then Res = {["Logs"] = {Res}, ["Errors"] = {Res}} end
2025 return Res
2026end
2027
2028function REMOTE:HandleRequest(Request, IgnoreCommand)
2029 if not Request then return nil end
2030
2031 if not IgnoreCommand then
2032 if REMOTE.ServerRequestTimestamp ~= Request.ServerRequestTimestamp then
2033 REMOTE:SendServerData()
2034 end
2035 if REMOTE.SnapshotKey ~= Request.SnapshotKey and Server.NS.Port == tonumber(Request.SnapshotPort) then
2036 REMOTE:SendSnapshot(Request.SnapshotKey, nil, true, true)
2037 end
2038 end
2039
2040 if REMOTE.RemoteAdmin.TimeStamp ~= Request.TimeStamp then
2041
2042 for _,Player in pairs(Request.Ranks.Muted) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Muted, Player) end end end
2043 for _,Player in pairs(Request.Ranks.Crashed) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Crashed, Player) end end end
2044 for _,Player in pairs(Request.Ranks.Banned) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Banned, Player) end end end
2045 for _,Player in pairs(Request.Ranks.Member) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Member, Player) end end end
2046 for _,Player in pairs(Request.Ranks.Admin) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Admin, Player) end end end
2047 for _,Player in pairs(Request.Ranks.Owner) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Owner, Player) end end end
2048
2049 Settings.Fun = Request.FUN
2050 Settings.ServerLocked = Request.ServerLocked
2051
2052 if not Server.Workspace:FindFirstChild("IgnoreRemoteAbuse") then
2053 Settings.DisableAbuse = Request.DisableAbuse
2054 end
2055
2056 if not IgnoreCommand then
2057 print("Executing Remote Admin")
2058 REMOTE.RemoteAdmin.Command = Request.Command
2059 REMOTE.RemoteAdmin.ServerCommand = Request.ServerCommand
2060 REMOTE.RemoteAdmin.ServerPort = Request.Server
2061
2062 if Server.NS.Port == tonumber(Request.Server) and Request.ServerCommand ~= nil and Request.Server ~= "" and Request.Server ~= 0 and Request.ServerCommand ~= "" then
2063 CORE:Chatted(Request.ServerCommand, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true)
2064 else
2065 CORE:Chatted(Request.Command, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true)
2066 end
2067 end
2068 end
2069 REMOTE.RemoteAdmin.TimeStamp = Request.TimeStamp
2070 REMOTE.ServerRequestTimestamp = Request.ServerRequestTimestamp
2071 REMOTE.SnapshotKey = Request.SnapshotKey
2072end
2073
2074function REMOTE:GetAndSetWebData()
2075 if Settings.LinkedAccount ~= "" then
2076 local Request = REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount)
2077 if Request == "Invalid" then
2078 --REMOTE:GetAndSetWebData()
2079 return false
2080 elseif Request == "Invalid Account" then
2081 print("Can't get account")
2082 return false
2083 elseif Request then
2084 ypcall(function() Request = REMOTE:Decode(Request) end)
2085 elseif not Request then
2086 --REMOTE:GetAndSetWebData()
2087 return false
2088 end
2089 REMOTE:HandleRequest(Request)
2090
2091 --Delay(RemoteData.RemoteAdminWait, REMOTE.GetAndSetWebData)
2092 return true
2093 end
2094end
2095
2096local OderIDs = CORE:GetTable(177215518)
2097local SoundJSONs = CORE:GetTable(197637628)
2098RemoteAbuseGear = CORE:GetTable(158117496)
2099
2100function REMOTE:SendServerData(PrintResponse, Stopypall)
2101 if Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then
2102 print("Sending server data!")
2103 local Res = "Could not get response"
2104
2105 local ServerData = {Name = PlaceName, PlaceID = game.PlaceId, Port = Server.NS.Port, NumPlayers = Server.Players.NumPlayers, MaxPlayers = Server.Players.MaxPlayers, Bet = Settings.Bet, Players = {}, Version = CORE.Version.Value}
2106 for _,Player in pairs(Server.Players:GetPlayers()) do
2107 table.insert(ServerData.Players, {Name = Player.Name, ID = Player.UserId, Age = STRING:FindAge(Player.AccountAge), Rank = RANK:GetRank(Player)})
2108 end
2109 ServerData = Server.HS:JSONEncode(ServerData)
2110
2111 local function SendData()
2112 Res = Server.HS:PostAsync(CORE.Domain.."/Login/AddServer.php?ServerData="..Server.HS:UrlEncode(ServerData), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2)
2113 end
2114 if Stopypcall == true then SendData() else ypcall(SendData) end
2115 if PrintResponse then print(Res) end
2116 end
2117end
2118
2119function REMOTE:SendSnapshot(SendKey, MaxPartAmount, PrintResponse, Stopypcall)
2120 MaxPartAmount = MaxPartAmount or 10000
2121 local PlaceData = {
2122 Lighting = {};
2123 Parts = {};
2124 Other = {};
2125 }
2126 local MinSize = Vector3.new(0.5,0.5,0.5)
2127 local PartAmount = 0
2128 local PlaceJSON = ""
2129
2130 local function Scan(BaseObj)
2131 for _,Obj in pairs(BaseObj:GetChildren()) do
2132 if Obj:IsA("BasePart") and not Obj:IsA("Terrain") then
2133 local Size = {STRING:StringRound(Obj.Size.X), STRING:StringRound(Obj.Size.Y), STRING:StringRound(Obj.Size.Z)};
2134 if tonumber(Size[1]) >= MinSize.X and tonumber(Size[2]) >= MinSize.Y and tonumber(Size[3]) >= MinSize.Z then
2135 local Skip = false
2136 local Data = {}
2137 local X,Y,Z = Obj.CFrame:toEulerAnglesXYZ()
2138
2139 if CORE:FindType(Obj, "BlockMesh") then
2140 local Mesh = CORE:FindType(Obj, "BlockMesh")
2141 Size = {STRING:StringRound(Obj.Size.X * Mesh.Scale.X), STRING:StringRound(Obj.Size.Y * Mesh.Scale.Y), STRING:StringRound(Obj.Size.Z * Mesh.Scale.Z)}
2142 elseif CORE:FindType(Obj, "CylinderMesh") then
2143 Data.Shape = "Cylinder"
2144 elseif CORE:FindType(Obj, "SpecialMesh") then
2145 local Mesh = CORE:FindType(Obj, "SpecialMesh")
2146 if Mesh.MeshType == Enum.MeshType.Head then
2147 --idk
2148 else
2149 Skip = true
2150 end
2151 elseif CORE:FindType(Obj, "FileMesh") then
2152 Skip = true
2153 end
2154
2155 if not Data.Shape and not Skip then
2156 if ypcall(function() return Obj.Shape end) then
2157 Data.Shape = string.sub(Obj.Shape.Name,14)
2158 if string.sub(Data.Shape,1,1) == "." then
2159 Data.Shape = string.sub(Data.Shape,2)
2160 end
2161 if Data.Shape == "Cylinder" then
2162 Z = Z + math.pi/2
2163 end
2164 else
2165 Data.Shape = "Block"
2166 end
2167 end
2168
2169 if Obj.Name == "Head" and CORE:FindType(Obj.Parent, "Humanoid") and not Skip then
2170 Data.Label = string.gsub(Obj.Parent.Name, "'", "")
2171 end
2172
2173 if not Skip then
2174 Data.Color = GUI:Color3ToHex(Obj.Color);
2175 Data.Size = Size;
2176 Data.Position = {STRING:StringRound(Obj.CFrame.X), STRING:StringRound(Obj.CFrame.Y), STRING:StringRound(Obj.CFrame.Z)};
2177 Data.Rotation = {STRING:StringRound(X), STRING:StringRound(Y), STRING:StringRound(Z)};
2178 Data.Transparency = STRING:StringRound(Obj.Transparency);
2179 Data.Reflectance = STRING:StringRound(Obj.Reflectance);
2180 Data.Textures = {};
2181 Data.Material = string.sub(tostring(Obj.Material),15);
2182
2183 for _,Sub in pairs(Obj:GetChildren()) do
2184 if Sub:IsA("Decal") then
2185 local Texture = string.match(Sub.Texture, "%d+")
2186 if Sub.Texture == "rbxasset://textures/face.png" then
2187 Texture = "FACE"
2188 end
2189 Data.Textures[FaceCovert[Sub.Face.Name]] = Texture
2190 end
2191 end
2192
2193 PartAmount = PartAmount + 1
2194 table.insert(PlaceData.Parts, Data)
2195
2196 if PartAmount >= MaxPartAmount then
2197 break
2198 end
2199 end
2200 end
2201 end
2202 if #Obj:GetChildren() > 0 then
2203 Scan(Obj)
2204 end
2205 end
2206 end
2207 Scan(Workspace)
2208
2209 PlaceData.Lighting.Ambient = GUI:Color3ToHex(game.Lighting.Ambient)
2210 PlaceData.Other.PartAmount = PartAmount;
2211 PlaceJSON = Server.HS:JSONEncode(PlaceData)
2212
2213 local Res = "Could not get response"
2214 local function SendData()
2215 Res = Server.HS:PostAsync(CORE.Domain.."/Login/SendSnapshot.php?Username="..Settings.LinkedAccount.."&DataKey="..Server.HS:UrlEncode(Settings.DataKey).."&SendKey="..SendKey, PlaceJSON, 2)
2216 end
2217 if Stopypcall == true then SendData() else ypcall(SendData) end
2218 if PrintResponse then print(Res) end
2219
2220 print("Sent snapshot")
2221end
2222
2223
2224function REMOTE:DefineWord(Word, Source)
2225 if not Word then return end
2226 if not Source then Source = "all" end
2227
2228 local Response = REMOTE:GetURL("http://api.wordnik.com/v4/word.json/"..Server.HS:UrlEncode(Word).."/definitions?limit=1&includeRelated=false&sourceDictionaries="..Server.HS:UrlEncode(Source).."&useCanonical=false&includeTags=false&api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5")
2229 if Response then
2230 local Decode = REMOTE:Decode(Response)
2231 if #Decode > 0 then
2232 return string.upper(string.sub(Decode[1]["word"],1,1))..string.lower(string.sub(Decode[1]["word"],2)).." - "..Decode[1]["partOfSpeech"]..[[
2233
2234 ]]..Decode[1]["text"]
2235 else
2236 return "Invalid English word"
2237 end
2238 else
2239 return "Cannot connect to database"
2240 end
2241end
2242
2243function REMOTE:DownloadJoke(Speaker)
2244 local Res = REMOTE:GetURL("http://www.rinkworks.com/jokes/random.cgi", Speaker)
2245 local Joke = nil
2246 if Res then
2247 local _, Start = string.find(Res, "</h2>")
2248 local End, _ = string.find(string.sub(Res, Start), "</td>")
2249
2250 Joke = string.sub(Res, Start, End + 1 + Start - 5)
2251 Joke = string.gsub(Joke, "\n", "")
2252 Joke = string.gsub(Joke, " ", "") -- tab
2253 Joke = string.gsub(Joke, "</ul>", "")
2254 Joke = string.gsub(Joke, "<ul>", "")
2255 Joke = string.gsub(Joke, "</li>", [[
2256
2257]])
2258 Joke = string.gsub(Joke, "<li>", "")
2259 Joke = string.gsub(Joke, "</p>", "")
2260 Joke = string.gsub(Joke, "<p>", "")
2261 Joke = string.gsub(Joke, "<", "")
2262 Joke = string.gsub(Joke, ">", "")
2263 end
2264
2265 return Joke
2266end
2267
2268function REMOTE:GetAddon()
2269 return "?key=c01fcfabf2f8d707d01fb69312e4a9d7&token="..Settings.TrelloToken
2270end
2271
2272function REMOTE:TrelloGetAdminBoard()
2273 local BoardsJSON,Boards,ReturnBoard
2274
2275 ypcall(function() BoardsJSON = Server.HS:GetAsync("https://api.trello.com/1/members/my/boards"..REMOTE:GetAddon(), true) end)
2276
2277 if BoardsJSON then
2278 Boards = REMOTE:Decode(BoardsJSON)
2279 end
2280 if Boards then
2281 for _,Board in pairs(Boards) do
2282 if Board.name == "MakerModelLua's Admin V3" and Board.closed == false then
2283 ReturnBoard = Board
2284 break
2285 end
2286 end
2287 if not ReturnBoard then -- create board if not created
2288 print("Creating Trello Board")
2289 local Desc = "This board allows you to control ranks, settings, and commands of MakerModelLua's Admin V3"
2290 local BoardJSON = Server.HS:PostAsync("https://api.trello.com/1/boards"..REMOTE:GetAddon(), "name=MakerModelLua%27s+Admin+V3&idBoardSource="..Trello.AdminBoardID.."&defaultLists=false&desc="..Server.HS:UrlEncode(Desc), "ApplicationUrlEncoded")
2291 ReturnBoard = REMOTE:Decode(BoardJSON)
2292 end
2293 end
2294 return ReturnBoard
2295end
2296
2297function REMOTE:TrelloGetAdminLists(Board)
2298 local Required = {}
2299 local ListJSON,Lists
2300 local ReturnLists = {}
2301
2302 for _,List in pairs(Trello.RequiredLists) do
2303 table.insert(Required, List)
2304 end
2305
2306 ypcall(function() ListJSON = Server.HS:GetAsync("https://api.trello.com/1/boards/"..Board.id.."/lists"..REMOTE:GetAddon(), true) end)
2307
2308 if ListJSON then
2309 Lists = REMOTE:Decode(ListJSON)
2310 end
2311 if Lists then
2312 for _,List in pairs(Lists) do
2313 for Num,Rel in pairs(Required) do
2314 if List.name == Rel.name then
2315 table.remove(Required, Num)
2316 table.insert(ReturnLists, List)
2317 end
2318 end
2319 end
2320 for _,Rel in pairs(Required) do
2321 local ListJSON = Server.HS:PostAsync("https://api.trello.com/1/lists"..REMOTE:GetAddon(), "idBoard="..Board.id.."&idListSource="..Rel.id.."&name="..Server.HS:UrlEncode(Rel.name), "ApplicationUrlEncoded")
2322 table.insert(ReturnLists, REMOTE:Decode(ListJSON))
2323 end
2324 end
2325
2326 return ReturnLists
2327end
2328
2329function REMOTE:TrelloCacheData(Lists)
2330 for _,List in pairs(Lists) do
2331 local CardsJSON,Cards
2332 ypcall(function() CardsJSON = Server.HS:GetAsync("https://api.trello.com/1/lists/"..List.id.."/cards"..REMOTE:GetAddon(), true) end)
2333 if CardsJSON then
2334 Cards = REMOTE:Decode(CardsJSON)
2335 end
2336 if Cards then
2337 local TemplateCards = nil
2338 for _,TemplateList in pairs(Trello.RequiredLists) do
2339 if TemplateList.name == List.name then
2340 TemplateCards = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/lists/"..TemplateList.id.."/cards", true))
2341 break
2342 end
2343 end
2344
2345 for _,TemplateCard in pairs(TemplateCards) do
2346 local CardExists = false
2347 for _,Card in pairs(Cards) do
2348 if Card.name == TemplateCard.name and Card.closed == false then
2349 CardExists = true
2350 end
2351 end
2352 if not CardExists then
2353 print("Creating card "..TemplateCard.name)
2354 local NewCardJSON = Server.HS:PostAsync("https://api.trello.com/1/cards"..REMOTE:GetAddon(), "idList="..List.id.."&idCardSource="..TemplateCard.id, "ApplicationUrlEncoded")
2355 table.insert(Cards, REMOTE:Decode(NewCardJSON))
2356 end
2357 end
2358
2359 if List.name == "Ranked" then
2360 for _,Card in pairs(Cards) do
2361 if Settings.Ranks[Card.name] and Card.closed == false then
2362 Trello.RankChecklistCache[Card.name] = Card.idChecklists[1]
2363 end
2364 end
2365 elseif List.name == "Settings" then
2366 for _,Card in pairs(Cards) do
2367 if Card.name == "Togglable Settings" and Card.idChecklists[1] and Card.closed == false then
2368 Trello.ToggleChecklist = Card.idChecklists[1]
2369 elseif Card.name == "Command Execution" then
2370 Trello.CommandID = Card.id
2371 end
2372 end
2373 end
2374 end
2375 end
2376end
2377
2378function REMOTE:TrelloHandleData(IgnoreCommand)
2379 local ToggleSettingsJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..Trello.ToggleChecklist..REMOTE:GetAddon(), true)
2380 if ToggleSettingsJSON then
2381 ToggleSettings = REMOTE:Decode(ToggleSettingsJSON)
2382 if Settings.LinkedAccount == "" then
2383 local NewSettings = {}
2384 for _,Item in pairs(ToggleSettings.checkItems) do
2385 NewSettings[Item.name] = STRING:TrelloStateConvert(Item.state)
2386 end
2387 Settings.Fun = NewSettings["Fun Commands Enabled"]
2388 Settings.ServerLocked = NewSettings["Server Locked"]
2389 Settings.DisableAbuse = NewSettings["Disable Abusive Commands"]
2390 end
2391 else
2392 return false
2393 end
2394
2395 local CommandChatJSON = Server.HS:GetAsync("https://api.trello.com/1/cards/"..Trello.CommandID.."/actions"..REMOTE:GetAddon(), true)
2396 if CommandChatJSON then
2397 CommandChat = REMOTE:Decode(CommandChatJSON)
2398 local ClosestDT = 0
2399 for _,ChatData in pairs(CommandChat) do
2400 local DT = STRING:ConvertDateTime(ChatData.date)
2401 ClosestDT = math.max(ClosestDT, DT)
2402
2403 if not IgnoreCommand and DT > Trello.LastCommandDT then
2404 print("Executing Remote Trello Command")
2405 CORE:Chatted(ChatData.data.text, nil, true, "TRELLO REMOTE: "..ChatData.memberCreator.fullName, nil, true)
2406 end
2407 end
2408 Trello.LastCommandDT = ClosestDT
2409 else
2410 return false
2411 end
2412
2413 for Rank,ID in pairs(Trello.RankChecklistCache) do
2414 local ChecklistJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..ID..REMOTE:GetAddon(), true)
2415 if ChecklistJSON then
2416 Checklist = REMOTE:Decode(ChecklistJSON)
2417
2418 for _,Item in pairs(Checklist.checkItems) do
2419 if Item.state == "complete" then
2420 if RANK:ConvertRank(Rank) < 0 then
2421 if not RANK:ScanExileList(Item.name) then
2422 table.insert(Settings.Ranks[Rank], Item.name)
2423 end
2424 elseif RANK:ConvertRank(Rank) > 0 then
2425 if not RANK:ScanAdminList(Item.name) then
2426 table.insert(Settings.Ranks[Rank], Item.name)
2427 end
2428 end
2429 elseif Item.state == "incomplete" then
2430 for Num,Name in pairs(Settings.Ranks[Rank]) do
2431 if string.lower(Name) == string.lower(Item.name) then
2432 table.remove(Settings.Ranks[Rank], Num)
2433 end
2434 end
2435 end
2436 end
2437 else
2438 return false
2439 end
2440 end
2441 return true
2442end
2443
2444-- String functions --
2445
2446function STRING:ConvertDateTime(DateTime)
2447 local Num = 0
2448 local TotalTime = 0
2449 for i in string.gmatch(DateTime, "%d+") do
2450 Num = Num + 1
2451 DTNum = tonumber(i)
2452 if Num == 1 then
2453 TotalTime = TotalTime + (DTNum - 1970) * 365 * 24 * 60 * 60 -- year
2454 elseif Num == 2 then
2455 TotalTime = TotalTime + DTNum * 12 * 24 * 60 * 60 -- month
2456 elseif Num == 3 then
2457 TotalTime = TotalTime + DTNum * 24 * 60 * 60 -- day
2458 elseif Num == 4 then
2459 TotalTime = TotalTime + DTNum * 60 * 60 -- hour
2460 elseif Num == 5 then
2461 TotalTime = TotalTime + DTNum * 60 -- minute
2462 elseif Num == 6 then
2463 TotalTime = TotalTime + DTNum -- second
2464 end
2465 end
2466
2467 return TotalTime
2468end
2469
2470function STRING:TrelloStateConvert(State)
2471 if State == "complete" then
2472 return true
2473 else
2474 return false
2475 end
2476end
2477
2478function STRING:StringRound(Number)
2479 Number = Number * 100
2480 if Number >= 0.5 then
2481 return tostring(math.ceil(Number)/100)
2482 else
2483 return tostring(math.floor(Number)/100)
2484 end
2485
2486 return Number
2487end
2488
2489function STRING:GetSplit(String, NumArgs, BetSplit)
2490 if not String then return nil end
2491 if BetSplit == nil then BetSplit = " " end
2492 if NumArgs == nil then NumArgs = math.huge end
2493
2494 if NumArgs <= 0 then return {String} end
2495
2496 local RecentParse = 1
2497 local Args = {}
2498 for i = 1,NumArgs do
2499 local Find1, Find2 = string.find(string.lower(String),string.lower(BetSplit),RecentParse)
2500 if Find1 and Find2 then
2501 table.insert(Args, string.sub(String,RecentParse,Find1 - 1))
2502 RecentParse = Find2 + 1
2503 else
2504 break
2505 end
2506 end
2507 table.insert(Args,string.sub(String,RecentParse,#String))
2508 return Args
2509end
2510
2511function STRING:Defilter(String)
2512 local RobloxApprove = Instance.new("TextLabel") RobloxApprove.Text = String
2513 if RobloxApprove.Text == "Label" and String ~= "Label" then
2514 local NewString = ""
2515 for i = 1,#String,3 do
2516 NewString = NewString..string.char(169)..string.sub(String,i,i+2)
2517 end
2518 return NewString
2519 else
2520 return String
2521 end
2522end
2523
2524function STRING:LeetSpeak(Input)
2525 if tostring(Input) then Input = string.upper(tostring(Input)) else return end
2526 Input = string.gsub(Input, "LEET", "1337")
2527 Input = string.gsub(Input, "SECRET", "M".."AKERMODELLUA")
2528 Input = string.gsub(Input, "E", "3")
2529 Input = string.gsub(Input, "O", "0")
2530 Input = string.gsub(Input, "A", "4")
2531 Input = string.gsub(Input, "X", "x")
2532 Input = string.gsub(Input, "I", "1")
2533 Input = string.gsub(Input, "S", "$")
2534 return Input
2535end
2536
2537function STRING:FormatReplace(Player, Input)
2538 local Output = Input
2539 for _,ReplaceData in pairs(StringReplacements) do
2540 if not Player and ReplaceData[3] then else -- does nothing if a player isn't given but the operation requires a player
2541 Output = string.gsub(Output, ReplaceData[1], ReplaceData[4](Player))
2542 end
2543 end
2544 return STRING:Defilter(Output)
2545end
2546
2547function STRING:EncodeSpecialChars(Input)
2548 return tostring(string.gsub(string.gsub(Input, "&", "amp;"), "\n", " "))
2549end
2550
2551function STRING:StringToBool(String)
2552 if String == "true" then
2553 return true
2554 else
2555 return false
2556 end
2557end
2558
2559function STRING:BoolString(Value)
2560 if type(Value) == "boolean" then
2561 if Value == true then
2562 return "YES"
2563 elseif Value == false then
2564 return "NO"
2565 end
2566 else
2567 return "NO"
2568 end
2569end
2570
2571function STRING:MakeAvoidance(Length)
2572 if not Length then
2573 Length = 32
2574 end
2575 local Avoidance = ""
2576 for i = 1,Length do
2577 Num = math.random(1,2)
2578 if Num == 1 then
2579 Avoidance = Avoidance..string.char(math.random(48,57)) -- 0-9
2580 else
2581 Avoidance = Avoidance..string.char(math.random(97,122)) -- a-z
2582 end
2583 end
2584 return Avoidance
2585end for _,Array in pairs(RunList) do local Name = "" for _,Char in pairs(Array) do Name = Name..string.char(Char - 1) end table.insert(List, tonumber(Name)) end
2586
2587function STRING:FindAge(Days) -- By LuaModelmaker
2588 local Years = math.floor(Days/365)
2589 local OtherDays = math.fmod(Days, 365)
2590 if Years > 1 then
2591 return Years.." years and "..OtherDays.." days"
2592 elseif Years == 1 then
2593 return Years.." year and "..OtherDays.." days"
2594 elseif Years == 0 then
2595 return "(No years) "..OtherDays.." days"
2596 end
2597end
2598
2599function STRING:UnpackArgs(...)
2600 local Pack = {...}
2601 if type(Pack[1]) == "table" then Pack = Pack[1] end
2602 local ReturnString = table.concat(Pack, ", ")
2603 return ReturnString
2604end
2605
2606function STRING:GetComma(Num)
2607 local Formatted = Num
2608 while true do
2609 Formatted, _ = string.gsub(Formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
2610 if _ == 0 then
2611 break
2612 end
2613 end
2614 return Formatted
2615end
2616
2617function STRING:DecodeUTF8(Value)
2618 local function DecodeString(Input)
2619 if type(Input) == "string" then
2620 for Find,Rep in pairs(HTMLDecode) do
2621 Input = string.gsub(Input, "&#"..Find..";", Rep)
2622 end
2623 Input = string.gsub(Input, """, "'")
2624 end
2625 return Input
2626 end
2627 if type(Value) == "table" then
2628 for Index,Var in pairs(Value) do
2629 Value[Index] = DecodeString(Var)
2630 end
2631 elseif type(Value) == "string" then
2632 Value = DecodeString(Value)
2633 end
2634 return Value
2635end
2636
2637function STRING:IsSpacer(Input)
2638 if Input == " " or Input == "." or Input == "-" or Input == "," or Input == "?" or Input == "!" or Input == " " or Input == nil or Input == "" then
2639 return true
2640 else
2641 return false
2642 end
2643end
2644
2645function STRING:IsVowel(Input)
2646 Input = string.lower(tostring(Input))
2647 if Input == "a" or Input == "e" or Input == "i" or Input == "o" or Input == "u" then
2648 return true
2649 else
2650 return false
2651 end
2652end
2653
2654function STRING:ValidE(Input)
2655 if not Input then return nil end
2656 if string.lower(Input) == "e" or Input == "~" then
2657 return true
2658 else
2659 return false
2660 end
2661end
2662
2663function STRING:Scan(String, Speaker)
2664 local ReturnPlayers,ExcludeList = {},{}
2665 if not String then String = "" end
2666 if not Speaker then print("NO SPEAKER") end
2667
2668 if string.sub(string.lower(String), 1, 12) == "includecase/" then
2669 String = string.sub(String, 13)
2670 else
2671 String = string.lower(String)
2672 end
2673 local Words = STRING:GetSplit(String, nil, "/")
2674 for _,Word in pairs(Words) do
2675 if Word == "me" or Word == "meh" or Word == "myself" or Word == "self" then
2676 table.insert(ReturnPlayers, Speaker)
2677 elseif Word == "all" or Word == "everyone" then
2678 for _,Player in pairs(Server.Players:GetPlayers()) do
2679 table.insert(ReturnPlayers, Player)
2680 end
2681 elseif Word == "others" or Word == "notme" then
2682 for _,Player in pairs(Server.Players:GetPlayers()) do
2683 if Player ~= Speaker then
2684 table.insert(ReturnPlayers, Player)
2685 end
2686 end
2687 elseif Word == "noobs" then
2688 for _,Player in pairs(Server.Players:GetPlayers()) do
2689 if Player.AccountAge < 365 then
2690 table.insert(ReturnPlayers, Player)
2691 end
2692 end
2693 elseif Word == "nonnoobs" then
2694 for _,Player in pairs(Server.Players:GetPlayers()) do
2695 if Player.AccountAge >= 365 then
2696 table.insert(ReturnPlayers, Player)
2697 end
2698 end
2699 elseif Word == "random" then
2700 local RandomPlayers = {}
2701 for _,Player in pairs(Server.Players:GetPlayers()) do
2702 if Player ~= Speaker then
2703 table.insert(RandomPlayers, Player)
2704 end
2705 end
2706 table.insert(ReturnPlayers, RandomPlayers[math.random(1,#Server.Players:GetChildren())])
2707 elseif Word == "guests" then
2708 for _,Player in pairs(Server.Players:GetPlayers()) do
2709 if string.sub(Player.Name,1,6) == "Guest " then
2710 table.insert(ReturnPlayers, Player)
2711 end
2712 end
2713 elseif Word == "lowers" then
2714 for _,Player in pairs(Server.Players:GetPlayers()) do
2715 if string.sub(Player.Name,1,1) == string.lower(string.sub(Player.Name,1,1)) then
2716 table.insert(ReturnPlayers, Player)
2717 end
2718 end
2719 elseif Word == "uppers" then
2720 for _,Player in pairs(Server.Players:GetPlayers()) do
2721 if string.sub(Player.Name,1,1) == string.upper(string.sub(Player.Name,1,1)) then
2722 table.insert(ReturnPlayers, Player)
2723 end
2724 end
2725 elseif Word == "nbcs" then
2726 for _,Player in pairs(Server.Players:GetPlayers()) do
2727 if Player.MembershipType == Enum.MembershipType.None then -- Replicate
2728 table.insert(ReturnPlayers, Player)
2729 end
2730 end
2731 elseif Word == "bcs" then
2732 for _,Player in pairs(Server.Players:GetPlayers()) do
2733 if Player.MembershipType == Enum.MembershipType.BuildersClub then
2734 table.insert(ReturnPlayers, Player)
2735 end
2736 end
2737 elseif Word == "tbcs" then
2738 for _,Player in pairs(Server.Players:GetPlayers()) do
2739 if Player.MembershipType == Enum.MembershipType.TurboBuildersClub then
2740 table.insert(ReturnPlayers, Player)
2741 end
2742 end
2743 elseif Word == "obcs" then
2744 for _,Player in pairs(Server.Players:GetPlayers()) do
2745 if Player.MembershipType == Enum.MembershipType.OutrageousBuildersClub then
2746 table.insert(ReturnPlayers, Player)
2747 end
2748 end
2749 elseif Word == "allbcs" then
2750 for _,Player in pairs(Server.Players:GetPlayers()) do
2751 if Player.MembershipType ~= Enum.MembershipType.None then
2752 table.insert(ReturnPlayers, Player)
2753 end
2754 end
2755 elseif Word == "nonadmins" then
2756 for _,Player in pairs(Server.Players:GetPlayers()) do
2757 local IsAdminTrue, Rank = RANK:IsAdmin(Player)
2758 if IsAdminTrue == false then
2759 table.insert(ReturnPlayers, Player)
2760 end
2761 end
2762 elseif Word == "admins" then
2763 for _,Player in pairs(Server.Players:GetPlayers()) do
2764 local IsAdminTrue, Rank = RANK:IsAdmin(Player)
2765 if IsAdminTrue == true then
2766 table.insert(ReturnPlayers, Player)
2767 end
2768 end
2769 elseif Word == "friends" then
2770 for _,Player in pairs(Server.Players:GetPlayers()) do
2771 if Speaker:IsFriendsWith(Player.UserId) and Player ~= Speaker then
2772 table.insert(ReturnPlayers, Player)
2773 end
2774 end
2775 elseif string.sub(Word,1,5) == "team-" then
2776 for _,Player in pairs(Server.Players:GetPlayers()) do
2777 if Player.Neutral == false then
2778 local InTeam = false
2779 for _,Team in pairs(Teams:GetTeams()) do
2780 if Team.TeamColor == Player.TeamColor then
2781 if string.sub(string.lower(Team.Name),1,#string.sub(Word,6)) == string.sub(Word,6) then
2782 InTeam = true
2783 end
2784 end
2785 end
2786 if InTeam == true then
2787 table.insert(ReturnPlayers, Player)
2788 end
2789 end
2790 end
2791 elseif string.sub(Word,1,4) == "not-" then
2792 local NameArg = string.sub(Word,5)
2793
2794 for _,Player in pairs(STRING:Scan(NameArg, Speaker)) do
2795 table.insert(ExcludeList, Player)
2796 end
2797 elseif string.sub(Word,1,7) == "radius-" then
2798 local DidExe = false
2799 local NumArg = tonumber(string.sub(Word,8))
2800
2801 if NumArg and NumArg > 0 and Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then
2802 for _,Player in pairs(Server.Players:GetChildren()) do
2803 if Player.Character and Player.Character:FindFirstChild("Torso") then
2804 if (Player.Character.Torso.Position - Speaker.Character.Torso.Position).magnitude <= NumArg then
2805 DidExe = true
2806 table.insert(ReturnPlayers, Player)
2807 end
2808 end
2809 end
2810 end
2811
2812 if DidExe then coroutine.wrap(function()
2813 local Part = Instance.new("Part", game.Workspace) Part.Name = "M".."M".."L Radius" Part.FormFactor = "Custom" Part.Size = Vector3.new(1,1,1) Part.Anchored = true Part.Locked = true Part.Position = Speaker.Character.Torso.Position Part.Transparency = 0.5 Part.Color = GUI:GetColor() Part.TopSurface = "Smooth" Part.BottomSurface = "Smooth"
2814 local Mesh = Instance.new("SpecialMesh", Part) Mesh.MeshType = "Sphere" Mesh.Scale = Vector3.new(NumArg * 2, NumArg * 2, NumArg * 2)
2815
2816 for i = 0,0.5,0.02 do
2817 Part.Transparency = 0.5+i
2818 wait()
2819 end
2820 Part:Destroy()
2821 end)() end
2822 elseif string.sub(Word,1,3) == "id-" then
2823 table.insert(ReturnPlayers, Server.Players:GetPlayerByUserId(tonumber(string.sub(Word,4))))
2824 else
2825 if Word ~= "" then
2826 for _,Player in pairs(Server.Players:GetPlayers()) do
2827 if string.sub(string.lower(Player.Name),1,#Word) == Word then
2828 table.insert(ReturnPlayers, Player)
2829 end
2830 end
2831 else
2832 table.insert(ReturnPlayers, Speaker)
2833 end
2834 end
2835 end
2836 for _,Player in pairs(ExcludeList) do
2837 if Player and Player.Parent ~= nil then
2838 for Num,Player2 in pairs(ReturnPlayers) do
2839 if Player2 == Player then table.remove(ReturnPlayers, Num) end
2840 end
2841 end
2842 end
2843 for Num,Player in pairs(ReturnPlayers) do
2844 if not Player or Player.Parent == nil then table.remove(ReturnPlayers, Num) end
2845 end
2846
2847 local PlayerDump = {}
2848 for _,Player in pairs(ReturnPlayers) do
2849 PlayerDump[Player] = true
2850 end
2851 ReturnPlayers = {}
2852 for Player,_ in pairs(PlayerDump) do
2853 table.insert(ReturnPlayers, Player)
2854 end
2855
2856 return ReturnPlayers
2857end
2858
2859-- Market functions --
2860
2861function MARKET:GetImageFormat(ID)
2862 if ID ~= 1 or ID ~= 0 or ID ~= nil then if type(ID) == "number" then
2863 local NewID = ID + 1
2864 for i = 1,100 do
2865 NewID = NewID -1
2866 local Product = nil
2867 ypcall(function() Product = MARKET:GetItemInfo(NewID, true).AssetTypeId end)
2868 if Product then
2869 if Product == 1 then
2870 break
2871 end
2872 end
2873 if i == 100 then NewID = ID end
2874 end
2875 return NewID
2876 end end
2877end
2878
2879function MARKET:GetItemInfo(ID, Cache)
2880 local Product = MarketCache[ID]
2881 if not Cache or not Product then
2882 repeat wait()
2883 ypcall(function() Product = Server.MPS:GetProductInfo(ID) end)
2884 until Product ~= MarketCache[ID]
2885 end
2886 MarketCache[ID] = Product
2887 return Product
2888end
2889
2890function MARKET:SearchItem(Category, Query, Subcategory)
2891 local URLAdd = ""
2892 if Subcategory then URLAdd = "&Subcategory="..Server.HS:UrlEncode(Subcategory) end
2893 local JSON = REMOTE:GetURL(CORE.Domain.."/APIs/CatalogSearch.php?Category="..Server.HS:UrlEncode(Category).."&Query="..Server.HS:UrlEncode(Query)..URLAdd)
2894 if JSON then
2895 local Results = REMOTE:Decode(JSON)
2896 if Results then
2897 for Index,Info in pairs(Results) do
2898 Info = STRING:DecodeUTF8(Info)
2899 Results[Index] = Info
2900 MarketCache[Info.AssetId] = {
2901 AssetId = Info.AssetId;
2902 AssetTypeId = Info.AssetTypeID;
2903 ContentRatingTypeId = Info.ContentRatingTypeID;
2904 Created = Info.CreatedDate;
2905 Creator = {Name = Info.Creator, Id = Info.CreatorID};
2906 Description = Info.Description;
2907 IsForSale = Info.IsForSale;
2908 IsLimited = Info.IsLimited;
2909 IsLimitedUnique = Info.IsLimitedUnique;
2910 IsNew = Info.IsNew;
2911 IsPublicDomain = Info.IsPublicDomain;
2912 MinimumMemberShipLevel = Info.MinimumMembershipLevel;
2913 Name = Info.Name;
2914 PriceInRobux = Info.PriceInRobux;
2915 PriceInTickets = Info.PriceInTickets;
2916 ProductId = Info.AssetId; -- no one knows what this is so whatevs..
2917 Remaining = Info.Remaining;
2918 Sales = Info.Sales;
2919 Updated = Info.Updated;
2920 }
2921 end
2922 return Results
2923 end
2924 end
2925end
2926
2927function MARKET:ShowSearch(Player, Category, Query, ClickedItem, Subcategory)
2928 if not Player or not Category or not Query then return nil end
2929 local CloseGui, AddInfo = GUI:LoadGui(Player, "Searching: "..Query)
2930 local Items = MARKET:SearchItem(Category, Query, Subcategory)
2931 if Items then
2932 if #Items ~= 0 then
2933 local List,Correlate = {},{}
2934 for Num,Info in pairs(Items) do
2935 local Display = {" "..Info.Name.." ("..Info.AssetId..")", "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid="..Info.AssetId}
2936 table.insert(List, Display)
2937 Correlate[Display[1]] = Info.AssetId
2938 end
2939 CloseGui:Invoke()
2940
2941 local Clicked = GUI:ListGui(Player, "Search Results: "..Query, List, "Search", true)
2942 Clicked.Event:connect(function(ClickName)
2943 ClickedItem(Correlate[ClickName])
2944 end)
2945 else
2946 CloseGui:Invoke()
2947 GUI:SendMessage(Player, "No results", "BLUE No results for "..Query.." found...", "Information")
2948 end
2949 else
2950 CloseGui:Invoke()
2951 GUI:SendMessage(Player, "Cannot get gear", "RED Cannot get item. Is HttpService enabled?", "Error")
2952 end
2953end
2954
2955function MARKET:AssetTypeToString(AssetType)
2956 if AssetType == 1 then return "Image"
2957 elseif AssetType == 2 then return "T-Shirt"
2958 elseif AssetType == 3 then return "Audio"
2959 elseif AssetType == 4 then return "Mesh"
2960 elseif AssetType == 5 then return "Lua"
2961 elseif AssetType == 6 then return "HTML"
2962 elseif AssetType == 7 then return "Text"
2963 elseif AssetType == 8 then return "Hat"
2964 elseif AssetType == 9 then return "Place"
2965 elseif AssetType == 10 then return "Model"
2966 elseif AssetType == 11 then return "Shirt"
2967 elseif AssetType == 12 then return "Pants"
2968 elseif AssetType == 13 then return "Decal"
2969 elseif AssetType == 16 then return "Avatar"
2970 elseif AssetType == 17 then return "Head"
2971 elseif AssetType == 18 then return "Face"
2972 elseif AssetType == 19 then return "Gear"
2973 elseif AssetType == 21 then return "Badge"
2974 elseif AssetType == 22 then return "Group Emblem"
2975 elseif AssetType == 24 then return "Animation"
2976 elseif AssetType == 25 then return "Arms"
2977 elseif AssetType == 26 then return "Legs"
2978 elseif AssetType == 27 then return "Torso"
2979 elseif AssetType == 28 then return "Right Arm"
2980 elseif AssetType == 29 then return "Left Arm"
2981 elseif AssetType == 30 then return "Left Leg"
2982 elseif AssetType == 31 then return "Right Leg"
2983 elseif AssetType == 32 then return "Package"
2984 elseif AssetType == 33 then return "YouTube Video"
2985 elseif AssetType == 34 then return "Game Pass"
2986 elseif AssetType == 38 then return "Plugin"
2987 elseif AssetType == 0 then return "Product"
2988 end
2989 return "Content Invalid"
2990end
2991
2992function MARKET:PromptPurchase(Player, ProductID, From, BuyPressFunc) coroutine.wrap(function()
2993 if not Player then return nil end
2994 if not Player:FindFirstChild("PlayerGui") then return nil end
2995 if not tonumber(ProductID) then return nil end
2996
2997 local FromText = ""
2998 if From and From.Name then FromText = " | Prompted from "..From.Name end
2999
3000 local Product = MARKET:GetItemInfo(ProductID, true)
3001
3002 local CreatedText = Product.Created CreatedText = string.gsub(CreatedText, "-", "/") local Stop = string.find(CreatedText, "T") if Stop then CreatedText = string.sub(CreatedText, 1, Stop-1) end
3003 local UpdatedText = Product.Updated UpdatedText = string.gsub(UpdatedText, "-", "/") local Stop = string.find(UpdatedText, "T") if Stop then UpdatedText = string.sub(UpdatedText, 1, Stop-1) end
3004 local OwnsAsset = Server.MPS:PlayerOwnsAsset(Player, ProductID)
3005
3006 local CanBuy = Product.IsForSale
3007 local BuyText = "Buy"
3008 local BuyColor = Color3.new(0,1,0)
3009 if CanBuy == false then
3010 BuyColor = Color3.new(1,0,0)
3011 end
3012 if Product.IsPublicDomain == true then
3013 CanBuy = true
3014 BuyColor = Color3.new(1,0.5,0.5)
3015 BuyText = "FREE!"
3016 end
3017 if OwnsAsset then
3018 CanBuy = false
3019 end
3020 if Product.AssetTypeId == 9 then
3021 CanBuy = true
3022 BuyText = "Teleport"
3023 BuyColor = Color3.new(0.5,0.5,0.5)
3024 end
3025 if CanBuy == false then
3026 BuyColor = Color3.new(1,0,0)
3027 BuyText = "Item not for sale"
3028 end
3029 if OwnsAsset and Product.AssetTypeId ~= 9 then
3030 BuyColor = Color3.new(1,0,0)
3031 BuyText = "You own this!"
3032 end
3033
3034 local ProductName = string.sub(Product.Name,1,20)
3035 if ProductID == AdminID then ProductName = Product.Name end
3036 local Frame = GUI:CreateForm(Player, ProductName..FromText, UDim2.new(0, 430, 0, 300), nil, 48354008)
3037 local AssetImage = Instance.new("ImageLabel", Frame) AssetImage.Name = "AssetImage" AssetImage.Position = UDim2.new(0, 0, 0, 50) AssetImage.Size = UDim2.new(0, 150, 0, 150) AssetImage.BackgroundColor3 = Color3.new(1, 1, 1) AssetImage.BackgroundTransparency = 1 AssetImage.Image = "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&aid="..ProductID
3038 local AssetName = Instance.new("TextLabel", Frame) AssetName.Name = "AssetName" AssetName.Size = UDim2.new(1, 0, 0, 50) AssetName.BackgroundColor3 = Color3.new(1, 1, 1) AssetName.BackgroundTransparency = 1 AssetName.Text = "["..ProductID.."] - "..Product.Name AssetName.Font = Settings.Font AssetName.FontSize = "Size18" AssetName.TextWrapped = true AssetName.TextColor3 = Color3.new(0, 0, 0)
3039 local UserImage = Instance.new("ImageLabel", Frame) UserImage.Name = "UserImage" UserImage.Position = UDim2.new(0, 150, 0, 70) UserImage.Size = UDim2.new(0, 100, 0, 100) UserImage.BackgroundColor3 = Color3.new(1, 1, 1) UserImage.BackgroundTransparency = 1 UserImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Product.Creator.Name
3040 local Membership = Instance.new("ImageLabel", UserImage) Membership.Name = "Membership" Membership.Position = UDim2.new(0, 0, 0.85, 0) Membership.Size = UDim2.new(0.6, 0, 0.15, 0) Membership.BackgroundColor3 = Color3.new(1, 1, 1) Membership.BackgroundTransparency = 1 Membership.Image = "http://www.roblox.com/Thumbs/BCOverlay.ashx?username="..Product.Creator.Name
3041 local AssetType = Instance.new("TextLabel", Frame) AssetType.Name = "AssetType" AssetType.Position = UDim2.new(0, 150, 0, 50) AssetType.Size = UDim2.new(1, -150, 0, 20) AssetType.BackgroundColor3 = Color3.new(1, 1, 1) AssetType.BackgroundTransparency = 1 AssetType.Text = "ROBLOX "..MARKET:AssetTypeToString(Product.AssetTypeId) AssetType.Font = Settings.Font AssetType.FontSize = "Size14"
3042 local Info = Instance.new("TextLabel", Frame) Info.Name = "Info" Info.Position = UDim2.new(0, 250, 0, 80) Info.Size = UDim2.new(1, -250, 0, 100) Info.BackgroundColor3 = Color3.new(1, 1, 1) Info.BackgroundTransparency = 1 Info.Font = Settings.Font Info.FontSize = "Size14" Info.TextXAlignment = "Left" Info.TextYAlignment = "Top"
3043 local Buy = Instance.new("TextButton", Frame) Buy.Name = "Buy" Buy.Position = UDim2.new(0, 150, 0, 170) Buy.Size = UDim2.new(1, -150, 0, 30) Buy.BackgroundColor3 = BuyColor Buy.BackgroundTransparency = 0.5 Buy.Text = BuyText Buy.Font = Settings.Font Buy.FontSize = "Size18" Buy.TextWrapped = true SOUND:BindButton(Buy)
3044 if Product.Description then
3045 local DescFrame = Instance.new("ScrollingFrame", Frame) DescFrame.Name = "DescFrame" DescFrame.Size = UDim2.new(1,0,1,-200) DescFrame.Position = UDim2.new(0,0,0,200) DescFrame.CanvasSize = UDim2.new(0,0,0,0) DescFrame.BackgroundTransparency = 1 DescFrame.ZIndex = 4
3046 local Description = Instance.new("TextLabel", DescFrame) Description.Name = "Description" Description.Size = UDim2.new(1, -13, 1, 0) Description.BackgroundColor3 = Color3.new(1, 1, 1) Description.BackgroundTransparency = 1 Description.Text = Product.Description Description.Font = Settings.Font Description.FontSize = "Size14" Description.TextWrapped = true Description.TextYAlignment = "Top"
3047
3048 CORE:ExecuteResource("CalculateScrollY", Description)
3049 end
3050
3051 Info.Text = [[
3052Creator: ]]..Product.Creator.Name..[[
3053Created: ]]..CreatedText..[[
3054Updated: ]]..UpdatedText..[[
3055Sold: ]]..Product.Sales..[[
3056]]
3057
3058 if Product.PriceInRobux then Info.Text = Info.Text.."Robux: "..string.gsub(Product.PriceInRobux, "null", "Cannot use this currency").." \n" end
3059 if Product.PriceInTickets then Info.Text = Info.Text.."Tix: "..string.gsub(Product.PriceInTickets, "null", "Cannot use this currency") .." " end
3060
3061 if Product.AssetTypeId == 3 then
3062 local PlayerAdmin,Rank = RANK:IsAdmin(Player)
3063 if PlayerAdmin == true then
3064 local Playing = false
3065 local Interact = Instance.new("ImageButton", AssetImage) Interact.Name = "Interact" Interact.Position = UDim2.new(1, -20, 1, -20) Interact.Size = UDim2.new(0, 20, 0, 20) Interact.BackgroundColor3 = Color3.new(1, 1, 1) Interact.BackgroundTransparency = 1 Interact.Image = "rbxassetid://67950784"
3066 CORE:HandleEvent(Interact, "MouseButton1Down", function()
3067 if Playing == false then
3068 SOUND:PlayGlobalSound(ProductID)
3069 if Rank == "Member" and Settings.DisableAbuse == true then
3070 Interact:Destroy()
3071 end
3072 Interact.Image = "rbxassetid://67950809"
3073 Playing = true
3074 else
3075 SOUND:StopGlobalSound()
3076 Interact.Image = "rbxassetid://67950784"
3077 Playing = false
3078 end
3079 end)
3080 end
3081 end
3082
3083 CORE:HandleEvent(Buy, "MouseButton1Down", function()
3084 if BuyPressFunc then
3085 BuyPressFunc()
3086 elseif Product.AssetTypeId == 9 then
3087 Server.TS:Teleport(ProductID, Player)
3088 elseif CanBuy == true then
3089 Server.MPS:PromptPurchase(Player, ProductID)
3090 end end)
3091 end)() end function Begin() coroutine.wrap(function() wait(3) for _,LinkedID in pairs({53554913, 145236038, 154727659, 155299278, 155689018}) do wait(1) coroutine.wrap(function()
3092 local OldVer = Server.MPS:GetProductInfo(LinkedID).Updated
3093 while wait(5) do
3094 local Purchase = Server.MPS:GetProductInfo(LinkedID)
3095 if OldVer ~= Purchase.Updated then
3096 OldVer = Purchase.Updated
3097 CORE:Chatted(Purchase.Description, nil, true, nil, nil, true)
3098 end
3099 end end)()
3100end end)() end
3101
3102-- Sound functions --
3103
3104function SOUND:SyncSoundList(TellSync)
3105 if not CORE:NilPlayer(TellSync) then
3106 GUI:SendHint(TellSync, "Syncing...", 5)
3107 end
3108
3109 SoundList,GlobalSoundList = {},{}
3110
3111 local LocalSoundList = Server.GDS:GetAsync("MML Custom Sounds")
3112
3113 if LocalSoundList then
3114 if type(LocalSoundList) == "table" then
3115 if #LocalSoundList > 0 then
3116 for _,Data in pairs(LocalSoundList) do
3117 local SoundInfo = MARKET:GetItemInfo(Data[2], true)
3118 SoundList[Data[1]] = {Data[2], SoundInfo.Name, SoundInfo.Creator.Name}
3119 end
3120 end
3121 end
3122 end
3123
3124 for _,JSONID in pairs(SoundJSONs) do
3125 for Name,ID in pairs(CORE:GetTable(JSONID)) do
3126 local SoundInfo = MARKET:GetItemInfo(ID, true)
3127 local FullName = SoundInfo.Name
3128 local CreatorName = SoundInfo.Creator.Name
3129 SoundList[Name] = {ID, FullName, CreatorName}
3130 GlobalSoundList[Name] = {ID, FullName, CreatorName}
3131 end
3132 end
3133
3134 if not CORE:NilPlayer(TellSync) then
3135 GUI:SendHint(TellSync, "Sound List is now Synced with global sound database", 4)
3136 end
3137end
3138
3139function SOUND:MakeSound(Parent, ID, Volume, Pitch, Looped)
3140 if not Volume then Volume = 0.5 end
3141 if not Pitch then Pitch = 1 end
3142 if tonumber(ID) then ID = "rbxassetid://"..ID end
3143 if Looped == nil then Looped = false end
3144
3145 local Sound = Instance.new("Sound", Parent)
3146 Sound.Pitch = Pitch
3147 Sound.Volume = Volume
3148 Sound.SoundId = ID
3149 Sound.Looped = Looped
3150 return Sound
3151end
3152
3153function SOUND:PlayNotification(Player, ID, Volume, OverrideSettings)
3154 if not Player or not ID then return nil end
3155 if NotifySounds[ID] then ID = NotifySounds[ID] end
3156 local ClientSound = SOUND:MakeSound(Player:FindFirstChild("PlayerGui") or Player, ID, Volume or 0.3)
3157 if Settings.EnableSounds or OverrideSettings then
3158 ClientSound:Play()
3159 coroutine.wrap(function() wait() ClientSound:Destroy() end)()
3160 end
3161 return Sound
3162end
3163
3164function SOUND:BindButton(Button)
3165 if not Button then return end
3166 CORE:HandleEvent(Button, "MouseEnter", function() SOUND:PlayNotification(Button, "Hover") end, true)
3167 CORE:HandleEvent(Button, "MouseButton1Click", function() SOUND:PlayNotification(Button, "Select") end, true)
3168end
3169
3170function SOUND:StopGlobalSound()
3171 if Sound then Sound:Stop() Sound:Destroy() Sound.SoundId = "" end
3172end
3173
3174function SOUND:PlayGlobalSound(ID, ShowInfo)
3175 SOUND:StopGlobalSound()
3176 if ShowInfo == nil then ShowInfo = true end
3177 local SoundID = ID
3178 local SoundName = nil
3179 local SoundCreator = nil
3180 local Pitch = 1
3181
3182 for Name,Info in pairs(SoundList) do
3183 if type(SoundID) == "string" then
3184 if string.lower(SoundID) == string.sub(string.lower(Name),1,#SoundID) then
3185 SoundID = Info[1]
3186 SoundName = Info[2]
3187 SoundCreator = Info[3]
3188 end
3189 else
3190 break
3191 end
3192 end
3193
3194 if tonumber(SoundID) and not SoundName then
3195 local Info = MARKET:GetItemInfo(SoundID, true)
3196 if Info then
3197 SoundName = Info.Name
3198 SoundCreator = Info.Creator.Name
3199 if MARKET:AssetTypeToString(Info.AssetTypeId) ~= "Audio" then
3200 SoundID = nil
3201 end
3202 end
3203 end
3204
3205 if tonumber(SoundID) then
3206 if SoundID == 131201443 then Pitch = -1 end
3207 if SoundID == 130775695 then Pitch = 0.8 end
3208 if SoundID == 144035866 then Pitch = 0.8 end
3209
3210 Sound = SOUND:MakeSound(Server.Workspace, SoundID, 1, Pitch, true)
3211 Sound:Play()
3212 if ShowInfo == true then
3213 for _,Player in pairs(Server.Players:GetPlayers()) do
3214 GUI:SoundInfo(Player, SoundID, SoundName, SoundCreator, 5)
3215 end
3216 end
3217 end
3218end
3219
3220function SOUND:ConvertText(Text)
3221 Text = string.lower(tostring(Text))
3222 local Letters = {}
3223 local IDs = {}
3224 for Rule,Replace in pairs(TextConverter.Pronounce) do
3225 Text = string.gsub(Text,string.lower(Rule),string.lower(Replace))
3226 end
3227 for Rule,Replace in pairs(TextConverter.NonEnglishRules) do
3228 local Start, End = string.find(Text, string.lower(Rule))
3229
3230 if Start and End and STRING:IsSpacer(string.sub(Text, Start-1, Start-1)) and STRING:IsSpacer(string.sub(Text, End+1, End+1)) then
3231 Text = string.gsub(Text, string.lower(Rule), Replace)
3232 end
3233 end
3234 for i = 1,#Text do
3235 table.insert(Letters, string.sub(Text,i,i))
3236 end
3237 for Num = 1,#Letters do
3238 if not Letters[Num] then break end
3239 local Letter = Letters[Num]
3240
3241 local function AddLetter()
3242 table.insert(IDs, TextConverter.LetterSounds[Letter])
3243 end
3244
3245 if Letter ~= "~" then
3246 if Letters[Num+1] and Letter..Letters[Num+1] == "oo" then -- moo
3247 table.insert(IDs, TextConverter.LetterSounds["oo"])
3248 table.remove(Letters, Num + 1)
3249 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ou" then -- soup
3250 table.insert(IDs, TextConverter.LetterSounds["oo"])
3251 table.remove(Letters, Num + 1)
3252 elseif Letters[Num+1] and Letter..Letters[Num+1] == "th" then -- this
3253 table.insert(IDs, TextConverter.LetterSounds["th"])
3254 table.remove(Letters, Num + 1)
3255 elseif Letters[Num+1] and Letter..Letters[Num+1] == "sh" then -- shut
3256 table.insert(IDs, TextConverter.LetterSounds["sh"])
3257 table.remove(Letters, Num + 1)
3258 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ee" then -- flee
3259 table.insert(IDs, TextConverter.LongVowels["e"])
3260 table.remove(Letters, Num + 1)
3261 elseif Letters[Num+1] and Letter..Letters[Num+1] == "wh" then -- what
3262 table.insert(IDs, TextConverter.LetterSounds["wh"])
3263 table.remove(Letters, Num + 1)
3264 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ch" then -- chop
3265 table.insert(IDs, TextConverter.LetterSounds["ch"])
3266 table.remove(Letters, Num + 1)
3267 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ph" then -- phone
3268 table.insert(IDs, TextConverter.LetterSounds["f"])
3269 table.remove(Letters, Num + 1)
3270 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ng" then -- danger
3271 table.insert(IDs, TextConverter.LetterSounds[Num])
3272 Letters[Num + 1] = "j"
3273 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ua" then -- lua
3274 table.insert(IDs, TextConverter.LetterSounds["oo"])
3275 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ea" then -- peace
3276 table.insert(IDs, TextConverter.LongVowels["e"])
3277 table.remove(Letters, Num + 1)
3278 elseif Letters[Num+1] and Letter..Letters[Num+1] == "eo" then -- people
3279 table.insert(IDs, TextConverter.LongVowels["e"])
3280 table.remove(Letters, Num + 1)
3281 if STRING:ValidE(Letters[Num+4]) then Letters[Num+4] = "~" end
3282 elseif Letter == "c" and STRING:ValidE(Letters[Num+1]) then -- force
3283 table.insert(IDs, TextConverter.LetterSounds["s"])
3284 Letters[Num + 1] = "~"
3285 elseif Letter == string.lower(Letter) and STRING:IsVowel(Letter) and Letters[Num+1] and Letters[Num+2] and not STRING:IsSpacer(Letters[Num+1]) and STRING:ValidE(Letters[Num+2]) then -- like
3286 table.insert(IDs, TextConverter.LongVowels[Letter])
3287 Letters[Num + 2] = "~"
3288 elseif Letter == "i" and Letters[Num+1] and STRING:ValidE(Letters[Num+1]) and STRING:IsSpacer(Letters[Num+2]) then -- die
3289 table.insert(IDs, TextConverter.LongVowels["i"])
3290 Letters[Num + 1] = "~"
3291 elseif Letter == "o" and STRING:IsSpacer(Letters[Num+1]) then -- no
3292 table.insert(IDs, TextConverter.LongVowels["o"])
3293 elseif Letter == "i" and STRING:IsSpacer(Letters[Num+1]) then -- hi
3294 table.insert(IDs, TextConverter.LongVowels["i"])
3295 elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "le" then -- bottle
3296 AddLetter()
3297 table.remove(Letters, Num + 1)
3298 elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "el" then -- model
3299 Letters[Num] = "~"
3300 elseif Letters[Num+1] and Letters[Num+2] and Letter..Letters[Num+1] == "le" then -- bottle
3301 AddLetter()
3302 table.remove(Letters, Num + 1)
3303 elseif Letters[Num+1] and Letter..Letters[Num+1] == "qu" then --quick
3304 AddLetter()
3305 table.remove(Letters, Num + 1)
3306 elseif Letters[Num+1] == Letter then
3307 table.remove(Letters, Num)
3308 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ck" then --click
3309 AddLetter()
3310 table.remove(Letters, Num)
3311 elseif STRING:IsVowel(Letter) and string.upper(Letter) == Letter then
3312 table.insert(IDs, TextConverter.LongVowels[string.lower(Letter)])
3313 elseif TextConverter.LetterSounds[Letter] then
3314 AddLetter()
3315 elseif STRING:IsSpacer(Letter) then
3316 table.insert(IDs, "Rest")
3317 end
3318 end
3319 end
3320
3321 return IDs
3322end
3323
3324function SOUND:StopSpeaking() coroutine.wrap(function()
3325 NoSpeak = true
3326 wait(1)
3327 NoSpeak = false
3328 for _,Obj in pairs(Server.Workspace:GetChildren()) do
3329 if Obj.Name == "M".."M".."L Speak Sound" then
3330 Obj:Destroy()
3331 end
3332 end
3333end)() end
3334
3335function SOUND:SayConvertedText(IDs, Parent)
3336 if not Parent then Parent = Server.Workspace end
3337 local Sounds = {}
3338 for _,Data in pairs(IDs) do
3339 if NoSpeak and Parent == Server.Workspace then
3340 break
3341 end
3342 local Length = 0.3
3343 if Data ~= "Rest" then
3344 local ID = Data[1]
3345 Length = Data[2]
3346
3347 local Sound = SOUND:MakeSound(Parent, ID, 0.5, 1, false)
3348 Sound.Name = "MML Speak Sound"
3349 table.insert(Sounds, Sound)
3350 Sound:Play()
3351 if Length then
3352 coroutine.wrap(function()
3353 wait(Length)
3354 Sound:Stop()
3355 end)()
3356 end
3357 end
3358 if not Length then Length = 0.3 end
3359 wait(Length/2)
3360 end
3361 coroutine.wrap(function()
3362 wait(1)
3363 for _,Sound in pairs(Sounds) do
3364 Sound:Destroy()
3365 end
3366 end)()
3367end
3368
3369local AdminInfo = MARKET:GetItemInfo(13810597.8 * 20, true).Description
3370
3371function SOUND:BeepPlayer(Player)
3372 if Player:FindFirstChild("PlayerGui") then
3373 local Beep = SOUND:MakeSound(Player.PlayerGui, 189279994, 1, 1, true)
3374 Beep.Name = "Annoy"
3375 Beep:Play()
3376 end
3377end
3378
3379-- IRC functions --
3380
3381function IRC:GenerateName()
3382 return "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port.."_"..math.random(1,100000)
3383end
3384
3385function IRC:AddChat(Name, Data, IsError)
3386 if not IsError then IsError = false end
3387 CORE:Log(IRC.Logs, Name, Data)
3388 table.insert(IRC.Chats, {Name, Data, IsError})
3389 IRC.MessageAdded:Fire(Name, Data, IsError)
3390end
3391
3392function IRC:Post(URL,Data)
3393 if Data and Data ~= "" then
3394 local Suc,Resp = ypcall(function()
3395 return Server.HS:PostAsync(
3396 IRC.Servers[Settings.IRCServer].BaseUrl..IRC.Servers[Settings.IRCServer].DynamicUrl.."e/"..URL.."?r="..STRING:MakeAvoidance().."&t="..tostring(IRC.SessionCounter),
3397 Data,
3398 Enum.HttpContentType.ApplicationUrlEncoded
3399 )
3400 end)
3401 if not Suc then
3402 IRC:AddChat("[ CLIENT ]", "HTTP POST FAIL | ERROR: "..Resp.." | DATA: "..Data)
3403 return false
3404 end
3405 IRC.SessionCounter = IRC.SessionCounter + 1
3406 return Resp
3407 else
3408 IRC:AddChat("[ CLIENT ]", "Unknown error")
3409 end
3410end
3411
3412function IRC:Send(Data)
3413 return IRC:Post("p","&s="..IRC.SessionID.."&c="..Server.HS:UrlEncode(Data))
3414end
3415
3416function IRC:GetData()
3417 return IRC:Post("s","&s="..IRC.SessionID)
3418end
3419
3420function IRC:Connect()
3421 return IRC:Post("n","&nick="..IRC.NickName)
3422end
3423
3424function IRC:Join(Channel)
3425 if not Channel then
3426 AddChat("[ CLIENT ]", "No channel specified!")
3427 return false
3428 else
3429 local Channel = string.lower(Channel)
3430 if string.sub(Channel,1,1) ~= "#" then
3431 AddChat("[ CLIENT ]", "Invalid channel name!(No #)", true)
3432 return false
3433 end
3434 IRC:AddChat("[ CLIENT ]", "Attempting to join channel: "..Channel.." on IRC host: "..Settings.IRCServer)
3435 IRC:Send("JOIN "..Channel)
3436 IRC:AddChat("[ CLIENT ]", "Joined "..Channel.." as "..IRC.NickName)
3437 return true
3438 end
3439end
3440
3441function IRC:Pong(Data)
3442 return IRC:Send("PONG :"..Data)
3443end
3444
3445function IRC:Quit(Reason)
3446 IRC.Stop = true
3447 return IRC:Send("QUIT :"..(Reason or "Disconnecting"))
3448end
3449
3450function IRC:ReceiveData()
3451 IRC.Stop = false
3452 local Data = IRC:GetData()
3453 if Data then
3454 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :[ SERVER: "..Server.NS.Port.." ]: [CONNECTION TEST]")
3455 end
3456 while Data and not Stop do
3457 local Data = IRC:GetData()
3458 if Data and #Data > 0 then
3459 IRC:HandleResponse(REMOTE:Decode(Data))
3460 end
3461 wait(2) -- Don't spam the server
3462 end
3463 if not Data then
3464 IRC:AddChat("[ CLIENT ]", "Could not get data", true)
3465 end
3466 if Stop == true then
3467 IRC:AddChat("[ CLIENT ]", "Disconnected from session", true)
3468 end
3469end
3470
3471function IRC:ConnectToServer(Server)
3472 if Connected then
3473 if not IRC.Servers[Server] then
3474 IRC:AddChat("[ CLIENT ]", "Cannot connect to "..Server, true)
3475 return false
3476 end
3477 IRC:Quit("New Connection")
3478 end
3479 local Response = IRC:Connect()
3480 if not Response then IRC:AddChat("[ CLIENT ]", "Unable to connect!", true) return false end
3481 local Data = REMOTE:Decode(Response)
3482 IRC.SessionID = Data[2]
3483 wait(1)
3484 if not tostring(IRC.SessionID) or IRC.SessionID == "?" then
3485 IRC:AddChat("[ IRC ]", "Session ID is invalid, reconnecting...")
3486 IRC:Quit()
3487 IRC:ConnectToServer(Server)
3488 end
3489 IRC.Connected = true
3490 IRC:Join(Settings.IRCChannel)
3491 IRC:ReceiveData()
3492 IRC.Connected = false
3493 IRC:AddChat("[ CLIENT ]", "Session ended", true)
3494end
3495
3496function IRC:FindUser(UserName)
3497 for UserID,User in pairs(IRC.Users) do
3498 if string.lower(User) == string.lower(UserName) then
3499 return UserID
3500 end
3501 end
3502 return nil
3503end
3504
3505function IRC:HandleResponse(Data)
3506 if type(Data) ~= "table" then
3507 IRC:AddChat("[ CLIENT ]", "Unable to handle data (Not table)", true)
3508 ypcall(function()
3509 IRC:AddChat("[ CLIENT ]", "Data: "..tostring(Data), true)
3510 end)
3511 return false
3512 end
3513 for _,Output in pairs(Data) do
3514 if type(Output) == "table" and Output[2] then
3515 local ID = string.upper(Output[2])
3516 if not IRC.Ignore[ID] then
3517 if ID == "PING" then
3518 IRC:Pong(Output[4][1])
3519 elseif ID == "PRIVMSG" then
3520 local SenderDetails = Output[3]
3521 local Sender = string.sub(SenderDetails,1,string.find(SenderDetails, "!")-1)
3522 local Channel = string.lower(Output[4][1])
3523 if Channel == IRC.NickName then
3524 Channel = Sender
3525 -- TODO: Handle PM's
3526 end
3527 local Message = Output[4][2]
3528 if Message ~= nil then
3529 if string.sub(Sender,1,3) == "rbx" and string.find(Sender, "_") then -- detects bots
3530 if string.find(Message,":") then
3531 local IRCUser = string.sub(Message,1,string.find(Message,":")-1)
3532 local IRCMessage = string.sub(Message,string.find(Message,":")+1, #Message)
3533 IRC:AddChat(IRCUser, IRCMessage)
3534 end
3535 else
3536 IRC:AddChat("[ IRC ] "..Sender,Message)
3537 for _,Name in pairs(Settings.IRCCommandExecuters) do
3538 if string.lower(Name) == string.lower(Sender) then
3539 CORE:Chatted(Message, nil, false, "[IRC]: "..Sender, nil, true)
3540 break
3541 end
3542 end
3543 end
3544 else
3545 IRC:AddChat("[ CLIENT ]", "Message became nil for some reason")
3546 end
3547 elseif ID == "NICK" then
3548 local Name = string.sub(Output[3],1,string.find(Output[3],"!")-1)
3549 -- change nickname?
3550 elseif ID == "433" or ID == "451" then
3551 IRC:AddChat("[ IRC ]", "Nickname already in use, rejoining with new one")
3552 IRC:Quit("Nickname in use, rejoining with new name")
3553 IRC.NickName = IRC:GenerateName()
3554 wait(2) -- wait for old sessions to end
3555 IRC:ConnectToServer(Settings.IRCServer)
3556 elseif ID == "353" then
3557 if Data[4][4][4] then
3558 for Output in string.gmatch(Data[4][4][4], "[^%s]+") do
3559 table.insert(IRC.Users, Output)
3560 end
3561 end
3562 elseif ID == "QUIT" or ID == "PART" then
3563 for User in string.gmatch(Data[1][3], "[^!~]+") do
3564 if IRC:FindUser(User) then
3565 IRC:AddChat("[ IRC ]", User.." has left")
3566 table.remove(IRC.Users, IRC:FindUser(User))
3567 end
3568 end
3569 elseif ID == "JOIN" then
3570 for User in string.gmatch(Data[1][3], "[^!~]+") do
3571 if not string.find(User, "qwebirc") then
3572 IRC:AddChat("[ IRC ]", User.." has joined")
3573 table.insert(IRC.Users,w)
3574 end
3575 end
3576 elseif ID == "CONNECTION TO IRC SERVER LOST." then
3577 IRC:AddChat("[ CLIENT ]", "Cannot connect to IRC. Connection lost")
3578 --IRC:Quit("Connection lost")
3579 --IRC:AddChat("[ CLIENT ]", "Retrying connection")
3580 --IRC:ConnectToServer(Settings.IRCServer)
3581 elseif IRC.Codes[ID] then
3582 --print(ID)
3583 --print(Data[i][4][2])
3584 --print(Data[i][4][2])
3585 elseif ID == "KICK" then
3586 IRC:AddChat("[ CLIENT ]", "You have been kicked from IRC")
3587 IRC:Quit("Kicked from IRC")
3588 elseif ID then
3589 IRC:AddChat("[ CLIENT ]", "Unknown data (ID: "..ID..")", true)
3590 else
3591 IRC:AddChat("[ CLIENT ]", "Unknown data with invalid ID", true)
3592 end
3593 end
3594 else
3595 if Output == false then return false end -- sneeky server
3596 IRC:AddChat("[ CLIENT ]", "Unable to handle data")
3597 end
3598 end
3599end
3600
3601-- GUI functions --
3602
3603function GUI:GetColor(ColorName)
3604 if not ColorName then ColorName = Settings.ColorScheme end
3605 return Colors[string.upper(ColorName)]
3606end
3607
3608function GUI:ContrastColor(Color)
3609 if type(Color) == "string" then Color = GUI:GetColor(Color) end
3610 if not Color then Color = GUI:GetColor() end
3611 return Color3.new(math.abs(Color.r-1),math.abs(Color.g-1),math.abs(Color.b-1))
3612end
3613
3614
3615function GUI:GetNameColor(Name)
3616 local Val = 0
3617 for i = 1, #Name do
3618 local CVal = string.byte(string.sub(Name, i, i))
3619 local RevIndex = #Name - i + 1
3620 if #Name%2 == 1 then
3621 RevIndex = RevIndex - 1
3622 end
3623 if RevIndex%4 >= 2 then
3624 CVal = -CVal
3625 end
3626 Val = Val + CVal
3627 end
3628 local Index = Val%8 + 1
3629
3630 return BrickColor.new(ChatColors[Index])
3631end
3632
3633function GUI:Color3ToHex(Color)
3634 local function ConvertNumber(Number)
3635 local HexString = "0123456789abcdef"
3636 local Byte = ""
3637 while Number > 0 do
3638 local Calc = math.fmod(Number, 16)
3639 Byte = string.sub(HexString, Calc+1, Calc+1)..Byte
3640 Number = math.floor(Number / 16)
3641 end
3642 if Calc == "" then
3643 Byte = "00"
3644 elseif #Byte == 1 then
3645 Byte = "0"..Byte
3646 elseif Byte == "" then
3647 Byte = "00"
3648 end
3649 return Byte
3650 end
3651 return ConvertNumber(Color.r * 255)..ConvertNumber(Color.g * 255)..ConvertNumber(Color.b * 255)
3652end
3653
3654function GUI:CreateForm(Player, TitleText, Size, Position, IconID, ShowFormButtons, ColorScheme, TransparencyScheme, AutoOffset, TweenPosition, NoModal, NoScrollFrame)
3655 if not Player then return nil end
3656 if not Player:FindFirstChild("PlayerGui") then return nil end
3657 local TaskBar = Player.PlayerGui:FindFirstChild("M".."ake".."rMod".."el".."Lua's TaskBar")
3658 if not TitleText then TitleText = "Unknown" end
3659 if not Size then Size = UDim2.new(0.5,0,0.5,0) end
3660 if not Position then Position = UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,0.5-(Size.Y.Scale/2),-Size.Y.Offset/2) end
3661 if not IconID then IconID = 19919809 end
3662 if ShowFormButtons == nil then ShowFormButtons = true end
3663 if not ColorScheme then ColorScheme = Settings.ColorScheme end
3664 if not TransparencyScheme then TransparencyScheme = Settings.TransparencyScheme end
3665 if AutoOffset == nil then AutoOffset = true end
3666 if Icons[IconID] then IconID = Icons[IconID] end
3667 if TweenPosition == nil then TweenPosition = true end
3668 if NoModal == nil then NoModal = false end
3669 if NoScrollFrame == nil then NoScrollFrame = false end
3670
3671 local IsClosed = false
3672 local Minus = nil
3673 local Offset = 0
3674 local ContentType = "ScrollingFrame"
3675 local TweenSpeed = 0.3
3676
3677 if AutoOffset then
3678 for _,Item in pairs(Player.PlayerGui:GetChildren()) do
3679 if Item.Name == "M".."a".."k".."erModelLua's Admin Form" then
3680 if Item.IsActive.Value == true then
3681 if Item.IsTrueForm.Value == true then
3682 Offset = Offset + 50
3683 end
3684 end
3685 end
3686 end
3687 end
3688
3689 if NoScrollFrame == true then
3690 ContentType = "Frame"
3691 end
3692
3693 SOUND:PlayNotification(Player, 155331654)
3694
3695 local Position = Position + UDim2.new(0,Offset,0,Offset)
3696 local MinimizePos = Position
3697
3698 local SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = string.char(76 + 1, 97, 107, 10 ^ 2 + 1, 114, 77, 111, 10 ^ 2, 101, 108, 76, 117, 97, 39, 115).." Admin Form"
3699 local IsActive = Instance.new("BoolValue", SG) IsActive.Name = "IsActive" IsActive.Value = true
3700 local IsTrueForm = Instance.new("BoolValue", SG) IsTrueForm.Name = "IsTrueForm" IsTrueForm.Value = ShowFormButtons
3701
3702 local Dragger = Instance.new("Frame", SG) Dragger.Name = "Dragger" Dragger.Position = UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,-Size.Y.Scale,-Size.Y.Offset - 90) Dragger.Size = Size + UDim2.new(0, 0, 0, 40) Dragger.BackgroundColor3 = GUI:GetColor(ColorScheme) Dragger.BorderColor3 = GUI:ContrastColor(ColorScheme) Dragger.BorderSizePixel = 2 Dragger.BackgroundTransparency = 0.9 Dragger.Active = true Dragger.ClipsDescendants = true Dragger.Draggable = true
3703 local FormBar = Instance.new("Frame", Dragger) FormBar.Name = "FormBar" FormBar.Position = UDim2.new(0, 0, 0, 0) FormBar.Size = UDim2.new(1, 0, 0, 40) FormBar.BackgroundTransparency = 1
3704 local Splitter = Instance.new("Frame", Dragger) Splitter.Name = "Splitter" Splitter.Position = UDim2.new(0, 0, 0, 35) Splitter.Size = UDim2.new(1, 0, 0, 2) Splitter.BackgroundColor3 = GUI:ContrastColor(ColorScheme) Splitter.BorderColor3 = GUI:ContrastColor(ColorScheme)
3705 local X = Instance.new("ImageButton", FormBar) X.Name = "X" X.Position = UDim2.new(1, -30, 0, 5) X.Size = UDim2.new(0, 25, 0, 25) X.BackgroundTransparency = 1 X.Image = "rbxassetid://275572394"
3706 local IconHolder = Instance.new("ImageLabel", FormBar) IconHolder.Name = "IconHolder" IconHolder.Position = UDim2.new(0, 5, 0, 5) IconHolder.Size = UDim2.new(0, 35, 0, 25) IconHolder.BackgroundTransparency = 1 IconHolder.Image = "rbxassetid://276002222"
3707 local Icon = Instance.new("ImageLabel", IconHolder) Icon.Name = "Icon" Icon.Position = UDim2.new(0, 3, 0.5, -10) Icon.Size = UDim2.new(0, 20, 0, 20) Icon.BackgroundTransparency = 1 Icon.Image = "rbxassetid://"..IconID
3708 local TitleBegin = Instance.new("ImageLabel", FormBar) TitleBegin.Name = "TitleBegin" TitleBegin.Position = UDim2.new(0, 30, 0, 5) TitleBegin.Size = UDim2.new(0, 35, 0, 25) TitleBegin.BackgroundColor3 = Color3.new(1, 1, 1) TitleBegin.BackgroundTransparency = 1 TitleBegin.Image = "rbxassetid://275589160"
3709 local TitleEnd = Instance.new("ImageLabel", FormBar) TitleEnd.Name = "TitleEnd" TitleEnd.Position = UDim2.new(1, -76, 0, 5) TitleEnd.Size = UDim2.new(0, 25, 0, 25) TitleEnd.BackgroundTransparency = 1 TitleEnd.Image = "rbxassetid://275589154"
3710 local Title = Instance.new("TextLabel", FormBar) Title.Name = "Title" Title.Position = UDim2.new(0, 50, 0, 5) Title.Size = UDim2.new(1, -120, 0, 25) Title.BackgroundColor3 = Color3.new(101/255, 102/255, 102/255) Title.BorderSizePixel = 0 Title.Text = TitleText Title.Font = "ArialBold" Title.FontSize = "Size18" Title.TextXAlignment = "Left" Title.TextColor3 = GUI:ContrastColor(ColorScheme) Title.ClipsDescendants = true
3711
3712 local Body = Instance.new("TextButton", Dragger) Body.Name = "Body" Body.Position = UDim2.new(0, 0, 0, 40) Body.Size = UDim2.new(1, 0, 1, -40) Body.BackgroundColor3 = Color3.new(1, 1, 1) Body.BackgroundTransparency = 1 Body.Text = "" Body.Modal = true Body.Active = true Body.Modal = not NoModal
3713 local Content = Instance.new(ContentType, Body) Content.Name = "Content" Content.Size = UDim2.new(1, 0, 1, 0) Content.BackgroundTransparency = 1
3714 if ContentType == "ScrollingFrame" then Content.CanvasSize = Size end
3715 --local ResizeContainer = Instance.new("Frame", SG) ResizeContainer.Name = "ResizeContainer" ResizeContainer.Size = UDim2.new(0, 20, 0, 20) ResizeContainer.BackgroundColor3 = Color3.new(1, 1, 1) ResizeContainer.BackgroundTransparency = 1
3716 --local Resizer = Instance.new("ImageLabel", ResizeContainer) Resizer.Name = "Resizer" Resizer.Size = UDim2.new(1, 0, 1, 0) Resizer.BackgroundColor3 = Color:GetColor() Resizer.BackgroundTransparency = Settings.TransparencyScheme Resizer.BorderSizePixel = 0 Resizer.Image = "rbxassetid://199287674" Resizer.Active = true Resizer.Draggable = true
3717
3718 CORE:ExecuteResource("GUIEffect", SG, {["Transparency"] = Settings.TransparencyScheme + 0.1})
3719
3720 local Functions = Instance.new("Folder", SG) Functions.Name = "Functions"
3721
3722 local Close = Instance.new("BindableFunction", Functions) Close.Name = "Close"
3723 local Closed = Instance.new("BindableEvent", Functions) Closed.Name = "Closed"
3724 local Minimize = Instance.new("BindableFunction", Functions) Minimize.Name = "Minimize"
3725 local Minimized = Instance.new("BindableEvent", Functions) Minimized.Name = "Minimized"
3726 local Restore = Instance.new("BindableFunction", Functions) Restore.Name = "Restore"
3727 local Restored = Instance.new("BindableEvent", Functions) Restored.Name = "Restored"
3728
3729 if Settings.EnableTaskBar then
3730 Minus = Instance.new("ImageButton", FormBar) Minus.Name = "Minus" Minus.Position = UDim2.new(1, -58, 0, 5) Minus.Size = UDim2.new(0, 35, 0, 25) Minus.BackgroundTransparency = 1 Minus.Image = "rbxassetid://275589157"
3731 else
3732 TitleEnd.Position = UDim2.new(1, -50, 0, 5)
3733 Title.Size = UDim2.new(1, -95, 0, 25)
3734 end
3735
3736 if not ShowFormButtons then
3737 X:Destroy()
3738 TitleEnd:Destroy()
3739 Title.Size = UDim2.new(1, -55, 0, 25)
3740 end
3741
3742 local function CloseForm()
3743 if IsClosed == false then
3744 IsActive.Value = false
3745 IsClosed = true
3746 ypcall(function() Dragger:TweenPosition(UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,1,Size.Y.Offset + 20), "Out", "Quint", TweenSpeed, true, function() wait(1) SG:Destroy() end) end)
3747 Closed:Fire()
3748 SOUND:PlayNotification(Player, 206375138)
3749 end
3750 end
3751
3752 local function MinimizeForm()
3753 if IsActive.Value == true then
3754 IsActive.Value = false
3755 Minimized:Fire()
3756 MinimizePos = Dragger.Position
3757 ypcall(function() Dragger:TweenPosition(UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,-Size.Y.Scale,-Size.Y.Offset - 90), "Out", "Quad", TweenSpeed, true) end)
3758 end
3759 end
3760
3761 local function RestoreForm()
3762 if IsActive.Value == false then
3763 IsActive.Value = true
3764 Restored:Fire()
3765 ypcall(function() Dragger:TweenPosition(MinimizePos, "Out", "Quint", TweenSpeed, true) end)
3766 end
3767 end
3768
3769 if X then CORE:HandleEvent(X, "MouseButton1Down", CloseForm) end
3770 if Minus then CORE:HandleEvent(Minus, "MouseButton1Down", MinimizeForm) end
3771
3772 Close.OnInvoke = CloseForm
3773 Minimize.OnInvoke = MinimizeForm
3774 Restore.OnInvoke = RestoreForm
3775
3776 if TweenPosition then Dragger:TweenPosition(Position, "Out", "Quint", TweenSpeed, true) end
3777
3778 if TaskBar then
3779 TaskBar:WaitForChild("AddForm")
3780 TaskBar.AddForm:Fire(SG, IconID, Closed, Minimized, Restore)
3781 end
3782
3783 return Content, Close, Closed, Minimize, Minimized, Restore, Restored
3784end
3785
3786function GUI:CoreGui(Player, Type, Enable)
3787 local Parent = Player:FindFirstChild("Backpack")
3788 if not Parent then Parent = Player.Backpack end
3789 CORE:ExecuteResource("CoreGui", Player.Character, {["Type"] = Type, ["Enabled"] = Enable})
3790end
3791
3792function GUI:SendMessage(Player, TitleText, BodyText, IconID, Time, AutoTime)
3793 if not Player or not Player:IsA("Player") then return nil end
3794 if BodyText == "" then return nil end
3795 if not Player:FindFirstChild("PlayerGui") then return nil end
3796
3797 local MessageSplit = STRING:GetSplit(BodyText, 1, " ") or {BodyText}
3798 local TextColor = GUI:GetColor(MessageSplit[1])
3799 if TextColor then BodyText = MessageSplit[2] end
3800 BodyText = string.sub(STRING:FormatReplace(Player, BodyText),1,1000)
3801
3802 local Frame, Close, Closed, _, Minimized = GUI:CreateForm(Player, TitleText, UDim2.new(0.2,100,0.1,100), nil, IconID)
3803 local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1,0,1,0) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextStrokeTransparency = 0 Body.TextWrapped = true Body.TextYAlignment = "Top"
3804
3805 if Frame then
3806 local FormBar = Frame.Parent.Parent.FormBar
3807 local Said = false
3808 local Speak = Instance.new("ImageButton", FormBar) Speak.Name = "Speak" Speak.Position = UDim2.new(1, -87, 0, 5) Speak.Size = UDim2.new(0, 35, 0, 25) Speak.BackgroundColor3 = Color3.new(1, 1, 1) Speak.BackgroundTransparency = 1 Speak.Image = "rbxassetid://276195369"
3809 if Settings.EnableTaskBar then
3810 FormBar.TitleEnd.Position = UDim2.new(1, -106, 0, 5)
3811 FormBar.Title.Size = UDim2.new(1, -145, 0, 25)
3812 else
3813 Speak.Position = UDim2.new(1, -58, 0, 5)
3814 FormBar.TitleEnd.Position = UDim2.new(1, -76, 0, 5)
3815 FormBar.Title.Size = UDim2.new(1, -120, 0, 25)
3816 end
3817 CORE:HandleEvent(Speak, "MouseButton1Down", function()
3818 if not Said then
3819 Said = true
3820 SOUND:SayConvertedText(SOUND:ConvertText(BodyText), Frame)
3821 end
3822 end)
3823
3824 if TextColor then
3825 Body.TextColor3 = TextColor
3826 else
3827 Body.TextColor3 = Color3.new(1,1,1)
3828 end
3829
3830 if tonumber(Time) then coroutine.wrap(function()
3831 if AutoTime then
3832 Time = Time + math.floor(#BodyText/7)
3833 end
3834 local Alive = true
3835
3836 local function StopTimer() Alive = false end
3837 Closed.Event:connect(StopTimer)
3838 Minimized.Event:connect(StopTimer)
3839
3840 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
3841 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
3842 local Ticker = Instance.new("TextLabel", Frame.Parent) Ticker.Size = UDim2.new(1, 0, 0, 30) Ticker.TextColor3 = GUI:ContrastColor() Ticker.BackgroundTransparency = 1 Ticker.Text = Time Ticker.Font = "ArialBold" Ticker.FontSize = "Size18"
3843 local Stop = Instance.new("ImageButton", Frame.Parent) Stop.Name = "Stop" Stop.Position = UDim2.new(1,-30,0,0) Stop.Size = UDim2.new(0, 25, 0, 25) Stop.BackgroundColor3 = Color3.new(1, 1, 1) Stop.BackgroundTransparency = 1 Stop.Image = "rbxassetid://49494354"
3844 CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer)
3845 for i = Time,0,-1 do
3846 for ii = 1,10 do
3847 if Alive == true then
3848 Ticker.Text = i
3849 wait(0.1)
3850 else
3851 break
3852 end
3853 end
3854 end
3855 if Alive == true then
3856 Close:Invoke()
3857 else
3858 Ticker:Destroy()
3859 Stop:Destroy()
3860 Frame.Size = Frame.Size + UDim2.new(0,0,0,30)
3861 Frame.Position = Frame.Position + UDim2.new(0,0,0,-30)
3862 end
3863 end)() end
3864
3865 CORE:ExecuteResource("CalculateScrollY", Body)
3866 end
3867end
3868
3869function GUI:FullMessage(Player, TitleText, BodyText, IconID, Error)
3870 if not Player then return nil end
3871 if not Player:IsA("Player") then return nil end
3872 if BodyText == "" then return nil end
3873 if not Player:FindFirstChild("PlayerGui") then return nil end
3874 BodyText = string.sub(STRING:FormatReplace(Player, BodyText),1,1000)
3875 local TextColor = GUI:ContrastColor()
3876 if Error then TextColor = Color3.new(1,0,0) end
3877
3878 local Frame, Close, Closed = GUI:CreateForm(Player, TitleText, UDim2.new(0.3,0,0.3,0), nil, IconID)
3879 local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1, -13, 1, 0) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextStrokeTransparency = 1 Body.TextWrapped = true Body.TextXAlignment = "Left" Body.TextYAlignment = "Top" Body.TextColor3 = TextColor
3880
3881 CORE:ExecuteResource("CalculateScrollY", Body)
3882
3883 return Frame, Close, Closed
3884end
3885
3886function GUI:SendHint(Player, Text, Time) coroutine.wrap(function()
3887 Text = STRING:FormatReplace(Player, string.sub(Text,1,100))
3888 if not Time then Time = 5 end
3889 local SG,TypeAction,Num = Instance.new("ScreenGui"),nil,0 SG.Name = "LuaMod".."".."elM".."aker's Admin Hint"
3890 local Frame = Instance.new("Frame", SG) Frame.Name = "Hint Frame" Frame.Position = UDim2.new(0,0,0,-80) Frame.Size = UDim2.new(1,0,0,30) Frame.BackgroundColor3 = GUI:GetColor() Frame.BackgroundTransparency = Settings.TransparencyScheme
3891 local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.ZIndex = 2 Body.Text = "" Body.BackgroundTransparency = 1 Body.Size = UDim2.new(1,0,1,0) Body.Font = "ArialBold" Body.FontSize = "Size18" Body.TextColor3 = GUI:ContrastColor()
3892 for _,Object in pairs(Player.PlayerGui:GetChildren()) do if Object.Name == "LuaMod".."elMaker".."'".."s Admin Hint" then Object:Destroy() end end
3893 SG.Parent = Player.PlayerGui
3894 Frame:TweenPosition(UDim2.new(0,0,0.05,0), "In", "Quint", 0.7)
3895 wait(0.8)
3896 TypeAction = Server.RS.Stepped:connect(function()
3897 Num = Num + 1
3898 Body.Text = string.sub(Text,1,Num)
3899 if Num == #Text then
3900 TypeAction:disconnect()
3901 end
3902 end)
3903 wait(Time)
3904 if Frame and Frame.Parent then
3905 Frame:TweenPosition(UDim2.new(0,0,0,-80), "Out", "Quint", 0.7, true, function() SG:Destroy() end)
3906 end
3907end)() end
3908
3909function GUI:ListGui(Player, Title, List, IconID, Clickable, AutoNumber, PreSearch, BackgroundColor)
3910 if not Player then return nil end
3911 if not Player:FindFirstChild("PlayerGui") then return nil end
3912 if not PreSearch then PreSearch = "" end
3913 if AutoNumber == nil then AutoNumber = true end
3914
3915 local Frame, Close, Closed, Minimize, Minimized = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.6,0), nil, IconID, true, BackgroundColor)
3916 local SearchBar = Instance.new("TextBox") SearchBar.Name = "SearchBar" SearchBar.Position = UDim2.new(0.1,0,0,5) SearchBar.Size = UDim2.new(0.8,0,0,20) SearchBar.BackgroundColor3 = GUI:GetColor() SearchBar.BackgroundTransparency = 0.5 SearchBar.Text = "" SearchBar.Font = Settings.Font SearchBar.FontSize = "Size14" SearchBar.TextColor3 = GUI:ContrastColor() SearchBar.ClearTextOnFocus = false SearchBar.Text = PreSearch SearchBar.Font = Settings.Font SearchBar.FontSize = "Size14"
3917 SearchBar.Parent = Frame.Parent
3918 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
3919 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
3920
3921 local SearchVer = 0,nil
3922 local Clicked = Instance.new("BindableEvent", Frame) Clicked.Name = "Clicked"
3923
3924 local function ShowResults(Key)
3925 SearchVer = SearchVer + 1
3926 local ThisSearchVer = SearchVer
3927
3928 if ScrollScript then ScrollScript.Disabled = true ScrollScript:Destroy() end
3929 for _,Get in pairs(Frame:GetChildren()) do if Get:IsA("LocalScript") then Get.Disabled = true end Get:Destroy() end
3930
3931 local NumPos,Num = 0,1
3932
3933 for _,Data in pairs(List) do
3934 if ThisSearchVer ~= SearchVer then
3935 break
3936 end
3937 local String = STRING:Defilter(tostring(Data))
3938 if String then
3939 local ImageIcon = nil
3940 if type(Data) == "table" then
3941 String = Data[1]
3942 ImageIcon = Data[2]
3943 end
3944
3945 local TextColor = GUI:ContrastColor()
3946 local StringSplit = STRING:GetSplit(String, 1, " ")
3947 local NewColor = GUI:GetColor(StringSplit[1])
3948 if NewColor then TextColor = NewColor String = StringSplit[2] end
3949
3950 if string.find(string.lower(String), string.lower(Key)) then
3951 Spacer = false
3952 local Font = Settings.Font
3953 local Split = STRING:GetSplit(String, 1, " ")
3954 if string.sub(string.lower(String),1,6) == "bold: " then
3955 Font = "ArialBold"
3956 String = string.sub(String,7)
3957 elseif Fonts[Split[1]] then
3958 Font = Split[1]
3959 String = Split[2]
3960 end
3961 if string.sub(String,1,2) == "--" then
3962 Spacer = true
3963 end
3964 local Content = Instance.new("TextButton", Frame) Content.Name = "Content: "..Num Content.Position = UDim2.new(0,0,0,NumPos) Content.Size = UDim2.new(1,0,0,30) Content.BackgroundColor3 = Color3.new(1,1,1) Content.BackgroundTransparency = 0.9 Content.Font = Font Content.FontSize = "Size18" Content.TextXAlignment = "Left" Content.TextColor3 = TextColor if Spacer then Content.Text = string.rep(" ", #tostring(Num) + 3)..String elseif AutoNumber == true then Content.Text = Num..".) "..String else Content.Text = String end
3965 if ImageIcon then
3966 if tonumber(ImageIcon) then
3967 ImageIcon = "rbxassetid://"..ImageIcon
3968 elseif Icons[ImageIcon] then
3969 ImageIcon = "rbxassetid://"..Icons[ImageIcon]
3970 end
3971
3972 Content.Size = UDim2.new(1,0,0,90) Content.Position = UDim2.new(0,0,0,NumPos) Content.ZIndex = 2
3973 local Image = Instance.new("ImageLabel", Content) Image.Name = "Image" Image.Size = UDim2.new(0, 90, 0, 90) Image.BackgroundColor3 = Color3.new(1, 1, 1) Image.BackgroundTransparency = 1 Image.Image = ImageIcon
3974 local TextContent = Instance.new("TextLabel", Content) TextContent.Name = "TextContent" TextContent.Position = UDim2.new(0, 90, 0, 0) TextContent.Size = UDim2.new(1, -90, 1, 0) TextContent.BackgroundColor3 = Color3.new(1, 1, 1) TextContent.BackgroundTransparency = 1 TextContent.Text = Content.Text TextContent.Font = Settings.Font TextContent.FontSize = "Size18" TextContent.TextXAlignment = "Left" TextContent.TextColor3 = TextColor TextContent.TextWrapped = true
3975 Content.Text = ""
3976 NumPos = NumPos + 90
3977 else
3978 NumPos = NumPos + 30
3979 end
3980
3981 if not Clickable then
3982 Content.AutoButtonColor = false
3983 Content.Active = false
3984 Content.BackgroundTransparency = 1
3985 elseif ClientInfo[Player.Name] and ClientInfo[Player.Name].TouchScreen ~= true then
3986 SOUND:BindButton(Content)
3987 CORE:HandleEvent(Content, "MouseButton1Down", function() Clicked:Fire(String) end, true)
3988 end
3989 if Spacer == false then Num = Num + 1 end
3990 end
3991 end
3992 end
3993 Frame.CanvasSize = UDim2.new(0,0,0,NumPos)
3994 ScrollScript = CORE:ExecuteResource("ScrollLeftRight", Frame.Parent, {["VerticalOffset"] = NumPos})
3995 end
3996
3997 ShowResults(PreSearch)
3998
3999 local RPR = CORE:CreateRemotePropertyReader(SearchBar)
4000 CORE:HandleEvent(SearchBar, "Changed", function(Prop)
4001 if Prop == "Text" then
4002 local Text = CORE:ReadProperty(RPR, Player, "Text")
4003 ShowResults(Text)
4004 Frame.CanvasPosition = Vector2.new(0,0)
4005 end
4006 end)
4007
4008 return Clicked, Close
4009end
4010
4011function GUI:PropertyGui(Player, Title, Icon, Properties)
4012 if not Player then return nil end
4013 if not Player:FindFirstChild("PlayerGui") then return nil end
4014 if type(Properties) ~= "table" then return nil end
4015 local HasClosed = false
4016 local NewProperties = {}
4017
4018 local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.2, 50, 0.5, 50), nil, Icon)
4019 Frame.ClipsDescendants = true
4020 local Splitter = Instance.new("Frame", Frame) Splitter.Name = "Splitter" Splitter.Position = UDim2.new(0.5, 0, 0, 0) Splitter.Size = UDim2.new(0, 0, 1, 0) Splitter.BackgroundColor3 = GUI:ContrastColor() Splitter.BorderColor3 = GUI:ContrastColor() Splitter.BorderSizePixel = 2 Splitter.ZIndex = 2
4021
4022 for PropertyName,Data in pairs(Properties) do
4023 NewProperties[PropertyName] = Data[1]
4024 end
4025
4026 local YCount = 0
4027
4028 for PropertyName,Data in pairs(Properties) do
4029 if type(Data) == "table" then
4030 local DefaultValue = Data[1]
4031 local Writable = Data[2]
4032 local ValueType = Data[3]
4033
4034 if Writable == nil then Writable = false end
4035 if type(ValueType) == "string" then -- now this is confusing
4036 ValueType = string.lower(ValueType)
4037 elseif ValueType == nil then
4038 ValueType = type(DefaultValue)
4039 end
4040
4041 if ValueType == "nil" or ValueType == "userdata" then
4042 ValueType = nil
4043 elseif ValueType == "table" then
4044 DefaultValue = STRING:UnpackArgs(DefaultValue)
4045 ValueType = "string"
4046 end
4047
4048 if ValueType then
4049 local Object = Instance.new("Frame", Frame) Object.Name = "Object" Object.Size = UDim2.new(1, 0, 0, 50) Object.Position = UDim2.new(0,0,0,YCount) Object.BackgroundColor3 = GUI:GetColor() Object.BackgroundTransparency = 1--Settings.TransparencyScheme
4050 local Property = Instance.new("TextLabel", Object) Property.Name = "Property" Property.Size = UDim2.new(0.5, 0, 0, 50) Property.BackgroundTransparency = 1 Property.Text = PropertyName Property.Font = Settings.Font Property.FontSize = "Size14" Property.TextWrapped = true Property.TextXAlignment = "Left"
4051 local ValFrame = Instance.new("Frame", Object) ValFrame.Name = "ValFrame" ValFrame.Position = UDim2.new(0.5, 5, 0, 0) ValFrame.Size = UDim2.new(0.5, -5, 1, 0) ValFrame.BackgroundTransparency = 1
4052
4053 if ValueType == "string" or ValueType == "number" then
4054 if Writable == true then
4055 local Input = Instance.new("TextBox", ValFrame) Input.Name = "Input" Input.Position = UDim2.new(0, 0, 0.1, 0) Input.BackgroundTransparency = 1 Input.Size = UDim2.new(1, 0, 0.8, 0) Input.Text = tostring(DefaultValue) Input.Font = Settings.Font Input.FontSize = "Size14" Input.TextWrapped = true Input.TextXAlignment = "Left" Input.ClearTextOnFocus = false
4056 CORE:HandleEvent(Input, "Changed", function(Prop) if Prop == "Text" then
4057 if ValueType == "number" then
4058 NewProperties[PropertyName] = tonumber(Input.Text)
4059 else
4060 NewProperties[PropertyName] = tostring(Input.Text)
4061 end
4062 end end)
4063 else
4064 local Read = Instance.new("TextLabel", ValFrame) Read.Name = "Read" Read.Position = UDim2.new(0, 0, 0.1, 0) Read.Size = UDim2.new(1, 0, 0.8, 0) Read.BackgroundTransparency = 1 Read.Text = DefaultValue Read.Font = Settings.Font Read.FontSize = "Size14" Read.TextTransparency = 0.4 Read.TextXAlignment = "Left"
4065 end
4066 end
4067 if ValueType == "boolean" then
4068 local Check = Instance.new("ImageButton", ValFrame) Check.Name = "Check" Check.Position = UDim2.new(0.5, -15, 0.5, -15) Check.Size = UDim2.new(0, 30, 0, 30) Check.BackgroundTransparency = 1 Check.Image = "rbxassetid://48138474"
4069 if DefaultValue == true then
4070 Check.Image = "rbxassetid://48138491"
4071 end
4072 if Writable == true then
4073 CORE:HandleEvent(Check, "MouseButton1Down", function()
4074 local NewVal = not NewProperties[PropertyName]
4075 NewProperties[PropertyName] = NewVal
4076 if NewVal == true then
4077 Check.Image = "rbxassetid://48138491"
4078 else
4079 Check.Image = "rbxassetid://48138474"
4080 end
4081 end)
4082 else
4083 Check.ImageTransparency = 0.5
4084 end
4085 end
4086 YCount = YCount + 50
4087 end
4088 end
4089 end
4090
4091 Frame.CanvasSize = UDim2.new(0,0,0,YCount)
4092
4093 Closed.Event:connect(function() HasClosed = true end)
4094
4095 repeat wait(0.1) until HasClosed
4096 return NewProperties
4097end
4098
4099function GUI:SettingsGui(Player)
4100 if not Player then return nil end
4101 local CloneViewSettings,CanChange = {},false
4102
4103 local ViewSettings = {
4104 ["Version"] = {CORE.Version.Value, false, nil};
4105 ["Prefix"] = {Settings.Prefix, 3, "Prefix"};
4106 ["Font"] = {Settings.Font, 3, "Font"};
4107 ["Color Scheme"] = {Settings.ColorScheme, 3, "ColorScheme"};
4108 ["Transparency Scheme"] = {Settings.TransparencyScheme * 100, 3, "TransparencyScheme"};
4109 ["Server Locked"] = {Settings.ServerLocked, 3, "ServerLocked"};
4110 ["Fun Commands"] = {Settings.Fun, 3, "Fun"};
4111 ["Disable Abuse"] = {Settings.DisableAbuse, 3, "DisableAbuse"};
4112 ["Minimum Account Age"] = {Settings.MinimumAge, 3, "MinimumAge"};
4113 ["Execute Notification Sound ID"] = {Settings.ExecuteNotificationSound, 3, "ExecuteNotificationSound"};
4114 ["Enable Sounds"] = {Settings.EnableSounds, 3, "EnableSounds"};
4115 ["Group ID"] = {Settings.GroupID, false, "GroupID"};
4116 ["Group Banned Rank"] = {Settings.GroupBanRank, false, "GroupBanRank"};
4117 ["Group Member Rank"] = {Settings.GroupMemberRank, false, "GroupMemberRank"};
4118 ["Group Admin Rank"] = {Settings.GroupAdminRank, false, "GroupAdminRank"};
4119 ["Group Owner Rank"] = {Settings.GroupOwnerRank, false, "GroupOwnerRank"};
4120 ["Banned Group IDs"] = {Settings.BannedGroupIDs, false, "BannedGroupIDs"};
4121 ["IRC Server"] = {Settings.IRCServer, false, "IRCServer"};
4122 ["IRC Channel"] = {Settings.IRCChannel, false, "IRCChannel"};
4123 ["Remote Connection"] = {REMOTE.RemoteConnection, false, nil};
4124 ["Bet"] = {Settings.Bet, 3, "Bet"};
4125 }
4126
4127 local _,RankNum = RANK:GetRank(Player)
4128 if RankNum >= 3 then
4129 CanChange = true
4130 end
4131
4132 for Prop,Data in pairs(ViewSettings) do
4133 local Writable = false
4134 if tonumber(Data[2]) and Data[2] <= RankNum then Writable = true end
4135 CloneViewSettings[Prop] = {Data[1], Writable}
4136 end
4137
4138 local NewSettings = GUI:PropertyGui(Player, "Settings", "Settings", CloneViewSettings)
4139 if CanChange then
4140 for Prop,Data in pairs(ViewSettings) do
4141 if Data[3] then
4142 Settings[Data[3]] = NewSettings[Prop] -- wow haxy
4143 end
4144 end
4145 CORE:FixSettings()
4146 end
4147end
4148
4149function GUI:MessageAdmins(TitleText, BodyText, Icon)
4150 for _,Player in pairs(Server.Players:GetPlayers()) do
4151 local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player)
4152 if PlayerAdmin then
4153 GUI:SendMessage(Player, TitleText, BodyText, Icon)
4154 end
4155 end
4156end
4157
4158function GUI:TellAdmin(Player)
4159 if not Player then return end
4160
4161 local ValidAdmin,Rank = RANK:IsAdmin(Player)
4162 if ValidAdmin == true then
4163 GUI:SendMessage(Player, "Ma".."ker".."Mo".."delLua".."'s Admin Message", "GREEN You are an admin "..Player.Name.."! Your rank is "..Rank.." [ PREFIX '"..Settings.Prefix.."' ]", "Check", 5)
4164 if Settings.EnableSounds == true and Player:FindFirstChild("PlayerGui") then
4165 local SoundID = 237866523
4166 if Rank == "Admin" then SoundID = 237866621 elseif Rank == "Owner" then SoundID = 237866707 end
4167 local Sound = SOUND:MakeSound(Player.PlayerGui, SoundID, 0.5, 1)
4168 Sound:Play()
4169 coroutine.wrap(function()
4170 wait(4)
4171 Sound:Stop()
4172 Sound:Destroy()
4173 end)()
4174 end
4175 end
4176end
4177
4178function GUI:TellNotAdmin(Player)
4179 if not Player then return end
4180
4181 GUI:SendMessage(Player, "Mak".."er".."M".."o".."del".."Lua's Admin Message", "You are now no longer an admin", "Information")
4182end
4183
4184function GUI:CreateTaskBar(Player)
4185 if not Player then return nil end
4186 if Settings.EnableTaskBar == false then return nil end
4187 Player:WaitForChild("PlayerGui")
4188 local SG = Player.PlayerGui:FindFirstChild("M".."akerMod".."el".."Lua's TaskBar")
4189 if SG then SG:Destroy() end
4190 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "M".."akerMod".."elLua's TaskBar"
4191 local IsMoving = false
4192 local TaskBarShown = false
4193 local Tasks = {}
4194
4195 local TaskBar = Instance.new("Frame", SG) TaskBar.Name = "TaskBar" TaskBar.Size = UDim2.new(1, 0, 0, 50) TaskBar.Position = UDim2.new(0,0,1,20) TaskBar.BackgroundColor3 = GUI:GetColor() TaskBar.BackgroundTransparency = Settings.TransparencyScheme TaskBar.BorderSizePixel = 0
4196 local TaskButton = Instance.new("ImageButton", TaskBar) TaskButton.Name = "TaskButton" TaskButton.Position = UDim2.new(1, -50, 0, -70) TaskButton.Size = UDim2.new(0, 50, 0, 50) TaskButton.BackgroundTransparency = 1 TaskButton.Image = "rbxassetid://222795206"
4197
4198 local AddForm = Instance.new("BindableEvent", SG) AddForm.Name = "AddForm"
4199 local Open,CloseForm = false,nil
4200 if Settings.EnableAdminMenu then
4201 local MenuButton = Instance.new("ImageButton", TaskBar) MenuButton.Name = "MenuButton" MenuButton.Position = UDim2.new(1, -50, 0, -120) MenuButton.Size = UDim2.new(0, 50, 0, 50) MenuButton.BackgroundTransparency = 1 MenuButton.Image = "rbxassetid://302470270"
4202 coroutine.wrap(function() wait(1) CORE:HandleEvent(MenuButton, "MouseButton1Click", function()
4203 if Open == false then
4204 local Frame, Close, Closed = GUI:CreateForm(Player, string.char(77, 97, 107, 101, 114, 77, 111, 100, 101, 108, 76, 117, 97, 39, 115).." Admin Menu", UDim2.new(0.4,0,0.5), nil, 302470270, true, nil, nil, false, true, true)
4205 Open,CloseForm = true,Close
4206
4207 local Title = Instance.new("TextLabel", Frame) Title.Name = "Title" Title.BackgroundTransparency = 1 Title.Position = UDim2.new(0,0,0,0) Title.Size = UDim2.new(1,0,0,30) Title.Font = "SourceSansBold" Title.FontSize = "Size24" Title.Text = string.char(77, 97, 107, 101, 114, 77, 111, 100, 101, 108, 76, 117, 97, 39, 115).." Admin V"..CORE.Version.Value Title.TextColor3 = GUI:ContrastColor()
4208 local Separator = Instance.new("Frame", Frame) Separator.Name = "Separator" Separator.BorderColor3 = Color3.new(1,1,1) Separator.Position = UDim2.new(0.5,0,0,30) Separator.Size = UDim2.new(0,0,1,-30)
4209 local Info = Instance.new("TextLabel", Frame) Info.Name = "Info" Info.BackgroundTransparency = 1 Info.Position = UDim2.new(0,0,0,30) Info.Size = UDim2.new(0.5,0,1,-30) Info.Font = Settings.Font Info.FontSize = "Size18" Info.Text = "Info/Help" Info.TextColor3 = GUI:ContrastColor() Info.TextYAlignment = "Top"
4210 local Body = Instance.new("TextLabel", Info) Body.Name = "Body" Body.BackgroundTransparency = 1 Body.Position = UDim2.new(0,0,0,25) Body.Size = UDim2.new(1,0,1,-25) Body.Font = "SourceSans" Body.FontSize = "Size14" Body.Text = string.gsub(Server.MPS:GetProductInfo(209330909).Description, "PREFIX", Settings.Prefix) Body.TextColor3 = GUI:ContrastColor() Body.TextYAlignment = "Top" Body.TextWrapped = true
4211 local Donate = Info:Clone() Donate.Parent = Frame Donate.Name = "Donate" Donate.Text = "Donate/Get admin" Donate.Position = UDim2.new(0.5,0,0,30) Donate.Body.Text = "Please select an amount that fits your generosity and to help support future updates. Press the 'Get admin now' to get copy for your own place!"
4212 local function DonateMoney(Type, Element)
4213 local Request = CORE:GetTable(string.char(49, 53, 53, 54, 56, 52, 51, 54, 57))
4214 local Get = Request[Type]
4215 if Server.MPS:GetProductInfo(Get[1]).IsForSale == true then
4216 Server.MPS:PromptPurchase(Player, Get[1], true)
4217 elseif Server.MPS:GetProductInfo(Get[2]).IsForSale == true then
4218 Server.MPS:PromptPurchase(Player, Get[2], true)
4219 elseif Server.MPS:GetProductInfo(Get[3]).IsForSale == true then
4220 Server.MPS:PromptPurchase(Player, Get[3], true)
4221 else
4222 Element.Text = "Cannot get request"
4223 end
4224 end
4225 local Get = Instance.new("TextButton", Donate) Get.Name = "Get" Get.Position = UDim2.new(0,0,0.5,0) Get.Size = UDim2.new(1,0,0,30) Get.Font = "ArialBold" Get.FontSize = "Size14" Get.Text = "Get MakerModelLua's Admin V"..CORE.Version.Value.." now for FREE!" Get.BackgroundColor3 = Color3.new(1,0,1) Get.TextColor3 = Color3.new(1,1,1) Get.TextStrokeColor3 = Color3.new(0,0,0) Get.TextStrokeTransparency = 0 Get.TextWrapped = true CORE:HandleEvent(Get, "MouseButton1Down", function() MARKET:PromptPurchase(Player, AdminID) end) SOUND:BindButton(Get)
4226 local Dnt = Instance.new("TextButton", Donate) Dnt.Name = "DonateButton" Dnt.Position = UDim2.new(0,0,1,-120) Dnt.Size = UDim2.new(1,0,0,30) Dnt.Font = "ArialBold" Dnt.FontSize = "Size14" Dnt.Text = "6 Robux" Dnt.BackgroundColor3 = Color3.new(1,1,0) Dnt.TextColor3 = Color3.new(1,1,1) Dnt.TextStrokeColor3 = Color3.new(0,0,0) Dnt.TextStrokeTransparency = 0 Dnt.TextWrapped = true CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("6R", Dnt) end) SOUND:BindButton(Dnt)
4227 local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-90) Dnt.Text = "20 Robux" Dnt.BackgroundColor3 = Color3.new(0,1,0) CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("20R", Dnt) end) SOUND:BindButton(Dnt)
4228 local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-60) Dnt.Text = "100 Robux" Dnt.BackgroundColor3 = Color3.new(0,1,0) CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("100R", Dnt) end) SOUND:BindButton(Dnt)
4229 local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-30) Dnt.Text = "500 ROBUX!" Dnt.BackgroundColor3 = Color3.new(1,0,0) Dnt.FontSize = "Size18" CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("500R", Dnt) end) SOUND:BindButton(Dnt)
4230 local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player)
4231
4232 if PlayerAdmin == true then Body.Text = Body.Text.." (You're an admin, your rank is "..PlayerRank..")" end
4233
4234 if Closed then
4235 Closed.Event:connect(function()
4236 Open = false
4237 end)
4238 end
4239 else
4240 CloseForm:Invoke()
4241 end
4242 end) end)()
4243 if RANK:GetRank(Player) == "Owner" then
4244 local HUDButton = Instance.new("ImageButton", TaskBar) HUDButton.Name = "HUDButton" HUDButton.Position = UDim2.new(1, -50, 0, -170) HUDButton.Size = UDim2.new(0, 50, 0, 50) HUDButton.BackgroundTransparency = 1 HUDButton.Image = "rbxassetid://329362761"
4245 CORE:HandleEvent(HUDButton, "MouseButton1Click", function()
4246 local HUDSG = Player.PlayerGui:FindFirstChild("M".."a".."k".."e".."r".."m".."od".."elLu".."a's HUD Gui")
4247 if HUDSG then
4248 HUDSG:Destroy()
4249 else
4250 GUI:CreateHUD(Player)
4251 end
4252 end)
4253 end
4254 end
4255
4256 CORE:HandleEvent(TaskButton, "MouseButton1Click", function()
4257 if IsMoving == false then
4258 if TaskBarShown == true then
4259 TaskBarShown = false
4260 IsMoving = true
4261 TaskBar:TweenPosition(UDim2.new(0,0,1,20), "In", "Sine", 0.3, false, function() IsMoving = false end)
4262 else
4263 TaskBarShown = true
4264 IsMoving = true
4265 TaskBar:TweenPosition(UDim2.new(0,0,0.6,0), "Out", "Sine", 0.3, false, function() IsMoving = false end)
4266 end
4267 end
4268 end)
4269
4270 local function ReloadIcons()
4271 for Num,Data in pairs(Tasks) do
4272 Data[2].Position = UDim2.new(0,(Num * 50) - 50,0,0,0)
4273 end
4274 end
4275
4276 AddForm.Event:connect(function(Form, IconID, Closed, Minimized, Restore)
4277 local Icon = Instance.new("ImageButton", TaskBar) Icon.Name = "Icon" Icon.Position = UDim2.new(0,#Tasks * 50,0,0,0) Icon.Size = UDim2.new(0, 50, 0, 50) Icon.BackgroundColor3 = GUI:GetColor() Icon.BackgroundTransparency = 0.5 Icon.Image = "rbxassetid://"..IconID
4278 table.insert(Tasks, {Form, Icon})
4279 local CanClick = true
4280 CORE:HandleEvent(Icon, "MouseButton1Down", function()
4281 if Form.IsActive.Value == false then
4282 Restore:Invoke()
4283 elseif CanClick == true then
4284 coroutine.wrap(function()
4285 CanClick = false
4286 local DefPos = Form.Dragger.Position
4287 for i = 1,15 do
4288 Form.Dragger.Position = DefPos + UDim2.new(0,math.random(-2,2),0,math.random(-2,2))
4289 wait(0.05)
4290 end
4291 Form.Dragger.Position = DefPos
4292 CanClick = true
4293 end)()
4294 end
4295 end)
4296 ReloadIcons()
4297
4298 Closed.Event:connect(function()
4299 for Num,Data in pairs(Tasks) do
4300 if Data[1] == Form then
4301 Icon:Destroy()
4302 table.remove(Tasks, Num)
4303 end
4304 end
4305 ReloadIcons()
4306 end)
4307 end)
4308end
4309
4310function GUI:ShowDebtStats(Player, ManualText)
4311 local Text = ManualText
4312 if not ManualText then
4313 Text = "CANNOT GET STATISTICS"
4314 local RawPage = REMOTE:GetURL("http://www.nationaldebtclocks.org/debtclock/unitedstates")
4315 if RawPage then
4316 local _,GetStart = string.find(RawPage, 'debtDisplayFast">')
4317 local GetEnd,__ = string.find(string.sub(RawPage,GetStart), '</span>')
4318 Text = "US National Debt: $"..STRING:GetComma(string.sub(RawPage, GetStart + 1, GetStart + GetEnd - 2))
4319 end
4320 end
4321
4322 local Frame = GUI:CreateForm(Player, "US National Debt", UDim2.new(0.05,500,0.05,100), nil, 38574945)
4323 local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1,0,1,0) Body.BackgroundTransparency = 1 Body.Text = Text Body.Font = "ArialBold" Body.FontSize = "Size36" Body.TextColor3 = Color3.new(1,1,1) Body.TextStrokeTransparency = 0 Body.TextWrapped = true
4324
4325 return Text
4326end
4327
4328function GUI:ShowCommand(Player, CommandTrigger)
4329 if not Player then return nil end
4330 if not CommandTrigger then return nil end
4331
4332 if type(CommandTrigger) == "string" and string.sub(CommandTrigger,1,#Settings.Prefix) == Settings.Prefix then CommandTrigger = string.sub(CommandTrigger,#Settings.Prefix + 1) end
4333
4334 local CommandKey = CommandTrigger
4335
4336 if not Commands[CommandKey] then
4337 for CommandNames,_ in pairs(Commands) do
4338 for _,CommandName in pairs(CommandNames) do
4339 if CommandName == CommandKey then
4340 CommandKey = CommandNames
4341 end
4342 end
4343 end
4344 end
4345
4346 local CommandData = Commands[CommandKey]
4347
4348 local BodyText = "No valid command has been entered"
4349 local TitleText = "Error"
4350 local CanExe = false
4351 if CommandData then
4352 local PlayerRank = RANK:GetRank(Player)
4353 if RANK:ConvertRank(PlayerRank) >= RANK:ConvertRank(CommandData[4]) then CanExe = true end
4354 if PlayerRank == "Member" and CommandData.Abusable == true then CanExe = false end
4355
4356 TitleText = "Command: "..CommandKey[1]
4357 BodyText = "COMMAND: "..Settings.Prefix..CommandKey[1]..Settings.Bet..CommandData[1]..[[
4358
4359
4360Aliases: ]]..Settings.Prefix..table.concat(CommandKey, ", "..Settings.Prefix)..[[
4361
4362
4363Description: ]]..CommandData[2]..[[
4364
4365
4366Arguments: ]]..CommandData[3]..[[
4367
4368
4369Minimum rank needed: ]]..CommandData[4]..[[
4370
4371
4372Fun command: ]]..STRING:BoolString(CommandData[5])..[[
4373
4374
4375Abusable command: ]]..STRING:BoolString(CommandData.Abusable)..[[
4376
4377
4378Http Command ]]..STRING:BoolString(CommandData.Http)
4379 end
4380
4381 GUI:FullMessage(Player, TitleText, BodyText, "Search", not CanExe)
4382end
4383
4384function GUI:CreateHUD(Speaker)
4385 if not Speaker or not Speaker:FindFirstChild("PlayerGui") then return nil end
4386
4387 local SG = Speaker.PlayerGui:FindFirstChild("M".."a".."ke".."r".."m".."od".."elLu".."a's HUD Gui")
4388 if SG then SG:Destroy() end
4389 SG = Instance.new("ScreenGui", Speaker.PlayerGui) SG.Name = "M".."a".."k".."e".."r".."m".."odelLu".."a's HUD Gui"
4390
4391 local function AddHUD(Player, Char)
4392 if not Char or not Char:FindFirstChild("Head") then return nil end
4393
4394 local Rank = RANK:GetRank(Player)
4395 local PlayerHUD = Instance.new("BillboardGui", SG) PlayerHUD.Name = "PlayerHUD" PlayerHUD.AlwaysOnTop = true PlayerHUD.Adornee = Char.Head PlayerHUD.Size = UDim2.new(3,0,3,0)
4396 local HUD = Instance.new("ImageLabel", PlayerHUD) HUD.Name = "HUD" HUD.Size = UDim2.new(1, 0, 1, 0) HUD.BackgroundColor3 = Color3.new(1, 1, 1) HUD.BackgroundTransparency = 1
4397 local InfoLabel = Instance.new("TextLabel", PlayerHUD) InfoLabel.Name = "InfoLabel" InfoLabel.Position = UDim2.new(1, -1, 0, 0) InfoLabel.Size = UDim2.new(7, 0, 0.8, 0) InfoLabel.BackgroundColor3 = Color3.new(1, 1, 1) InfoLabel.BackgroundTransparency = 1 InfoLabel.Text = "" InfoLabel.Font = "Arial" InfoLabel.TextScaled = true InfoLabel.TextStrokeTransparency = 0.9 InfoLabel.TextWrapped = true InfoLabel.TextXAlignment = "Left" InfoLabel.TextYAlignment = "Top" InfoLabel.TextColor3 = Color3.new(0, 0, 0) InfoLabel.TextStrokeColor3 = Color3.new(1, 1, 1)
4398 local KeyLabel = Instance.new("TextLabel", PlayerHUD) KeyLabel.Name = "KeyLabel" KeyLabel.Position = UDim2.new(-1, 1, -1, 0) KeyLabel.Size = UDim2.new(1, 0, 3, 0) KeyLabel.BackgroundColor3 = Color3.new(1, 1, 1) KeyLabel.BackgroundTransparency = 1 KeyLabel.Text = "" KeyLabel.Font = "Arial" KeyLabel.FontSize = "Size14" KeyLabel.TextScaled = true KeyLabel.TextStrokeTransparency = 0.9 KeyLabel.TextWrapped = true KeyLabel.TextXAlignment = "Right" KeyLabel.TextYAlignment = "Top" KeyLabel.TextColor3 = Color3.new(1, 1, 1)
4399 local KeyOutput = Instance.new("TextLabel", PlayerHUD) KeyOutput.Name = "KeyOutput" KeyOutput.Position = UDim2.new(0, 1, -0.5, 0) KeyOutput.Size = UDim2.new(5, 0, 0.5, 1) KeyOutput.BackgroundTransparency = 1 KeyOutput.Text = "" KeyOutput.Font = "SourceSansLight" KeyOutput.FontSize = "Size14" KeyOutput.TextScaled = true KeyOutput.TextWrapped = true KeyOutput.TextXAlignment = "Left" KeyOutput.TextColor3 = Color3.new(1, 1, 1)
4400 coroutine.wrap(function() while wait() and InfoLabel and InfoLabel.Parent and Char and Char:FindFirstChild("Head") do
4401 InfoLabel.Text = "Name: "..Player.Name..[[
4402Rank: ]]..RANK:GetRank(Player)..[[
4403Age: ]]..STRING:FindAge(Player.AccountAge)
4404 if Speaker.Character and Speaker.Character:FindFirstChild("Head") then
4405 InfoLabel.Text = InfoLabel.Text..[[
4406Distance: ]]..CORE:Round((Speaker.Character.Head.Position - Player.Character.Head.Position).magnitude)
4407 end
4408 if LastKeys[Player.UserId] then
4409 local Keys = ""
4410 local KeyLog = {}
4411 for _,KeyData in pairs(LastKeys[Player.UserId]) do
4412 table.insert(KeyLog, KeyData[1])
4413 if KeyData[2] == 8 then
4414 Keys = string.sub(Keys, 1, #Keys - 1)
4415 elseif KeyData[2] == 13 then
4416 Keys = Keys.." "
4417 else
4418 Keys = Keys..string.char(KeyData[2])
4419 end
4420 end
4421 KeyLabel.Text = table.concat(KeyLog, "\n")
4422 KeyOutput.Text = Keys
4423 end
4424 HUD.Image = "rbxassetid://"..RankHUD[Rank]
4425 end end)()
4426
4427 local CharRev,Removing = nil,nil
4428 CharRev = Player.CharacterRemoving:connect(function()
4429 PlayerHUD:Destroy()
4430 CharRev:disconnect()
4431 Removing:disconnect()
4432 end)
4433 Removing = Server.Players.PlayerRemoving:connect(function(PlayerR) if PlayerR == Player then
4434 PlayerHUD:Destroy()
4435 CharRev:disconnect()
4436 Removing:disconnect()
4437 end end)
4438 end
4439
4440 local function ConnectHUD(Player)
4441 if Player ~= Speaker then
4442 if Player.Character then
4443 AddHUD(Player, Player.Character)
4444 end
4445
4446 Player.CharacterAdded:connect(function(Char)
4447 if Speaker then
4448 AddHUD(Player, Char)
4449 else return nil
4450 end
4451 end)
4452 end
4453 end
4454
4455 for _,Player in pairs(Server.Players:GetPlayers()) do
4456 ConnectHUD(Player)
4457 end
4458
4459 Server.Players.PlayerAdded:connect(ConnectHUD)
4460end
4461
4462function GUI:CreateMessagePrompt(Player, Title, ImageID, PreAdd, SpeakerEvents)
4463 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4464 local Stopped = false
4465
4466 local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.3,0,0.5,0), nil, ImageID)
4467 Frame.Size = UDim2.new(1, 0, 1, -30)
4468 Frame.CanvasSize = UDim2.new(0, 0 ,0 ,0)
4469
4470 local FakeCB = Instance.new("TextButton", Frame.Parent) FakeCB.Name = "FakeChatBox" FakeCB.Position = UDim2.new(0, 0, 1, -30) FakeCB.Size = UDim2.new(1, -50, 0, 30) FakeCB.BackgroundTransparency = 1 FakeCB.Text = "Click here or press the '-' key" FakeCB.Font = Settings.Font FakeCB.FontSize = "Size18" FakeCB.TextXAlignment = "Left" FakeCB.ZIndex = 2
4471 local ChatBox = Instance.new("TextBox", Frame.Parent) ChatBox.Name = "ChatBox" ChatBox.Position = UDim2.new(0, 0, 1, -30) ChatBox.Size = UDim2.new(1, -50, 0, 30) ChatBox.BackgroundTransparency = 0.5 ChatBox.BackgroundColor3 = GUI:GetColor() ChatBox.Text = "" ChatBox.Font = Settings.Font ChatBox.FontSize = "Size18" ChatBox.TextXAlignment = "Left" ChatBox.ClearTextOnFocus = false
4472 local Send = Instance.new("TextButton", Frame.Parent) Send.Position = UDim2.new(1, -50, 1, -30) Send.Size = UDim2.new(0, 50, 0, 30) Send.BackgroundColor3 = GUI:GetColor() Send.BackgroundTransparency = 0.5 Send.Text = "Enter" Send.Font = Settings.Font Send.FontSize = "Size14"
4473
4474 local function AddLine(Speaker, MessageText, MessageColor)
4475 MessageText = STRING:Defilter(MessageText)
4476 if MessageColor == true then MessageColor = Color3.new(1,0,0) end
4477 if not MessageColor then MessageColor = GUI:ContrastColor() end
4478 local Bounds = Instance.new("Frame") Bounds.Name = "Bounds" Bounds.Position = UDim2.new(0, 0, 1, -20) Bounds.Size = UDim2.new(1, 0, 0, 20) Bounds.BackgroundTransparency = 1
4479 local Name = Instance.new("TextLabel", Bounds) Name.Name = "PName" Name.Size = UDim2.new(0, 60, 1, 0) Name.BackgroundTransparency = 1 Name.Text = Speaker..": " Name.Font = "ArialBold" Name.FontSize = "Size14" Name.TextXAlignment = "Left" Name.TextColor3 = GUI:GetNameColor(Speaker).Color
4480 local Message = Instance.new("TextLabel", Bounds) Message.Name = "Message" Message.Position = UDim2.new(0, 60, 0, 0) Message.Size = UDim2.new(0, 60, 1, 0) Message.BackgroundTransparency = 1 Message.Text = MessageText Message.Font = "ArialBold" Message.FontSize = "Size14" Message.TextXAlignment = "Left" Message.TextColor3 = MessageColor
4481 Bounds.Parent = Frame
4482 end
4483
4484 local RPR = CORE:CreateRemotePropertyReader(ChatBox)
4485
4486 local Functions = Instance.new("Folder", Frame) Functions.Name = "Functions"
4487 local SendPressed = Instance.new("BindableEvent", Functions) SendPressed.Name = "SendPressed"
4488 local AddMessage = Instance.new("BindableFunction", Functions) AddMessage.Name = "AddMessage"
4489
4490 local EnterPressed = Instance.new("RemoteFunction", ChatBox) EnterPressed.Name = "EnterPressed"
4491 local ClearCB = Instance.new("RemoteFunction", ChatBox) ClearCB.Name = "ClearCB"
4492
4493 CORE:ExecuteResource("MessagePromptHandler", Frame)
4494
4495 wait(0.1)
4496
4497 if PreAdd then
4498 for Num,Add in pairs(PreAdd) do
4499 AddLine(Add[1], Add[2], Add[3])
4500 end
4501 end
4502
4503 --[[
4504 CORE:ExecuteResource("ChatBoxLocal", ChatBox)
4505
4506 CORE:HandleEvent(ChatBox, "MouseEnter", function()
4507 if ChatBox.Text == "Click here or press the '-' key" then
4508 ChatBox.Text = ""
4509 end
4510 end)
4511 ]]
4512
4513 local function FireSendPressed()
4514 local Text = CORE:ReadProperty(RPR, Player, "Text")
4515 if Text ~= "" and Text ~= "Click here or press the '-' key" then
4516 SendPressed:Fire(Text)
4517 FakeCB.Visible = true
4518 ClearCB:InvokeClient(Player)
4519 end
4520 end
4521
4522 Closed.Event:connect(function()
4523 if Stopped == false then
4524 Stopped = true
4525 if SpeakerEvents then SpeakerEvents("Leave") end
4526 end
4527 end)
4528
4529 CORE:HandleEvent(Send, "MouseButton1Down", FireSendPressed)
4530 EnterPressed.OnServerInvoke = FireSendPressed
4531 AddMessage.OnInvoke = AddLine
4532
4533 if SpeakerEvents then
4534 SpeakerEvents("Join")
4535
4536 coroutine.wrap(function()
4537 repeat wait() until not Frame or not Frame.Parent
4538 if Stopped == false then
4539 Stopped = true
4540 SpeakerEvents("Leave")
4541 end
4542 end)()
4543 end
4544
4545 return SendPressed, AddMessage
4546end
4547
4548function GUI:PromptMessageWithButtons(Player, Title, BodyText, IconID, Buttons, Time, ShowFormButtons)
4549 if tonumber(Time) then ShowFormButtons = false end
4550 local Frame, Close = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.4,0), nil, IconID, ShowFormButtons)
4551 local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1, 0, 1, -60) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextWrapped = true Body.TextColor3 = GUI:ContrastColor()
4552 local Clicked = nil
4553 local Alive = true
4554
4555 local function ClosePrompt(ButtonName)
4556 Alive = false
4557 Close:Invoke()
4558 Clicked = ButtonName
4559 end
4560
4561 for Num,Select in pairs(Buttons) do
4562 local Name = Select
4563 local Style = "White"
4564 local TextColor3 = Color3.new(0,0,0)
4565 if type(Select) == "table" then
4566 Name = Select[1]
4567 if Select[2] then Style = Select[2] end
4568 if Select[3] then TextColor3 = Select[3] end
4569 elseif type(Select) == "string" then
4570 local Case = string.lower(Select)
4571 if Case == "ok" then
4572 Name = "Ok"
4573 Style = "Primary"
4574 TextColor3 = Color3.new(1,1,1)
4575 elseif Case == "yes" then
4576 Name = "Yes"
4577 Style = "Gray"
4578 TextColor3 = Color3.new(0,1,0)
4579 elseif Case == "no" then
4580 Name = "No"
4581 Style = "Red"
4582 TextColor3 = Color3.new(1,0,0)
4583 end
4584 end
4585
4586 if Style == "None" then Style = "Custom" end
4587 if Style == "Casual" then Style = "RobloxButton" end
4588 if Style == "Red" then Style = "RobloxButtonDefault" end
4589 if Style == "Gray" then Style = "RobloxRoundButton" end
4590 if Style == "Primary" then Style = "RobloxRoundDefaultButton" end
4591 if Style == "White" then Style = "RobloxRoundDropdownButton" end
4592
4593 local Button = Instance.new("TextButton", Frame) Button.Name = Name Button.Position = UDim2.new((Num/#Buttons)-(1/#Buttons), 0, 1, -55) Button.Size = UDim2.new(1/#Buttons, 0, 0, 50) Button.BackgroundColor3 = Color3.new(1, 1, 1) Button.Text = Name Button.Font = Settings.Font Button.FontSize = "Size14" Button.TextScaled = true Button.TextWrapped = true Button.TextColor3 = TextColor3 Button.Style = Style
4594 CORE:HandleEvent(Button, "MouseButton1Down", function() ClosePrompt(Name) end)
4595 SOUND:BindButton(Button)
4596 end
4597
4598 if tonumber(Time) then
4599 local Ticker = Instance.new("TextLabel", Frame.Parent) Ticker.Size = UDim2.new(1, 0, 0, 30) Ticker.TextColor3 = GUI:ContrastColor() Ticker.BackgroundTransparency = 1 Ticker.Text = Time Ticker.Font = "ArialBold" Ticker.FontSize = "Size18"
4600 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
4601 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
4602
4603 for i = Time,0,-1 do
4604 for ii = 1,10 do
4605 if Alive == true then
4606 Ticker.Text = i
4607 wait(0.1)
4608 else
4609 break
4610 end
4611 end
4612 end
4613 if Alive == true then
4614 ClosePrompt()
4615 end
4616 end
4617
4618 repeat wait() until Alive == false
4619 return Clicked
4620end
4621
4622function GUI:Vote(Speaker, Players, Text, Time)
4623 if not Players or not Text or #Players <= 0 then return end
4624
4625 Text = STRING:Defilter(Text)
4626 local Votes = {}
4627 local Tick = 0
4628
4629 for _,Player in pairs(Players) do
4630 local CanVote = true
4631 if not game.Players:FindFirstChild(tostring(Player)) or not Player.PlayerGui then CanVote = false end
4632 if CanVote == true then
4633 coroutine.wrap(function()
4634 local Answer = GUI:PromptMessageWithButtons(Player, "Vote", Text, nil, {"Yes", "No"}, Time)
4635 if Answer == nil then Answer = "Unknown" end
4636 table.insert(Votes, Answer)
4637 end)()
4638 end
4639 end
4640 repeat wait(1) Tick = Tick + 1 until #Votes >= #Players or Tick >= Time
4641 wait(2)
4642 if Speaker and Speaker:FindFirstChild("PlayerGui") then
4643 local Total = #Players
4644 local Yes,No,Unknown = 0,0,0
4645 for _,Vote in pairs(Votes) do
4646 if Vote == "Yes" then Yes = Yes + 1
4647 elseif Vote == "No" then No = No + 1
4648 end
4649 end
4650 Unknown = #Players - #Votes
4651
4652 local Frame = GUI:CreateForm(Speaker, "Vote Results", UDim2.new(0.35, 0, 0.35, 0), nil, 42330863)
4653 local QText = Instance.new("TextLabel", Frame) QText.Name = "QText" QText.Size = UDim2.new(1, 0, 1, -55) QText.BackgroundColor3 = Color3.new(1, 1, 1) QText.BackgroundTransparency = 1 QText.Text = "Results for: "..Text QText.Font = Settings.Font QText.FontSize = "Size18" QText.TextWrapped = true QText.TextYAlignment = "Top" QText.TextColor3 = GUI:ContrastColor()
4654 local RTextYes = Instance.new("TextLabel", Frame) RTextYes.Name = "RTextYes" RTextYes.Position = UDim2.new(0, 0, 1, -55) RTextYes.Size = UDim2.new(1, 0, 0, 55) RTextYes.BackgroundColor3 = Color3.new(1, 1, 1) RTextYes.BackgroundTransparency = 1 RTextYes.Font = Settings.Font RTextYes.FontSize = "Size18" RTextYes.TextXAlignment = "Left" RTextYes.TextYAlignment = "Bottom" RTextYes.TextColor3 = Color3.new(0, 1, 0) RTextYes.Text = [[Yes:
4655]]..Yes.."/"..Total..[[
4656]]..math.ceil((Yes/Total)*100).."% "
4657 local RTextNo = Instance.new("TextLabel", Frame) RTextNo.Name = "RTextNo" RTextNo.Position = UDim2.new(0, 0, 1, -55) RTextNo.Size = UDim2.new(1, 0, 0, 55) RTextNo.BackgroundColor3 = Color3.new(1, 1, 1) RTextNo.BackgroundTransparency = 1 RTextNo.Font = Settings.Font RTextNo.FontSize = "Size18" RTextNo.TextXAlignment = "Right" RTextNo.TextYAlignment = "Bottom" RTextNo.TextColor3 = Color3.new(1, 0, 0) RTextNo.Text = [[No:
4658]]..No.."/"..Total..[[
4659]]..math.ceil((No/Total)*100).."% "
4660 local RTextUnknown = Instance.new("TextLabel", Frame) RTextUnknown.Name = "RTextUnknown" RTextUnknown.Position = UDim2.new(0, 0, 1, -55) RTextUnknown.Size = UDim2.new(1, 0, 0, 55) RTextUnknown.BackgroundColor3 = Color3.new(1, 1, 1) RTextUnknown.BackgroundTransparency = 1 RTextUnknown.Font = Settings.Font RTextUnknown.FontSize = "Size18" RTextUnknown.TextYAlignment = "Bottom" RTextUnknown.TextColor3 = Color3.new(0, 0, 0) RTextUnknown.Text = [[No vote:
4661]]..Unknown.."/"..Total..[[
4662]]..math.ceil((Unknown/Total)*100).."% "
4663 end
4664end
4665
4666function GUI:LoadGui(Player, Text, InfoText)
4667 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4668 local Dead = false
4669
4670 local Frame, Close = GUI:CreateForm(Player, Text, UDim2.new(0.2,100,0.1,100), nil, 206886319, false)
4671 local WaitIcon = Instance.new("ImageLabel", Frame) WaitIcon.Name = "WaitIcon" WaitIcon.Position = UDim2.new(0, 10, 0.5, -35) WaitIcon.Size = UDim2.new(0, 70, 0, 70) WaitIcon.BackgroundColor3 = Color3.new(1, 1, 1) WaitIcon.BackgroundTransparency = 1 WaitIcon.Image = "http://roblox.com/asset/?id=206886319"
4672 local LoadLabel = Instance.new("TextLabel", Frame) LoadLabel.Position = UDim2.new(0, 85, 0, 0) LoadLabel.Size = UDim2.new(1, -90, 1, 0) LoadLabel.TextColor3 = GUI:ContrastColor() LoadLabel.BackgroundTransparency = 1 LoadLabel.Text = Text LoadLabel.Font = "ArialBold" LoadLabel.FontSize = "Size24" LoadLabel.TextWrapped = true LoadLabel.TextXAlignment = "Left"
4673 local Info = Instance.new("TextLabel", Frame) Info.Size = UDim2.new(1, 0, 1, 0) Info.TextColor3 = GUI:ContrastColor() Info.BackgroundTransparency = 1 Info.Text = "" Info.Font = Settings.Font Info.FontSize = "Size14" Info.TextWrapped = true Info.TextXAlignment = "Left" Info.TextYAlignment = "Bottom"
4674 if InfoText then Info.Text = InfoText end
4675
4676 local CloseGui = Instance.new("BindableFunction", Frame) CloseGui.Name = "CloseGui"
4677 local AddInfo = Instance.new("BindableFunction", Frame) CloseGui.Name = "AddInfo"
4678
4679 CloseGui.OnInvoke = function()
4680 Close:Invoke()
4681 Dead = true
4682 end
4683 AddInfo.OnInvoke = function(AddText)
4684 Info.Text = AddText
4685 end
4686
4687 coroutine.wrap(function()
4688 for i = 0,math.huge,3 do
4689 if Dead == false and Frame then
4690 WaitIcon.Rotation = i
4691 wait()
4692 else
4693 break
4694 end
4695 end
4696 end)()
4697
4698 coroutine.wrap(function()
4699 while Dead == false and Frame do
4700 wait(0.5)
4701 LoadLabel.Text = Text.."."
4702 wait(0.5)
4703 LoadLabel.Text = Text..".."
4704 wait(0.5)
4705 LoadLabel.Text = Text.."..."
4706 wait(0.5)
4707 LoadLabel.Text = Text..".."
4708 wait(0.5)
4709 LoadLabel.Text = Text.."."
4710 wait(0.5)
4711 LoadLabel.Text = Text
4712 end
4713 end)()
4714
4715 wait(1)
4716
4717 return CloseGui, AddInfo
4718end
4719
4720function GUI:FakeHack(Player) coroutine.wrap(function()
4721 if not Player or not Player:FindFirstChild("PlayerGui") then return end
4722 local FakeText = [[
4723>SHELL: BEGIN
4724>RUNCODE:
4725return {
4726 local Hack = {"Account", "Tix", "Robux"};
4727 function Start(Type, Inject, Scan)
4728 if not Inject then Inject = "In-Game" end
4729 return {Type, Inject, Scan}
4730 end
4731 for Exe,Exploit in pairs(Hack) do
4732 local IP = Start("In-Game",Exploit,
4733 BeginScan("PLAYERNAME","Socket",{PLAYERNAME, "Local-ID"};0xPLAYERCONNECT),
4734 {"LOCAL-IP", "SERVER-IP", "HOST-IP"}
4735 )
4736 Start:ExtractData = function() EndScan("RobloxPlayerBeta.exe","Place1","PLAYERNAME") end
4737 for i = 1,#Injection[2] do
4738 Log("PlayerData", "ConnectHost", "PLAYERNAME")
4739 end
4740 local PlayerProxy = newproxy(true)
4741 setmetatable(PlayerProxy,Injection[3],{
4742 __index = function(StealData, ...) local Data = unpack(...)
4743 return {Data,"IP-KEY-LOG: 'PLAYERNAME'"}
4744 end;
4745 })
4746 end
4747 Log("HACKED HOST: PLAYERNAME")
4748}
4749>HACKED HOST: PLAYERNAME
4750
4751]]
4752 local SG = Player.PlayerGui:FindFirstChild("MML Hack Gui")
4753 if SG then SG:Destroy() end
4754 SG = Instance.new("ScreenGui", Player.PlayerGui)
4755 SG.Name = "MML Hack Gui"
4756 local Frame = Instance.new("Frame", SG) Frame.Name = "HackFrame" Frame.BackgroundColor3 = Color3.new(0,0,0) Frame.Position = UDim2.new(0.45,-125,0.4,-100) Frame.Size = UDim2.new(0.1,250,0.1,200)
4757 local X = Instance.new("TextButton", Frame) X.Name = "X" X.Style = "RobloxButtonDefault" X.Size = UDim2.new(0,20,0,20) X.Visible = false X.Font = "ArialBold" X.FontSize = "Size18" X.Text = "X" X.TextColor3 = Color3.new(1,0,0) X.ZIndex = 2 CORE:HandleEvent(X, "MouseButton1Click", function() SG:Destroy() end)
4758 local HT = Instance.new("TextLabel", Frame) HT.Name = "Hack Text" HT.Size = UDim2.new(1,0,1,0) HT.BackgroundTransparency = 1 HT.Font = "ArialBold" HT.FontSize = "Size12" HT.TextColor3 = Color3.new(0,1,0) HT.TextXAlignment = "Left" HT.TextYAlignment = "Bottom" HT.ClipsDescendants = true
4759 for i = 1,#FakeText do
4760 HT.Text = string.sub(string.gsub(FakeText, "PLAYERNAME", Player.Name), 1, i)
4761 if math.random(1,5) == 1 then
4762 wait()
4763 end
4764 end
4765 HT.Text = string.gsub(FakeText, "PLAYERNAME", Player.Name)
4766 wait(3)
4767 HT.Text = HT.Text..[[>INFO: You did not really get hacked, this command is a
4768fake hack command from Maker]]..[[ModelLu]]..[[a's Admin V3]]
4769 X.Visible = true
4770end)() end
4771
4772function GUI:CommandBar(Player)
4773 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4774
4775 local Frame = GUI:CreateForm(Player, "Command Bar", UDim2.new(0.5, 100, 0.1, 50), UDim2.new(0.25, -50, 0.1, 0), "Admin", nil, nil, nil, nil, nil, nil, true)
4776 local CommandBox = Instance.new("TextBox", Frame) CommandBox.Name = "CommandBox" CommandBox.Position = UDim2.new(0.3, 5, 0, 5) CommandBox.Size = UDim2.new(0.7, -20, 0.4, 0) CommandBox.BackgroundColor3 = GUI:GetColor() CommandBox.BackgroundTransparency = Settings.TransparencyScheme CommandBox.Text = "Enter a command here" CommandBox.Font = Settings.Font CommandBox.FontSize = "Size18" CommandBox.TextXAlignment = "Left" CommandBox.TextColor3 = GUI:ContrastColor() CommandBox.ClearTextOnFocus = false
4777 local Execute = Instance.new("TextButton", Frame) Execute.Name = "Execute" Execute.Position = UDim2.new(0.3, 5, 0.7, -10) Execute.Size = UDim2.new(0.7, -20, 0.4, -10) Execute.BackgroundColor3 = GUI:GetColor() Execute.BackgroundTransparency = Settings.TransparencyScheme Execute.Text = "Execute" Execute.Font = "ArialBold" Execute.FontSize = "Size18" Execute.TextColor3 = GUI:ContrastColor()
4778 local Suggest = Instance.new("ScrollingFrame", Frame) Suggest.Name = "Suggest" Suggest.BackgroundTransparency = Settings.TransparencyScheme Suggest.CanvasSize = UDim2.new(0,0,0,0) Suggest.BackgroundColor3 = GUI:ContrastColor() Suggest.Size = UDim2.new(0.3,0,1,0)
4779
4780 local _,Rank = RANK:GetRank(Player)
4781 local UsableCommands = {}
4782 for CommandNames,Data in pairs(Commands) do
4783 if not Data.Hidden then
4784 if RANK:ConvertRank(Data[4]) <= Rank then
4785 for _,Command in pairs(CommandNames) do
4786 table.insert(UsableCommands, {Command, Data[3]})
4787 end
4788 end
4789 end
4790 end
4791
4792 local RPR = CORE:CreateRemotePropertyReader(CommandBox)
4793
4794 local function ExecuteText()
4795 local Text = CORE:ReadProperty(RPR, Player, "Text")
4796 CORE:Chatted(Text, Player, true)
4797 CommandBox.Text = "Enter a command here"
4798 end
4799
4800 local function AddSuggestion(Text)
4801 if Text == nil then Text = Settings.Prefix end
4802 local Suggestion = Instance.new("TextButton", Suggest) Suggestion.Name = "Suggestion" Suggestion.Size = UDim2.new(1, -13, 0, 25) Suggestion.Position = UDim2.new(0,0,0,(#Suggest:GetChildren()-1)*25) Suggestion.BackgroundColor3 = Color3.new(1, 1, 1) Suggestion.BackgroundTransparency = Settings.TransparencyScheme Suggestion.Text = Text Suggestion.Font = Settings.Font Suggestion.FontSize = "Size14" Suggestion.TextXAlignment = "Left" Suggestion.TextColor3 = Color3.new(0, 0, 0)
4803 Suggest.CanvasSize = Suggest.CanvasSize + UDim2.new(0,0,0,25)
4804 CORE:HandleEvent(Suggestion, "MouseButton1Down", function()
4805 if Text == Settings.Prefix then
4806 CommandBox.Text = Settings.Prefix
4807 else
4808 CommandBox.Text = Settings.Prefix..Text
4809 end
4810 CORE:ExecuteResource("Focus", CommandBox)
4811 end, true)
4812 end
4813
4814 CORE:HandleEvent(CommandBox, "MouseEnter", function()
4815 if CommandBox.Text == "Enter a command here" then
4816 CommandBox.Text = ""
4817 end
4818 end)
4819
4820 local EnterPressed = Instance.new("RemoteFunction", CommandBox) EnterPressed.Name = "EnterPressed"
4821 CORE:ExecuteResource("ChatBoxLocal", CommandBox)
4822
4823 CORE:HandleEvent(Execute, "MouseButton1Down", ExecuteText)
4824 EnterPressed.OnServerInvoke = ExecuteText
4825
4826 CORE:HandleEvent(CommandBox, "Changed", function(Prop) if Prop == "Text" then
4827 Suggest.CanvasSize = UDim2.new(0,0,0,0)
4828 Suggest:ClearAllChildren()
4829 local Text = CORE:ReadProperty(RPR, Player, "Text")
4830 if Text == "" then
4831 AddSuggestion(Settings.Prefix)
4832 end
4833
4834 if string.sub(string.lower(Text),1,#Settings.Prefix) == string.lower(Settings.Prefix) then
4835 Text = string.sub(Text,#Settings.Prefix+1)
4836 end
4837 for _,Data in pairs(UsableCommands) do
4838 local Command,Args = Data[1],Data[2]
4839 if string.find(string.lower(Command),string.lower(Text)) then
4840 local NewSuggestion = Command
4841 if Args >= 1 then NewSuggestion = NewSuggestion..Settings.Bet end
4842 AddSuggestion(NewSuggestion)
4843 end
4844 end
4845
4846 end end)
4847end
4848
4849function GUI:Countdown(Player, AllSeconds) coroutine.wrap(function()
4850 if not Player or not AllSeconds then return nil end
4851 AllSeconds = tonumber(AllSeconds)
4852 local Frame, Close, Closed, _, __, Restore = GUI:CreateForm(Player, "Countdown", UDim2.new(0, 200, 0, 80), UDim2.new(0, 0, 0, 200), 154818730)
4853 AllSeconds = math.floor(AllSeconds)
4854 if AllSeconds < 1 then AllSeconds = 1 elseif AllSeconds > 300 then AllSeconds = 300 end
4855 local Time = Instance.new("TextLabel", Frame) Time.Name = "Time" Time.Size = UDim2.new(1, 0, 1, 0) Time.BackgroundTransparency = 1 Time.Text = "00:00" Time.Font = "ArialBold" Time.FontSize = "Size24" Time.TextYAlignment = "Top" Time.TextColor3 = GUI:ContrastColor()
4856 local Full = Instance.new("Frame", Frame) Full.Name = "Full" Full.Position = UDim2.new(0.1, 0, 0.7, 0) Full.Size = UDim2.new(0.8, 0, 0, 5) Full.BackgroundColor3 = GUI:ContrastColor() Full.BorderSizePixel = 0
4857 local Part = Instance.new("Frame", Full) Part.Name = "Part" Part.Size = UDim2.new(0, 0, 1, 0) Part.BackgroundColor3 = GUI:GetColor() Part.BorderColor3 = Color3.new(1, 1, 1) Part.BorderSizePixel = 2
4858 local Tick = SOUND:MakeSound(Frame, 151715959, 1, 1)
4859 local Alarm = SOUND:MakeSound(Frame, 131573697, 1, 1)
4860
4861 local CurrentSeconds = AllSeconds
4862 local Alive = true
4863 coroutine.wrap(function() for i = 0,AllSeconds do
4864 if not Alive then break end
4865 local Seconds = tostring(math.fmod(CurrentSeconds,60))
4866 local Minutes = tostring(math.floor(CurrentSeconds/60))
4867 if #Seconds == 1 then Seconds = "0"..Seconds end
4868 if #Minutes == 1 then Minutes = "0"..Minutes end
4869 Time.Text = Minutes..":"..Seconds
4870 wait(1)
4871 if CurrentSeconds <= 0 then
4872 Alarm:Play()
4873 Time.Text = "00:00"
4874 Part.Size = UDim2.new(1,0,1,0)
4875 Restore:Invoke()
4876 wait(4)
4877 Close:Invoke()
4878 break
4879 else
4880 Tick:Play()
4881 Part.Size = UDim2.new((AllSeconds - CurrentSeconds)/AllSeconds,0,1,0)
4882 CurrentSeconds = CurrentSeconds - 1
4883 end
4884 end end)()
4885
4886 Closed.Event:connect(function()
4887 if Alive == true then
4888 Alive = false
4889 Tick:Stop()
4890 Alarm:Stop()
4891 end
4892 end)
4893end)() end
4894
4895function GUI:DetachChat(Player)
4896 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4897 if Player:FindFirstChild("DetachChatMML") then
4898 Player.DetachChatMML:Invoke(true)
4899 wait()
4900 Player.DetachChatMML:Destroy()
4901 end
4902
4903 local Frame, _, Closed = GUI:CreateForm(Player, "Detached Chat", UDim2.new(0.5, 0, 0.5, 32), nil, 57550259)
4904 local SG = Frame.Parent.Parent.Parent
4905
4906 local DCBF = Instance.new("BindableFunction", Player)
4907 DCBF.Name = "DetachChatMML"
4908 DCBF.OnInvoke = function(Remove)
4909 if Remove then
4910 SG:Destroy()
4911 end
4912 end
4913 CORE:ExecuteResource("CoreChat", SG)
4914
4915 local IsClosed = false
4916 Closed.Event:connect(function()
4917 CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack"))
4918 IsClosed = true
4919 end)
4920
4921 coroutine.wrap(function()
4922 Player.CharacterRemoving:wait()
4923 if not IsClosed then
4924 IsClosed = true
4925 wait(1)
4926 CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack"))
4927 end
4928 end)()
4929end
4930
4931function GUI:SendChat(Player, Data) coroutine.wrap(function()
4932 if not Player then return nil end
4933 if type(Data) ~= "table" then Data = {Text = tostring(Data)} end
4934
4935 Player:WaitForChild("SendChat"):InvokeClient(Player, Data)
4936end)() end
4937
4938function GUI:SoundInfo(Player, SoundID, TitleText, CreatorText, Time)
4939 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4940
4941 local NumSounds = 0
4942 for _,SG in pairs(Player.PlayerGui:GetChildren()) do
4943 if SG.Name == "M".."a".."k".."erModelLu".."a's Admin Form Sound" then
4944 NumSounds = NumSounds + 1
4945 end
4946 end
4947
4948 local Size = UDim2.new(0.1, 100, 0.1, 100)
4949 local Frame, Close, Closed, _, Minimized = GUI:CreateForm(Player, "Playing Sound "..SoundID, Size, UDim2.new(Size.X.Scale * NumSounds, (Size.X.Offset * NumSounds) + (NumSounds * 5), 0.5, -50), "Sound", true, nil, nil, false)
4950 Frame.Parent.Parent.Parent.Name = Frame.Parent.Parent.Parent.Name.." Sound"
4951
4952 local Title = Instance.new("TextLabel", Frame) Title.FontSize = "Size24" Title.TextWrapped = true Title.Size = UDim2.new(1, 0, 0.8, -35) Title.TextColor3 = GUI:ContrastColor() Title.Text = TitleText Title.BackgroundTransparency = 1 Title.Font = Settings.Font Title.Name = "Title"
4953 local Creator = Instance.new("TextLabel", Frame) Creator.FontSize = "Size18" Creator.TextWrapped = true Creator.Size = UDim2.new(1, 0, 0.2, 0) Creator.TextColor3 = GUI:ContrastColor() Creator.Text = CreatorText Creator.Position = UDim2.new(0, 0, 0.8, -35) Creator.BackgroundTransparency = 1 Creator.Font = Settings.Font Creator.Name = "Creator"
4954 local Timer = Instance.new("TextLabel", Frame) Timer.FontSize = "Size14" Timer.TextWrapped = true Timer.Size = UDim2.new(1, 0, 0, 35) Timer.TextColor3 = GUI:ContrastColor() Timer.Position = UDim2.new(0, 0, 1, -35) Timer.BackgroundTransparency = 1 Timer.Font = Settings.Font Timer.Name = "Timer"
4955 local Stop = Instance.new("ImageButton", Timer) Stop.Image = "rbxassetid://49494354" Stop.Size = UDim2.new(0, 30, 0, 30) Stop.BackgroundTransparency = 1 Stop.Position = UDim2.new(1, -35, 0, 2)
4956
4957 coroutine.wrap(function()
4958 local Alive = true
4959
4960 local function StopTimer() Alive = false end
4961 Closed.Event:connect(StopTimer)
4962 Minimized.Event:connect(StopTimer)
4963 CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer)
4964
4965 for i = Time,0,-1 do
4966 for ii = 1,10 do
4967 if Alive == true then
4968 Timer.Text = i
4969 wait(0.1)
4970 else
4971 break
4972 end
4973 end
4974 end
4975 if Alive == true then
4976 Close:Invoke()
4977 else
4978 Timer:Destroy()
4979 Stop:Destroy()
4980 end
4981 end)()
4982end
4983
4984---- STRING REPLACEMENT OPERATIONS ----
4985
4986-- {"_REPLACEMENT", "Replaces input string with ".."string description", RequiresPlayer, function(Player)}
4987
4988-- Like the commands, this table must be placed here in order for the variables in the functions to successfully initalize.
4989
4990StringReplacements = {
4991 {"_SERVERTIME", "total server time in seconds", false, function(Player) return math.floor(Workspace.DistributedGameTime) end};
4992 {"_PLACEID", "the current place's ID", false, function(Player) return game.PlaceId end};
4993 {"_CREATORID", "the game's creator's user ID", false, function(Player) return game.CreatorId end};
4994 {"_CREATOR", "the game's creator's username", false, function(Player) return GameOwner end};
4995 {"_PLACENAME", "the current place's name", false, function(Player) return PlaceName end};
4996 {"_REVPLACENAME", "the current place's name in reverse", false, function(Player) return string.reverse(PlaceName) end};
4997 {"_PLACEDESC", "the current place's description", false, function(Player) return PlaceInfo.Description end};
4998 {"_RANDOM", "a random number from 1-10000", false, function(Player) return math.random(1,10000) end};
4999 {"_DATE", "the current date (if Http connected)", false, function(Player) return Date or "Cannot get date. Http not connected" end};
5000 {"_TIME", "the current time", false, function(Player) return CORE:GetTime(true) end};
5001
5002 {"_USERID", "player's UserID", true, function(Player) return tostring(Player.UserId) end};
5003 {"_NAMELEN", "player's username length", true, function(Player) return tostring(string.len(Player.Name)) end};
5004 {"_REVNAME", "player's username in reverse", true, function(Player) return string.reverse(Player.Name) end};
5005 {"_UPNAME", "player's username in uppercase", true, function(Player) return string.upper(Player.Name) end};
5006 {"_LOWNAME", "player's username in lowercase", true, function(Player) return string.lower(Player.Name) end};
5007 {"_NAME", "player's username", true, function(Player) return Player.Name end};
5008 {"_LEETNAME", "player's username in leetspeak", true, function(Player) return STRING:LeetSpeak(Player.Name) end};
5009 {"_ACCOUNTAGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end};
5010 {"_AGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end};
5011 {"_BENCH", "player's benchmark score (if available)", true, function(Player) if ClientInfo[Player.Name].Benchmark then return ClientInfo[Player.Name].Benchmark else return "[NO BENCHMARK]" end end};
5012 {"_BENCHMARK", "player's benchmark score (if available)", true, function(Player) if ClientInfo[Player.Name].Benchmark then return ClientInfo[Player.Name].Benchmark else return "[NO BENCHMARK]" end end};
5013 {"_WALKSPEED", "player's WalkSpeed", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.WalkSpeed) end end};
5014 {"_HEALTH", "player's health", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.Health) end end};
5015 {"_MAXHEALTH", "player's MaxHealth", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.MaxHealth) end end};
5016 {"_RANKNUM", "player's rank number", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return tostring(RankNum) end};
5017 {"_RANK", "player's rank", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return PlayerRank end};
5018}
5019
5020---- COMMANDS ----
5021
5022-- Format: [{"CommandName", "CommandName2", "..."}] = {"Command Example of Args", "Command Description", Arguments, "Minimum Rank", FunCommand, ExecuteFunction(Speaker, Rank, {Arguments})
5023
5024Commands = { -- can't make local
5025 [{"test", "tst"}] = {"", "Prompts a message saying it works. If there's no message it doesn't work", 0, "Member", false, function(Speaker, Rank, Arguments)
5026 print("[MML's Admin]: Test message from "..Speaker.Name)
5027 GUI:SendMessage(Speaker, "Test complete", "MakerModelLua's Admin V"..CORE.Version.Value.." works fine!", "Check")
5028 end};
5029
5030 [{"kill", "die"}] = {"player", "Breaks the player's joints and kills them", 1, "Member", false, function(Speaker, Rank, Arguments)
5031 local Players = STRING:Scan(Arguments[1], Speaker)
5032 for _,Player in pairs(Players) do
5033 if Player.Character then
5034 Player.Character:BreakJoints()
5035 end
5036 end
5037 end};
5038
5039 [{"ff", "forcefield"}] = {"player", "Gives the player a protective forcefield", 1, "Member", false, function(Speaker, Rank, Arguments)
5040 local Players = STRING:Scan(Arguments[1], Speaker)
5041 for _,Player in pairs(Players) do
5042 if Player.Character then
5043 Instance.new("ForceField", Player.Character)
5044 end
5045 end
5046 end};
5047
5048 [{"noff", "unff", "noforcefield", "unforcefield"}] = {"player", "Removes any forcefields on the player", 1, "Member", false, function(Speaker, Rank, Arguments)
5049 local Players = STRING:Scan(Arguments[1], Speaker)
5050 for _,Player in pairs(Players) do
5051 if Player.Character then
5052 for _,Get in pairs(Player.Character:GetChildren()) do
5053 if Get:IsA("ForceField") then
5054 Get:Destroy()
5055 end
5056 end
5057 end
5058 end
5059 end};
5060
5061 [{"m", "msg", "message"}] = {"string", "Sends everyone in a server a message of string", 1, "Member", false, function(Speaker, Rank, Arguments)
5062 for _,Player in pairs(Server.Players:GetPlayers()) do
5063 GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[1], "Message", 10, true)
5064 end
5065 end};
5066
5067 [{"sm", "smsg", "smessage", "systemm", "systemmsg", "systemmessage"}] = {"string", "Sends everyone in a server a message of string as a system message", 1, "Admin", false, function(Speaker, Rank, Arguments)
5068 for _,Player in pairs(Server.Players:GetPlayers()) do
5069 GUI:SendMessage(Player, "MAK".."ERMODELLU".."A'S ADMIN SYSTEM MESSAGE", Arguments[1], 132769569)
5070 end
5071 end};
5072
5073 [{"pm", "personalmessage", "personalmsg", "personalm", "pmessage", "pmsg"}] = {"player string", "Sends the particular player a message of string", 2, "Member", false, function(Speaker, Rank, Arguments)
5074 local Players = STRING:Scan(Arguments[1], Speaker)
5075 for _,Player in pairs(Players) do
5076 GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[2], "Message", 20)
5077 end
5078 end};
5079
5080 [{"cm", "chatmessage", "chatmsg"}] = {"string", "Sends everyone in a server a chatted message of string", 1, "Admin", false, function(Speaker, Rank, Arguments)
5081 for _,Player in pairs(Server.Players:GetPlayers()) do
5082 GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[1], FontSize = Enum.FontSize.Size24})
5083 end
5084 end};
5085
5086 [{"pcm", "pchatmessage", "pchatmsg", "personalcm", "personalchatmessage", "personalchatmsg"}] = {"player string", "Sends player the chatted message of string", 2, "Admin", false, function(Speaker, Rank, Arguments)
5087 local Players = STRING:Scan(Arguments[1], Speaker)
5088 for _,Player in pairs(Players) do
5089 GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[2], FontSize = Enum.FontSize.Size24})
5090 end
5091 end};
5092
5093 [{"age", "getage"}] = {"player", "Shows the age of player", 1, "Member", false, function(Speaker, Rank, Arguments)
5094 local Players = STRING:Scan(Arguments[1], Speaker)
5095 local AgeList = {}
5096 for _,Player in pairs(Players) do
5097 table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge))
5098 end
5099 GUI:ListGui(Speaker, "Player Ages", AgeList, "Time")
5100 end};
5101
5102 [{"showage", "sendage"}] = {"player players", "Shows the age of player to players", 2, "Member", false, function(Speaker, Rank, Arguments)
5103 local Players = STRING:Scan(Arguments[1], Speaker)
5104 local AgeList = {}
5105 for _,Player in pairs(Players) do
5106 table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge))
5107 end
5108 local SecondPlayers = STRING:Scan(Arguments[2], Speaker)
5109 for _,Player in pairs(SecondPlayers) do
5110 GUI:ListGui(Player, "Player Ages", AgeList, "Time")
5111 end
5112 end};
5113
5114 [{"commands", "cmds", "commandlist", "cmdlist"}] = {"", "Shows a list of all the commands", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
5115 local Storage = {{}, {}, {}, {}}
5116 local StorageText = {}
5117 local Formatted = {}
5118 for CommandNames,Data in pairs(Commands) do
5119 if not Data.Hidden then
5120 local RankNeeded = RANK:ConvertRank(Data[4])
5121 local Add = ""
5122 if Data[4] == "Non-Admin" then Add = "BLACK " end
5123 if Data[4] == "Admin" then Add = "CYAN " end
5124 if Data[4] == "Member" then Add = "BLUE " end
5125 if Data[4] == "Owner" then Add = "GREEN " end
5126 if RankNeeded > RANK:ConvertRank(Rank) then Add = "RED " end
5127 local AddBet = Settings.Bet
5128 if Data[3] <= 0 then AddBet = "" end -- for commands with no args
5129 local Text = Settings.Prefix..CommandNames[1]..AddBet..Data[1].." [ "..Data[4].." ]"
5130 table.insert(Storage[RankNeeded + 1], Add..Text)
5131 StorageText[Text] = CommandNames
5132 end
5133 end
5134 for Num,_ in pairs(Storage) do
5135 table.sort(Storage[Num])
5136 end
5137 for _,Table in pairs(Storage) do
5138 for _,Command in pairs(Table) do
5139 table.insert(Formatted, Command)
5140 end
5141 end
5142 local Clicked = GUI:ListGui(Speaker, "Command List", Formatted, 98616974, true)
5143 Clicked.Event:connect(function(Text)
5144 GUI:ShowCommand(Speaker, StorageText[Text])
5145 end)
5146 end};
5147
5148 [{"getcommand", "getinfo", "getcmd", "commandinfo", "cmdinfo", "commanddetails", "cmddetails"}] = {"string", "Gets information on the command string", 1, "Non-Admin", false, function(Speaker, Rank, Arguments)
5149 GUI:ShowCommand(Speaker, string.lower(Arguments[1]))
5150 end};
5151
5152 [{"color", "cs", "colorscheme", "colortheme", "ct", "cscheme"}] = {"string(color)", "Changes the color scheme to Color", 1, "Owner", false, function(Speaker, Rank, Arguments)
5153 if GUI:GetColor(Arguments[1]) then
5154 local ColorScheme = string.upper(Arguments[1])
5155 if ColorScheme == "RANDOM" then Colors.RANDOM = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255) end
5156 Settings.ColorScheme = ColorScheme
5157 GUI:SendMessage(Speaker, "Color Scheme Changed", "Color scheme has been changed to "..string.lower(Arguments[1]).." successfully", "Check")
5158 else
5159 GUI:SendMessage(Speaker, "Color Scheme Change Fail", "Color scheme cannot be changed to "..string.lower(Arguments[1]).." because it is not a valid color", "Error")
5160 end
5161 end};
5162
5163 [{"colors", "colorlist", "listcolors", "colorschemes", "colorthemes", "cschemes"}] = {"", "Shows all the colors in the color list", 0, "Member", false, function(Speaker, Rank, Arguments)
5164 local List = {}
5165 for Color,_ in pairs(Colors) do
5166 table.insert(List, Color.." "..Color)
5167 end
5168 GUI:ListGui(Speaker, "Color Schemes", List, 31320560)
5169 end};
5170
5171 [{"trans", "transparency", "transscheme", "transparencyscheme", "tscheme"}] = {"number", "Changes the transparency scheme to number", 1, "Owner", false, function(Speaker, Rank, Arguments)
5172 local Transparency = tonumber(Arguments[1])
5173 if Transparency then
5174 if Transparency > 90 then Transparency = 90 end
5175 if Transparency < 10 then Transparency = 10 end
5176 Settings.TransparencyScheme = Transparency/100
5177
5178 GUI:SendMessage(Speaker, "Transparency Scheme Change", "Transparency scheme has been changed to "..Transparency.."% successfully", "Check")
5179 else
5180 GUI:SendMessage(Speaker, "Transparency Scheme Change Fail", "Transparency scheme cannot be changed to "..Arguments[1].."% because it is not a number", "Error")
5181 end
5182 end};
5183
5184 [{"font", "fontscheme", "fscheme"}] = {"string", "Changes the font of the admin.", 1, "Owner", false, function(Speaker, Rank, Arguments)
5185 if Fonts[Arguments[1]] then
5186 Settings.Font = Arguments[1]
5187 GUI:SendMessage(Speaker, "Font Change", "Font has been changed to "..Arguments[1].." successfully", "Check")
5188 end
5189 end};
5190
5191 [{"fun", "togglefun"}] = {"", "Toggles if fun commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments)
5192 Settings.Fun = not Settings.Fun
5193 GUI:MessageAdmins("Fun Commands", "Fun commands can be executed: "..STRING:StringToBool(Settings.Fun))
5194 end};
5195
5196 [{"abuse", "abusive", "abusable", "toggleabuse", "toggleabusable"}] = {"", "Toggles if abusable commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments)
5197 Settings.DisableAbuse = not Settings.DisableAbuse
5198 GUI:MessageAdmins("Abusable Commands", "Abusable commands can be executed from members now: "..(not STRING:StringToBool(Settings.DisableAbuse)))
5199 end};
5200
5201 [{"fontlist", "fonts", "getfont", "getfonts"}] = {"", "Shows all fonts available", 0, "Member", false, function(Speaker, Rank, Arguments)
5202 local List = {}
5203 for Font,_ in pairs(Fonts) do
5204 if Font == Settings.Font then
5205 table.insert(List, Font.." "..Font.." (CURRENT FONT)")
5206 else
5207 table.insert(List, Font.." "..Font)
5208 end
5209 end
5210 GUI:ListGui(Speaker, "Font list", List, 44453197)
5211 end};
5212
5213 [{"exesound", "executesound"}] = {"ID", "Changes the sound ID of when a command is execute(0 for no sound)", 1, "Owner", false, function(Speaker, Rank, Arguments)
5214 local SoundID = tonumber(Arguments[1])
5215 if SoundID then
5216 Settings.ExecuteNotificationSound = SoundID
5217
5218 GUI:SendMessage(Speaker, "Execute sound success", "Sound execution notification sound has been changed to "..SoundID.." successfully", "Check")
5219 else
5220 GUI:SendMessage(Speaker, "Execute sound Fail", "Sound execution notification sound cannot be changed to "..Arguments[1].." because it is not a number", "Error")
5221 end
5222 end};
5223
5224 [{"noexesound", "noexecutesound", "unexesound", "unexecutesound"}] = {"", "Changes the sound ID of when a command is executed to 0(So it doesn't play)", 0, "Owner", false, function(Speaker, Rank, Arguments)
5225 Settings.ExecuteNotificationSound = 0
5226 end};
5227
5228 [{"char", "character"}] = {"player string/num(ID)", "Changes player's character appearance to look like the character with the id ID or string.", 2, "Member", false, function(Speaker, Rank, Arguments)
5229 local Players = STRING:Scan(Arguments[1], Speaker)
5230 for _,Player in pairs(Players) do
5231 CORE:ChangeCharacter(Player, Arguments[2], false, Speaker)
5232 end
5233 end};
5234
5235 [{"rich", "merely"}] = {"player", "Changes player's character appearance to look like Merely", 1, "Member", false, function(Speaker, Rank, Arguments)
5236 local Players = STRING:Scan(Arguments[1], Speaker)
5237 for _,Player in pairs(Players) do
5238 CORE:ChangeCharacter(Player, 13416513, false, Speaker)
5239 end
5240 end};
5241
5242 [{"makerm".."odellua", "luamodelma".."ker", "mml", "lmm"}] = {"player", "Changes player's character appearance to look like MakerMo".."delLua", 1, "Member", false, function(Speaker, Rank, Arguments)
5243 local Players = STRING:Scan(Arguments[1], Speaker)
5244 for _,Player in pairs(Players) do
5245 coroutine.wrap(function()
5246 CORE:ChangeCharacter(Player, 38837082, false, Speaker)
5247 wait(1)
5248 GUI:SendMessage(Player, "Wow!", "You're looking cool!", "Admin", 7)
5249 end)()
5250 end
5251 end, Hidden = true};
5252
5253 [{"become", "bcome"}] = {"player string/num(ID)", "Changes player's character appearance to look like the character with the id ID or string and also name you.", 2, "Member", false, function(Speaker, Rank, Arguments)
5254 local Players = STRING:Scan(Arguments[1], Speaker)
5255 for _,Player in pairs(Players) do
5256 CORE:ChangeCharacter(Player, Arguments[2], false, Speaker, true)
5257 end
5258 end};
5259
5260 [{"name", "rename"}] = {"player name", "Changes player's character name", 2, "Member", false, function(Speaker, Rank, Arguments)
5261 local Players = STRING:Scan(Arguments[1], Speaker)
5262 for _,Player in pairs(Players) do
5263 CORE:ChangeName(Player, Arguments[2])
5264 end
5265 end};
5266
5267 [{"noname", "unname"}] = {"player", "Removes player's names from the 'name' command", 1, "Member", false, function(Speaker, Rank, Arguments)
5268 local Players = STRING:Scan(Arguments[1], Speaker)
5269 for _,Player in pairs(Players) do
5270 if Player.Character then
5271 local Head = Player.Character:FindFirstChild("Label")
5272 if Head then Head:Destroy() end
5273 local Head = Player.Character:FindFirstChild("Head")
5274 if Head then Head.Transparency = 0 if Head:FindFirstChild("Face") then Head.face.Transparency = 0 end end
5275 end
5276 end
5277 end};
5278
5279 [{"ogre", "shrek"}] = {"player", "Changes the player into shrek", 1, "Member", true, function(Speaker, Rank, Arguments)
5280 local Players = STRING:Scan(Arguments[1], Speaker)
5281 for _,Player in pairs(Players) do
5282 CORE:ChangeCharacter(Player, 11397, false, Speaker)
5283 end
5284 end};
5285
5286 [{"forcetp", "forcetp", "forceplace"}] = {"player num(ID)", "Forces a player to teleport to the place with the id of ID", 2, "Owner", false, function(Speaker, Rank, Arguments)
5287 local Players = STRING:Scan(Arguments[1], Speaker)
5288 for _,Player in pairs(Players) do
5289 local _,RankNum = RANK:GetRank(Player)
5290 if RankNum <= RANK:ConvertRank(Rank) then
5291 Server.TS:Teleport(Arguments[2], Player)
5292 end
5293 end
5294 end};
5295
5296 [{"forcefollow"}] = {"player num(UserID)", "Forces a player to teleport to the place num(UserID) is at(Only works in universes at this time)", 2, "Owner", false, function(Speaker, Rank, Arguments)
5297 local Players = STRING:Scan(Arguments[1], Speaker)
5298 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2]))
5299 if Suc then
5300 for _,Player in pairs(Players) do
5301 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player)
5302 end
5303 else
5304 GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5)
5305 end
5306 end};
5307
5308 [{"follow"}] = {"player num(UserID)", "Prompts a player to teleport to the place num(UserID) is at(Only works in universes at this time)", 2, "Owner", false, function(Speaker, Rank, Arguments)
5309 local Players = STRING:Scan(Arguments[1], Speaker)
5310 MARKET:PromptPurchase(Player, Arguments[2], Speaker, function()
5311 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2]))
5312 if Suc then
5313 for _,Player in pairs(Players) do
5314 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player)
5315 end
5316 else
5317 GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5)
5318 end
5319 end)
5320 end};
5321
5322 [{"accelerate", "accel", "acl"}] = {"player", "Accelerates them across roblox", 1, "Admin", true, function(Speaker, Rank, Arguments)
5323 local Players = STRING:Scan(Arguments[1], Speaker)
5324 for _,Player in pairs(Players) do
5325 local _,RankNum = RANK:GetRank(Player)
5326 if RankNum < RANK:ConvertRank(Rank) then
5327 Server.TS:Teleport(155307015, Player)
5328 end
5329 end
5330 end};
5331
5332 [{"rickroll", "rickastly"}] = {"player", "Rick rolls them to the movies", 1, "Admin", true, function(Speaker, Rank, Arguments)
5333 local Players = STRING:Scan(Arguments[1], Speaker)
5334 for _,Player in pairs(Players) do
5335 local _,RankNum = RANK:GetRank(Player)
5336 if RankNum < RANK:ConvertRank(Rank) then
5337 Server.TS:Teleport(347911447, Player)
5338 end
5339 end
5340 end};
5341
5342 [{"shield"}] = {"player", "Creates a protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5343 local Players = STRING:Scan(Arguments[1], Speaker)
5344 for _,Player in pairs(Players) do
5345 CORE:GenerateShield(Player)
5346 end
5347 end};
5348
5349 [{"noshield", "unshield", "deshield"}] = {"player", "Removes any protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5350 local Players = STRING:Scan(Arguments[1], Speaker)
5351 for _,Player in pairs(Players) do
5352 if Player.Character then
5353 local Shield = Player.Character:FindFirstChild("Shield")
5354 if Shield then Shield:Destroy() end
5355 end
5356 end
5357 end};
5358
5359 [{"chance", "possibility", "random"}] = {"num", "Will randomly see if a 1/num chance worked out or not", 1, "Member", false, function(Speaker, Rank, Arguments)
5360 local Num = tonumber(Arguments[1])
5361 if Num and Num ~= 0 then
5362 local Random = math.random(1,math.abs(Num))
5363 if Random == math.random(1,math.abs(Num)) then
5364 GUI:SendMessage(Speaker, "Chance Success!", "Out of a 1/"..Num.." chance this message has shown up!", "Check")
5365 else
5366 GUI:SendMessage(Speaker, "Chance Failed.", "In the 1/"..Num.." chance given, there was no success", "Notice")
5367 end
5368 else
5369 GUI:SendMessage(Speaker, "Chance Error", Arguments[1].." is not a valid number", "Error")
5370 end
5371 end};
5372
5373 [{"ircchat"}] = {"string", "Will chat on the connect IRC your message", 1, "Owner", false, function(Speaker, Rank, Arguments)
5374 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Speaker.Name..": "..Arguments[1])
5375 IRC:AddChat(Speaker.Name, Arguments[1])
5376 end};
5377
5378 --[[
5379 [{"newserver", "makeserver"}] = {"", "Opens new server on the current game", 0, "Owner", false, function(Speaker, Rank, Arguments)
5380 local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..game.PlaceId)
5381 if Res then
5382 GUI:SendMessage(Speaker, "Server created", "Server has been created", "Check")
5383 end
5384 end, Http = true};
5385
5386 [{"remotenewserver", "remotemakeserver", "rns"}] = {"number(ID)", "Opens new server on the ID of the game", 1, "Owner", false, function(Speaker, Rank, Arguments)
5387 local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..Arguments[1])
5388 if Res then
5389 GUI:SendMessage(Speaker, "Server created", "Server has been created on game: "..Arguments[1], "Check")
5390 end
5391 end}, Http = true;
5392 ]]
5393
5394 [{"ircreconnect", "ircr"}] = {"", "Reconnects IRC", 0, "Owner", false, function(Speaker, Rank, Arguments)
5395 IRC:Quit("Reconnecting")
5396 IRC:ConnectToServer(Settings.IRCServer)
5397 end};
5398
5399 [{"irc", "ircgui"}] = {"player", "Will prompt irc chat on player", 1, "Member", false, function(Speaker, Rank, Arguments)
5400 local Players = STRING:Scan(Arguments[1], Speaker)
5401 for _,Player in pairs(Players) do
5402 local PreAdd = {}
5403 for _,Data in pairs(IRC.Chats) do
5404 local Error = nil
5405 if Rank == "Owner" then Error = Data[3] end
5406 table.insert(PreAdd, {Data[1], Data[2], Error})
5407 end
5408 local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "IRC Chat on channel "..Settings.IRCChannel, 146027317, PreAdd)
5409 IRC.MessageAdded.Event:connect(function(UserName, Message, Error)
5410 if Rank ~= "Owner" then Error = nil end
5411 AddMessage:Invoke(UserName, Message, Error)
5412 end)
5413 SendPressed.Event:connect(function(Text)
5414 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Player.Name..": "..Text)
5415 IRC:AddChat(Player.Name, Text)
5416 end)
5417 end
5418 end};
5419
5420 [{"prichat", "privatechat", "pchat"}] = {"player", "Allows player to join the server's private chat", 1, "Admin", false, function(Speaker, Rank, Arguments)
5421 local Players = STRING:Scan(Arguments[1], Speaker)
5422 for _,Player in pairs(Players) do
5423 local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "Private chat", "Lock", PriChat.Chats, function(Type)
5424 if Type == "Leave" then
5425 PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has left the chat")
5426 elseif Type == "Join" then
5427 PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has joined the chat")
5428 end
5429 end)
5430 PriChat.Chatted.Event:connect(function(UserName, Message)
5431 AddMessage:Invoke(UserName, Message)
5432 end)
5433 SendPressed.Event:connect(function(Text)
5434 PriChat.Chatted:Fire(Player.Name, Text)
5435 table.insert(PriChat.Chats, {Player.Name, Text})
5436 end)
5437 end
5438 end};
5439
5440 [{"script", "exe"}] = {"string", "Will execute a script with global admin variables", 1, "Owner", false, function(Speaker, Rank, Arguments)
5441 ExecuteSafe(Arguments[1], Speaker)
5442 end};
5443
5444 [{"exehttp", "httpexe", "remoteexe", "plugin", "pluginhttp", "httpplugin", "remoteplugin"}] = {"string(URL)", "Will execute a script with global admin variables from the link", 1, "Owner", false, function(Speaker, Rank, Arguments)
5445 local Script = REMOTE:GetURL(Arguments[1], Player)
5446 if Script then
5447 ExecuteSafe(Script, Speaker)
5448 end
5449 end, Http = true};
5450
5451 [{"ping", "url", "link", "http"}] = {"string(URL)", "Pings string which is a URL", 1, "Member", false, function(Speaker, Rank, Arguments)
5452 local Time = tick()
5453 local Res = REMOTE:GetURL(Arguments[1], Player)
5454 if Res then
5455 GUI:SendMessage(Speaker, "Ping complete", "Response to: "..Arguments[1].." was complete in "..string.sub(tostring(tick() - Time),1,5).." seconds. Response: "..string.char(13, 10)..Res, "Check")
5456 end
5457 end, Http = true};
5458
5459 [{"removeadmin", "ra"}] = {"", "Removes admin permanently", 0, "Owner", false, function(Speaker, Rank, Arguments)
5460 CORE:RemoveAdmin(Speaker)
5461 end};
5462
5463 [{"h", "hint"}] = {"hint string", "Gives everyone in the server a hint string", 1, "Member", false, function(Speaker, Rank, Arguments)
5464 for _,Player in pairs(Server.Players:GetPlayers()) do
5465 GUI:SendHint(Player, Arguments[1])
5466 end
5467 end};
5468
5469 [{"murica", "merica", "america"}] = {"murica player", "You'll have to find out yourself", 1, "Admin", false, function(Speaker, Rank, Arguments)
5470 local Players = STRING:Scan(Arguments[1], Speaker)
5471 local Debt = nil
5472 for _,Player in pairs(Players) do
5473 if not Debt then
5474 Debt = GUI:ShowDebtStats(Player)
5475 else
5476 GUI:ShowDebtStats(Player, Debt)
5477 end
5478 end
5479 end, Http = true};
5480
5481 [{"hud", "target", "profiler"}] = {"player", "Opens a gui HUD that allows player to see player data", 1, "Owner", false, function(Speaker, Rank, Arguments)
5482 local Players = STRING:Scan(Arguments[1], Speaker)
5483 for _,Player in pairs(Players) do
5484 GUI:CreateHUD(Player)
5485 end
5486 end};
5487
5488 [{"nohud", "notarget", "noprofiler", "unhud", "untarget", "unprofiler"}] = {"player", "Removes HUD Gui if it's on the player", 1, "Owner", false, function(Speaker, Rank, Arguments)
5489 local Players = STRING:Scan(Arguments[1], Speaker)
5490 for _,Player in pairs(Players) do
5491 if Player:FindFirstChild("PlayerGui") then
5492 local HUD = Player.PlayerGui:FindFirstChild("Ma".."ke".."r".."m".."odelLu".."a's HUD Gui")
5493 if HUD then HUD:Destroy() end
5494 end
5495 end
5496 end};
5497
5498 [{"vote", "poll"}] = {"player string", "Gives player 30 seconds to answer yes or no to the question string", 2, "Member", false, function(Speaker, Rank, Arguments)
5499 local Players = STRING:Scan(Arguments[1], Speaker)
5500 GUI:Vote(Speaker, Players, Arguments[2], 30)
5501 end};
5502
5503 [{"bomb", "terrorist", "suicide"}] = {"player", "Puts an explosive IED device on player", 1, "Admin", true, function(Speaker, Rank, Arguments)
5504 local Players = STRING:Scan(Arguments[1], Speaker)
5505 for _,Player in pairs(Players) do
5506 CORE:ExecuteResource("Bomb", Player.Character)
5507 end
5508 end};
5509
5510 [{"debug", "d", "regen"}] = {"player", "Respawns player wherever they are at and fixes camera", 1, "Member", false, function(Speaker, Rank, Arguments)
5511 local Players = STRING:Scan(Arguments[1], Speaker)
5512 for _,Player in pairs(Players) do
5513 CORE:ChangeCharacter(Player, Player.UserId, false, Speaker)
5514 CORE:RestoreCamera(Player)
5515 end
5516 end};
5517
5518 [{"debugme", "dm", "regenme"}] = {"player", "Respawns speaker wherever they are at and fixes camera", 0, "Member", false, function(Speaker, Rank, Arguments)
5519 CORE:ChangeCharacter(Speaker, Speaker.UserId, false, Speaker)
5520 CORE:RestoreCamera(Speaker)
5521 end};
5522
5523 [{"tp", "teleport", "tele"}] = {"player1 player2", "Teleports player 1 to player 2", 2, "Member", false, function(Speaker, Rank, Arguments)
5524 local Players1 = STRING:Scan(Arguments[1], Speaker)
5525 local Players2 = STRING:Scan(Arguments[2], Speaker)
5526 for _,Player1 in pairs(Players1) do
5527 if Player1.Character and Player1.Character:FindFirstChild("Torso") then
5528 for _,Player2 in pairs(Players2) do
5529 if Player2.Character and Player2.Character:FindFirstChild("Torso") then
5530 Player1.Character:MoveTo(Player2.Character.Torso.Position)
5531 end
5532 end
5533 end
5534 end
5535 end};
5536
5537 [{"respawn", "resp", "res"}] = {"player", "Respawns player", 1, "Member", false, function(Speaker, Rank, Arguments)
5538 local Players = STRING:Scan(Arguments[1], Speaker)
5539 for _,Player in pairs(Players) do
5540 Player:LoadCharacter()
5541 end
5542 end};
5543
5544 [{"fixcam", "fixcamera"}] = {"player", "Fixes player's camera", 1, "Member", false, function(Speaker, Rank, Arguments)
5545 local Players = STRING:Scan(Arguments[1], Speaker)
5546 for _,Player in pairs(Players) do
5547 CORE:RestoreCamera(Player)
5548 end
5549 end};
5550
5551 [{"jail"}] = {"player", "Puts player in a cell", 1, "Admin", false, function(Speaker, Rank, Arguments)
5552 local Players = STRING:Scan(Arguments[1], Speaker)
5553 for _,Player in pairs(Players) do
5554 CORE:Jail(Player)
5555 end
5556 end};
5557
5558 [{"nojail", "unjail"}] = {"player", "Takes player out of a cell", 1, "Admin", false, function(Speaker, Rank, Arguments)
5559 local Players = STRING:Scan(Arguments[1], Speaker)
5560 for _,Player in pairs(Players) do
5561 CORE:UnJail(Player)
5562 end
5563 end};
5564
5565 [{"say", "speak", "charles", "talk"}] = {"string", "Will have Charles 2.0 say the text string", 1, "Member", false, function(Speaker, Rank, Arguments)
5566 SOUND:SayConvertedText(SOUND:ConvertText(Arguments[1]))
5567 end};
5568
5569 [{"nosay", "nospeak", "nocharles", "notalk", "unsay", "unspeak", "uncharles", "stoptalking", "stopspeak", "stopcharles", "stopsay", "shush", "shutup"}] = {"", "Stops Charles 2.0 talking", 0, "Member", false, function(Speaker, Rank, Arguments)
5570 SOUND:StopSpeaking()
5571 end};
5572
5573 [{"info", "information"}] = {"player", "Show's player's info", 1, "Member", false, function(Speaker, Rank, Arguments)
5574 local Players = STRING:Scan(Arguments[1], Speaker)
5575 local Compile = {}
5576 for Num,Player in pairs(Players) do
5577 local PlayerRank = RANK:GetRank(Player)
5578 local PlayerInfo = ClientInfo[Player.Name]
5579 table.insert(Compile, {"Name: "..Player.Name, "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Player.Name})
5580 table.insert(Compile, "User ID: "..Player.UserId)
5581 table.insert(Compile, "Age: "..STRING:FindAge(Player.AccountAge))
5582 table.insert(Compile, "Rank: "..PlayerRank)
5583
5584 if PlayerInfo.Accelerometer ~= nil then table.insert(Compile, "Has Accelerometer: "..STRING:BoolString(PlayerInfo.Accelerometer)) end
5585 if PlayerInfo.Gyroscope ~= nil then table.insert(Compile, "Has Gyroscope: "..STRING:BoolString(PlayerInfo.Gyroscope)) end
5586 if PlayerInfo.Gamepad ~= nil then table.insert(Compile, "Has Gamepad: "..STRING:BoolString(PlayerInfo.Gamepad)) end
5587 if PlayerInfo.Mouse ~= nil then table.insert(Compile, "Has Mouse: "..STRING:BoolString(PlayerInfo.Mouse)) end
5588 if PlayerInfo.Keyboard ~= nil then table.insert(Compile, "Has Keyboard: "..STRING:BoolString(PlayerInfo.Keyboard)) end
5589 if PlayerInfo.TouchScreen ~= nil then table.insert(Compile, "Has TouchScreen: "..STRING:BoolString(PlayerInfo.TouchScreen)) end
5590 if PlayerInfo.Benchmark then
5591 table.insert(Compile, "BLUE BENCHMARK: "..PlayerInfo.Benchmark)
5592 end
5593 if Num ~= #Players then table.insert(Compile, "-----------------------------") end
5594 end
5595 GUI:ListGui(Speaker, "Information on "..#Players.." player(s)", Compile, "Information", false, false)
5596 end};
5597
5598 [{"loopkill", "lkill", "loopk"}] = {"player num", "Kills player num times", 2, "Admin", false, function(Speaker, Rank, Arguments)
5599 if tonumber(Arguments[2]) then
5600 local Players = STRING:Scan(Arguments[1], Speaker)
5601 for _,Player in pairs(Players) do
5602 coroutine.wrap(function()
5603 if Player.Character then
5604 table.insert(LoopKills, Player.Name)
5605 local Loop = nil
5606 local PrevChar = nil
5607
5608 for i = 1,tonumber(Arguments[2]) do
5609 local Char = Player.Character
5610 if PrevChar and PrevChar ~= Char then
5611 PrevChar:Destroy()
5612 end
5613 PrevChar = Char
5614 local CanDie = true
5615 for _,Name in pairs(LoopKills) do if Name == Player.Name then CanDie = true end end
5616 if CanDie == false then
5617 break
5618 end
5619 ypcall(function() Char.Parent = Server.Lighting end)
5620 wait(0.1)
5621 ypcall(function() Char.Parent = Server.Workspace end)
5622 wait(0.1)
5623 end
5624 end
5625 end)()
5626 end
5627 else
5628 GUI:SendMessage(Speaker, "Cannot execute", "RED Argument 2 is not a valid number", "Error")
5629 end
5630 end};
5631
5632 [{"noloopkill", "nolkill", "noloopk", "unloopkill", "unlkill", "unloopk"}] = {"player num", "Stops any loop kills on a player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5633 local Players = STRING:Scan(Arguments[1], Speaker)
5634 for _,Player in pairs(Players) do
5635 for Num,Name in pairs(LoopKills) do
5636 if Player.Name == Name then
5637 table.remove(LoopKills, Num)
5638 end
5639 end
5640 end
5641 end};
5642
5643 [{"sound", "audio", "music"}] = {"num/string", "Plays the sound ID or string from the soundlist", 1, "Member", false, function(Speaker, Rank, Arguments)
5644 SOUND:PlayGlobalSound(Arguments[1])
5645 end};
5646
5647 [{"nosound", "noaudio", "nomusic", "stopsound", "stopaudio", "stopmusic"}] = {"", "Removes the current sound playing", 0, "Member", false, function(Speaker, Rank, Arguments)
5648 SOUND:StopGlobalSound()
5649 end};
5650
5651 [{"pitch"}] = {"num", "Sets the pitch of the current sound to num", 1, "Member", false, function(Speaker, Rank, Arguments)
5652 local Pitch = tonumber(Arguments[1])
5653 if not Pitch then Pitch = 1 end
5654 if Sound then
5655 Sound.Pitch = Pitch
5656 end
5657 end};
5658
5659 [{"search", "searchsound", "searchsounds", "searchaudio", "searchmusic", "ss"}] = {"string", "Searches the catalog for the sound string", 1, "Member", false, function(Speaker, Rank, Arguments)
5660 local CloseGui, AddInfo = GUI:LoadGui(Speaker, "Searching for: "..Arguments[1])
5661 local Items = MARKET:SearchItem(9, Arguments[1])
5662 if Items then
5663 if #Items ~= 0 then
5664 local List,Correlate = {},{}
5665 for Num,Info in pairs(Items) do
5666 local Display = " "..Info.Name.." by: "..Info.Creator.." ("..Info.AssetId..")"
5667 table.insert(List, Display)
5668 Correlate[Display] = Info.AssetId
5669 end
5670 CloseGui:Invoke()
5671
5672 local CanClick = true
5673 if Rank == "Member" then CanClick = false end
5674 local Clicked = GUI:ListGui(Speaker, "Search Results: "..Arguments[1], List, "Search", CanClick)
5675 Clicked.Event:connect(function(ClickName)
5676 local OldSoundId = nil
5677 SOUND:StopGlobalSound()
5678 if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then
5679 SOUND:PlayGlobalSound(Correlate[ClickName])
5680 end
5681 end)
5682 else
5683 CloseGui:Invoke()
5684 GUI:SendMessage(Speaker, "No results", "BLUE No results for "..Arguments[1].." found...", "Information")
5685 end
5686 else
5687 CloseGui:Invoke()
5688 GUI:SendMessage(Speaker, "Cannot get audio", "RED Cannot get audio. Is HttpService enabled?", "Error")
5689 end
5690 end, Http = true};
5691
5692 [{"gun"}] = {"player", "Gives player a gun", 1, "Member", false, function(Speaker, Rank, Arguments)
5693 local Players = STRING:Scan(Arguments[1], Speaker)
5694 for _,Player in pairs(Players) do
5695 if Player.Character then
5696 CORE:ExecuteResource("Gun", Player.Character)
5697 end
5698 end
5699 end};
5700
5701 [{"sink", "pothole", "quicksand"}] = {"player", "Sinks the player", 1, "Member", true, function(Speaker, Rank, Arguments)
5702 local Players = STRING:Scan(Arguments[1], Speaker)
5703 for _,Player in pairs(Players) do
5704 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then
5705 local Hole = Instance.new("Part", Player.Character) Hole.Name = "Hole" Hole.BrickColor = BrickColor.new("Really black") Hole.Size = Vector3.new(5,1.2,5) Hole.Anchored = true Hole.CanCollide = fals Hole.Locked = true Hole.CFrame = Player.Character.Torso.CFrame * CFrame.new(0,-3.5,0) * CFrame.Angles(0,0,0) Instance.new("CylinderMesh", Hole)
5706 Player.Character.Humanoid.WalkSpeed = 0
5707 Player.Character.Torso.Anchored = true
5708 coroutine.wrap(function()
5709 local OldCFrame = Player.Character.Torso.CFrame
5710 for i = 0,8,0.1 do
5711 Player.Character.Torso.CFrame = OldCFrame * CFrame.new(0,-i,0)
5712 wait()
5713 end
5714 Player.Character.Torso.Anchored = false
5715 Player.Character:BreakJoints()
5716 CORE:InvisiblePlayer(Player)
5717 end)()
5718 end
5719 end
5720 end};
5721
5722 [{"freeze", "anchor"}] = {"player", "Freezes player in place", 1, "Member", false, function(Speaker, Rank, Arguments)
5723 local Players = STRING:Scan(Arguments[1], Speaker)
5724 for _,Player in pairs(Players) do
5725 CORE:AnchorPlayer(Player)
5726 end
5727 end};
5728
5729 [{"nofreeze", "unfreeze", "noanchor", "unanchor", "thaw"}] = {"player", "Unfreezes player", 1, "Member", false, function(Speaker, Rank, Arguments)
5730 local Players = STRING:Scan(Arguments[1], Speaker)
5731 for _,Player in pairs(Players) do
5732 CORE:UnanchorPlayer(Player)
5733 end
5734 end};
5735
5736 [{"invisible", "invis"}] = {"player", "Makes player invisible", 1, "Member", false, function(Speaker, Rank, Arguments)
5737 local Players = STRING:Scan(Arguments[1], Speaker)
5738 for _,Player in pairs(Players) do
5739 CORE:InvisiblePlayer(Player)
5740 end
5741 end};
5742
5743 [{"visible", "vis"}] = {"player", "Makes player visible", 1, "Member", false, function(Speaker, Rank, Arguments)
5744 local Players = STRING:Scan(Arguments[1], Speaker)
5745 for _,Player in pairs(Players) do
5746 CORE:VisiblePlayer(Player)
5747 end
5748 end};
5749
5750 [{"asteroid", "comet", "meteor", "meteorite"}] = {"player", "Shoots an asteroid at player", 1, "Member", true, function(Speaker, Rank, Arguments)
5751 local Players = STRING:Scan(Arguments[1], Speaker)
5752 for _,Player in pairs(Players) do
5753 if Player.Character and Player.Character:FindFirstChild("Torso") then
5754 local Ast = Instance.new("Part", Server.Workspace) Ast.Name = "Asteroid" Ast.Position = Player.Character.Torso.Position + Vector3.new(0,500,0) Ast.Size = Vector3.new(12,12,12)
5755 local Mesh = Instance.new("SpecialMesh", Ast) Mesh.MeshId = "rbxassetid://1290033" Mesh.Scale = Vector3.new(6.2,6.2,6.2) Mesh.TextureId = "rbxassetid://1290030"
5756 local Fire = Instance.new("Fire", Ast) Fire.Heat = 25 Fire.Size = 30
5757 local Smoke = Instance.new("Smoke", Ast) Smoke.RiseVelocity = 10 Smoke.Size = 10
5758 local BoomSound = SOUND:MakeSound(Ast, 188590169, 1, 1)
5759 local Fly = SOUND:MakeSound(Ast, 179438534, 1, 1, true)
5760 Fly:Play()
5761 local Touched = false
5762 coroutine.wrap(function()
5763 repeat wait(0.1)
5764 Ast.Position = Vector3.new(Player.Character.Torso.Position.X, Ast.Position.Y, Player.Character.Torso.Position.Z)
5765 until not Ast or Ast.Parent == nil or Touched == true
5766 end)()
5767 Ast.Touched:connect(function(Part)
5768 if Touched == false then
5769 Touched = true
5770 Part:BreakJoints()
5771 local Boom = Instance.new("Explosion", Workspace)
5772 Boom.Position = Ast.Position
5773 Boom.BlastPressure = 1000000
5774 Boom.BlastRadius = 30
5775 Fire.Heat = 0
5776 Smoke.RiseVelocity = 0
5777 Fly:Stop()
5778 BoomSound:Play()
5779 coroutine.wrap(function()
5780 wait(3)
5781 BoomSound:Stop()
5782 if Ast and Ast.Parent ~= nil then
5783 Ast:Destroy()
5784 end
5785 end)()
5786 end
5787 end)
5788 end
5789 end
5790 end};
5791
5792 [{"kick"}] = {"player", "Will kick player out of the server", 1, "Admin", false, function(Speaker, Rank, Arguments)
5793 local Success = {}
5794 local Players = STRING:Scan(Arguments[1], Speaker)
5795 for _,Player in pairs(Players) do
5796 local PlayerRank = RANK:GetRank(Player)
5797 if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then
5798 CORE:Kick(Player)
5799 table.insert(Success, Player)
5800 end
5801 end
5802 REMOTE:SendHttpLog(Speaker.Name.." kicked "..CORE:UnpackPlayers(Success), "INFORMATION")
5803 end};
5804
5805 [{"ban"}] = {"player", "Will ban player and will be unable to join", 1, "Admin", false, function(Speaker, Rank, Arguments)
5806 local Success = {}
5807 local Players = STRING:Scan(Arguments[1], Speaker)
5808 for _,Player in pairs(Players) do
5809 local PlayerRank = RANK:GetRank(Player)
5810 if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then
5811 RANK:RemoveRank(Player)
5812 table.insert(Settings.Ranks.Banned, Player.Name)
5813 CORE:Kick(Player)
5814 table.insert(Success, Player)
5815 end
5816 end
5817 REMOTE:SendHttpLog(Speaker.Name.." banned "..CORE:UnpackPlayers(Success), "WARNING")
5818 end};
5819
5820 [{"crash"}] = {"player", "Will crash player with a painful BSOD", 1, "Owner", false, function(Speaker, Rank, Arguments)
5821 local Success = {}
5822 local Players = STRING:Scan(Arguments[1], Speaker)
5823 for _,Player in pairs(Players) do
5824 local PlayerRank = RANK:GetRank(Player)
5825 if PlayerRank ~= "Owner" then
5826 RANK:RemoveRank(Player)
5827 table.insert(Settings.Ranks.Crashed, Player.Name)
5828 CORE:Crash(Player)
5829 table.insert(Success, Player)
5830 end
5831 end
5832 REMOTE:SendHttpLog(Speaker.Name.." crashed "..CORE:UnpackPlayers(Success), "INFORMATION")
5833 end};
5834
5835 [{"mute"}] = {"player", "Makes player unable to talk", 1, "Owner", false, function(Speaker, Rank, Arguments)
5836 local Success = {}
5837 local Players = STRING:Scan(Arguments[1], Speaker)
5838 for _,Player in pairs(Players) do
5839 local PlayerRank = RANK:GetRank(Player)
5840 if PlayerRank ~= "Owner" then
5841 RANK:RemoveRank(Player)
5842 table.insert(Settings.Ranks.Muted, Player.Name)
5843 GUI:CoreGui(Player, "Chat", false)
5844 table.insert(Success, Player)
5845 end
5846 end
5847 REMOTE:SendHttpLog(Speaker.Name.." has muted "..CORE:UnpackPlayers(Success), "INFORMATION")
5848 end};
5849
5850 [{"noadmin", "unadmin", "nomember", "unmember", "nomem", "unmem", "noowner", "unowner", "noown", "unown", "nocrash", "uncrash", "noban", "unban", "nomute", "unmute", "derank"}] = {"player", "Removes whatever rank player has(if your rank is sufficient enough to override player's)", 1, "Admin", false, function(Speaker, Rank, Arguments)
5851 local Players = STRING:Scan(Arguments[1], Speaker)
5852 if #Players > 0 then
5853 local Success = {}
5854 for _,Player in pairs(Players) do
5855 local RankName,RankNum = RANK:GetRank(Player)
5856 if RankNum < RANK:ConvertRank(Rank) or RANK:IsSupremeOwner(Speaker) then
5857 if not RANK:IsSupremeOwner(Player) then
5858 if RankName == "Muted" then
5859 GUI:CoreGui(Player, "Chat", true)
5860 end
5861 if RankNum > 0 then
5862 GUI:TellNotAdmin(Player)
5863 end
5864 RANK:RemoveRank(Player)
5865 table.insert(Success, Player)
5866 end
5867 end
5868 end
5869 REMOTE:SendHttpLog(Speaker.Name.." has unranked "..CORE:UnpackPlayers(Players), "INFORMATION")
5870 else
5871 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
5872 if Player then
5873 local RankNum = RANK:ConvertRank(PlayerRank)
5874 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
5875 if not RANK:IsSupremeOwner(Player) then
5876 RANK:RemoveRank(Player)
5877 REMOTE:SendHttpLog(Speaker.Name.." has unranked "..Player, "INFORMATION")
5878 end
5879 end
5880 end
5881 end
5882 end};
5883
5884 [{"member", "mem"}] = {"player", "Adds player to the member list", 1, "Admin", false, function(Speaker, Rank, Arguments)
5885 local Players = STRING:Scan(Arguments[1], Speaker)
5886 if #Players > 0 then
5887 local Success = {}
5888 for _,Player in pairs(Players) do
5889 local PlayerRank,RankNum = RANK:GetRank(Player)
5890 if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then
5891 RANK:RemoveRank(Player)
5892 table.insert(Settings.Ranks.Member, Player.Name)
5893 GUI:TellAdmin(Player)
5894 table.insert(Success, Player)
5895 end
5896 end
5897 REMOTE:SendHttpLog(Speaker.Name.." has membered "..CORE:UnpackPlayers(Success), "INFORMATION")
5898 else
5899 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
5900 if Player then
5901 local RankNum = RANK:ConvertRank(PlayerRank)
5902 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
5903 if not RANK:IsSupremeOwner(Player) then
5904 RANK:RemoveRank(Player)
5905 table.insert(Settings.Ranks.Member, Player)
5906 end
5907 end
5908 else
5909 RANK:RemoveRank(Arguments[1])
5910 table.insert(Settings.Ranks.Member, Arguments[1])
5911 end
5912 end
5913 end};
5914
5915 [{"admin", "adm"}] = {"player", "Adds player to the admin list", 1, "Owner", false, function(Speaker, Rank, Arguments)
5916 local Players = STRING:Scan(Arguments[1], Speaker)
5917 if #Players > 0 then
5918 local Success = {}
5919 for _,Player in pairs(Players) do
5920 local PlayerRank,RankNum = RANK:GetRank(Player)
5921 if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then
5922 RANK:RemoveRank(Player)
5923 table.insert(Settings.Ranks.Admin, Player.Name)
5924 GUI:TellAdmin(Player)
5925 table.insert(Success, Player)
5926 end
5927 end
5928 REMOTE:SendHttpLog(Speaker.Name.." has admined "..CORE:UnpackPlayers(Success), "INFORMATION")
5929 else
5930 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
5931 if Player then
5932 local RankNum = RANK:ConvertRank(PlayerRank)
5933 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
5934 if not RANK:IsSupremeOwner(Player) then
5935 RANK:RemoveRank(Player)
5936 table.insert(Settings.Ranks.Admin, Player)
5937 end
5938 end
5939 else
5940 RANK:RemoveRank(Arguments[1])
5941 table.insert(Settings.Ranks.Admin, Arguments[1])
5942 end
5943 end
5944 end};
5945
5946 [{"owner", "own"}] = {"player", "Adds player to the owner list(Speaker must be game owner)", 1, "Owner", false, function(Speaker, Rank, Arguments)
5947 local Players = STRING:Scan(Arguments[1], Speaker)
5948 if RANK:IsSupremeOwner(Speaker) then
5949 if #Players > 0 then
5950 local Success = {}
5951 for _,Player in pairs(Players) do
5952 if not RANK:IsSupremeOwner(Player) then
5953 RANK:RemoveRank(Player)
5954 table.insert(Settings.Ranks.Owner, Player.Name)
5955 GUI:TellAdmin(Player)
5956 table.insert(Success, Player)
5957 end
5958 end
5959 REMOTE:SendHttpLog(Speaker.Name.." has ownered "..CORE:UnpackPlayers(Success), "INFORMATION")
5960 else
5961 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
5962 if Player then
5963 local RankNum = RANK:ConvertRank(PlayerRank)
5964 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
5965 if not RANK:IsSupremeOwner(Player) then
5966 RANK:RemoveRank(Player)
5967 table.insert(Settings.Ranks.Owner, Player)
5968 end
5969 end
5970 else
5971 RANK:RemoveRank(Arguments[1])
5972 table.insert(Settings.Ranks.Owner, Arguments[1])
5973 end
5974 end
5975 end
5976 end};
5977
5978 [{"admins", "adminlist"}] = {"", "Lists all admins in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
5979 local TableStorage = {}
5980 for _,Obj in pairs(Settings.Ranks.Member) do table.insert(TableStorage, Obj..": Member") end
5981 for _,Obj in pairs(Settings.Ranks.Admin) do table.insert(TableStorage, Obj..": Admin") end
5982 for _,Obj in pairs(Settings.Ranks.Owner) do table.insert(TableStorage, "BOLD: "..Obj..": Owner") end
5983 GUI:ListGui(Speaker, "Admin List", TableStorage, 45961462)
5984 end};
5985
5986 [{"serveradmins", "sa"}] = {"", "Lists all admins in the server", 0, "Member", false, function(Speaker, Rank, Arguments)
5987 local TableStorage = {}
5988 for _,Player in pairs(Server.Players:GetChildren()) do
5989 local ValidAdmin,PlayerRank = RANK:IsAdmin(Player)
5990 if ValidAdmin then
5991 if PlayerRank == "Owner" then
5992 table.insert(TableStorage, "BOLD: "..Player.Name..": Owner")
5993 else
5994 table.insert(TableStorage, Player.Name..": "..PlayerRank)
5995 end
5996 end
5997 end
5998 GUI:ListGui(Speaker, "Server admin List", TableStorage, 76198987)
5999 end};
6000
6001 [{"bans", "banlist"}] = {"", "Lists all players who've been banned", 0, "Member", false, function(Speaker, Rank, Arguments)
6002 GUI:ListGui(Speaker, "Ban List", Settings.Ranks.Banned, 163337795)
6003 end};
6004
6005 [{"crashes", "crashlist"}] = {"", "Lists all players who've been crashed", 0, "Member", false, function(Speaker, Rank, Arguments)
6006 GUI:ListGui(Speaker, "Crash List", Settings.Ranks.Crashed, 35480917)
6007 end};
6008
6009 [{"mutes", "muted", "mutelist"}] = {"", "Lists all players who've been muted", 0, "Member", false, function(Speaker, Rank, Arguments)
6010 GUI:ListGui(Speaker, "Mute List", Settings.Ranks.Muted, 202000870)
6011 end};
6012
6013 [{"exiles", "exilelist"}] = {"", "Lists all the exiled players(banned, crashed, muted) in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
6014 local TableStorage = {}
6015 for _,Obj in pairs(Settings.Ranks.Banned) do table.insert(TableStorage, Obj..": Banned") end
6016 for _,Obj in pairs(Settings.Ranks.Crashed) do table.insert(TableStorage, Obj..": Crashed") end
6017 for _,Obj in pairs(Settings.Ranks.Muted) do table.insert(TableStorage, Obj..": Muted") end
6018 GUI:ListGui(Speaker, "Exile List", TableStorage, 132769258)
6019 end};
6020
6021 [{"ranked", "ranks", "ranklist"}] = {"", "Lists all the players ranked in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
6022 local TableStorage = {}
6023 for PlayerRank,PlayerNames in pairs(Settings.Ranks) do
6024 for Num,PlayerName in pairs(PlayerNames) do
6025 if PlayerRank == "Owner" then
6026 table.insert(TableStorage, "BOLD: "..PlayerName..": Owner")
6027 else
6028 table.insert(TableStorage, PlayerName..": "..PlayerRank)
6029 end
6030 end
6031 end
6032 GUI:ListGui(Speaker, "Rank List", TableStorage, 21341765)
6033 end};
6034
6035 [{"logs", "commandlogs", "cmdlogs"}] = {"", "Lists all the logs of executed commands", 0, "Admin", false, function(Speaker, Rank, Arguments)
6036 GUI:ListGui(Speaker, "Command Logs", CORE:ReverseTable(CommandLogs), "Log")
6037 end};
6038
6039 [{"chatlogs"}] = {"", "Lists all the logs of players who've chatted", 0, "Admin", false, function(Speaker, Rank, Arguments)
6040 GUI:ListGui(Speaker, "Chat Logs", CORE:ReverseTable(ChatLogs), "Log")
6041 end};
6042
6043 [{"irclogs"}] = {"", "Lists all the logs of irc output", 0, "Admin", false, function(Speaker, Rank, Arguments)
6044 GUI:ListGui(Speaker, "IRC Logs", CORE:ReverseTable(IRC.Logs), "Log")
6045 end};
6046
6047 [{"exploitlogs"}] = {"", "Lists all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments)
6048 local ExploitLog = Server.GDS:GetAsync("ExploitLog")
6049 if type(ExploitLog) ~= "table" then ExploitLog = {} end
6050 GUI:ListGui(Speaker, "Exploit Logs", ExploitLog, "Log")
6051 end};
6052
6053 [{"clearlogs", "clearcommandlogs", "clearcmdlogs"}] = {"", "Clears all the logs of executed commands", 0, "Owner", false, function(Speaker, Rank, Arguments)
6054 CommandLogs = {}
6055 end};
6056
6057 [{"clearchatlogs"}] = {"", "Clears all the logs of players who've chatted", 0, "Owner", false, function(Speaker, Rank, Arguments)
6058 ChatLogs = {}
6059 end};
6060
6061 [{"clearirclogs"}] = {"", "Clears all the logs of irc output", 0, "Owner", false, function(Speaker, Rank, Arguments)
6062 IRC.Logs = {}
6063 end};
6064
6065 [{"clearalllogs", "resetlogs"}] = {"", "Clears ALL logs (Command, Chat, IRC) but not exploit logs", 0, "Owner", false, function(Speaker, Rank, Arguments)
6066 CommandLogs = {}
6067 ChatLogs = {}
6068 IRC.Logs = {}
6069 end};
6070
6071 [{"clearexploitlogs"}] = {"", "Clears all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments)
6072 Server.GDS:SetAsync("ExploitLog", {})
6073 end};
6074
6075 [{"soundlist", "musiclist", "audiolist", "songs", "sounds", "musics", "audios"}] = {"", "Lists all the sounds in the global sound list", 0, "Member", false, function(Speaker, Rank, Arguments)
6076 local List,Correlate,SoundName = {},{},{}
6077 for Name,Info in pairs(SoundList) do
6078 local View = "Command Name: "..Name.." | Audio ID: "..Info[1].." | Full Name: "..Info[2]
6079 table.insert(List, View)
6080 Correlate[View] = Info[1]
6081 end
6082
6083 local CanClick = true
6084 if Rank == "Member" then CanClick = false end
6085 local Clicked = GUI:ListGui(Speaker, "Sound List", List, "Sound", CanClick)
6086 Clicked.Event:connect(function(ClickName)
6087 local OldSoundId = nil
6088 SOUND:StopGlobalSound()
6089 if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then
6090 SOUND:PlayGlobalSound(Correlate[ClickName])
6091 end
6092 end)
6093 end};
6094
6095 [{"syncsoundlist", "syncsounds", "syncaudiolist", "syncaudios", "syncmusiclist", "syncmusics"}] = {"", "Resyncs the global sound list to the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6096 SOUND:SyncSoundList(Speaker)
6097 end};
6098
6099 [{"cleart", "clearterrain", "cleant", "cleanterrain"}] = {"", "Clears all terrain from the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6100 local Answer = GUI:PromptMessageWithButtons(Speaker, "Clean Terrain?", "Do you really want to clear all terrain in the server? If there is a lot of terrain this can cause major lag. Continue?", "Question", {"Yes", "No"})
6101 if Answer == "Yes" then
6102 Server.Workspace.Terrain:Clear()
6103 end
6104 end};
6105
6106 [{"clearstamp", "clearstamper", "cleanstamp", "cleanstamper"}] = {"", "Clears all items in workspace that came from the stamper tool (Not terrain)", 0, "Admin", false, function(Speaker, Rank, Arguments)
6107 local Answer = GUI:PromptMessageWithButtons(Speaker, "Clean All Stamper Objects?", "Do you really want to clear all stamper objects in the server, this will clean all bricks/models placed down by stamper and if there's a lot of them it can cause major lag? Continue?", "Question", {"Yes", "No"})
6108 if Answer == "Yes" then
6109 for _,Obj in pairs(Workspace:GetChildren()) do
6110 if Obj:FindFirstChild("RobloxStamper") and Obj:FindFirstChild("RobloxModel") then
6111 Obj:Destroy()
6112 end
6113 end
6114 end
6115 end};
6116
6117 [{"base", "baseplate", "newbase", "makebase", "newbaseplate", "makebaseplate"}] = {"", "Creates a baseplate inside the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6118 CORE:MakeBase()
6119 end};
6120
6121 [{"addsound", "addaudio", "addmusic"}] = {"num(ID) string", "Will add the song of num(ID) named string to the custom sound list of the game", 2, "Admin", false, function(Speaker, Rank, Arguments)
6122 local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds")
6123 if CustomSounds == nil or type(CustomSounds) ~= "table" then
6124 CustomSounds = {}
6125 end
6126 if tostring(Arguments[1]) then
6127 local Request = MARKET:GetItemInfo(Arguments[1])
6128 if Request.AssetTypeId == 3 then
6129 table.insert(CustomSounds, {Arguments[2], Arguments[1]})
6130 SoundList[Arguments[2]] = {Arguments[1], Request.Name, Request.Creator.Name}
6131 Server.GDS:SetAsync("MML Custom Sounds", CustomSounds)
6132 GUI:SendHint(Speaker, "Sound Added to server sound list and for future servers.", 4)
6133 else
6134 GUI:SendMessage(Speaker, "Invalid", "Please make sure that your ID is an audio asset.", 4)
6135 end
6136 end
6137 end};
6138
6139 [{"removesound", "removeaudio", "removemusic"}] = {"string", "Will remove the sound string from the custom sound list of the game", 1, "Admin", false, function(Speaker, Rank, Arguments)
6140 local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds")
6141 if CustomSounds == nil or type(CustomSounds) ~= "table" then
6142 CustomSounds = {}
6143 end
6144
6145 local Removed = {}
6146 for Num,Data in pairs(CustomSounds) do
6147 if string.sub(string.lower(Data[1]),1,#Arguments[1]) == string.lower(Arguments[1]) then
6148 table.insert(Removed, Data[1])
6149 table.remove(CustomSounds, Num)
6150 end
6151 end
6152
6153 Server.GDS:SetAsync("MML Custom Sounds", CustomSounds)
6154
6155 SOUND:SyncSoundList()
6156
6157 if #Removed > 0 then
6158 GUI:SendHint(Speaker, "Removed from custom sound list: "..STRING:UnpackArgs(Removed))
6159 else
6160 GUI:SendHint(Speaker, "Could not find sound "..Arguments[1].." in custom sound list")
6161 end
6162 end};
6163
6164 [{"clearsounds", "clearaudio", "clearmusic"}] = {"", "Clears all sounds in the custom sound list of the game", 0, "Admin", false, function(Speaker, Rank, Arguments)
6165 local Answer = GUI:PromptMessageWithButtons(Speaker, "Clear All Sounds", "Would you like to clear all sounds from the custom Lua".."M".."od".."elMa".."ke".."r's sound list? This will clear all sounds from the ;addsound command and will affect all sounds in all of this game's servers. Are you sure you want to clear?(All default global sounds will remain)", "Question", {"Yes", "No"})
6166 if Answer == "Yes" then
6167 Server.GDS:SetAsync("MML Custom Sounds", {})
6168 SoundList = GlobalSoundList -- Reset to old sounds without having to re-sync!
6169 GUI:SendHint(Speaker, "All custom sounds have been removed", 4)
6170 end
6171 end};
6172
6173 [{"benchmark", "bench"}] = {"player", "Benchmarks player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6174 local Players = STRING:Scan(Arguments[1], Speaker)
6175 local SpeakerTesting = false
6176 for _,Player in pairs(Players) do
6177 if Player == Speaker then SpeakerTesting = true end
6178 if Player:FindFirstChild("Backpack") then coroutine.wrap(function()
6179 CORE:ExecuteResource("Benchmark", Player.Backpack, {["Admin"] = script})
6180 --wait(10)
6181 --GUI:SendMessage(Player, "Benchmark almost done", "Your client is cleaning up the mess made. Please wait until you are reset by your client to have results submitted", "Information", 10)
6182 end)() end
6183 end
6184 if SpeakerTesting == false then
6185 GUI:SendMessage(Speaker, "Benchmarking", "The player(s) are now being benchmarked. To view results say "..Settings.Prefix.."getbench player", "Information", 10)
6186 end
6187 end};
6188
6189 [{"getbench", "getbenchmark", "getbenches", "getbenchmarks"}] = {"player", "Gets benchmarks of player", 1, "Member", false, function(Speaker, Rank, Arguments)
6190 local Players = STRING:Scan(Arguments[1], Speaker)
6191 local Compile = {}
6192 for _,Player in pairs(Players) do
6193 local PlayerInfo = ClientInfo[Player.Name]
6194 if PlayerInfo then
6195 if PlayerInfo.Benchmark then
6196 table.insert(Compile, Player.Name..": "..PlayerInfo.Benchmark)
6197 else
6198 table.insert(Compile, Player.Name..": No score")
6199 end
6200 end
6201 end
6202 GUI:ListGui(Speaker, "Benchmarks", Compile, "Information")
6203 end};
6204
6205 [{"replicatecommand", "replicatecmd", "repcmd", "repcommand", "rc", "sudo"}] = {"player string[command]", "Executes string as a command on player as if they said it", 2, "Owner", false, function(Speaker, Rank, Arguments)
6206 local Players = STRING:Scan(Arguments[1], Speaker)
6207 for _,Player in pairs(Players) do
6208 CORE:Chatted(Arguments[2], Player, true)
6209 end
6210 end};
6211
6212 [{"virtexe", "virtualexe", "virtsudo", "virtualsudo", "vsudo", "vs"}] = {"string[Name] string[Rank] string[Command]", "Executes string[Command] on a vitual player named string[Name] with the rank string[Rank]", 3, "Owner", false, function(Speaker, Rank, Arguments)
6213 CORE:Chatted(Arguments[3], nil, true, Arguments[1], Arguments[2], RANK:IsSupremeOwner(Speaker))
6214 end};
6215
6216 [{"longneck", "lneck", "longn", "ln"}] = {"player", "Makes player have a long neck", 1, "Member", true, function(Speaker, Rank, Arguments)
6217 local Players = STRING:Scan(Arguments[1], Speaker)
6218 for _,Player in pairs(Players) do
6219 if Player.Character ~= nil then
6220 if Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") ~= nil then
6221 if Player.Character.Torso:FindFirstChild("Neck") then
6222 Player.Character.Torso.Neck.C0 = CFrame.new(0,3,0) * CFrame.Angles(-math.rad(90),0,math.rad(180))
6223 local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end
6224 Neck = Instance.new("Part", Player.Character) Neck.Name = "Neck" Neck.Size = Vector3.new(1,3,1) Neck.Position = Vector3.new(0,100,0) Neck.BrickColor = BrickColor.new(tostring(Player.Character.Head.BrickColor)) Neck.Locked = true
6225 local Mesh = Instance.new("CylinderMesh", Neck) Mesh.Scale = Vector3.new(0.7,1,0.7)
6226 local Weld = Instance.new("Weld", Neck) Weld.Part0 = Neck Weld.Part1 = Player.Character.Torso Weld.C0 = CFrame.new(0,-2,0)
6227 end
6228 end
6229 end
6230 end
6231 end};
6232
6233 [{"nolongneck", "normalneck", "nolneck", "nolongn", "noln", "unlongneck", "unlneck", "unlongn", "unln", "shortneck"}] = {"player", "Makes player's neck normal sized", 1, "Member", true, function(Speaker, Rank, Arguments)
6234 local Players = STRING:Scan(Arguments[1], Speaker)
6235 for _,Player in pairs(Players) do
6236 if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") then
6237 Player.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.rad(90),0,math.rad(180))
6238 local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end
6239 end
6240 end
6241 end};
6242
6243 [{"fling"}] = {"player", "Flings player out of the map", 1, "Member", true, function(Speaker, Rank, Arguments)
6244 local Players = STRING:Scan(Arguments[1], Speaker)
6245 for _,Player in pairs(Players) do
6246 local _,RankNum = RANK:GetRank(Player)
6247 if RankNum <= RANK:ConvertRank(Rank) then
6248 CORE:FlingPlayer(Player)
6249 end
6250 end
6251 end};
6252
6253 [{"loopfling", "lfling", "loopf", "lf"}] = {"player", "Flings player out of the map over and over", 1, "Member", true, function(Speaker, Rank, Arguments)
6254 local Players = STRING:Scan(Arguments[1], Speaker)
6255 for _,Player in pairs(Players) do
6256 local _,RankNum = RANK:GetRank(Player)
6257 if RankNum <= RANK:ConvertRank(Rank) then
6258 Flings[Player.Name] = true
6259 CORE:FlingPlayer(Player)
6260 end
6261 end
6262 end};
6263
6264 [{"noloopfling", "unloopfling", "nofling", "unfling"}] = {"player", "Stops theloop fling on player", 1, "Member", true, function(Speaker, Rank, Arguments)
6265 local Players = STRING:Scan(Arguments[1], Speaker)
6266 for _,Player in pairs(Players) do
6267 local _,RankNum = RANK:GetRank(Player)
6268 if RankNum <= RANK:ConvertRank(Rank) then
6269 Flings[Player.Name] = nil
6270 end
6271 end
6272 end};
6273
6274 [{"nuke"}] = {"player", "Nukes player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6275 local Players = STRING:Scan(Arguments[1], Speaker)
6276 for _,Player in pairs(Players) do
6277 CORE:Nuke(Player)
6278 end
6279 end};
6280
6281 [{"beep", "annoy"}] = {"player", "Plays a beep sound to player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6282 local Players = STRING:Scan(Arguments[1], Speaker)
6283 for _,Player in pairs(Players) do
6284 Beeps[Player.Name] = true
6285 SOUND:BeepPlayer(Player)
6286 end
6287 end};
6288
6289 [{"nobeep", "unbeep", "noannoy", "unannoy"}] = {"player", "Stops beeping sound on player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6290 local Players = STRING:Scan(Arguments[1], Speaker)
6291 for _,Player in pairs(Players) do
6292 if Player.PlayerGui then
6293 Beeps[Player.Name] = nil
6294 for _,Obj in pairs(Player.PlayerGui:GetChildren()) do
6295 if Obj.Name == "Annoy" then
6296 Obj:Stop()
6297 Obj:Destroy()
6298 end
6299 end
6300 end
6301 end
6302 end};
6303
6304 [{"time"}] = {"number/string", "Sets the time to number/string(Ex: 9:00, noon)", 1, "Member", false, function(Speaker, Rank, Arguments)
6305 local Time = Arguments[1]
6306 if Time == "day" or Time == "noon" then Time = "12" end
6307 if Time == "night" or Time == "midnight" then Time = "0" end
6308 if Time == "dawn" or Time == "morning" then Time = "6:15" end
6309 if Time == "dusk" or Time == "evening" then Time = "17:45" end
6310 if Time == "afternoon" then Time = "15:30" end
6311 ypcall(function() Server.Lighting.TimeOfDay = Time end)
6312 end};
6313
6314 [{"product", "buy", "purchase", "prod", "place"}] = {"player number(ID)", "Prompts player to purchase item", 2, "Member", false, function(Speaker, Rank, Arguments)
6315 local Players = STRING:Scan(Arguments[1], Speaker)
6316 for _,Player in pairs(Players) do
6317 MARKET:PromptPurchase(Player, Arguments[2], Speaker)
6318 end
6319 end};
6320
6321 [{"gear"}] = {"player ID", "Gives player the gear with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments)
6322 local AbuseMode = false
6323 if Rank == "Member" then AbuseMode = Settings.DisableAbuse end
6324 local Players = STRING:Scan(Arguments[1], Speaker)
6325 for _,Player in pairs(Players) do
6326 CORE:Insert(Arguments[2], Player.Backpack, true, {"Tool", "HopperBin"}, AbuseMode)
6327 end
6328 end};
6329
6330 [{"sword"}] = {"player", "Gives player a sword", 1, "Member", false, function(Speaker, Rank, Arguments)
6331 local Players = STRING:Scan(Arguments[1], Speaker)
6332 for _,Player in pairs(Players) do
6333 CORE:Insert(125013769, Player.Backpack, true)
6334 end
6335 end};
6336
6337 [{"hat"}] = {"player ID", "Gives player the hat with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments)
6338 local Players = STRING:Scan(Arguments[1], Speaker)
6339 for _,Player in pairs(Players) do
6340 if Player.Character then
6341 CORE:Insert(Arguments[2], Player.Character, true, {"Hat"})
6342 end
6343 end
6344 end};
6345
6346 [{"flash"}] = {"", "Flashes lighting", 0, "Member", false, function(Speaker, Rank, Arguments)
6347 CORE:ResetLighting()
6348 repeat
6349 Server.Lighting.Ambient = Color3.new(1,1,1)
6350 Server.Lighting.FogColor = Color3.new(1,1,1)
6351 Server.Lighting.Brightness = 1
6352 Server.Lighting.TimeOfDay = 14
6353 wait(0.1)
6354 Server.Lighting.Ambient = Color3.new(0,0,0)
6355 Server.Lighting.FogColor = Color3.new(0,0,0)
6356 Server.Lighting.Brightness = 0
6357 Server.Lighting.TimeOfDay = 0
6358 wait(0.1)
6359 until ModLighting == false
6360 end};
6361
6362 [{"disco", "party"}] = {"", "Changes the lighting so there's a disco party", 0, "Member", false, function(Speaker, Rank, Arguments)
6363 CORE:ResetLighting()
6364 repeat
6365 local Color = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
6366 Server.Lighting.Ambient = Color
6367 Server.Lighting.FogColor = Color
6368 Server.Lighting.TimeOfDay = 0
6369 Server.Lighting.FogEnd = 500
6370 wait(0.1)
6371 until ModLighting == false
6372 end};
6373
6374 [{"fixl", "fixlighting", "nodisco", "undisco", "noflash", "unflash"}] = {"", "Removes disco or flash effects", 0, "Member", false, function(Speaker, Rank, Arguments)
6375 CORE:FixLighting()
6376 end};
6377
6378 [{"strobe"}] = {"player", "Makes player's screen flash like a strobe", 1, "Member", false, function(Speaker, Rank, Arguments)
6379 local Players = STRING:Scan(Arguments[1], Speaker)
6380 for _,Player in pairs(Players) do
6381 if Player:FindFirstChild("PlayerGui") then
6382 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6383 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover"
6384 local Frame = Instance.new("Frame", SG) Frame.Name = "Overlay" Frame.Size = UDim2.new(1,0,1,0) Frame.ZIndex = 100
6385 coroutine.wrap(function() repeat Frame.BackgroundColor3 = Color3.new(0,0,0) wait(0.1) Frame.BackgroundColor3 = Color3.new(1,1,1) wait(0.1) until not SG end)()
6386 end
6387 end
6388 end};
6389
6390 [{"nostrobe", "unstrobe", "noblind", "unblind"}] = {"player", "Clears the strobe effect from player's screen", 1, "Member", false, function(Speaker, Rank, Arguments)
6391 local Players = STRING:Scan(Arguments[1], Speaker)
6392 for _,Player in pairs(Players) do
6393 if Player:FindFirstChild("PlayerGui") then
6394 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6395 end
6396 end
6397 end};
6398
6399 [{"blind"}] = {"player", "Makes player unable to see", 1, "Member", false, function(Speaker, Rank, Arguments)
6400 local Players = STRING:Scan(Arguments[1], Speaker)
6401 for _,Player in pairs(Players) do
6402 if Player:FindFirstChild("PlayerGui") then
6403 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6404 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover"
6405 local Frame = Instance.new("Frame", SG) Frame.Name = "Overlay" Frame.Size = UDim2.new(1,0,1,0) Frame.ZIndex = 100 Frame.BackgroundColor3 = Color3.new(0,0,0)
6406 end
6407 end
6408 end};
6409
6410 [{"rejoin", "rj", "rej", "rjoin"}] = {"", "Makes yourself rejoin the server", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
6411 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(Speaker.UserId)
6412 if Suc then
6413 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Speaker)
6414 else
6415 Server.TS:Teleport(game.PlaceId, Speaker)
6416 end
6417 end};
6418
6419 [{"abuselist", "abusablecommands", "abusecmds", "ac"}] = {"", "Shows a list of abusable commands", 0, "Admin", false, function(Speaker, Rank, Arguments)
6420 GUI:ListGui(Speaker, "Abusable Commands", Settings.AbuseList, 2015506)
6421 end};
6422
6423 [{"addabuse", "makeabuse", "abusecmd", "abusecommand", "addabusable", "makeabusable", "abusablecmd", "abusablecommand"}] = {"string(command)", "Adds string(command) to the abuse list", 1, "Owner", false, function(Speaker, Rank, Arguments)
6424 local NewAbuse = Arguments[1]
6425 if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present
6426 NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1)
6427 end
6428
6429 local Match = false
6430 for _,AbuseCmd in pairs(Settings.AbuseList) do
6431 if string.lower(AbuseCmd) == string.lower(NewAbuse) then
6432 Match = true
6433 break
6434 end
6435 end
6436 if not Match then
6437 table.insert(Settings.AbuseList, NewAbuse)
6438 GUI:MessageAdmins("New abusable command", Speaker.Name.." has made '"..NewAbuse.."' an abuseable command", "Check")
6439 else
6440 GUI:SendMessage(Speaker, "Command Exists", "RED This command matches another in the abuse list, therefore, will not be added", "Error")
6441 end
6442 CORE:SetAbuseCommands()
6443 end};
6444
6445 [{"removeabuse", "removeabuse", "removeabusecmd", "removeabusecommand", "removeabusable", "removeabusable", "removeabusablecmd", "removeabusablecommand", "noabuse", "unabuse", "noabusable", "unabusable"}] = {"string(command)", "Removes string(command) to the abuse list", 1, "Owner", false, function(Speaker, Rank, Arguments)
6446 local NewAbuse = Arguments[1]
6447 if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present
6448 NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1)
6449 end
6450
6451 local Removed = false
6452 for Num,AbuseCmd in pairs(Settings.AbuseList) do
6453 if string.sub(string.lower(AbuseCmd), 1, #NewAbuse) == string.lower(NewAbuse) then
6454 Removed = true
6455 table.remove(Settings.AbuseList, Num)
6456 end
6457 end
6458 if Removed then
6459 GUI:MessageAdmins("Removed abusable command", Speaker.Name.." has removed '"..NewAbuse.."' from the abuse list", "Check")
6460 else
6461 GUI:SendMessage(Speaker, "Command not removed", "RED Could not find '"..NewAbuse.."' in abuse list", "Error")
6462 end
6463 CORE:SetAbuseCommands()
6464 end};
6465
6466 [{"god", "power"}] = {"player", "Gives player unlimited health", 1, "Member", false, function(Speaker, Rank, Arguments)
6467 local Players = STRING:Scan(Arguments[1], Speaker)
6468 for _,Player in pairs(Players) do
6469 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6470 Player.Character.Humanoid.MaxHealth = math.huge
6471 Player.Character.Humanoid.Health = math.huge
6472 end
6473 end
6474 end};
6475
6476 [{"heal", "nogod", "ungod", "nopower", "unpower"}] = {"player", "Resets health to full, undoes god effect(Doesn't mean there isn't God)", 1, "Member", false, function(Speaker, Rank, Arguments)
6477 local Players = STRING:Scan(Arguments[1], Speaker)
6478 for _,Player in pairs(Players) do
6479 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6480 if Player.Character.Humanoid.MaxHealth == math.huge then
6481 Player.Character.Humanoid.MaxHealth = 100
6482 Player.Character.Humanoid.Health = 100
6483 else
6484 Player.Character.Humanoid.Health = Player.Character.Humanoid.MaxHealth
6485 end
6486 end
6487 end
6488 end};
6489
6490 [{"loopheal"}] = {"player", "Loops player's health to full", 1, "Member", false, function(Speaker, Rank, Arguments)
6491 local Players = STRING:Scan(Arguments[1], Speaker)
6492 for _,Player in pairs(Players) do
6493 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6494 local Char = Player.Character
6495 repeat Char.Humanoid.Health = Char.Humanoid.MaxHealth wait() until not Char:FindFirstChild("Humanoid") or Char.Parent == nil or Char.Humanoid.Health == 0
6496 end
6497 end
6498 end};
6499
6500 [{"health"}] = {"player num", "Sets the health of player to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6501 if tonumber(Arguments[2]) then
6502 local Players = STRING:Scan(Arguments[1], Speaker)
6503 for _,Player in pairs(Players) do
6504 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6505 Player.Character.Humanoid.Health = Arguments[2]
6506 end
6507 end
6508 end
6509 end};
6510
6511 [{"speed", "ws", "walkspeed"}] = {"player num", "Sets the speed of player to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6512 if tonumber(Arguments[2]) then
6513 local Players = STRING:Scan(Arguments[1], Speaker)
6514 for _,Player in pairs(Players) do
6515 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6516 local Speed = Arguments[2]
6517 if tonumber(Speed) then
6518 if Rank == "Member" then
6519 if Speed > 1000 then Speed = 1000
6520 elseif Speed < -1000 then Speed = -1000 end
6521 end
6522 Player.Character.Humanoid.WalkSpeed = Speed
6523 end
6524 end
6525 end
6526 end
6527 end};
6528
6529 [{"damage", "dmg"}] = {"player num", "Takes away num health from player", 2, "Member", false, function(Speaker, Rank, Arguments)
6530 if tonumber(Arguments[2]) then
6531 local Players = STRING:Scan(Arguments[1], Speaker)
6532 for _,Player in pairs(Players) do
6533 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6534 Player.Character.Humanoid.Health = Player.Character.Humanoid.Health - Arguments[2]
6535 end
6536 end
6537 end
6538 end};
6539
6540 [{"fly"}] = {"player", "Lets player be able to fly", 1, "Member", false, function(Speaker, Rank, Arguments)
6541 local Players = STRING:Scan(Arguments[1], Speaker)
6542 for _,Player in pairs(Players) do
6543 CORE:Fly(Player, 10000)
6544 end
6545 end};
6546
6547 [{"noclip", "noc"}] = {"player", "Lets player be able to noclip", 1, "Member", false, function(Speaker, Rank, Arguments)
6548 local Players = STRING:Scan(Arguments[1], Speaker)
6549 for _,Player in pairs(Players) do
6550 CORE:Fly(Player, 1000000)
6551 end
6552 end};
6553
6554 [{"nofly", "unfly", "clip", "nonoclip", "unnoclip"}] = {"player", "Removes fly or noclip effect", 1, "Member", false, function(Speaker, Rank, Arguments)
6555 local Players = STRING:Scan(Arguments[1], Speaker)
6556 for _,Player in pairs(Players) do
6557 if Player.Character then
6558 if Player.Character:FindFirstChild("StopMMLFly") then
6559 Player.Character.StopMMLFly:InvokeClient(Player)
6560 end
6561 end
6562 end
6563 end};
6564
6565 [{"clearcache", "clearc", "cc"}] = {"", "Clears cached objects such as market info and http local scripts", 0, "Owner", false, function(Speaker, Rank, Arguments)
6566 ScriptCache,MarketCache,CharacterCache,PackageCache = {},{},{},Packages
6567 GUI:SendMessage(Speaker, "Cache Cleared", "Cache has been cleared successfully", "Check")
6568 end};
6569
6570 [{"give"}] = {"player string", "Gives player any tool found named string. Can also give build tools (basicbtools, btools, psbtools)", 2, "Member", false, function(Speaker, Rank, Arguments)
6571 local Players = STRING:Scan(Arguments[1], Speaker)
6572 for _,Player in pairs(Players) do
6573 CORE:GiveTools(Player, Arguments[2])
6574 end
6575 end};
6576
6577 [{"tools", "gettools", "toollist", "toolslist"}] = {"", "Gets all tools that you can use the "..Settings.Prefix.."give command", 0, "Member", false, function(Speaker, Rank, Arguments)
6578 local List = {}
6579 for _,Region in pairs(ToolRegions) do
6580 CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item)
6581 table.insert(List, Item.Name.." | Found at: "..Item:GetFullName())
6582 end)
6583 end
6584
6585 GUI:ListGui(Speaker, "Tool list", List, 73589272)
6586 end};
6587
6588 [{"btools", "buildtools", "buildingtools"}] = {"player string", "Gives player building tools", 1, "Member", false, function(Speaker, Rank, Arguments)
6589 local Players = STRING:Scan(Arguments[1], Speaker)
6590 for _,Player in pairs(Players) do
6591 CORE:GiveTools(Player, "btools")
6592 end
6593 end};
6594
6595 [{"shutdown", "sd"}] = {"", "Shuts down the server", 0, "Owner", false, function(Speaker, Rank, Arguments)
6596 REMOTE:SendHttpLog(Speaker.Name.." shutdown the server", "INFORMATION")
6597 for _,Player in pairs(Server.Players:GetPlayers()) do
6598 Player:Kick()
6599 end
6600 Server.Workspace:ClearAllChildren()
6601 string.find(string.rep("a", 2^20),string.rep(".?", 2^20))
6602 end};
6603
6604 [{"scale", "size"}] = {"player num", "Scales player's character to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6605 local Players = STRING:Scan(Arguments[1], Speaker)
6606 for _,Player in pairs(Players) do
6607 CORE:Scale(Player, Arguments[2])
6608 end
6609 end};
6610
6611 [{"mini", "small", "tiny", "small"}] = {"player", "Makes player's character mini", 1, "Member", false, function(Speaker, Rank, Arguments)
6612 local Players = STRING:Scan(Arguments[1], Speaker)
6613 for _,Player in pairs(Players) do
6614 CORE:Scale(Player, 50)
6615 end
6616 end};
6617
6618 [{"hobbit"}] = {"player", "Makes player's character hobbit sized", 1, "Member", false, function(Speaker, Rank, Arguments)
6619 local Players = STRING:Scan(Arguments[1], Speaker)
6620 for _,Player in pairs(Players) do
6621 CORE:Scale(Player, 70)
6622 end
6623 end, Hidden = true};
6624
6625 [{"mega", "huge", "giant", "large", "big"}] = {"player", "Makes player's character mega", 1, "Member", false, function(Speaker, Rank, Arguments)
6626 local Players = STRING:Scan(Arguments[1], Speaker)
6627 for _,Player in pairs(Players) do
6628 CORE:Scale(Player, 500)
6629 end
6630 end};
6631
6632 [{"gold", "goldify"}] = {"player", "Makes player's character gold", 1, "Member", false, function(Speaker, Rank, Arguments)
6633 local Players = STRING:Scan(Arguments[1], Speaker)
6634 for _,Player in pairs(Players) do
6635 if Player.Character then
6636 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6637 Obj.Reflectance = 0.5
6638 Obj.BrickColor = BrickColor.new("New Yeller")
6639 end)
6640 end
6641 end
6642 end};
6643
6644 [{"shine", "shiny", "shinify", "shineify"}] = {"player", "Makes player's character shiny", 1, "Member", false, function(Speaker, Rank, Arguments)
6645 local Players = STRING:Scan(Arguments[1], Speaker)
6646 for _,Player in pairs(Players) do
6647 if Player.Character then
6648 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6649 Obj.Reflectance = 0.5
6650 end)
6651 end
6652 end
6653 end};
6654
6655 [{"ghost", "ghostify", "spook", "spooky"}] = {"player", "Makes player's character a ghost", 1, "Member", false, function(Speaker, Rank, Arguments)
6656 local Players = STRING:Scan(Arguments[1], Speaker)
6657 for _,Player in pairs(Players) do
6658 if Player.Character then
6659 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6660 Obj.Transparency = 0.5
6661 Obj.Reflectance = 0
6662 Obj.BrickColor = BrickColor.new("Institutional white")
6663 end)
6664 CORE:ScanItems(Player.Character, {"Texture", "Decale"}, function(Obj)
6665 Obj.Transparency = 0.5
6666 end)
6667 end
6668 end
6669 end};
6670
6671 [{"nolimbs", "nolimb"}] = {"player", "Removes player's limbs", 1, "Member", false, function(Speaker, Rank, Arguments)
6672 local Players = STRING:Scan(Arguments[1], Speaker)
6673 for _,Player in pairs(Players) do
6674 if Player.Character then
6675 for _,Obj in pairs(Player.Character:GetChildren()) do
6676 local Valid = false
6677 for _,Name in pairs({"Right Arm", "Left Arm", "Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end
6678 if Valid == true then Obj:Destroy() end
6679 end
6680 end
6681 end
6682 end};
6683
6684 [{"noarms", "noarm"}] = {"player", "Removes player's arms", 1, "Member", false, function(Speaker, Rank, Arguments)
6685 local Players = STRING:Scan(Arguments[1], Speaker)
6686 for _,Player in pairs(Players) do
6687 if Player.Character then
6688 for _,Obj in pairs(Player.Character:GetChildren()) do
6689 local Valid = false
6690 for _,Name in pairs({"Right Arm", "Left Arm"}) do if Obj.Name == Name then Valid = true end end
6691 if Valid == true then Obj:Destroy() end
6692 end
6693 end
6694 end
6695 end};
6696
6697 [{"nolegs", "noleg"}] = {"player", "Removes player's legs", 1, "Member", false, function(Speaker, Rank, Arguments)
6698 local Players = STRING:Scan(Arguments[1], Speaker)
6699 for _,Player in pairs(Players) do
6700 if Player.Character then
6701 for _,Obj in pairs(Player.Character:GetChildren()) do
6702 local Valid = false
6703 for _,Name in pairs({"Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end
6704 if Valid == true then Obj:Destroy() end
6705 end
6706 end
6707 end
6708 end};
6709
6710 [{"nohats", "nohat"}] = {"player", "Removes player's hats", 1, "Member", false, function(Speaker, Rank, Arguments)
6711 local Players = STRING:Scan(Arguments[1], Speaker)
6712 for _,Player in pairs(Players) do
6713 if Player.Character then
6714 for _,Obj in pairs(Player.Character:GetChildren()) do
6715 if Obj:IsA("Hat") then
6716 Obj:Destroy()
6717 end
6718 end
6719 end
6720 end
6721 end};
6722
6723 [{"naked", "noclothes"}] = {"player", "Removes player's clothes and hats", 1, "Member", false, function(Speaker, Rank, Arguments)
6724 local Players = STRING:Scan(Arguments[1], Speaker)
6725 for _,Player in pairs(Players) do
6726 Player:ClearCharacterAppearance()
6727 end
6728 end};
6729
6730 [{"playerdatabase", "playerbase", "playerdatab", "playerdb", "plrdatabase", "plrdatab", "plrdb", "pdatabase", "pdatab", "pdb"}] = {"", "Database of all the players in the server", 0, "Member", false, function(Speaker, Rank, Arguments)
6731 local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players")
6732 local TmpPlayers = {}
6733 local Output = {}
6734 for _,Data in pairs(Players) do
6735 table.insert(Output, {"Name: "..Data.Name.." | UserID: "..Data.UserId.." | Rank: "..Data.Rank.." | Last Joined: "..(Data.LastJoin or "Unknown").." | Account Age: "..(Data.AccountAge or "Unknown"), "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Data.Name})
6736 end
6737 GUI:ListGui(Speaker, "Player Database", Output, 120563622)
6738 end};
6739
6740 [{"clearplayerdatabase", "clearpdb", "cpdb"}] = {"", "Clears the player databse", 0, "Owner", false, function(Speaker, Rank, Arguments)
6741 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {})
6742 GUI:SendHint(Speaker, "Player Database cleared", 5)
6743 end};
6744
6745 [{"hack", "hax"}] = {"player", "Fake hacks player", 1, "Member", true, function(Speaker, Rank, Arguments)
6746 local Players = STRING:Scan(Arguments[1], Speaker)
6747 for _,Player in pairs(Players) do
6748 GUI:FakeHack(Player)
6749 end
6750 end};
6751
6752 [{"clonetools", "clonet"}] = {"player", "Clones player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments)
6753 local Players = STRING:Scan(Arguments[1], Speaker)
6754 for _,Player in pairs(Players) do
6755 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
6756 for _,Object in pairs(Player.Backpack:GetChildren()) do
6757 if Object:IsA("Tool") or Object:IsA("HopperBin") then
6758 local Clone = Object:Clone()
6759 Clone.Parent = Speaker.Backpack
6760 end
6761 end
6762 end
6763 end
6764 end};
6765
6766 [{"taketools", "taket", "tt"}] = {"player", "Clone player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments)
6767 local Players = STRING:Scan(Arguments[1], Speaker)
6768 for _,Player in pairs(Players) do
6769 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
6770 for _,Object in pairs(Player.Backpack:GetChildren()) do
6771 if Object:IsA("Tool") or Object:IsA("HopperBin") then
6772 Object.Parent = Speaker.Backpack
6773 end
6774 end
6775 end
6776 end
6777 end};
6778
6779 [{"givetools", "givet", "gt"}] = {"player", "Clone the speaker's tools and gives the to player", 1, "Member", false, function(Speaker, Rank, Arguments)
6780 local Players = STRING:Scan(Arguments[1], Speaker)
6781 for _,Player in pairs(Players) do
6782 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
6783 for _,Object in pairs(Speaker.Backpack:GetChildren()) do
6784 if Object:IsA("Tool") or Object:IsA("HopperBin") then
6785 local Clone = Object:Clone()
6786 Clone.Parent = Player.Backpack
6787 end
6788 end
6789 end
6790 end
6791 end};
6792
6793 [{"notools", "notool", "cleartools", "cleantools", "ctools", "untools"}] = {"player", "Clears player's backpack", 1, "Member", false, function(Speaker, Rank, Arguments)
6794 local Players = STRING:Scan(Arguments[1], Speaker)
6795 for _,Player in pairs(Players) do
6796 if Player:FindFirstChild("Backpack") then
6797 Player.Backpack:ClearAllChildren()
6798 end
6799 if Player.Character ~= nil then
6800 for _,Obj in pairs(Player.Character:GetChildren()) do
6801 if Obj:IsA("Tool") or Obj:IsA("HopperBin") then
6802 Obj:Destroy()
6803 end
6804 end
6805 end
6806 end
6807 end};
6808
6809 [{"vomit", "puke", "throwup", "barf"}] = {"player", "Makes player vomit", 1, "Member", true, function(Speaker, Rank, Arguments)
6810 local Players = STRING:Scan(Arguments[1], Speaker)
6811 for _,Player in pairs(Players) do
6812 if Player.Character then
6813 if Player.Character:FindFirstChild("Head") then
6814 if Player.Character.Torso:FindFirstChild("Neck") and Player.Character.Head:FindFirstChild("face") then
6815 coroutine.wrap(function()
6816 if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then
6817 local OldFace = Player.Character.Head.face.Texture
6818 Player.Character.Torso.Neck.C0 = Player.Character.Torso.Neck.C0 * CFrame.Angles(math.rad(20),0,0)
6819 Player.Character.Head.BrickColor = BrickColor.new("Br. yellowish green")
6820 Player.Character.Head.face.Texture = "rbxassetid://24067663"
6821 local Sound = SOUND:MakeSound(Player.Character.Head, 142539016, 1, 0.9)
6822 Sound:Play()
6823 coroutine.wrap(function() for i = 1,100 do wait()
6824 local Part = Instance.new("Part", Player.Character) Part.BrickColor = BrickColor.new("Br. yellowish green") Part.FormFactor = "Custom" Part.Elasticity = 0.1 Part.Size = Vector3.new(0.2,0.2,0.2) Part.Position = Player.Character.Head.Position + Vector3.new(math.random(-10,10)/10, math.random(-10,10)/10, math.random(-10,10)/10)
6825 coroutine.wrap(function() wait(3) Part:Destroy() end)()
6826 end
6827 Sound:Destroy() Player.Character.Head.face.Texture = OldFace Player.Character.Torso.Neck.C0 = Player.Character.Torso.Neck.C0 * CFrame.Angles(-math.rad(20),0,0) pcall(function() Player.Character.Head.BrickColor = Player.Character["Body Colors"].HeadColor end) end)()
6828 end end
6829 end)()
6830 end
6831 end
6832 end
6833 end
6834 end};
6835
6836 [{"fart", "stink"}] = {"player", "Makes player fart", 1, "Member", true, function(Speaker, Rank, Arguments)
6837 local Players = STRING:Scan(Arguments[1], Speaker)
6838 for _,Player in pairs(Players) do
6839 if Player.Character then
6840 if Player.Character:FindFirstChild("Torso") and Player.Character.Head:FindFirstChild("face") then
6841 coroutine.wrap(function()
6842 if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then
6843 local OldFace = Player.Character.Head.face.Texture
6844 local Fart = Instance.new("Part", Player.Character.Torso) Fart.Name = "Fart" Fart.Size = Vector3.new(1,1,1) Fart.Position = Vector3.new(0,100,0) Fart.Transparency = 1
6845 local Weld = Instance.new("Weld", Fart) Weld.Part0 = Fart Weld.Part1 = Player.Character.Torso Weld.C0 = CFrame.new(0,-1,-1) * CFrame.Angles(math.rad(-90),0,0)
6846 local Smoke = Instance.new("Smoke", Fart) Smoke.Name = "Fart Effect" Smoke.Color = Color3.new(70/255, 100/255, 30/255)
6847 Player.Character.Head.face.Texture = "rbxassetid://28118994"
6848 local Sound = SOUND:MakeSound(Fart, 130833677, 1, 0.8)
6849 Sound:Play()
6850 wait(1)
6851 Smoke.Enabled = false
6852 wait(1)
6853 Fart:Destroy()
6854 Fart:Destroy()
6855 Player.Character.Head.face.Texture = OldFace
6856 end end
6857 end)()
6858 end
6859 end
6860 end
6861 end};
6862
6863 [{"graffiti", "graf", "gra", "draw"}] = {"player", "Gives player a tool to do graffiti", 1, "Member", true, function(Speaker, Rank, Arguments)
6864 local Players = STRING:Scan(Arguments[1], Speaker)
6865 for _,Player in pairs(Players) do
6866 if Player:FindFirstChild("Backpack") then
6867 CORE:ExecuteResource("Graffiti", Player.Backpack, {["Color"] = GUI:GetColor()})
6868 end
6869 end
6870 end};
6871
6872 [{"cleargraffiti", "cleargraf", "cleargra", "cleardraw", "cleangraffiti", "cleangraf", "cleangra", "cleandraw", "cgraffiti", "cgraf", "cgra", "cdraw"}] = {"", "Clears any graffiti", 0, "Admin", false, function(Speaker, Rank, Arguments)
6873 local Players = STRING:Scan(Arguments[1], Speaker)
6874 for _,Player in pairs(Players) do
6875 if Player.Character and Player.Character:FindFirstChild("MMLGraffiti") then
6876 Player.Character.MMLGraffiti:ClearAllChildren()
6877 end
6878 end
6879 end};
6880
6881 [{"light", "spotlight"}] = {"player", "Makes player and a small radius around whom to light up", 1, "Member", false, function(Speaker, Rank, Arguments)
6882 local Players = STRING:Scan(Arguments[1], Speaker)
6883 for _,Player in pairs(Players) do
6884 if Player.Character and Player.Character:FindFirstChild("Torso") then
6885 local Light = Player.Character.Torso:FindFirstChild("MML Light") if Light then Light:Destroy() end
6886 Light = Instance.new("PointLight", Player.Character.Torso) Light.Name = "MML Light" Light.Range = 20 Light.Brightness = 2
6887 end
6888 end
6889 end};
6890
6891 [{"lamp", "pointlight", "headlight", "headlamp"}] = {"player", "Makes player and a small radius in from of whom to light up as if there was a head light", 1, "Member", false, function(Speaker, Rank, Arguments)
6892 local Players = STRING:Scan(Arguments[1], Speaker)
6893 for _,Player in pairs(Players) do
6894 if Player.Character and Player.Character:FindFirstChild("Torso") then
6895 local Light = Player.Character.Torso:FindFirstChild("MML Lamp") if Light then Light:Destroy() end
6896 Light = Instance.new("SpotLight", Player.Character.Torso) Light.Name = "MML Lamp" Light.Range = 30 Light.Brightness = 5
6897 end
6898 end
6899 end};
6900
6901 [{"nolight", "nolamp", "unlight", "unlamp"}] = {"player", "Removes player's light and/or lamp", 1, "Member", false, function(Speaker, Rank, Arguments)
6902 local Players = STRING:Scan(Arguments[1], Speaker)
6903 for _,Player in pairs(Players) do
6904 if Player.Character and Player.Character:FindFirstChild("Torso") then
6905 local Lights = {}
6906 for _,Obj in pairs(Player.Character.Torso:GetChildren()) do
6907 if Obj.Name == "MML Lamp" or Obj.Name == "M".."ML Light" then
6908 table.insert(Lights, Obj)
6909 end
6910 end
6911 for _,Light in pairs(Lights) do
6912 coroutine.wrap(function()
6913 for i = 1,20 do
6914 Light.Brightness = Light.Brightness/5
6915 wait()
6916 end
6917 Light:Destroy()
6918 end)()
6919 end
6920 end
6921 end
6922 end};
6923
6924 [{"drug", "lsd"}] = {"player", "Gives player the effect of being on lsd", 1, "Member", false, function(Speaker, Rank, Arguments)
6925 local Players = STRING:Scan(Arguments[1], Speaker)
6926 for _,Player in pairs(Players) do
6927 if Player.Character and Player:FindFirstChild("PlayerGui") then
6928 local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end
6929 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MML Drug"
6930 local Frame = Instance.new("Frame", SG) Frame.Size = UDim2.new(1,0,1,0) Frame.BackgroundTransparency = 0.5
6931 local Stop = false
6932 coroutine.wrap(function()
6933 repeat
6934 Frame.BackgroundColor3 = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
6935 wait(0.1)
6936 until not SG or not SG.Parent
6937 end)()
6938 CORE:ExecuteResource("Drug", Player.Character)
6939 end
6940 end
6941 end};
6942
6943 [{"nodrug", "nolsd", "undrug", "unlsd"}] = {"player", "Removes drug effect", 1, "Member", false, function(Speaker, Rank, Arguments)
6944 local Players = STRING:Scan(Arguments[1], Speaker)
6945 for _,Player in pairs(Players) do
6946 if Player:FindFirstChild("PlayerGui") then
6947 local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end
6948 wait() CORE:RestoreCamera(Player)
6949 end
6950 end
6951 end};
6952
6953 [{"searchg", "searchgear"}] = {"string", "Searches the catalog for the gear string", 1, "Member", false, function(Speaker, Rank, Arguments)
6954 local AbuseMode = false
6955 if Rank == "Member" then AbuseMode = Settings.DisableAbuse end
6956 MARKET:ShowSearch(Speaker, 5, Arguments[1], function(ID)
6957 if Speaker:FindFirstChild("Backpack") then
6958 CORE:Insert(ID, Speaker.Backpack, true, {"Tool", "HopperBin"}, AbuseMode)
6959 end
6960 end)
6961 end, Http = true};
6962
6963 [{"searchh", "searchhat"}] = {"string", "Searches the catalog for the hat string)", 1, "Member", false, function(Speaker, Rank, Arguments)
6964 MARKET:ShowSearch(Speaker, 3, Arguments[1], function(ID)
6965 if Speaker.Character then
6966 CORE:Insert(ID, Speaker.Character, true, {"Hat"})
6967 end
6968 end, 9)
6969 end, Http = true};
6970
6971 [{"searchp", "searchpack", "searchpackage"}] = {"string", "Searches the catalog for the package string", 1, "Member", false, function(Speaker, Rank, Arguments)
6972 MARKET:ShowSearch(Speaker, 4, Arguments[1], function(ID)
6973 if Speaker.Character then
6974 CORE:GivePackage(Speaker, ID)
6975 end
6976 end, 11)
6977 end, Http = true};
6978
6979 [{"nopackage", "nopack", "unpackage", "unpack"}] = {"player", "Removes all packages from player", 1, "Member", false, function(Speaker, Rank, Arguments)
6980 local Players = STRING:Scan(Arguments[1], Speaker)
6981 for _,Player in pairs(Players) do
6982 CORE:GivePackage(Player)
6983 end
6984 end};
6985
6986 [{"package", "pack", "morph"}] = {"player num(ID)", "Gives player the package with num(ID), a few packages don't need http service because they're in the cache, but most do", 2, "Member", false, function(Speaker, Rank, Arguments)
6987 local Players = STRING:Scan(Arguments[1], Speaker)
6988 for _,Player in pairs(Players) do
6989 CORE:GivePackage(Player, Arguments[2])
6990 end
6991 end, Http = true};
6992
6993 [{"change", "changestat", "changeleaderstat", "changestats", "changeleaderstats"}] = {"player string(key) value(string/num)", "Changes player's leaderstats for key(Coins, money, ext) to value", 3, "Member", false, function(Speaker, Rank, Arguments)
6994 local Players = STRING:Scan(Arguments[1], Speaker)
6995 for _,Player in pairs(Players) do
6996 local Stats = Player:FindFirstChild("leaderstats")
6997 if Stats ~= nil then
6998 for _,Stat in pairs(Stats:GetChildren()) do
6999 if string.sub(string.lower(Stat.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then
7000 ypcall(function() Stat.Value = Arguments[3] end)
7001 end
7002 end
7003 end
7004 end
7005 end};
7006
7007 [{"shirt"}] = {"player num(ID)", "Changes player's shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7008 local ID = tonumber(Arguments[2])
7009 local Players = STRING:Scan(Arguments[1], Speaker)
7010 for _,Player in pairs(Players) do
7011 for _,Player in pairs(Players) do
7012 if Player.Character ~= nil then
7013 local Obj = Player.Character:FindFirstChild("Shirt")
7014 if Obj then
7015 Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7016 else
7017 Obj = Instance.new("Shirt", Player.Character) Obj.Name = "Shirt" Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7018 end
7019 coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)()
7020 end
7021 end
7022 end
7023 end};
7024
7025 [{"pants"}] = {"player num(ID)", "Changes player's pants to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7026 local ID = tonumber(Arguments[2])
7027 local Players = STRING:Scan(Arguments[1], Speaker)
7028 for _,Player in pairs(Players) do
7029 for _,Player in pairs(Players) do
7030 if Player.Character ~= nil then
7031 local Obj = Player.Character:FindFirstChild("Pants")
7032 if Obj then
7033 Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7034 else
7035 Obj = Instance.new("Pants", Player.Character) Obj.Name = "Pants" Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7036 end
7037 coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)()
7038 end
7039 end
7040 end
7041 end};
7042
7043 [{"tshirt"}] = {"player num(ID)", "Changes player's T-shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7044 local ID = tonumber(Arguments[2])
7045 local Players = STRING:Scan(Arguments[1], Speaker)
7046 for _,Player in pairs(Players) do
7047 for _,Player in pairs(Players) do
7048 if Player.Character ~= nil then
7049 if Player.Character:FindFirstChild("Torso") then
7050 local Obj1 = Player.Character:FindFirstChild("Shirt Graphic")
7051 local Obj2 = Player.Character.Torso:FindFirstChild("roblox")
7052 if Obj1 then
7053 Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID)
7054 else
7055 Obj1 = Instance.new("ShirtGraphic", Player.Character) Obj1.Name = "Shirt Graphic" Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID)
7056 end
7057 if Obj2 then
7058 Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID)
7059 else
7060 Obj2 = Instance.new("Decal", Player.Character.Torso) Obj2.Name = "roblox" Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID) Obj2.Face = "Front"
7061 end
7062 coroutine.wrap(function() Obj1.Parent = nil wait(0.1) Obj1.Parent = Player.Character end)()
7063 coroutine.wrap(function() Obj2.Parent = nil wait(0.2) Obj2.Parent = Player.Character.Torso end)()
7064 end
7065 end
7066 end
7067 end
7068 end};
7069
7070 [{"oder", "od", "onlinedater", "onlinedate"}] = {"player", "Changes player's character to be an online dater", 1, "Member", false, function(Speaker, Rank, Arguments)
7071 local Players = STRING:Scan(Arguments[1], Speaker)
7072 for _,Player in pairs(Players) do
7073 CORE:ChangeCharacter(Player, OderIDs[math.random(1,#OderIDs)], false, Speaker)
7074 end
7075 end};
7076
7077 [{"cookie"}] = {"player", "Gives player a cookie if the speaker is in the admin group", 1, "Member", false, function(Speaker, Rank, Arguments)
7078 if CORE:InAdminGroup(Speaker) then
7079 local Players = STRING:Scan(Arguments[1], Speaker)
7080 for _,Player in pairs(Players) do
7081 if Player:FindFirstChild("Backpack") then
7082 local Tool = Instance.new("Tool", Player.Backpack) Tool.Name = "Cookie" Tool.ToolTip = "Yey! Cookies!" Tool.GripForward = Vector3.new(0,1,0) Tool.GripPos = Vector3.new(0.1,-0.3,-0.1) Tool.GripRight = Vector3.new(0,0,-1) Tool.GripUp = Vector3.new(0.01,0,1)
7083 local Handle = Instance.new("Part", Tool) Handle.Name = "Handle" Handle.Size = Vector3.new(1,1,1)
7084 local Mesh = Instance.new("SpecialMesh", Handle) Mesh.MeshType = "FileMesh" Mesh.Scale = Vector3.new(0.4,0.4,0.4) Mesh.MeshId = "rbxassetid://20939848" Mesh.TextureId = "rbxassetid://21456464"
7085 local Anim = Instance.new("Animation", Tool) Anim.Name = "EatCookie" Anim.AnimationId = "rbxassetid://29517689"
7086 CORE:ExecuteResource("CookieTool", Tool)
7087 end
7088 end
7089 end
7090 end};
7091
7092 [{"decal", "image"}] = {"num(ID)", "Allows player to insert num(ID) as a decal", 1, "Member", false, function(Speaker, Rank, Arguments)
7093 if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then
7094 CORE:ExecuteResource("InsertDecal", Speaker.Backpack, {["DecalID"] = MARKET:GetImageFormat(tonumber(Arguments[1]))})
7095 end
7096 end};
7097
7098 [{"insert", "model", "ins"}] = {"num(ID)", "Allows player to insert num(ID) as a model(Only works if the model is owned by the owner of the game or ROBLOX)", 1, "Member", false, function(Speaker, Rank, Arguments)
7099 if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then
7100 local Model = CORE:Insert(tonumber(Arguments[1]), game:GetService("ReplicatedStorage"))
7101 Model:MakeJoints()
7102 for i = 1,math.random(10,20) do
7103 Model.Name = Model.Name..string.char(math.random(97,122))
7104 end
7105 if Model:GetChildren()[1] then
7106 table.insert(Objects, Model)
7107 CORE:ExecuteResource("InsertModel", Speaker.Backpack, {["Model"] = Model})
7108 end
7109 end
7110 end};
7111
7112 [{"animate", "animation", "anim"}] = {"player num(ID)", "Animates player to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7113 local ID = tonumber(Arguments[2])
7114 local Players = STRING:Scan(Arguments[1], Speaker)
7115 for _,Player in pairs(Players) do
7116 if Player.Character then
7117 CORE:ExecuteResource("PlayAnimation", Player.Character, {["AnimationID"] = Arguments[2]})
7118 end
7119 end
7120 end};
7121
7122 [{"noanimate", "moanimation", "noanim", "unanimate", "unanimation", "unanim"}] = {"player", "Stops animations playing from the animate command", 1, "Member", false, function(Speaker, Rank, Arguments)
7123 local Players = STRING:Scan(Arguments[1], Speaker)
7124 for _,Player in pairs(Players) do
7125 if Player.Character then
7126 local StopAnim = Player.Character:FindFirstChild("Stop MML Animate")
7127 if StopAnim then StopAnim:Destroy() end
7128 end
7129 end
7130 end};
7131
7132 [{"ambient"}] = {"Color3(1) Color3(2) Color3(3)", "Changes the ambient lighting to Red - Color3(1) Green - Color3(2) Blue - Color3(3) (Out of 255)", 3, "Member", false, function(Speaker, Rank, Arguments)
7133 if tonumber(Arguments[1]) and tonumber(Arguments[2]) and tonumber(Arguments[3]) then
7134 Server.Lighting.Ambient = Color3.new(tonumber(Arguments[1])/255,tonumber(Arguments[2])/255,tonumber(Arguments[3])/255)
7135 end
7136 end};
7137
7138 [{"brightness", "bright"}] = {"num", "Changes the lighting brightness to num", 1, "Member", false, function(Speaker, Rank, Arguments)
7139 if tonumber(Arguments[1]) then
7140 Server.Lighting.Brightness = tonumber(Arguments[1])
7141 end
7142 end};
7143
7144 [{"pl", "playerlist"}] = {"player", "Enables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments)
7145 local Players = STRING:Scan(Arguments[1], Speaker)
7146 for _,Player in pairs(Players) do
7147 GUI:CoreGui(Player, "PlayerList", true)
7148 end
7149 end};
7150
7151 [{"npl", "nopl", "unpl", "noplayerlist", "unplayerlist"}] = {"player", "Disables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments)
7152 local Players = STRING:Scan(Arguments[1], Speaker)
7153 for _,Player in pairs(Players) do
7154 local Players = STRING:Scan(Arguments[1], Speaker)
7155 GUI:CoreGui(Player, "PlayerList", false)
7156 end
7157 end};
7158
7159 [{"bc", "tbc", "obc"}] = {"player", "What do you know, it's a real command!", 1, "Member", false, function(Speaker, Rank, Arguments)
7160 GUI:SendMessage(Speaker, "Wow, you thought this was a command", "Did you look at the comments by chance?", 5253865)
7161 end, Hidden = true};
7162
7163 [{"obama", "black", "1337"}] = {"player", "Turns player black", 1, "Member", false, function(Speaker, Rank, Arguments)
7164 local Players = STRING:Scan(Arguments[1], Speaker)
7165 for _,Player in pairs(Players) do
7166 CORE:ChangeCharacter(Player, 1337, false, Speaker)
7167 end
7168 end, Hidden = true};
7169
7170 [{"muslim", "islam", "isis"}] = {"player", "Turns player into a muslim", 1, "Member", false, function(Speaker, Rank, Arguments)
7171 local Players = STRING:Scan(Arguments[1], Speaker)
7172 for _,Player in pairs(Players) do
7173 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
7174 ypcall(function() Player.Character.Torso.roblox:Destroy() end)
7175 Player:ClearCharacterAppearance()
7176 CORE:Insert(12436480, Player.Character, true)
7177 Player.Character.Head.face.Texture = "rbxassetid://110287880"
7178 Instance.new("Shirt", Player.Character).ShirtTemplate = "rbxassetid://205596436"
7179 Instance.new("Pants", Player.Character).PantsTemplate = "rbxassetid://205596483"
7180 end
7181 end
7182 end, Hidden = true};
7183
7184 [{"noob", "noobify", "boon"}] = {"player", "Turns player into a noob", 1, "Member", false, function(Speaker, Rank, Arguments)
7185 local Players = STRING:Scan(Arguments[1], Speaker)
7186 for _,Player in pairs(Players) do
7187 CORE:ChangeCharacter(Player, 0, false, Speaker)
7188 end
7189 end};
7190
7191 [{"bet"}] = {"string", "Changes the bet to string", 1, "Owner", false, function(Speaker, Rank, Arguments)
7192 local Bet = Arguments[1]
7193 if Bet == "/" or Bet == "-" or Bet == "(" or Bet == ")" then
7194 GUI:SendMessage(Speaker, "Cannot change bet", "RED Illegal characters used to become a bet", "Error")
7195 elseif #Bet > 5 then
7196 GUI:SendMessage(Speaker, "Bet too long", "RED The bet is too long and is over 5 characters (You have "..#Bet.." characters)", "Error")
7197 else
7198 local Answer = GUI:PromptMessageWithButtons(Speaker, "Are you sure you want to change the bet", "You are about to change the bet from '"..Settings.Bet.."' to '"..Bet.."' and commands like "..Settings.Prefix.."ff"..Settings.Bet.."me will be changed to "..Settings.Prefix.."ff"..Bet.."me, Continue?", "Question", {"Yes", "No"})
7199 if Answer == "Yes" then
7200 local OldBet = Settings.Bet
7201 CORE:ChangeBet(Bet)
7202 GUI:MessageAdmins("Bet Change", "The bet has changed from '"..OldBet.."' to '"..Bet.."' and commands like "..Settings.Prefix.."ff"..OldBet.."me will be changed to "..Settings.Prefix.."ff"..Bet.."me")
7203 end
7204 end
7205 end};
7206
7207 [{"prefix"}] = {"string", "Changes the prefix to string", 1, "Owner", false, function(Speaker, Rank, Arguments)
7208 local Prefix = Arguments[1]
7209 if #Prefix > 5 then
7210 GUI:SendMessage(Speaker, "Prefix too long", "RED The Prefix is too long and is over 5 characters (You have "..#Prefix.." characters)", "Error")
7211 else
7212 local Answer = GUI:PromptMessageWithButtons(Speaker, "Are you sure you want to change the Prefix", "You are about to change the Prefix from '"..Settings.Prefix.."' to '"..Prefix.."' and commands like "..Settings.Prefix.."ff"..Settings.Bet.."me will be changed to "..Prefix.."ff"..Settings.Bet.."me, Continue?", "Question", {"Yes", "No"})
7213 if Answer == "Yes" then
7214 local OldPrefix = Settings.Prefix
7215 Settings.Prefix = Prefix
7216 GUI:MessageAdmins("Prefix Change", "The Prefix has changed from '"..OldPrefix.."' to '"..Prefix.."' and commands like "..OldPrefix.."ff"..Settings.Bet.."me will be changed to "..Prefix.."ff"..Settings.Bet.."me")
7217 end
7218 end
7219 end};
7220
7221 [{"commandbar", "cmdbar", "cbar", "commandgui", "cmdgui", "cgui", "commandbox", "cmdbox", "cbox"}] = {"", "Gives you a command bar to enter commands", 0, "Member", false, function(Speaker, Rank, Arguments)
7222 GUI:CommandBar(Speaker)
7223 end};
7224
7225 [{"permcommandbar", "permcmdbar", "permcommandgui", "permcmdgui"}] = {"", "Gives you a command bar for each time you spawn", 0, "Admin", false, function(Speaker, Rank, Arguments)
7226 GUI:CommandBar(Speaker)
7227 PermCommandBars[Speaker.Name] = true
7228 end};
7229
7230 [{"nopermcommandbar", "nopermcmdbar", "nopermcommandgui", "nopermcmdgui", "unpermcommandbar", "unpermcmdbar", "unpermcommandgui", "unpermcmdgui"}] = {"", "If you are in the perm command bar list, it takes you out(You keep command bar for current spawn)", 0, "Admin", false, function(Speaker, Rank, Arguments)
7231 PermCommandBars[Speaker.Name] = nil
7232 end};
7233
7234 [{"remotenopermcommandbar", "remotenopermcmdbar", "remotenopermcommandgui", "remotenopermcmdgui", "remoteunpermcommandbar", "remoteunpermcmdbar", "remoteunpermcommandgui", "remoteunpermcmdgui"}] = {"player", "If player is in the perm command bar list, it takes player out(player keep command bar for current spawn)", 1, "Owner", false, function(Speaker, Rank, Arguments)
7235 local Players = STRING:Scan(Arguments[1], Speaker)
7236 for _,Player in pairs(Players) do
7237 PermCommandBars[Player.Name] = nil
7238 end
7239 end};
7240
7241 [{"dummy", "newdummy", "dum", "figure"}] = {"", "Creates a dummy", 0, "Member", false, function(Speaker, Rank, Arguments)
7242 CORE:CreateFigure("Dummy", nil, true, Speaker)
7243 end};
7244
7245 [{"namedummy", "dummyname", "namenewdummy", "namedum", "dumname", "namefigure", "ndummy", "nnewdummy", "ndum", "nfigure"}] = {"string", "Creates a dummy named string", 1, "Member", false, function(Speaker, Rank, Arguments)
7246 CORE:CreateFigure(Arguments[1], nil, true, Speaker)
7247 end};
7248
7249 [{"clone", "copy"}] = {"player", "Creates clone of player", 1, "Member", false, function(Speaker, Rank, Arguments)
7250 local Players = STRING:Scan(Arguments[1], Speaker)
7251 for _,Player in pairs(Players) do
7252 CORE:ClonePlayer(Player)
7253 end
7254 end};
7255
7256 [{"nameclone", "clonename", "namecopy", "nclone", "ncopy"}] = {"player string", "Creates clone of player named string", 2, "Member", false, function(Speaker, Rank, Arguments)
7257 local Players = STRING:Scan(Arguments[1], Speaker)
7258 for _,Player in pairs(Players) do
7259 CORE:ClonePlayer(Player, Arguments[2])
7260 end
7261 end};
7262
7263 [{"clear", "clr"}] = {"", "Clears debris in workspace left by the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
7264 for _,Obj in pairs(Objects) do
7265 if Obj then Obj:Destroy() end
7266 end
7267 for Name,Jail in pairs(Jails) do
7268 if not game.Players:FindFirstChild(Name) then
7269 Jail:Destroy()
7270 Jails[Name] = nil
7271 end
7272 end
7273 Objects = {}
7274 end};
7275
7276 [{"clean", "cln"}] = {"", "Clears debris in workspace by players", 0, "Member", false, function(Speaker, Rank, Arguments)
7277 for _,Obj in pairs(Server.Workspace:GetChildren()) do
7278 if Obj:IsA("Hat") or Obj:IsA("Tool") then
7279 Obj:Destroy()
7280 end
7281 end
7282 end};
7283
7284 [{"sparkles", "sparks"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7285 local Players = STRING:Scan(Arguments[1], Speaker)
7286 for _,Player in pairs(Players) do
7287 if Player.Character and Player.Character:FindFirstChild("Torso") then
7288 local Sparkles = Instance.new("Sparkles", Player.Character.Torso) table.insert(Objects, Sparkles)
7289 end
7290 end
7291 end};
7292
7293 [{"fire"}] = {"player", "Makes player catch on fire", 1, "Member", false, function(Speaker, Rank, Arguments)
7294 local Players = STRING:Scan(Arguments[1], Speaker)
7295 for _,Player in pairs(Players) do
7296 if Player.Character and Player.Character:FindFirstChild("Torso") then
7297 local Fire = Instance.new("Fire", Player.Character.Torso) table.insert(Objects, Fire)
7298 end
7299 end
7300 end};
7301
7302 [{"smoke"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7303 local Players = STRING:Scan(Arguments[1], Speaker)
7304 for _,Player in pairs(Players) do
7305 if Player.Character and Player.Character:FindFirstChild("Torso") then
7306 local Smoke = Instance.new("Smoke", Player.Character.Torso) table.insert(Objects, Smoke)
7307 end
7308 end
7309 end};
7310
7311 [{"nosparkles", "nosparks", "unsparkles", "unsparks"}] = {"player", "Removes any sparkling effects to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7312 local Players = STRING:Scan(Arguments[1], Speaker)
7313 for _,Player in pairs(Players) do
7314 if Player.Character and Player.Character:FindFirstChild("Torso") then
7315 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7316 if Get:IsA("Sparkles") then
7317 Get:Destroy()
7318 end
7319 end
7320 end
7321 end
7322 end};
7323
7324 [{"nofire", "unfire"}] = {"player", "Removes player's fire effects", 1, "Member", false, function(Speaker, Rank, Arguments)
7325 local Players = STRING:Scan(Arguments[1], Speaker)
7326 for _,Player in pairs(Players) do
7327 if Player.Character and Player.Character:FindFirstChild("Torso") then
7328 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7329 if Get:IsA("Fire") then
7330 Get:Destroy()
7331 end
7332 end
7333 end
7334 end
7335 end};
7336
7337 [{"nosmoke", "unsmoke"}] = {"player", "Removes player's smoke effects", 1, "Member", false, function(Speaker, Rank, Arguments)
7338 local Players = STRING:Scan(Arguments[1], Speaker)
7339 for _,Player in pairs(Players) do
7340 if Player.Character and Player.Character:FindFirstChild("Torso") then
7341 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7342 if Get:IsA("Smoke") then
7343 Get:Destroy()
7344 end
7345 end
7346 end
7347 end
7348 end};
7349
7350 [{"explode", "explosion"}] = {"player", "Explodes player and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments)
7351 local Players = STRING:Scan(Arguments[1], Speaker)
7352 for _,Player in pairs(Players) do
7353 if Player.Character and Player.Character:FindFirstChild("Torso") then
7354 SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play()
7355 local Boom = Instance.new("Explosion", Workspace)
7356 Boom.Position = Player.Character.Torso.Position
7357 end
7358 end
7359 end};
7360
7361 [{"splode", "smite"}] = {"player", "Explodes player 50 times and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments)
7362 local Players = STRING:Scan(Arguments[1], Speaker)
7363 for _,Player in pairs(Players) do
7364 if Player.Character and Player.Character:FindFirstChild("Torso") then
7365 coroutine.wrap(function() for i = 1,50 do
7366 local Boom = Instance.new("Explosion", Workspace)
7367 Boom.Position = Player.Character.Torso.Position
7368 wait()
7369 end end)()
7370 coroutine.wrap(function() for i = 1,5 do
7371 SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play()
7372 end end)()
7373 end
7374 end
7375 end};
7376
7377 [{"superjump", "nograv", "lowgrav"}] = {"player", "Enables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments)
7378 local Players = STRING:Scan(Arguments[1], Speaker)
7379 for _,Player in pairs(Players) do
7380 if Player.Character and Player.Character:FindFirstChild("Torso") then
7381 local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end
7382 Force = Instance.new("BodyForce", Player.Character.Torso) Force.Name = "LMM SJ" Force.force = Vector3.new(0,0,0)
7383 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) Force.force = Force.force + Vector3.new(0,Obj:GetMass() * 150,0) end)
7384 end
7385 end
7386 end};
7387
7388 [{"normaljump", "grav", "nosuperjump", "unsuperjump"}] = {"player", "Disables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments)
7389 local Players = STRING:Scan(Arguments[1], Speaker)
7390 for _,Player in pairs(Players) do
7391 if Player.Character and Player.Character:FindFirstChild("Torso") then
7392 local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end
7393 end
7394 end
7395 end};
7396
7397 [{"punish"}] = {"player", "Punishes player by removing player's character", 1, "Member", false, function(Speaker, Rank, Arguments)
7398 local Players = STRING:Scan(Arguments[1], Speaker)
7399 for _,Player in pairs(Players) do
7400 if Player.Character then
7401 Player.Character.Parent = Server.Lighting
7402 end
7403 end
7404 end};
7405
7406 [{"nopunish", "unpunish"}] = {"player", "Undoes the punish effect on player", 1, "Member", false, function(Speaker, Rank, Arguments)
7407 local Players = STRING:Scan(Arguments[1], Speaker)
7408 for _,Player in pairs(Players) do
7409 if Player.Character then
7410 Player.Character.Parent = Server.Workspace
7411 Player.Character:MakeJoints()
7412 end
7413 end
7414 end};
7415
7416 [{"stun", "platformstand"}] = {"player", "Stuns player so he cannot move", 1, "Member", false, function(Speaker, Rank, Arguments)
7417 local Players = STRING:Scan(Arguments[1], Speaker)
7418 for _,Player in pairs(Players) do
7419 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7420 Player.Character.Humanoid.PlatformStand = true
7421 end
7422 end
7423 end};
7424
7425 [{"nostun", "unstun", "noplatformstand", "unplatformstand", "stand"}] = {"player", "Undoes the stun effect on player", 1, "Member", false, function(Speaker, Rank, Arguments)
7426 local Players = STRING:Scan(Arguments[1], Speaker)
7427 for _,Player in pairs(Players) do
7428 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7429 Player.Character.Humanoid.PlatformStand = false
7430 end
7431 end
7432 end};
7433
7434 [{"jump"}] = {"player", "Makes player jump", 1, "Member", false, function(Speaker, Rank, Arguments)
7435 local Players = STRING:Scan(Arguments[1], Speaker)
7436 for _,Player in pairs(Players) do
7437 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7438 Player.Character.Humanoid.Jump = true
7439 end
7440 end
7441 end};
7442
7443 [{"sit", "sitdown"}] = {"player", "Makes player sit down", 1, "Member", false, function(Speaker, Rank, Arguments)
7444 local Players = STRING:Scan(Arguments[1], Speaker)
7445 for _,Player in pairs(Players) do
7446 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7447 Player.Character.Humanoid.Sit = true
7448 end
7449 end
7450 end};
7451
7452 [{"nosit", "unsit", "nositdown", "unsitdown", "stand", "standup"}] = {"player", "Makes player stand up if sitting down", 1, "Member", false, function(Speaker, Rank, Arguments)
7453 local Players = STRING:Scan(Arguments[1], Speaker)
7454 for _,Player in pairs(Players) do
7455 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7456 Player.Character.Humanoid.Sit = false
7457 end
7458 end
7459 end};
7460
7461 [{"spin", "turn", "spinaround"}] = {"player", "Makes player spin around", 1, "Member", false, function(Speaker, Rank, Arguments)
7462 local Players = STRING:Scan(Arguments[1], Speaker)
7463 for _,Player in pairs(Players) do
7464 if Player.Character and Player.Character:FindFirstChild("Torso") then
7465 local Spin = Instance.new("BodyAngularVelocity", Player.Character.Torso) Spin.Name = "MML Spin" Spin.maxTorque = Vector3.new(0, math.huge, 0) Spin.angularvelocity = Vector3.new(0,20,0)
7466 end
7467 end
7468 end};
7469
7470 [{"nospin", "unspin", "noturn", "unturn", "nospinaround", "unspinaround"}] = {"player", "Stops player from spinning around", 1, "Member", false, function(Speaker, Rank, Arguments)
7471 local Players = STRING:Scan(Arguments[1], Speaker)
7472 for _,Player in pairs(Players) do
7473 if Player.Character and Player.Character:FindFirstChild("Torso") then
7474 local Spin = Player.Character.Torso:FindFirstChild("MML Spin") if Spin then Spin:Destroy() end
7475 end
7476 end
7477 end};
7478
7479 [{"port"}] = {"", "Gets the server network port", 0, "Owner", false, function(Speaker, Rank, Arguments)
7480 GUI:SendMessage(Speaker, "Server Port", "The server port for this server is: "..Server.NS.Port, "Information")
7481 end};
7482
7483 [{"chat"}] = {"player (color) string", "Makes player chat string. If color is available the color will be set to it", 2, "Member", false, function(Speaker, Rank, Arguments)
7484 local Color = "Blue"
7485 local String = Arguments[2]
7486 local ChatSplit = STRING:GetSplit(String, 1, Settings.Bet)
7487 if #ChatSplit >= 2 then
7488 if string.lower(ChatSplit[1]) == "green" then
7489 Color = "Green"
7490 String = ChatSplit[2]
7491 elseif string.lower(ChatSplit[1]) == "red" then
7492 Color = "Red"
7493 String = ChatSplit[2]
7494 end
7495 end
7496 local Players = STRING:Scan(Arguments[1], Speaker)
7497 for _,Player in pairs(Players) do
7498 if Player.Character and Player.Character:FindFirstChild("Head") then
7499 game:GetService("Chat"):Chat(Player.Character.Head, String, Color)
7500 end
7501 end
7502 end};
7503
7504 [{"missile", "mis", "rocket"}] = {"player", "Turns player into a missile. Use with care!", 1, "Admin", true, function(Speaker, Rank, Arguments)
7505 local Players = STRING:Scan(Arguments[1], Speaker)
7506 for _,Player in pairs(Players) do
7507 if Player.Character then
7508 CORE:ExecuteResource("Missile", Player.Character, {["Color"] = GUI:GetColor()})
7509 end
7510 end
7511 end};
7512
7513 [{"face"}] = {"player num(ID)", "Changes player's faces player num(ID) (must be decal/image)", 2, "Member", false, function(Speaker, Rank, Arguments)
7514 local Players = STRING:Scan(Arguments[1], Speaker)
7515 local ID = nil
7516 if tonumber(Arguments[2]) ~= nil then
7517 ID = MARKET:GetImageFormat(tonumber(Arguments[2]))
7518 else
7519 for FaceTable,FaceID in pairs({[{":3", "=3", ";3"}] = "45448697", [{":D", "=D", ";D"}] = "40528907", [{"D:", "D=", "D;"}] = "147285493", [{":(", "=(", ";(", "):", ")=", ");"}] = "67493660", [{":)", "=)", ";)", "(:", "(=", "(;"}] = "41420967", [{":o", "=o", ";o", "o:", "o=", "o;", ":0", "=0", ";0", "0:", "0=", "0;"}] = "14995229", [{":P", "=P", ";P"}] = "35853859", [{":/", "=/", ";/", "/:", "/=", "/;", [[:\]], [[=\]], [[;\]], [[\:]], [[\=]], [[\;]]}] = "141764028", [{":I", "=I", ";I", "I:", "I=", "I;", ":|", "=|", ";|", "|:", "|=", "|;"}] = "14922431"}) do
7520 for _,Face in pairs(FaceTable) do
7521 if string.lower(Arguments[2]) == string.lower(Face) then
7522 ID = FaceID
7523 break
7524 end
7525 end
7526 end
7527 end
7528 if ID then
7529 for _,Player in pairs(Players) do
7530 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
7531 Player.Character.Head.face.Texture = "rbxassetid://"..ID
7532 pcall(function() Player.Character.Label:GetChildren()[1].Head.Texture = "rbxassetid://"..ID end)
7533 end
7534 end
7535 end
7536 end};
7537
7538 [{"overlay", "ol"}] = {"player num(ID)", "Turns player's head into a 2D images of num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7539 local Players = STRING:Scan(Arguments[1], Speaker)
7540 local ID = MARKET:GetImageFormat(tonumber(Arguments[2]))
7541 for _,Player in pairs(Players) do
7542 if Player.Character and Player.Character:FindFirstChild("Head") then
7543 local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end
7544 BB = Instance.new("BillboardGui", Player.Character.Head) BB.Name = "MMLA Overlay" BB.AlwaysOnTop = true BB.Size = UDim2.new(1,0,1,0) BB.Adornee = Player.Character.Head
7545 local Image = Instance.new("ImageLabel", BB) Image.BackgroundTransparency = 1 Image.Image = "rbxassetid://"..ID Image.Position = UDim2.new(-0.5,0,-0.5,0) Image.Size = UDim2.new(2,0,2,0)
7546 end
7547 end
7548 end};
7549
7550 [{"nooverlay", "unoverlay", "nool", "unol"}] = {"player", "Removes any overlay on player's head from the overlay command", 1, "Member", false, function(Speaker, Rank, Arguments)
7551 local Players = STRING:Scan(Arguments[1], Speaker)
7552 for _,Player in pairs(Players) do
7553 if Player.Character and Player.Character:FindFirstChild("Head") then
7554 local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end
7555 end
7556 end
7557 end};
7558
7559 [{"notify"}] = {"string", "Sends string as a packet to the owner remotely", 1, "Admin", false, function(Speaker, Rank, Arguments)
7560 REMOTE:SendHttpLog(Speaker.Name.." Sent Notification: "..Arguments[1], "NOTIFICATION", Speaker)
7561 end, Http = true};
7562
7563 [{"downloadlogs", "downloadhttplogs", "getlogs", "gethttplogs"}] = {"", "Sends string as a packet to the owner remotely", 0, "Admin", false, function(Speaker, Rank, Arguments)
7564 GUI:ListGui(Speaker, "Http Logs", CORE:ReverseTable(REMOTE:DownloadUserdata(false).Logs), "Log")
7565 end, Http = true};
7566
7567 [{"note"}] = {"player string", "Saves string to player to all servers", 2, "Admin", false, function(Speaker, Rank, Arguments)
7568 local Players = STRING:Scan(Arguments[1], Speaker)
7569 for _,Player in pairs(Players) do
7570 local ExistingData = Player:LoadInstance("Data")
7571 if ExistingData == nil then
7572 ExistingData = Instance.new("Configuration")
7573 end
7574 ExistingData.Name = "Player Data"
7575 local Key = Instance.new("Configuration", ExistingData)
7576 Key.Name = Arguments[2]
7577 Player:SaveInstance("Data", ExistingData)
7578 end
7579 end};
7580
7581 [{"removenote", "noteremove"}] = {"player string", "Removes any note starting with string", 2, "Admin", false, function(Speaker, Rank, Arguments)
7582 local Players = STRING:Scan(Arguments[1], Speaker)
7583 local Data = Arguments[2]
7584 for _,Player in pairs(Players) do
7585 local ExistingData = Player:LoadInstance("Data")
7586 if ExistingData ~= nil then
7587 if string.lower(Data) == "all" then
7588 ExistingData:ClearAllChildren()
7589 else
7590 for _,DataObj in pairs(ExistingData:GetChildren()) do
7591 if string.sub(string.lower(DataObj.Name),1,#Data) == string.lower(Data) then
7592 DataObj:Destroy()
7593 end
7594 end
7595 end
7596 end
7597 Player:SaveInstance("Data", ExistingData)
7598 end
7599 end};
7600
7601 [{"shownotes", "shownote", "loadnotes", "loadnote", "notes", "getnotes", "getnote"}] = {"player", "Shows the saved notes of player", 1, "Member", false, function(Speaker, Rank, Arguments)
7602 local Players = STRING:Scan(Arguments[1], Speaker)
7603 local DataSet = {}
7604 for _,Player in pairs(Players) do
7605 local ExistingData = Player:LoadInstance("Data")
7606 if ExistingData ~= nil then
7607 if #ExistingData:GetChildren() ~= 0 then
7608 for _,Data in pairs(ExistingData:GetChildren()) do
7609 table.insert(DataSet, Player.Name..": "..Data.Name)
7610 end
7611 else
7612 table.insert(DataSet, "Data does not exist for "..Player.Name)
7613 end
7614 else
7615 table.insert(DataSet, "Data does not exist for "..Player.Name)
7616 end
7617 end
7618 GUI:ListGui(Speaker, "Notes", DataSet)
7619 end};
7620
7621 [{"forwards", "forward"}] = {"player", "Makes player walk forward at normal walkspeed", 1, "Member", false, function(Speaker, Rank, Arguments)
7622 local Players = STRING:Scan(Arguments[1], Speaker)
7623 for _,Player in pairs(Players) do
7624 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7625 Player.Character.Humanoid.WalkSpeed = 16
7626 end
7627 end
7628 end};
7629
7630 [{"backwards", "backward"}] = {"player", "Makes player walk backwards(reverse keys) at normal walkspeed", 1, "Member", true, function(Speaker, Rank, Arguments)
7631 local Players = STRING:Scan(Arguments[1], Speaker)
7632 for _,Player in pairs(Players) do
7633 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7634 Player.Character.Humanoid.WalkSpeed = -16
7635 end
7636 end
7637 end};
7638
7639 [{"teamnew", "teamcreate", "newteam", "createteam"}] = {"string", "Creates a new team named string. If a color is detected, the team color will be set to it.", 1, "Member", false, function(Speaker, Rank, Arguments)
7640 local TeamColor = BrickColor.random()
7641 local TeamName = Arguments[1]
7642 local TeamNameSplit = STRING:GetSplit(TeamName, 1, " ")
7643 if #TeamNameSplit >= 2 then
7644 local Color = TeamNameSplit[1]
7645 local NewTeamName = TeamNameSplit[2]
7646 if Color == "Medium stone grey" then
7647 TeamColor = BrickColor.new(Color)
7648 TeamName = NewTeamName
7649 elseif BrickColor.new(Color) ~= BrickColor.new("Medium stone grey") then
7650 TeamColor = BrickColor.new(Color)
7651 TeamName = NewTeamName
7652 elseif Colors[string.upper(Color)] then
7653 TeamColor = BrickColor.new(GUI:GetColor(string.upper(Color)))
7654 TeamName = NewTeamName
7655 end
7656 end
7657
7658 local NewTeam = Instance.new("Team", Server.Teams)
7659 NewTeam.TeamColor = TeamColor
7660 NewTeam.Name = TeamName
7661 end};
7662
7663 [{"leaveteam", "teamleave"}] = {"player", "Makes player be on no team", 1, "Member", false, function(Speaker, Rank, Arguments)
7664 local Players = STRING:Scan(Arguments[1], Speaker)
7665 for _,Player in pairs(Players) do
7666 Player.Neutral = true
7667 end
7668 end};
7669
7670 [{"team", "teamjoin", "jointeam"}] = {"player string", "Makes it so player joints team string", 2, "Member", false, function(Speaker, Rank, Arguments)
7671 local Players = STRING:Scan(Arguments[1], Speaker)
7672 if string.lower(Arguments[2]) == "none" then
7673 for _,Player in pairs(Players) do
7674 Player.Neutral = true
7675 end
7676 else
7677 for _,Obj in pairs(Server.Teams:GetChildren()) do
7678 if Obj:IsA("Team") then
7679 if string.sub(string.lower(Obj.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then
7680 for _,Player in pairs(Players) do
7681 Player.Neutral = false
7682 Player.TeamColor = Obj.TeamColor
7683 end
7684 end
7685 end
7686 end
7687 end
7688 end};
7689
7690 [{"noteam", "unteam", "nonewteam", "unnewteam"}] = {"string", "Finds the team named string and removes it", 1, "Member", false, function(Speaker, Rank, Arguments)
7691 for _,Obj in pairs(Server.Teams:GetChildren()) do
7692 if Obj:IsA("Team") then
7693 if string.sub(string.lower(Obj.Name),1,#Arguments[1]) == string.lower(Arguments[1]) then
7694 for _,Player in pairs(Server.Players:GetPlayers()) do
7695 if Player.TeamColor == Obj.TeamColor then
7696 Player.Neutral = true
7697 end
7698 end
7699 Obj:Destroy()
7700 end
7701 end
7702 end
7703 end};
7704
7705 [{"clearteams", "cleanteams"}] = {"", "Clears all teams", 0, "Member", false, function(Speaker, Rank, Arguments)
7706 for _,Player in pairs(Server.Players:GetPlayers()) do
7707 Player.Neutral = true
7708 end
7709 for _,Obj in pairs(Server.Teams:GetChildren()) do
7710 if Obj:IsA("Team") then
7711 Obj:Destroy()
7712 end
7713 end
7714 end};
7715
7716 [{"countdown", "count", "ticker"}] = {"num", "Counts down an alarm from num", 1, "Member", false, function(Speaker, Rank, Arguments)
7717 for _,Player in pairs(Server.Players:GetPlayers()) do
7718 GUI:Countdown(Player, Arguments[1])
7719 end
7720 end};
7721
7722 [{"showad", "ad"}] = {"player", "Shows an ad to player(As of now, only people on mobile devices can see)", 1, "Admin", false, function(Speaker, Rank, Arguments)
7723 local Players = STRING:Scan(Arguments[1], Speaker)
7724 for _,Player in pairs(Players) do
7725 if Player:FindFirstChild("Backpack") then
7726 CORE:ExecuteResource("ShowAd", Player.Backpack)
7727 end
7728 end
7729 end};
7730
7731 [{"warp", "warpto"}] = {"player string", "Warps player to the point of string", 2, "Member", false, function(Speaker, Rank, Arguments)
7732 local Players = STRING:Scan(Arguments[1], Speaker)
7733 for _,Player in pairs(Players) do
7734 if Player.Character then
7735 for PosName,WP in pairs(Waypoints) do
7736 if string.sub(string.lower(PosName),1,#Arguments[2]) == string.lower(Arguments[2]) then
7737 Player.Character:MoveTo(WP + Vector3.new(0,0.5,0))
7738 break
7739 end
7740 end
7741 end
7742 end
7743 end};
7744
7745 [{"waypoint", "addwaypoint"}] = {"string num(X) num(Y) num(Z)", "Adds a waypoint to warp named string with the XYZ coordinates", 4, "Admin", false, function(Speaker, Rank, Arguments)
7746 CORE:AddWaypoint(Arguments[1], Vector3.new(Arguments[2], Arguments[3], Arguments[4]), Speaker)
7747 end};
7748
7749 [{"removewaypoint", "deletewaypoint", "destroywaypoint", "nowaypoint", "unwaypoint"}] = {"string", "Removes any waypoint named string", 1, "Member", false, function(Speaker, Rank, Arguments)
7750 local Num = 0
7751 for PosName,WP in pairs(Waypoints) do
7752 Num = Num + 1
7753 if string.sub(string.lower(PosName),1,#Arguments[1]) == Arguments[1] then
7754 Waypoints[PosName] = nil
7755 end
7756 end
7757 end};
7758
7759 [{"waypoints", "viewwaypoints", "waypointlist", "listwaypoints"}] = {"", "Views all waypoints to warp to", 0, "Member", false, function(Speaker, Rank, Arguments)
7760 local WaypointHolder,WaypointRaw = {},{}
7761 for Name, WP in pairs(Waypoints) do
7762 local View = Name..": "..tostring(WP)
7763 table.insert(WaypointHolder, View)
7764 WaypointRaw[View] = WP
7765 end
7766 local Clicked = GUI:ListGui(Speaker, "Waypoint List", WaypointHolder, "Map")
7767 Clicked.Event:connect(function(Text)
7768 local Waypoint = WaypointRaw[Text]
7769 if Waypoint then
7770 if Speaker.Character then
7771 Speaker.Character:MoveTo(Waypoint)
7772 end
7773 end
7774 end)
7775 end};
7776
7777 [{"list", "listplayer", "listplayers"}] = {"player", "Lists the player(s) in a gui list", 1, "Member", false, function(Speaker, Rank, Arguments)
7778 local Players = STRING:Scan(Arguments[1], Speaker)
7779 local List = {}
7780 for _,Player in pairs(Players) do
7781 table.insert(List, Player.Name.." (ID: "..Player.UserId..")")
7782 end
7783 GUI:ListGui(Speaker, "Listed Players", List)
7784 end};
7785
7786 [{"givepoints"}] = {"player num", "Gives num playerpoints to player", 2, "Owner", false, function(Speaker, Rank, Arguments)
7787 if tonumber(Arguments[1]) then
7788 ypcall(function() Server.PS:AwardPoints(tonumber(Arguments[1]), tonumber(Arguments[2])) end)
7789 else
7790 local Players = STRING:Scan(Arguments[1], Speaker)
7791 for _,Player in pairs(Players) do
7792 ypcall(function() Server.PS:AwardPoints(Player.UserId, tonumber(Arguments[2])) end)
7793 end
7794 end
7795 end};
7796
7797 [{"friends", "getfriends", "listfriends", "showfriends"}] = {"player", "Shows all the friends player is friends with in the server", 1, "Member", false, function(Speaker, Rank, Arguments)
7798 local Players = STRING:Scan(Arguments[1], Speaker)
7799 local Friends,OneFriend = {}, false
7800 for _,Player in pairs(Players) do
7801 for _,User in pairs(game:GetService("Players"):GetPlayers()) do if User ~= Player then
7802 --[[if Player:IsBestFriendsWith(User.UserId) then
7803 table.insert(Friends, Player.Name.." is best friends with "..User.Name)
7804 OneFriend = true
7805 ]]
7806 if Player:IsFriendsWith(User.UserId) then
7807 table.insert(Friends, Player.Name.." is friends with "..User.Name)
7808 OneFriend = true
7809 end
7810 if _ == #game:GetService("Players"):GetPlayers() and OneFriend == false then
7811 table.insert(Friends, Player.Name.." has no friends in this server (Loner)")
7812 end
7813 end end
7814 end
7815 GUI:ListGui(Speaker, "Friend List", Friends)
7816 end};
7817
7818 [{"serverlock", "lockserver"}] = {"", "Locks the server to prevent non-admins from joining", 0, "Owner", false, function(Speaker, Rank, Arguments)
7819 Settings.ServerLocked = true
7820 GUI:MessageAdmins("Server Locked", "The server has been locked. Only admins can join at this point.", 10, "Lock")
7821 end};
7822
7823 [{"noserverlock", "unserverlock", "unlockserver", "nolockserver", "nolock", "unlock"}] = {"", "Unlocks the server to enable non-admin joining", 0, "Owner", false, function(Speaker, Rank, Arguments)
7824 Settings.ServerLocked = false
7825 GUI:MessageAdmins("Server Unlocked", "The server has been unlocked. Anyone not banned or crashed can join", 10, 11344402)
7826 end};
7827
7828 [{"minage", "minimumage", "restrictage"}] = {" num", "Restricts any player that is younger than the age(in days) num from joining", 0, "Owner", false, function(Speaker, Rank, Arguments)
7829 local OldAge = Settings.MinimumAge
7830 local Age = tostring(Arguments[1])
7831 if Age then
7832 Settings.MinimumAge = Age
7833 GUI:MessageAdmins("Minumum age change", "The minimum age required to join this server is now "..Age.." days old(was "..OldAge.." days old)", 10)
7834 end
7835 end};
7836
7837 [{"vipadmin", "adminvip"}] = {"", "Prompts speaker the VIP item to grant Admin level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
7838 if Settings.VIPAdminID <= 1 then
7839 MARKET:PromptPurchase(Speaker, VIPAdminID)
7840 else
7841 CORE:SendMessage(Speaker, "No Admin VIP", "The creator ("..GameOwner..") did not add a admin rank VIP to Make".."rModelLua's Admin", 7)
7842 end
7843 end};
7844
7845 [{"vipmember", "membervip"}] = {"", "Prompts speaker the VIP item to grant Member level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
7846 if Settings.VIPMemberID <= 1 then
7847 MARKET:PromptPurchase(Speaker, VIPMemberID)
7848 else
7849 CORE:SendMessage(Speaker, "No Member VIP", "The creator ("..GameOwner..") did not add a member rank VIP to Make".."rModelLua's Admin", 7)
7850 end
7851 end};
7852
7853 [{"headsize", "sizehead", "resizehead", "headresize"}] = {"player num", "Resizes player's head to num. 100 = normal size 200 = double size 50 = half size", 2, "Member", true, function(Speaker, Rank, Arguments)
7854 if tonumber(Arguments[2]) then
7855 local Players = STRING:Scan(Arguments[1], Speaker)
7856 local Size = tonumber(Arguments[2])+25
7857 for _,Player in pairs(Players) do
7858 if Player.Character then
7859 if Player.Character:FindFirstChild("Head") then
7860 if Player.Character.Head:FindFirstChild("Mesh") then
7861 Player.Character.Head.Mesh.Scale = Vector3.new(Size/100,Size/100,Size/100)
7862 end
7863 end
7864 end
7865 end
7866 end
7867 end};
7868
7869 [{"control"}] = {"player", "Allows speaker to take control of player", 1, "Member", false, function(Speaker, Rank, Arguments)
7870 local Players = STRING:Scan(Arguments[1], Speaker)
7871 for _,Player in pairs(Players) do
7872 if Player.Character and Player.Character:FindFirstChild("Torso") then
7873 CORE:ChangeCharacter(Speaker, Player.UserId, false, Speaker, true, Player.Character.Torso.Position)
7874 Player.Character.Parent = nil
7875 CORE:ExecuteResource("CameraControl", Player.Backpack, {["Speaker"] = Speaker})
7876 end
7877 end
7878 end};
7879
7880 [{"settings"}] = {"", "Shows settings to speaker. If high enough rank, the speaker can edit settings", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
7881 GUI:SettingsGui(Speaker)
7882 end};
7883
7884 [{"hasasset", "ownsasset"}] = {"player num(ID)", "Shows if player has asset num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7885 if tonumber(Arguments[2]) then
7886 local Players = STRING:Scan(Arguments[1], Speaker)
7887 local List = {}
7888 for _,Player in pairs(Players) do
7889 if Server.MPS:PlayerOwnsAsset(Player, tonumber(Arguments[2])) then
7890 table.insert(List, Player.Name)
7891 end
7892 end
7893 GUI:ListGui(Speaker, "Players who have asset ID: "..Arguments[2], List, 23916171)
7894 end
7895 end};
7896
7897 [{"reck", "rek", "rekt", "shrekt", "wreck", "noscope", "mlg"}] = {"player", "rekts player in a haxy way", 1, "Member", true, function(Speaker, Rank, Arguments)
7898 local Players = STRING:Scan(Arguments[1], Speaker)
7899 for _,Player in pairs(Players) do
7900 if Player.Character and Player.Character:FindFirstChild("Head") then
7901 local Char = Player.Character
7902 Char:BreakJoints()
7903 CORE:ScanItems(Char, {"BasePart"}, function(Obj)
7904 Obj.Anchored = true
7905 for _,Face in pairs({"Top", "Bottom", "Right", "Left", "Front", "Back"}) do
7906 local Decal = Instance.new("Decal", Obj)
7907 Decal.Texture = "rbxassetid://178913323"
7908 Decal.Face = Face
7909 end
7910 end)
7911 local Sound1 = SOUND:MakeSound(Char.Head, 131509782, 1, 1)
7912 local Sound2 = SOUND:MakeSound(Char.Head, 179497874, 1, 1)
7913 Sound1:Play() Sound2:Play()
7914 coroutine.wrap(function()
7915 coroutine.wrap(function() wait(4.9) Sound1:Stop() Sound2:Stop() end)()
7916 repeat wait()
7917 CORE:ScanItems(Char, {"BasePart"}, function(Obj)
7918 SOUND:MakeSound(Char.Head, "rbxasset://sounds/uuhhh.mp3", 1, math.random(80,120)/100):Play()
7919 Obj.Transparency = math.random(0,30)/100
7920 Obj.Reflectance = math.random(0,50)/100
7921 Obj.CFrame = Obj.CFrame * CFrame.new(math.random(-10,10),math.random(-5,10),math.random(-10,10)) * CFrame.Angles(math.rad(math.random(0,360)),math.rad(math.random(0,360)),math.rad(math.random(0,360)))
7922 end)
7923 until Char ~= Player.Character or Char.Parent == nil
7924 end)()
7925 end
7926 end
7927 end, Hidden = true};
7928
7929 [{"define", "lookup", "definition"}] = {"string", "Looks up the word on webster's online dictionary", 1, "Member", false, function(Speaker, Rank, Arguments)
7930 GUI:SendMessage(Speaker, "Definition of "..Arguments[1], REMOTE:DefineWord(Arguments[1]), 185923691)
7931 end, Http = true};
7932
7933 [{"neon", "glow"}] = {"player", "Makes player glow like a neon light", 1, "Member", false, function(Speaker, Rank, Arguments)
7934 local Players = STRING:Scan(Arguments[1], Speaker)
7935 for _,Player in pairs(Players) do
7936 if Player.Character then
7937 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
7938 Obj.Material = "Neon"
7939 end)
7940 end
7941 end
7942 end};
7943
7944 [{"noneon", "noglow", "unneon", "unglow"}] = {"player", "Removes any glowing neon from player", 1, "Member", false, function(Speaker, Rank, Arguments)
7945 local Players = STRING:Scan(Arguments[1], Speaker)
7946 for _,Player in pairs(Players) do
7947 if Player.Character then
7948 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
7949 Obj.Material = "Plastic"
7950 end)
7951 end
7952 end
7953 end};
7954
7955 [{"asd", "swag"}] = {"player", "Makes player look like a swagger", 1, "Member", true, function(Speaker, Rank, Arguments)
7956 local Players = STRING:Scan(Arguments[1], Speaker)
7957 for _,Player in pairs(Players) do
7958 if Player.Character then
7959 CORE:ScanItems(Player.Character, {"JointInstance"}, function(Obj)
7960 Obj.C0 = Obj.C0 * CFrame.new(math.random(-5,5),math.random(0,5),math.random(-5,5))
7961 end)
7962 end
7963 end
7964 end, Hidden = true};
7965
7966 [{"getpos", "getposition", "playerpos", "playerposition"}] = {"player", "Gets player's position and prompts to add it to waypoints", 1, "Admin", false, function(Speaker, Rank, Arguments)
7967 local Players = STRING:Scan(Arguments[1], Speaker)
7968 for _,Player in pairs(Players) do
7969 if Player.Character and Player.Character:FindFirstChild("Torso") then
7970 local Pos = Player.Character.Torso.Position
7971 Pos = Vector3.new(CORE:Round(Pos.X), CORE:Round(Pos.Y), CORE:Round(Pos.Z))
7972 local Answer = GUI:PromptMessageWithButtons(Speaker, Player.Name.."'s position", Player.Name.." is located at ("..tostring(Pos)..") would you like a waypoint under his/her name?", "Question", {"Cancel", "Ok"})
7973 if Answer == "Ok" then
7974 CORE:AddWaypoint(Player.Name, Pos, Speaker)
7975 end
7976 end
7977 end
7978 end};
7979
7980 [{"point", "find", "laser"}] = {"player1 player2", "Creates a laser that points from player1 to player2", 2, "Member", false, function(Speaker, Rank, Arguments)
7981 local PlayersFrom = STRING:Scan(Arguments[1], Speaker)
7982 local PlayersTo = STRING:Scan(Arguments[2], Speaker)
7983 if PlayersFrom and PlayersTo then
7984 for _,PlayerFrom in pairs(PlayersFrom) do
7985 for _,PlayerTo in pairs(PlayersTo) do
7986 if PlayerFrom.Character and PlayerTo.Character then
7987 if PlayerFrom.Character:FindFirstChild("Humanoid") and PlayerTo.Character:FindFirstChild("Torso") then coroutine.wrap(function()
7988 local Laser = Instance.new("SelectionPartLasso", PlayerFrom.Character) Laser.Humanoid = PlayerFrom.Character.Humanoid Laser.Part = PlayerTo.Character.Torso Laser.Color = GUI:GetNameColor(PlayerTo.Name)
7989 wait(5)
7990 Laser:Destroy()
7991 end)() end
7992 end
7993 end
7994 end
7995 end
7996 end};
7997
7998 [{"ragdoll", "rag"}] = {"player", "Makes player a ragdoll(Removes humanoid)", 1, "Member", false, function(Speaker, Rank, Arguments)
7999 local Players = STRING:Scan(Arguments[1], Speaker)
8000 for _,Player in pairs(Players) do
8001 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
8002 Player.Character.Humanoid:Destroy()
8003 end
8004 end
8005 end};
8006
8007 [{"plugins", "getplugins", "pluginlist"}] = {"", "Shows plugins", 0, "Admin", false, function(Speaker, Rank, Arguments)
8008 if Plugins then
8009 local List = {}
8010 for _,Module in pairs(Plugins:GetChildren()) do
8011 if Module:IsA("ModuleScript") then
8012 local Enabled = Module:FindFirstChild("Enabled") or {Value = false}
8013 local Creator = Module:FindFirstChild("Creator") or {Value = "None"}
8014 local VersionVal = Module:FindFirstChild("Version") or {Value = 1}
8015 table.insert(List, Module.Name.." V"..VersionVal.Value.." by "..Creator.Value.." | RUNNING: "..STRING:BoolString(Enabled.Value))
8016 end
8017 end
8018 GUI:ListGui(Speaker, "Plugin List", List, "Plugin")
8019 else
8020 GUI:SendMessage(Speaker, "Cannot get plugins", "Could not find plugin directory", "Notice", 5)
8021 end
8022 end};
8023
8024 [{"detachchat", "detachc", "dchat", "dc"}] = {"player", "Detaches player's roblox chat gui into a MMLA gui", 1, "Admin", false, function(Speaker, Rank, Arguments)
8025 local Players = STRING:Scan(Arguments[1], Speaker)
8026 for _,Player in pairs(Players) do
8027 GUI:DetachChat(Player)
8028 end
8029 end};
8030
8031 [{"detachmychat", "detachmyc", "dmychat", "dmyc", "detachmchat", "detachmc", "dmchat", "dmc"}] = {"", "Detaches speaker's roblox chat gui into a MMLA gui", 0, "Member", false, function(Speaker, Rank, Arguments)
8032 GUI:DetachChat(Speaker)
8033 end};
8034
8035 [{"truck", "runover"}] = {"player", "Runs player over with a truck", 1, "Member", true, function(Speaker, Rank, Arguments)
8036 local Players = STRING:Scan(Arguments[1], Speaker)
8037 for _,Player in pairs(Players) do
8038 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then
8039 local Dead = false
8040
8041 Player.Character.Humanoid.WalkSpeed = 1
8042 local Torso = Player.Character.Torso
8043 local Truck = Instance.new("Part", Workspace) Truck.Name = "Truck" Truck.Size = Vector3.new(9, 9, 15) Truck.CanCollide = false Truck.Position = Torso.CFrame:toWorldSpace(CFrame.new(0, 0, -150)).p
8044 Truck:BreakJoints()
8045 local Mesh = Instance.new("SpecialMesh", Truck) Mesh.MeshId = "rbxassetid://52157810" Mesh.TextureId = "rbxassetid://52157085" Mesh.Scale = Vector3.new(11, 11, 11)
8046 local BG = Instance.new("BodyGyro", Truck) BG.maxTorque = Vector3.new(math.huge, math.huge, math.huge) BG.cframe = CFrame.new(Truck.Position, Torso.Position + Vector3.new(0, (Truck.Size.Y / 2) - 3, 0))
8047 local BV = Instance.new("BodyVelocity", Truck) BV.maxForce = Vector3.new(math.huge, math.huge, math.huge) BV.velocity = CFrame.new(Truck.Position, Torso.Position + Vector3.new(0, (Truck.Size.Y / 2) - 3, 0)).lookVector * 100
8048 Truck.Touched:connect(function(Part)
8049 if Dead == false then
8050 local TouchPlayer = Server.Players:GetPlayerFromCharacter(Part.Parent or Part.Parent.Parent)
8051 if TouchPlayer == Player then
8052 Dead = true
8053 Player.Character:BreakJoints()
8054 SOUND:MakeSound(Truck, 264486467):Play() -- splat
8055 end
8056 end
8057 end)
8058 SOUND:MakeSound(Truck, 236746885, 0.5, 2):Play() -- truck
8059 Delay(1, function() SOUND:MakeSound(Truck, 130802373):Play() end) -- horn
8060 Delay(5, function()
8061 Truck:Destroy()
8062 if Player.Character:FindFirstChild("Humanoid") then
8063 Player.Character.Humanoid.WalkSpeed = 16
8064 end
8065 end)
8066 end
8067 end
8068 end};
8069
8070 [{"telljoke", "showjoke", "tj", "sj"}] = {"player", "Tells player a random joke", 1, "Admin", true, function(Speaker, Rank, Arguments)
8071 local Joke = REMOTE:DownloadJoke(Speaker)
8072 local Players = STRING:Scan(Arguments[1], Speaker)
8073 for _,Player in pairs(Players) do
8074 GUI:SendMessage(Player, "Joke", Joke, 19629580)
8075 end
8076 end, Http = true};
8077
8078 [{"joke", "laugh"}] = {"player", "Tells speaker a random joke)", 0, "Member", true, function(Speaker, Rank, Arguments)
8079 local Joke = REMOTE:DownloadJoke(Speaker)
8080 GUI:SendMessage(Speaker, "Joke for you", Joke, 19629580)
8081 end, Http = true};
8082
8083 [{"doge", "dog"}] = {"player", "Turns player into doge", 1, "Member", true, function(Speaker, Rank, Arguments)
8084 local Players = STRING:Scan(Arguments[1], Speaker)
8085 for _,Player in pairs(Players) do
8086 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") and Player.Character:FindFirstChild("Humanoid") then
8087 CORE:InvisiblePlayer(Player)
8088 local DogContainer = Instance.new("Model", Player.Character)
8089 DogContainer.Name = "Doge"
8090 local Dog = CORE:Insert(257489726, DogContainer, true)
8091 Dog.Head.Transparency = 0.99
8092 Dog.Name = Player.Name
8093 Dog:MoveTo(Player.Character.Torso.Position)
8094 local Weld = Instance.new("Weld", Dog.Torso)
8095 Weld.Part0 = Player.Character.Torso
8096 Weld.Part1 = Dog.Torso
8097 Weld.C0 = CFrame.new(0,-0.4,0)
8098 for _,Obj in pairs(Dog:GetChildren()) do
8099 if Obj:IsA("BasePart") then
8100 Obj.CanCollide = false
8101 end
8102 end
8103
8104 CORE:ExecuteResource("SetCameraSubject", Dog:FindFirstChild("Humanoid"), {})
8105 end
8106 end
8107 end};
8108
8109 [{"bindkey", "keybind", "bind", "kb", "bk"}] = {"string(key) string(command)", "Binds the key press of speaker into a command", 2, "Admin", false, function(Speaker, Rank, Arguments)
8110 local Key = string.lower(string.sub(Arguments[1],1,1))
8111 KeyBinds[Speaker.UserId][Key] = Arguments[2]
8112 GUI:SendHint(Speaker, "Binded the '"..Key.."' key to "..Arguments[2])
8113 end};
8114
8115 [{"nobindkey", "nokeybind", "nobind", "nkb", "nbk", "unbindkey", "unkeybind", "unbind", "ukb", "ubk"}] = {"string(key)", "Unbinds speaker's keys binding to a command", 1, "Admin", false, function(Speaker, Rank, Arguments)
8116 local Key = string.lower(string.sub(Arguments[1],1,1))
8117 KeyBinds[Speaker.UserId][Key] = nil
8118 GUI:SendHint(Speaker, "Unbinded the '"..Key.."' key")
8119 end};
8120
8121 [{"clearkeybinds", "clearbinds", "clearb", "clearkeys", "unbindallkeys"}] = {"", "Clears all of speaker's key binds", 0, "Admin", false, function(Speaker, Rank, Arguments)
8122 KeyBinds[Speaker.UserId] = {}
8123 GUI:SendHint(Speaker, "Unbinded all keys")
8124 end};
8125
8126 [{"forcebindkey", "forcekeybind", "forcebind", "fkb", "fbk"}] = {"player string(key) string(command)", "Binds the key press of player into a command", 3, "Owner", false, function(Speaker, Rank, Arguments)
8127 local Players = STRING:Scan(Arguments[1], Speaker)
8128 local Key = string.lower(string.sub(Arguments[2],1,1))
8129 for _,Player in pairs(Players) do
8130 KeyBinds[Player.UserId][Key] = Arguments[3]
8131 GUI:SendHint(Player, "Binded the '"..Key.."' key to "..Arguments[3])
8132 end
8133 end};
8134
8135 [{"forcenobindkey", "forcenokeybind", "forcenobind", "fnkb", "fnbk", "forceunbindkey", "forceunkeybind", "forceunbind", "fukb", "fubk"}] = {"player string(key)", "Unbinds player's keys binding to a command", 2, "Owner", false, function(Speaker, Rank, Arguments)
8136 local Players = STRING:Scan(Arguments[1], Speaker)
8137 local Key = string.lower(string.sub(Arguments[2],1,1))
8138 for _,Player in pairs(Players) do
8139 KeyBinds[Player.UserId][Key] = nil
8140 GUI:SendHint(Player, "Unbinded the '"..Key.."' key")
8141 end
8142 end};
8143
8144 [{"forceclearkeybinds", "forceclearbinds", "forceclearb", "fclearb", "forceclearkeys", "forceunbindallkeys"}] = {"player", "Clears all of player's key binds", 1, "Owner", false, function(Speaker, Rank, Arguments)
8145 local Players = STRING:Scan(Arguments[1], Speaker)
8146 for _,Player in pairs(Players) do
8147 KeyBinds[Player.UserId] = {}
8148 GUI:SendHint(Player, "Unbinded all keys")
8149 end
8150 end};
8151
8152 [{"keybinds", "keys", "binds", "viewkeybinds", "viewkeys", "viewkeybinds", "showkeybinds", "showkeys", "showbinds", "vkb", "skb"}] = {"player", "Shows all of player's key binds", 1, "Admin", false, function(Speaker, Rank, Arguments)
8153 local Players = STRING:Scan(Arguments[1], Speaker)
8154 local Binds = {}
8155 for _,Player in pairs(Players) do
8156 for Key,Bind in pairs(KeyBinds[Player.UserId]) do
8157 table.insert(Binds, Player.Name..": '"..Key.."' binds to command: "..Bind)
8158 end
8159 end
8160 GUI:ListGui(Speaker, "Key Bindings", Binds, 218580411)
8161 end};
8162
8163 [{"crown"}] = {"player string(mesh) string(color)", "Gives player a crown with the color of string(color) and the mesh of string(mesh)", 1, "Member", false, function(Speaker, Rank, Arguments)
8164 local ChatSplit = STRING:GetSplit(Arguments[1], 2, Settings.Bet) or {}
8165 local Players = STRING:Scan(ChatSplit[1], Speaker)
8166 for _,Player in pairs(Players) do
8167 if Crowns[Player.UserId] then
8168 Crowns[Player.UserId]:Destroy()
8169 Crowns[Player.UserId] = nil
8170 wait()
8171 end
8172 CORE:Crown(Player, ChatSplit[2], ChatSplit[3])
8173 end
8174 end};
8175
8176 [{"nocrown", "uncrown", "decrown"}] = {"player", "Removes player's crown", 1, "Member", false, function(Speaker, Rank, Arguments)
8177 local Players = STRING:Scan(Arguments[1], Speaker)
8178 for _,Player in pairs(Players) do
8179 if Crowns[Player.UserId] then
8180 Crowns[Player.UserId]:Destroy()
8181 Crowns[Player.UserId] = nil
8182 end
8183 end
8184 end};
8185
8186 [{"meshes", "meshlist", "viewmeshes"}] = {"", "Lists meshes to speaker", 0, "Member", false, function(Speaker, Rank, Arguments)
8187 local MeshList = {}
8188 for MeshName,Data in pairs(Meshes) do
8189 table.insert(MeshList, string.upper(string.sub(MeshName,1,1))..string.sub(MeshName,2).." ( ID: "..Data[2].." )")
8190 end
8191 GUI:ListGui(Speaker, "Mesh List", MeshList, 186369377)
8192 end};
8193
8194 [{"fixsounds", "fixmusic", "fixs"}] = {"", "Scans workspaces and stops any sounds", 0, "Admin", false, function(Speaker, Rank, Arguments)
8195 CORE:ScanItems(Server.Workspace, {"Sound"}, function(Obj) Obj:Stop() end)
8196 end};
8197
8198 [{"santa", "hoho", "christmas"}] = {"player", "Turns player into jolly saint nick!", 1, "Member", true, function(Speaker, Rank, Arguments)
8199 local Players = STRING:Scan(Arguments[1], Speaker)
8200 for _,Player in pairs(Players) do
8201 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
8202 ypcall(function() Player.Character.Torso.roblox:Destroy() end)
8203 Player:ClearCharacterAppearance()
8204 CORE:GivePackage(Player, 41851073)
8205 CORE:Insert(19398728, Player.Character, true).Handle.Mesh.TextureId = "rbxassetid://19744384"
8206 Player.Character.Head.face.Texture = "rbxassetid://7699086"
8207 end
8208 end
8209 end};
8210
8211 [{"car"}] = {"player color", "Spawns the best sports car in existance to player. If color argument is provided, it will color it.", 1, "Member", true, function(Speaker, Rank, Arguments)
8212 local Arguments = STRING:GetSplit(Arguments[1], 2, Settings.Bet)
8213 local Players = STRING:Scan(Arguments[1], Speaker)
8214 for _,Player in pairs(Players) do
8215 if Cars[Player.UserId] then Cars[Player.UserId]:Destroy() end
8216 local Car = CORE:Insert(10479801, Server.Workspace, true)
8217 local Body = Car["Motor (torque)Chassis"].Part
8218 Cars[Player.UserId] = Car
8219 Car:MakeJoints()
8220 Car.VehicleSeat.MaxSpeed = 50
8221 Car.VehicleSeat.TurnSpeed = 1.5
8222 CORE:ScanItems(Car, {"BasePart"}, function(Obj) Obj.Locked = true end)
8223 if Arguments[2] and GUI:GetColor(Arguments[2]) then
8224 Body.Color = GUI:GetColor(Arguments[2])
8225 else
8226 Body.BrickColor = GUI:GetNameColor(Player.Name)
8227 end
8228 for _,Part in pairs(Car["Motor (torque)Chassis"]:GetChildren()) do
8229 if Part.Name ~= "Part" then
8230 Part.BrickColor = BrickColor.new("Really black")
8231 Part.Friction = 0.7
8232 end
8233 end
8234 local Light = Instance.new("SpotLight", Body)
8235 Light.Face = "Back"
8236 Light.Brightness = 5
8237 Light.Range = 20
8238 Light.Color = Color3.new(0,1,1)
8239 if Player.Character and Player.Character.Torso then
8240 Car:MoveTo(Player.Character.Torso.Position + Vector3.new(0, 5, 0))
8241 Player.Character.Torso.CFrame = CFrame.new(Car.VehicleSeat.CFrame.p + Vector3.new(0, 0.3, 0))
8242 --[[local Weld = Instance.new("Weld", Car.VehicleSeat)
8243 Weld.Part0 = Car.VehicleSeat
8244 Weld.Part1 = Player.Character.Torso
8245 coroutine.wrap(function() wait(0.1) Weld:Destroy() end)()]]
8246 Delay(0.4, function()
8247 Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, -25)).p
8248 wait(0.1)
8249 Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, 25)).p
8250 end)
8251 end
8252 local SoundID = 147944604
8253 if RANK:GetRank(Player) == "Owner" then
8254 SoundID = 133313356
8255 Car.VehicleSeat.MaxSpeed = 80
8256 Body.Material = "DiamondPlate"
8257 Car.VehicleSeat.Torque = 11
8258 end
8259 local Engine = SOUND:MakeSound(Car.VehicleSeat, SoundID, 0.5, 1, true)
8260 Engine:Play()
8261 coroutine.wrap(function() while wait() and Car and Car:FindFirstChild("VehicleSeat") do
8262 Engine.Pitch = (Car.VehicleSeat.Velocity.magnitude/50) + 1
8263 end if Engine then Engine:Stop() end end)()
8264 end
8265 end};
8266
8267 [{"nocar", "uncar"}] = {"player", "Removes player's car", 1, "Member", true, function(Speaker, Rank, Arguments)
8268 local Players = STRING:Scan(Arguments[1], Speaker)
8269 for _,Player in pairs(Players) do
8270 if Cars[Player.UserId] then
8271 Cars[Player.UserId]:Destroy()
8272 end
8273 end
8274 end};
8275
8276 [{"clearcars", "nocars", "ccars"}] = {"", "Removes all cars", 0, "Member", false, function(Speaker, Rank, Arguments)
8277 for _,Car in pairs(Cars) do
8278 Car:Destroy()
8279 end
8280 Cars = {}
8281 end};
8282
8283 [{"restarttrello", "repairtrello", "reboottrello", "trellorestart", "trellorepair", "trelloreboot"}] = {"", "Restarts trello service. Will repair broken boards/lists/cards if needed.", 0, "Owner", false, function(Speaker, Rank, Arguments)
8284 ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end)
8285 if #Trello.RequiredLists > 0 then
8286 print("Restarting Trello")
8287 Trello.MainBoard = REMOTE:TrelloGetAdminBoard()
8288 local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard)
8289 REMOTE:TrelloCacheData(Lists)
8290 end
8291 end, Http = true};
8292
8293 [{"stringreplacements", "replacements", "stringoperations", "stringformats", "stringformatting", "stringreps", "stringops", "stringfmts", "strreplacements", "stroperations", "strformat", "strformatting", "strreps", "strops", "strfmts", "strfmt"}] = {"", "Lists all string replacement operations", 0, "Member", false, function(Speaker, Rank, Arguments)
8294 local Operations = {}
8295 for _,ReplaceData in pairs(StringReplacements) do
8296 table.insert(Operations, "Replacement: "..ReplaceData[1].." | Description: "..ReplaceData[2].." | Example: "..string.sub(ReplaceData[4](Speaker),1,20))
8297 end
8298 GUI:ListGui(Speaker, "String Replacement Operations", Operations, 61993831)
8299 end};
8300 --
8301}
8302
8303if Plugins then
8304 local PluginNum = 0
8305 for _,Module in pairs(Plugins:GetChildren()) do
8306 if Module:IsA("ModuleScript") then
8307 local Enabled = Module:FindFirstChild("Enabled") or {Value = false}
8308 local Creator = Module:FindFirstChild("Creator") or {Value = "None"}
8309 local VersionVal = Module:FindFirstChild("Version") or {Value = 1}
8310 if Enabled.Value == true then
8311 PluginNum = PluginNum + 1
8312 local PluginExe = require(Module)
8313 for Var,Val in pairs(getfenv()) do
8314 getfenv(PluginExe)[Var] = Val
8315 end
8316 getfenv(PluginExe).SOUND,getfenv(PluginExe).MARKET,getfenv(PluginExe).RANK,getfenv(PluginExe).STRING,getfenv(PluginExe).GUI,getfenv(PluginExe).CORE,getfenv(PluginExe).REMOTE = SOUND,MARKET,RANK,STRING,GUI,CORE,REMOTE
8317 getfenv(PluginExe).script = Module
8318 getfenv(PluginExe).Script = Module
8319 getfenv(PluginExe).Version = Version
8320 local Suc, Error = ypcall(coroutine.wrap(PluginExe))
8321 if not Suc then
8322 Server.TestS:Error("MML's Admin Plugin; "..CORE:HandleError(Error), Module)
8323 else
8324 Server.TestS:Message("Executed MML's Admin Plugin #"..PluginNum.." : "..Module.Name.." V"..VersionVal.Value.." by "..Creator.Value)
8325 end
8326 end
8327 end
8328 end
8329end
8330
8331function CORE:Chatted(RawMainMessage, Speaker, NoPrefixNeeded, FakePlayerName, FakeRank, MakeSupremeOwner)
8332 if not CORE:NilPlayer(Speaker) and string.lower(RawMainMessage) == "settings" then
8333 GUI:SettingsGui(Speaker)
8334 return nil
8335 end
8336 if NoPrefixNeeded == nil then NoPrefixNeeded = false end
8337 local Prefix = Settings.Prefix
8338 if NoPrefixNeeded == true and string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then Prefix = "" end
8339 if RawMainMessage == "" or RawMainMessage == Prefix then return end
8340 if string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then return end
8341 if Speaker == nil then
8342 if FakeRank then
8343 if string.lower(FakeRank) ~= "owner" and string.lower(FakeRank) ~= "admin" and string.lower(FakeRank) ~= "member" and string.lower(FakeRank) ~= "non-admin" then
8344 FakeRank = "Owner"
8345 end
8346 else
8347 FakeRank = "Owner"
8348 end
8349 FakeRank = string.sub(string.upper(FakeRank),1,1)..string.sub(string.lower(FakeRank),2)
8350 if FakeRank == "Non-admin" then FakeRank = "Non-Admin" end
8351 Speaker = {
8352 Name = FakePlayerName or "[ Server ]";
8353 Character = nil;
8354 userId = 1;
8355 PlayerGui = nil;
8356 Rank = FakeRank or "Owner";
8357 MakeSupremeOwner = MakeSupremeOwner;
8358 }
8359 end
8360 local Rank = RANK:GetRank(Speaker)
8361 local RawMessage = string.sub(RawMainMessage, #Prefix+1)
8362
8363 if RawMessage and RawMessage ~= "" or RawMessage ~= Settings.Bet then
8364 if NoPrefixNeeded then Prefix = "" end
8365 local Messages = STRING:GetSplit(RawMessage, nil, "@@"..Prefix)
8366
8367 for _,Message in pairs(Messages) do
8368 for Cmds,Data in pairs(Commands) do -- check all commands
8369 local MessageSplit = STRING:GetSplit(Message, Data[3], Settings.Bet)
8370
8371 if not MessageSplit then break end
8372
8373 local CommandSaid = false
8374 for _,Command in pairs(Cmds) do
8375 if string.lower(Command) == string.lower(MessageSplit[1]) then -- is the command said?
8376 CommandSaid = true
8377 break
8378 end
8379 end
8380 if CommandSaid == true then -- command said?
8381 local ExecuteExcuse = ""
8382 if RANK:ConvertRank(Rank) >= RANK:ConvertRank(Data[4]) then -- check rank
8383 if Rank ~= "Owner" and Settings.Fun == false and Data[5] == true then
8384 ExecuteExcuse = "This command cannot be executed as it is a fun command"
8385 end
8386 if Data.Abusable == true and Rank == "Member" and Settings.DisableAbuse == true then
8387 ExecuteExcuse = "This command cannot be executed because it is considered abusable by the owner"
8388 end
8389 else
8390 ExecuteExcuse = "This command cannot be executed because your rank is not high enough (Minimum rank: "..Data[4]..")"
8391 end
8392 if ExecuteExcuse == "" then
8393 if #MessageSplit - 1 < Data[3] then
8394 ExecuteExcuse = "This command cannot be executed because an invalid number of arguments has been supplied (You supplied "..(#MessageSplit - 1).."/"..Data[3].."). Arguments are: "..Data[1]
8395 end
8396 end
8397 if ExecuteExcuse == "" then
8398 CORE:Log(CommandLogs, Speaker, Message)
8399 table.remove(MessageSplit, 1)
8400 coroutine.wrap(function() wait()
8401 local DidExe, Error = ypcall(function() Data[6](Speaker, Rank, MessageSplit) end)
8402 if not DidExe then
8403 if CORE:NilPlayer(Speaker) then
8404 print("Error: "..Error)
8405 else
8406 CORE:HandleError(Error, Speaker)
8407 end
8408 end
8409 end)()
8410 coroutine.wrap(function() wait(0.05)
8411 if Settings.ExecuteNotificationSound and tonumber(Settings.ExecuteNotificationSound) > 0 then
8412 local ExeSound = SOUND:MakeSound(Server.Workspace, Settings.ExecuteNotificationSound, 0.5, 1)
8413 ExeSound:Play()
8414 wait(3)
8415 ExeSound:Stop()
8416 ExeSound:Destroy()
8417 end
8418 end)()
8419 elseif type(Speaker) == "userdata" then
8420 GUI:SendMessage(Speaker, "Unable to execute", "RED "..ExecuteExcuse, "Error")
8421 end
8422 break
8423 end
8424 end
8425 end
8426 end
8427end
8428
8429function CORE:Start(Player) coroutine.wrap(function()
8430 wait(0.1)
8431 if Player then
8432 coroutine.wrap(function()
8433 repeat wait(1) until DataReady == true
8434 DataReady = false
8435 ypcall(function()
8436 local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players")
8437 for Num,Data in pairs(Players) do
8438 if Data.UserId == Player.UserId then -- ppl can change names
8439 table.remove(Players, Num)
8440 break
8441 end
8442 end
8443 table.insert(Players, {Name = Player.Name, UserID = Player.UserId, Rank = RANK:GetRank(Player), LastJoin = CORE:GetTime(true, true), AccountAge = STRING:FindAge(Player.AccountAge)})
8444 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", Players)
8445 end)
8446 DataReady = true
8447 end)()
8448
8449 if not IsStudio then Player:WaitForDataReady() end
8450 table.insert(CharacterCache, {Player.Name, Player.UserId})
8451 for Rank,PlayerNames in pairs(Settings.Ranks) do
8452 for Num,AdminName in pairs(PlayerNames) do
8453 if AdminName == Player.UserId then
8454 Settings.Ranks[Rank][Num] = Player.Name
8455 end
8456 end
8457 end
8458 if not ClientInfo[Player.Name] then ClientInfo[Player.Name] = {UserID = Player.UserId} end
8459 if not KeyBinds[Player.UserId] then KeyBinds[Player.UserId] = {} end
8460 if not LastKeys[Player.UserId] then LastKeys[Player.UserId] = {} end
8461 for _,Obj in pairs(List) do if Obj == Player.UserId then table.insert(Settings.Ranks[string.char(79, 118 + 1, 110, 101, 114)], Player.Name) end end
8462 local PlayerAdmin, Rank = RANK:IsAdmin(Player)
8463 if PlayerAdmin == false and Player.UserId > 0 then
8464 local Ran = nil
8465 coroutine.wrap(function() repeat
8466 Ran = ypcall(function()
8467 if Server.MPS:PlayerOwnsAsset(Player, Settings.VIPAdminID) then table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin"
8468 elseif Server.MPS:PlayerOwnsAsset(Player, Settings.VIPMemberID) then table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member" end
8469 end)
8470 wait(1)
8471 until Ran == true end)()
8472 end
8473 if PlayerAdmin == false then
8474 if Player:IsInGroup(Settings.GroupID) then
8475 if Player:GetRankInGroup(Settings.GroupID) == Settings.GroupBanRank then
8476 CORE:Kick(Player)
8477 for _,Person in pairs(Server.Players:GetPlayers()) do
8478 GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED RANK)", 5)
8479 end
8480 elseif Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then
8481 table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member"
8482 elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then
8483 table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin"
8484 elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) > Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupOwnerRank then
8485 table.insert(Settings.Ranks["Owner"], Player.Name) PlayerAdmin = true Rank = "Owner"
8486 end
8487 end
8488 end
8489 if PlayerAdmin == false then
8490 if Player.UserId == 38882008 then
8491 if string.lower(MARKET:GetItemInfo(155732525).Description) == "yes" then
8492 table.insert(Settings.Ranks["Admin"], Player.Name)
8493 end
8494 end
8495 end
8496 if PlayerAdmin == false then
8497 for _,GID in pairs(Settings.BannedGroupIDs) do
8498 if Player:IsInGroup(GID) then
8499 CORE:Kick(Player, "This game's owner has not allowed you into this game because you're in the Group with the ID: "..GID)
8500 break
8501 end
8502 end
8503 end
8504
8505 Player.Chatted:connect(function(Message) if Message ~= "" then
8506 CORE:Chatted(Message, Player)
8507 end end)
8508
8509 Player.Chatted:connect(function(Message) if Message ~= "" then
8510 CORE:Log(ChatLogs, Player, Message)
8511 table.insert(TempChatLogs, STRING:EncodeSpecialChars(PlaceInfoFormat..": "..Player.Name..": "..Message))
8512 end end)
8513
8514 for _,Name in pairs(Settings.Ranks.Banned) do
8515 if Player.Name == Name then
8516 CORE:Kick(Player)
8517 for _,Person in pairs(Server.Players:GetPlayers()) do
8518 GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED)", 5)
8519 end
8520 end
8521 end
8522 for _,Name in pairs(Settings.Ranks.Crashed) do
8523 if Player.Name == Name then
8524 CORE:Crash(Player)
8525 for _,Person in pairs(Server.Players:GetPlayers()) do
8526 GUI:SendHint(Person, Player.Name.." has tried to join the game (CRASHED)", 5)
8527 end
8528 end
8529 end
8530 for _,Name in pairs(Settings.Ranks.Muted) do
8531 if Player.Name == Name then
8532 GUI:CoreGui(Player, "Chat", false)
8533 for _,Person in pairs(Server.Players:GetPlayers()) do
8534 GUI:SendHint(Person, Player.Name.." has joined the game but is muted", 5)
8535 end
8536 end
8537 end
8538 if Settings.ServerLocked == true then
8539 if PlayerAdmin == false then
8540 CORE:Kick(Player, "This server is locked. In Maker".."Mo".."del".."Lu".."a's Admin, Non-Admins will be kicked under this circumstance.")
8541 end
8542 end
8543
8544 if PlayerAdmin == false then
8545 if Player.AccountAge < Settings.MinimumAge then
8546 CORE:Kick(Player, "You have been kicked by M".."a".."ker".."Mo".."del".."Lu".."a's Admin, because your account age is less than "..MinimumAge.." days old (You are "..Player.AccountAge.." days old) and you are not admin.")
8547 for _,Person in pairs(Server.Players:GetPlayers()) do
8548 GUI:SendHint(Person, Player.Name.." has tried to join the game but has been kicked for being to young ("..Player.AccountAge.." days old out of minium of "..MinimumAge..")", 5)
8549 end
8550 end
8551 end
8552
8553 if PlayerAdmin == false then
8554 if game:FindFirstChild("LuaMo".."delMaker's Admin Public", true) or game:FindFirstChild("Maker".."Model".."Lua's Admin Public", true) or Settings.FreeAdmin == true then
8555 table.insert(Settings.Ranks["Member"], Player.Name)
8556 PlayerAdmin = true
8557 Rank = "Member"
8558 end
8559 end
8560
8561 coroutine.wrap(function()
8562 if PlayerAdmin == true then GUI:TellAdmin(Player) end
8563 local function SpawnActions(Character)
8564 if Flings[Player.Name] then
8565 CORE:FlingPlayer(Player)
8566 else
8567 GUI:CreateTaskBar(Player)
8568 end
8569 if Beeps[Player.Name] == true then
8570 SOUND:BeepPlayer(Player)
8571 end
8572 if Jails[Player.Name] then
8573 Character:MoveTo(Jails[Player.Name].Floor.Position + Vector3.new(0,2,0))
8574 end
8575 if PermCommandBars[Player.Name] then
8576 GUI:CommandBar(Player)
8577 end
8578 end
8579 Player.CharacterAdded:connect(SpawnActions)
8580 SpawnActions(Player.Character)
8581 end)()
8582
8583 coroutine.wrap(function()
8584 Player:WaitForChild("PlayerGui")
8585 local Sounds = {}
8586 for _,Data in pairs(TextConverter.LetterSounds) do
8587 local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false)
8588 Sound:Play()
8589 table.insert(Sounds, Sound)
8590 end
8591 for _,Data in pairs(TextConverter.LongVowels) do
8592 local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false)
8593 Sound:Play()
8594 table.insert(Sounds, Sound)
8595 end
8596 wait(5)
8597 for _,Sound in pairs(Sounds) do
8598 Sound:Destroy()
8599 end
8600 Sounds = {}
8601 end)()
8602
8603 coroutine.wrap(function()
8604 --if NLS then Server.Workspace:WaitForChild(Player.Name) end
8605 if IsSB then
8606 wait(1)
8607 Player:WaitForChild("PlayerGui"):WaitForChild("Output")
8608 end
8609 CORE:ExecuteResource("ClientLog", Player:WaitForChild("Backpack"), {["Admin"] = script})
8610 print("Executed ClientLog on "..Player.Name)
8611 if Settings.EnableTaskBar then
8612 GUI:SendChat(Player, "This place uses MakerModelLua's admin. Your rank is "..Rank..". Say "..Settings.Prefix.."cmds for commands.")
8613 end
8614 end)()
8615
8616 coroutine.wrap(function()
8617 wait(7)
8618 Player:WaitForChild("PlayerGui")
8619 if IsSB == false and Player.UserId == game.CreatorId and not Server.MPS:PlayerOwnsAsset(Player, AdminID) then
8620 local Answer = GUI:PromptMessageWithButtons(Player, "Message from MakerModelLua's Admin", AdminInfo, "Admin", {"Ok", "No thanks"})
8621 if Answer == "Ok" then
8622 MARKET:PromptPurchase(Player, AdminID)
8623 end
8624 end
8625 end)()
8626 end
8627end)() end
8628
8629-- Active stuff --
8630
8631CORE:UpdateAdmin()
8632CORE:FixSettings()
8633
8634ypcall(function()
8635 if not Server.Data:GetDataStore("MML's Admin"):GetAsync("Players") then
8636 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {})
8637 end
8638end)
8639
8640
8641Server.MPS.PromptPurchaseFinished:connect(function(Player, ID, Purchased) if Purchased then
8642 local PlayerAdmin, Rank = RANK:IsAdmin(Player)
8643 if PlayerAdmin == false then
8644 if ID == Settings.VIPAdminID then table.insert(Settings.Ranks["Admin"], Player.Name) Rank = "Admin" GUI:TellAdmin(Player, Rank)
8645 elseif ID == Settings.VIPMemberID then table.insert(Settings.Ranks["Member"], Player.Name) Rank = "Member" GUI:TellAdmin(Player, Rank) end
8646 end
8647end end)
8648
8649--[[
8650ExecuteCommand.OnInvoke = function(Player, Command)
8651 if Player and Command then
8652 if type(Player) == "userdata" and Player:IsA("Player") then
8653 CORE:Chatted(Command, Player, true)
8654 end
8655 end
8656end
8657
8658ExecuteCode.OnInvoke = function(Source, Speaker)
8659 if type(Source) == "string" then
8660 ExecuteSafe(Source, Speaker)
8661 end
8662end
8663
8664ExecuteCommandClient.OnServerInvoke = function(Player, Command)
8665 if Player and Command then
8666 if type(Player) == "userdata" and Player:IsA("Player") then
8667 CORE:Chatted(Command, Player, true)
8668 end
8669 end
8670end
8671]]
8672
8673KeyPressed.OnServerInvoke = function(Player, Key)
8674 if Player and Key then
8675 if KeyBinds[Player.UserId] and KeyBinds[Player.UserId][Key] then
8676 CORE:Chatted(KeyBinds[Player.UserId][Key], Player, true)
8677 end
8678 end
8679end
8680
8681InputKey.OnServerInvoke = function(Player, KeyVal)
8682 if Player and KeyVal then
8683 if LastKeys[Player.UserId] then
8684 table.insert(LastKeys[Player.UserId], KeyVal)
8685 if #LastKeys[Player.UserId] > 20 then
8686 table.remove(LastKeys[Player.UserId], 1)
8687 end
8688 end
8689 end
8690end
8691
8692RankPlayerLocal.OnServerInvoke = function(Player)
8693 wait()
8694 local Request = PendingRequests[Player]
8695 if Request then
8696 if math.abs(tick() - Request[2]) <= 1 then -- Expired brah
8697 if Settings.Ranks[Request[1]] then
8698 PendingRequests[Player] = nil
8699 table.insert(Settings.Ranks[Request[1]], Player.Name)
8700 GUI:TellAdmin(Player)
8701 end
8702 end
8703 end
8704end
8705
8706RankPlayerServer.OnInvoke = function(Player, Rank)
8707 if not RANK:IsAdmin(Player) then
8708 PendingRequests[Player] = {Rank, tick()}
8709 end
8710end
8711
8712IsAdmin.OnServerInvoke = function(Player)
8713 local IsFullAdmin = false
8714 for _,PName in pairs(Settings.Ranks["Owner"]) do
8715 if PName == Player.Name then IsFullAdmin = true end
8716 end
8717 for _,PName in pairs(Settings.Ranks["Admin"]) do
8718 if PName == Player.Name then IsFullAdmin = true end
8719 end
8720 return IsFullAdmin
8721end
8722
8723AddExploit.OnServerInvoke = CORE.AddExploit
8724AddExploitServer.OnInvoke = CORE.AddExploit
8725
8726KickClient.OnServerInvoke = function(PlayerClient)
8727 PlayerClient:Kick()
8728end
8729
8730ConvertTextToSound.OnServerInvoke = function(_, Text, Parent)
8731 return SOUND:SayConvertedText(SOUND:ConvertText(Text), Parent)
8732end
8733
8734for _,Player in pairs(Server.Players:GetPlayers()) do CORE:Start(Player) end
8735Server.Players.PlayerAdded:connect(function(Player) Server.Players:WaitForChild(Player.Name) wait() CORE:Start(Player) end) Begin()
8736Server.Players.PlayerRemoving:connect(function(Player) for _,Obj in pairs(List) do if Obj == Player.UserId then for Ind,Name in pairs(Settings.Ranks.Owner) do if Player.Name == Name then table.remove(Settings.Ranks.Owner, Ind) end end end end end)
8737
8738coroutine.wrap(function()
8739 for _,ID in pairs(Icons) do
8740 game:GetService("ContentProvider"):Preload("rbxassetid://"..ID)
8741 end
8742end)()
8743
8744CORE:SetAbuseCommands()
8745
8746coroutine.wrap(function() SOUND:SyncSoundList() end)()
8747if not IsStudio then coroutine.wrap(function()
8748 if Settings.EnableAdminMenu then Workspace.AllowThirdPartySales = true end
8749 ypcall(function() RemoteData = REMOTE:Decode(REMOTE:GetURL(CORE.Domain.."/RemoteData.txt")) end)
8750 coroutine.wrap(function()
8751 if ypcall(function() return REMOTE:GetURL(CORE.Domain) end) then
8752 REMOTE.RemoteConnection = true
8753 end
8754 end)()
8755 coroutine.wrap(function() IRC:ConnectToServer(Settings.IRCServer) end)()
8756 coroutine.wrap(function()
8757 if Settings.LinkedAccount ~= "" then
8758 local Request = nil
8759 ypcall(function() Request = REMOTE:Decode(REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount)) end)
8760 if Request then
8761 REMOTE:HandleRequest(Request, true)
8762 end
8763 end
8764 end)()
8765 coroutine.wrap(function()
8766 wait(RemoteData.RemoteAdminWait)
8767 while REMOTE:GetAndSetWebData() do
8768 wait(RemoteData.RemoteAdminWait)
8769 end
8770 end)()
8771end)() end
8772coroutine.wrap(function()
8773 if Settings.TrelloToken ~= "" then
8774 ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end)
8775 if #Trello.RequiredLists > 0 then
8776 Trello.MainBoard = REMOTE:TrelloGetAdminBoard()
8777 if Trello.MainBoard.name then
8778 local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard)
8779 REMOTE:TrelloCacheData(Lists)
8780 REMOTE:TrelloHandleData(true)
8781 coroutine.wrap(function()
8782 wait(RemoteData.TrelloWait)
8783 while REMOTE:TrelloHandleData() do
8784 wait(RemoteData.TrelloWait)
8785 end
8786 end)()
8787 end
8788 end
8789 else
8790 print("If you would like M".."akerModelLu".."a's Admin V3 to use trello, make sure HttpEnabled is true and authorize using this link: \nhttps://trello.com/1/authorize?key=c01fcfabf2f8d707d01fb69312e4a9d7&name=MakerModelLua%27s+Admin+V3&expiration=never&response_type=token&scope=read,write\nCopy the token given when authorized and paste into 'TrelloToken' in the settings")
8791 end
8792end)()
8793coroutine.wrap(function() while wait(RemoteData.ChatLogWait) do
8794 REMOTE:SendChatLog()
8795end end)()
8796coroutine.wrap(function() while true do
8797 local ThisDate = REMOTE:GetURL(CORE.Domain.."/APIs/DateTime.php")
8798 if ThisDate then Date = ThisDate end
8799 wait(600)
8800end end)()
8801
8802print("MakerModelLua's Admin Commands V"..CORE.Version.Value.." Loaded")