Server fill customization not working properly

Them “filing a report in their internal database” doesn’t guarantee the issue gets solved or that they are working on a fix at all; there are countless bugs with internal reports filed that never end up getting addressed. It is reasonable to assume after a year of it not being addressed that they have ignored the report or at least see it as low priority so letting them know that this is still an issue impacting games is a reasonable thing to do.

2 Likes

FWIW people don’t usually “ignore” reports (this comes across as if it were malicious, which it’s not), the right word to use here is “deprioritized”. If every engineer had infinite bandwidth there would be no bugs.

Yes which is why I said this directly after:

I didn’t note that they “ignore” in a malicious way; to ignore is, by definition, to intentionally disregard. This is exactly what happens when a bug is deprioritized (it gets ignored). Therefore, a followup is reasonable to let them know it’s an issue that still affects many developers and should be prioritized.

4 Likes

This issue seems to have worsened lately for some reason. It is really killing the experience for many new players :frowning:

3 Likes

Here’s a simple script that will teleport players in-game to the largest server if there is one available.

  • It will essentially determine the largest server using messaging service and teleport players to that server, it checks every 5 seconds.
  • There’s a TELEPORT_THRESHOLD constant that will determine the maxmimum amount of players that the script will act upon. Because if we have two fairly large servers with a few spots, we don’t want the script to constantly teleport players back and fourth.
  • I’ve tested it in one of my games and it has worked fairly well, though let me know if there are any issues

Obviously this is not a perfect solution but it will help a lot

-- Author: Rae3504
-- Date: 25/04/2021

local TeleportService = game:GetService("TeleportService")
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")

local ServerList = {}

local TELEPORT_THRESHOLD = 0.5 -- This script will only teleport players if the player count in the server is less than Players.MaxPlayers * TELEPORT_THRESHOLD


local function TeleportPlayers(JobId)
	
	for i,v in pairs(game.Players:GetChildren()) do
		TeleportService:TeleportToPlaceInstance(game.PlaceId, JobId, v)
	end
	
end


local function CheckServers()
	
	-- Determine if on the list of servers that we have, there is one with more players
	-- If so teleport to the server with the most amount of players making sure there is enough room for all of the players in this server
	local playerCount = #Players:GetChildren()
	local largestServerCount = 0
	local largestServerJobId
	for JobId, ServerData in pairs(ServerList) do
		if ServerData.PlayerCount > largestServerCount and ServerData.PlayerCount + playerCount < Players.MaxPlayers then
			largestServerCount = ServerData.PlayerCount
			largestServerJobId = JobId
		end
	end
	if largestServerCount > playerCount and playerCount < Players.MaxPlayers * TELEPORT_THRESHOLD then
		TeleportPlayers(largestServerJobId)
	end
	
end


local function Start()
	
	-- We can generate a list of all the running servers with a fairly accurate player count by listening to this topic 
	local subscribeSuccess, subscribeConnection = pcall(function()
		return MessagingService:SubscribeAsync("ServerData", function(message)
			if message.Data.JobId ~= game.JobId then
				ServerList[message.Data.JobId] = {PlayerCount = message.Data.PlayerCount, LastRecieved = tick()}
				CheckServers()
			end
		end)
	end)

	spawn(function()
		while wait(5) do
			-- Every 5 seconds we will publish the amount of players this server has and its JobId.
			-- MessagingService request limits I don't think will be an issue here, otherwise we can always increase the delay
			local publishSuccess, publishResult = pcall(function()
				local message = {PlayerCount = #Players:GetChildren(), JobId = game.JobId}
				MessagingService:PublishAsync("ServerData", message)
			end)
			if not publishSuccess then
				print(publishResult)
			end
			
			-- Prevent memory leak
			for JobId, ServerData in pairs(ServerList) do
				if tick() - ServerData.LastRecieved > 60 then
					ServerList[JobId] = nil
				end
			end
		end
	end)
	
end

Start()

ServerFillerService.lua (2.5 KB)

10 Likes

This is still an issue:

My game has max 80 slots with 20 slots resevered, as you can see i am nowhere near that but it has already split up into several servers. Is this for regional reasons? If so then that would make perfect sense but it would be nice to have some clarification, it’s hard to tell if this is even a bug or intended behaviour

3 Likes

I would use what @Rae3504 suggested.

I edited his script and made it an optional GUI pop-up instead of an automatic mandatory teleporter that I may open-source in the future if people are interested, and it works pretty well and I have yet to see any empty servers more than a couple times.

The only drawback is that it typically takes around 2-3x longer for servers to update after publishing an update, but it is 100% worth it in my opinion.

3 Likes

When I see 1 server with 15 players and 3 other servers with 5 players… in my server with 99 max players :face_vomiting:

This is a horrible bug that makes it very very very very very very very very very very very very very very very very very very very very very difficult to grow a server that relies on high player counts.

A year later, roblox, if this is going to function incorrectly without any fix please label it correctly - the setting very very very (this again…) clearly does NOT represent the actual function of this setting.

Everything in this server sums up PERFECTLY my issues with this system. It does not do what it says it should do, and any excuse that it’s performance related is silly - If I cared that a 50 ping player was paired with a 500 ping player, I simply would not have enabled the fill option.

Dear Roblox:

Fill means fill.
“Fill each server s full as possible” means “Fill each server s full as possible”.

It does NOT mean "“very vaguely sort of prioritize filling a server, but in reality, not really do that much at all”

This is an ongoing issue that deserves ongoing attention - There are MANY cases when the number you set as the player count should be adhered to as close as possible. I was going to suggest having a separate setting for adjusting how many slots you WANT to keep open - But I just remembered.

We DO have that setting.
So we have a setting for letting Roblox do what it wants.
We have a setting that tries to force Roblox to fill servers.
…And we have a setting that lets us customize reserved slots.

If the Fill setting doesn’t work, whose willing to bet the custom slots one doesn’t?

3 Likes

ROBLOX!!! >:(


https://gyazo.com/dc38f6d6b77dd09ae1ee1def9cd55a80

1 Like

This issue has been going on for a long time and it’s been effecting a lot of games… honestly, if they don’t intend on fixing it they should at least change the label to represent it correctly.

when devs tick the “fill as much as possible” option they expect roblox to ignore all parameters and simply send players to the largest server until its full, regardless of their distance from the host…

3 Likes

Why is this still an issue, it’s kind of ridiculous in games that rely on a lot of players to fill the map and spark socialization. It also heavily affects new and small experiences by lowering retention.

2 Likes

I will continue to post on this thread EVERY TIME it happens - Which is every time the playercount falls below 20.

Let me make this perfectly clear.

This is NOT caused by people blocking other people, ping, or anything like that.
If the game manages a single server 90% of the time in my 99 player game when it’s above ~30 players,
but somehow fails to do so at below 20,

Then, statistically speaking, that is WAY more likely to be roblox’s issue. If there’s more players and it’s caused by any one of the excuses listed here, then there should be even more fragmentation. but it ONLY happens at low player count, exclusively.

2 Likes

I saw people talking about it being because people are in different regions, and I think that’s probably the case here. If the server is hosted in NA for example, people connecting on the other side of the world may have a really high ping so it isn’t really an option to put them in that server, rather a server hosted closer to where they are. So I doubt this will be solved anytime soon. I think for now the solution I posted above is really the best option

1 Like

Wow, way to ignore the very post you’re replying to, where I very very clearly state that is very very obviously not what is happening.

Riddle me this - How come when there’s 80 players, there’s almost always a single server, but the second the playercount drops below roughly 20, it starts splitting up like that?

Do you know how statistically unlikely it is that, in a very low playercount server, all the players joining happen to be in different regions, but on a server with many times more players, it virtually never happens? Something like that should spawn countless more extra servers the more players join, as the more players join the less likely they are to be compatible.

But this is not the case, and I refuse to even acknowledge any excuse like that for anything other than what it is - an excuse. It is very clearly not what is happening here.

Sorry for being snappy but I’m getting tired of this run-around - this is a real issue, and we can’t get distracted by disbelief.

This is a completely genuine bug that doesn’t logically adhere to any provided explanation.

Also: FILL MEANS FILL. Even if what you said is even remotely accurate to what is happening (Hint: it isn’t), that still means that the option to fill servers as much as possible, or reserve a custom amount of slots, simply isn’t working.

Fill means fill, darn it.

1 Like

Agree with your last statement, considering roblox still give us the option to join any server we want from the list, developers should still have the option to force server filling.
Though I still believe this has something to do with server regions and disagree with it being “statistically unlikely” and “some roblox bug”. I did some experimentation on a game that has similar server behaviour to yours, I’m in Thailand and roblox would always connect me to the smaller servers with a few players or create a new one just for me, I tested this around 10 times. When I used a VPN and connected to the UK it would always connect me to the larger servers. You must also consider timezones, peak hours would be when those around EST are awake and that’s where the most players are online therefore it’s much more likely you’re going to get one big server with the more abundant players in the west and very occasionally get smaller servers from the very few people online in other far away regions who are in late night or early morning. I do not know at what time your screenshot was taken, but I’ll assume it was during off peak hours as it wasn’t ~99 players (this isn’t the sole basis of this sentence I exhibit the behaviour im about to explain my own game). So during these off peak hours it’s mostly going to be Asia where who knows how many servers there are and the few people online in eu and na so you would experience more server fragmentation during these off peak hours where you get lower player counts.
This is all speculation of course, maybe I’m wrong, the only people who know what’s going on are the roblox engineers but wanted to explain my theory a bit more because I was called ignorant. It could be that checking the fill server box does absolutely nothing or there is some sort of bug but I prefer my own argument

1 Like

I am still experiencing this bug no matter which settings I choose. In fact, the first server in my game only had 3 people in it and another one got started with 2 people. It makes no sense that there are multiple servers being created when I had the server max set to 80 with the fill as full as possible settings on.

2 Likes

While I respect you not giving up, I have been observing my game for weeks on end, looking for this bug. Actively shutting down servers that experience this issue. I have been monitoring this.

The logic remains. I refuse to believe at 80 players there’s 1 server, while, lower counts break off. This happens regardless of timezone, my game is unpopular enough (No help from that stupid bug) that it simply isn’t a matter of different timezones allowing different people in. Sometimes there’s many players in the dead of night, sometimes there is none in the dead of day. And vice-versa. The ONLY CONSISTANT FACTOR is the player count. Every other reason would be easily observable.

Which is more likely, at the end of the day? I’ve already explained the statistical anomaly. I’m going to need something way more concrete.

1 Like

If this is happening because people are in different regions, Roblox should disable server splitting by region for games with under 100 players.

3 Likes

Exactly. None of the excuses being provided are even valid, even if they were true.

But again it’s important to note that:

  1. Developers put the ‘fill’ option on for a reason. Not all games are ping-reliant, and both the reserved slot feature and fill feature should probably recognize this fact.
    If we wanted roblox to optimize for ping, we’d leave it on roblox optimized.
  2. It’s still not what’s happening here, through extensive testing. It’s statistically impossible that’s the problem here.
2 Likes

Well I can’t imagine Roblox doing anything about this for a while or ever because it mainly effects games with smaller player counts.

I thought of a better idea to the one I posted above, it’s similar to it though.

Set a new, empty, place as your games starting place (the default place players join) and then your main game as another place in your experience (Only way to do this is to overwrite the current start place and then republish the actual game into another place)

Then you can put a single script in this new empty starting place which teleports the player to the server that you want in the place that your game is in, using the same algorithm I wrote (However I would rewrite it to use MemoryStoreService instead of MessagingService as it would be much quicker and efficient in generating a list of all the current servers in-game).

That’s all you’d really have to do to get proper server filling, and players will likely not even notice the teleport as it happens when they’re loading in and it will probably add a second or two onto the loading time. Bummer we have to go through that much work to get proper server filling but if it really effects you that much, it is a viable option.

1 Like