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
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

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 Novembro 4 por Slicer
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

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 ^
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 Novembro 4 por brun123
info
Grupo: Campones
Registrado: 16/09/12
Posts: 88
Reputação: +21
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 endNo 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 Novembro 4 por WillOliveira