VB/VB.Net Ligne de tir d'un sort

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#1
Bonsoir,

J'ai un souci avec la ligne de tir d'un sort. En effet si un monstre est caché derriere un obstacle je ne peux pas le taper. D'apres ce que m'avais dis toons, je fais un path jusqu'au monstre, tant que la variable Los des D2p n'est pas egal à 1 c'est que je peus tirer mais le souci c'est que cela ne marche pas mais aussi cette variable est statique, elle ne varie pas celon la position du personnage. Voila donc je suis un peu perdu, si on pouvait m'éclairer sur le sujet.

Bonne soirée
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#2
Normalement comme pour le pathfinding, dofus implémente une fonction pour savoir si la cible est visible pour un sort.
Il suffit de la trouver et de la convertir.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#3
oui utiliser le pathfinding sans prendre en compte les obstacles pour trouver la ligne de vue (le chemin le plus court sans obstacle c'est bien la ligne de vue) , une fois qu'on a la ligne de vue on regarde si toutes les cases de ce chemin sont a los=true alors dans ce cas c'est touchable (si la distance le permet) , normal que los est statique , un caillou ou arbre c'est statique
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#4
Bonsoir,

Effectivement geraff mais je ne comprend pas bien les codes sources d'ankama, je prefere coder ma fonction

ToOnS ya quelque chose que je ne comprend pas.

Prenons pour exemple que mon personnage est situé tout à droite de la map.

Il y a des obstacles qui forment une sorte de cercle.

Sachat que l'on se trouve sur la droite, les cases se trouvant vers la gauche des obstacle ne sont pas inclu dans la ligne de tir. Mais si on cree un pathfinding et qu'on a 10 de portée. Le pathfinding pourrait tres bien nous emmenner derriere les obstacles sachant que Los ne varie pas celon la position du personnage.

Si on se trouve en dessous des obstacles, les cellules du haut ne peuvent pas etre atteind, mais si on est a gauches, cerataines pourront etre atteintes. Donc vu que los est static je ne comprend pas ce fonctionnement.

Los correspond a quoi exactement ?

Merci de vos reponses
Bonne soiree
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
(a chaque fois que je parle de path dans ce post c'est un path comme celui hors combat meme si on est en combat)
il ne faut pas prendre en compte les obstacles (donc ca sera toujours une ligne droite , pas d'obstacles + chemin le plus court = ligne droite), le chemin entre le monstre et toi ne sert pas a se deplacer mais juste a savoir le chemin le plus court :
cases_Ligne_deVue=pathfinding(lemonstre,bot) ' voila on a la ligne la plus courte , regardons si c'est a vue :
dim touchable as boolean=true
for each case in cases_Ligne_deVue
if case.los=false then touchable= false ' c'est pas a vue
next

los=Line Of See (ligne de vue) , donc los=false c'est un osbtacle de vue

avec un dessin ca parle mieux :
rouge le monstre , jaune les los=false , bleu foncé et bleu clair , des positions prises "au hazard" du bot , donc j'ai supprimé tout les obstacles :mrgreen: comme on en a pas besoin (on veut pas se deplacer la)

j'ai dessiné en vert le path entre le monstre en une des 3 positions du perso , on voit que y'a pas de los=false (jaune) sur ce path donc c'est touchable (pareil pour l'autre bleu clair) , par contre pour le bleu foncé (j'ai pas dessiné le path mais une ligne droite du rouge au bleu foncé est facile a imaginer) la il y aurais une case jaune dans le path donc intouchable
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#6
Okk, merci toons j'ai compris j'applique sa ce soir ;)
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#7
L'algorithme n'est pas très compliqué, pour savoir si une cellule est visible depuis une autre il suffit de tracer une ligne entre les 2, si il y a une cellule bloquante sur la ligne ou à une distance sqrt(2) (à adapter c'est pas exactement ça sur dofus) de la ligne alors la cellule n'est pas visible.
 
Haut Bas