Data Store Trading System function?

Hi, Im working on a trading system rn and when I trade a tool with someone and then die it doesn’t save the tool and the tool dissapears(its like a scam) pls Help(im not A PRO SCRIPTER its difficult to do for me but easy to do for you ima show the script and some photos(appreciate every response

–VARIABLES
local rs = game.ReplicatedStorage:WaitForChild(“TradeReplicatedStorage”)
local re = rs:WaitForChild(“RemoteEvent”)
local config = require(rs:WaitForChild(“CONFIGURATION”))

local tradeRequestsFolder = Instance.new(“Folder”)
tradeRequestsFolder.Name = “TRADE REQUESTS”
tradeRequestsFolder.Parent = rs

local ongoingTradesFolder = Instance.new(“Folder”)
ongoingTradesFolder.Name = “ONGOING TRADES”
ongoingTradesFolder.Parent = rs

–REMOVE TRADES FOR THIS PLAYER
function removeTrades(plr)
for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
if trade.Sender.Value == plr.Name or trade.Receiver.Value == plr.Name then
– Return tools to the player’s Backpack if they were in the trade
local senderPlr = game.Players[trade.Sender.Value]
local receiverPlr = game.Players[trade.Receiver.Value]
local senderSlots = trade[senderPlr.Name … “'s offer”]
local receiverSlots = trade[receiverPlr.Name … “'s offer”]

		for _, slot in ipairs(senderSlots:GetChildren()) do
			local tool = slot:FindFirstChildOfClass("Tool")
			if tool then
				tool.Parent = senderPlr.Backpack
			end
		end

		for _, slot in ipairs(receiverSlots:GetChildren()) do
			local tool = slot:FindFirstChildOfClass("Tool")
			if tool then
				tool.Parent = receiverPlr.Backpack
			end
		end

		trade:Destroy()
	end
end

for i, request in pairs(tradeRequestsFolder:GetChildren()) do
	if request.Name == plr.Name or request.Value == plr.Name then
		request:Destroy()
	end
end

end

–REMOVE TRADES WHEN PLAYER DIES
game.Players.PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function(char)
char:WaitForChild(“Humanoid”).Died:Connect(function()
removeTrades(plr)
end)
end)
end)

–REMOVE TRADES WHEN PLAYER LEAVES
game.Players.PlayerRemoving:Connect(removeTrades)

–RECEIVE CLIENT INFORMATION
re.OnServerEvent:Connect(function(plr, instruction, data)

--Send a request
if instruction == "send trade request" then
	
	local playerSent = data[1]
	
	if playerSent and playerSent ~= plr then
		local inTrade = false
		
		for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
			if trade.Sender.Value == playerSent.Name or trade.Sender.Value == plr.Name or trade.Receiever.Value == playerSent.Name or trade.Receiver.Value == plr.Name then
				inTrade = true
				break
			end
		end
		
		for i, request in pairs(tradeRequestsFolder:GetChildren()) do
			if request.Name == playerSent.Name or request.Name == plr.Name or request.Value == playerSent.Name or request.Value == plr.Name then
				inTrade = true
				break
			end
		end
		
		if not inTrade then
			
			local newRequest = Instance.new("StringValue")
			newRequest.Name = plr.Name
			newRequest.Value = playerSent.Name
			newRequest.Parent = tradeRequestsFolder
		end
	end
	
	
--Reject a request
elseif instruction == "reject trade request" then
	
	local requestValue = nil
	for i, request in pairs(tradeRequestsFolder:GetChildren()) do
		if request.Name == plr.Name or request.Value == plr.Name then
			requestValue = request
			break
		end
	end
	
	if requestValue.Parent == tradeRequestsFolder and requestValue.Name == plr.Name or requestValue.Value == plr.Name then
		requestValue:Destroy()
	end
	
	
--Accept a request
elseif instruction == "accept trade request" then
	
	local requestValue = nil
	for i, request in pairs(tradeRequestsFolder:GetChildren()) do
		if request.Name == plr.Name or request.Value == plr.Name then
			requestValue = request
			break
		end
	end
	
	if requestValue.Parent == tradeRequestsFolder and requestValue.Value == plr.Name then
		
		local senderPlr = game.Players[requestValue.Name]
		local receiverPlr = game.Players[requestValue.Value]
		
		
		requestValue:Destroy()
		
		local tradeFolder = Instance.new("Folder")
		
		local senderValue = Instance.new("StringValue")
		senderValue.Name = "Sender"
		senderValue.Value = senderPlr.Name
		senderValue.Parent = tradeFolder
		
		local receiverValue = Instance.new("StringValue")
		receiverValue.Name = "Receiver"
		receiverValue.Value = receiverPlr.Name
		receiverValue.Parent = tradeFolder
		
		local senderOffer = Instance.new("Folder")
		senderOffer.Name = senderPlr.Name .. "'s offer"
		senderOffer.Parent = tradeFolder
		
		local receiverOffer = Instance.new("Folder")
		receiverOffer.Name = receiverPlr.Name .. "'s offer"
		receiverOffer.Parent = tradeFolder
		
		tradeFolder.Parent = ongoingTradesFolder
		
		
		local toolIds = {}
		
		local senderTools = config.GetTools(senderPlr)
		for i, tool in pairs(senderTools) do
			tool.CanBeDropped = false
			
			local toolId = tool:FindFirstChild("TRADING ID") or Instance.new("NumberValue")
			toolId.Name = "TRADING ID"
			
			while string.len(tostring(toolId.Value)) < 1 or table.find(toolIds, toolId.Value) do
				toolId.Value = Random.new():NextNumber(0, 1000000)
			end
			table.insert(toolIds, toolId.Value)
			
			toolId.Parent = tool
		end
		
		local receiverTools = config.GetTools(receiverPlr)
		for i, tool in pairs(receiverTools) do
			tool.CanBeDropped = false

			local toolId = tool:FindFirstChild("TRADING ID") or Instance.new("NumberValue")
			toolId.Name = "TRADING ID"

			while string.len(tostring(toolId.Value)) < 1 or table.find(toolIds, toolId.Value) do
				toolId.Value = Random.new():NextNumber(0, 1000000)
			end
			table.insert(toolIds, toolId.Value)

			toolId.Parent = tool
		end
	end
	
	
--Add an item to the trade
elseif instruction == "add item to trade" then
	
	local item = data[1]
	
	if item.Parent == plr.Backpack or item.Parent == plr.Character then
		
		local currentTrade = nil
		for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
			if trade.Sender.Value == plr.Name or trade.Receiver.Value == plr.Name then
				currentTrade = trade
				break
			end
		end
		
		if currentTrade then
			
			local plrSlots = currentTrade[plr.Name .. "'s offer"]
			local numItems = #plrSlots:GetChildren()
			
			if numItems < config.MaxSlots then
				
				local itemInTrade = false
				
				for i, plrItem in pairs(plrSlots:GetChildren()) do
					if plrItem["TRADING ID"].Value == item["TRADING ID"].Value then
						itemInTrade = true
						break
					end
				end
				
				if not itemInTrade then
					
					if currentTrade.Receiver:FindFirstChild("ACCEPTED") then
						currentTrade.Receiver.ACCEPTED:Destroy()
					end
					if currentTrade.Sender:FindFirstChild("ACCEPTED") then
						currentTrade.Sender.ACCEPTED:Destroy()
					end
					
					item:Clone().Parent = plrSlots
				end
			end
		end
	end
	
	
--Remove an item from the trade
elseif instruction == "remove item from trade" then
	
	local item = data[1]
	
	if item.Parent == plr.Backpack or item.Parent == plr.Character then
		
		local currentTrade = nil
		for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
			if trade.Sender.Value == plr.Name or trade.Receiver.Value == plr.Name then
				currentTrade = trade
				break
			end
		end
		
		if currentTrade then
			
			local plrSlots = currentTrade[plr.Name .. "'s offer"]
			
			for i, plrItem in pairs(plrSlots:GetChildren()) do
				if plrItem["TRADING ID"].Value == item["TRADING ID"].Value then
					
					if currentTrade.Receiver:FindFirstChild("ACCEPTED") then
						currentTrade.Receiver.ACCEPTED:Destroy()
					end
					if currentTrade.Sender:FindFirstChild("ACCEPTED") then
						currentTrade.Sender.ACCEPTED:Destroy()
					end
					
					plrItem:Destroy()
					break
				end
			end
		end
	end
	
	
--Accept a trade
elseif instruction == "accept trade" then
	
	local currentTrade = nil
	for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
		if trade.Sender.Value == plr.Name or trade.Receiver.Value == plr.Name then
			currentTrade = trade
			break
		end
	end
	
	if currentTrade then
		local plrValue = currentTrade.Sender.Value == plr.Name and currentTrade.Sender or currentTrade.Receiver.Value == plr.Name and currentTrade.Receiver
		
		if plrValue then
			
			if not plrValue:FindFirstChild("ACCEPTED") then
				local acceptedValue = Instance.new("StringValue")
				acceptedValue.Name = "ACCEPTED"
				acceptedValue.Parent = plrValue
				
			else
				plrValue.ACCEPTED:Destroy()
			end
		end
		
		if currentTrade.Sender:FindFirstChild("ACCEPTED") and currentTrade.Receiver:FindFirstChild("ACCEPTED") then
			
			task.wait(config.TimeBeforeTradeConfirmed)
			
			if currentTrade.Sender:FindFirstChild("ACCEPTED") and currentTrade.Receiver:FindFirstChild("ACCEPTED") then
				
				local senderPlr = game.Players[currentTrade.Sender.Value]
				local senderSlots = currentTrade[senderPlr.Name .. "'s offer"]
				
				local receiverPlr = game.Players[currentTrade.Receiver.Value]
				local receiverSlots = currentTrade[receiverPlr.Name .. "'s offer"]
				
				local senderTools = config.GetTools(senderPlr)
				local receiverTools = config.GetTools(receiverPlr)
				
				for i, senderTool in pairs(senderTools) do
					for x, senderSlot in pairs(senderSlots:GetChildren()) do
						if senderTool["TRADING ID"].Value == senderSlot["TRADING ID"].Value then
							senderTool.Parent = receiverPlr.Backpack
						end
					end
				end
				
				for i, receiverTool in pairs(receiverTools) do
					for x, receiverSlot in pairs(receiverSlots:GetChildren()) do
						if receiverTool["TRADING ID"].Value == receiverSlot["TRADING ID"].Value then
							receiverTool.Parent = senderPlr.Backpack
						end
					end
				end
				
				currentTrade:Destroy()
			end
		end
	end
	
	
--Reject a trade
elseif instruction == "reject trade" then

	for i, trade in pairs(ongoingTradesFolder:GetChildren()) do
		
		if trade.Sender.Value == plr.Name or trade.Receiver.Value == plr.Name then		
			trade:Destroy()
			
			break
		end
	end
end

end)