Hey! So basically I have a script to make teams random, but it only works once, then its not random anymore how do I make it random? Heres the variable that controls all the randomness
local randTeam = math.random(1,2)
(I used Random.new, it does the same thing)
This variable is used inside the game script, and it only runs when the game starts, to choose the random killer, but the problem is its not random.
This is the entire script
local rep = game:GetService("ReplicatedStorage")
local plrs = game:GetService("Players")
local votingSystem = game.Workspace.Voting
local status = rep.Status
local redTeam = game.Teams["Killer"]
local blueTeam = game.Teams["Runner"]
local blueTeamColor = BrickColor.new ("Lime green")
local redTeamColor = BrickColor.new ("Really red")
local lobbyTeam = game.Teams.Lobby
local choices = votingSystem:GetChildren()
local maps = rep.Maps:GetChildren()
local intermission = 10
local isAnOption
local randomMap
local chosenMap
local mapClone
local BlueTeamCount
local RedTeamCount
-- picking a random map function
local function PickRandomMap ()
local randomNumber = math.random(1, #maps)
randomMap = maps[randomNumber]
return randomMap.CanBeVoted
end
for i, choice in pairs(choices) do
local name = choice.label.SurfaceGui.TextLabel
local picture = choice.Image.SurfaceGui.ImageLabel
isAnOption = PickRandomMap()
if isAnOption.Value == true then
repeat
wait()
isAnOption = PickRandomMap()
until
isAnOption.Value == false
name.Text = randomMap.Name
picture.Image = randomMap.Image.Value
randomMap.CanBeVoted.Value = true
else
name.Text = randomMap.Name
picture.Image = randomMap.Image.Value
randomMap.CanBeVoted.Value = true
end
end
rep.InRound.Changed:Connect(function()
if rep.InRound.Value == false then
mapClone:Destroy()
for i, map in pairs(maps) do
map.CanBeVoted.Value = false
end
for i, choice in pairs(choices) do
local name = choice.label.SurfaceGui.TextLabel
local picture = choice.Image.SurfaceGui.ImageLabel
isAnOption = PickRandomMap()
if isAnOption.Value == true then
repeat
isAnOption = PickRandomMap()
until
isAnOption.Value == false
name.Text = randomMap.Name
picture.Image = randomMap.Image.Value
randomMap.CanBeVoted.Value = true
else
name.Text = randomMap.Name
picture.Image = randomMap.Image.Value
randomMap.CanBeVoted.Value = true
end
end
else
-- after the intermission has ended, the round will soon begin
--- when the map with most votes will be spawned
local Choice1Votes = #votingSystem.Choice1.button.Votes:GetChildren()
local Choice2Votes = #votingSystem.Choice2.button.Votes:GetChildren()
local Choice3Votes = #votingSystem.Choice3.button.Votes:GetChildren()
if Choice1Votes >= Choice2Votes and Choice1Votes >= Choice3Votes then
chosenMap = votingSystem.Choice1.label.SurfaceGui.TextLabel.Text
elseif Choice2Votes >= Choice1Votes and Choice2Votes >= Choice3Votes then
chosenMap = votingSystem.Choice2.label.SurfaceGui.TextLabel.Text
else
chosenMap = votingSystem.Choice3.label.SurfaceGui.TextLabel.Text
end
-- shows which map has won
status.Value = "The Chosen map is: ".. chosenMap
--- getting the map from the replicated storgae to the workspace
for i, map in pairs(maps) do
if chosenMap == map.Name then
mapClone = map:Clone()
mapClone.Parent = game.Workspace
end
end
--[[ another short delay right before the players get teleported you would also need to add
the same delay on the round system script]]
wait(3)
-- clears all the votes for next round
for i, choice in pairs(choices) do
choice.label.SurfaceGui.TextLabel.Text = " "
choice.Image.SurfaceGui.ImageLabel.Image = " "
choice.button.Votes:ClearAllChildren()
rep.VoteReset:FireAllClients(choice.button)
end
-- this is if there are no teams wit dedicated spawns (free for all):
--local spawns = mapClone.Spawns:GetChildren()
local BlueTeamCount = {}
local RedTeamCount = {}
for i, plr in pairs(plrs:GetChildren()) do
local char = plr.Character
local humanRoot = char:WaitForChild("HumanoidRootPart")
local nameGui = char.Head:FindFirstChild("NameGUI")
local RedSpawns = mapClone.RedSpawns:GetChildren()
local BlueSpawns = mapClone.BlueSpawns:GetChildren()
-- picks a random spawn from each team
local randomRedSpawn = RedSpawns[math.random(1,#RedSpawns)]
local randomBlueSpawn = BlueSpawns[math.random(1,#BlueSpawns)]
-- will put the current player into a team with the less amount of players
if #RedTeamCount == 1 then
plr.Team = blueTeam
-- this is so we can make the spawn location for each player more randomized
plr.CameraMode = "Classic"
plr.CameraMaxZoomDistance = 9
humanRoot.CFrame = randomBlueSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
table.insert(BlueTeamCount, plr.Name)
if nameGui then
nameGui.name.TextColor3 = blueTeamColor
end
print(plr.Name .. " put in ".. plr.Team.Name)
elseif #RedTeamCount == 0 then
plr.Team = redTeam
plr.CameraMode = "LockFirstPerson"
plr.CameraMaxZoomDistance = 0.5
humanRoot.CFrame = randomRedSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
table.insert(RedTeamCount, plr.Name)
if nameGui then
nameGui.name.TextColor3 = redTeamColor
end
print(plr.Name .. " put in ".. plr.Team.Name)
-- if both teams have the same amount of players, it choses a random team using math.random
else
local randTeam -- This just defines the variable
while wait() do -- Every second (it won't be exact)
randTeam = math.random(1, 2) -- Set the variable
end
if randTeam == 1 then
plr.Team = blueTeam
plr.CameraMode = "Classic"
plr.CameraMaxZoomDistance = 9
humanRoot.CFrame = randomBlueSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
table.insert(BlueTeamCount, plr.Name)
if nameGui then
nameGui.name.TextColor3 = blueTeamColor
end
print(plr.Name .. " put in ".. plr.Team.Name)
else
plr.Team = blueTeam
plr.CameraMode = "Classic"
plr.CameraMaxZoomDistance = 9
humanRoot.CFrame = randomBlueSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
table.insert(RedTeamCount, plr.Name)
if nameGui then
nameGui.name.TextColor3 = redTeamColor
end
print(plr.Name .. " put in ".. plr.Team.Name)
end
end
--------- if the player dies, it puts them back in the lobby and removes them from the team
-- when a player has died
char:WaitForChild("Humanoid").Died:Connect(function()
plr.Team = lobbyTeam
end)
end
end
end)