Hey guys,

So I'm making a game and my saveplayerdata function isn't saving the data. I enabled api services and for some reason my warn error keeps showing up saying that the setAsync is failing. Here's the code.

Server Script:

local DataStoreService = game:GetService("DataStoreService")
local PlayerDatastore = DataStoreService:GetDataStore("PlayerDataTest3")
local HttpService = game:GetService("HttpService")
local main = require(game.ServerScriptService.Main)


function LoadPlayerData(player, PlayerData)
	-- Place Player into Player Table 
	main.Players["player_"..player.UserId] = PlayerData
end

function NewPlayerDetected(player)
	-- Create new Player and place them in player table
	main.Players["player_"..player.UserId] = {
		Features,
		Equipment,
		Skills,
		Stats,
		Armor,
		Friends = {},
	}
	if main.Players["player_"..player.UserId] then
		print("Session Data Stored")
		SavePlayerData(player)
	end
end

function PlayerJoinsGame (player)

	local success, PlayerData = pcall(function()
		return 	PlayerDatastore:GetAsync("player_"..player.UserId)
	end)
	
	if success then 
		if PlayerData then
			print("Player Data Was Loaded")
			LoadPlayerData(player, PlayerData)
			print(HttpService:JSONEncode(PlayerData))
		else
			print("New Player Has Joined. Creating New Player.")
			NewPlayerDetected(player)
		end

		

	end
end

function ResetPlayerData (player)
	local tries = 0
	local success
	repeat
		tries = tries + 1
		success = pcall(function()
			return PlayerDatastore:RemoveAsync("Player_"..player.UserId)
		end)
		if not success then wait(1) end
	until tries == 3 or success

	
	if not success then
		warn("Failed To Remove Player Data. Trying Again.")
	end
end

function SavePlayerData (player)
	local tries = 0
	local success
	repeat
		tries = tries + 1
		print("Hello")
		success = pcall(function()
			PlayerDatastore:SetAsync("player_"..player.Userid, main.Players["player_"..player.UserId])
		end)
		if not success then wait(1) end
	until tries == 3 or success

	if not success then
		warn("Failed To Save Player Data. Trying Again.")
	end
	
end

game.Players.PlayerRemoving:Connect(SavePlayerData)
game.Players.PlayerAdded:Connect(PlayerJoinsGame)

I cut out the tables I made so those aren't erroring they just took up too much space. The repeat function runs 3 times and then success turns out to not be true which means it failed to save.

Module Script:

local main = {}

main.Players = {
	
}
return main

SOLUTION: I forgot to change player.Userid to player.UserId in setAsync