Postado Agosto 26, 2019 5 anos Olá, estou usando tfs 0.4 e eu estou precisando checar o nome do item na hora de fazer uma troca (via talkactions), o negocio é que eu uso um refine system e o nivel do item é definido pelo nome, entao um item +1 é nomedoitem +1, tipo Giant Sword +1. Preciso checar se o nome do item é, por exemplo, Giant Sword +16 na hora de fazer a troca local item = 12609 local nome1 = getItemName(itemid.uid) local nome2 = "Star wand" if param == "wand" then if nome1 == nome2 then doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!") --doPlayerRemoveItem(cid, 12609) doPlayerRemoveItem(cid, table["wand"].id, 1) doPlayerAddItem(cid, table["wand"].toid, 1) else doPlayerSendCancel(cid, "Você não tem o item necessário!") end return true end to tentando usar ai a funcao getItemName(uid) e tentei de tudo que é jeito já, o script de rima ta retornando isso no console: [9:42:12.421] [Error - TalkAction Interface] [9:42:12.423] data/talkactions/scripts/trocaritems.lua:onSay [9:42:12.426] Description: [9:42:12.427] data/talkactions/scripts/trocaritems.lua:9: attempt to index global 'itemid' (a nil value) [9:42:12.428] stack traceback: [9:42:12.428] data/talkactions/scripts/trocaritems.lua:9: in function <data/talkactions/scripts/trocaritems.lua:1> script completo (só editei a parte da wand) function onSay(cid, words, param) local money = 500 local table = { ["wand"] = {id = 12609, toid = 7754}, ["sword"] = {id = 2408, toid = 7391}, } local item = 12609 local nome1 = getItemName(itemid.uid) local nome2 = "Star wand" if param == "wand" then if nome1 == nome2 then doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!") --doPlayerRemoveItem(cid, 12609) doPlayerRemoveItem(cid, table["wand"].id, 1) doPlayerAddItem(cid, table["wand"].toid, 1) else doPlayerSendCancel(cid, "Você não tem o item necessário!") end return true end if param == "sword" then if getPlayerItemCount(cid, table["sword"].id) >= 1 then if getPlayerMoney(cid) >= 500 then doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!") doPlayerRemoveMoney(cid, 500) doPlayerRemoveItem(cid, table["sword"].id, 1) doPlayerAddItem(cid, table["sword"].toid, 1) else doPlayerSendCancel(cid, " Você não tem dinheiro suficiente!") end else doPlayerSendCancel(cid, " Você não tem o item necessário!") end end return true end edit: consegui fazer funcionar com o codigo local slotitem = getPlayerSlotItem(cid, CONST_SLOT_LEFT) -- edite o slot local nomeitem = getItemNameById(slotitem.itemid) -- tipo isso local slotitem2 = getPlayerSlotItem(cid, CONST_SLOT_RIGHT) -- edite o slot local nomeitem2 = getItemNameById(slotitem.itemid) -- tipo isso local nome2 = "Star wand +16" if param == "wand" then if nomeitem == nome2 or slotitem2 == nome2 then doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!") --doPlayerRemoveItem(cid, 12609) doPlayerRemoveItem(cid, table["wand"].id, 1) doPlayerAddItem(cid, table["wand"].toid, 1) else doPlayerSendCancel(cid, "Você não tem o item necessário!") end return true end mas ainda nao troca o item mesmo tendo a wad +16 edit: to pegando o nome padrao e nao o nome atual do item dai ta sempre retornando star wand em vez do star wand +16,, alguma ideia? Editado Agosto 26, 2019 5 anos por Gabrieldsadaxas (veja o histórico de edições) Se eu te ajudei e você também quer me ajudar, faça uma doação Tfs 0.4 - Click up Tfs 0.4 - Countdown horário dos próximos eventos Tfs 0.4 - Spell que cancela o target do inimigo
Postado Agosto 27, 2019 5 anos function onSay(cid, words, param) local money = 500 local slots, param = {CONST_SLOT_LEFT, CONST_SLOT_RIGHT}, param:lower() local table = { ["wand"] = {id = 12609, toid = 7754, upgrade = 16}, ["sword"] = {id = 2408, toid = 7391, upgrade = 15}, } local t = table[param] if not t then doPlayerSendTextMessage(cid, 22, "eu nao troco esse item, apenas wand ou sword!") return true elseif getPlayerMoney(cid) < 500 then doPlayerSendTextMessage(cid, 22, "você nao tem 500 gps!") return true end for _, ret in pairs(slots) do if getPlayerSlotItem(cid, ret).itemid == t.id then -- aqui ja faz a verificação se tem o item local var = getItemNameById(getPlayerSlotItem(cid, ret).itemid) local z = var:match("(%d+)") if z == nil or z < t.upgrade then doPlayerSendTextMessage(cid, 22, "o item n tem o upgrade necessario!") return true end doPlayerSendTextMessage(cid, 22, "Você fez uma troca de items!") doPlayerRemoveItem(cid, t.id) doPlayerAddItem(cid, t.toid, 1) end end return true end Editado Agosto 27, 2019 5 anos por Vodkart (veja o histórico de edições) [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Agosto 27, 2019 5 anos Autor não troca mesmo tendo o item no nivel certinho, acho que o comando ta procurando por uma "star wand 16" e nao uma "star wand +16" Se eu te ajudei e você também quer me ajudar, faça uma doação Tfs 0.4 - Click up Tfs 0.4 - Countdown horário dos próximos eventos Tfs 0.4 - Spell que cancela o target do inimigo
Postado Agosto 28, 2019 5 anos @Vodkart , responde o pm lá men, o contrato do sistema.. até hj vc nao me responde.
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.