Okay, so I'm getting this error: https://i.gyazo.com/a6d74a71e3437f2aead11dbbecb07aef.png

I've spent the last 3-4 days trying to find the source of this while my game slowly has gone from 300+ concurrent to 50 concurrent due to this bug breaking everything in the game. The table in question is the player data, so its not something I can easily eye ball to see whats causing this. This error also seems to come out of nowhere, and will happen to everyone at any point during a server life. Sometimes after 5 minutes, sometimes right off the bat, sometimes after 2 hours, its entirely random. I've tried to do some debugging and reverse engineering to narrow it down quite a bit, and I've chopped it up to happen anytime the server asks for player data. But this is what I'm using for my player data module:

function metaData:get(player)
	if player and player.UserId then
		local result, errorm =  pcall(function()
			if data[tostring(player.UserId)] == nil then
				metaData:addUser(player)
			end
			
			local testingTable = {}
			testingTable[tostring(player.UserId)] = data[tostring(player.UserId)]
			local bux = testingTable[tostring(player.UserId)].Stats.Bux		
		end)
		if result then
			return data[tostring(player.UserId)];
		else
			warn("get error")
			warn(errorm)
		end
	end
end

function metaData:update(player, pdata)
	if player and player.UserId and pdata then
	local result, errorm = pcall(function()
			local testingTable = {}
			testingTable[tostring(player.UserId)] = pdata
			local bux = testingTable[tostring(player.UserId)].Stats.Bux
	end)
	if result then
		data[tostring(player.UserId)] = pdata
	else
		warn("Player Data Module Error")
		warn(errorm)
	end
	end
end

As you can see, both instances use a pcall on a table and attempt to reference the table (the same thing my client controller and game controller are doing), so if the table is bugged it should throw an error, BUT IT NEVER DOES. It ALWAYS goes through, and further more, heres some other fishy stuff happening:

So this is what the client is doing:

function updatePlayer(pData)
	local success, message = pcall(	function() pData = updateClientRemote:InvokeServer() end)	
	if success then
		-- irrelevant some what sensitive code stuff 
	else
		warn("CLIENT: Update player issue")
		print(message)
	end
end

And it throws the error I posted above, along with that warning I posted (the screenshot was before I implemented that warning)

But heres what my server script looks like thats catching the remote:

function updateClientRemote.OnServerInvoke(player)
	local result, errorm = pcall(function()
	pData = playerDataModule:get(player)
		if pData then
			-- irrelevant sensitive data
		end
	end)
	
	if result then
		return pData
	else
		warn("problem with updateplayer with")
		warn(player)
		warn(errorm)
		warn("---")
	end
end

And it returns player data? No issues what so ever.

At this point, I'm legit stumbled on whats going on, and am legit getting stressed out to the max at the rate my game is dying and my inability to even have hope to resolve the problem. I've tried everything I can think of, but I'm honestly stuck. I wish there was a way to see WHAT part of the table specifically is causing the error, then that would probably help me a TON, but I don't even know since the player data module shouldn't even let it pass with an error. Anyone who can offer any sort of support, that would be insanely appreciated.

1 comment

0

Try getting rid of the redundant pcall functions on the server script listening to the remote function invoke and the pcall in the local script. Pcall should only be used on functions that have a possibility of failing such as direct accesses to data stores. Because you have so many functions wrapped in pcall, you're not allowing errors happening on the lower level to propagate up and show themsel