I made a script that runs vote system and puts players in a map with a random killer. The problem is the killer isn’t random. It just repeats the same killer after the round is ended.
Here is the 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
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(1.5)
-- 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()
------------------
------
-----
-- Test hehehe
-----------
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)]
--------------------------------------------
-------------------------------------------------------- Random Teams Rewrite ------------------------------------------------------
--------------------------------------------
if #RedTeamCount == 1 then
plr.Team = blueTeam
-- this is so we can make the spawn location for each player more randomized
humanRoot.CFrame = randomBlueSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
plr.CameraMode = "Classic"
plr.CameraMaxZoomDistance = 9
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 u = 0
local function chosen(x,y)
u = u + 1
if x ~= nil and y ~= nil then
return math.floor(x + (math.random(math.randomseed(os.time()+u))*999999 %y))
else
return math.floor((math.random(math.randomseed(os.time()+u))*100))
end
end
for _,v in pairs(game.Players:GetChildren()) do
if v == chosen(1,#game.Players:GetChildren()) then
v.Team = redTeam
humanRoot.CFrame = randomRedSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
v.CameraMode = "LockFirstPerson"
v.CameraMaxZoomDistance = 9
table.insert(RedTeamCount, v.Name)
if nameGui then
nameGui.name.TextColor3 = redTeamColor
end
print(v.Name .. " put in ".. v.Team.Name)
elseif v ~= chosen then
v.Team = blueTeam
v.CameraMode = "Classic"
v.CameraMaxZoomDistance = 9
humanRoot.CFrame = randomBlueSpawn.CFrame + Vector3.new(math.random(1,3),math.random(1,3),math.random(1,3))
table.insert(BlueTeamCount, v.Name)
if nameGui then
nameGui.name.TextColor3 = blueTeam
end
print(v.Name .. " put in ".. v.Team.Name)
end
end
end
--------- if the player dies, it puts them back in the lobby and removes them from the team
-- when a player has died
print("Not Printing Char")
char:WaitForChild("Humanoid").Died:Connect(function()
print("Working")
plr.Team = lobbyTeam
plr.CameraMode = "Classic"
plr.CameraMaxZoomDistance = 9
end)
end
end
end)