How to connect Trading system with Inventory System

I’m currently trying to connect my Trading System with my Inventory System that means if someone trades me a tool it should appear in my inventory.Now the Problem is when I trade with someone the Tool appears in my hotBar.I got 2 Scripts here(I have more if you need but I think these ones are good)

EquipScript:

local promt = script.Parent.ProximityPrompt
local sword = script.Parent.Parent

promt.Triggered:Connect(function(player)
promt:Destroy()
sword.Parent = player.Inventory
end)

TradeScript:

–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)

1 Like

The line quoted might be the issue as it puts it into the players backpack rather then your in your inventory system, this is the case multiple times in your script.

thx that’s exactly what I wanted to know now I just have to try it

Should I out Inventory instead?cuz in the first script:
sword.Parent = player.Inventory

Where is your inventory system stored/where do the tools need to go to get into your inventory system?

that’s what I want to know cuz I I got this from a tut.How can I see where the Tools need to got to the Inv System.

Please put these ``` at the top and bottom of any code you want to copy paste it auto formats it and makes it easier to read.

1 Like

k ty but how can I see where my Tools need to go?

Add them to the player’s backpack.