Good Afternoon. I am making a game about minigames (the classic.) and my main script refuses to work. I would really be interested in some help if you have time...

==script==

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local players = game:GetChildren("Players")
local AllPlayers = game.Players:GetChildren()
local Maps = ReplicatedStorage:WaitForChild("Maps")
local AllMaps = Maps:GetChildren()
local MapSelected = workspace:WaitForChild("MapSelected")
local PCount = workspace:WaitForChild("Players")
local Message = workspace:WaitForChild("Message")
local Time = workspace:WaitForChild("Time")
local Lobby = workspace:WaitForChild("Lobby")
local LobbySpawns = Lobby.Spawns:GetChildren()
local CurrentMap = workspace:WaitForChild("CurrentMap")
local Picked = math.random(1,#AllMaps)
local PlayersNeeded = 2
local winners = {}
local choices = {}

function checkPlayer()
	if PCount.Value >= PlayersNeeded then
		return true
	else
		return false
	end
	
end

function Intermission()
	for i = 5,1,-1 do
		wait(1)
		Message.Value = "Intermission: "..i.."second(s)"
	end
end

function SelectMap()
	for i = 1,#AllMaps do
		if AllMaps[i]:isA("Model") then
			table.insert(choices,AllMaps[i])
		end
	end
	MapSelected.Value = choices[Picked].Name
	Message.Value = "Minigame Selected: "..MapSelected.Value.."!"
end

function CloneMap()
	local clone = Maps:FindFirstChild(MapSelected.Value):Clone()
	clone.Parent = CurrentMap
end

function ClearMap()
	CurrentMap:ClearAllChildren()
end

function TeleportPlayerToMap()
	for i = 1,#AllPlayers do
		if AllPlayers[i]:WaitForChild("Settings").AFK.Value ~= true then
			if AllPlayers[i].Character ~= nil then
				if AllPlayers[i].Character:FindFirstChild("Humanoid").Health ~= 0 then
					local spawns = CurrentMap:FindFirstChild(MapSelected.Value):FindFirstChild("Spawns"):GetChildren()
					if spawns ~= nil then
						local ransp = spawns[math.random(1,#spawns)].CFrame + Vector3.new(0,3,0)
						AllPlayers[i].Character.HumanoidRootPart.CFrame = ransp
						wait()
						if AllPlayers[i] ~= nil then
							if AllPlayers[i].Character ~= nil then
								AllPlayers[i].Character.HumanoidRootPart.CFrame = ransp
							end
						end
						wait()
						if AllPlayers[i] ~= nil then
							if AllPlayers[i].Character ~= nil then
								AllPlayers[i].Character.HumanoidRootPart.CFrame = ransp
							end
						end
					end
				end
			end
		end
	end
end

function KillAllPlayer()
	for i = 1,#AllPlayers do
		AllPlayers[i]:LoadCharacter()
	end
end

function WillingPlayers()
	local n = 0
	for i = 1,#AllPlayers do
		if AllPlayers[i] ~= nil then
			if AllPlayers[i].Setings.AFK.Value ~= true then
				if AllPlayers[i].Character ~= nil then
					n = n + 1
				end
			end
		end
	end
	return n
end

function AnnounceWinners()
	--b
	--b
	--b
	--b
	--a
	--a
	if MapSelected.Value == "TwistedTemple" then
		for i = 1,#AllPlayers do
			if AllPlayers[i]:WaitForChild("Settings"):WaitForChild("Playing").Value == true then
				table.insert(winners,AllPlayers[i])
				if #winners == 1 then --Needs at least 1 winner. if there is only 1, put the name on it lol.
					Message.Value = AllPlayers[i].Name.."Won the minigame!"
					wait(2)
					AllPlayers[i]:WaitForChild("RCreds").Value = AllPlayers[i]:WaitForChild("RCreds").Value + 200 --Reward cuz it wont be fun if there isnt. please anticheat. PLEASE
					AllPlayers[i]:WaitForChild("RVictories").Value = AllPlayers[i]:WaitForChild("RCreds").Value + 10 --Reward cuz it wont be fun if there isnt. please anticheat. PLEASE
				elseif #winners >= 2 then
					Message.Value = "Multiple People Have Won..."
					wait(2)
					AllPlayers[i]:WaitForChild("RCreds").Value = AllPlayers[i]:WaitForChild("RCreds").Value + 200 --Reward cuz it wont be fun if there isnt. please anticheat. PLEASE
					AllPlayers[i]:WaitForChild("RVictories").Value = AllPlayers[i]:WaitForChild("RVictories").Value + 10 --Reward cuz it wont be fun if there isnt. please anticheat. PLEASE
					
				end
			else 
				Message.Value = "GAME OVER, NOBODY HAS WON."
				wait(2)
				
			end
		end
		--now for OPT 2
	elseif MapSelected.Value == "LavaJumps" or MapSelected.Value == "SquareParty" then
		for i = 1,#AllPlayers do
			if AllPlayers[i]:WaitForChild("Settings"):WaitForChild("Winner").Value == true then
				table.insert(winners,AllPlayers[i])
				if #winners == 1 then
					Message.Value = AllPlayers[i].Name.."Has Won The Minigame!"
					wait(2)
					AllPlayers[i]:WaitForChild("RCreds").Value = AllPlayers[i]:WaitForChild("RCreds").Value + 500 --Reward cuz the game won't be fun. of there isn't
					AllPlayers[i]:WaitForChild("RVictories").Value = AllPlayers[i]:WaitForChild("RVictories").Value + 10
				elseif #winners >= 2 then
					Message.Value = "Multiple People Have Won..."
					wait(2)
					AllPlayers[i]:WaitForChild("RCreds").Value = AllPlayers[i]:WaitForChild("RCreds").Value + 200 --Reward cuz it wont be fun if there isnt. please anticheat. PLEASE
					AllPlayers[i]:WaitForChild("RVictories").Value = AllPlayers[i]:WaitForChild("RVictories").Value + 10
				end
			else
				Message.Value = "No one won. Sad times buddies."
				-- so basically we can only used "Winner"
				
			end
		end
	end
end

function StartGame()
	ClearMap()
	Intermission()
	wait(2)
	Message.Value = "Choosing The Minigame, Prepare yourself!"
	wait(2)
	SelectMap()
	wait(3)
	Message.Value = "The Map Is Loading!"
	CloneMap()
	wait(4)
	Message.Value = "LET'S GO!"
	wait(1)
	TeleportPlayerToMap()
	wait(3)
	for i = 3,1,-1 do
		wait(1)
		Message.Value = "The Minigame will start in "..i.."second(s)!"
	end
	wait()
	if MapSelected.Value == "SquareParty" then
		for i = 1,#AllPlayers do
			if AllPlayers[i] ~= nil then
				if AllPlayers[i].Settings.AFK.Value == true then
					AllPlayers[i].Settings.Playing.Value = true
					AllPlayers[i].Settings.Victorious.Value = true --if only they died, it's false. lol
					Time.Value = 60 --THE TIME OF THE MINIGAME. Mine's 1 minute
					CurrentMap:FindFirstChild(MapSelected.Value).MainScript.Disabled = false
					Time.Script.Disabled = false
				end
			end
		end
	elseif MapSelected.Value == "LavaJumps" then
		for i = 1,#AllPlayers do
			if AllPlayers[i] ~= nil then
				if AllPlayers[i].Settings.AFK.Value == true then
					AllPlayers[i].Settings.Playing.Value = true
					Time.Value = 40 --THE TIME OF THE MINIGAME. 
					CurrentMap:FindFirstChild(MapSelected.Value).MainScript.Disabled = false
					Time.Script.Disabled = false
				end
			end
		end
	elseif MapSelected.Value == "Twisted Temple" then
		for i = 1,#AllPlayers do
			if AllPlayers[i] ~= nil then
				if AllPlayers[i].Settings.AFK.Value == true then
					AllPlayers[i].Settings.Playing.Value = true
					Time.Value = 60 --THE TIME OF THE MINIGAME.
					CurrentMap:FindFirstChild(MapSelected.Value).MainScript.Disabled = false
					Time.Script.Disabled = false
				end
			end
		end
	end
	while Time.Value ~= 0 do
		wait()
		if MapSelected.Value == "SquareParty" then
			for i = 1,#AllPlayers do
				if AllPlayers[i] ~= nil then
					if AllPlayers[i].Settings.AFK.Value ~= true then
						if AllPlayers[i].Settings.Playing.Value == false then
							if AllPlayers[i].Settings.Winner.Value == false then
								Time.Value = 0
								Time.Script.Disabled = true
								Message.Value = "TIME'S UP!"
								wait(2)
							end
						end
					end
				end
			end
			--option 2
		elseif MapSelected.Value == "LavaJumps" or MapSelected.Value == "TwistedTemple" then
			for i = 1,#AllPlayers do
				if AllPlayers[i] ~= nil then
					if AllPlayers[i].Settings.AFK.Value ~= true then
						if AllPlayers[i].Settings.Playing.Value == false and AllPlayers[i].Settings.Winner.Value == false then
							Time.Value = 0
							Time.Script.Disabled = true
							Message.Value = "TIME'S UP!"
							wait(2)
						end
					end
				end
			end
		end
	end
	table.remove(choices,Picked)
	table.remove(winners)
end

while true do
	wait(3)
	if checkPlayer()then
		if WillingPlayers() >= PlayersNeeded then
			StartGame()
		elseif WillingPlayers() <= PlayersNeeded then
			Message.Value = PlayersNeeded.." or more players needed."
		end
	elseif not checkPlayer()then
		Message.Value = PlayersNeeded.." or more players needed."
	end
end
       

Personally, my theory is that the same mistake is made in different lines, like a duplicate of the same mistake.

There are unfortunately no output messages.

1 comment

0

Help is needed, so it would be appreciated.