Ir para conteúdo

Featured Replies

Postado

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 por moskitinho (veja o histórico de edições)

Angelina_Me_by_msklotz.png

 

Atenciosamente,

Felipe Lotz.

 

  • moskitinho mudou o título para (Resolvido) Erro ao trocar item X por item Y

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo