Advertisement
Vintage-Furry

admen

Dec 27th, 2018
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.85 KB | None | 0 0
  1. if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
  2. local Player,Mouse,mouse,UserInputService,ContextActionService = owner
  3. do
  4. print("FE Compatibility code by Mokiros | Translated to FE by iPxter")
  5. script.Parent = Player.Character
  6.  
  7. --RemoteEvent for communicating
  8. local Event = Instance.new("RemoteEvent")
  9. Event.Name = "UserInput_Event"
  10.  
  11. --Fake event to make stuff like Mouse.KeyDown work
  12. local function fakeEvent()
  13. local t = {_fakeEvent=true,Connect=function(self,f)self.Function=f end}
  14. t.connect = t.Connect
  15. return t
  16. end
  17.  
  18. --Creating fake input objects with fake variables
  19. local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
  20. local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
  21. local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
  22. CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
  23. end}
  24. --Merged 2 functions into one by checking amount of arguments
  25. CAS.UnbindAction = CAS.BindAction
  26.  
  27. --This function will trigger the events that have been :Connect()'ed
  28. local function te(self,ev,...)
  29. local t = m[ev]
  30. if t and t._fakeEvent and t.Function then
  31. t.Function(...)
  32. end
  33. end
  34. m.TrigEvent = te
  35. UIS.TrigEvent = te
  36.  
  37. Event.OnServerEvent:Connect(function(plr,io)
  38. if plr~=Player then return end
  39. if io.isMouse then
  40. m.Target = io.Target
  41. m.Hit = io.Hit
  42. else
  43. local b = io.UserInputState == Enum.UserInputState.Begin
  44. if io.UserInputType == Enum.UserInputType.MouseButton1 then
  45. return m:TrigEvent(b and "Button1Down" or "Button1Up")
  46. end
  47. for _,t in pairs(CAS.Actions) do
  48. for _,k in pairs(t.Keys) do
  49. if k==io.KeyCode then
  50. t.Function(t.Name,io.UserInputState,io)
  51. end
  52. end
  53. end
  54. m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
  55. UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false)
  56. end
  57. end)
  58. Event.Parent = NLS([==[
  59. local Player = game:GetService("Players").LocalPlayer
  60. local Event = script:WaitForChild("UserInput_Event")
  61.  
  62. local UIS = game:GetService("UserInputService")
  63. local input = function(io,a)
  64. if a then return end
  65. --Since InputObject is a client-side instance, we create and pass table instead
  66. Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState})
  67. end
  68. UIS.InputBegan:Connect(input)
  69. UIS.InputEnded:Connect(input)
  70.  
  71. local Mouse = Player:GetMouse()
  72. local h,t
  73. --Give the server mouse data 30 times every second, but only if the values changed
  74. --If player is not moving their mouse, client won't fire events
  75. while wait(1/30) do
  76. if h~=Mouse.Hit or t~=Mouse.Target then
  77. h,t=Mouse.Hit,Mouse.Target
  78. Event:FireServer({isMouse=true,Target=t,Hit=h})
  79. end
  80. end]==],Player.Character)
  81. Mouse,mouse,UserInputService,ContextActionService = m,m,UIS,CAS
  82. end
  83.  
  84. --Converted with ttyyuu12345's model to script plugin v4
  85. function sandbox(var,func)
  86. local env = getfenv(func)
  87. local newenv = setmetatable({},{
  88. __index = function(self,k)
  89. if k=="script" then
  90. return var
  91. else
  92. return env[k]
  93. end
  94. end,
  95. })
  96. setfenv(func,newenv)
  97. return func
  98. end
  99. cors = {}
  100. mas = Instance.new("Model",game:GetService("Lighting"))
  101. Model0 = Instance.new("Model")
  102. Folder1 = Instance.new("Folder")
  103. Script2 = Instance.new("Script")
  104. Script3 = Instance.new("Script")
  105. NumberValue4 = Instance.new("NumberValue")
  106. Folder5 = Instance.new("Folder")
  107. ModuleScript6 = Instance.new("ModuleScript")
  108. ModuleScript7 = Instance.new("ModuleScript")
  109. Folder8 = Instance.new("Folder")
  110. ModuleScript9 = Instance.new("ModuleScript")
  111. ModuleScript10 = Instance.new("ModuleScript")
  112. Folder11 = Instance.new("Folder")
  113. Model0.Name = "Admin_Useless"
  114. Model0.Parent = mas
  115. Folder1.Name = "Loader"
  116. Folder1.Parent = Model0
  117. Script2.Name = "Dropper"
  118. Script2.Parent = Folder1
  119. table.insert(cors,sandbox(Script2,function()
  120. --[[
  121. Clone and drop the loader so it can hide in nil.
  122. --]]
  123.  
  124. local loader = script.Parent.Loader:clone()
  125. loader.Parent = script.Parent
  126. loader.Name = "\0"
  127. loader.Archivable = false
  128. loader.Disabled = false
  129. end))
  130. Script3.Name = "Loader"
  131. Script3.Parent = Folder1
  132. table.insert(cors,sandbox(Script3,function()
  133. --[[
  134.  
  135. DEVELOPMENT MOVED!
  136.  
  137. NEW LOADER:
  138. https://www.roblox.com/library/2373505175/Adonis-Loader-BETA
  139.  
  140.  
  141. --]]
  142.  
  143.  
  144.  
  145.  
  146. ----------------------------------------------------------------------------------------
  147. -- Adonis Loader --
  148. ----------------------------------------------------------------------------------------
  149. -- Epix Incorporated. Not Everything is so Black and White. --
  150. ----------------------------------------------------------------------------------------
  151. -- Edit settings in-game or using the settings module in the Config folder --
  152. ----------------------------------------------------------------------------------------
  153. -- This is not designed to work in solo mode --
  154. ----------------------------------------------------------------------------------------
  155.  
  156. if _G["__Adonis_MUTEX"] and type(_G["__Adonis_MUTEX"])=="string" then
  157. warn("\n-----------------------------------------------"
  158. .."\nAdonis is already running! Aborting..."
  159. .."\nRunning Location: ".._G["__Adonis_MUTEX"]
  160. .."\nThis Location: "..script:GetFullName()
  161. .."\n-----------------------------------------------")
  162. script:Destroy()
  163. else
  164. _G["__Adonis_MUTEX"] = script:GetFullName()
  165.  
  166. local model = script.Parent.Parent
  167. local config = model.Config
  168. local core = model.Loader
  169.  
  170. local dropper = core.Dropper
  171. local loader = core.Loader
  172. local runner = script
  173.  
  174. local settings = config.Settings
  175. local plugins = config.Plugins
  176. local themes = config.Themes
  177.  
  178. local backup = model:Clone()
  179. local pEvent
  180.  
  181. local data = {
  182. Settings = {};
  183. Descriptions = {};
  184. ServerPlugins = {};
  185. ClientPlugins = {};
  186. Themes = {};
  187.  
  188. Model = model;
  189. Config = config;
  190. Core = core;
  191.  
  192. Loader = loader;
  193. Dopper = dropper;
  194. Runner = runner;
  195.  
  196. ModuleID = 2373501710;
  197. LoaderID = 2373505175;
  198.  
  199. DebugMode = false;
  200. }
  201.  
  202. --// Init
  203. script:Destroy()
  204. model.Name = math.random()
  205. local moduleId = data.ModuleID
  206. local a,setTab = pcall(require,settings)
  207. if not a then
  208. warn'::Adonis:: Settings module errored while loading; Using defaults;'
  209. setTab = {}
  210. end
  211. data.Settings, data.Descriptions, data.Order = setTab.Settings,setTab.Descriptions,setTab.Order
  212. for _,Plugin in next,plugins:GetChildren()do if Plugin.Name:sub(1,8)=="Client: " then table.insert(data.ClientPlugins,Plugin) elseif Plugin.Name:sub(1,8)=="Server: " then table.insert(data.ServerPlugins,Plugin) else warn("Unknown Plugin Type for "..tostring(Plugin)) end end
  213. for _,Theme in next,themes:GetChildren()do table.insert(data.Themes,Theme) end
  214. if data.DebugMode then moduleId = model.Parent.MainModule end
  215. local module = require(moduleId)
  216. local response = module(data)
  217. if response == "SUCCESS" then
  218. if (data.Settings and data.Settings.HideScript) and not data.DebugMode then
  219. model.Parent = nil
  220. game:BindToClose(function() model.Parent = game:GetService("ServerScriptService") model.Name = "Adonis_Loader" end)
  221. end
  222. model.Name = "Adonis_Loader"
  223. else
  224. error("MainModule failed to load")
  225. end
  226. end
  227.  
  228. --[[
  229. --___________________________________________________________________________________________--
  230. --___________________________________________________________________________________________--
  231. --___________________________________________________________________________________________--
  232. --___________________________________________________________________________________________--
  233.  
  234. ___________ .__ .___
  235. \_ _____/_____ |__|__ ___ | | ____ ____
  236. | __)_\____ \| \ \/ / | |/ \_/ ___\
  237. | \ |_> > |> < | | | \ \___
  238. /_______ / __/|__/__/\_ \ |___|___| /\___ > /\
  239. \/|__| \/ \/ \/ \/
  240. --------------------------------------------------------
  241. Epix Incorporated. Not Everything is so Black and White.
  242. --------------------------------------------------------
  243.  
  244. --___________________________________________________________________________________________--
  245. --___________________________________________________________________________________________--
  246. --___________________________________________________________________________________________--
  247. --___________________________________________________________________________________________--
  248. --]]
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256. end))
  257. Script3.Disabled = true
  258. NumberValue4.Name = "v1.5.8"
  259. NumberValue4.Parent = Model0
  260. Folder5.Name = "Config"
  261. Folder5.Parent = Model0
  262. ModuleScript6.Name = "API"
  263. ModuleScript6.Parent = Folder5
  264. table.insert(cors,sandbox(ModuleScript6,function()
  265. --[[
  266. --// INCOMPLETE; WILL FINISH LATER
  267.  
  268. Adonis API Documentation for developers
  269.  
  270. Require:
  271. Adonis' MainModule can be loaded by using require(359948692)()
  272. - This allows you to require the module via the console and test things per server
  273. without having to add the loader and save the game;
  274. - If you want to edit things like settings, themes, or plugins you can do the following:
  275. local data = {
  276. Settings = {
  277. Admins = {"SomeGuy"}
  278. };
  279. Themes = {
  280. game.Workspace.ThemeFolder1;
  281. game.Workspace.ThemeFolder2;
  282. };
  283. Plugins = {
  284. game.Workspace.Plugin1;
  285. game.Workspace.Plugin2;
  286. }
  287. require(359948692)(data)
  288.  
  289. - The MainModule will use a set of default settings for any setting not provided
  290.  
  291.  
  292. _G.Adonis:
  293. Read-only table in _G that can be used to access certain things in Adonis from other server scripts
  294.  
  295. Functions:
  296. _G.Adonis.Access(accessKey, serverSubTable)
  297. - Returns a read-only version of a server subtable; allowing you to use all of it's functions
  298. - Settings can be changed in the Settings module for what to allow access to and to change if scripts can read/write
  299.  
  300. _G.Adonis.CheckAdmin(player)
  301. - Returns true if the player is an Adonis admin
  302.  
  303. _G.Adonis.GetLevel(player)
  304. - Returns a player's admin level
  305. - Levels:
  306. 0 - Player
  307. 1 - Moderator
  308. 2 - Admin
  309. 3 - Owner
  310. 4 - Creators (basically place owners)
  311. 5 - Place owner (the person who actually owns the place)
  312.  
  313. _G.Adonis.CheckDonor(player)
  314. - Returns true if the player is an Adonis donor
  315.  
  316. _G.Adonis.CheckAgent(player)
  317. - Returns true if the player is a Trello agent
  318.  
  319. _G.Adonis.SetLighting(property, value)
  320. - Sets the lighting property for the server and all clients
  321. - Mainly used for local lighting to update all clients
  322.  
  323. _G.Adonis.SetPlayerLighting(player, property, value)
  324. - Sets the lighting property for a specific player
  325. - Requires LocalLighting be enabled in settings in order to workspace
  326.  
  327. _G.Adonis.NewParticle(part, type, properties)
  328. - Lets you create local particles on the target part with properties defined in the properties table
  329. - Type can be any classname that is place into a brick and has the .Enabled property
  330. - Part must be a weldable part
  331. _G.Adonis.RemoveParticle(part, name)
  332. - Removes local particles named <name> for all players from <part>
  333.  
  334. _G.Adonis.NewLocal(player, type, properties, newParent)
  335. - Creates Instance.new(type) with properties <properties table>
  336. in local parent newParent for player
  337. - newParents: "Camera", "LocalContainer", "PlayerGui"
  338. - Defaults to LocalContainer if no parent is given
  339.  
  340. _G.Adonis.MakeLocal(player, object, newParent)
  341. - Localizes object for player by moving it to newParent (a local container)
  342. - newParents: "Camera", "LocalContainer", "PlayerGui"
  343. - Defaults to LocalContainer if no parent is given
  344.  
  345. _G.Adonis.MoveLocal(player, object, oldParent, newParent)
  346. - Same as MakeLocal except moves an existing local based on name/object provided
  347.  
  348. _G.Adonis.RemoveLocal(player, object, oldParent)
  349. - Finds and removes object from oldParent (a local container)
  350. for player
  351.  
  352.  
  353. Service:
  354. Metatable used to access ROBLOX services and some utility functions
  355. For example: service.Players
  356.  
  357. Extra functions:
  358. service.Delete(object)
  359. - Uses service.Debris to delete an object; Works on some RobloxLocked objects
  360.  
  361. service.HookEvent(eventName, function)
  362. - Hooks events fired by service.FireEvent; Useful for running PlayerAdded after the admin finishes loading them
  363. - Returns a table conaining the UnHook() function to "unhook" the event
  364.  
  365. service.FireEvent(eventName, params)
  366. - Fires all functions for a specific event added by service.HookEvent
  367.  
  368. service.StartLoop(loopName, delay, function)
  369. - Starts an infinite loop that can be stopped using service.StopLoop(loopName)
  370. - Delay accepts a number, "Heartbeat", or "Stepped"
  371.  
  372. service.StopLoop(loopName)
  373. - Stops a loop started by service.StartLoop
  374.  
  375. service.ReadOnly(table)
  376. - Returns a read-only version of the table supplied to it
  377.  
  378. service.GetPlayers(commandPlayer, nameString, dontError, isServer)
  379. - Finds players via their name/modifiers provided in nameString
  380. - If no args are given it will return a list of all players connected to the server, not just in game.Players
  381.  
  382. Events:
  383. service.Events.eventName
  384. - Returns a table containing :connect and :disconnect
  385. - Basically the same as service.HookEvent but more like a ROBLOX event
  386.  
  387. Event List:
  388. PlayerAdded
  389. - Runs after Adonis client finishes loading
  390. - Returns player
  391.  
  392. PlayerRemoving
  393. - Fired when a player leaves
  394. - Returns player
  395.  
  396. NetworkAdded
  397. - Fired when a new NetworkClient appears
  398. - Returns NetworkClient
  399.  
  400. NetworkRemoved
  401. - Fired when a NetworkClient is removed
  402. - Returns NetworkClient
  403.  
  404. PlayerChatted
  405. - Fired when player chats; Works with anything that fires server.Process.Chat; Including Adonis' custom chat
  406. - Returns player, msg
  407.  
  408. CharacterAdded
  409. - Fired when character loads; Does not use player.CharacterAdded
  410. - Returns player
  411.  
  412. ErrorMessage
  413. - Fired when an error is found
  414. - Returns message, trace, script
  415.  
  416. Output
  417. - Fired when anything prints
  418. - Returns message, type
  419.  
  420. CommandRan
  421. - Fired when a command is ran
  422. - Returns msg, command, args, table, index, ran, error
  423.  
  424. - msg is the message the player chatted
  425. - command is the command pulled from msg
  426. - args is a table containing supplied command arguments
  427. - table is the command table
  428. - index is it's position in server.Commands
  429. - ran returns true is the command ran successfully
  430. - error returns any errors from the command function
  431.  
  432. Server:
  433. Main script table containing most of the functions and variables used by the admin
  434.  
  435. Subtables:
  436. Logs
  437. Variables
  438. Core
  439. Remote
  440. Anti
  441. Functions
  442.  
  443.  
  444. --]]
  445. end))
  446. ModuleScript7.Name = "Settings"
  447. ModuleScript7.Parent = Folder5
  448. table.insert(cors,sandbox(ModuleScript7,function()
  449. local settings = {}
  450. local descs = {}
  451.  
  452.  
  453. --------------
  454. -- SETTINGS --
  455. --------------
  456. --[[
  457.  
  458. --// Basic Lua Info
  459.  
  460. This is only here to help you when editing settings so you understand how they work
  461. and don't break something.
  462.  
  463. Anything that looks like setting = {} is known as a table.
  464. Tables contain things; like the Lua version of a box.
  465. An example of a table would be setting = {"John","Mary","Bill"}
  466. You can have tables inside of tables, such in the case of setting = {{Group=1234,Rank=123,Type="Admin"}}
  467. Just like real boxes, tables can contain pretty much anything including other tables.
  468.  
  469. Anything that looks like "Bob" is what's known as a string. Strings
  470. are basically plain text; setting = "Bob" would be correct however
  471. setting = Bob would not; because if it's not surrounded by quotes Lua will think
  472. that Bob is a variable; Quotes indicate something is a string and therefor not a variable/number/code
  473.  
  474. Numbers do not use quotes. setting = 56
  475.  
  476. This green block of text you are reading is called a comment. It's like a message
  477. from the programmer to anyone who reads their stuff. Anything in a comment will
  478. not be seen by Lua.
  479.  
  480. Incase you don't know what Lua is; Lua is the scripting language ROBLOX uses...
  481. so every script you see (such as this one) and pretty much any code on ROBLOX is
  482. written in Lua.
  483.  
  484.  
  485.  
  486.  
  487. --// Settings [READ IF CONFUSED]
  488.  
  489. If you see something like "Format: 'Username:UserId'" it means that anything you put
  490. in that table must follow one of the formats next to Format:
  491.  
  492. For instance if I wanted to give admin to a player using their username, userid, a group they are in
  493. or an item they own I would do the following with the settings.Admins table:
  494.  
  495. The format for the Admins' table's entries is "Username"; or "Username:UserId"; or UserId; or "Group:GroupId:GroupRank" or "Item:ItemID"
  496. This means that if I want to admin Bobjenkins123 who has a userId of 1234567, is in
  497. group "BobFans" (group ID 7463213) under the rank number 234, or owns the item belonging to ID 1237465
  498. I can do any of the following:
  499.  
  500. settings.Admins = {"Bobjenkins123","Bobjenkins123:1234567",1234567,"Group:BobFans:7463213:234","Item:1237465"}
  501.  
  502.  
  503. If I wanted to make it so rank 134 in group 1029934 and BobJenkins123 had mod admin I would do
  504. settings.Moderators = {"Group:1029943:134","BobJenkins123"}
  505.  
  506.  
  507. I was going to change the admin rank stuff but I figured it would confuse people too much, so I left it as mods/admins/owners ;p
  508.  
  509.  
  510. --// Admins
  511.  
  512. settings.Moderators = {"Sceleratis";"BobJenkins:1237123";1237666;"Group:181:255";"Item:1234567"}
  513. This will make the person with the username Sceleratis, or the name BobJenkins, or the ID 1237123 OR 123766,
  514. or is in group 181 in the rank 255, or owns the item belonging to the ID 1234567 a moderator
  515.  
  516. If I wanted to give the rank 121 in group 181 Owner admin I would do:
  517. settings.Owners = {"Group:181:121"}
  518. See? Not so hard is it?
  519.  
  520. If I wanted to add group 181 and all ranks in it to the :slock whitelist I would do;
  521. settings.Whitelist = {"Group:181";}
  522.  
  523. I can do the above if I wanted to give everyone in a group admin for any of the other admin tables
  524.  
  525.  
  526.  
  527. --// Command Permissions
  528.  
  529. You can set the permission level for specific commands using setting.Permissions
  530. If I wanted to make it so only owners+ can use :ff player then I would do:
  531.  
  532. settings.Permissions = {":ff:Owners"}
  533.  
  534. :ff is the Command ":ff scel" and 3 is the NewLevel
  535.  
  536. Permissions Levels:
  537. Players
  538. Moderators
  539. Admins
  540. Owners
  541. Creators
  542.  
  543. Note that when changing command permissions you MUST include the prefix;
  544. So if you change the prefix to $ you would need to do $ff instead of :ff
  545.  
  546.  
  547. --// Trello
  548.  
  549. The Trello abilities of the script allow you to manage lists and permissions via
  550. a Trello board; The following will guide you through the process of setting up a board;
  551.  
  552. 1. Sign up for an account at http://trello.com
  553. 2. Create a new board
  554. http://prntscr.com/b9xljn
  555. http://prntscr.com/b9xm53
  556. 3. Get the board ID;
  557. http://prntscr.com/b9xngo
  558. 4. Set settings.Trello_Primary to your board ID
  559. 5. Set settings.Trello.Enabled to true
  560. 6. Congrats! The board is ready to be used;
  561. 7. Create a list and add cards to it;
  562. http://prntscr.com/b9xswk
  563.  
  564. - You can view lists in-game using :viewlist ListNameHere
  565.  
  566. Lists:
  567. Moderators - Card Format: Same as settings.Moderators
  568. Admins - Card Format: Same as settings.Admins
  569. Owners - Card Format: Same as settings.Owners
  570. Creators - Card Format: Same as settings.Creators
  571. Agents - Card Format: Same as settings.Admins
  572. Banlist - Card Format: Same as settings.Banned
  573. Mutelist - Card Format: Same as settings.Muted
  574. Blacklist - Card Format: Same as settings.Blacklist
  575. Whitelist - Card Format: Same as settings.Whitelist
  576. Permissions - Card Format: Same as settings.Permissions
  577. Music - Card Format: SongName:AudioID
  578. Commands - Card Format: Command (eg. :ff bob)
  579.  
  580. Card format refers to how card names should look
  581.  
  582.  
  583. MAKE SURE YOU SET settings.DataStoreKey TO SOMETHING ABSOLUTELY RANDOM;
  584. --]]
  585.  
  586.  
  587. settings.HideScript = true -- Disable if your game saves; When the game starts the Adonis_Loader model will be hidden so other scripts cannot access the settings module
  588. settings.DataStore = "Adonis_1" -- DataStore the script will use for saving data; Changing this will lose any saved data
  589. settings.DataStoreKey = "CHANGE_THIS" -- CHANGE THIS TO SOMETHING RANDOM! Key used to encrypt all datastore entries; Changing this will lose any saved data
  590. settings.DataStoreEnabled = true -- Disable if you don't want to load settings and admins from the datastore; PlayerData will still save
  591. settings.Storage = game:service("ServerStorage") -- Where things like tools are stored
  592.  
  593. settings.Theme = "Default" -- UI theme;
  594. settings.MobileTheme = "Mobilius" -- Theme to use on mobile devices; Some UI elements are disabled
  595.  
  596. settings.Moderators = {} -- Mods; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  597. settings.Admins = {} -- Admins; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  598. settings.Owners = {"EzzyCrafts2"} -- Head Admins; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  599. settings.Creators = {"EzzyCrafts2"} -- Place Owner; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  600. settings.Banned = {} -- List of people banned from the game Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  601. settings.Muted = {} -- List of people muted Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  602. settings.Blacklist = {} -- List of people banned from using admin Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  603. settings.Whitelist = {} -- People who can join if whitelist enabled Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";}
  604. settings.Permissions = {} -- Command permissions; Format: {"Command:NewLevel";}
  605. settings.MusicList = {}; -- List of songs to appear in the script Format: {{Name = "somesong",ID = 1234567},{Name = "anotherone",ID = 1243562}}
  606. settings.CapeList = {}; -- List of capes Format: {{Name = "somecape",Material = "Fabric",Color = "Bright yellow",ID = 12345567,Reflectance = 1},{etc more stuff here}}
  607. settings.CustomRanks = {}; -- List of custom AdminLevel ranks Format: {RankName = {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";};}
  608.  
  609. settings.OnStartup = {}; -- List of commands ran at server start Format: {":notif TestNotif"}
  610. settings.OnJoin = {}; -- List of commands ran as player on join (ignores adminlevel) Format: {":cmds"}
  611. settings.OnSpawn = {}; -- List off commands ran as player on spawn (ignores adminlevel) Format: {"!fire Really red",":ff me"}
  612.  
  613. settings.SaveAdmins = true -- If true anyone you :admin or :owner in-game will save
  614. settings.WhitelistEnabled = false -- If true enables the whitelist/server lock; Only lets admins & whitelisted users join
  615.  
  616. settings.Prefix = ":" -- The : in :kill me
  617. settings.PlayerPrefix = "!" -- The ! in !donate; Mainly used for commands that any player can run; Do not make it the same as settings.Prefix
  618. settings.SpecialPrefix = "" -- Used for things like "all", "me" and "others" (If changed to ! you would do :kill !me)
  619. settings.SplitKey = " " -- The space in :kill me (eg if you change it to / :kill me would be :kill/me)
  620. settings.BatchKey = "|" -- :kill me | :ff bob | :explode scel
  621. settings.ConsoleKeyCode = "Quote" -- Keybind to open the console; Rebindable per player in userpanel; KeyCodes: http://wiki.roblox.com/index.php?title=API:Enum/KeyCode
  622.  
  623. settings.HttpWait = 60; -- How long things that use the HttpService will wait before updating again
  624. settings.Trello_Enabled = false; -- Are the Trello features enabled?
  625. settings.Trello_Primary = ""; -- Primary Trello board
  626. settings.Trello_Secondary = {"9HH6BEX2"}; -- Secondary Trello boards Format: {"BoardID";"BoardID2","etc"}
  627. settings.Trello_AppKey = ""; -- Your Trello AppKey Link: https://trello.com/app-key
  628. settings.Trello_Token = ""; -- Trello token (DON'T SHARE WITH ANYONE!) Link: https://trello.com/1/connect?name=Trello_API_Module&response_type=token&expires=never&scope=read,write&key=YOUR_APP_KEY_HERE
  629.  
  630. settings.G_API = true -- If true allows other server scripts to access certain functions described in the API module through _G.Adonis
  631. settings.G_Access = false -- If enabled allows other scripts to access Adonis using _G.Adonis.Access; Scripts will still be able to do things like _G.Adonis.CheckAdmin(player)
  632. settings.G_Access_Key = "Example_Key" -- Key required to use the _G access API; Example_Key will not work for obvious reasons
  633. settings.G_Access_Perms = "Read" -- Access perms
  634. settings.Allowed_API_Calls = {
  635. Client = false; -- Allow access to the Client (not recommended)
  636. Settings = false; -- Allow access to settings (not recommended)
  637. DataStore = false; -- Allow access to the DataStore (not recommended)
  638. Core = false; -- Allow access to the script's core table (REALLY not recommended)
  639. Service = false; -- Allow access to the script's service metatable
  640. Remote = false; -- Communication table
  641. HTTP = false; -- HTTP related things like Trello functions
  642. Anti = false; -- Anti-Exploit table
  643. Logs = false;
  644. UI = false; -- Client UI table
  645. Admin = false; -- Admin related functions
  646. Functions = false; -- Functions table (contains functions used by the script that don't have a subcategory)
  647. Variables = true; -- Variables table
  648. API_Specific = true; -- API Specific functions
  649. }
  650.  
  651. settings.FunCommands = true -- Are fun commands enabled?
  652. settings.PlayerCommands = true -- Are players commands enabled?
  653. settings.ChatCommands = true -- If false you will not be able to run commands via the chat; Instead you MUST use the console or you will be unable to run commands
  654. settings.CreatorPowers = true -- Gives me creator level admin; This is strictly used for debugging; I can't debug without full access to the script
  655. settings.CodeExecution = true -- Enables the use of code execution in Adonis; Scripting related and a few other commands require this
  656.  
  657. settings.BanMessage = "Banned" -- Message shown to banned users
  658. settings.LockMessage = "Not Whitelisted" -- Message shown to people when they are kicked while the game is :slocked
  659. settings.SystemTitle = "System Message" -- Title to display in :sm
  660.  
  661. settings.MaxLogs = 500 -- Maximum logs to save before deleting the oldest; Too high can lag the game
  662. settings.Notification = true -- Whether or not to show the "You're an admin" and "Updated" notifications
  663. settings.SongHint = true -- Display a hint with the current song name and ID when a song is played via :music
  664.  
  665. settings.AutoClean = false -- Will auto clean service.Workspace of things like hats and tools
  666. settings.AutoCleanDelay = 60 -- Time between auto cleans
  667.  
  668. settings.CustomChat = false -- Custom chat
  669. settings.PlayerList = false -- Custom playerlist
  670. settings.Console = true -- Command console
  671.  
  672. settings.HelpSystem = true -- Allows players to call admins for help using !help
  673. settings.HelpButton = true -- Shows a little help button in the bottom right corner
  674.  
  675. settings.DonorCapes = true -- Donors get to show off their capes; Not disruptive :)
  676. settings.DonorCommands = true -- Show your support for the script and let donors use harmless commands like !sparkles
  677. settings.LocalCapes = false -- Makes Donor capes local so only the donors see their cape [All players can still disable capes locally]
  678.  
  679. settings.LocalLighting = true -- Enables local lighting; Prevents changes to Lighting and enables the ability for player specific lighting changes; Server scripts can set lighting for the server or specific players using _G.Adonis.SetLighting(property,value) or for players _G.Adonis.SetPlayerLighting(player,property,value)
  680. settings.ReplicationLogs = false -- [May cause lag] Attempts to log who makes and deletes objects in the game
  681. settings.NetworkOwners = false -- [May cause lag] Logs the first network owners of parts created in workspace; Can be used to see who made parts (only parts) in workspace
  682. settings.Detection = true -- Attempts to detect certain known exploits
  683. settings.CheckClients = true -- Checks clients every minute or two to make sure they are still active
  684.  
  685. settings.AntiNil = true -- Try's to prevent non-admins from hiding in "nil"
  686. settings.AntiSpeed = true -- Attempts to detect speed exploits
  687. settings.AntiNoclip = true -- Attempts to detect noclipping and kills the player if found
  688. settings.AntiParanoid = false -- Attempts to detect paranoid and kills the player if found
  689. settings.AntiDeleteTool = false -- [May break guns] Attempts to block use of the delete tool and other building tools
  690. settings.AntiDelete = false -- [May cause intense lag] You should enabled Filtering instead! Attempts to prevent deleting of objects in the game (may cause lag; Not recommended for complex games that constantly make/remove things; Should use Filtering instead...)
  691. settings.AntiUnAnchor = false -- [May cause lag] Attempts to prevent the unanchoring of parts
  692. settings.AntiLeak = false -- Attempts to prevent place downloading/saving; Do not use if game saves
  693. settings.AntiBillboardImage = false -- Attempts to find billboard images and remove them; These are usually used to insert inappropriate images into the game
  694. settings.AntiInsert = { -- Can cause lag; You should enabled Filtering instead! Class names blocked from being added to the game or new properties to set for them; Will alter properties if Action = "Change" or delete the object if Action = "Delete"; Add classes to alter/block
  695. Enabled = false; -- If AntiInsert is enabled or not
  696. Explosion = { -- The ClassName to look for; You can add new ClassNames by following the Format provided
  697. Action = "None"; -- Can be set to "Change" to use the set properties or "Delete" to delete the object if it's added; Set to "None" to disable
  698. Properties = { -- Properties to use if change is true; The default properties will basically nerf any explosions
  699. BlastPressure = 0;
  700. BlastRadius = 0;
  701. DestroyJoinRadiusPercent = 0;
  702. ExplosionType = "NoCraters";
  703. }
  704. };
  705. Decal = { -- I included some common classnames to replace settings like AntiDecal, NerfExplosions, and AntiSound
  706. Action = "None"; -- Set to "Delete" to prevent decals from being added
  707. };
  708. Sound = {
  709. Action = "None"; -- Set to "Delete" to prevent new sounds from being added (WARNING THIS IS ALL SOUNDS INCLDING SCRIPT MADE ONES)
  710. };
  711. }
  712.  
  713. ---------------------
  714. -- END OF SETTINGS --
  715. ---------------------
  716.  
  717. --// Setting descriptions used for the in-game settings editor;
  718.  
  719. descs.HideScript = [[ Disable if your game saves; When the game starts the Adonis_Loader model will be hidden so other scripts cannot access the settings module ]]
  720. descs.DataStore = [[ DataStore the script will use for saving data; Changing this will lose any saved data ]]
  721. descs.DataStoreKey = [[ Key used to encode all datastore entries; Changing this will lose any saved data ]]
  722. descs.DataStoreEnabled = [[ Disable if you don't want settings and admins to be saveable in-game; PlayerData will still save ]]
  723. descs.Storage = [[ Where things like tools are stored ]]
  724.  
  725. descs.Theme = [[ UI theme; ]]
  726. descs.MobileTheme = [[ Theme to use on mobile devices; Mobile themes are optimized for smaller screens; Some GUIs are disabled ]]
  727.  
  728. descs.Moderators = [[ Mods; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  729. descs.Admins = [[ Admins; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  730. descs.Owners = [[ Head Admins; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  731. descs.Creators = [[ Anyone to be identified as a place owner; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  732. descs.Banned = [[ List of people banned from the game; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  733. descs.Muted = [[ List of people muted; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  734. descs.Blacklist = [[ List of people banned from using admin; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  735. descs.Whitelist = [[ People who can join if whitelist enabled; Format: {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";} ]]
  736. descs.Permissions = [[ Command permissions; Format: {"Command:NewLevel";} ]]
  737. descs.MusicList = [[ List of songs to appear in the script; Format: {{Name = "somesong",ID = 1234567},{Name = "anotherone",ID = 1243562}} ]]
  738. descs.CapeList = [[ List of capes; Format: {{Name = "somecape",Material = "Fabric",Color = "Bright yellow",ID = 12345567,Reflectance = 1},{etc more stuff here}} ]]
  739. descs.CustomRanks = [[ List of custom AdminLevel ranks Format: {RankName = {"Username"; "Username:UserId"; UserId; "Group:GroupId:GroupRank"; "Group:GroupId"; "Item:ItemID";};} ]]
  740.  
  741. descs.OnStartup = [[ List of commands ran at server start Format: {":notif TestNotif"} ]]
  742. descs.OnJoin = [[ List of commands ran as player on join (ignores adminlevel) Format: {":cmds"} ]]
  743. descs.OnSpawn = [[ List off commands ran as player on spawn (ignores adminlevel) Format: {"!fire Really red",":ff me"} ]]
  744.  
  745. descs.SaveAdmins = [[ If true anyone you :mod, :admin, or :owner in-game will save; This does not apply to helpers as they are considered temporary ]]
  746. descs.WhitelistEnabled = [[ If true enables the whitelist/server lock; Only lets admins & whitelisted users join ]]
  747.  
  748. descs.Prefix = [[ The : in :kill me ]]
  749. descs.PlayerPrefix = [[ The ! in !donate; Mainly used for commands that any player can run ]]
  750. descs.SpecialPrefix = [[ Used for things like "all", "me" and "others" (If changed to ! you would do :kill !me) ]]
  751. descs.SplitKey = [[ The space in :kill me (eg if you change it to / :kill me would be :kill/me) ]]
  752. descs.BatchKey = [[ :kill me | :ff bob | :explode scel ]]
  753. descs.ConsoleKeyCode = [[ Keybind to open the console ]]
  754.  
  755. descs.HttpWait = [[ How long things that use the HttpService will wait before updating again ]]
  756. descs.Trello_Enabled = [[ Are the Trello features enabled? ]]
  757. descs.Trello_Primary = [[ Primary Trello board ]]
  758. descs.Trello_Secondary = [[ Secondary Trello boards; Format: {"BoardID";"BoardID2","etc"} ]]
  759. descs.Trello_AppKey = [[ Your Trello AppKey; Link: https://trello.com/app-key ]]
  760. descs.Trello_Token = [[ Trello token (DON'T SHARE WITH ANYONE!); Link: https://trello.com/1/connect?name=Trello_API_Module&response_type=token&expires=never&scope=read,write&key=YOUR_APP_KEY_HERE ]]
  761.  
  762. descs.G_API = [[ If true allows other server scripts to access certain functions described in the API module through _G.Adonis ]]
  763. descs.G_Access = [[ If enabled allows other scripts to access Adonis using _G.Adonis.Access; Scripts will still be able to do things like _G.Adonis.CheckAdmin(player) ]]
  764. descs.G_Access_Key = [[ Key required to use the _G access API; Example_Key will not work for obvious reasons ]]
  765. descs.G_Access_Perms = [[ Access perms level ]]
  766. descs.Allowed_API_Calls = [[ Allowed calls ]]
  767.  
  768. descs.FunCommands = [[ Are fun commands enabled? ]]
  769. descs.PlayerCommands = [[ Are players commands enabled? ]]
  770. descs.ChatCommands = [[ If false you will not be able to run commands via the chat; Instead you MUST use the console or you will be unable to run commands ]]
  771.  
  772. descs.BanMessage = [[ Message shown to banned users ]]
  773. descs.LockMessage = [[ Message shown to people when they are kicked while the game is :slocked ]]
  774. descs.SystemTitle = [[ Title to display in :sm ]]
  775.  
  776. descs.CreatorPowers = [[ When true gives me place owner admin; This is strictly used for debugging; I can't debug without access to the script and specific owner commands ]]
  777. descs.MaxLogs = [[ Maximum logs to save before deleting the oldest; Too high can lag the game ]]
  778. descs.Notification = [[ Whether or not to show the "You're an admin" and "Updated" notifications ]]
  779. descs.CodeExecution = [[ Enables the use of code execution in Adonis; Scripting related and a few other commands require this ]]
  780. descs.SongHint = [[ Display a hint with the current song name and ID when a song is played via :music ]]
  781.  
  782. descs.AutoClean = [[ Will auto clean service.Workspace of things like hats and tools ]]
  783. descs.AutoCleanDelay = [[ Time between auto cleans ]]
  784.  
  785. descs.CustomChat = [[ Custom chat ]]
  786. descs.PlayerList = [[ Custom playerlist ]]
  787. descs.Console = [[ Command console ]]
  788.  
  789. descs.DonorCommands = [[ Show your support for the script and let donors use commands like !sparkles ]]
  790. descs.DonorCapes = [[ Determines if donors have capes ]]
  791. descs.LocalCapes = [[ Makes Donor capes local instead of removing them ]]
  792.  
  793. descs.HelpSystem = [[ Allows players to call admins for help using !help ]]
  794. descs.HelpButton = [[ Shows a little help button in the bottom right corner ]]
  795.  
  796. descs.LocalLighting = [[ Enables local lighting; Prevents changes to Lighting and enables the ability for player specific lighting changes; Server scripts can set lighting for the server or specific players using _G.Adonis.SetLighting(property,value) or for players _G.Adonis.SetPlayerLighting(player,property,value) ]]
  797. descs.ReplicationLogs = [[ Attempts to log who makes and deletes objects in the game ]]
  798. descs.NetworkOwners = [[ Logs the first network owners of parts created in workspace; Can be used to see who made parts (only parts) in workspace ]]
  799. descs.Detection = [[ Attempts to detect certain known exploits ]]
  800. descs.CheckClients = [[ Checks clients every minute or two to make sure they are still active ]]
  801.  
  802. descs.AntiNil = [[ Try's to prevent non-admins from hiding in "nil" ]]
  803. descs.AntiSpeed = [[ Attempted to detect speed exploits ]]
  804. descs.AntiNoclip = [[ Attempts to detect noclipping and kills the player if found ]]
  805. descs.AntiParanoid = [[ Attempts to detect paranoid and kills the player if found ]]
  806. descs.AntiDeleteTool = [[ Attempts to block use of the delete tool and other building tools ]]
  807. descs.AntiDelete = [[ Can cause lag; You should enabled Filtering instead! Attempts to prevent deleting of objects in the game (may cause lag; Not recommended for complex games that constantly make/remove things; Should use Filtering instead...) ]]
  808. descs.AntiUnAnchor = [[ Attempts to prevent the unanchoring of parts ]]
  809. descs.AntiLeak = [[ Attempts to prevent place downloading/saving; Do not use if game saves ]]
  810. descs.AntiBillboardImage = [[ Attempts to find billboard images and remove them; These are usually used to insert inappropriate images into the game ]]
  811. descs.AntiInsert = [[ Can cause lag; You should enabled Filtering instead! Class names blocked from being added to the game or new properties to set for them; Will alter properties if Action = "Change" or delete the object if Action = "Delete"; Add classes to alter/block ]]
  812.  
  813. order = {
  814. "HideScript";
  815. "DataStore";
  816. "DataStoreKey";
  817. "DataStoreEnabled";
  818. "Storage";
  819. " ";
  820. "Theme";
  821. "MobileTheme";
  822. " ";
  823. "Moderators";
  824. "Admins";
  825. "Owners";
  826. "Creators";
  827. "Banned";
  828. "Muted";
  829. "Blacklist";
  830. "Whitelist";
  831. "MusicList";
  832. "CapeList";
  833. "CustomRanks";
  834. " ";
  835. "OnStartup";
  836. "OnJoin";
  837. "OnSpawn";
  838. " ";
  839. "SaveAdmins";
  840. "WhitelistEnabled";
  841. " ";
  842. "Prefix";
  843. "PlayerPrefix";
  844. "SpecialPrefix";
  845. "SplitKey";
  846. "BatchKey";
  847. "ConsoleKeyCode";
  848. " ";
  849. "HttpWait";
  850. "Trello_Enabled";
  851. "Trello_Primary";
  852. "Trello_Secondary";
  853. "Trello_AppKey";
  854. "Trello_Token";
  855. " ";
  856. "G_API";
  857. "G_Access";
  858. "G_Access_Key";
  859. "G_Access_Perms";
  860. "Allowed_API_Calls";
  861. " ";
  862. "FunCommands";
  863. "PlayerCommands";
  864. "ChatCommands";
  865. "CreatorPowers";
  866. "CodeExecution";
  867. " ";
  868. "BanMessage";
  869. "LockMessage";
  870. "SystemTitle";
  871. " ";
  872. "MaxLogs";
  873. "Notification";
  874. "SongHint";
  875. "";
  876. "AutoClean";
  877. "AutoCleanDelay";
  878. " ";
  879. "CustomChat";
  880. "PlayerList";
  881. "Console";
  882. " ";
  883. "HelpSystem";
  884. "HelpButton";
  885. " ";
  886. "DonorCommands";
  887. "DonorCapes";
  888. "LocalCapes";
  889. " ";
  890. "LocalLighting";
  891. "ReplicationLogs";
  892. "NetworkOwners";
  893. "Detection";
  894. "CheckClients";
  895. " ";
  896. "AntiNil";
  897. "AntiSpeed";
  898. "AntiNoclip";
  899. "AntiParanoid";
  900. "AntiDeleteTool";
  901. "AntiDelete";
  902. "AntiUnAnchor";
  903. "AntiLeak";
  904. "AntiBillboardImage";
  905. "AntiInsert";
  906. }
  907.  
  908. return {Settings = settings, Descriptions = descs, Order = order}
  909. end))
  910. Folder8.Name = "Plugins"
  911. Folder8.Parent = Folder5
  912. ModuleScript9.Name = "Server: Example Plugin"
  913. ModuleScript9.Parent = Folder8
  914. table.insert(cors,sandbox(ModuleScript9,function()
  915. --[[
  916. SERVER PLUGINS' NAMES MUST START WITH "Server: "
  917. CLIENT PLUGINS' NAMES MUST START WITH "Client: "
  918.  
  919. Plugins have full access to the server/client tables and most variables.
  920.  
  921. You can use the MakePluginEvent to use the script instead of setting up an event.
  922. PlayerChatted will get chats from the custom chat and nil players.
  923. PlayerJoined will fire after the player finishes initial loading
  924. CharacterAdded will also fire after the player is loaded, it does not use the CharacterAdded event.
  925.  
  926. service.HookEvent('PlayerChatted',function(msg,plr)
  927. print(msg..' from '..plr.Name..' Example Plugin')
  928. end)
  929.  
  930. service.HookEvent('PlayerJoined',function(p)
  931. print(p.Name..' Joined! Example Plugin')
  932. end)
  933.  
  934. service.HookEvent('CharacterAdded',function(plr)
  935. server.RunCommand('name',plr.Name,'BobTest Example Plugin')
  936. end)
  937.  
  938. --]]
  939.  
  940. server = nil -- Mutes warnings about unknown globals
  941. service = nil
  942. return function()
  943. server.Commands.ExampleCommand = {
  944. Prefix = server.Settings.Prefix; -- Prefix to use for command
  945. Commands = {"example"}; -- Commands
  946. Args = {"arg1"}; -- Command arguments
  947. Description = "Example command"; -- Command Description
  948. Hidden = true; -- Is it hidden from the command list?
  949. Fun = false; -- Is it fun?
  950. AdminLevel = "Players"; -- Admin level; If using settings.CustomRanks set this to the custom rank name (eg. "Baristas")
  951. Function = function(plr,args) -- Function to run for command
  952. print("HELLO WORLD FROM AN EXAMPLE COMMAND :)")
  953. print("Player supplied args[1] "..tostring(args[1]))
  954. end
  955. }
  956. end
  957. end))
  958. ModuleScript10.Name = "Client: Example Plugin"
  959. ModuleScript10.Parent = Folder8
  960. table.insert(cors,sandbox(ModuleScript10,function()
  961. client = nil
  962. service = nil
  963. return function()
  964. --Acts the same as a server plugin but with client functions instead of server.
  965. --[[
  966. local window = client.UI.Make("Window",{
  967. Title = "Changing DataStore";
  968. Size = {700,300};
  969. Icon = "rbxassetid://357249130";
  970. })
  971.  
  972. window.Add("ImageLabel",{
  973. Image = "rbxassetid://531490964";
  974. })
  975.  
  976. --]]
  977. end
  978. end))
  979. Folder11.Name = "Themes"
  980. Folder11.Parent = Folder5
  981. for i,v in pairs(mas:GetChildren()) do
  982. v.Parent = script
  983. pcall(function() v:MakeJoints() end)
  984. end
  985. mas:Destroy()
  986. for i,v in pairs(cors) do
  987. spawn(function()
  988. pcall(v)
  989. end)
  990. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement