Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How to make it so once x amount people enter, nobody else can enter the room?

Asked by 3 years ago

I'm trying to make a horror game, and I want rooms where once x amount of people enter the room will be full and it teleports the players inside the room. I found a model of the room, but I can't seem to figure out how to make it so it closes when x amount of people enter. Can somebody help?

Here's the model:

TouchGateScript:

local TS = game:GetService("TeleportService")
local TweenService = game:GetService("TweenService")
local placeId = "4587775222"
local leaveGuiEvent = game.ReplicatedStorage.LeaveGuiEvent
local TransitionEvent = game.ReplicatedStorage.TransitionEvent
local list = {}
local gui = script.Parent.GuiPart.SurfaceGui
local billboard = script.Parent.billboardPart.billboardGui
local timer
local teleporting = false
local spawnTeleport = script.Parent.spawn

local function updateGui()
    gui.Frame.players.Text = #list
    billboard.Frame.players.Text = #list
end

local function removeFromList(character)
    for i=1,#list do
        if list[i] == character.Name then
            table.remove(list,i)
            updateGui()
        end
    end
end

local function teleportPlayers()
    if #list > 0 then
        script.Parent.GuiPart.SurfaceGui.Frame.Status.Text = "TELEPORTING"
        script.Parent.GuiPart.SurfaceGui.Frame.Status.TextColor3 = Color3.new(1,0,0)
        local playersToTeleport = {}
        local teleportTime = 0
        for i=1,#list do
            if game.Players:findFirstChild(list[i]) then
                table.insert(playersToTeleport,game.Players:findFirstChild(list[i]))
                TransitionEvent:FireClient(game.Players:findFirstChild(list[i]))
            else
                table.remove(list,i)    
            end
        end 
        local code = TS:ReserveServer(placeId)
        teleporting = true
        TS:TeleportToPrivateServer(placeId,code,playersToTeleport)
        repeat wait() until #list <= 0
        script.Parent.GuiPart.SurfaceGui.Frame.Status.Text = "READY"
        script.Parent.GuiPart.SurfaceGui.Frame.Status.TextColor3 = Color3.new(34/255,255/255,20/255)
        teleporting = false
    end
end

script.Parent.Gate.Touched:Connect(function(hit)
    if hit.Parent:findFirstChild("Humanoid") then
        if teleporting == false then
            local char = hit.Parent
            local player = game.Players:FindFirstChild(char.Name)
            local alreadyExists = false

            for i=1,#list do
                if list[i] == char.Name then
                    alreadyExists = true
                end
            end

            if alreadyExists == false then
                if #list < 16 then
                    table.insert(list,char.Name)
                    char.PrimaryPart.CFrame = spawnTeleport.CFrame
                    updateGui()
                    leaveGuiEvent:FireClient(player)
                end

                player.CharacterRemoving:connect(function(character)
                    removeFromList(character)
                end)
            end

        end
    end
end)

leaveGuiEvent.OnServerEvent:Connect(function(player)
    if player.Character then
        player.Character.HumanoidRootPart.Anchored = false
        wait()
        player.Character.Humanoid.Jump = true
        wait()
        player.Character:MoveTo(game.Workspace.leaveRoomPart.Position)
        removeFromList(player.Character)
    end
end)

while wait() do
    timer = 30
    for i=1,timer do
        timer = timer - 1
        gui.Frame.time.Text = timer
        billboard.Frame.time.Text = timer
        wait(1)
    end
    teleportPlayers()
end

Answer this question