In need of a scripter

Hey guys i have a issue with my data storage system…

Basically when a player gets some items in my game it saves but on rejoing it wipes everything from them and doesnt allow them to gain ever again ir wipes them every time they rejoin…

If anyone knows whats going on please drop me a dm on discord Lofaq#0001

Please, send your code so we can check it

local players = game:GetService(“Players”);
local RunService = game:GetService(“RunService”);
local DataService = require(script:WaitForChild(“DataService”));

PlayerData = {};

local MetaData = {};
MetaData.__index = MetaData
DataService:SetDataStore(“DataStorejj4”);

function MetaData:Join(player)
local pdata = {
Bux = 9000000,
AcceptDonates = true,
Items = {},
RAP = 0,
ItemRecieved = false,
GamePasses = {
NewYears = false,
},
ForWipe = {
RecievedRapRare = false,
RecievedBuxRare = false,
RecievedCasesRare = false,
},
Upgrades = {
Bux = {
Upgrade = 1,
Cost = 500,
},
CasesPerOpen = {
Cases = 1,
Cost = 6,
}
};
};

local data = DataService:GetData(player.UserId)	

if data then
	PlayerData[player.UserId] = data
end

if not data then
	if player.UserId == -1 then	
		pdata = DataService:GetData("300319320")
	else
		PlayerData[player.UserId] = pdata
	end	
end

end

function MetaData:Save(player)
local success, errormessage = pcall(function()
DataService:SetData(player.UserId, PlayerData[player.UserId])
end)

if success then 
	return true
end

return false

end

function MetaData:remove(player, attempt)
local DataSaved = self:Save(player)

if not DataSaved then
	if (not attempt or attempt < 5) then
		if (not attempt) then attempt = 1; else attempt += 1; end
		return self:remove(player, attempt)
	else
		print(string.format("After trying 5 times to save %s's data, it failed to save.", player.Name));
		return;
	end
else
	PlayerData[player.UserId] = nil
	print(string.format("Successfully saved %s's data!", player.Name))
end

end

function MetaData:get(player)
local pdata = {
Bux = 1000,
AcceptDonates = true,
Items = {},
RAP = 0,
ItemRecieved = false,
GamePasses = {
NewYears = false
},
Upgrades = {
Bux = {
Upgrade = 1,
Cost = 500,
},
CasesPerOpen = {
Cases = 1,
Cost = 4,
},
};
};

repeat RunService.Heartbeat:Wait() until PlayerData[player.UserId] --// This is still unacceptable. - WingedDash

if not PlayerData[player.UserId].WeeklyCasesOpened then
	PlayerData[player.UserId].WeeklyCasesOpened = 0
end
if not PlayerData[player.UserId].GaveHim then
	PlayerData[player.UserId].GaveHim = false
end
if not PlayerData[player.UserId].Gems then
	PlayerData[player.UserId].Gems = 0
end
if not PlayerData[player.UserId].Opening then
	PlayerData[player.UserId].Opening = 1
end

return PlayerData[player.UserId]

end

return setmetatable(PlayerData, MetaData);

local Players = game:GetService(“Players”);
local DataStoreService = game:GetService(“DataStoreService”);

local SessionId = game.JobId;

local DataService = {};

local GameDataStore;

local function DeepCopy(data)
local CopyData = {};

for index,value in pairs(data) do
	if type(value) == "table" then
		CopyData[index] = DeepCopy(value);
	else
		CopyData[index] = value;
	end
end
return CopyData;

end

function DataService:SetDataStore(key)
GameDataStore = DataStoreService:GetDataStore(key);
end

function DataService:GetData(key)
return GameDataStore:UpdateAsync(key, function(data)
if (not data) then
return;
end

	data = DeepCopy(data);
	
	if (not data.SessionId) then
		data.SessionId = SessionId;
		return data;
	end
end)

end

function DataService:SetData(key, data)
return GameDataStore:UpdateAsync(key, function(olddata)
if (not olddata) then
return data;
end

	if (olddata.SessionId == data.SessionId) then
		data.SessionId = nil;
		return data;
	end
end)

end

return DataService;