Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

My script doesnt add money, add wins, or pick a random map can anyone help?

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

0

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

1 answer

On line 7 and 8 put this instead

local waitForChild = game:WaitForChild
local findFirstChild = game:FindFirstChild

If that script dosen't work I mean I have never seen anyone do this variable. Instead of using this variable delete line 7 and 8 then were it says "waitForChild" put a colon like : in front on it.

This discussion is preserved as it was. New answers, comments, and votes are closed.