Postado Março 30, 2022 3 anos Qual servidor ou website você utiliza como base? OTX 12.64 Qual o motivo deste tópico? Fala pessoal olha eu aqui de novo, vou me virando como posso nos scripts, abro um por um e vou tentando montar as coisas que preciso. Neste caso meu NPC deveria trocar 100 gold token por 1 addon doll e 100 silver token por 1 item umbral. Ele realiza a troca porém o servidor registra o seguinte erro: Lua Script Error: [Npc interface] data/npc/scripts/garatoken.lua:onCreatureSay data/npc/scripts/garatoken.lua:30: attempt to call global 'getItemNameById' (a nil value) stack traceback: [C]: in function 'getItemNameById' data/npc/scripts/garatoken.lua:30: in function 'callback' data/npc/lib/npcsystem/npchandler.lua:433: in function 'onCreatureSay' data/npc/scripts/garatoken.lua:8: in function <data/npc/scripts/garatoken.lua:8> Estou usando o seguinte script: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 local items = { item1 = {25377, 2322}, -- item1 item que será pedido e que será dado na primeira troca item2 = {25172, 22409} -- item2 item que será pedido e que será dado na segunda troca } local counts = { count1 = {100, 1}, -- count1 quantidade que será pedido e que será dado na primeira troca count2 = {100, 1} -- count2 quantidade que será pedido e que será dado na segunda troca } 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, 'addon doll') then if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then doPlayerRemoveItem(cid, items.item1[1], counts.count1[1]) doPlayerAddItem(cid, items.item1[2], counts.count1[2]) selfSay('You just swap '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' for '.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'.', cid) else selfSay('You need '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..'.', cid) end elseif msgcontains(msg, 'umbral') then if getPlayerItemCount(cid, items.item2[1]) >= counts.count2[1] then doPlayerRemoveItem(cid, items.item2[1], counts.count2[1]) doPlayerAddItem(cid, items.item2[2], counts.count2[2]) selfSay('You just swap '.. counts.count2[1] ..' '.. getItemNameById(items.item2[1]) ..' for '.. counts.count2[2] ..' '.. getItemNameById(items.item2[2]) ..'.', cid) else selfSay('You need '.. counts.count2[1] ..' '.. getItemNameById(items.item2[1]) ..'.', cid) end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) O script funciona pórem gostaria de remover esse erro no console pra deixar ele 100% Podem fechar pessoal o erro era na função getItemNameById Como não faço questão destas refinarias eu troquei pra uma mensagem simples mesmo e dalê 100% funcional. Alias pra quem precisa de npc trocando Item X por Item Y fica abaixo o script caso você queira seguir adicionando vai precisar adicionar mais itens, counts e linhas 'elseif' e ir alterando o número nos locais, da pra entender olhando o script... local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 local items = { item1 = {25377, 2322}, -- item1 item que será pedido / que será dado na primeira troca item2 = {25172, 22409}, -- item2 item que será pedido / que será dado na segunda troca item3 = {25172, 22403}, -- item3 item que será pedido / que será dado na segunda troca item4 = {25172, 22415}, -- item4 item que será pedido / que será dado na segunda troca } local counts = { count1 = {100, 1}, -- count1 quantidade que será pedido / que será dado na primeira troca count2 = {100, 1}, -- count2 quantidade que será pedido / que será dado na segunda troca count3 = {100, 1}, -- count3 quantidade que será pedido / que será dado na segunda troca count4 = {100, 1}, -- count4 quantidade que será pedido / que será dado na segunda troca } 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, 'addon doll') then if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then doPlayerRemoveItem(cid, items.item1[1], counts.count1[1]) doPlayerAddItem(cid, items.item1[2], counts.count1[2]) selfSay('You received addon doll.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral axe') then if getPlayerItemCount(cid, items.item2[1]) >= counts.count2[1] then doPlayerRemoveItem(cid, items.item2[1], counts.count2[1]) doPlayerAddItem(cid, items.item2[2], counts.count2[2]) selfSay('You received Umbral Axe.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral sword') then if getPlayerItemCount(cid, items.item3[1]) >= counts.count3[1] then doPlayerRemoveItem(cid, items.item3[1], counts.count3[1]) doPlayerAddItem(cid, items.item3[2], counts.count3[2]) selfSay('You received Umbral Sword.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral club') then if getPlayerItemCount(cid, items.item4[1]) >= counts.count4[1] then doPlayerRemoveItem(cid, items.item4[1], counts.count4[1]) doPlayerAddItem(cid, items.item4[2], counts.count4[2]) selfSay('You received Umbral Club.', cid) else selfSay('You need more silver tokens.', cid) end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Podem fechar pessoal o erro era na função getItemNameById Como não faço questão destas refinarias eu troquei pra uma mensagem simples mesmo e dalê 100% funcional. Alias pra quem precisa de npc trocando Item X por Item Y fica abaixo o script caso você queira seguir adicionando vai precisar adicionar mais itens, counts e linhas 'elseif' e ir alterando o número nos locais, da pra entender olhando o script... local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 local items = { item1 = {25377, 2322}, -- item1 item que será pedido / que será dado na primeira troca item2 = {25172, 22409}, -- item2 item que será pedido / que será dado na segunda troca item3 = {25172, 22403}, -- item3 item que será pedido / que será dado na segunda troca item4 = {25172, 22415}, -- item4 item que será pedido / que será dado na segunda troca } local counts = { count1 = {100, 1}, -- count1 quantidade que será pedido / que será dado na primeira troca count2 = {100, 1}, -- count2 quantidade que será pedido / que será dado na segunda troca count3 = {100, 1}, -- count3 quantidade que será pedido / que será dado na segunda troca count4 = {100, 1}, -- count4 quantidade que será pedido / que será dado na segunda troca } 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, 'addon doll') then if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then doPlayerRemoveItem(cid, items.item1[1], counts.count1[1]) doPlayerAddItem(cid, items.item1[2], counts.count1[2]) selfSay('You received addon doll.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral axe') then if getPlayerItemCount(cid, items.item2[1]) >= counts.count2[1] then doPlayerRemoveItem(cid, items.item2[1], counts.count2[1]) doPlayerAddItem(cid, items.item2[2], counts.count2[2]) selfSay('You received Umbral Axe.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral sword') then if getPlayerItemCount(cid, items.item3[1]) >= counts.count3[1] then doPlayerRemoveItem(cid, items.item3[1], counts.count3[1]) doPlayerAddItem(cid, items.item3[2], counts.count3[2]) selfSay('You received Umbral Sword.', cid) else selfSay('You need more silver tokens.', cid) end elseif msgcontains(msg, 'umbral club') then if getPlayerItemCount(cid, items.item4[1]) >= counts.count4[1] then doPlayerRemoveItem(cid, items.item4[1], counts.count4[1]) doPlayerAddItem(cid, items.item4[2], counts.count4[2]) selfSay('You received Umbral Club.', cid) else selfSay('You need more silver tokens.', cid) end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Editado Março 30, 2022 3 anos por moskitinho (veja o histórico de edições) Atenciosamente, Felipe Lotz.
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.