i got this minigame script from the toolbox on roblox studio and it picks the same map but i have already built 11 maps.
local minigameModule = {
gameRunning = false,
playersAlive = {},
currentMap = nil
}
local waitForChild = game.WaitForChild
local findFirstChild = game.FindFirstChild
-- Modules
local settingsModule = require(waitForChild(script, "Settings"))
local onWin = (function()
local onWinModule = findFirstChild(script, "OnWin")
if onWinModule then
local onWinFunction = require(onWinModule)
if type(onWinFunction) == "function" then
return onWinFunction
end
end
end)()
local remoteEvent = waitForChild(game:GetService("ReplicatedStorage"), "Event")
local mapsStorage = waitForChild(game:GetService("ServerStorage"), "Maps"):GetChildren()
local playersService = game:GetService("Players")
function minigameModule.isPotentialGame()
return playersService.NumPlayers >= settingsModule.minimumPlayers
end
function minigameModule:chooseMap()
local chosenMap = mapsStorage[#mapsStorage]:Clone()
if findFirstChild(chosenMap, "Spawns") then
chosenMap.Parent = workspace
chosenMap:MakeJoints()
self.currentMap = chosenMap
return chosenMap
end
end
function minigameModule:spawnPlayers()
local playersAlive = self.playersAlive
local spawns = self.currentMap.Spawns:GetChildren()
for index = 1, #playersAlive do
local playerData = playersAlive[index]
playerData.playerHumanoidRoot.CFrame = spawns[math.random(#spawns)].CFrame
end
end
function minigameModule:runIntermission()
if settingsModule.intermissionTime > 0 then
for currentTime = math.floor(settingsModule.intermissionTime), 0, -1 do
remoteEvent:FireAllClients("Timer", currentTime)
wait(1)
end
end
remoteEvent:FireAllClients("CeaseGUIs")
end
function minigameModule:getAlivePlayers()
local playersAlive = {}
for index, currentPlayer in next, playersService:GetPlayers() do
local playerCharacter = currentPlayer.Character
if playerCharacter then
local playerHumanoidRoot = findFirstChild(playerCharacter, "HumanoidRootPart")
local playerHumanoid = findFirstChild(playerCharacter, "Humanoid")
if playerHumanoid and playerHumanoidRoot then
table.insert(playersAlive, {
player = currentPlayer,
playerHumanoid = playerHumanoid,
playerHumanoidRoot = playerHumanoidRoot
})
end
end
end
return playersAlive
end
function minigameModule:isLegalGame()
if #self:getAlivePlayers() >= settingsModule.minimumPlayers then
return true
end
end
function minigameModule:queryGameStart()
if self.gameRunning then
return
elseif self.isPotentialGame() then
self.gameRunning = true
remoteEvent:FireAllClients("CeaseGUIs")
self:runIntermission()
if self:isLegalGame() then
if settingsModule.roundDuration > 0 then
local currentMap = self:chooseMap()
local mapWeapons = findFirstChild(currentMap, "Weapons")
local playersAlive = self:getAlivePlayers()
self.playersAlive = playersAlive
for index = 1, #playersAlive do
local currentPlayer = playersAlive[index]
local backpack = findFirstChild(currentPlayer.player, "Backpack")
if backpack and mapWeapons then
for index, weapon in next, mapWeapons:GetChildren() do
weapon:Clone().Parent = backpack
end
end
local connection
connection = currentPlayer.playerHumanoid.Died:connect(function()
connection:disconnect()
table.remove(playersAlive, index)
if #playersAlive < 2 then
local winner = playersAlive[1]
if winner then
self:endGame(winner.player.Name .. " has won!", winner.player)
else
self:endGame("No one has won!")
end
end
end)
end
if mapWeapons then
mapWeapons:Destroy()
end
self:spawnPlayers()
remoteEvent:FireAllClients("Message", currentMap.Name .. " was chosen!", 5)
for currentTime = settingsModule.roundDuration, 0, -1 do
if not self.gameRunning then
return
end
remoteEvent:FireAllClients("Timer", currentTime)
wait(1)
end
self:endGame("The timer ran out! No one has won!")
end
else
self:endGame("Not enough players alive to begin the round!")
end
else
local remainingPlayers = settingsModule.minimumPlayers - playersService.NumPlayers
remoteEvent:FireAllClients("Message", "Waiting for " .. remainingPlayers .. " player" .. (remainingPlayers > 1 and "s" or "") .. " to join.")
end
end
function minigameModule:endGame(outputMessage, winner)
if self.gameRunning then
self.gameRunning = false
self.currentMap:Destroy()
self.currentMap = nil
if winner and onWin then
onWin(winner)
end
for index, player in next, playersService:GetPlayers() do
player:LoadCharacter()
end
wait(1)
remoteEvent:FireAllClients("Message", outputMessage, 5)
wait(5)
self:queryGameStart()
end
end
function minigameModule:removePlayer(player)
if self.gameRunning then
for index = 1, #self.playersAlive do
if self.playersAlive[index].player == player then
table.remove(self.playersAlive, index)
if #self.playersAlive <= 1 then
self:endGame("Not enough players to continue the game.")
end
break
end
end
end
end
playersService.PlayerAdded:connect(function()
minigameModule:queryGameStart()
end)
playersService.PlayerRemoving:connect(function(player)
minigameModule:removePlayer(player)
end)
And while im at it if anyone can help then theres another script that i can figure out how to use is
return function(winner)
while true do
wait(5)
cash.Value = cash.Value + 100
end
while true do
wait(5)
cash.Value = wins.Value + 1
end
end
I want it to add cash to the leader board but cant get it to even detect a win im not usre where the problem is since when i kill another player the timer just freezes on whetever it was on when the last player is alive
Any help is appretiated. I hope my english was ok :D

1 comment
On the first to lines you write findfirstchild and waitforchild Aren't they functions?