CCCPaste

New Story Game DataStore (Lobby)

local TeleportService = game:GetService("TeleportService")
local RoundsDataStore = game:GetService("DataStoreService"):GetDataStore("Rounds")
local WinsDataStore = game:GetService("DataStoreService"):GetDataStore("Wins")
local AddRoundsDataStore = game:GetService("DataStoreService"):GetDataStore("AddRounds")
local AddWinsDataStore = game:GetService("DataStoreService"):GetDataStore("AddWins")
local CoinsDataStore = game:GetService("DataStoreService"):GetDataStore("Coins")
local LevelsDataStore = game:GetService("DataStoreService"):GetDataStore("Level")
local ExpDataStore = game:GetService("DataStoreService"):GetDataStore("Exp")

local VIPGamepass = (267214996)

game.Players.PlayerAdded:Connect(function(player)
	
	local Folder = Instance.new("Folder", player)
	Folder.Name = "leaderstats"
	
	local Rounds = Instance.new("NumberValue", Folder)
	Rounds.Name = "Rounds"
	Rounds.Value = RoundsDataStore:GetAsync(player.UserId) or 0
	
	local Wins = Instance.new("NumberValue", Folder)
	Wins.Name = "Wins"
	Wins.Value = WinsDataStore:GetAsync(player.UserId) or 0
	
	local AddRounds = Instance.new("NumberValue", player)
	AddRounds.Name = "AddRounds"
	AddRounds.Value = AddRoundsDataStore:GetAsync(player.UserId) or 0

	local AddWins = Instance.new("NumberValue", player)
	AddWins.Name = "AddWins"
	AddWins.Value = AddWinsDataStore:GetAsync(player.UserId) or 0
	
	local Coins = Instance.new("NumberValue", player)
	Coins.Name = "Coins"
	Coins.Value = CoinsDataStore:GetAsync(player.UserId) or 0
	
	local Levels = Instance.new("NumberValue", Folder)
	Levels.Name = "Levels"
	Levels.Value = LevelsDataStore:GetAsync(player.UserId) or 1
	
	local Exp = Instance.new("NumberValue", Folder)
	Exp.Name = "Exp"
	Exp.Value = ExpDataStore:GetAsync(player.UserId) or 0
	
	while wait() do
		if Exp.Value >= (100 * (Levels.Value + 1)) then
			Levels.Value = Levels.Value + 1
			Exp.Value = 0
		end
	end
	
	if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.UserId, VIPGamepass) then
		player.Coins.Value = player.Coins.Value * 2
	end
	
	if player.AddWins.Value >= 1 then
		player.leaderstats.Wins.Value = player.leaderstats.Wins.Value + 1
	end
	
	if player.AddRounds.Value >= 1 then
		player.leaderstats.Rounds.Value = player.leaderstats.Rounds.Value + 1
	end
	
end)

game.Players.PlayerRemoving:Connect(function(player)
	RoundsDataStore:SetAsync(player.UserId, player.leaderstats.Rounds.Value)
	WinsDataStore:SetAsync(player.UserId, player.leaderstats.Wins.Value)
	AddRoundsDataStore:SetAsync(player.UserId, player.AddRounds.Value)
	AddWinsDataStore:SetAsync(player.UserId, player.AddWins.Value)
	CoinsDataStore:SetAsync(player.UserId, player.Coins.Value)
	LevelsDataStore:SetAsync(player.UserId, player.leaderstats.Levels.Value)
	ExpDataStore:SetAsync(player.UserId, player.leaderstats.Exp.Value)
end)

game:BindToClose(function()
	print("STOPPED!")

	for i,player in pairs(game.Players:GetPlayers()) do
		RoundsDataStore:SetAsync(player.UserId, player.leaderstats.Rounds.Value)
		WinsDataStore:SetAsync(player.UserId, player.leaderstats.Wins.Value)
		AddRoundsDataStore:SetAsync(player.UserId, player.AddRounds.Value)
		AddWinsDataStore:SetAsync(player.UserId, player.AddWins.Value)
		CoinsDataStore:SetAsync(player.UserId, player.Coins.Value)
		LevelsDataStore:SetAsync(player.UserId, player.leaderstats.Levels.Value)
		ExpDataStore:SetAsync(player.UserId, player.leaderstats.Exp.Value)
		print("Saved data for "..player.Name)
	end
end)