This is a support category for asking questions about how to get something done on the Roblox websites or how to do something on Roblox applications such as Roblox Studio.
You can write your topic however you want, but you need to answer these questions:
- What do you want to achieve? Keep it simple and clear!
i want it to save the tool I got from a trade when I die
- What is the issue? Include screenshots / videos if possible!
When I trade with someone a tool and the guy I traded with dies the tool disappears and it doesn’t save the tool(It’s not rlly an issue(I just don’t know the code for that (pls help)
- What solutions have you tried so far? Did you look for solutions on the Developer Hub?
Yes I did I tried to find a solution in dev forum and other platforms
After that, you should include more details if you have any. Try to make your topic as descriptive as possible, so that it’s easier for people to help you!
This is the script:
–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.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)