Ir para conteúdo
  • 0

O Que Errei No Meu Script?


WillOliveira

Pergunta

Fiz o seguinte script: Item que concede promotion ao player e se o player não tiver vocação é atribuída uma vocação randômica ao mesmo.

 

Fiz este script:

local config = {
{voc = 1},
{voc = 2},
{voc = 3},
{voc = 4}
}

local vocation = {
[1] = {1, 5},
[2] = {2, 6},
[3] = {3, 7},
[4] = {4, 8}
}

function onUse(cid, item, frompos, item2, topos)
	 for v = 0, #config do
		 for w = 0, #vocation do
			 if getPlayerVocation(cid) == 0 then
				if math.random(1,4) == config[v].voc then
				   doPlayerSetVocation(cid, config[v].voc)
				   if getPlayerVocation(cid) == vocation[w][1] then
					  doPlayerSetVocation(cid, vocation[w][2])
					  return doRemoveItem(item.uid, 1) and doSendMagicEffect(frompos, 30)
				   end
				end
				return doRemoveItem(item.uid, 1) and doSendMagicEffect(frompos, 30)
			 end
		 end
	 end
end

 

No Debugger LUA ele passa, mas in-game não funfa, será que errei algo no script ou minha distro ta bugada?? Minha distro é TFS 0.3.6 PL1 e a versão do Tibia é 8.54. Analisei meu script linha por linha e não achei nenhum erro!! :( Quando do use no item apareceo seguinte erro no console: linha 20: atemp to index field '?' (a nil value) fala q o erro ta na linha 20, ajudem!

Editado por WillOliveira
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

em .LUA n se começa com 0...

for v = 0, #config do						  
for w = 0, #vocation do

 

o certo seria..

for v = 1, #config do						  
for w = 1, #vocation do

Editado por Slicer
Link para o comentário
Compartilhar em outros sites

  • 0

em .LUA n se começa com 0...

 

depende do caso, se na tabela esse tivesse atribuído um dos index como 0 iria dar certo:

 

local vocation = {
[0] = {1, 5},
[1] = {2, 6},
[2] = {3, 7},
[3] = {4, 8}
}

 

exemplo ^

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, o erro acontece porque nessa linha:

 

doPlayerSetVocation(cid, config[v].voc)

 

foi feita uma tentativa de indexar uma tabela com tal key e retornou nil, provavelmente foi o que o Slicer disse, o v deveria valer 0, e como não tem key 0 na tabela config, vai retornar nil.

 

Mas mesmo arrumando isso, sua script ta sem sentido nenhum, o que ela faz é repetir 16x, checando se a vocação do player é 0, e se um número aleatório gerado a cada repetição de 1 a 4 for igual ao que você especificou na tabela, blabla, ta muito nada a ver...

 

function onUse(cid, item, frompos, item2, topos)

   local vocation = getPlayerVocation(cid)
   if vocation == 0 then
    vocation = math.random(4)
   elseif vocation > 4 then
    return doPlayerSendCancel(cid, "Você já tem promotion.")
   end

   doPlayerSetVocation(cid, vocation + 4)
   doRemoveItem(item.uid, 1)
   doSendMagicEffect(frompos, 30)

return true
end

 

essa script faz o que você quer, pega a vocation do player e declara como vocation, se a variável vocation for 0, vai passar a ser um número de 1 a 4 aleatório, depois adiciona a vocação "vocation + 4" ao player, ou seja, se for 1 o vocation dele, vai passar a ser 5, se for 2 vai passar a ser 6 etc.

 

edit:

 

acabei de ver que seu script pode funcionar, mas trabalha com prababilidade... se você colocar nos fors para começar do 1 em vez de 0, pode ser que o player use o item e não aconteça nada, mas pode ser que ele use e funcione mudando a vocação etc, é chato explicar escrevendo o porquê disso ocorrer, mas usar for numa script assim é só querer complicar as coisas mesmo...

Editado por brun123
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...