It will not save any data at all. It prints no errors at all.

-- Variables
local Players = {};
local NumPlayers = #Players;
local ReplicatedStorage = game:GetService("ReplicatedStorage");
local Assets = ReplicatedStorage:WaitForChild("Assets");
local Rounds = Assets:WaitForChild("Rounds");
local LavaRise = Rounds:WaitForChild("LavaRising");
local Stand = LavaRise:WaitForChild("Stand");
local PlayerStats = Assets:WaitForChild("Player_Stats");
local DataStoreService = game:GetService("DataStoreService");
local DataStore = DataStoreService:GetDataStore("MiniGamesV1");

local GameRounds = {"LavaRising",};

-- Functions/Main Game
function addPlayer(Player)
	table.insert(Players,Player);
end

function removePlayer(Player)
	for i,v in pairs(Players) do
		if v == Player then
			table.remove(Players,v);
		end
	end
	local Stats = PlayerStats:FindFirstChild(Player.Name);
	Stats:Destroy();
end

function chooseRound()
	local random = math.random(1,#GameRounds);
	local Picked = GameRounds[random];
	return Picked;
end

function LavaRising(Map,Lava,Stands)
	
end

function Joined(Player)
	addPlayer(Player); -- Adds player to the table "Players"
	local Stats = Instance.new("Folder");
	Stats.Name = Player.Name;
	Stats.Parent = PlayerStats;
	local Wins = Instance.new("NumberValue");
	Wins.Name = "Wins";
	Wins.Parent = Stats;
	Wins.Value = 0;
	local Coins = Instance.new("NumberValue");
	Coins.Name = "Coins";
	Coins.Parent = Stats;
	Coins.Value = 1000;
	local XP = Instance.new("NumberValue");
	XP.Name = "XP";
	XP.Parent = Stats;
	XP.Value = 0;
	local userdata;
	pcall(function()
		userdata = DataStore:GetAsync("!"..Player.userId);
	end)
	if userdata then
		warn("Got "..Player.Name.."'s data!");
		Wins.Value = userdata.Wins;
		Coins.Value = userdata.Coins;
		XP.Value = userdata.XP;
	else
		warn(Player.Name.." has no saved data yet!");
	end
end

function leave(Player)
	removePlayer(Player); -- Removes player from table "Players"
	local Stats = PlayerStats:FindFirstChild(Player.Name);
	local wins = Stats.Wins;
	local coins = Stats.Coins;
	local xp = Stats.XP;
	local StatTab = {Wins = wins.Value,Coins = coins.Value,XP = xp.Value};
	local userdata;
	pcall(function()
		userdata = DataStore:GetAsync("!"..Player.userId);
	end)
	if userdata then
		DataStore:UpdateAsync("!"..Player.userId,StatTab);
	else
		DataStore:SetAsync("!"..Player.userId,StatTab);
	end
end

game.Players.PlayerAdded:Connect(Joined);
game.Players.PlayerRemoving:Connect(leave);

1 comment

0

You should be saving data periodically, and when the player leaves. There is a common chance that the server doesn't save the player's data when they leave, especially if they are the last player in a server, the server usually closes down before the datastore can set or update the record. It is also good to save periodically in case of shutdowns or connect loses. And by periodically I mean every