Postado Março 6, 2018 7 anos estou começando com scripts , porem queria aprender sobre posições eu fiz essa script como um exercício que eu sabia que não ia dar certo(mentira tinha uma esperança asuhasuhsa) oque eu tentei fazer = se eu tiver um target e ele estiver na posição determinada retornar no combat1 se não tiver target retornar no combat se alguém puder me mostrar o caminho certo agradeço abrçs function onCastSpell(pos, target, targetpos, posdireita, cid) local pos = getCreaturePosition(cid) local target = getCreatureTarget(cid) local targetpos = getCreaturePosition(target) local posdireita = {x=pos.x+1, y=pos.y+1, z=7} if target == false then doCombat(cid, combat1, var else if targetpos == posdireita then doCombat(cid, combat, var) end return true end
Postado Março 6, 2018 7 anos Primeiro , sempre que for colocar um código no fórum , utilize a ferramenta Code. Segundo , não há necessidade dessas variáveis todas na function , somente as principais ( No caso cid e var) function onCastSpell(pos, target, targetpos, posdireita, cid) Terceiro , você não declarou o valor das variáveis Combat e Combat1 Quarto , você errou nessa parte else if targetpos == posdireita then bloco end O correto é elseif targetpos == posdireita then bloco end o código ficaria assim do jeito correto ; function onCastSpell(cid, var) local pos = getCreaturePosition(cid) local target = variantToNumber(var) local targetpos = getCreaturePosition(target) local posdireita = {x= pos.x + 1, y= pos.y + 1, z = pos.z} if not target then return doCombat(cid, combat1, var) elseif targetpos == posdireita then return doCombat(cid, combat, var) end end
Postado Março 6, 2018 7 anos Solução Acho que os principais pontos que você teria que trabalhar nesse script são a posição, já que a posição modificada é esta diagonal do personagem: Para ser a posição à direita do personagem você incrementa somente a coordenada X. Outro pronto é trabalhar no retorno dos callbacks LUA, quando você utiliza getPlayerTarget, caso o jogador tenha um target ele receberá um objeto, que no caso é o que ele está targetando, seja uma criatura, um player, etc. e você fez a seguinte comparação: if target == false then Caso o jogador não tenha um target, a função retorna 0. Caso você tenha dúvidas sobre o que a função te retorna, dê um print para aparecer no console o que você possui na variável, isso também é bem útil no debug, pra saber se uma determinada parte do script está sendo utilizada ou não. Exemplo : No teste acima o jogador não tinha um target Sempre que você abrir uma função/if/etc. deixe tudo que está dentro alinhado para a direita e certifique-se que o end está alinhado com com seu respectivo if ou function, isso facilita MUITO a leitura de um código. Exemplo tirado de uma source: No código acima você consegue identificar claramente onde começa e termina um bloco, além de saber o que faz parte de cada um Editado Março 6, 2018 7 anos por marcot (veja o histórico de edições)
Postado Março 6, 2018 7 anos Autor Vlw aos 2 , agora irei estudar isso .. rep :D 5 minutos atrás, marcot disse: criatura 15 minutos atrás, marcot disse: if target == false then Caso o jogador não tenha um target, a função retorna 0. Caso você tenha dúvidas sobre o que a função te retorna, dê um print para aparecer no console o que você possui na variável, isso também é bem útil no debug, pra saber se uma determinada parte do script está sendo utilizada ou não. print?
Postado Março 6, 2018 7 anos 23 minutos atrás, Jeanzim disse: Vlw aos 2 , agora irei estudar isso .. rep :D print? print é uma função fora dos callbacks do OTserver, uma função do LUA para imprimir no console (que no caso é o seu executável do servidor). Por exemplo: print ("Olá mundo!") Colocar isso em algo script seu fará com que, ao executá-lo aparaça uma mensagem "Olá mundo!" no console do seu OTServer, geralmente queremos imprimir acompanhado de alguma variável pra checar o valor e conferir se tudo está indo conforme o esperado. Vamos supor que você queira imprimir a posição do target por você achar que ele não está reconhecendo o target, então tentaríamos algo do tipo: pos = getCreatureTarget (cid) print ("POS DO TARGET: X = " .. pos.x .. ", Y = " .. pos.y .. ", Z = " .. pos.z) Isso faria com que aparecesse algo do tipo no seu console: POS DO TARGET: X = 100, Y = 120, Z = 10 Caso estivesse errado pode ser que aparecesse algo do tipo: POS DO TARGET: X = nil, Y = nil, Z = nil nil em LUA é a representação de NULL, ou seja, pos.x/y/z não possuem nenhum conteúdo, por isso em muitos erros ele inclui o "nil value" como mensagem de erro, é quando tentamos fazer uso de uma variável com valor nulo. Outra coisa importante é a presença de "..", print é uma função que recebe uma STRING (um conjunto de caracteres) e a imprime, então o ".." em LUA é o operador responsável por concatenar uma string a um valor. Outra coisa importante para quando estiver começando é sempre abrir tópicos como este quando for fazer scripts: Assim você saberá tudo que pode ser feito e conhecer os limites do que pode ser feito sem mexer na source. Editado Março 6, 2018 7 anos por marcot (veja o histórico de edições)
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.