script

local RunService = game:GetService("RunService")
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("PlayerData")

game.Players.PlayerAdded:Connect(function(plr)

	local key = plr.UserId.."Key2"

	local data
	local success, errormessage = pcall(function()
		data = DataStore:GetAsync(key)
	end)

	local folder = Instance.new("Folder", plr)
	folder.Name = "data"

	local IronOr = Instance.new("NumberValue", folder)
	IronOr.Name = "ironOre"
	IronOr.Value = 0 -- As example
	
	local Stone = Instance.new("NumberValue",folder)
	Stone.Name = "Stone"
	Stone.Value = 0
	
	local AluminumOr = Instance.new("NumberValue",folder)
	AluminumOr.Name = "AluminumOre"
	AluminumOr.Value = 0
	
	local GoldOr = Instance.new("NumberValue",folder)
	GoldOr.Name = "GoldOre"
	GoldOr.Value = 0
	
	local SilverOr = Instance.new("NumberValue",folder)
	SilverOr.Name = "SilverOre"
	SilverOr.Value = 0
	
	local UraniumOr = Instance.new("NumberValue",folder)
	UraniumOr.Name = "UraniumOre"
	UraniumOr.Value = 0
	
	local Iron = Instance.new("NumberValue",folder)
	Iron.Name = "Iron"
	Iron.Value = 0
	
	local Ice = Instance.new("NumberValue",folder)
	Ice.Name = "Ice"
	Ice.Value = 0
	
	local Coal = Instance.new("NumberValue",folder)
	Coal.Name = "Coal"
	Coal.Value = 0
	
	local Gold = Instance.new("NumberValue",folder)
	Gold.Name = "Gold"
	Gold.Value = 0
	
	local Aluminum = Instance.new("NumberValue",folder)
	Aluminum.Name = "Aluminum"
	Aluminum.Value = 0
	
	local Silver = Instance.new("NumberValue",folder)
	Silver.Name = "Silver"
	Silver.Value = 0
	
	local Uranium = Instance.new("NumberValue",folder)
	Uranium.Name = "Uranium"
	Uranium.Value = 0
	
	if success and data then
		IronOr.Value = data[1]
		Stone.Value = data[2]
		GoldOr.Value = data[3]
		SilverOr.Value = data[4]
		UraniumOr.Value = data[5]
		Coal.Value = data[6]
		Ice.Value = data[7]
		Aluminum.Value = data[8]
		Gold.Value = data[9]
		Iron.Value = data[10]
		Uranium.Value = data[11]
		Silver.Value = data[12]
	else
		warn(errormessage)
	end

end)

game.Players.PlayerRemoving:Connect(function(plr)
	local key = plr.UserId.."Key2"

	local data = {
		plr.data.ironOre.Value,
		plr.data.Stone.Value,
		plr.data.GoldOre.Value,
		plr.data.SilverOre.Value,
		plr.data.UraniumOre.Value,
		plr.data.Coal.Value,
		plr.data.Ice.Value,
		plr.data.Aluminum.Value,
		plr.data.Gold.Value,
		plr.data.Iron.Value,
		plr.data.Uranium.Value,
		plr.data.Silver.Value
	}

	local success, err = pcall(function()
		DataStore:SetAsync(key, data)
	end)

end) 

game:BindToClose(function()
	if RunService:IsStudio() then return end
	for _, plr in ipairs(game.Players:GetPlayers()) do
		local key = plr.UserId.."Key2"

		local data = {
			plr.data.ironOre.Value,
			plr.data.Stone.Value,
			plr.data.GoldOre.Value,
			plr.data.SilverOre.Value,
			plr.data.UraniumOre.Value,
			plr.data.Coal.Value,
			plr.data.Ice.Value,
			plr.data.Aluminum.Value,
			plr.data.Gold.Value,
			plr.data.Iron.Value,
			plr.data.Uranium.Value,
			plr.data.Silver.Value
		}

		local success, err = pcall(function()
			DataStore:SetAsync(key, data)
		end)
	end
end)