Ir para conteúdo

Classe Position[EagleLib]


MaXwEllDeN

Posts Recomendados

Introdução

 

divisor.png

O script postado aqui é uma parte de uma Biblioteca que eu estou desenvolvendo para Open Tibia, a EagleLib. Esta biblioteca terá várias funções que são muito úteis e funcionais, funções que tornará mais prático o desenvolvimento de scripts.

 

 

A `classe` Position

divisor.png

Como muitos sabem, Lua não tem uma Orientação a Objetos nativa, mas possui uma poderosa ferramenta que nos permite simular a Orientação a Objetos, a ferramenta a qual me refiro são as metatabelas. Para tornar mais prático o desenvolvimento de scripts que necessitam manipular posições, foi criada uma `classe` nomeada Position.

 

 

separador.gif

Como declarar um objeto Position

separador.gif

 

Para declarar um objeto Position você deve chamar o método Position:new e atribuir como parâmetro uma tabela contendo as coordenadas da posição.

 

local pos = Position:new({x = 160, y = 54, z = 7})

 

 

separador.gif

Comparação entre posições

separador.gif

Creio que em algum momento você já precisou, ou pensou em fazer algo como mostra o exemplo abaixo, não?

 

local pos = {x = 160, y = 54, z = 7}
local player_pos = getCreaturePosition(cid)

if pos == player_pos then
  return doPlayerSendCancel(cid, "Você não pode fazer isso nessa posição!")
end

 

Isso não funcionaria do modo desejado, pois quando a verificação fosse feita não seria verificado se os conteúdos da tabela são iguais, mas se uma tabela é a outra(tem uma enorme diferença entre ser como ela e ser ela). Mas se você tentasse fazer desse modo, em vez do mostrado anteriormente, resultado seria satisfatório.

 

local pos = Position:new({x = 160, y = 54, z = 7})
local player_pos = Position:new(getCreaturePosition(cid))

if pos == player_pos then
  return doPlayerSendCancel(cid, "Você não pode fazer isso nessa posição!")
end

 

Desse modo, se o player estivesse na posição especificada, quando o script fosse executado ele receberia a mensagem do doPlayerSendCancel.

 

separador.gif

Métodos existentes atualmente

separador.gif

 

Position:getItemsThere(items[, start_stack])
Position:isCreatureThere(uid)
Position:doTeleportThing(uid)
Position:doCreateItem(itemid, amount)
Position:doRemoveCreatureThere()
Position:doRemoveItemById(itemid[, amount])
Position:doSendMagicEffect(id)
Position:isItemThere(itemid)

 

 

Download

divisor.png

A biblioteca está anexada ao tópico.

EagleLib.tar.gz

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

  • 1 month later...
  • 2 months later...
×
×
  • Criar Novo...