Ir para conteúdo

Dinastias - Getdirectionbetween By Dokmos 30/01


Dokmos

Posts Recomendados

logo-d10.jpg

 

 

 

Function getDirectionBetween(fromPos, toPos[, directions])

by Dokmos



 

 

-----------------------------------------------

 

Características

 

 

Essa função verifica a direção de uma posição em relação a outra, por exemplo se eu tenho minha posição e tenho a posição de outro jogador, e gostaria de saber a direção que este jogador está em relação a mim, se ele estiver "acima" de mim retornará 0 (Norte), o último parâmetro é opcional para colocar FALSE ou TRUE, caso você coloque FALSE ele retornará apenas os pontos cardeais (norte, sul, leste e oeste - em seus respectivos números), se colocar TRUE ele poderá retornar também os pontos colaterais (nordeste, noroeste, sudeste, sudoeste - em seus respectivos números).

 

Utilizo esta função também em magias em que eu quero empurrar uma criatura para longe de mim, por exemplo se eu colocar a posição do jogador e da criatura irá retornar a direção da criatura, se eu utilizar um doMoveCreature para aquela direção irá empurrar a criatura, e se eu quiser puxar uma criatura é só inverter os parâmetros de posição colocando da criatura primeiramente.

 

-----------------------------------------------



 

Instalação

 

 

Adicione essa função dentro do data\global.lua, você também pode colocá-la em outros libs, mas o global.lua já servirá para todas funções como spells, talkactions, actions, etc.

 

Obs: Alguas versões de OT o global.lua está no data\lib\constant.lua

 

function getDirectionBetween(fromPos, toPos, directions)
-- Desenvolvido por Dokmos 30/01/2009
-- Apoio Dinastias
dify = (fromPos.y-toPos.y)
difx = (fromPos.x-toPos.x)
local ARRAY = {}
local BOOL = {0}

local DIR = {
{dify, -difx, -dify, difx},{dify-math.abs(difx), -difx-math.abs(dify), -dify-math.abs(difx), difx-math.abs(dify),
difx-dify-math.abs(difx), -dify-math.abs(-difx)-difx, dify-math.abs(difx)+difx, dify-math.abs(-difx)-difx}
}

table.insert(BOOL, directions)
for d = 1, #DIR[BOOL[#BOOL]+1] do
table.insert(ARRAY, DIR[(BOOL[#BOOL])+1][d])
end
table.sort(ARRAY)

return (table.find(DIR[BOOL[#BOOL]+1], ARRAY[#ARRAY])-1)
end

 

-----------------------------------------------



 

Funcionamento

 

 

Quando utilizar fica a seu critério, vou mostrar um exemplo básico que pega uma direção para empurrar alguma criatura do target para distante do jogador.

 

function onSay(cid, words, param)
local creature = getCreatureTarget(cid)
local pos = getThingPos(cid)

  if isCreature(creature) == TRUE then
  doSendDistanceShoot(pos,getThingPos(creature),38)
  doSendMagicEffect(getThingPos(creature),3)
  doMoveCreature(creature,getDirectionBetween(pos,getThingPos(creature))
  else
  doPlayerSendCancel(cid,"Você precisa selecionar o alvo.")
  end

return TRUE
end

 

Este exemplo acima de uma talkaction verifica se existe alguma criatura no target e caso tenha, empurra a criatura para distante do jogador.

 

Obs: Se em vez de "getDirectionBetween(pos,getThingPos(creature))" você colocar "getDirectionBetween(getThingPos(creature),pos)", ou seja, inverter as posições irá puxar a criatura para perto do jogador.

 

 

Espero que consigam aproveitar a função em seus scripts, qualquer bug ou erro postem aqui para eu dar uma verificada, e a configuração em seus scripts fica por conta de vocês.

 

:positive:

 

Atenciosamente,

Dokmos

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

Dokmos nada mais eu estou la no Orkut esperando o Dinastias ficar on o closed

Voce cada vez se supera como voce faz tantas funçoes :p:D?

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

Obrigado Zafor,

 

Sim, prefiro colocar funções avançadas estimulando a busca pelo conhecimento e desenvolvimento dos progamadores lua, fazendo-os ser "criativos" por seus próprios méritos do que copiar e colar uma action em seu OT sem haja algum aprendizado.

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

muito bom... reconheço seu trabalho, eu gosto mais de mecher com actions e movements, tambem "fuço" muito o global.lua...

vc é bom no que faz, e tem ideias otimas, o chato de tudo isso, é que todos reconhecem, usam, mais nao deixam nem si quer uma gratificação...(posts)

 

Parabens

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...