Ir para conteúdo

Pergunta

Olá pessoal eu estava fazendo um sisteminha aqui para meu servidor porém eu tive um erro relacionado a tabela, gostaria da ajuda de vocês para conseguir concerta-lo se possivel uma explicação do motivo desse erro.

[31/05/2016 09:19:18] [Error - Npc interface] [31/05/2016 09:19:18] data/npc/scripts/DayCarre.lua:onCreatureSay[31/05/2016 09:19:18] Description: [31/05/2016 09:19:18] data/npc/scripts/DayCarre.lua:20: attempt to index global 'item' (a nil value)[31/05/2016 09:19:18] stack traceback:[31/05/2016 09:19:18]     data/npc/scripts/DayCarre.lua:20: in function <data/npc/scripts/DayCarre.lua:12>
  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/
Compartilhar em outros sites

Posts Recomendados

  • 0

@kttallan, pelo que dá pra entender, nessa linha você está qrnd pegar o id de um item.

local tb = tables[item.itemid]

Sendo que você está usando um parâmetro (item) que não possui nenhum valor atribuído.

Faria sentido utilizar essa linha se o script fosse um action. Eis o porquê:

  Citar

function onUse(cid, item)

Expand  

Como você pode ver, aqui se vc utilizar o parâmetro item em algum lugar do script (action), ele terá um valor que terá sido pego automaticamente no momento em que o script foi acionado.

Porém você está utilizando um onCreatureSay, e nesse tipo de evento, não é possível utilizar o parâmetro item.
Vc terá que arranjar alguma outra forma de capturar o id do item X que vc tá qrnd.

Não sei se me fiz entender, mas espero que sim... sahusahusahu


possível solução:
Já que na tabela tables vc tá usando só 1 elemento, acredito que usar isso não irá te trazer problemas:

for k, v in pairs(tables) do
	if getPlayerItemCount(cid, k) > 0 then
		..etc etc..
	end
end

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694446
Compartilhar em outros sites

  • 0

Entendo muito obrigado vou tentar refaze-lo em breve, outra eu gostaria de saber como faço para oque o player falar ficar na tabela exemplo.

 

local table = {

["Arcanine"] = {}

}

 

local tb = table[msg]

 

Está certo a forma que executo.

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694455
Compartilhar em outros sites

  • 0

@kttallan, dessa forma você estaria fazendo um arrodeio desnecessário.

Observe uma forma mais sucinta e prática:

 local table = {
["Arcanine"] = {}
}

for k, v in pairs(table) do
	if msgcontains(msg, k) then
		..etc etc..
	end
end



Eu fiz um npc um tempo atrás utilizando esse mesmo princípio:
http://www.xtibia.com/forum/topico/240211-npc-que-dá-informaçõesconta-histórias/

 

Dá uma olhada nos códigos dele pra vc ver como é que funcionaria a execução prática disso.

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694469
Compartilhar em outros sites

  • 0

Bom eu atualizei o script de acordo com as informações que você me passou, porém continua dando erro só que diferentes.

 

Nº 1

[01/06/2016 16:28:12] [Error - Npc interface] [01/06/2016 16:28:12] data/npc/scripts/DayCarre.lua:onCreatureSay[01/06/2016 16:28:12] Description: [01/06/2016 16:28:12] data/npc/scripts/DayCarre.lua:41: attempt to perform arithmetic on field 'time' (a nil value)[01/06/2016 16:28:12] stack traceback:[01/06/2016 16:28:12] 	data/npc/scripts/DayCarre.lua:41: in function <data/npc/scripts/DayCarre.lua:12>

Nº 2

[01/06/2016 16:28:12] [Error - Npc interface] [01/06/2016 16:28:12] data/npc/scripts/DayCarre.lua:onCreatureSay[01/06/2016 16:28:12] Description: [01/06/2016 16:28:12] data/npc/scripts/DayCarre.lua:41: attempt to perform arithmetic on field 'time' (a nil value)[01/06/2016 16:28:12] stack traceback:[01/06/2016 16:28:12] 	data/npc/scripts/DayCarre.lua:41: in function <data/npc/scripts/DayCarre.lua:12>

 

Codigo Atualizado.

 

  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694476
Compartilhar em outros sites

  • 0

@kttallan, o erro está se dando pq vc não está conseguindo acessar (da forma correta) o valor desejado.

Temos a seguinte tabela:

local table = {
["Arcanine"] = {price = 10, storages = 1212, storagese = 1213, time = 24 * 60 * 60, egg_ID = 12127}
}

Se você rodar o seguinte código:

local table = {
["Arcanine"] = {price = 10, storages = 1212, storagese = 1213, time = 24 * 60 * 60, egg_ID = 12127}
}

for k, v in pairs(table) do
	print(k)
end

O console mostrará o valor de k. O resultado seria o seguinte:

  Citar

Arcanine

Expand  

*ou seja, mostrará o "identificador" do elemento componente da tabela.

 

Se você rodar, o seguinte código:

local table = {
["Arcanine"] = {price = 10, storages = 1212, storagese = 1213, time = 24 * 60 * 60, egg_ID = 12127}
}


for k, v in pairs(table) do
	print(k.time)
end

O resultado será o seguinte:

  Citar

nil

Expand  

*ou seja, você não conseguiu acessar o valor desejado.

 

 

Agora, se você rodar o seguinte código:

local table = {
["Arcanine"] = {price = 10, storages = 1212, storagese = 1213, time = 24 * 60 * 60, egg_ID = 12127}
}


for k, v in pairs(table) do
	print(table[k].time)
end

O resultado será o seguinte:

  Citar

86400

Expand  

*ou seja, aqui você conseguirá acessar o valor desejado.


 

Explicação na prática:

Se você usar k.time em qualquer parte do código, ele terá o valor nil. Porém, se você utilizar table[k].time ele terá o valor da variável time do elemento k da tabela.

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694493
Compartilhar em outros sites

  • 0

Velho você não sabe o quanto está me ajudando, é meu primeiro NPC que crio :/

 

Erro:

 

[01/06/2016 20:52:22] [Error - Npc interface] [01/06/2016 20:52:22] data/npc/scripts/Daycarre.lua:onCreatureSay[01/06/2016 20:52:22] Description: [01/06/2016 20:52:22] data/npc/scripts/Daycarre.lua:5: bad argument #2 to 'find' (string expected, got table)[01/06/2016 20:52:22] stack traceback:[01/06/2016 20:52:22]     [C]: in function 'find'[01/06/2016 20:52:22]     data/npc/scripts/Daycarre.lua:5: in function 'msgcontains'[01/06/2016 20:52:22]     data/npc/scripts/Daycarre.lua:61: in function <data/npc/scripts/Daycarre.lua:12>

 

 

Codigo:

 

  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694495
Compartilhar em outros sites

  • 0

sauhsahu, de boas.

Só tenho 1 pergunta... Pq você tá refazendo a função msgcontains (justamente nela que deu o erro agr)? Ela não existe no teu server ñ?

Enfim, vê se dá certo:

  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694500
Compartilhar em outros sites

  • 0
  Em 01/06/2016 em 19:32, kttallan disse:

 for k, v in pairs(table) do

                temp = os.time() + k.time 

Expand  

 

For em lua é um loop e pairs é um iterator.

Quando usado o iterator no loop for, retornar-se dois valores,  o index (k) e o valor atribuido ao index (v).

Acessar a tabela na qual está acessando o loop com o iterator pelo caminho, é um mal exemplo de programação. 

 

Nao faça isso:

  Citar

table[k].tempo

Expand  

 

Faça isso:

  Citar

v.tempo

Expand  

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694515
Compartilhar em outros sites

  • 0

Obrigado pessoal por está me ajudando, eu já desisti do npc porém estou postando o erros por questão de conhecimento.

 

A parte em vermelha não está executando.

 

Extra: O npc funciona da seguinte forma para os que tentão me ajudar mais não estão sabendo oque ele faz, você fala com ele terá 3 opções checar, entregar, retirar.

 

Checar = Checa sé o player ainda tem a storage com os.time, caso tenha será mandando uma mensagem informando quanto tempo falta para ficar pronto o ovo.

Entregar = Será removido o item(ovo) e adicionado a storage do os.time e storage de segurança (storagese), será removido uma quantidade de dinheiro também.

Retirar = Quando o player não estiver mais com a storage do os.time será retirado o ovo e removido a storage de segurança.

 

 

  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694526
Compartilhar em outros sites

  • 0

Esse escopo não está sendo executado por causa dessa condição:

  Citar

if msgcontains(string.lower(msg), k) and talkState[talkUser] == 2 then 

Expand  

 

Mais especificamente aqui:

  Citar

 msgcontains(string.lower(msg), k)

Expand  

 

Ela não está sendo executada,  porquê você está tentando encontrar a mensagem (nesse caso seria: "entregar") nos index da array 'tabela', na qual não tem o index: "entregar".

  Citar

local table = {
["Arcanine"] = {price = 10, storages = 1212, pokemon = "Arcanine", storagese = 1213, time = 24 * 60 * 60, egg_ID = 12127}

Expand  

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694533
Compartilhar em outros sites

  • 0

@kttallan, vê se resolve:

  Mostrar conteúdo oculto

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694565
Compartilhar em outros sites

  • 0

Usa a função string.explode (str, ret)

No caso, o player dirá: "entregar arcaine", a função irá separar as palavras "entregar" e "arcane". Lembre-se que a função (explode) retorna uma tabela, então você tera que acessar seu conteúdo pelos index; exemplo:

  Citar

local msg = "entregar arcane"

local t = string.explode (msg," ")

print (t [1]) --> "entregar"

print (t [2]) --> "arcane"

print (t [3]) --> nil

Expand  

 

Link para o comentário
https://xtibia.com/forum/topic/240944-erro-npc/#findComment-1694592
Compartilhar em outros sites

×
×
  • Criar Novo...