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

Getting current player count?

I've tried a bunch of ideas to give my code an accurate player count, but so far, nothing has worked out. The piece of code that's gotten me closest looks something like this - 'val' being a number variable that stores the number of players. I've set it up so that it checks every .15 seconds.

while true do
	wait(0.15)
	game.Players.PlayerAdded(function(player)
	val.Value = val.Value + 1
end)
game.Players.PlayerRemoving(function(player)
	val.Value = val.Value - 1
end
end)

This code works in simple tests, but on a real server, it ends up adding/removing over 100 to the value instead of just one. Is there a more simple way I could get the number of players currently on the server. Any answers are greatly appreciated.

4 answers

You can use the :GetChildren() function and the # operator to get how much players are ingame. The # returns the length of a table and :GetChildren() and :GetPlayers() returns a array, which is a table.

local players = game.Players:GetPlayers() -- getting players

val.Value = #players -- the value will show the length of the table

If you want to get player count, just do this:

local playerCount = #game.Players:GetPlayers()

GetPlayers() is the method of the Players service and returns a table containing all the Player objects. The # (length operator) is used to get the length of the table returned.

Next time you have a problem like this, I suggest you search up the problem yourself as simple things like these often have simple solutions. Nonetheless, I will show you what you were doing wrong in your method (for the sake of learning).

The problem with your method is that while loops aren't needed here. I suggest you read up on RBXScriptSignals. Events fire whenever a particular occurrence happens in the game (in this case a player joining/leaving). There is only need to connect them once. Here's the correct code:

game.Players.PlayerAdded:Connect(function(player)
	val.Value = val.Value + 1
end)

game.Players.PlayerRemoving:Connect(function(player)
	val.Value = val.Value - 1
end)

2 comments

1

You should probably explain why your code works (:GetPlayers() returns a list of players and #list returns the length of a list)

0

I was having trouble with this too

Easy fix: create a variable, add the variable every time a player is detected...

local players = game.Players:GetChildren() -- list of players
local player_count = 0 -- currently 0 players

while wait(1) do -- updater
	for i, player in pairs(players) do -- loop to get players
		player_count = player_count + 1 -- add every player detected.
		print("There are "..i.." players in the game") -- print how many players
	end
end

This is I guess easy to read but the other questions are better, don't read this it is just another way if those other codes don't work..

place a intvalue into workspace and rename it "PlayerCount" then add a script into server script service.

normal script:

local PlayerCount = workspace.PlayerCount
	game.Players.PlayerAdded:Connect(function()
	PlayerCount.Value = PlayerCount.Value + 1
	print(PlayerCount.Value)
end)

game.Players.PlayerRemoving:Connect(function()
	PlayerCount.Value = PlayerCount.Value -1
	print(PlayerCount.Value)
end)

-I tried this and it worked.

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