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