La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 16:33:50
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Enki Légende vivante Messages: 432 |
Bonsoir !
Depuis un certains temps, je travaille sur des vaisseaux spatiaux. J'ai réussi à faire en sorte que les vaisseaux puissent tirer tout en se déplaçant, le tout à une vitesse respectable de sorte que nwn ressemble à un shoot ! Ou presque ... J'ai facilement réussi à limiter la distance de tir entre chaque vaisseau, > donc on ne peut pas tirer sur un vaisseau trop éloigné, mais ce que je n'arrive pas à faire pour le moment, c'est de faire rater le tir si le vaisseau n'est pas en face, ou du moins n'a pas un angle de tir correct pour avoir sa cible. Semcatala et Anthraxcite semblent être des experts dans les fonctions de vector et d'angle. Ils ne sont sûrement pas les seuls ^^ ( habile flatterie pour demander un coup de pouce et en même temps appels à tous ceux qui souhateraient relever un défi ) Donc plus clairement, j'aimerai savoir s'il y a, à votre avis, un moyen de tester si la cible est plus ou moins en face du joueur, sachant que LineOfSightObject(); ne semble pas marcher ( cette fonction ferait-elle appel à la tête du modèle ? ou bien n'a-t-elle pour objet que de vérifier si aucun mur n'est en travers de deux créatures ? ) Voilà, merci par avance ! Dernière édition par Enki le 31/05/2006 13:40:40; édité 1 fois
|
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Je ne suis pas un expert , mais maintenant je parviens a prendre le joueur comme référentiel au lieu du décor pour positionner un effet ou un objet !
Et coté script , je pense que Anthrawcite maitrise bien mieux que moi ! Là je pars au taf , dés que j'ai un moment ce soir je regarde ça !: Et a ce propose , je posterais une question a propos de la " direction " et de la " camera " .... ! Ca pourrait interesser du monde , qui ait ...? _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Bon j'ai 5 minutes donc je poste ....
Enki> En fait sache qu'il y a en permanence un vecteur invisible devant ton joueur. Ce vecteur posséde ces caractéristiques : Son intensité vaut " 1 " , et sa direction est toujours celle face a ton avatar , quand a sa " hauteur " , axe Z , c'est celle de l'avatar. L'astuce pour savoir si un objet est en face ou pas de ton avatar consiste a mesurer la distance entre ce vecteur devant ton avatar et l'objet en question. Perso , je serais d'avis de déterminer la " location " du vecteur et la " location " de l'objet pour pouvoir déterminer la distance qui les sépare. Il faudra aussi comparer leurs angles pour savoir si les 2 objets se font face ou pas. _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Salut Semcatala !
Merci pour ces réponses rapides ! Par contre, je n'ai pas tout compris ^^ Citation : Son intensité vaut " 1 " Qu'est ce que l'intensité d'un vecteur ?
Citation : L'astuce pour savoir si un objet est en face ou pas de ton avatar consiste a mesurer la distance entre ce vecteur devant ton avatar et l'objet en question.
Je n'ai pas compris en quoi la distance entre le vecteur du PJ ( quels points du vecteur d'ailleurs ? ) et l'objet cible permet de dire que la cible est en face ?
Ensuite, je viens d'avoir une idée, peux tu me dire si cela te semble possible ? ( et comme il est question de vecteur aussi ^^). J'ai envisagé la question sous un autre angle : Il y a une fonction : NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
et là dedans, plusieurs formes possibles : SHAPE_CONE SHAPE_CUBE SHAPE_SPELLCONE SHAPE_SPELLCYLINDER SHAPE_SPHERE Ne serait il pas possible de créer avec cette fonction un cone d'une largeur et d'une longueur particulière ? Puis de tester via une boucle si la cible est l'un des objets de ce cone ? J'essaye d'explorer toutes les directions, qu'en penses-tu ? Si d'autres personnes ont des idées, n'hésitez pas à les proposer ! |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Si je rapelle bien cette fonction permet de faire déflier les objets présents dans un "volume" donné de forme sphérique , cubique , cônique ou cylindrique.
Je doute que ca puisse nous aider ... _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Anthraxcite Légende vivante Messages: 372 Localisation: Belgique |
Je peux me tromper mais je pense que tu dois faire la différence entre les 2 vecteurs(perso - cible) transformer ce vecteur en angle(VectorToAngle) puis comparer cet angle à celui du perso. Fais des affichage toutes les 6 secondes en te déplaçant et en tournant sur toi-même pour voir.
|
Revenir en haut | |
Macadam Grand Chevalier Messages: 132 |
pour les shape à part le cube de memoire, ils sont plus ou moins bugués et j'ai donc préféré travailler avec des vecteurs egalement moi perso.
j'ai un peu pris du recul là donc je me rappelle plus trop mais peut être que les fctions que j'avais posté il y a un moment peuvent te servir meme si je sais plsu trop ou elles sont |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Citation : Qu'est ce que l'intensité d'un vecteur ?
L'intensité c'est la " longueur " du vecteur.
Par exemple si X = 3 , Y = 4 , alors I = racinede(X²+Y²)= 5 =racinede(9+16) _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
PetitPrince Super-Mouton Messages: 2043 Localisation: Asteroïde B-612 actuellement crashé en Suisse |
Je dirais même plus, la norme.
_________________ b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks) Securom, ça suxe |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonsoir !
Merci pour toutes ces réponses et précisions ! Citation : Si je rapelle bien cette fonction permet de faire déflier les objets présents dans un "volume" donné de forme sphérique , cubique , cônique ou cylindrique.
En fait, bon tu ne pouvais pas le savoir, mais mon système de vaisseaux est basé sur deux dons.
Je doute que ca puisse nous aider ... Le premier enregistre une cible en local objet pour le joueur, et le second permet de tirer, c'est là que doivent être fait les tests de distance et d'angle de tir. Mon idée avec les " GetFirstObjectInShape(); " était de créer une forme conique partant du PJ, et de tester via un script si l'objet local "cible" était parmi l'un de ces objets, et le cas échéant, de lancer l'effet visuel et les dégats, etc ... Mais en fait, comme l'a souligné Macadam, ces fonctions semblent un peu buggées ou ne pas avoir le comportement attendu en tout cas. Je vais essayé de mettre en pratique les conseils d'Anthraxcite. Un petit schéma explicatif, ( je me sens l'âme d'un artiste en ce moment ! ce doit être mes fréquentations ^^ ) T = le vaisseau du joueur : un Tie-Fighter X = le vaisseau cible : un X-Wing * = Les étoiles Citation : Là, le joueur peut tirer : *************.*******.************* **************.*X***.************** ***************.***.*************** ****************.*.**************** *****************T**************** Là il ne peut pas : *************.*******.************* **********X***.*****.************** ***************.***.*************** ****************.*.**************** *****************T**************** |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Salut
Je veux pas cassé la petite ambiance des angles, mais pourquoi ne pas utilisé ceci : NWScript :
GetDistanceBetween Ca serait plus simple non? _________________ [http] |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Salut
Je veux pas cassé la petite ambiance des angles, mais pourquoi ne pas utilisé ceci : NWScript :
GetDistanceBetween Ca serait plus simple non? _________________ [http] |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
C'est très simple, avec seulement GetDistanceBetween comment prévoir un angle ?
L'idée est d'avoir un champs de "vision" possible pour le tire, sinon on le rate. Je crois que si on part sur l'idée d'Anthra il y a moyen de le faire en rajoutant un test de distance (ton GetDistanceBetween) et un test de facing peut être (tout depend de comment sont géré les angles). Sinon le plus simple shape avec un cone, et il ne me semblait pas qu'il était buggé celui là (inconvéniant -> moins flexible). _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
Citation : Ca serait plus simple non? Black Knight> En effet ce serais plus simple , mais est ce que ta solution parvient a résoudre le problême posé ?
Question qui est : " Y a il un moyen de savoir si la cible est en face du joueur ? " En utilisant ta solution , en effet c'est plus simple , mais le résultat est une " distance " , qui finalement se résume a une sphére autour du joueur , on n'a aucune notion d'orientation , on ne sait pas si la cible est devant , derriére , en haut ou en bas , on sait juste qu'elle est a une certaine " distance " . Il faut nécéssairement comparer la distance qui les sépare , ET l'orientation entre les 2 objets pour résoudre le problême. _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Je vais essayé ce soir avec un cone, j'avais utilisé le spell_cone, sans succès.
J'ai pas eu le temps encore de tester l'idée d'Anthraxcite, je vais tenter de le faire ce soir aussi, si j'ai le temps, dans tous les cas, je vous tiendrai au courrant. Sinon, si l'un d'entre vous à une idée sur la façon de tester la différence dont parle Anthraxcite, je cite : Citation : Je peux me tromper mais je pense que tu dois faire la différence entre les 2 vecteurs(perso - cible) transformer ce vecteur en angle(VectorToAngle) puis comparer cet angle à celui du perso. Il faut que l'angle "calculé" soit le même que celui du perso, ou au contraire qu'il ne soit PAS le même ?
Merci en tout cas. P.S. : il est évident que j'utilise le GetDistanceBetween(); pour tester la distance entre les deux vaisseaux. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Anthra parle de deux GetPosition (opc et cible) transformé en angle.
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
BenGorre Légende vivante Messages: 301 |
J'ai une petite idée qui me vient de vieux cours de maths de ya longtemps sur les vecteurs:
quand on a un vecteur on a son origine, sa direction et sa longeur donc on devrait pouvoir avoir les coordonnées de la "pointe" du vecteur, non? Si oui voilà mon idée: Recuperer le vecteur du joueur(tireur) le copier au meme endroit en mettant en longueur la distance entre le tireur et sa cible, ensuite récuperer la coordonnée de la "pointe" de ce deuxieme vecteur et comparer ces coordonnées avec celles de la position de la cible (si pas trop loin on peu tirer) et pour l'effet de cône quand tu compare les deux ensembles de coordonnées tu accepte plus d'ecart si la distance entre tireur et cible est plus grande. Allez moi aussi je me sens l'ame d'un artiste NWScript :
___________X___ _________^_____ _________|_____ _________|_____ _________T_____ voila bon sans le petit déssin c'etait pareil mais bon Voilà j'attend l'avis des experts, j'ai fait ca avec une vision de matheu plus que de scripteur. _________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Vite fait (testé quand même) :
NWScript :
void main() { object oCible = GetObjectByTag("CIBLE"); object oTireur = GetFirstPC(); vector vTireur = GetPosition(oTireur); vector vCible = GetPosition(oCible); vector vDiff = vCible-vTireur; float fAngle = VectorToAngle(vDiff) - GetFacing(oTireur); if (fabs(fAngle)<=10.0) SendMessageToPC(oTireur,"OK"); else SendMessageToPC(oTireur,"pas OK"); } Il ne te reste qu'à définir tireur et cible comme tu veux, et a ajuster la fenêtre de tir (là c'est +/- 10°) |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonjour !
Tout d'abord merci à tous pour cette discussion forte intéressante, et pour tous vos conseils ! Anthraxcite avait le début de la solution, et Sith Vicius ( avec un pseudo pareil, il était prédisposé à m'aider semble-t-il ! ^^ ) l'a habilement complété et à même eu la gentillesse de faire un script tout prêt ---> un grand merci ! Cela fonctionne parfaitement, c'était l'ingrédient qui me manquait pour que mon système de vaisseaux se comporte parfaitement comme un shoot'em up ! Je me permets simplement de suggérer à ceux que cela intéresse, qu'un tel système pourrait être adapté à des modules d'heroïc-fantasy sans grosse difficulté. Si j'avais à faire un mod de ce type, je ferai des archers à cheval utilisant la tactique de la flèche Parthe, ou bien simplement des chars avec un aurige et un tireur. Enfin, on peut imaginer plein de choses ... [edit] Ou plus simplement, je viens d'y penser à l'instant, le script ci-dessus est idéal pour des armes de siège ! ( déplaçables ou pas ) A bientôt ! |
Revenir en haut | |
Anthraxcite Légende vivante Messages: 372 Localisation: Belgique |
Alors j'avais pioché juste, je suis tombé sur un souvenir correct des vecteurs, faudra peut-etre que je fasse une doc avec des schémas histoire d'expliquer mieux tout ça.
Sinon je crois savoir ce que Bengorre veut dire. Je pense que si on devait prendre le problème par ce bout là(distance et non angle), on ferait intervenir des radians puisque la distance au bout et donc à la corde dépendrait du rayon(sinon l'angle de tir autorisé serait bcp plus grand à une distance proche). |
Revenir en haut | |
BenGorre Légende vivante Messages: 301 |
Alors maintenant j'aimerais savoir si on peut en effet récuperer la valeur des coordonnées de la pointe du vecteur et comment.
NWScript :
x------>y vecteur ayant pour origine X, comment recuperer les coordonnées de Y? Merci Antraxcite d'avoir prêter attention à ce que j'ai dit. _________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
BenGorre> facile , si tu as un vecteur qui se présente comme ça :
NWScript :
vector mon_vecteur ; tu peux récupérer les coordonnées comme ça : NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
C'est aussi simple que ça ! Par contre fais attention , " l'origine " des valeurs que tu obtiendra , sera toujours aux coordonnées (0,0;0,0;0,0) de la zone. _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Si t'as les coordonnées de x, c'est une somme simple il me semble non ?
x (xx,yx,zx) vecteur (xv,yv,zv) y = (xx+xv,yx+yv,zx+zv) En fait si je te comprend bien, tu voudrais comparer la position de la cible par rapport à la droite qui passe par la position du tireur selon son orientation ? Il me semble que ça revient au même en définitive, puisqu'en définissant un angle comme fenètre de tir, on a bien un cone virtuel qui va en s'élargissant. Mais avec les outils de NWN, ça me semble plus compliqué de calculer en distance et en projections. Alors qu'avec ce qu'Anthra a proposé et que j'ai mis en script, on a l'angle, et avec VectorMagnitude(vDiff) (qui revient à un GetDistanceBetweenObjects()), on a en plus la distance à la cible, donc tous les paramètres pour savoir si le tir est possible. Enfin j'ai ptet pas tout compris non plus, la géométris c'pas mon truc. |
Revenir en haut | |
BenGorre Légende vivante Messages: 301 |
Euh je sais pas si j'ai compris les vecteur^^ quelqu'un pourrait me donner une explication breve de ce qu'est vraiment un vecteur dans NWN?
_________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | |
Semcatala Grand Sage du Conseil Messages: 951 |
BenGorre>
Un vecteur est un vecteur , et reste la même chose dans nwn ou dans un cours de math , a savoir qu'il sert a permettre de pouvoir repérer un point dans ton référentiel ( généralement 2D ou 3D ) grace a des coordonnées ! C'est a dire qu'il à autant de coordonnées qu'il y a de plans dans le référentiel ou tu te trouve. Dans nwn on travaille sur 3 plans , longueur , largeur et hauteur , axes X , Y , et Z . Les vecteurs te servent en fait a pouvoir positionner des effets visuels ou ce que tu veux , en ne prenant pas forcément comme origine le décor de la zone , mais un joueur. Par exemple , si tu veux faire apparaite un effet magique aux coordonnées (10,10,5) de la zone , rien de difficile , t'as juste a utiliser les coordonnées de maniére brute. Mais par exemple si tu veux faire apparaite un effet a droite devant un joueur , alors il te faudra manipuler les vecteurs pour pouvoir trouver le bon " point " dans l'espace quelque soit la position du joueur. C'est ça et ça sert a ça les vecteurs ! _________________ " La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG " La véritable école du Commandement est la culture générale. " CdG " Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F " La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG " La fin de l'espoir est le commencement de la mort. " CdG |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum