Ir para conteúdo

Featured Replies

Postado

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
 

Resolvido por marcot

Ir para solução
  • Respostas 7
  • Visualizações 495
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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 va

  • 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 v

  • Ele se refere a função print ; geralmente é usada para retornar um valor no executável ;   function onCastSpell(cid, var) print(var) -- a function printa o valor da variaval var e a retorna

Postado

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
  • 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:

6c32a495465e99706a093915648aca1c.png

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 :

107335bed96f2e79badf577b70304680.png

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:

35ba5d40349ae4c9fafd63cd7c91e92c.png

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

Postado
  • 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
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 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.

Visitante
Responder

Quem Está Navegando 0

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

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo