Novidades

29 julho 2014

Unknown

[Include] Checagem de obstaculo entre dois pontos

E uma função para implementar no meu servidor de zumbis que está em desenvolvimento. Pensei em colocar nos códigos úteis, mas levei um bom tempo pra pensar em uma função assim — sou burro mesmo, inclusive tentei fazê-la em meados de 2013 e não tive sucesso no meu gamemode de zumbis antigo, agora está funcionando bem, porém tem melhorias ainda a fazer. 

Informações sobre a função: 

A velocidade dela é bastante boa, dá pra colocar num loop de até 300 ms. 

Ela funciona com morros atualmente, contanto que não sejam muito ingrimes 

Não detecta muros, arvores muito pequenas, postes, lixeiras e outros objetos pequenos, apenas casas ou grandes torres no meio do trajeto

 Útil para implementar em diversas funções, verificar se um player enxerga o outro ou há uma casa na frente, ou até algorítimos de path como zumbis e gps avançados, ou qualquer coisa que envolva verificar se há uma casa entre DOIS pontos Como usar:
Para usar, há os seguintes parâmetros.
Float:nx, Float:ny, Float: nz

representam a posição do ponto A

Float:px, Float:py, Float:pz

representam a posição do ponto B

 Float: offset = 1.5 

representará o tamanho do incremento dado a cada nova verificada da função, é interessante deixar aqui um valor de 1.0 que é o limite do MapAndreas. 

Float: diffHeigth = 1.5 

Representa altura do entre o último ponto verificado e o próximo, caso for maior que 1.5 há algum obstaculo GRANDE na frente do trajeto.

Como funciona?

Isto funciona de uma maneira bem simples, basicamente você pega dois pontos A e B, e traça uma reta entre eles. Nessa reta, o MapAndeas vai executando a cada metro (definido por offset) verificando se a altura é diferente da altura anterior. Obviamente, se a altura for demasiadamente diferente, como 10 ou 20 metros, haverá um edifício naquela posição ou algo do tipo, logo ela retorna false acusando de haver um obstaculo no meio do caminho. Simples, não?

Exemplo:

Aqui um vídeo dos zumbis utilizando o sistema com a função implementada, como eram mais de 350 pendurados deu um pouco de lag, mas até que rodou tranquilo. Com ela, eu verifico se há uma casa ou muros gigantes entre o trajeto, caso não tiver, ir reto, caso não tiver fazer uma rota alternativa (que é outro código que não vou postar aqui por enquanto).


Créditos:

Sn0wk - Autor
Maskara - Postador

Download:

http://pastebin.com/NedSvvfJ

Observação: salvem como route.inc

Subscribe to this Blog via Email :