Ir para conteúdo
  • Cadastre-se

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.gifComparaçã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.gifMé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

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo