• 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!

Solved NPC Repair equipment

elnelson

Lunaria World Dev
Joined
Jun 20, 2009
Messages
580
Solutions
2
Reaction score
58
Location
México
Hello otlanders, i got a durability system (TFS 0.X - durability system), when durability is 0 the item breaks and transform the item to itemid = 2256 (metal trash) but sets the name of the broken item:
example:
Lua:
You see dragon hammer.
It weighs 3.00 oz.
ItemID: [2256].

So i need a NPC that repair items (id 2256) in backpack or equipped. at the moment this is what i got, but im a little trapped, when i try to repair all equip, script stops when left weapon is repaired x.x
this is the script for tfs .4

Edit2: I was working on and reach this point, npc repair the equip, but, if the equip is not damaged (have not fought with it) and you ask for a repair, then transform to id = 0(a red/black square) :S

Lua:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps. 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
    righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
    head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
    local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100") 
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
    legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
    feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)   
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)   
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)       
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)   
            end
   
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Last edited:
Solution
Hmmm..Try this one out? XD
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    if...
Let me get this straight, if you repair one by one it works ok? The issue happens when saying repair all right? It only repairs left hand and stops. Any errors on console? Does the npc say this line after saying him 'repair all'?
"Okay, i've fixed your damaged weapon."
 
Let me get this straight, if you repair one by one it works ok? The issue happens when saying repair all right? It only repairs left hand and stops. Any errors on console? Does the npc say this line after saying him 'repair all'?
"Okay, i've fixed your damaged weapon."
i've advanced at the point the NPC repair all equip, but there is a rare situation, if the player has a virgin item (an item without durability) then the NPC transform to ID = 0.
 
Post the updated script you get the repair working, will try to add a check so it does not count virgin items
the updated version is already edited on the post. therefore there is .
Lua:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps. 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
    print(lefthand)
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
    righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
    head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
    local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100") 
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
    legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
    feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
    doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
    doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)   
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)   
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)       
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)   
            end
   
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
I don't know how the system works in detail, but try this, blind try, if it doesn't work I will read the whole system.

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
        if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability" ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    print(lefthand)
        if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability" ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability" ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability" ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability" ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability" ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid) 
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid) 
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)     
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid) 
            end
   
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
I don't know how the system works in detail, but try this, blind try, if it doesn't work I will read the whole system.

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
        if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability" ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    print(lefthand)
        if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability" ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability" ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability" ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability" ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
        if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability" ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)    
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)
            end
  
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

seems it has a syntax error, btw the system is pretty symple, it is the link to the creaturescript event (Statschange setitemattribute, durability and description)

the error is this
 

Attachments

This one? I'm trying to check if item has the SLOT Durability assigned, which I suppose that if it doesn't it means that it's a virgin item.
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
        if (getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    print(lefthand)
        if (getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid) 
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid) 
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)     
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid) 
            end
   
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
This one? I'm trying to check if item has the SLOT Durability assigned, which I suppose that if it doesn't it means that it's a virgin item.
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
        if (getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    print(lefthand)
        if (getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
        if (getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)    
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)
            end
  
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
hmmm what could be wrong?
 

Attachments

Lua:
if (getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
maybe this part is not well, should not be:
Lua:
 (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "description))
since the durability is seen as a description?
 
Code:
if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
Could be yeah, try that line, replacing all the same ones in the ifs
 
gonna test it and feedback in a couple of minutes
ty
nice! now it repairs the durability items, but how can i avoid these spam messages if players does not have any armor piece?

i have this function

Lua:
function getItemsBody(cid)
       local items = {}
       for i=1,8 do
           if(isPlayer(cid) and getPlayerSlotItem(cid, i).uid ~= (nil or 0) and i ~= (3 and 2))then
           table.insert(items, getPlayerSlotItem(cid, i))
           end
       end
   return items
end

can it be used to avoid npc try to repair when player does not have that armor piece?

something like...
Lua:
if getItemsBody == nil then
    return false
  end
 

Attachments

Hmmm..Try this one out? XD
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    end
    print(lefthand)
    if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
    end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)   
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)
            end
   
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Solution
Hmmm..Try this one out? XD
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    end
    print(lefthand)
    if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
    end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid)  
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)
            end
  
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
nice one there it is :D thank you bro
 
Hmmm..Try this one out? XD
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50 -- preço por carga em gps.
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair all') then
    if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
            lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
        end
    end
    print(lefthand)
    if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
            righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
            head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
            local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
            legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
        end
    end
    if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= (nil or 0) then
        if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
            feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
        end
    end
            selfSay("Okay, i've fixed your damaged weapon.", cid)
end
if msgcontains(msg, 'repair weapon') then
    selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
        elseif msgcontains(msg, 'left') then
            if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
                print(1)
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(lefthand), 1)
            else
                selfSay("You do not have any weapon in left hands.", cid) 
            end
        elseif msgcontains(msg, 'right') then
            if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == 2256  then
                selfSay("Okay, i've fixed your damaged weapon.", cid)
            print(1)
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doRemoveItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, 1)
                doPlayerAddItem(cid, getItemIdByName(righthand), 1)
                else
                selfSay("You do not have any weapon in your right hand.", cid)
            end
 
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Hmm i was testing the script but i got the same error as the beginning.
Some items transform to ID = 0

this is the modification i done to repair single equip
Lua:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local charge_price = 50
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'repair') then
    selfSay("would you like to {repair weapon}, '{repair equipment}. or {repair all}?", cid)
end
if msgcontains(msg, 'repair all') then
    if(doPlayerRemoveMoney(cid, charge_price*6)) then
        if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
                lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
            end
        end
        if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
                righthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
            end
        end
        if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
                head = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
            end
        end
        if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
                local getArmor = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
            end
        end
        if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
                legs = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
            end
        end
        if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= (nil or 0) then
            if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
                feet = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "name"))
                doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
                doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
            end
        end
                selfSay("Okay, i've fixed your damaged weapon.", cid)
    else
        selfSay("You do not have enough money.", cid)
    end           
end
    if msgcontains(msg, 'repair weapon') then
        selfSay("Which weapon would you like to repair, {left} or {right}?.", cid)
            elseif msgcontains(msg, 'left') then
                if getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                        lefthand = (getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "name"))
                        doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, getItemIdByName(lefthand))
                        doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid, "Durability", "Durability: 100/100")
                        doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid , "description","Durability: 100/100")
                        selfSay("Okay, i've fixed your damaged weapon.", cid)
                    else
                    selfSay("You do not have eough money.", cid)
                    end
                else
                    selfSay("You do not have any weapon to repair in your left hand.", cid) 
                end
            else
                selfSay("This item does not need repair.", cid) 
                end
            elseif msgcontains(msg, 'right') then
               if getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, getItemIdByName(righthand))
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid, "Durability", "Durability: 100/100")
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid , "description","Durability: 100/100")
                            selfSay("Okay, i've fixed your damaged weapon.", cid)
                        else
                        selfSay("You do not have eough money.", cid)
                        end
                    else
                        selfSay("You do not have any weapon to repair in your right hand.", cid) 
                    end
                else
                selfSay("This item does not need repair.", cid) 
                end
    end
    if msgcontains(msg, 'repair equipment') then
        selfSay("Which part of your equipment would you like to repair, {helmet}, {armor}, {legs} or {boots}?.", cid)
            elseif msgcontains(msg, 'helmet') then
                if getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                        doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, getItemIdByName(head))
                        doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid, "Durability", "Durability: 100/100")
                        doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_HEAD).uid , "description","Durability: 100/100")
                        selfSay("Okay, i've fixed your damaged weapon.", cid)
                    else
                    selfSay("You do not have eough money.", cid)
                    end
                else
                    selfSay("You do not have any weapon to repair in your left hand.", cid) 
                end
            else
                selfSay("This item does not need repair.", cid) 
                end
            elseif msgcontains(msg, 'armor') then
               if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, getItemIdByName(getArmor))
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid, "Durability", "Durability: 100/100")
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid , "description","Durability: 100/100")
                            selfSay("Okay, i've fixed your damaged armor.", cid)
                        else
                        selfSay("You do not have eough money.", cid)
                        end
                    else
                        selfSay("You do not have any armor to repair in your armor slot.", cid) 
                    end
                else
                selfSay("This item does not need repair.", cid) 
                end
        elseif msgcontains(msg, 'legs') then
               if getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, getItemIdByName(legs))
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid, "Durability", "Durability: 100/100")
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_LEGS).uid , "description","Durability: 100/100")
                            selfSay("Okay, i've fixed your damaged legs.", cid)
                        else
                        selfSay("You do not have eough money.", cid)
                        end
                    else
                        selfSay("You do not have any legs to repair in your legs slot.", cid) 
                    end
                else
                selfSay("This item does not need repair.", cid) 
                end
        elseif msgcontains(msg, 'boots') then
               if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= (nil or 0) then
                    if getItemAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability") ~= nil then
                        if(doPlayerRemoveMoney(cid, charge_price)) then
                            doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, getItemIdByName(feet))
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "Durability", "Durability: 100/100")
                            doItemSetAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid , "description","Durability: 100/100")
                            selfSay("Okay, i've fixed your damaged weapon.", cid)
                        else
                        selfSay("You do not have eough money.", cid)
                        end
                    else
                        selfSay("You do not have any boots to repair in your feet slot.", cid) 
                    end
                else
                selfSay("This item does not need repair.", cid) 
                end
    end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 

Attachments

Last edited:
Back
Top