Hey everyone I’m currently working on an Inventory - and Trading System and rn I can only trade a Tool that is in my Backpack and it ends up appearing in my Inventory!This is my Inventory btw.
Now my Problem is like I said I can only trade a Tool that is mine my Hotbar. Theres a function where I can change Backpack with Inventory but it doesn’t show the Tools when I want to trade It’s because they aren’t really connected maybe also because the Tools aren’t really Tools but ImageButtons when they are in the Inventory.Now I got 2 SMALL InventoryScripts here which tells a bit about the ItemButtons that’s what the Tools are called when they’re in the inventory like u could see in the pic.Now I just need to connect them so the Tools show up when the TradingFrame or idk is opened I believe its ez and Ia also got another Script that shows the Issue with Backpack and Inventory and the End but that would be the third script:
--InventoryServerScript:
local inventoryEvent = game.ReplicatedStorage.Remotes.InventoryEvent
game.Players.PlayerAdded:Connect(function(player)
local inventory = player:WaitForChild("Inventory")
local inventoryFrame = player.PlayerGui:WaitForChild("InventoryGui").InventoryFrame.ItemsFrame:GetChildren()
inventory.ChildAdded:Connect(function(Item)
inventoryEvent:FireClient(player, Item.Name, true)
end)
end)
inventoryEvent.OnServerEvent:Connect(function(player, ItemName, Value, button)
if Value == false then
local SelectedItem = player.Inventory:FindFirstChild(ItemName)
local backpack = player.Backpack:GetChildren()
local stuff = player.Character:GetChildren()
if #backpack == 0 and not player.Character:FindFirstChildWhichIsA("Tool") then
button.Text = "Unequip"
button.BackgroundColor3 = Color3.new(255,0,0)
SelectedItem:Clone().Parent = player.Backpack
else
for i,v in ipairs(backpack) do
button.Text = "Equip"
button.BackgroundColor3 = Color3.new(0,255,0)
v:Destroy()
end
for i, v in ipairs(stuff) do
if v:IsA("Tool") then
button.Text = "Equip"
button.BackgroundColor3 = Color3.new(0,255,0)
v:Destroy()
end
end
end
end
end)
--Second mini Script
local InventoryEvent = game.ReplicatedStorage.Remotes.InventoryEvent
local itemFrame = script.Parent:FindFirstChild("ItemsFrame")
InventoryEvent.OnClientEvent:Connect(function(ItemName, Value)
if Value == true then
local ItemButton = script.Parent.ItemsFrame.ItemButton
ItemButton.Visible = true
ItemButton.Name = ItemName
ItemButton.Text = ItemName
ItemButton.Parent = itemFrame
local equipButton = script.Parent.EquipFrame["EquipButton"]
ItemButton.MouseButton1Click:Connect(function()
script.Parent.EquipFrame.Title.Text = ItemName
script.Parent.EquipFrame.Title.Visible = true
equipButton.Visible = true
end)
end
end)
---TradeServer(ServerScriptService)(This is where I have to change the function)
--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
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.Inventory
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
I got one last script tell me if u need it