I'm trying to create a script that if an "epic, rare or legendary" item drops, it gains a soulbound status, meaning only that player can use it, I'm using some parts from Sarahwesker's itemtrade script (I'm using tfs 1.5) but I'm trying to enter the name of the player who dropped the item and I can't. if anyone can help.
Lua:
local tradeKey = "TradeTimes"
local effect = CONST_ME_FIREWORK_BLUE
-- Se o item contiver essas palavras na descrição, será considerado não negociável
local nonTradeableTerms = {"rare", "epic", "legendary"}
local ec = EventCallback
function ec.onTradeRequest(player, target, item)
for _, term in ipairs(nonTradeableTerms) do
if item:getDescription():lower():find(term) then
player:sendCancelMessage("Você não pode negociar este item.")
return false
end
end
return true
end
ec:register(-1)
local function onLook(item, description)
local soulbounded = false
local soulboundPlayer = ""
for _, term in ipairs(nonTradeableTerms) do
if description:lower():find(term) then
soulbounded = true
break
end
end
if soulbounded then
local descParts = {}
for descPart in description:gmatch("[^\n]+") do
table.insert(descParts, descPart)
end
soulboundPlayer = descParts[#descParts - 1]:match("%[(.-)%]") or ""
return "[SOULBOUNDED] " .. soulboundPlayer .. "\n" .. description
else
return description
end
end
function ec.onLook(player, thing, position, distance, description)
if thing:isItem() then
return onLook(thing, description)
end
return description
end
ec:register(1)
function ec.onTradeCompleted(player, target, item, targetItem, isSuccess)
if not isSuccess then
return
end
local itemName = item:getName()
local tradeTimes = item:getCustomAttribute(tradeKey)
if tradeTimes then
item:setCustomAttribute(tradeKey, tradeTimes - 1)
local playerName = getPlayerNameById(item:getAttribute(ITEM_ATTRIBUTE_TEXT))
if playerName then
itemName = itemName .. " de " .. playerName
end
item:setAttribute(ITEM_ATTRIBUTE_TEXT, playerName)
end
local targetItemName = targetItem:getName()
local targetTradeTimes = targetItem:getCustomAttribute(tradeKey)
if targetTradeTimes then
targetItem:setCustomAttribute(tradeKey, targetTradeTimes - 1)
local targetPlayerName = getPlayerNameById(targetItem:getAttribute(ITEM_ATTRIBUTE_TEXT))
if targetPlayerName then
targetItemName = targetItemName .. " de " .. targetPlayerName
end
targetItem:setAttribute(ITEM_ATTRIBUTE_TEXT, targetPlayerName)
end
end
ec:register(-1)