• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

RevScripts Item soulbound like WoW

leo18dff

Active Member
Joined
Mar 27, 2023
Messages
86
Reaction score
28
GitHub
leo18dff
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.

1714877415666.png

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)
 
Back
Top