Quick actions

cmd+k|ctrl+k

Navigation

Languages

Plates of Doom (rework)

Snippet info

Language

Lua

Visibility

public

Author

ewdev

Created

2024-12-25T19:16:10.391352Z

Updated

2024-12-26T03:21:47.478565Z

local __DARKLUA_BUNDLE_MODULES

__DARKLUA_BUNDLE_MODULES = {
    cache = {},
    load = function(m)
        if not __DARKLUA_BUNDLE_MODULES.cache[m] then
            __DARKLUA_BUNDLE_MODULES.cache[m] = {
                c = __DARKLUA_BUNDLE_MODULES[m](),
            }
        end

        return __DARKLUA_BUNDLE_MODULES.cache[m].c
    end,
}

do
    function __DARKLUA_BUNDLE_MODULES.a()
        local Maid = {}

        Maid.ClassName = 'Maid'

        function Maid.new()
            return setmetatable({_tasks = {}}, Maid)
        end
        function Maid.isMaid(value)
            return type(value) == 'table' and value.ClassName == 'Maid'
        end
        function Maid:__index(index)
            if Maid[index] then
                return Maid[index]
            else
                return self._tasks[index]
            end
        end
        function Maid:__newindex(index, newTask)
            if Maid[index] ~= nil then
                error(string.format("Cannot use '%s' as a Maid key", tostring(index)), 2)
            end

            local tasks = self._tasks
            local job = tasks[index]

            if job == newTask then
                return
            end

            tasks[index] = newTask

            if job then
                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' then
                    if type(job.Destroy) == 'function' then
                        job:Destroy()
                    end
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        task.defer(function()
                            task.cancel(job)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end
            end
        end
        function Maid:Add(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            self[#self._tasks + 1] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.Add] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return task
        end
        function Maid:GiveTask(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            local taskId = #self._tasks + 1

            self[taskId] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.GiveTask] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return taskId
        end
        function Maid:GivePromise(promise)
            if not promise:IsPending() then
                return promise
            end

            local newPromise = promise.resolved(promise)
            local id = self:GiveTask(newPromise)

            newPromise:Finally(function()
                self[id] = nil
            end)

            return newPromise
        end
        function Maid:DoCleaning()
            local tasks = self._tasks

            for index, job in pairs(tasks)do
                if typeof(job) == 'RBXScriptConnection' then
                    tasks[index] = nil

                    job:Disconnect()
                end
            end

            local index, job = next(tasks)

            while job ~= nil do
                tasks[index] = nil

                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' and type(job.Destroy) == 'function' then
                    job:Destroy()
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        local toCancel = job

                        task.defer(function()
                            task.cancel(toCancel)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end

                index, job = next(tasks)
            end
        end

        Maid.Destroy = Maid.DoCleaning

        return Maid
    end
    function __DARKLUA_BUNDLE_MODULES.b()
        return __DARKLUA_BUNDLE_MODULES.load'a'.new()
    end
    function __DARKLUA_BUNDLE_MODULES.c()
        local assets = Instance.new'Folder'

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.d()
        local assets, add, InsertService = Instance.new'Folder', function(
            name,
            to,
            what
        )
            what.Name = name
            what.Parent = to

            return what
        end, game:GetService'InsertService'
        local insertMesh = function(meshId, collisionFidelity, renderFidelity)
            while true do
                local __DARKLUA_CONTINUE_3 = false

                repeat
                    local success, mesh = pcall(InsertService.CreateMeshPartAsync, InsertService, meshId, collisionFidelity or Enum.CollisionFidelity.Default, renderFidelity or Enum.RenderFidelity.Automatic)

                    if not success then
                        warn(string.format('Failed to create mesh "%s": %s', tostring(meshId), tostring(mesh)))
                        task.wait(0.5)

                        __DARKLUA_CONTINUE_3 = true

                        break
                    end

                    return mesh
                until true

                if not __DARKLUA_CONTINUE_3 then
                    break
                end
            end
        end

        do
            local meshFolder = add('PlateMesh', assets, Instance.new'Folder')

            add('Block', meshFolder, insertMesh'rbxassetid://13307406342')
            add('Ball', meshFolder, insertMesh'rbxassetid://11640745670')
            add('Cylinder', meshFolder, insertMesh'rbxassetid://18406029582')
        end
        do
            local lifeLinkBeam = (add('LifeLinkBeam', assets, Instance.new'Beam'))

            lifeLinkBeam.Color = ColorSequence.new(Color3.new(0, 1, 0))
            lifeLinkBeam.Transparency = NumberSequence.new{
                NumberSequenceKeypoint.new(0, 1),
                NumberSequenceKeypoint.new(0.1, 0.75),
                NumberSequenceKeypoint.new(0.2, 0.75),
                NumberSequenceKeypoint.new(0.3, 0.4),
                NumberSequenceKeypoint.new(0.7, 0.4),
                NumberSequenceKeypoint.new(0.8, 0.75),
                NumberSequenceKeypoint.new(0.9, 0.75),
                NumberSequenceKeypoint.new(1, 1),
            }
            lifeLinkBeam.FaceCamera = true
        end

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.e()
        local assets = Instance.new'Folder'

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.f()
        local Assets = {
            Server = nil,
            Client = nil,
            Shared = nil,
        }

        Assets.Shared = __DARKLUA_BUNDLE_MODULES.load'c'

        if game:GetService'RunService':IsServer() then
            Assets.Server = __DARKLUA_BUNDLE_MODULES.load'd'
        else
            Assets.Client = __DARKLUA_BUNDLE_MODULES.load'e'
        end

        return table.freeze(Assets)
    end
    function __DARKLUA_BUNDLE_MODULES.g()
        local freeRunnerThread
        local acquireRunnerThreadAndCallEventHandler = function(fn, ...)
            local acquiredRunnerThread = freeRunnerThread

            freeRunnerThread = nil

            fn(...)

            freeRunnerThread = acquiredRunnerThread
        end
        local runEventHandlerInFreeThread, Connection = function(...)
            acquireRunnerThreadAndCallEventHandler(...)

            while true do
                acquireRunnerThreadAndCallEventHandler(coroutine.yield())
            end
        end, {}

        Connection.__index = Connection

        function Connection:Disconnect()
            if not self.Connected then
                return
            end

            self.Connected = false

            if self._signal._handlerListHead == self then
                self._signal._handlerListHead = self._next
            else
                local prev = self._signal._handlerListHead

                while prev and prev._next ~= self do
                    prev = prev._next
                end

                if prev then
                    prev._next = self._next
                end
            end
        end

        Connection.Destroy = Connection.Disconnect

        setmetatable(Connection, {
            __index = function(_tb, key)
                error(('Attempt to get Connection::%s (not a valid member)'):format(tostring(key)), 2)
            end,
            __newindex = function(_tb, key, _value)
                error(('Attempt to set Connection::%s (not a valid member)'):format(tostring(key)), 2)
            end,
        })

        local Signal = {}

        Signal.__index = Signal

        function Signal.new()
            local self = setmetatable({
                _handlerListHead = false,
                _proxyHandler = nil,
                _yieldedThreads = nil,
            }, Signal)

            return self
        end
        function Signal.Wrap(rbxScriptSignal)
            assert(typeof(rbxScriptSignal) == 'RBXScriptSignal', 'Argument #1 to Signal.Wrap must be a RBXScriptSignal; got ' .. typeof(rbxScriptSignal))

            local signal = Signal.new()

            signal._proxyHandler = rbxScriptSignal:Connect(function(...)
                signal:Fire(...)
            end)

            return signal
        end
        function Signal.Is(obj)
            return type(obj) == 'table' and getmetatable(obj) == Signal
        end
        function Signal:Connect(fn)
            local connection = setmetatable({
                Connected = true,
                _signal = self,
                _fn = fn,
                _next = false,
            }, Connection)

            if self._handlerListHead then
                connection._next = self._handlerListHead
                self._handlerListHead = connection
            else
                self._handlerListHead = connection
            end

            return connection
        end
        function Signal:ConnectOnce(fn)
            return self:Once(fn)
        end
        function Signal:Once(fn)
            local connection, done = nil, false

            connection = self:Connect(function(...)
                if done then
                    return
                end

                done = true

                connection:Disconnect()
                fn(...)
            end)

            return connection
        end
        function Signal:GetConnections()
            local items, item = {}, self._handlerListHead

            while item do
                table.insert(items, item)

                item = item._next
            end

            return items
        end
        function Signal:DisconnectAll()
            local item = self._handlerListHead

            while item do
                item.Connected = false
                item = item._next
            end

            self._handlerListHead = false

            local yieldedThreads = rawget(self, '_yieldedThreads')

            if yieldedThreads then
                for thread in next, yieldedThreads do
                    if coroutine.status(thread) == 'suspended' then
                        warn(debug.traceback(thread, 'signal disconnected; yielded thread cancelled', 2))
                        task.cancel(thread)
                    end
                end

                table.clear(self._yieldedThreads)
            end
        end
        function Signal:Fire(...)
            local item = self._handlerListHead

            while item do
                if item.Connected then
                    if not freeRunnerThread then
                        freeRunnerThread = coroutine.create(runEventHandlerInFreeThread)
                    end

                    task.spawn(freeRunnerThread, item._fn, ...)
                end

                item = item._next
            end
        end
        function Signal:FireDeferred(...)
            local item = self._handlerListHead

            while item do
                local conn = item

                task.defer(function(...)
                    if conn.Connected then
                        conn._fn(...)
                    end
                end, ...)

                item = item._next
            end
        end
        function Signal:Wait()
            local yieldedThreads = rawget(self, '_yieldedThreads')

            if not yieldedThreads then
                yieldedThreads = {}

                rawset(self, '_yieldedThreads', yieldedThreads)
            end

            local thread = coroutine.running()

            yieldedThreads[thread] = true

            self:Once(function(...)
                yieldedThreads[thread] = nil

                task.spawn(thread, ...)
            end)

            return coroutine.yield()
        end
        function Signal:Destroy()
            self:DisconnectAll()

            local proxyHandler = rawget(self, '_proxyHandler')

            if proxyHandler then
                proxyHandler:Disconnect()
            end
        end

        setmetatable(Signal, {
            __index = function(_tb, key)
                error(('Attempt to get Signal::%s (not a valid member)'):format(tostring(key)), 2)
            end,
            __newindex = function(_tb, key, _value)
                error(('Attempt to set Signal::%s (not a valid member)'):format(tostring(key)), 2)
            end,
        })

        return table.freeze{
            new = Signal.new,
            Wrap = Signal.Wrap,
            Is = Signal.Is,
        }
    end
    function __DARKLUA_BUNDLE_MODULES.h()
        local Signal, RunService, Scheduler = __DARKLUA_BUNDLE_MODULES.load'g', game:GetService'RunService', {}

        Scheduler.__index = Scheduler

        function Scheduler.new(rate, fixed)
            local self = setmetatable({
                Signal = (Signal.new()),
                Active = false,
                rate = rate or 1.6666666666666665E-2,
                fixed = fixed or false,
                dt = 0,
                dtOffset = 0,
                durationThread = nil,
            }, Scheduler)

            self:Start()

            return self
        end
        function Scheduler.fixed(rate)
            return Scheduler.new(rate, true)
        end
        function Scheduler.connect(rate, callback)
            local self = Scheduler.new(rate)
            local connection = self:Connect(callback)

            return self, connection
        end
        function Scheduler.connectFixed(rate, callback)
            local self = Scheduler.fixed(rate)
            local connection = self:Connect(callback)

            return self, connection
        end
        function Scheduler:Destroy()
            self:Stop()
            self.Signal:Destroy()
        end
        function Scheduler:Connect(callback)
            return self.Signal:Connect(callback)
        end
        function Scheduler:Wait()
            return self.Signal:Wait()
        end
        function Scheduler:Step(dt)
            self.Signal:Fire(dt or self.rate)
        end

        local scheduled = {}

        function Scheduler:Start(duration)
            if not self.Active then
                self.Active = true

                local index = table.find(scheduled, self)

                if not index then
                    table.insert(scheduled, self)
                end
            end
            if self.durationThread then
                task.cancel(self.durationThread)

                self.durationThread = nil
            end
            if duration then
                self.durationThread = task.delay(duration, function()
                    self.durationThread = nil

                    self:Stop()
                end)
            end
        end
        function Scheduler:Stop(duration)
            if self.Active then
                self.Active = false

                local index = table.find(scheduled, self)

                if index then
                    table.remove(scheduled, index)
                end
            end
            if self.durationThread then
                task.cancel(self.durationThread)

                self.durationThread = nil
            end
            if duration then
                self.durationThread = task.delay(duration, function()
                    self.durationThread = nil

                    self:Start()
                end)
            end
        end

        local update = function(dtUpdate)
            for _, scheduler in ipairs(scheduled)do
                local dt, rate = scheduler.dt, scheduler.rate

                dt += dtUpdate

                if scheduler.fixed then
                    while dt >= rate do
                        scheduler.Signal:Fire(rate)

                        dt -= rate
                    end
                elseif dt >= rate then
                    scheduler.Signal:Fire(dt - scheduler.dtOffset)

                    dt = math.min(dt - rate, rate)
                    scheduler.dtOffset = dt
                end

                scheduler.dt = dt
            end
        end
        local updateLoop = RunService.Heartbeat:Connect(update)

        __DARKLUA_BUNDLE_MODULES.load'b':GiveTask(updateLoop)

        return Scheduler
    end
    function __DARKLUA_BUNDLE_MODULES.i()
        local ipairs, table = ipairs, table

        return function(enumItems)
            local enum = {}

            for index, name in ipairs(enumItems)do
                enum[name] = index - 1
                enum[index - 1] = name
            end

            setmetatable(enum, {
                __index = function(_, index)
                    return error(string.format('"%s" is not a valid enum item.', tostring(index)), 2)
                end,
            })

            return table.freeze(enum)
        end
    end
    function __DARKLUA_BUNDLE_MODULES.j()
        local Enum = __DARKLUA_BUNDLE_MODULES.load'i'

        return table.freeze{
            Server = Enum{
                'Connect',
                'Event',
                'Invoke',
            },
            Client = Enum{
                'ConnectResult',
                'Event',
                'InvokeResult',
                'Disconnect',
            },
        }
    end
    function __DARKLUA_BUNDLE_MODULES.k()
        return 'Network'
    end
    function __DARKLUA_BUNDLE_MODULES.l()
        local Maid, Signal, Scheduler, HeadMaid, HttpService, Players, ReplicatedStorage, RunService, Methods = __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'g', __DARKLUA_BUNDLE_MODULES.load'h', __DARKLUA_BUNDLE_MODULES.load'b', game:GetService'HttpService', game:GetService'Players', game:GetService'ReplicatedStorage', game:GetService'RunService', __DARKLUA_BUNDLE_MODULES.load'j'
        local Network = {}

        Network.Maid = HeadMaid:Add(Maid.new())
        Network.Id = __DARKLUA_BUNDLE_MODULES.load'k'
        Network.Connected = (Network.Maid:Add(Signal.new()))
        Network.Disconnected = (Network.Maid:Add(Signal.new()))
        Network.ConnectedPlayers = {}
        Network.ListeningPlayers = ({})
        Network.PlayerKeys = ({})
        Network.Events = {}
        Network.Invokes = {}

        Network.Maid:GiveTask(function()
            table.clear(Network.ConnectedPlayers)
        end)

        local send = function(player, method, ...)
            do
                task.spawn(function(...)
                    while true do
                        if not Network.ConnectedPlayers[player] then
                            return
                        end
                        if Network.ListeningPlayers[player] then
                            break
                        end

                        task.wait()
                    end

                    Network.Maid.Remote:FireClient(player, Network:GetKey(player), method, 
...)
                end, ...)
            end
        end

        function Network:SetId(id)
            Network.Id = id
        end
        function Network:GetConnected()
            local connected = {}

            for player, _ in next, Network.ConnectedPlayers do
                table.insert(connected, player)
            end

            return connected
        end
        function Network:IsConnected(player)
            return Network.ConnectedPlayers[player] ~= nil
        end
        function Network:SetKey(player, key)
            Network.PlayerKeys[player] = key
        end
        function Network:GetKey(player)
            local key = Network.PlayerKeys[player]

            return key and key.Client
        end
        function Network:GenerateKey()
            return {
                Server = HttpService:GenerateGUID(false),
                Client = HttpService:GenerateGUID(false),
            }
        end
        function Network:Connect(player)
            local wasConnected = Network:IsConnected(player)

            Network.ConnectedPlayers[player] = os.clock()

            do
                Network.ListeningPlayers[player] = true
            end

            if not wasConnected then
                Network.Connected:Fire(player)
            end
        end
        function Network:Disconnect(player, why)
            if not Network:IsConnected(player) then
                return
            end

            Network.Maid.Remote:FireClient(player, Network:GetKey(player), Methods.Client.Disconnect, why)

            Network.ConnectedPlayers[player] = nil

            do
                Network.ListeningPlayers[player] = nil
                Network.PlayerKeys[player] = nil
            end

            Network.Disconnected:Fire(player)
        end
        function Network:CreateRemote()
            do
                table.clear(Network.ListeningPlayers)
            end

            local remote = Instance.new'RemoteEvent'

            Network.Maid.Remote = remote
            remote.Name = Network.Id
            remote.Archivable = false
            remote.Parent = ReplicatedStorage
            Network.Maid.OnServerEvent = remote.OnServerEvent:Connect(function(
                player,
                key,
                method,
                ...
            )
                if method == Methods.Server.Connect and not Network:IsConnected(player) then
                    if (key == nil or not Network.PlayerKeys[player] or key ~= Network.PlayerKeys[player].Server) then
                        return remote:FireClient(player, Network:GetKey(player), Methods.Client.ConnectResult, false)
                    end

                    remote:FireClient(player, Network:GetKey(player), Methods.Client.ConnectResult, true)
                    Network:Connect(player)

                    return
                end

                do
                    if key == nil or not Network.PlayerKeys[player] or key ~= Network.PlayerKeys[player].Server then
                        return
                    end
                end

                Network:Connect(player)

                if method == Methods.Server.Event then
                    local event = ...
                    local callback = Network.Events[event]

                    if callback then
                        callback(player, select(2, ...))
                    end
                elseif method == Methods.Server.Invoke then
                    local invoke, id = ...
                    local callback = Network.Invokes[invoke]

                    if callback then
                        send(player, Methods.Client.InvokeResult, id, callback(player, select(3, 
...)))
                    end
                end
            end)
        end
        function Network:IsRemoteOK()
            local remote = Network.Maid.Remote

            if not remote then
                return false
            end

            return remote.Parent == ReplicatedStorage and remote.Name == Network.Id
        end
        function Network:Init()
            Network:CreateRemote()

            do
                Network.Maid.RefitLoop = Scheduler.connect(5, function()
                    Network:CreateRemote()
                end)
                Network.Maid.RefitCheckLooop = RunService.PostSimulation:Connect(function(
                )
                    if not Network:IsRemoteOK() then
                        Network:CreateRemote()
                    end
                end)
            end

            Network.Maid.DisconnectLoop = Scheduler.connect(1, function()
                for player, lastPing in next, Network.ConnectedPlayers do
                    local __DARKLUA_CONTINUE_16 = false

                    repeat
                        if player.Parent ~= Players then
                            Network:Disconnect(player, 'You left game')

                            __DARKLUA_CONTINUE_16 = true

                            break
                        end
                        if os.clock() - lastPing > 15 then
                            Network:Disconnect(player, 'You stopped pinging the server')

                            __DARKLUA_CONTINUE_16 = true

                            break
                        end

                        __DARKLUA_CONTINUE_16 = true
                    until true

                    if not __DARKLUA_CONTINUE_16 then
                        break
                    end
                end
            end)
        end
        function Network:FireClient(player, event, ...)
            send(player, Methods.Client.Event, event, ...)
        end
        function Network:FireAllClients(event, ...)
            for player in next, Network.ConnectedPlayers do
                send(player, Methods.Client.Event, event, ...)
            end
        end
        function Network.event(name, callback)
            Network.Events[name] = callback

            return function()
                if Network.Events[name] == callback then
                    Network.Events[name] = nil
                end
            end
        end
        function Network.invoke(name, callback)
            Network.Invokes[name] = callback

            return function()
                if Network.Invokes[name] == callback then
                    Network.Invokes[name] = nil
                end
            end
        end

        return Network
    end
    function __DARKLUA_BUNDLE_MODULES.m()
        local Network, Status = __DARKLUA_BUNDLE_MODULES.load'l', {}

        Status.Current = '...'

        Network.invoke('GetStatus', function()
            return Status.Current
        end)

        function Status:Set(text)
            if Status.Current == text then
                return
            end

            Status.Current = text

            Network:FireAllClients('SetStatus', text)
        end

        return setmetatable(Status, {
            __call = Status.Set,
        })
    end
    function __DARKLUA_BUNDLE_MODULES.n()
        local Network, Maid, Signal, HeadMaid = __DARKLUA_BUNDLE_MODULES.load'l', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'g', __DARKLUA_BUNDLE_MODULES.load'b'
        local Teams = {}

        Teams.Maid = HeadMaid:Add(Maid.new())
        Teams.List = {}
        Teams.Updated = (Teams.Maid:Add(Signal.new()))

        local mapTeamsList = function()
            local mapped = {}

            for player, team in next, Teams.List do
                mapped[tostring(player.UserId)] = team
            end

            return mapped
        end

        Teams.Maid:GiveTask(Teams.Updated:Connect(function()
            Teams.Maid.UpdateThread = task.defer(function()
                Network:FireAllClients('UpdateTeams', mapTeamsList())
            end)
        end))
        Network.invoke('GetTeams', function()
            return mapTeamsList()
        end)

        function Teams:Assign(player, team)
            local oldTeam = Teams.List[player]

            Teams.List[player] = team

            Teams.Updated:Fire(player, team, oldTeam)
        end
        function Teams:Get(player)
            return Teams.List[player]
        end
        function Teams:GetPlayers(team)
            local players = {}

            for player, playerTeam in next, Teams.List do
                if playerTeam == team then
                    table.insert(players, player)
                end
            end

            return players
        end
        function Teams:GetAmount(team)
            return #Teams:GetPlayers(team)
        end

        Network.Disconnected:Connect(function(player)
            Teams:Assign(player, nil)
        end)

        return Teams
    end
    function __DARKLUA_BUNDLE_MODULES.o()
        return __DARKLUA_BUNDLE_MODULES.load'i'{
            'Playing',
            'Lobby',
        }
    end
    function __DARKLUA_BUNDLE_MODULES.p()
        local Maid = {}

        Maid.ClassName = 'Maid'

        function Maid.new()
            return setmetatable({_tasks = {}}, Maid)
        end
        function Maid.isMaid(value)
            return type(value) == 'table' and value.ClassName == 'Maid'
        end
        function Maid:__index(index)
            if Maid[index] then
                return Maid[index]
            else
                return self._tasks[index]
            end
        end
        function Maid:__newindex(index, newTask)
            if Maid[index] ~= nil then
                error(string.format("Cannot use '%s' as a Maid key", tostring(index)), 2)
            end

            local tasks = self._tasks
            local job = tasks[index]

            if job == newTask then
                return
            end

            tasks[index] = newTask

            if job then
                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' then
                    if type(job.Destroy) == 'function' then
                        job:Destroy()
                    end
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        task.defer(function()
                            task.cancel(job)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end
            end
        end
        function Maid:Add(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            self[#self._tasks + 1] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.Add] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return task
        end
        function Maid:GiveTask(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            local taskId = #self._tasks + 1

            self[taskId] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.GiveTask] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return taskId
        end
        function Maid:GivePromise(promise)
            if not promise:IsPending() then
                return promise
            end

            local newPromise = promise.resolved(promise)
            local id = self:GiveTask(newPromise)

            newPromise:Finally(function()
                self[id] = nil
            end)

            return newPromise
        end
        function Maid:DoCleaning()
            local tasks = self._tasks

            for index, job in pairs(tasks)do
                if typeof(job) == 'RBXScriptConnection' then
                    tasks[index] = nil

                    job:Disconnect()
                end
            end

            local index, job = next(tasks)

            while job ~= nil do
                tasks[index] = nil

                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' and type(job.Destroy) == 'function' then
                    job:Destroy()
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        local toCancel = job

                        task.defer(function()
                            task.cancel(toCancel)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end

                index, job = next(tasks)
            end
        end

        Maid.Destroy = Maid.DoCleaning

        return Maid
    end
    function __DARKLUA_BUNDLE_MODULES.q()
        return function(origin, arenaSize, lavaHeight)
            local lobby = Instance.new'Folder'
            local newPart = function(class)
                local basePart = Instance.new(class or 'Part')

                basePart.Anchored = true
                basePart.Material = Enum.Material.SmoothPlastic
                basePart.Parent = lobby

                return basePart
            end

            do
                local makeCorner, offset = function(position)
                    local corner = newPart()

                    corner.Color = Color3.fromRGB(103, 102, 104)
                    corner.Size = Vector3.new(24, 1, 24)
                    corner.Position = position

                    local createSpawn = function(x, z)
                        local spawnPart = newPart'Part'

                        spawnPart.Name = 'SpawnLocation'
                        spawnPart.Size = Vector3.new(8, 0.5, 8)
                        spawnPart.Position = position + Vector3.new(x, 0.75, z)
                        spawnPart.Parent = lobby

                        local decal = Instance.new'Decal'

                        decal.Texture = 'rbxasset://textures/SpawnLocation.png'
                        decal.Face = Enum.NormalId.Top
                        decal.Parent = spawnPart
                    end

                    createSpawn(5, 5)
                    createSpawn(-5, 5)
                    createSpawn(5, -5)
                    createSpawn(-5, -5)
                end, 17 + arenaSize / 2
                local xOffset, zOffset = Vector3.xAxis * offset, Vector3.zAxis * offset

                makeCorner(origin + xOffset + zOffset)
                makeCorner(origin - xOffset + zOffset)
                makeCorner(origin + xOffset - zOffset)
                makeCorner(origin - xOffset - zOffset)
            end
            do
                local makePath, offset = function(position, rotation)
                    local flip, path = rotation % 180 ~= 0, newPart()

                    path.Size = (flip and {
                        (Vector3.new(24, 1, arenaSize + 10)),
                    } or {
                        (Vector3.new(arenaSize + 10, 1, 24)),
                    })[1]
                    path.Position = position

                    local speed1 = newPart()

                    speed1.Color = Color3.fromRGB(127, 127, 130)
                    speed1.Size = (flip and {
                        (Vector3.new(6, 0.1, arenaSize + 4)),
                    } or {
                        (Vector3.new(arenaSize + 4, 0.1, 6)),
                    })[1]
                    speed1.Position = position + Vector3.new(0, 0.55, 0) + (flip and {
                        (Vector3.new(5, 0, 0)),
                    } or {
                        (Vector3.new(0, 0, 5)),
                    })[1]

                    local speed2 = newPart()

                    speed2.Color = speed1.Color
                    speed2.Size = speed1.Size
                    speed2.Position = position + Vector3.new(0, 0.55, 0) + (flip and {
                        (Vector3.new(-5, 0, 0)),
                    } or {
                        (Vector3.new(0, 0, -5)),
                    })[1]

                    local speed = 50

                    speed1.AssemblyLinearVelocity = (flip and {
                        (Vector3.new(0, 0, -speed)),
                    } or {
                        (Vector3.new(speed, 0, 0)),
                    })[1]
                    speed2.AssemblyLinearVelocity = -speed1.AssemblyLinearVelocity
                end, 17 + arenaSize / 2
                local xOffset, zOffset = Vector3.xAxis * offset, Vector3.zAxis * offset

                makePath(origin - zOffset, 0)
                makePath(origin - xOffset, 90)
                makePath(origin + zOffset, 180)
                makePath(origin + xOffset, 270)
            end
            do
                local width, lava = 5, newPart()

                lava.CanCollide = false
                lava.Position = origin + Vector3.yAxis * (lavaHeight - width / 2)
                lava.Size = Vector3.new(arenaSize, width, arenaSize)
                lava.Material = Enum.Material.Neon
                lava.Color = Color3.fromRGB(211, 56, 17)

                lava.Touched:Connect(function(hit)
                    hit:BreakJoints()
                    hit:Destroy()
                end)
            end

            return lobby
        end
    end
    function __DARKLUA_BUNDLE_MODULES.r()
        local HeadMaid, Maid, Network, lobbyCreator, Arena = __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'p', __DARKLUA_BUNDLE_MODULES.load'l', __DARKLUA_BUNDLE_MODULES.load'q', {}

        Arena.Maid = HeadMaid:Add(Maid.new())
        Arena.ArenaMaid = Arena.Maid:Add(Maid.new())
        Arena.Folder = nil
        Arena.Lobby = nil
        Arena.Wall = nil
        Arena.Origin = Vector3.zero
        Arena.Size = 0
        Arena.LavaHeight = -100

        local root = script

        if script.Parent ~= workspace then
            task.defer(function()
                script.Parent = workspace
            end)
        end

        local maxPartSize, createWall = 2048, function(position, size)
            local wall = (Arena.Maid.Lobby:Add(Instance.new'Part'))

            wall.Anchored = true
            wall.Transparency = 1

            if position then
                wall.Position = position
            end
            if size then
                wall.Size = size
            end

            wall.Parent = Arena.Lobby

            return wall
        end

        function Arena:SetOrigin(origin)
            Arena.Origin = origin

            Network:FireAllClients('SetArenaOrigin', origin)
        end
        function Arena:SetSize(size)
            Arena.Size = size

            Network:FireAllClients('SetArenaSize', size)
        end
        function Arena:SetLavaHeight(height)
            Arena.LavaHeight = height
        end
        function Arena:Create()
            Arena:Remove()
            Arena:CreateLobby()

            local arena = Arena.ArenaMaid:Add(Instance.new'Folder')

            Arena.Folder = arena

            Arena.ArenaMaid:GiveTask(function()
                Arena.Arena = nil
            end)

            arena.Parent = root
        end
        function Arena:Remove()
            Arena.ArenaMaid:DoCleaning()
        end
        function Arena:CreateLobby()
            local origin, size, maid = Arena.Origin, Arena.Size, Maid.new()

            Arena.Maid.Lobby = maid
            Arena.Lobby = lobbyCreator(origin, size, Arena.LavaHeight)
            Arena.Lobby.Parent = root
            maid.Lobby = Arena.Lobby

            local height = maxPartSize

            Arena.Wall = createWall(origin, Vector3.new(size + 10, height, size + 10))

            do
                local width = maxPartSize / 3
                local offset = size / 2 + width / 2 + 5 + 24
                local xOffset, zOffset = Vector3.xAxis * offset, Vector3.zAxis * offset

                createWall(origin + xOffset, Vector3.new(width, height, width * 3))
                createWall(origin + zOffset, Vector3.new(width * 3, height, width))
                createWall(origin - xOffset, Vector3.new(width, height, width * 3))
                createWall(origin - zOffset, Vector3.new(width * 3, height, width))
            end

            Network:FireAllClients('SetArenaLobby', Arena.Lobby)
        end

        local removeCollision = function(part)
            if not part:IsA'BasePart' then
                return
            end

            local noCollisionConstraint = Instance.new'NoCollisionConstraint'

            noCollisionConstraint.Part0 = part
            noCollisionConstraint.Part1 = Arena.Wall
            noCollisionConstraint.Parent = part
        end

        function Arena:Allow(instance)
            removeCollision(instance)
            instance.DescendantAdded:Connect(removeCollision)

            for _, descendant in ipairs(instance:GetDescendants())do
                removeCollision(descendant)
            end
        end
        function Arena.moveTo(model, position)
            local wall = Arena.Wall

            if not wall then
                return model:MoveTo(position)
            end

            wall.CanCollide = false

            model:MoveTo(position)

            wall.CanCollide = true
        end

        Network.invoke('GetArenaSettings', function()
            return Arena.Origin, Arena.Size, Arena.Lobby
        end)

        return Arena
    end
    function __DARKLUA_BUNDLE_MODULES.s()
        local Arena, Players, Character = __DARKLUA_BUNDLE_MODULES.load'r', game:GetService'Players', {}

        function Character.get(target)
            if typeof(target) ~= 'Instance' then
                return
            end
            if target:IsA'Player' then
                return target.Character
            elseif target:IsA'Model' then
                return target
            end
        end
        function Character.getRoot(target)
            local character = Character.get(target)

            if not character then
                return
            end

            local root = character:FindFirstChild'HumanoidRootPart'

            if root and root:IsA'BasePart' then
                return root
            end
        end
        function Character.getPart(target)
            local character = Character.get(target)

            if not character then
                return
            end

            local part = character:FindFirstChild'HumanoidRootPart' or character:FindFirstChild'Torso' or character:FindFirstChild'UpperTorso' or character:FindFirstChild'LowerTorso' or character:FindFirstChild'Head'

            if part and part:IsA'BasePart' then
                return part
            end

            return character:FindFirstChildWhichIsA('BasePart', true)
        end
        function Character.getHumanoid(target)
            local character = Character.get(target)

            if character then
                return character:FindFirstChildOfClass'Humanoid'
            end
        end
        function Character.isReady(target)
            local character = Character.get(target)

            return Character.getRoot(character) and character:IsDescendantOf(workspace)
        end
        function Character.getCFrame(target)
            local root = Character.getRoot(target)

            if root then
                return root.CFrame
            end
        end
        function Character.teleport(target, location, preventClipping)
            local character = Character.get(target)

            if not character then
                return
            end

            local root = Character.getRoot(character)

            if not root then
                return
            end

            local locationCharacter = Character.get(location)

            if locationCharacter then
                local locationRoot = Character.getRoot(locationCharacter)

                if not locationRoot then
                    return
                end

                location = locationRoot.CFrame
            elseif typeof(location) == 'Instance' and location:IsA'BasePart' then
                location = location.CFrame
            elseif typeof(location) == 'Vector3' then
                location = CFrame.new(location) * root.CFrame.Rotation
            elseif typeof(location) ~= 'CFrame' then
                return
            end

            character.PrimaryPart = root

            if not preventClipping then
                return character:PivotTo(location)
            end

            local humanoid = Character.getHumanoid(character)
            local hipHeight = (humanoid and {
                (humanoid.HipHeight),
            } or {2})[1]

            Arena.moveTo(character, location.Position)
            character:PivotTo(CFrame.new(root.Position + Vector3.yAxis * hipHeight) * location.Rotation)
        end
        function Character.freeze(target)
            local character = Character.get(target)

            if not character then
                return
            end

            local root = Character.getRoot(character)

            if root then
                root.Anchored = true
            end
        end
        function Character.unfreeze(target)
            local character = Character.get(target)

            if not character then
                return
            end

            local root = Character.getRoot(character)

            if root then
                root.Anchored = false
            end
        end
        function Character.load(player)
            return pcall(player.LoadCharacter, player)
        end
        function Character.refresh(player)
            local cframe = Character.getCFrame(player)

            while not Character.load(player) do
                task.wait()
            end
            while not Character.isReady(player) do
                task.wait()
            end

            Character.teleport(player, cframe)
        end
        function Character.kill(target)
            local humanoid = Character.getHumanoid(target)

            if humanoid then
                humanoid.Health = 0
            end
        end
        function Character.remove(target)
            local character = Character.get(target)

            if character then
                local player = Players:GetPlayerFromCharacter(character)

                if player then
                    player.Character = nil
                end

                character:Destroy()
            end
        end
        function Character.damage(target, damage)
            local humanoid = Character.getHumanoid(target)

            if humanoid then
                humanoid:TakeDamage(damage)
            end
        end

        return table.freeze(Character)
    end
    function __DARKLUA_BUNDLE_MODULES.t()
        local Maid, HeadMaid, Arena, Character, Assets, TweenService, RunService, Plate = __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load's', __DARKLUA_BUNDLE_MODULES.load'f', game:GetService'TweenService', game:GetService'RunService', {}
        local Plates = {}

        Plate.__index = Plate

        function Plate.new(owner)
            local self = setmetatable({}, Plate)

            self.Maid = Maid.new()
            self.Owners = (type(owner) == 'table' and {owner} or {
                {owner},
            })[1]
            self.Part = nil
            self.PartMaid = self.Maid:Add(Maid.new())
            self.CFrame = CFrame.identity
            self.Move = Vector3.zero
            self.Rotate = Vector3.zero
            self.SizeChange = Vector3.zero
            self.LinearVelocity = Vector3.zero
            self.AngularVelocity = Vector3.zero

            table.insert(Plates.List, self)
            self.Maid:GiveTask(function()
                local index = table.find(Plates.List, self)

                if index then
                    table.remove(Plates.List, index)
                end
            end)
            self:Reset()

            return self
        end
        function Plate:Destroy()
            self.Maid:Destroy()
        end
        function Plate.from(plate)
            local self = Plate.new(table.clone(plate.Owners))

            self:Reset(plate.Part)

            return self
        end
        function Plate:UpdateTags()
            local part = self.Part

            part:SetAttribute('IsPlate', true)

            local userIds = {}

            for _, player in ipairs(self.Owners)do
                table.insert(userIds, player.UserId)
            end

            part:SetAttribute('Owners', table.concat(userIds, ','))
        end
        function Plate:Reset(clone)
            self.PartMaid:DoCleaning()

            self.Move = Vector3.zero
            self.Rotate = Vector3.zero
            self.SizeChange = Vector3.zero
            self.LinearVelocity = Vector3.zero
            self.AngularVelocity = Vector3.zero

            local part = Instance.fromExisting(clone or Assets.Server.PlateMesh.Block)

            part.Name = 'Plate'
            part.Anchored = true
            part.CFrame = self.CFrame
            part.Parent = assert(Arena.Folder, 'No Arena exists yet.')
            self.Part = part

            if not clone then
                part.Material = Enum.Material.SmoothPlastic

                self:SetSize(Plates.DefaultPlateSize)
            end

            self.Maid.Removing = part.AncestryChanged:Connect(function()
                if not part:IsDescendantOf(Arena.Folder) then
                    self:Destroy()
                end
            end)

            local minSize = 0.0011

            self.PartMaid:GiveTask(part:GetPropertyChangedSignal'Size':Connect(function(
            )
                local aboveMinSize = 0

                if part.Size.X > minSize then
                    aboveMinSize += 1
                end
                if part.Size.Y > minSize then
                    aboveMinSize += 1
                end
                if part.Size.Z > minSize then
                    aboveMinSize += 1
                end

                part.CanCollide = aboveMinSize >= 2
            end))
            self.PartMaid:GiveTask(RunService.Heartbeat:Connect(function(dt)
                part.AssemblyLinearVelocity = Vector3.zero
                part.AssemblyAngularVelocity = Vector3.zero

                if self.Move ~= Vector3.zero then
                    local move, dtMove = nil, Plates.MovePerSecond * dt

                    if self.Move.Magnitude < dtMove then
                        move = self.Move
                        self.Move = Vector3.zero
                    else
                        move = self.Move.Unit * dtMove

                        self.Move -= move
                    end

                    part.Position += move
                end
                if self.Rotate ~= Vector3.zero then
                    local rotate, dtRotate = nil, Plates.RotatePerSecond * dt

                    if self.Rotate.Magnitude < dtRotate then
                        rotate = self.Rotate
                        self.Rotate = Vector3.zero
                    else
                        rotate = self.Rotate.Unit * dtRotate

                        self.Rotate -= rotate
                    end

                    part.Rotation += rotate
                end
                if self.SizeChange ~= Vector3.zero then
                    local size, dtSize = nil, Plates.SizePerSecond * dt

                    if self.SizeChange.Magnitude < dtSize then
                        size = self.SizeChange
                        self.SizeChange = Vector3.zero
                    else
                        size = self.SizeChange.Unit * dtSize

                        self.SizeChange -= size
                    end

                    part.Size += size
                end

                part.AssemblyLinearVelocity += self.LinearVelocity
                part.AssemblyAngularVelocity += self.AngularVelocity
            end))
            self.PartMaid:GiveTask(part:GetPropertyChangedSignal'CFrame':Connect(function(
            )
                self.CFrame = part.CFrame
            end))
            self:UpdateTags()

            self.Maid.Part = part
        end
        function Plate:Kill()
            local killDuration, maid = 15, Maid.new()

            self.Maid.Kill = maid

            local sound = (maid:Add(Instance.new'Sound'))

            sound.SoundId = 'rbxassetid://8863377426'
            sound.Volume = 4
            sound.PlaybackSpeed = Random.new():NextNumber(1.05, 1.175)
            sound.Parent = self.Part

            sound:Play()
            sound.Ended:Once(function()
                sound:Destroy()
            end)

            local oldTransparency = self.Part.Transparency

            self.Part.Transparency = 0.25

            local tween = TweenService:Create(self.Part, TweenInfo.new(killDuration), {Transparency = 1})

            tween:Play()

            maid.CancelTween = function()
                tween:Cancel()

                self.Part.Transparency = oldTransparency
            end
            maid.Thread = task.delay(killDuration, function()
                self:Destroy()
                maid:Destroy()
            end)
        end
        function Plate:SetCFrame(cframe)
            self.CFrame = cframe
            self.Part.CFrame = cframe
        end
        function Plate:SetPosition(position)
            self:SetCFrame(CFrame.new(position) * self.CFrame.Rotation)
        end
        function Plate:GetMoveTarget()
            return self.Part.Position + self.Move
        end
        function Plate:GetRotateTarget()
            return self.Part.Rotation + self.Rotate
        end
        function Plate:GetCFrameTarget()
            local targetPosition, targetRotation = self:GetMoveTarget(), self:GetRotateTarget()

            return CFrame.new(targetPosition) * CFrame.fromOrientation(math.rad(targetRotation.X), math.rad(targetRotation.Y), math.rad(targetRotation.Z))
        end
        function Plate:GetSizeTarget()
            return self.Part.Size + self.SizeChange
        end
        function Plate:MoveTo(position)
            self.Move = position - self.Part.Position
        end
        function Plate:RotateTo(rotation)
            self.Rotate = rotation - self.Part.Rotation
        end
        function Plate:CFrameTo(cframe)
            local rx, ry, rz = cframe:ToOrientation()
            local x, y, z = math.deg(rx), math.deg(ry), math.deg(rz)

            self:MoveTo(cframe.Position)
            self:RotateTo(Vector3.new(x, y, z))
        end
        function Plate:SizeTo(size)
            self.SizeChange = size - self.Part.Size
        end
        function Plate:SetSize(size)
            self.Part.Size = size
        end
        function Plate:AddSize(size)
            self:SizeTo(self.Part.Size + size)
        end
        function Plate:RemoveSize(size)
            self:SizeTo(self.Part.Size - size)
        end
        function Plate:Grow(amount)
            return self:AddSize(Vector3.new(amount, (self:GetShape() == Enum.PartType.Ball and {amount} or {0})[1], amount))
        end
        function Plate:Shrink(amount)
            return self:RemoveSize(Vector3.new(amount, (self:GetShape() == Enum.PartType.Ball and {amount} or {0})[1], amount))
        end
        function Plate:Bring(target)
            Character.teleport(target, self.CFrame.Position + Vector3.yAxis * 1, true)
        end
        function Plate:IsOwner(player)
            return table.find(self.Owners, player) ~= nil
        end
        function Plate:AddOwner(player)
            if not self:IsOwner(player) then
                table.insert(self.Owners, player)
                self:UpdateTags()
            end
        end
        function Plate:RemoveOwner(player)
            if self:IsOwner(player) then
                table.remove(self.Owners, table.find(self.Owners, player))
                self:UpdateTags()
            end
        end
        function Plate:SetShape(shape)
            local part, plateMesh = (self.Part), (Assets.Server.PlateMesh)

            if shape == Enum.PartType.Ball then
                part:ApplyMesh(plateMesh.Ball)
            elseif shape == Enum.PartType.Block then
                part:ApplyMesh(plateMesh.Block)
            elseif shape == Enum.PartType.Cylinder then
                part:ApplyMesh(plateMesh.Cylinder)
            end
        end
        function Plate:GetShape()
            local meshId, plateMesh = (self.Part.MeshId), (Assets.Server.PlateMesh)

            if meshId == plateMesh.Ball.MeshId then
                return Enum.PartType.Ball
            elseif meshId == plateMesh.Block.MeshId then
                return Enum.PartType.Block
            elseif meshId == plateMesh.Cylinder.MeshId then
                return Enum.PartType.Cylinder
            end
        end

        Plates.DefaultPlateSize = Vector3.new(20, 1, 20)
        Plates.List = {}
        Plates.new = Plate.new
        Plates.from = Plate.from
        Plates.MovePerSecond = 2.5
        Plates.RotatePerSecond = 20
        Plates.SizePerSecond = 3

        function Plates:GetPlates()
            return Plates.List
        end
        function Plates:ClearAll()
            local list = table.clone(Plates.List)

            table.clear(Plates.List)

            for _, plate in ipairs(list)do
                plate:Destroy()
            end
        end
        function Plates:PlayerDied(player)
            for _, plate in ipairs(Plates:GetPlates())do
                local __DARKLUA_CONTINUE_27 = false

                repeat
                    if not plate:IsOwner(player) then
                        __DARKLUA_CONTINUE_27 = true

                        break
                    end

                    plate:RemoveOwner(player)

                    if #plate.Owners <= 0 then
                        task.defer(function()
                            plate:Kill()
                        end)
                    end

                    __DARKLUA_CONTINUE_27 = true
                until true

                if not __DARKLUA_CONTINUE_27 then
                    break
                end
            end
        end

        HeadMaid:GiveTask(function()
            Plates:ClearAll()
        end)

        return Plates
    end
    function __DARKLUA_BUNDLE_MODULES.u()
        local Teams, Team, Network, Match = __DARKLUA_BUNDLE_MODULES.load'n', __DARKLUA_BUNDLE_MODULES.load'o', __DARKLUA_BUNDLE_MODULES.load'l', {}

        function Match:GetPlaying()
            return Teams:GetPlayers(Team.Playing)
        end
        function Match:GetAmountPlaying()
            return Teams:GetAmount(Team.Playing)
        end
        function Match:IsPlaying(player)
            return Teams:Get(player) == Team.Playing
        end
        function Match:AssignAll(team)
            for _, player in ipairs(Network:GetConnected())do
                Teams:Assign(player, team)
            end
        end
        function Match:AddPlayer(player)
            Teams:Assign(player, Team.Playing)
        end
        function Match:RemovePlayer(player)
            if Network:IsConnected(player) then
                Teams:Assign(player, Team.Lobby)
            else
                Teams:Assign(player, nil)
            end
        end

        return Match
    end
    function __DARKLUA_BUNDLE_MODULES.v()
        return __DARKLUA_BUNDLE_MODULES.load'i'{
            'None',
            'Environment',
            'Player',
            'Plate',
        }
    end
    function __DARKLUA_BUNDLE_MODULES.w()
        local RunService, Character, Plates, Arena, Maid, Scheduler, Assets, Match, Selector, random = game:GetService'RunService', __DARKLUA_BUNDLE_MODULES.load's', __DARKLUA_BUNDLE_MODULES.load't', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'h', __DARKLUA_BUNDLE_MODULES.load'f', __DARKLUA_BUNDLE_MODULES.load'u', __DARKLUA_BUNDLE_MODULES.load'v', Random.new()
        local randomBoolean, get2RandomPlayers, get2RandomPlates, parentArena, moveTo = function(
        )
            return random:NextInteger(0, 1) == 1
        end, function()
            local availablePlayers = Match:GetPlaying()

            if #availablePlayers < 2 then
                return nil, nil
            end

            local player1Index, player2Index = random:NextInteger(1, #availablePlayers), random:NextInteger(1, #availablePlayers - 1)

            return table.remove(availablePlayers, player1Index), availablePlayers[player2Index]
        end, function()
            local availablePlates = table.clone(Plates:GetPlates())

            if #availablePlates < 2 then
                return nil, nil
            end

            local plate1Index, plate2Index = random:NextInteger(1, #availablePlates), random:NextInteger(1, #availablePlates - 1)

            return table.remove(availablePlates, plate1Index), availablePlates[plate2Index]
        end, function(instance)
            Arena:Allow(instance)

            instance.Parent = Arena.Folder
        end, Arena.moveTo

        return table.freeze{
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will return to normal', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    context.Plate:Reset()
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s players(s) will return to normal', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context)
                    Character.refresh(context.Player)
                end,
            },
            {
                1.5,
                function()
                    local targets, amount = random:NextInteger(1, 3), random:NextInteger(2, 6)

                    return string.format('%s plate(s) will grow by %s studs', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context, _, amount)
                    context.Plate:Grow(amount)
                end,
            },
            {
                2,
                function()
                    local targets, amount = random:NextInteger(1, 3), random:NextInteger(2, 6)

                    return string.format('%s plate(s) will shrink by %s studs', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context, _, amount)
                    context.Plate:Shrink(amount)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 3)

                    return string.format('%s plate(s) will change color', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    context.Plate.Part.Color = Color3.new(random:NextNumber(), random:NextNumber(), random:NextNumber())
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 3)

                    return string.format('%s plate(s) will change material', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local materials = {
                        Enum.Material.Brick,
                        Enum.Material.Cobblestone,
                        Enum.Material.Concrete,
                        Enum.Material.CorrodedMetal,
                        Enum.Material.DiamondPlate,
                        Enum.Material.Fabric,
                        Enum.Material.Foil,
                        Enum.Material.ForceField,
                        Enum.Material.Glass,
                        Enum.Material.Granite,
                        Enum.Material.Grass,
                        Enum.Material.Ice,
                        Enum.Material.Marble,
                        Enum.Material.Metal,
                        Enum.Material.Neon,
                        Enum.Material.Pebble,
                        Enum.Material.Plastic,
                        Enum.Material.Sand,
                        Enum.Material.Slate,
                        Enum.Material.SmoothPlastic,
                        Enum.Material.Wood,
                        Enum.Material.WoodPlanks,
                    }

                    context.Plate.Part.Material = materials[random:NextInteger(1, #materials)]
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 3)

                    return string.format('%s plate(s) will become a disco plate', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local part = context.Plate.Part

                    context.Plate.PartMaid.DiscoThread = task.defer(function()
                        while true do
                            part.Color = Color3.new(random:NextNumber(), random:NextNumber(), random:NextNumber())

                            task.wait(0.5)
                        end
                    end)
                end,
            },
            {
                1,
                function()
                    local targets, amount = random:NextInteger(1, 2), random:NextInteger(10, 25)

                    return string.format('%s plate(s) will ascend %s studs', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context, _, amount)
                    context.Plate.Move += Vector3.yAxis * amount
                end,
            },
            {
                1,
                function()
                    local targets, amount = random:NextInteger(1, 2), random:NextInteger(10, 25)

                    return string.format('%s plate(s) will descend %s studs', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context, _, amount)
                    context.Plate.Move -= Vector3.yAxis * amount
                end,
            },
            {
                1,
                function()
                    return '1 plate will return to normal height'
                end,
                function()
                    return 1, Selector.Plate
                end,
                function(context)
                    context.Plate:MoveTo(context.Plate.Part.Position * Vector3.new(1, 0, 1) + Vector3.yAxis * Arena.Origin.Y)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will be split in half', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local plate = context.Plate
                    local half = Plates.from(plate)

                    if #plate.Owners > 1 then
                        local owners = plate.Owners
                        local transferAmount = math.floor(#owners / 2)

                        for _ = 1, transferAmount do
                            local owner = owners[random:NextInteger(1, #owners)]

                            plate:RemoveOwner(owner)
                        end

                        for _, owner in ipairs(plate.Owners)do
                            half:RemoveOwner(owner)
                        end
                    end

                    local splitX, size, cframe = randomBoolean(), plate.Part.Size, plate.CFrame

                    plate.Part.Size = (splitX and {
                        (Vector3.new(size.X / 2, size.Y, size.Z)),
                    } or {
                        (Vector3.new(size.X, size.Y, size.Z / 2)),
                    })[1]
                    half.Part.Size = plate.Part.Size

                    plate:SetCFrame(cframe * (splitX and {
                        (CFrame.new(size.X / 4, 0, 0)),
                    } or {
                        (CFrame.new(0, 0, size.Z / 4)),
                    })[1])
                    half:SetCFrame(cframe * (splitX and {
                        (CFrame.new(-size.X / 4, 0, 0)),
                    } or {
                        (CFrame.new(0, 0, -size.Z / 4)),
                    })[1])
                    context:Highlight(half.Part)
                end,
            },
            {
                1.5,
                '2 plates will merge together',
                nil,
                function(context)
                    local plate1, plate2 = get2RandomPlates()

                    if not plate1 or not plate2 then
                        return
                    end

                    local plate1Position, plate2Position, mergeOnX = (plate1.Part.Position), (plate2.Part.Position), randomBoolean()
                    local plate1Positive, maid = (mergeOnX and {
                        (plate1Position.X > plate2Position.X),
                    } or {
                        (plate1Position.Z > plate2Position.Z),
                    })[1], Maid.new()

                    plate1.PartMaid.MergeMaid = maid
                    plate2.PartMaid.MergeMaid = maid

                    local merge, updateMove = function()
                        plate1.PartMaid.MergeMaid = nil
                        plate2.PartMaid.MergeMaid = nil

                        maid:DoCleaning()

                        local part1, part2 = plate1.Part, plate2.Part
                        local size1, size2 = part1.Size, part2.Size
                        local add = (mergeOnX and {
                            (Vector3.new(size2.X, size1.Y - (size1.Y + size2.Y) / 2, size1.Z - (size1.Z + size2.Z) / 2)),
                        } or {
                            (Vector3.new(size1.X - (size1.X + size2.X) / 2, size1.Y - (size1.Y + size2.Y) / 2, size2.Z)),
                        })[1]

                        plate1.Part.Size += add

                        plate1:SetCFrame(plate1.CFrame * CFrame.new(((plate1Positive and {
                            (-add),
                        } or {add})[1]) / 2))

                        for _, owner in ipairs(plate2.Owners)do
                            plate1:AddOwner(owner)
                        end

                        plate1.LinearVelocity = plate1.LinearVelocity:Lerp(plate2.LinearVelocity, 0.5)
                        plate1.AngularVelocity = plate1.AngularVelocity:Lerp(plate2.AngularVelocity, 0.5)
                        part1.Color = part1.Color:Lerp(part2.Color, 0.5)

                        if plate1:GetShape() ~= plate2:GetShape() then
                            plate1:SetShape(Enum.PartType.Block)
                        end

                        plate2:Destroy()
                    end, function()
                        local plate1Target, plate2Target, plate1Size, plate2Size = (plate1:GetCFrameTarget()), (plate2:GetCFrameTarget()), (plate1.Part.Size), (plate2.Part.Size)
                        local middle, offset = plate1Target:Lerp(plate2Target, 0.5), (mergeOnX and {
                            ((plate1Size.X + plate2Size.X) / 4),
                        } or {
                            ((plate1Size.Z + plate2Size.Z) / 4),
                        })[1]
                        local plate1Offset, plate2Offset = (plate1Positive and {offset} or {
                            (-offset),
                        })[1], (plate1Positive and {
                            (-offset),
                        } or {offset})[1]

                        plate1:CFrameTo(middle * (mergeOnX and {
                            (CFrame.new(plate1Offset, 0, 0)),
                        } or {
                            (CFrame.new(0, 0, plate1Offset)),
                        })[1])
                        plate2:CFrameTo(middle * (mergeOnX and {
                            (CFrame.new(plate2Offset, 0, 0)),
                        } or {
                            (CFrame.new(0, 0, plate2Offset)),
                        })[1])

                        local size1, size2 = (plate1:GetSizeTarget()), (plate2:GetSizeTarget())

                        plate1:SizeTo((mergeOnX and {
                            (Vector3.new(size1.X, (size1.Y + size2.Y) / 2, (size1.Z + size2.Z) / 2)),
                        } or {
                            (Vector3.new((size1.X + size2.X) / 2, (size1.Y + size2.Y) / 2, size1.Z)),
                        })[1])
                        plate2:SizeTo((mergeOnX and {
                            (Vector3.new(size2.X, (size1.Y + size2.Y) / 2, (size1.Z + size2.Z) / 2)),
                        } or {
                            (Vector3.new((size1.X + size2.X) / 2, (size1.Y + size2.Y) / 2, size2.Z)),
                        })[1])
                    end

                    updateMove()

                    maid.loop = Scheduler.connect(0.1, function()
                        updateMove()

                        local totalMagnitude = plate1.Move.Magnitude + plate1.Rotate.Magnitude + plate1.SizeChange.Magnitude + plate2.Move.Magnitude + plate2.Rotate.Magnitude + plate2.SizeChange.Magnitude

                        if totalMagnitude < 0.25 then
                            merge()
                        end
                    end)

                    context:ShowPlate(plate1)
                    context:ShowPlate(plate2)
                end,
            },
            {
                1,
                'A bridge will be constructed between 2 plates',
                nil,
                function(context)
                    local plate1, plate2 = get2RandomPlates()

                    if not plate1 or not plate2 then
                        return
                    end

                    local part1, part2 = plate1.Part, plate2.Part
                    local position1, position2 = part1.Position + Vector3.yAxis * 1, part2.Position + Vector3.yAxis * 1
                    local distance, bridge = (position1 - position2).Magnitude, Instance.new'Part'

                    bridge.Anchored = false
                    bridge.CanCollide = true
                    bridge.Size = Vector3.new(5, distance, 0.75)
                    bridge.CFrame = CFrame.lookAt(position1, position2) * CFrame.new(0, 0.6, 
-distance * 0.5) * CFrame.Angles(math.rad(90), 0, 0)

                    parentArena(bridge)
                    bridge:SetNetworkOwner(nil)
                    context:ShowPlate(plate1)
                    context:ShowPlate(plate2)
                end,
            },
            {
                1,
                '1 plate will recieve a ball',
                {
                    1,
                    Selector.Plate,
                },
                function(context)
                    local model, ball = Instance.new'Model', Instance.new'Part'

                    ball.Material = Enum.Material.SmoothPlastic
                    ball.Size = Vector3.one * 7.5
                    ball.Shape = Enum.PartType.Ball
                    ball.Parent = model

                    parentArena(model)
                    moveTo(model, context.Plate.Part.Position)
                end,
            },
            {
                1,
                '1 plate will get a laser spinner',
                {
                    1,
                    Selector.Plate,
                },
                function(context)
                    local plate = context.Plate
                    local part, maid = plate.Part, plate.PartMaid:Add(Maid.new())
                    local laser = maid:Add(Instance.new'Part')

                    laser.Anchored = true
                    laser.CanCollide = false
                    laser.Material = Enum.Material.Neon
                    laser.Color = Color3.fromRGB(255, 0, 0)
                    laser.Parent = part
                    maid.TouchedThread = task.delay(1, function()
                        maid.Touched = laser.Touched:Connect(function(hit)
                            Character.damage(hit.Parent, 10)
                        end)
                    end)

                    local rotationPerSec = random:NextNumber(25, 35)

                    if randomBoolean() then
                        rotationPerSec = -rotationPerSec
                    end

                    local rotation = random:NextNumber(0, 360)

                    maid.Loop = RunService.Heartbeat:Connect(function(dt)
                        local maxSize = math.max(part.Size.X, part.Size.Z)

                        laser.Size = Vector3.new((1.4142135623730951) * maxSize, 1, 1)
                        rotation = (rotation + rotationPerSec * dt) % 360
                        laser.CFrame = part.CFrame * CFrame.new(Vector3.yAxis * (part.Size.Y / 2 + 0.5)) * CFrame.Angles(0, math.rad(rotation), 0)
                    end)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will become a treadmill', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local speed, dir = random:NextNumber(8, 12), random:NextInteger(1, 4)

                    if dir == 1 then
                        context.Plate.LinearVelocity += Vector3.new(speed, 0, 0)
                    elseif dir == 2 then
                        context.Plate.LinearVelocity -= Vector3.new(speed, 0, 0)
                    elseif dir == 3 then
                        context.Plate.LinearVelocity += Vector3.new(0, 0, speed)
                    else
                        context.Plate.LinearVelocity -= Vector3.new(0, 0, speed)
                    end
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will become a trampoline', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local power = random:NextNumber(50, 80)

                    context.Plate.LinearVelocity = Vector3.new(context.Plate.LinearVelocity.X, math.max(context.Plate.LinearVelocity.Y, power), context.Plate.LinearVelocity.Z)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will become a cube', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local size = context.Plate:GetSizeTarget()
                    local maxSize = math.max(size.X, size.Y, size.Z)

                    context.Plate:SizeTo(Vector3.one * maxSize)
                    context.Plate:SetShape(Enum.PartType.Block)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will become a sphere', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local size = context.Plate:GetSizeTarget()
                    local maxSize = math.max(size.X, size.Y, size.Z)

                    context.Plate:SizeTo(Vector3.one * maxSize)
                    context.Plate:SetShape(Enum.PartType.Ball)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will become a cylinder', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local size = context.Plate:GetSizeTarget()
                    local maxSize = math.max(size.X, size.Z)

                    context.Plate:SizeTo(Vector3.new(maxSize, size.Y, maxSize))
                    context.Plate:SetShape(Enum.PartType.Cylinder)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will flip', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local rotation = randomBoolean() and 180 or -180

                    context.Plate.Rotate += (randomBoolean() and {
                        (Vector3.new(rotation, 0, 0)),
                    } or {
                        (Vector3.new(0, 0, rotation)),
                    })[1]
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will rotate', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    context.Plate.Rotate += Vector3.new(0, (randomBoolean() and 90 or 
-90) * random:NextNumber(2, 4), 0)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s plate(s) will move', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local direction, distance = Vector3.new(random:NextNumber(-1, 1), 0, random:NextNumber(
-1, 1)).Unit, random:NextNumber(15, 30)

                    context.Plate.Move += direction * distance
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 2)

                    return string.format('%s players(s) will teleport to a random plate', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context)
                    local availablePlates = Plates:GetPlates()

                    if #availablePlates < 1 then
                        return
                    end

                    local plate = availablePlates[random:NextInteger(1, #availablePlates)]

                    plate:Bring(context.Player)
                end,
            },
            {
                1,
                '2 plates will swap position',
                nil,
                function(context)
                    local plate1, plate2 = get2RandomPlates()

                    if not plate1 or not plate2 then
                        return
                    end

                    local cframe1, cframe2 = plate1.CFrame, plate2.CFrame

                    plate1:SetCFrame(cframe2)
                    plate2:SetCFrame(cframe1)
                    context:ShowPlate(plate1)
                    context:ShowPlate(plate2)
                end,
            },
            {
                1,
                '2 players will swap position',
                nil,
                function(context)
                    local player1, player2 = get2RandomPlayers()

                    if not player1 or not player2 then
                        return
                    end

                    local cframe1, cframe2 = Character.getCFrame(player1), Character.getCFrame(player2)

                    Character.teleport(player1, cframe2)
                    Character.teleport(player2, cframe1)
                    context:ShowPlayer(player1)
                    context:ShowPlayer(player2)
                end,
            },
            {
                1,
                function()
                    local targets, amount = random:NextInteger(1, 3), random:NextInteger(3, 7)

                    return string.format('%s player(s) will gain %s walkspeed', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context, _, amount)
                    local humanoid = (Character.getHumanoid(context.Player))

                    if humanoid then
                        humanoid.WalkSpeed += amount
                    end
                end,
            },
            {
                1,
                function()
                    local targets, amount = random:NextInteger(1, 3), random:NextInteger(3, 7)

                    return string.format('%s player(s) will lose %s walkspeed', tostring(targets), tostring(amount)), targets, amount
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context, _, amount)
                    local humanoid = (Character.getHumanoid(context.Player))

                    if humanoid then
                        humanoid.WalkSpeed -= amount
                    end
                end,
            },
            {
                1,
                function()
                    local targets, minutes = random:NextInteger(1, 2), random:NextInteger(1, 2)

                    return string.format('%s player(s) will gain a forcefield for %s minute(s)', tostring(targets), tostring(minutes)), targets, minutes
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context, _, minutes)
                    local forceField = Instance.new'ForceField'

                    forceField.Parent = context.Player.Character

                    task.delay(minutes * 60, game.Destroy, forceField)
                end,
            },
            {
                1,
                '2 players lives will becomed linked',
                nil,
                function(context)
                    local player1, player2 = get2RandomPlayers()

                    if not player1 or not player2 then
                        return
                    end

                    local character1, character2 = Character.get(player1), Character.get(player2)
                    local humanoid1, humanoid2 = Character.getHumanoid(character1), Character.getHumanoid(character2)

                    humanoid1.Died:Once(function()
                        task.defer(Character.kill, character2)
                    end)
                    humanoid2.Died:Once(function()
                        task.defer(Character.kill, character1)
                    end)
                    context:ShowPlayer(player1)
                    context:ShowPlayer(player2)

                    local part1, part2, attachment1 = Character.getPart(character1), Character.getPart(character2), Instance.new'Attachment'

                    attachment1.Parent = part1

                    local attachment2 = Instance.new'Attachment'

                    attachment2.Parent = part2

                    local beam = (Assets.Server.LifeLinkBeam:Clone())

                    beam.Attachment0 = attachment1
                    beam.Attachment1 = attachment2
                    beam.Parent = part1
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 1)

                    return string.format('%s player(s) will recieve a ball and chain', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Player
                end,
                function(context)
                    local character = Character.get(context.Player)
                    local leftLeg = character:FindFirstChild'Left Leg' or character:FindFirstChild'LeftLowerLeg'

                    if not leftLeg then
                        return
                    end

                    local ball = Instance.new'Part'

                    ball.Color = Color3.new(0, 0, 0)
                    ball.Shape = Enum.PartType.Ball
                    ball.Size = Vector3.one * 2.5
                    ball.Material = Enum.Material.Metal
                    ball.Position = leftLeg.Position + Vector3.one * 1.5
                    ball.CustomPhysicalProperties = PhysicalProperties.new(50, 2, 0)
                    ball.Parent = character

                    local attachment0 = Instance.new'Attachment'

                    attachment0.Parent = leftLeg

                    local attachment1 = Instance.new'Attachment'

                    attachment1.Parent = ball

                    local ropeConstraint = Instance.new'RopeConstraint'

                    ropeConstraint.Color = BrickColor.DarkGray()
                    ropeConstraint.Thickness = 0.2
                    ropeConstraint.Visible = true
                    ropeConstraint.Length = 6
                    ropeConstraint.Attachment0 = attachment0
                    ropeConstraint.Attachment1 = attachment1
                    ropeConstraint.Parent = ball
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 1)

                    return string.format('%s plate(s) will begin slowly sinking forever', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local plate, sinkPerSecond = context.Plate, 0.3333333333333333

                    plate.PartMaid.ForeverSink = RunService.Heartbeat:Connect(function(
                        dt
                    )
                        plate:SetPosition(plate.CFrame.Position - Vector3.yAxis * sinkPerSecond * dt)
                    end)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 1)

                    return string.format('%s plate(s) will become an elevator', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local plate, maid = context.Plate, Maid.new()

                    plate.PartMaid.Elevator = maid
                    maid.Thead = task.defer(function()
                        local move, cooldown = 20, 3
                        local duration = move / Plates.MovePerSecond

                        plate.Move += Vector3.yAxis * move / 2

                        task.wait(duration / 2 + cooldown)

                        while true do
                            plate.Move -= Vector3.yAxis * move

                            task.wait(duration + cooldown)

                            plate.Move += Vector3.yAxis * move

                            task.wait(duration + cooldown)
                        end
                    end)
                end,
            },
            {
                1,
                function()
                    local targets = random:NextInteger(1, 1)

                    return string.format('%s plate(s) will be given controls', tostring(targets)), targets
                end,
                function(targets)
                    return targets, Selector.Plate
                end,
                function(context)
                    local plate = context.Plate
                    local part, maid = plate.Part, Maid.new()

                    plate.PartMaid.Controls = maid

                    local addControl = function(dir, rot)
                        local activeColor, inactiveColor, range, control = Color3.fromRGB(165, 79, 21), Color3.fromRGB(0, 0, 0), 10, (maid:Add(Instance.new'Part'))

                        control.Material = Enum.Material.SmoothPlastic
                        control.Color = activeColor
                        control.Size = Vector3.new(2, 0.1, 2)
                        control.Parent = part

                        local decal = (maid:Add(Instance.new'Decal'))

                        decal.Texture = 'rbxassetid://153287088'
                        decal.Face = Enum.NormalId.Top
                        decal.Parent = control

                        local clickDetector = (maid:Add(Instance.new'ClickDetector'))

                        clickDetector.MaxActivationDistance = range
                        clickDetector.Parent = control

                        local weld = (maid:Add(Instance.new'Weld'))

                        weld.Part0 = part
                        weld.Part1 = control
                        weld.Parent = control

                        local updateWeld = function()
                            local size = part.Size

                            weld.C0 = CFrame.new(dir.X * size.X / 2, size.Y / 2, dir.Z * size.Z / 2)
                            weld.C1 = CFrame.new(-1, -5E-2, 0) * CFrame.Angles(0, math.rad(rot), 0)
                        end

                        updateWeld()
                        maid:GiveTask(part:GetPropertyChangedSignal'Size':Connect(updateWeld))

                        local db = false

                        clickDetector.MouseClick:Connect(function(player)
                            if db or not Match:IsPlaying(player) then
                                return
                            end

                            local duration = 2

                            task.delay(duration + 0.5, function()
                                db = false
                                control.Color = activeColor
                                clickDetector.MaxActivationDistance = range
                            end)

                            db = true
                            control.Color = inactiveColor
                            clickDetector.MaxActivationDistance = 0

                            plate:CFrameTo(CFrame.new(plate:GetMoveTarget()) * plate.CFrame.Rotation * CFrame.new(dir * Plates.MovePerSecond * duration))
                        end)
                    end

                    addControl(Vector3.new(1, 0, 0), 180)
                    addControl(Vector3.new(-1, 0, 0), 0)
                    addControl(Vector3.new(0, 0, 1), -90)
                    addControl(Vector3.new(0, 0, -1), 90)
                end,
            },
        }
    end
    function __DARKLUA_BUNDLE_MODULES.x()
        local List, Event = __DARKLUA_BUNDLE_MODULES.load'w', {}

        Event.__index = Event

        function Event.new(data)
            local self = setmetatable({}, Event)

            self.Data = data

            return self
        end
        function Event:RunFunc(index, ...)
            local value = self.Data[index]

            if type(value) == 'function' then
                return value(...)
            elseif type(value) == 'table' then
                return unpack(value)
            else
                return value
            end
        end
        function Event:Init()
            return self:RunFunc(2)
        end
        function Event:Selector(...)
            return self:RunFunc(3, ...)
        end
        function Event:Run(context, ...)
            self.Data[4](context, ...)
        end

        local Events = {}

        function Events:GetPossible(Game)
            local possible, totalWeight = table.clone(List), 0

            for _, data in ipairs(possible)do
                totalWeight += data[1]
            end

            possible.totalWeight = totalWeight

            return possible
        end
        function Events:Get(possible)
            local random = Random.new()
            local targetWeight, weightCounter = random:NextInteger(1, possible.totalWeight), 0

            for _, data in ipairs(possible)do
                weightCounter += data[1]

                if weightCounter >= targetWeight then
                    return Event.new(data)
                end
            end
        end

        return Events
    end
    function __DARKLUA_BUNDLE_MODULES.y()
        local Functions = {}

        function Functions.formatPlayerName(player)
            if player.DisplayName == player.Name then
                return player.DisplayName
            end

            return string.format('%s (@%s)', tostring(player.DisplayName), tostring(player.Name))
        end
        function Functions.formatPlateOwnerName(owners)
            if #owners == 0 then
                return 'No one'
            end

            local names = table.create(#owners)

            for index, player in ipairs(owners)do
                names[index] = Functions.formatPlayerName(player)
            end

            return table.concat(names, ' + ')
        end

        return table.freeze(Functions)
    end
    function __DARKLUA_BUNDLE_MODULES.z()
        local Status, Network, Maid, HeadMaid, Teams, Team, Arena, Plates, Character, Events, EventSelector, Functions, Scheduler, Match, RunService, Players, Game = __DARKLUA_BUNDLE_MODULES.load'm', __DARKLUA_BUNDLE_MODULES.load'l', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'n', __DARKLUA_BUNDLE_MODULES.load'o', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load't', __DARKLUA_BUNDLE_MODULES.load's', __DARKLUA_BUNDLE_MODULES.load'x', __DARKLUA_BUNDLE_MODULES.load'v', __DARKLUA_BUNDLE_MODULES.load'y', __DARKLUA_BUNDLE_MODULES.load'h', __DARKLUA_BUNDLE_MODULES.load'u', game:GetService'RunService', game:GetService'Players', {}

        Game.HeadMaid = HeadMaid:Add(Maid.new())
        Game.Maid = Game.HeadMaid:Add(Maid.new())
        Game.EndEarly = false
        Game.Paused = false

        function Game:Restart()
            Game.EndEarly = true

            task.defer(function()
                while Game.EndEarly do
                    Status'Restarting...'
                    task.wait()
                end
            end)
        end
        function Game:Pause()
            Game.Paused = true
        end
        function Game:Unpause()
            Game.Paused = false
        end
        function Game:YieldIfPaused()
            while Game.Paused do
                Status'Game paused'
                task.wait()
            end
        end
        function Game:Intermission()
            local duration, playersNeeded = RunService:IsStudio() and 5 or 15, RunService:IsStudio() and 1 or 2
            local hasPlayers = function()
                return #Network:GetConnected() >= playersNeeded
            end

            while true do
                local __DARKLUA_CONTINUE_39 = false

                repeat
                    if not hasPlayers() then
                        Status(string.format('Waiting for %s more player(s)...', tostring(playersNeeded - #Network:GetConnected())))
                        task.wait()

                        __DARKLUA_CONTINUE_39 = true

                        break
                    end

                    for left = duration, 1, -1 do
                        if not hasPlayers() then
                            break
                        end

                        Game:YieldIfPaused()
                        Status(string.format('Intermission - %s', tostring(left)))
                        task.wait(1)
                    end

                    if hasPlayers() then
                        break
                    end

                    __DARKLUA_CONTINUE_39 = true
                until true

                if not __DARKLUA_CONTINUE_39 then
                    break
                end
            end
        end
        function Game:StartGame()
            Status'Starting game...'
            Match:AssignAll(Team.Playing)

            local playerAmount = Match:GetAmountPlaying()

            for _, player in ipairs(Match:GetPlaying())do
                Character.remove(player)
            end

            local plateSize, gap, gridSize = math.max(Plates.DefaultPlateSize.X, Plates.DefaultPlateSize.Z), 5, math.ceil(math.sqrt(playerAmount + 5))

            Arena:SetSize((plateSize + gap) * (gridSize + 1))
            Arena:Create()
            Plates:ClearAll()

            local random, takenSpots, gridMax = Random.new(), {}, gridSize - 1

            for _, player in ipairs(Match:GetPlaying())do
                local __DARKLUA_CONTINUE_42 = false

                repeat
                    if player.Parent ~= Players then
                        __DARKLUA_CONTINUE_42 = true

                        break
                    end

                    local x, z

                    while true do
                        local __DARKLUA_CONTINUE_43 = false

                        repeat
                            x, z = random:NextInteger(0, gridMax), random:NextInteger(0, gridMax)

                            local coordinate = string.format('%s,%s', tostring(x), tostring(z))

                            if takenSpots[coordinate] then
                                __DARKLUA_CONTINUE_43 = true

                                break
                            end

                            takenSpots[coordinate] = true

                            break
                        until true

                        if not __DARKLUA_CONTINUE_43 then
                            break
                        end
                    end

                    local plate = Plates.new(player)

                    plate:SetPosition(Arena.Origin + Vector3.new(x - gridMax / 2, 0, z - gridMax / 2) * (plateSize + gap))

                    while not Character.load(player) do
                        task.wait()
                    end
                    while not Character.isReady(player) do
                        task.wait()
                    end

                    Character.freeze(player)
                    plate:Bring(player)

                    local root = Character.getRoot(player)

                    if root then
                        Character.teleport(player, root.Position + Vector3.yAxis * 3)
                    end

                    __DARKLUA_CONTINUE_42 = true
                until true

                if not __DARKLUA_CONTINUE_42 then
                    break
                end
            end

            task.wait(3)

            for _, player in ipairs(Match:GetPlaying())do
                Character.unfreeze(player)
            end

            task.wait(1)
        end

        local eventContext = {}

        eventContext.Maid = HeadMaid:Add(Maid.new())
        eventContext.__index = eventContext

        function eventContext:Show(name, instance)
            table.insert(self.Names, name)
            Status(string.format('%s - %s', tostring(self.Status), tostring(table.concat(self.Names, ' '))))
            self:Highlight(instance)
        end
        function eventContext:Highlight(instance)
            local highlight = Instance.new'Highlight'

            highlight.FillColor = Color3.new(0, 0, 1)
            highlight.FillTransparency = 0.5
            highlight.OutlineColor = Color3.new(1, 1, 1)
            highlight.OutlineTransparency = 0
            highlight.Parent = instance

            task.delay(0.75, game.Destroy, highlight)

            local soundTarget = (instance:IsA'Model' and {
                (instance.PrimaryPart),
            } or {
                ((instance:IsA'BasePart' and {instance} or {nil})[1]),
            })[1]

            if soundTarget then
                local sound = Instance.new'Sound'

                sound.SoundId = 'rbxassetid://6380285152'
                sound.Volume = 4
                sound.PlaybackSpeed = Random.new():NextNumber(1, 1.05) + (#self.Names - 1) * 0.1
                sound.Parent = soundTarget

                sound:Play()
                sound.Ended:Once(function()
                    sound:Destroy()
                end)
            end
        end
        function eventContext:ShowPlayer(player)
            self:Show(Functions.formatPlayerName(player), player.Character)
        end
        function eventContext:ShowPlate(plate)
            return self:Show(Functions.formatPlateOwnerName(plate.Owners), plate.Part)
        end
        function Game:RunEvent(possibleEvents)
            local event = Events:Get(possibleEvents)

            assert(event, 'Unable to find an event!')

            local args = table.pack(event:Init())
            local status, durationLeft = args[1], 5

            while durationLeft > 0 do
                Game:YieldIfPaused()

                if Game.EndEarly then
                    return
                end

                local display = math.round(math.max(durationLeft, 0) * 10) / 10
                local isWhole = math.floor(display) == display

                Status(string.format('%s - %s%s', tostring(status), tostring(display), tostring(isWhole and '.0' or '')))

                durationLeft -= RunService.Heartbeat:Wait()
            end

            local amount, selector, showSelected, combineSelected = event:Selector(unpack(args, 2, args.n))

            amount = amount or 1
            selector = selector or EventSelector.None
            showSelected = (showSelected ~= nil and {showSelected} or {true})[1]
            combineSelected = combineSelected or false

            local context = setmetatable({}, eventContext)

            context.Event = event
            context.Status = status
            context.Names = {}
            context.Amount = amount
            context.Selector = selector
            context.ShowSelected = showSelected
            context.CombineSelected = combineSelected
            context.Players = {}
            context.Plates = {}

            for index = 1, amount do
                context.Player = nil
                context.Plate = nil

                local random = Random.new()

                if selector == EventSelector.Player then
                    local playing = Match:GetPlaying()

                    if #playing < 1 then
                        break
                    end

                    context.Player = playing[random:NextInteger(1, #playing)]

                    table.insert(context.Players, context.Player)
                elseif selector == EventSelector.Plate then
                    local plates = Plates:GetPlates()

                    if #plates < 1 then
                        break
                    end

                    context.Plate = plates[random:NextInteger(1, #plates)]

                    table.insert(context.Plates, context.Plate)
                end
                if not combineSelected then
                    event:Run(context, unpack(args, 2, args.n))

                    if showSelected then
                        if selector == EventSelector.Player then
                            context:ShowPlayer(context.Player)
                        elseif selector == EventSelector.Plate then
                            context:ShowPlate(context.Plate)
                        end
                    end
                    if index ~= amount then
                        task.wait(1)
                    end
                end
            end

            if combineSelected then
                context.Player = nil
                context.Plate = nil

                event:Run(context, unpack(args, 2, args.n))

                if showSelected then
                    for _, player in ipairs(context.Players)do
                        context:ShowPlayer(player)
                    end
                    for _, plate in ipairs(context.Plates)do
                        context:ShowPlate(plate)
                    end
                end
            end

            task.wait(3)
        end
        function Game:EndGame()
            for _, player in ipairs(Match:GetPlaying())do
                Character.freeze(player)
                task.defer(Character.load, player)
                Match:RemovePlayer(player)
            end
        end
        function Game:RunCycle()
            Game.EndEarly = false

            eventContext.Maid:DoCleaning()
            Match:AssignAll(Team.Lobby)
            Plates:ClearAll()
            Arena:Remove()
            Game:Intermission()
            Game:StartGame()

            local possibleEvents = Events:GetPossible(Game)

            while Match:GetAmountPlaying() > (RunService:IsStudio() and 0 or 1) and not Game.EndEarly do
                Game:YieldIfPaused()
                Game:RunEvent(possibleEvents)
            end

            Game:EndGame()

            Game.EndEarly = false

            task.wait(3)
        end
        function Game:PlayerDied(player)
            if Network:IsConnected(player) then
                Match:RemovePlayer(player)
            end

            Plates:PlayerDied(player)
        end
        function Game:Init()
            Game.HeadMaid.GameLoop = task.defer(function()
                while true do
                    local __DARKLUA_CONTINUE_53 = false

                    repeat
                        local success, err = pcall(function()
                            Game.Maid:DoCleaning()
                            Game:RunCycle()
                        end)

                        if success then
                            __DARKLUA_CONTINUE_53 = true

                            break
                        end

                        Status'An unexpected error occured!'
                        warn(err)
                        task.wait(5)

                        __DARKLUA_CONTINUE_53 = true
                    until true

                    if not __DARKLUA_CONTINUE_53 then
                        break
                    end
                end
            end)

            local playerMaid = Game.HeadMaid:Add(Maid.new())
            local handlePlayer = function(player)
                Teams:Assign(player, Team.Lobby)

                local onSpawn, maid = function(character)
                    if Match:IsPlaying(player) then
                        Arena:Allow(character)
                    end

                    while not Character.isReady(character) do
                        task.wait()
                    end

                    local forceField = Instance.new'ForceField'

                    forceField.Parent = character

                    task.delay(10, game.Destroy, forceField)

                    if Match:IsPlaying(player) then
                        return
                    end

                    local lobby = Arena.Lobby

                    if not lobby then
                        return
                    end

                    local spawnLocations = {}

                    for _, child in ipairs(lobby:GetChildren())do
                        if child.Name == 'SpawnLocation' then
                            table.insert(spawnLocations, child)
                        end
                    end

                    task.wait(0.1)

                    local spawnLocation = spawnLocations[Random.new():NextInteger(1, #spawnLocations)]

                    character:MoveTo(spawnLocation.Position)
                end, Maid.new()

                playerMaid[player] = maid
                maid.CharacterAdded = player.CharacterAdded:Connect(function(
                    character
                )
                    task.defer(onSpawn, character)

                    local humanoid

                    while true do
                        humanoid = character:FindFirstChildOfClass'Humanoid'

                        if humanoid then
                            break
                        end

                        task.wait()
                    end

                    humanoid.Died:Connect(function()
                        Game:PlayerDied(player)
                    end)
                end)

                if player.Character then
                    task.defer(onSpawn, player.Character)
                end
            end

            Game.HeadMaid.PlayerConnected = Network.Connected:Connect(handlePlayer)

            for _, player in ipairs(Network:GetConnected())do
                task.defer(handlePlayer, player)
            end

            Game.HeadMaid.PlayerDisconnected = Network.Disconnected:Connect(function(
                player
            )
                pcall(player.LoadCharacter, player)

                playerMaid[player] = nil

                Game:PlayerDied(player)
            end)
            Game.HeadMaid.OutOfBoundsLoop = Scheduler.connect(0.5, function()
                local maxDist, ori = Arena.Size / 2 + 100, Arena.Origin

                for _, player in ipairs(Match:GetPlaying())do
                    local __DARKLUA_CONTINUE_58 = false

                    repeat
                        local root = Character.getRoot(player)

                        if not root then
                            __DARKLUA_CONTINUE_58 = true

                            break
                        end

                        local pos = root.Position

                        if pos.X > ori.X + maxDist or pos.X < ori.X - maxDist or pos.Z > ori.Z + maxDist or pos.Z < ori.Z - maxDist then
                            Game:PlayerDied(player)
                            Character.remove(player)
                            Character.load(player)
                        end

                        __DARKLUA_CONTINUE_58 = true
                    until true

                    if not __DARKLUA_CONTINUE_58 then
                        break
                    end
                end
            end)
        end

        return Game
    end
    function __DARKLUA_BUNDLE_MODULES.A()
        return 
[=[local __DARKLUA_BUNDLE_MODULES

__DARKLUA_BUNDLE_MODULES = {
    cache = {},
    load = function(m)
        if not __DARKLUA_BUNDLE_MODULES.cache[m] then
            __DARKLUA_BUNDLE_MODULES.cache[m] = {
                c = __DARKLUA_BUNDLE_MODULES[m](),
            }
        end

        return __DARKLUA_BUNDLE_MODULES.cache[m].c
    end,
}

do
    function __DARKLUA_BUNDLE_MODULES.a()
        local Maid = {}

        Maid.ClassName = 'Maid'

        function Maid.new()
            return setmetatable({_tasks = {}}, Maid)
        end
        function Maid.isMaid(value)
            return type(value) == 'table' and value.ClassName == 'Maid'
        end
        function Maid:__index(index)
            if Maid[index] then
                return Maid[index]
            else
                return self._tasks[index]
            end
        end
        function Maid:__newindex(index, newTask)
            if Maid[index] ~= nil then
                error(string.format("Cannot use '%s' as a Maid key", tostring(index)), 2)
            end

            local tasks = self._tasks
            local job = tasks[index]

            if job == newTask then
                return
            end

            tasks[index] = newTask

            if job then
                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' then
                    if type(job.Destroy) == 'function' then
                        job:Destroy()
                    end
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        task.defer(function()
                            task.cancel(job)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end
            end
        end
        function Maid:Add(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            self[#self._tasks + 1] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.Add] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return task
        end
        function Maid:GiveTask(task)
            if not task then
                error('Task cannot be false or nil', 2)
            end

            local taskId = #self._tasks + 1

            self[taskId] = task

            if type(task) == 'table' and not task.Destroy then
                warn('[Maid.GiveTask] - Gave table task without .Destroy\n\n' .. debug.traceback())
            end

            return taskId
        end
        function Maid:GivePromise(promise)
            if not promise:IsPending() then
                return promise
            end

            local newPromise = promise.resolved(promise)
            local id = self:GiveTask(newPromise)

            newPromise:Finally(function()
                self[id] = nil
            end)

            return newPromise
        end
        function Maid:DoCleaning()
            local tasks = self._tasks

            for index, job in pairs(tasks)do
                if typeof(job) == 'RBXScriptConnection' then
                    tasks[index] = nil

                    job:Disconnect()
                end
            end

            local index, job = next(tasks)

            while job ~= nil do
                tasks[index] = nil

                local jobType = typeof(job)

                if jobType == 'function' then
                    job()
                elseif jobType == 'table' and type(job.Destroy) == 'function' then
                    job:Destroy()
                elseif jobType == 'Instance' then
                    job:Destroy()
                elseif jobType == 'thread' then
                    local cancelled

                    if coroutine.running() ~= job then
                        cancelled = pcall(function()
                            task.cancel(job)
                        end)
                    end
                    if not cancelled then
                        local toCancel = job

                        task.defer(function()
                            task.cancel(toCancel)
                        end)
                    end
                elseif jobType == 'RBXScriptConnection' then
                    job:Disconnect()
                end

                index, job = next(tasks)
            end
        end

        Maid.Destroy = Maid.DoCleaning

        return Maid
    end
    function __DARKLUA_BUNDLE_MODULES.b()
        return __DARKLUA_BUNDLE_MODULES.load'a'.new()
    end
    function __DARKLUA_BUNDLE_MODULES.c()
        local freeRunnerThread
        local acquireRunnerThreadAndCallEventHandler = function(fn, ...)
            local acquiredRunnerThread = freeRunnerThread

            freeRunnerThread = nil

            fn(...)

            freeRunnerThread = acquiredRunnerThread
        end
        local runEventHandlerInFreeThread, Connection = function(...)
            acquireRunnerThreadAndCallEventHandler(...)

            while true do
                acquireRunnerThreadAndCallEventHandler(coroutine.yield())
            end
        end, {}

        Connection.__index = Connection

        function Connection:Disconnect()
            if not self.Connected then
                return
            end

            self.Connected = false

            if self._signal._handlerListHead == self then
                self._signal._handlerListHead = self._next
            else
                local prev = self._signal._handlerListHead

                while prev and prev._next ~= self do
                    prev = prev._next
                end

                if prev then
                    prev._next = self._next
                end
            end
        end

        Connection.Destroy = Connection.Disconnect

        setmetatable(Connection, {
            __index = function(_tb, key)
                error(('Attempt to get Connection::%s (not a valid member)'):format(tostring(key)), 2)
            end,
            __newindex = function(_tb, key, _value)
                error(('Attempt to set Connection::%s (not a valid member)'):format(tostring(key)), 2)
            end,
        })

        local Signal = {}

        Signal.__index = Signal

        function Signal.new()
            local self = setmetatable({
                _handlerListHead = false,
                _proxyHandler = nil,
                _yieldedThreads = nil,
            }, Signal)

            return self
        end
        function Signal.Wrap(rbxScriptSignal)
            assert(typeof(rbxScriptSignal) == 'RBXScriptSignal', 'Argument #1 to Signal.Wrap must be a RBXScriptSignal; got ' .. typeof(rbxScriptSignal))

            local signal = Signal.new()

            signal._proxyHandler = rbxScriptSignal:Connect(function(...)
                signal:Fire(...)
            end)

            return signal
        end
        function Signal.Is(obj)
            return type(obj) == 'table' and getmetatable(obj) == Signal
        end
        function Signal:Connect(fn)
            local connection = setmetatable({
                Connected = true,
                _signal = self,
                _fn = fn,
                _next = false,
            }, Connection)

            if self._handlerListHead then
                connection._next = self._handlerListHead
                self._handlerListHead = connection
            else
                self._handlerListHead = connection
            end

            return connection
        end
        function Signal:ConnectOnce(fn)
            return self:Once(fn)
        end
        function Signal:Once(fn)
            local connection, done = nil, false

            connection = self:Connect(function(...)
                if done then
                    return
                end

                done = true

                connection:Disconnect()
                fn(...)
            end)

            return connection
        end
        function Signal:GetConnections()
            local items, item = {}, self._handlerListHead

            while item do
                table.insert(items, item)

                item = item._next
            end

            return items
        end
        function Signal:DisconnectAll()
            local item = self._handlerListHead

            while item do
                item.Connected = false
                item = item._next
            end

            self._handlerListHead = false

            local yieldedThreads = rawget(self, '_yieldedThreads')

            if yieldedThreads then
                for thread in next, yieldedThreads do
                    if coroutine.status(thread) == 'suspended' then
                        warn(debug.traceback(thread, 'signal disconnected; yielded thread cancelled', 2))
                        task.cancel(thread)
                    end
                end

                table.clear(self._yieldedThreads)
            end
        end
        function Signal:Fire(...)
            local item = self._handlerListHead

            while item do
                if item.Connected then
                    if not freeRunnerThread then
                        freeRunnerThread = coroutine.create(runEventHandlerInFreeThread)
                    end

                    task.spawn(freeRunnerThread, item._fn, ...)
                end

                item = item._next
            end
        end
        function Signal:FireDeferred(...)
            local item = self._handlerListHead

            while item do
                local conn = item

                task.defer(function(...)
                    if conn.Connected then
                        conn._fn(...)
                    end
                end, ...)

                item = item._next
            end
        end
        function Signal:Wait()
            local yieldedThreads = rawget(self, '_yieldedThreads')

            if not yieldedThreads then
                yieldedThreads = {}

                rawset(self, '_yieldedThreads', yieldedThreads)
            end

            local thread = coroutine.running()

            yieldedThreads[thread] = true

            self:Once(function(...)
                yieldedThreads[thread] = nil

                task.spawn(thread, ...)
            end)

            return coroutine.yield()
        end
        function Signal:Destroy()
            self:DisconnectAll()

            local proxyHandler = rawget(self, '_proxyHandler')

            if proxyHandler then
                proxyHandler:Disconnect()
            end
        end

        setmetatable(Signal, {
            __index = function(_tb, key)
                error(('Attempt to get Signal::%s (not a valid member)'):format(tostring(key)), 2)
            end,
            __newindex = function(_tb, key, _value)
                error(('Attempt to set Signal::%s (not a valid member)'):format(tostring(key)), 2)
            end,
        })

        return table.freeze{
            new = Signal.new,
            Wrap = Signal.Wrap,
            Is = Signal.Is,
        }
    end
    function __DARKLUA_BUNDLE_MODULES.d()
        local ipairs, table = ipairs, table

        return function(enumItems)
            local enum = {}

            for index, name in ipairs(enumItems)do
                enum[name] = index - 1
                enum[index - 1] = name
            end

            setmetatable(enum, {
                __index = function(_, index)
                    return error(string.format('"%s" is not a valid enum item.', tostring(index)), 2)
                end,
            })

            return table.freeze(enum)
        end
    end
    function __DARKLUA_BUNDLE_MODULES.e()
        local Enum = __DARKLUA_BUNDLE_MODULES.load'd'

        return table.freeze{
            Server = Enum{
                'Connect',
                'Event',
                'Invoke',
            },
            Client = Enum{
                'ConnectResult',
                'Event',
                'InvokeResult',
                'Disconnect',
            },
        }
    end
    function __DARKLUA_BUNDLE_MODULES.f()
        return 'Network'
    end
    function __DARKLUA_BUNDLE_MODULES.g()
        local Maid, Signal, HeadMaid, HttpService, ReplicatedStorage, Methods = __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'c', __DARKLUA_BUNDLE_MODULES.load'b', game:GetService'HttpService', game:GetService'ReplicatedStorage', __DARKLUA_BUNDLE_MODULES.load'e'
        local Network = {}

        Network.Maid = HeadMaid:Add(Maid.new())
        Network.Id = __DARKLUA_BUNDLE_MODULES.load'f'
        Network.Key = nil
        Network.ConnectResult = (Network.Maid:Add(Signal.new()))
        Network.InvokeResults = {}
        Network.Remotes = {}
        Network.Events = {}

        local alive = true

        Network.Maid:GiveTask(function()
            alive = false
        end)

        local send = function(method, ...)
            do
                task.spawn(function(...)
                    local remotes = Network.Remotes

                    while true do
                        if not alive then
                            return
                        end

                        for index = #remotes, 1, -1 do
                            local remote = remotes[index]

                            if remote.Parent ~= ReplicatedStorage then
                                table.remove(remotes, index)

                                Network.Maid[remote] = nil
                            end
                        end

                        if #remotes > 0 then
                            break
                        end

                        task.wait()
                    end

                    for _, remote in ipairs(remotes)do
                        remote:FireServer(Network:GetKey(), method, ...)
                    end
                end, ...)
            end
        end

        function Network:SetId(id)
            Network.Id = id
        end
        function Network:SetKey(key)
            Network.Key = key
        end
        function Network:GetKey()
            return Network.Key and Network.Key.Server
        end

        local handleRemote = function(remote)
            if remote.ClassName ~= 'RemoteEvent' or remote.Name ~= Network.Id then
                return
            end

            remote:FireServer(Network:GetKey(), Methods.Server.Connect)

            Network.Maid[remote] = remote.OnClientEvent:Connect(function(
                key,
                method,
                ...
            )
                if key ~= Network.Key.Client then
                    return
                end
                if method == Methods.Client.ConnectResult then
                    Network.ConnectResult:Fire(...)
                elseif method == Methods.Client.Event then
                    local event = ...
                    local callback = Network.Events[event]

                    if callback then
                        callback(select(2, ...))
                    end
                elseif method == Methods.Client.InvokeResult then
                    local id = ...
                    local signal = Network.InvokeResults[id]

                    if signal then
                        Network.InvokeResults[id] = nil

                        signal:Fire(select(2, ...))
                        signal:Destroy()
                    end
                elseif method == Methods.Client.Disconnect then
                    local why = (...) or 'Unknown reason'

                    print(string.format('Server initiated a disconnect: %s', tostring(why)))
                    HeadMaid:Destroy()
                end
            end)

            table.insert(Network.Remotes, remote)
        end

        function Network:Init()
            do
                for _, child in ipairs(ReplicatedStorage:GetChildren())do
                    task.spawn(handleRemote, child)
                end

                Network.Maid.RemoteAdded = ReplicatedStorage.ChildAdded:Connect(handleRemote)
            end

            return Network.ConnectResult:Wait()
        end
        function Network:FireServer(event, ...)
            send(Methods.Server.Event, event, ...)
        end
        function Network:InvokeServer(invoke, ...)
            local id, signal = HttpService:GenerateGUID(false), Signal.new()

            Network.InvokeResults[id] = signal

            send(Methods.Server.Invoke, invoke, id, ...)

            return signal:Wait()
        end
        function Network.event(name, callback)
            Network.Events[name] = callback

            return function()
                if Network.Events[name] == callback then
                    Network.Events[name] = nil
                end
            end
        end

        return Network
    end
    function __DARKLUA_BUNDLE_MODULES.h()
        local assets = Instance.new'Folder'

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.i()
        local assets, add, InsertService = Instance.new'Folder', function(
            name,
            to,
            what
        )
            what.Name = name
            what.Parent = to

            return what
        end, game:GetService'InsertService'
        local insertMesh = function(meshId, collisionFidelity, renderFidelity)
            while true do
                local __DARKLUA_CONTINUE_15 = false

                repeat
                    local success, mesh = pcall(InsertService.CreateMeshPartAsync, InsertService, meshId, collisionFidelity or Enum.CollisionFidelity.Default, renderFidelity or Enum.RenderFidelity.Automatic)

                    if not success then
                        warn(string.format('Failed to create mesh "%s": %s', tostring(meshId), tostring(mesh)))
                        task.wait(0.5)

                        __DARKLUA_CONTINUE_15 = true

                        break
                    end

                    return mesh
                until true

                if not __DARKLUA_CONTINUE_15 then
                    break
                end
            end
        end

        do
            local meshFolder = add('PlateMesh', assets, Instance.new'Folder')

            add('Block', meshFolder, insertMesh'rbxassetid://13307406342')
            add('Ball', meshFolder, insertMesh'rbxassetid://11640745670')
            add('Cylinder', meshFolder, insertMesh'rbxassetid://18406029582')
        end
        do
            local lifeLinkBeam = (add('LifeLinkBeam', assets, Instance.new'Beam'))

            lifeLinkBeam.Color = ColorSequence.new(Color3.new(0, 1, 0))
            lifeLinkBeam.Transparency = NumberSequence.new{
                NumberSequenceKeypoint.new(0, 1),
                NumberSequenceKeypoint.new(0.1, 0.75),
                NumberSequenceKeypoint.new(0.2, 0.75),
                NumberSequenceKeypoint.new(0.3, 0.4),
                NumberSequenceKeypoint.new(0.7, 0.4),
                NumberSequenceKeypoint.new(0.8, 0.75),
                NumberSequenceKeypoint.new(0.9, 0.75),
                NumberSequenceKeypoint.new(1, 1),
            }
            lifeLinkBeam.FaceCamera = true
        end

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.j()
        local assets = Instance.new'Folder'

        return assets
    end
    function __DARKLUA_BUNDLE_MODULES.k()
        local Assets = {
            Server = nil,
            Client = nil,
            Shared = nil,
        }

        Assets.Shared = __DARKLUA_BUNDLE_MODULES.load'h'

        if game:GetService'RunService':IsServer() then
            Assets.Server = __DARKLUA_BUNDLE_MODULES.load'i'
        else
            Assets.Client = __DARKLUA_BUNDLE_MODULES.load'j'
        end

        return table.freeze(Assets)
    end
    function __DARKLUA_BUNDLE_MODULES.l()
        local Network, Signal, HeadMaid, currentStatus = __DARKLUA_BUNDLE_MODULES.load'g', __DARKLUA_BUNDLE_MODULES.load'c', __DARKLUA_BUNDLE_MODULES.load'b', '...'
        local statusChanged = HeadMaid:Add(Signal.new())
        local setStatus = function(newStatus)
            currentStatus = newStatus

            statusChanged:Fire(newStatus)
        end

        Network.event('SetStatus', setStatus)
        task.spawn(function()
            setStatus(Network:InvokeServer'GetStatus')
        end)

        local module = {}

        function module:Create(maid, screenGui)
            local text = Instance.new'TextLabel'

            text.BackgroundTransparency = 1
            text.Size = UDim2.new(1, 0, 0, 28)
            text.Position = UDim2.fromOffset(0, 12)
            text.TextScaled = true
            text.TextColor3 = Color3.new(1, 1, 1)
            text.Text = currentStatus
            text.Parent = screenGui

            local stroke = Instance.new'UIStroke'

            stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Contextual
            stroke.Color = Color3.new(0, 0, 0)
            stroke.Parent = text
            maid.StatusChanged = statusChanged:Connect(function(newStatus)
                text.Text = newStatus
            end)
        end

        return module
    end
    function __DARKLUA_BUNDLE_MODULES.m()
        local Functions = {}

        function Functions.formatPlayerName(player)
            if player.DisplayName == player.Name then
                return player.DisplayName
            end

            return string.format('%s (@%s)', tostring(player.DisplayName), tostring(player.Name))
        end
        function Functions.formatPlateOwnerName(owners)
            if #owners == 0 then
                return 'No one'
            end

            local names = table.create(#owners)

            for index, player in ipairs(owners)do
                names[index] = Functions.formatPlayerName(player)
            end

            return table.concat(names, ' + ')
        end

        return table.freeze(Functions)
    end
    function __DARKLUA_BUNDLE_MODULES.n()
        local RunService, Players, Functions = game:GetService'RunService', game:GetService'Players', __DARKLUA_BUNDLE_MODULES.load'm'
        local mouse, module = Players.LocalPlayer:GetMouse(), {}

        function module:Create(maid, screenGui)
            local billboard = Instance.new'BillboardGui'

            billboard.AlwaysOnTop = true
            billboard.ExtentsOffsetWorldSpace = Vector3.new(0, 1, 0)
            billboard.StudsOffsetWorldSpace = Vector3.new(0, 1.5, 0)
            billboard.ResetOnSpawn = false
            billboard.Size = UDim2.fromScale(1, 2)
            billboard.ClipsDescendants = false
            billboard.Parent = screenGui

            local textLabel = Instance.new'TextLabel'

            textLabel.AnchorPoint = Vector2.new(0.5, 0.5)
            textLabel.AutomaticSize = Enum.AutomaticSize.X
            textLabel.BackgroundTransparency = 1
            textLabel.Position = UDim2.fromScale(0.5, 0.5)
            textLabel.Size = UDim2.fromScale(0, 1)
            textLabel.TextColor3 = Color3.new(1, 1, 1)
            textLabel.TextScaled = true
            textLabel.Parent = billboard

            local stroke = Instance.new'UIStroke'

            stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Contextual
            stroke.Color = Color3.new(0, 0, 0)
            stroke.Parent = textLabel

            local hovering

            local function hover(part)
                maid.ownersChanged = nil
                hovering = part

                if not part or not part:GetAttribute'IsPlate' then
                    billboard.Adornee = nil
                    billboard.Enabled = false

                    return
                end

                billboard.Adornee = part
                billboard.Enabled = true
                maid.ownersChanged = part:GetAttributeChangedSignal'Owners':Connect(function(
                )
                    hover(part)
                end)

                local userIds, owners = string.split(part:GetAttribute'Owners' or '', ','), {}

                for _, userId in ipairs(userIds)do
                    local player = Players:GetPlayerByUserId(tonumber(userId) or 0)

                    if player then
                        table.insert(owners, player)
                    end
                end

                textLabel.Text = Functions.formatPlateOwnerName(owners)
            end

            hover(mouse.Target)

            maid.Loop = RunService.RenderStepped:Connect(function()
                if mouse.Target ~= hovering then
                    hover(mouse.Target)
                end
            end)
        end

        return module
    end
    function __DARKLUA_BUNDLE_MODULES.o()
        local Maid, HeadMaid, Players, RunService = __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'b', game:GetService'Players', game:GetService'RunService'
        local localPlayer = Players.LocalPlayer
        local playerGui, UI = localPlayer:FindFirstChildOfClass'PlayerGui', {}

        UI.Maid = HeadMaid:Add(Maid.new())

        local runModule, setScreenGuiProperties = function(module)
            task.defer(module.Create, module, UI.Maid:Add(Maid.new()), UI.Maid.ScreenGui)
        end, function(screenGui)
            screenGui.Archivable = false
            screenGui.Enabled = true
            screenGui.ScreenInsets = Enum.ScreenInsets.DeviceSafeInsets
            screenGui.DisplayOrder = 0x7fffffff
            screenGui.ResetOnSpawn = false
        end

        function UI:Create()
            UI.Maid:DoCleaning()

            local screenGui = Instance.new'ScreenGui'

            UI.Maid.ScreenGui = screenGui
            screenGui.Name = (math.random())

            setScreenGuiProperties(screenGui)
            runModule(__DARKLUA_BUNDLE_MODULES.load'l')
            runModule(__DARKLUA_BUNDLE_MODULES.load'n')

            screenGui.Parent = playerGui
        end
        function UI:IsOK()
            local screenGui = UI.Maid.ScreenGui

            if not screenGui then
                return false
            end

            return screenGui.Parent == playerGui
        end
        function UI:Init()
            UI:Create()
            HeadMaid:GiveTask(RunService.RenderStepped:Connect(function()
                if not UI:IsOK() then
                    UI:Create()
                end

                setScreenGuiProperties(UI.Maid.ScreenGui)
            end))
        end

        return UI
    end
    function __DARKLUA_BUNDLE_MODULES.p()
        return __DARKLUA_BUNDLE_MODULES.load'd'{
            'Playing',
            'Lobby',
        }
    end
    function __DARKLUA_BUNDLE_MODULES.q()
        local Team = __DARKLUA_BUNDLE_MODULES.load'p'

        return table.freeze{
            [Team.Playing] = {
                TeamName = 'Playing',
                TeamColor = BrickColor.new(Color3.fromRGB(212, 44, 44)),
            },
            [Team.Lobby] = {
                TeamName = 'Lobby',
                TeamColor = BrickColor.new(Color3.fromRGB(112, 113, 116)),
            },
        }
    end
    function __DARKLUA_BUNDLE_MODULES.r()
        local Network, Maid, HeadMaid, Signal, Players, RunService, TeamsService = __DARKLUA_BUNDLE_MODULES.load'g', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'c', game:GetService'Players', game:GetService'RunService', game:GetService'Teams'
        local TeamList, Teams = (__DARKLUA_BUNDLE_MODULES.load'q'), {}

        Teams.Maid = HeadMaid:Add(Maid.new())
        Teams.TeamMaid = Teams.Maid:Add(Maid.new())
        Teams.TeamChanged = Teams.Maid:Add(Signal.new())
        Teams.List = {}

        function Teams:Update(list)
            table.clear(Teams.List)

            for userId, team in next, list do
                local __DARKLUA_CONTINUE_18 = false

                repeat
                    local player = Players:GetPlayerByUserId(tonumber(userId))

                    if not player then
                        __DARKLUA_CONTINUE_18 = true

                        break
                    end
                    if player == Players.LocalPlayer and team ~= Teams.List[player] then
                        Teams.TeamChanged:FireDeferred(team)
                    end

                    Teams.List[player] = team
                    __DARKLUA_CONTINUE_18 = true
                until true

                if not __DARKLUA_CONTINUE_18 then
                    break
                end
            end
        end

        Network.event('UpdateTeams', function(list)
            Teams:Update(list)
        end)
        task.spawn(function()
            Teams:Update(Network:InvokeServer'GetTeams')
        end)

        function Teams:Get(player)
            return Teams.List[player or Players.LocalPlayer]
        end
        function Teams:Init()
            Teams.Maid.RenderStepped = RunService.RenderStepped:Connect(function(
            )
                local amounts = {}

                for _, teamId in next, Teams.List do
                    amounts[teamId] = (amounts[teamId] or 0) + 1
                end
                for teamId, data in next, TeamList do
                    local team = Teams.TeamMaid[teamId]

                    if not team or team.Parent ~= TeamsService then
                        team = Instance.new'Team'
                        Teams.TeamMaid[teamId] = team
                    end

                    team.AutoAssignable = false
                    team.Name = string.format('%s (%s)', tostring(data.TeamName), tostring(amounts[teamId] or 0))
                    team.TeamColor = data.TeamColor
                    team.Parent = TeamsService
                end
                for player, teamId in next, Teams.List do
                    local __DARKLUA_CONTINUE_21 = false

                    repeat
                        if player.Parent ~= Players then
                            Teams.List[player] = nil
                            __DARKLUA_CONTINUE_21 = true

                            break
                        end

                        local team = Teams.TeamMaid[teamId]

                        if player == Players.LocalPlayer and team ~= player.Team then
                            local oldName = team.Name

                            team.Name = TeamList[teamId].TeamName
                            player.Team = team
                            team.Name = oldName
                        else
                            player.Team = team
                        end

                        __DARKLUA_CONTINUE_21 = true
                    until true

                    if not __DARKLUA_CONTINUE_21 then
                        break
                    end
                end
            end)
        end

        return Teams
    end
    function __DARKLUA_BUNDLE_MODULES.s()
        local Network, Maid, HeadMaid, Teams, Team, Arena = __DARKLUA_BUNDLE_MODULES.load'g', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load'p', {}

        Arena.Maid = HeadMaid:Add(Maid.new())
        Arena.Origin = Vector3.new(0, math.huge, 0)
        Arena.Size = 0
        Arena.Lobby = nil

        function Arena:CreateWalls()
            local maid = Maid.new()

            Arena.Maid.Walls = maid

            local maxPartSize = 2048
            local height, createWall, origin, size, currentTeam = maxPartSize, function(
                position,
                size
            )
                local wall = (maid:Add(Instance.new'Part'))

                wall.Anchored = true
                wall.Transparency = 1

                if position then
                    wall.Position = position
                end
                if size then
                    wall.Size = size
                end

                wall.Parent = Arena.Lobby

                return wall
            end, Arena.Origin, Arena.Size, Teams:Get()

            if currentTeam == Team.Lobby then
                createWall(origin, Vector3.new(size + 10, height, size + 10))
            elseif currentTeam == Team.Playing then
                local width = maxPartSize / 3
                local offset = size / 2 + width / 2
                local xOffset, zOffset = Vector3.xAxis * offset, Vector3.zAxis * offset

                createWall(origin + xOffset, Vector3.new(width, height, width * 3))
                createWall(origin + zOffset, Vector3.new(width * 3, height, width))
                createWall(origin - xOffset, Vector3.new(width, height, width * 3))
                createWall(origin - zOffset, Vector3.new(width * 3, height, width))
            end
        end

        task.spawn(function()
            local origin, size, lobby = Network:InvokeServer'GetArenaSettings'

            Arena.Origin = origin
            Arena.Size = size
            Arena.Lobby = lobby

            Arena:CreateWalls()
        end)
        Network.event('SetArenaOrigin', function(origin)
            Arena.Origin = origin

            Arena:CreateWalls()
        end)
        Network.event('SetArenaSize', function(size)
            Arena.Size = size

            Arena:CreateWalls()
        end)
        Network.event('SetArenaLobby', function(lobby)
            Arena.Lobby = lobby

            Arena:CreateWalls()
        end)
        Teams.TeamChanged:Connect(function()
            Arena:CreateWalls()
        end)

        function Arena:Init()
            Arena:CreateWalls()
        end

        return Arena
    end
end

local HeadMaid = __DARKLUA_BUNDLE_MODULES.load'b'

HeadMaid:GiveTask(function()
    warn'Client stop!'
    script:Destroy()
end)

local Network = __DARKLUA_BUNDLE_MODULES.load'g'

do
    local network = ...

    Network:SetId(network.Id)
    Network:SetKey(network.Key)
end
do
    local thread = coroutine.running()

    task.defer(function()
        script:Destroy()
        task.spawn(thread)
    end)
    coroutine.yield()
end

if not Network:Init() then
    print
[[Network failed! Did you accidentally run 2 localscripts? (If so run the other one.)]]

    return HeadMaid:Destroy()
end

__DARKLUA_BUNDLE_MODULES.load'k'

local UI, Teams, Arena = __DARKLUA_BUNDLE_MODULES.load'o', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load's'

UI:Init()
Teams:Init()
Arena:Init()

do
    local leaveHint = Instance.new'Hint'

    leaveHint.Text = 
[[Say 'pod/leave' to leave (please do this before get/noscript).]]
    leaveHint.Parent = workspace

    task.delay(10, game.Destroy, leaveHint)
end
]=]
    end
    function __DARKLUA_BUNDLE_MODULES.B()
        local HeadMaid, Network, Game, Character, Maid, Scheduler, Players, owner = __DARKLUA_BUNDLE_MODULES.load'b', __DARKLUA_BUNDLE_MODULES.load'l', __DARKLUA_BUNDLE_MODULES.load'z', __DARKLUA_BUNDLE_MODULES.load's', __DARKLUA_BUNDLE_MODULES.load'a', __DARKLUA_BUNDLE_MODULES.load'h', game:GetService'Players', owner
        local findPlayer, runLocal = function(name)
            local lowerName = string.lower(name)

            for _, player in ipairs(Players:GetPlayers())do
                if string.lower(string.sub(player.Name, 1, #lowerName)) == lowerName then
                    return player
                end
            end
        end, function(player)
            if Network:IsConnected() then
                Network:Disconnect'You joined again'
            end

            local key = Network:GenerateKey()

            Network:SetKey(player, key)

            local playerGui, hint = player:FindFirstChildOfClass'PlayerGui', Instance.new'Hint'

            hint.Text = 'Make sure local script requests are enabled to join!'
            hint.Parent = playerGui

            task.delay(10, game.Destroy, hint)

            local localGui = Instance.new'ScreenGui'

            localGui.ResetOnSpawn = false
            localGui.Name = math.random()
            localGui.Parent = playerGui

            local localScript = ((NewLocalScript or NLS)(__DARKLUA_BUNDLE_MODULES.load'A', localGui, {
                Id = Network.Id,
                Key = key,
            }))

            localScript.Name = math.random()
        end
        local handlePlayer = function(player)
            local isAdmin = false

            if owner then
                isAdmin = player == owner
            elseif game.CreatorType == Enum.CreatorType.User then
                isAdmin = player.UserId == game.CreatorId
            end

            player.Chatted:Connect(function(message)
                if string.sub(string.lower(message), 1, 4) ~= 'pod/' then
                    return
                end

                local args = string.split(string.sub(message, 5), '/')
                local cmd = string.lower(table.remove(args, 1))

                if cmd == 'join' then
                    runLocal(player)
                elseif cmd == 'leave' then
                    Network:Disconnect(player, 'You used the leave command')
                elseif isAdmin and cmd == 'restart' then
                    Game:Restart()
                elseif isAdmin and cmd == 'disconnect' then
                    local target = findPlayer(args[1])

                    if target then
                        Network:Disconnect(target, 'Disconnected by admin')
                    end
                elseif isAdmin and cmd == 'kill' then
                    local target = findPlayer(args[1])

                    if target then
                        Character.kill(target)
                    end
                elseif isAdmin and cmd == 'run' then
                    local target = findPlayer(args[1])

                    if target then
                        runLocal(target)
                    end
                elseif isAdmin and cmd == 'pause' then
                    Game:Pause()
                elseif isAdmin and cmd == 'unpause' then
                    Game:Unpause()
                elseif cmd == 'return' then
                    Character.load(player)
                elseif isAdmin and cmd == 'stop' then
                    for _, target in ipairs(Network:GetConnected())do
                        Network:Disconnect(target, 'Server stopped')
                    end

                    HeadMaid:DoCleaning()
                end
            end)
        end

        HeadMaid:GiveTask(Players.PlayerAdded:Connect(handlePlayer))

        for _, player in ipairs(Players:GetPlayers())do
            task.defer(handlePlayer, player)
        end

        do
            script.Name = math.random() .. 'pod'

            local random = Random.new()
            local offset, maid = Vector3.new(random:NextInteger(0, 1) == 1 and 15 or 
-15, 5, random:NextInteger(0, 1) == 1 and 15 or -15), HeadMaid:Add(Maid.new())
            local refit = function()
                maid:DoCleaning()

                local billboard = (maid:Add(Instance.new'BillboardGui'))

                billboard.AlwaysOnTop = false
                billboard.StudsOffsetWorldSpace = offset
                billboard.ResetOnSpawn = false
                billboard.Size = UDim2.fromScale(1, 2)
                billboard.ClipsDescendants = false
                billboard.Parent = script

                local textLabel = (maid:Add(Instance.new'TextLabel'))

                textLabel.AnchorPoint = Vector2.new(0.5, 0.5)
                textLabel.AutomaticSize = Enum.AutomaticSize.X
                textLabel.BackgroundTransparency = 1
                textLabel.Position = UDim2.fromScale(0.5, 0.5)
                textLabel.Size = UDim2.fromScale(0, 1)
                textLabel.TextColor3 = Color3.new(1, 1, 1)
                textLabel.TextScaled = true
                textLabel.Text = "Ew's Plates of doom: Say 'pod/join' to join."
                textLabel.Parent = billboard

                local stroke = (maid:Add(Instance.new'UIStroke'))

                stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Contextual
                stroke.Color = Color3.new(0, 0, 0)
                stroke.Parent = textLabel
            end

            refit()
            HeadMaid:GiveTask(Scheduler.connect(1, refit))
        end

        return nil
    end
end

local HeadMaid = __DARKLUA_BUNDLE_MODULES.load'b'

HeadMaid:GiveTask(function()
    warn'Server stop!'
    script:Destroy()
end)
__DARKLUA_BUNDLE_MODULES.load'f'
__DARKLUA_BUNDLE_MODULES.load'B'

local Network, Arena, Game = __DARKLUA_BUNDLE_MODULES.load'l', __DARKLUA_BUNDLE_MODULES.load'r', __DARKLUA_BUNDLE_MODULES.load'z'

do
    Network:SetId(game:GetService'HttpService':GenerateGUID(false))
end

Network:Init()

local fallenPartsDestroyHeight = -100
local yPosition = workspace.FallenPartsDestroyHeight - fallenPartsDestroyHeight

do
    local random = Random.new()
    local x, xNegative, z, zNegative = random:NextNumber(25000, 50000), random:NextInteger(0, 1) == 1, random:NextNumber(25000, 50000), random:NextInteger(0, 1) == 1

    Arena:SetOrigin(Vector3.new((xNegative and {
        (-x),
    } or {x})[1], yPosition + 500, (zNegative and {
        (-z),
    } or {z})[1]))
end

Arena:SetSize(100)
Arena:SetLavaHeight(fallenPartsDestroyHeight)
Arena:CreateLobby()
Game:Init()
INFO