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

How To Assign Players More Efficiently? [Matchmaking System]

Asked by 6 years ago

Basically I have this tournament game that assigns a player's name to a specific number in a folder that includes a place rank [e.x. player1 goes with 1, player 2 goes with player 2, etc.] and I'm trying to randomize it in a way that's more efficient.

Here's the script:

local ss = game:GetService("ServerStorage")
local values = ss:WaitForChild("Values")
local ingame = values:WaitForChild("In-Game")
local display = ingame:WaitForChild("display")
local countdown = ingame:WaitForChild("countdown")

local players = ss:WaitForChild("Players")
local number = players:WaitForChild("Number")
local number1 = number:WaitForChild("1")
local number2 = number:WaitForChild("2")
local number3 = number:WaitForChild("3")
local number4 = number:WaitForChild("4")
local number5 = number:WaitForChild("5")
local number6 = number:WaitForChild("6")
local number7 = number:WaitForChild("7")
local number8 = number:WaitForChild("8")

local playerfolder = ss:WaitForChild("PlayerFolder")
local playercount = ss:WaitForChild("PlayerCount")

local assign = players:WaitForChild("Assign")

while true do
    if playercount.Value >= 3 then
        while true do
            for i = 20,0,-1 do
            display.Value = 'Welcome! The game will begin shortly. Time Left: '..i
            wait(1)
            end
        end
    wait(3)
    local p1 = playerfolder:FindFirstChild("1")
    local p2 = playerfolder:FindFirstChild("2")
    local p3 = playerfolder:FindFirstChild("3") 
    local p4 = playerfolder:FindFirstChild("4")
    local p5 = playerfolder:FindFirstChild("5")
    local p6 = playerfolder:FindFirstChild("6")
    local p7 = playerfolder:FindFirstChild("7")
    local p8 = playerfolder:FindFirstChild("8") 
    if p1 then
        math.randomseed(tick())
        assign.Value =(math.random(1, math.random(1, 8)))
        if assign.Value == 1 then
            if number1.Value == "" then
            number1.Value = p1.Value
            elseif number1.Value ~= "" then
                if number2.Value == "" then
                    number2.Value = p1.Value
                elseif number2.Value ~= "" then
                    if number3.Value == "" then
                    number3.Value = p1.Value
                    elseif number3.Value ~= "" then
                        if number4.Value == "" then
                            number4.Value = p1.Value
                        elseif number4.Value ~= "" then
                            if number5.Value == "" then
                                number5.Value = p1.Value
                            elseif number5.Value ~= "" then
                                if number6.Value == "" then
                                    number6.Value = p1.Value
                                elseif number6.Value ~= "" then
                                    if number7.Value == "" then
                                        number7.Value = p1.Value
                                    elseif number7.Value ~= "" then
                                        if number8.Value == "" then
                                            number8.Value = p1.Value
                                        else
                                            display.Value = "Game is broken. Please rejoin."
                                        end
                                    end
                                end
                            end
                        end
                    end 
                end
            end
        end
    end
    else
        display.Value = "Game does not have enough players. " .. 3 - playercount.Value .. " players needed."
        end
    wait()
end

This is the script that runs when a player joins:

local Players = game:GetService("Players")
local ss = game:GetService("ServerStorage")
local playerfolder = ss:WaitForChild("PlayerFolder")

local playercount = ss:WaitForChild("PlayerCount")

game.Players.PlayerAdded:connect(function(player)
    playercount.Value = playercount.Value + 1
    print(player.Name .. " has entered the game")
    local playerval = Instance.new("StringValue")
    playerval.Parent = playerfolder
    playerval.Value = player.Name
    wait(1)
    playerval.Name = playercount.Value
    local playingval = Instance.new("BoolValue")
    playingval.Parent = playerval
    playingval.Name = "Playing"
    playingval.Value = false
end)

game.Players.PlayerRemoving:connect(function(player)
    playercount.Value = playercount.Value - 1
    print(player.Name .. " has left the game")
    local pvalue = playerfolder:FindFirstChild(player.Name)
    pvalue:Destroy()
end)

Screenshot of where everything is located: Explorer Screenshot

I know I have to use tables in a way, or figure out how to put players' names into a table, but how would I approach this so that the Number Folder will have player's names inside and randomized in order to start a game, and to do it efficiently? (Basically the Number's Value will correlate to a player's name (meaning the 1,2,3,4, etc. are StringValues.)

-Luke

Answer this question