Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Changements pour le fichier NWScript.h

Par gui25 le 16/7/2001 à 16:31:00 (#26377)

Je me suis permi de modifier le fichier en question afin de donner plus de possibilitées pour la simulation des scripts.


/*
* NWScript.h holds C declarations that help make programs appear more NWScript-like.
* This file evolves as the scripting course progresses.
*/

// There is no native string type per se in C
typedef char* string;
// Le type object est un indentifiant d'un objet
typedef int object;
// Le type vector contient les donnees x, y, z d'un point
typedef struct tagVector {
float x;
float y;
float z;
} vector;
// Le type location sert a definir l'emplacement d'un objet
// je n'ai pas encore compris à quoi sert le fFacing
typedef struct tagLocation {
object objArea;
vector vecPosition;
float fFacing;
} location;

// Define implementations of the log (and possibly text window) printing functions
// from NWScript. In our case, we just output the values to the command line (DOS window).
void PrintString(string value)
{
printf("%s", value);
}

void PrintInteger(int value)
{
printf("%i", value);
}

void PrintFloat(float value)
{
printf("%f", value);
}

// Sert à definir un vector
vector Vector(float x, float y, float z)
{
vector vVector;
vVector.x = x;
vVector.y = y;
vVector.z = z;

return vVector;
}

// Sert à definir un location
location Location(object objArea, vector vecPosition, float fFacing)
{
location locLocation;
locLocation.objArea = objArea;
locLocation.vecPosition = vecPosition;
locLocation.fFacing = fFacing;

return locLocation;
}


Je n'en suis qu'au début et il manque encore beaucoup de fonctions à implémenter. Pour le moment, il y a les types vector et location que j'ai ajouté dans ce fichier ainsi que les fonctions les définissants.
J'attend vos suggestions et vos tests :)

Par Darkmore le druide le 16/7/2001 à 16:59:00 (#26378)

En tout cas pour un premier post c'est impressionnant :D

Serait il possible que le fFacing soit la direction dans laquelle l'objet le perso ou même la texture est orienté(e) .. ceci réparti sur 360° :confused:
Je pose cette hypothèse parce que les éditeurs du moteur 3D de Quake utilisaient cet "argument" en plus des coordonnées classiques !

Par Paoh le 16/7/2001 à 17:09:00 (#26379)

C'est une bonne idée. Je suppose que tu t'es inspiré de la Reference Sheet ;)

Pour le type location, je n'ai compris non plus l'utilité du float Facing (revêtement?) bien qu'il existe deux fonctions servant à le récupérer :
- GetFacing
- GetFacingfromlocation

et trois pour le paramètrer :
- SetCameraFacing
- SetFacingPoint
- SetFacing (object, DIRECTION_x)


Vu que cette structure sert à définir un <U>lieu</U> je pense que cela bel et bien correspondre à la texture mais bon... :D

A location has three components, the object ID of the area, a vector representing the position within that area, and a floating
point number representing the facing.


...un texture à virgule...hum...
l'angle de direction de l'objet, c'est plus probable finalement :D

[ 16 juillet 2001: Message édité par : Paoh ]

Par Darkmore le druide le 16/7/2001 à 17:20:00 (#26380)

D'autant plus que Facing veut également dire "faire face à" ;)

Par gui25 le 16/7/2001 à 18:15:00 (#26381)

Ce doit surement être ca.

J'ai oublié de préciser mais je ne suis pas sûr, dans la structure location, des noms des éléments.

Petite correction pour la fonction Vector :

vector Vector(float x, float y, float z = 0.0f)
{
vector vVector;
vVector.x = x;
vVector.y = y;
vVector.z = z;

return vVector;
}


Je cherche aussi un endroit pour y stocker le fichier modifié sur le net car il va vite faire un certaine taille. J'attend vos propositions.
C'est tout pour le moment.

Par Darkmore le druide le 16/7/2001 à 19:47:00 (#26382)

Je ne suis pas sur de comprendre le fonctionnement de ta fonction Vector .. tu déclare que la troisième entrée de la fonction (z)est un float ...d'accord .. mais tu lui fixes la valeur 0 ??

D'un point de vue programmation pure je ne vois pas l'intéret d'utiliser cette variable... tu auras toujours un vecteur dont la troisième donnée est 0 ... donc pourquoi ne pas l'éliminer ???

Et pourquoi se débarraser de la troisième dimension, en fixant z a zero tu "écrase" tes coordonées dans le plan xy.... donc tu donne une direction/angle autour de l'origine et on retombe sur le fFacing de tout à l'heures ...
je suis plutot :confused: ???

Et pour ce qui est de stocker le fichier sur le net tu devrais pas avoir de problème ... il me semble qu'un fichier de donnée de type texte zippé sa fait pas lourd en poid ???même un gros fichier non ???
Donc une simple page perso suffira !
Ou au pire demande a Daynos/Uther de te trouver une place ...

EDIT : Sur le fFacing --> trouvé sur la reference sheet

location locNew = Location(oDestArea, vDest, fFacing); // East is at 0.0 radians.


Si Est = 0 rad ou peut déduire que
Nord = Pi/2 rad
Ouest = Pi rad
Sud = Pi + Pi/2 rad

fFacing serait bien un angle ...
Mais c'est encore une supposition :confused:

[ 16 juillet 2001: Message édité par : DaRKmore Le Druide ]

Par gui25 le 16/7/2001 à 20:34:00 (#26383)

Dans la fonction, mettre float z = 0 veut dire que si l'on ne définit pas celui ci, sa valeur sera de 0. J'ai mis ceci car dans le reference sheet il y avait un programme qui ne renseignait pas le z.
On pourrait donc utiliser la fonction comme ceci : Vector(fX, fY); et bien sûr, on peut mettre aussi Vector(fX, fY, fZ);

Je veux bien zipper mon fichier mais je n'ai aucun site perso pour l'héberger et je ne sais pas si je vais en créer un pour cette tentative de transcrire toutes les fonctions de NWScript pour le C (afin de tester les scripts en attendant le jeu :)). Il y a beaucoup de fonctions que je ne pourrais sans doute pas réussire à transcrire car elles ont presque toutes peu ou prou de documentation.
Donc si quelqu'un veut héberger mon fichier, qu'il me prévienne.

Pour le fFacing, je pense que tu as tout bon. Je n'avais pas remarqué cette ligne (je ne l'ai peut être pas, des privilegiés ????) :p

Si quelqu'un trouve exactement ce que contient le type event car je n'ai pas trop compris. D'après moi, c'est juste un pointeur sur un événement que l'on a activé.

Par Uther Pendragon le 16/7/2001 à 20:55:00 (#26384)

Débat lancé par gaeriel:
Je cherche aussi un endroit pour y stocker le fichier modifié sur le net car il va vite faire un certaine taille. J'attend vos propositions.
C'est tout pour le moment.


Je peux aisément héberger ce fichier sur les serveurs JeuxOnline. Il suffit de me l'envoyer ( uther@www.jeuxonline.info ). :)

Par ailleurs, il me semble aussi qu'il pourrait être intéressant de le proposer en téléchargement à tous les programmeurs intéressés avec qql commentaires explicatifs (ce dont je suis incapable aux vues de mes connaissances plus que limitées en tant que programmeur ;)).
Donc, si tu veux rédiger une telle présentation, je pourrais faire une petite page dédiée dans le site. :)
Voilà. Merci pour cette initiative :)

Par gui25 le 16/7/2001 à 21:02:00 (#26385)

J'accepte votre proposition, oh grand webmaster :) mais comme je suis en vacances, je crois qu'il va y avoir beaucoup de changement de version :). Va falloir suivre :p

Bon, je vais essayer de rajouter des constantes et des fonctions le plus vite possible.

Si quelqu'un veux commenter le fichier sur les fonctions, qu'il le fasse, cela va certainement m'aider ou vous aider :)

[ 16 juillet 2001: Message édité par : gaeriel ]

Par Darkmore le druide le 16/7/2001 à 21:15:00 (#26386)

Débat lancé par gaeriel:
J'accepte votre proposition, oh grand webmaster

Tient un nouvel adepte de la secte Utherienne !!! :D :D bienvenue "camarade ;) ;) ;) oui dans notre secte on s'appelle tous comme ça maintenant ;) ;) ;)

Sinon pour la fonction Vector on semble d'accord (ça rime) mais ne vaut il mieux pas utiliser celle à 3 paramètre et fixé la dernière à 0 pour les objets "au sol" lors de l'utilisation de la fonction ... tu peux avoir besoin de positioner un objet en hauteur donc besoin du Z ... ??

Par gui25 le 16/7/2001 à 21:21:00 (#26387)

Dans le reference sheet, il y avait un exemple qui mettait :
vector vVector = Vector(fX, fY);

J'ai mis cela afin de concorder avec le NWScript et non pour faire joli. On peut tout de même utiliser le fonction Vector comme ceci:
vector vVector = Vector(fX, fY, fZ);

et voila ;)

Bon, je crois que je vais bientôt envoyer un mail à uther.

Par Darkmore le druide le 16/7/2001 à 21:50:00 (#26388)

Erm erm...
*sent qu'il commence àa devenir lourd*

Euh Xcuzzeuh ... euh ... mais moi j'ai ça dans ma RS :

A structure of three floats, useful for defining positions and orientation vectors.
To access the components of the vector, you can use the dot operator to get the x, y and z components of the vector.
vector v = Vector(fX, fY, fZ);
:confused: :confused:

Et j'ai downloader la RS ici : http://nwvault.ign.com/dm/scripting/database/NWNScript-RefSheet.zip
Peut être une différence de version ??? :confused: :confused:

Par gui25 le 16/7/2001 à 22:01:00 (#26389)

Regarde à la fin du reference sheet, dans les exemples, et cherche la fonctions Vector.
Tu verras que la fonction est utilisee sans que l'argument z soit defini.

Par Darkmore le druide le 16/7/2001 à 22:15:00 (#26390)

*ça y'est là je vais l'énerver et y vas me détester*

Bah on dirait bien que les deux sont utilisées :eek:

vector Vector(fX, fY [, fZ])

mais ce que je ne comprend pas (note mon ignorance est la seule raison :confused: ) c'est comment savoir laquelle sera utilisé donc laquelle déclarer dans le header ??
Je suis chiant là non ???

Par gui25 le 16/7/2001 à 22:25:00 (#26391)

Tu as juste à mettre un #include <NWScript.h> et puis voila. Après tu utilise la fonction avec 2 ou 3 arguments sans aucune autre déclaration.
C'est pas bien compliqué.

Au fait :mad:, je suis pas énervé :)

Par Darkmore le druide le 16/7/2001 à 22:34:00 (#26392)

Je reformule : il me semble que ta définition de fonction dans le header (avec le z=0 ) bloque l'utilisation de cette fonction sous la forme vector(fX,fY) ... même en déclarant la troisième variable elle sera automatiquement réduite à 0 !!
Donc on ne peut pas utiliser la forme vector(fX,fY,fZ) ??!!??

PS : c'était la dernière ... ;)

[ 16 juillet 2001: Message édité par : DaRKmore Le Druide ]

Par Paoh le 16/7/2001 à 23:29:00 (#26393)

Euh.. j'aimerais intervenir... je pense à un truc (miracle ! :p).

Ce que gaeriel fait, c'est juste déclarer la structure de vector en initialisant un des champs à 0.
C'est clair que le champ z est par défaut à 0, mais n'est-ce pas cette initialisation qui permet d'utiliser vector avec deux paramètres (x et y) au lieu des trois.
On peut facilement imaginer que l'objet a par défaut une altitude à 0...
Ainsi la déclaration de la page 1
vector v = Vector(fX, fY, fZ); // Construct a vector
déclare fX, fY et fZ mais ne donne de valeur qu'à fZ (0).

et celle de la page 5
vector vDest = Vector(vEnter.x, 2.5);
affecte directement vDest.x à vEnter.x, vDest.y à 2.5 et vDest.z est implicitement à 0.

* ferme la visière du casque * :D

Par gui25 le 17/7/2001 à 9:42:00 (#26394)

Je pense que Paoh a bien expliqué.
Dans la fonction, c'est juste la valeur par défaut mais si tu en défini une autre en appelant la fonction avec les 3 éléments, la valeur de z est changée.

Par Darkmore le druide le 17/7/2001 à 11:36:00 (#26395)

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaahhhhh !!
AYé compris :D :D :D :D

Pour moi c'était plus qu'une initialisation c'était imposer une constante .... quel balôt je fais :D :D

[ 17 juillet 2001: Message édité par : DaRKmore Le Druide ]

Par Uther Pendragon le 17/7/2001 à 11:39:00 (#26396)

Pour info, la dernière version modifiée de NWScript.h est en ligne (et librement téléchargeable ;)) à cette adresse : http://nwn.goa.com/script/NWScript_fr_v2.zip

Je vais préparer une petite page explicative, prochainement.
Voilà :)

Par Daynos le 17/7/2001 à 19:08:00 (#26397)

Au fait le fFacing finalement c'est quoi ? L'angle vers lequel le joueur regarde ?

Sinon va falloir que je commence à m'y mettre au NWN Script / C... :D

Par Darkmore le druide le 17/7/2001 à 20:12:00 (#26398)

Débat lancé par Daynos de Nory:
Au fait le fFacing finalement c'est quoi ? L'angle vers lequel le joueur regarde ?

Plus que ça .. il semble que ce soit la direction d'un type object en générale .. donc direction du regard d'un pnj/pj, direction d'orientation d'on objet, direction dans laquelle est appliqué une textue (texture planne parrallèle au fFacing) ect ..


Sinon va falloir que je commence à m'y mettre au NWN Script / C... :D

Ben vue la difficulté de la lesson seven t'as le temps de rattraper ton retard ;) ;)

Par Myvain le 17/7/2001 à 20:50:00 (#26399)

Ca me rassure, il n'y a pas que moi qui suit en retard... :rolleyes:

Au fait Daynos, tu as enfin fini BG2? C'est juste pour savoir si je suis devenu le seul au monde à ne pas l'avoir encore terminé.

Pfff, qu'est ce que le temps passe vite...

Par gui25 le 17/7/2001 à 22:17:00 (#26400)

* A les doigts tout enflés *
Je viens de tapper pratiquement 250 lignes pour définir une partie des constantes du RF (Reference Sheet). J'en suis arrivé jusqu'a la partie des spell (en suivant :)).
La partie spell étant la plus longue, mes doigts vont encore souffrir :(
Ce qu'il faut pas faire pour les ch'tis programmeur en NWScript :)

[ 17 juillet 2001: Message édité par : gaeriel ]

Par Paoh le 18/7/2001 à 9:12:00 (#26401)

Débat lancé par Myvain:
C'est juste pour savoir si je suis devenu le seul au monde à ne pas l'avoir encore terminé.


OUUUAAAAIS :) :) :), je suis pas le seul à ne pas avoir encore fini ce jeu !!!!
* danse la gigue *
J'en avait marre d'entendre que des "je l'ai fini 15 fois ou 54 fois avec un perso, etc..." ;)

Débat lancé par gaeriel:
* A les doigts tout enflés *
Je viens de tapper pratiquement 250 lignes pour définir une partie des constantes du RF (Reference Sheet). J'en suis arrivé jusqu'a la partie des spell (en suivant ).
La partie spell étant la plus longue, mes doigts vont encore souffrir
Ce qu'il faut pas faire pour les ch'tis programmeur en NWScript


Fait attention, gaeriel, ou tu risques de rentrer avec Uther dans le Panthéon des Divinités NWScriptesques à force de bosser comme ça !!
Sinon, je veux bien, dans la mesure de mes capacités et certitudes, aider à commenter les fonctions, mais un peu plus tard :D
J'ai pô de vraies vacances moa :( :p

Par gui25 le 18/7/2001 à 9:22:00 (#26402)

Oui mais comme j'ai rien d'autre à faire :)
Si tu veux traduire, aucun probleme car il y a des parties que je n'arrive pas à traduire :o

Par Uther Pendragon le 18/7/2001 à 12:17:00 (#26403)

Les dernières mises à jour sont aussi disponible (format *.zip) : la version 3.
Voilà :)

Par Darkmore le druide le 18/7/2001 à 12:41:00 (#26404)

Débat lancé par gaeriel:
Oui mais comme j'ai rien d'autre à faire :)
Si tu veux traduire, aucun probleme car il y a des parties que je n'arrive pas à traduire :o


Si il te faut un coup de main (*paf*) pour la traduction je peux t'aider ......
A condition que tu ne me confies pas des trucs avec de fZ dedans :D :D ;) ;)

Par gui25 le 18/7/2001 à 14:11:00 (#26405)

Et zou, 350 lignes en plus :)
Je viens de poster une nouvelle version. Plus qu'a attendre qu'uther la mette en ligne :)
Si quelqu'un a des remarques à faire ou des corrections, qu'il le dise.

Par Uther Pendragon le 18/7/2001 à 14:27:00 (#26406)

*Uther sirote son café et regardant la pluie tomber...*

... Et upload la version 3.1...

*Regarde dubitativement la leçon 7 à traduire*
Dans 10 minutes, je me lance... peut être... ;)

[ 18 juillet 2001: Message édité par : Uther Pendragon ]

Par gui25 le 19/7/2001 à 14:24:00 (#26407)

Si vous voulez que j'ajoute des fonctions en priorité, vous n'avez qu'a me demander et je vais essayer de faire ce que je peux.

Par Daynos le 19/7/2001 à 23:09:00 (#26408)

Débat lancé par Myvain:
Ca me rassure, il n'y a pas que moi qui suit en retard... :rolleyes:

Au fait Daynos, tu as enfin fini BG2? C'est juste pour savoir si je suis devenu le seul au monde à ne pas l'avoir encore terminé.

Pfff, qu'est ce que le temps passe vite...


Ma dernière save date d'avril 2001. D'ailleurs c'est zarb ça, j'ai l'impression qu'il me manque des saves...
Oups, j'espère que j'ai pas fait d'erreur de manip, je serais vert s'il me fallait tout recommencer à partir du début du chap 4 !!! (ceci dit je n'en était qu'à la fin du chap 4... à la fin de l'asile, je me suis fait abordé pendant mon voyage en bâteau...).

Edit : Ouf je respire, j'ai retrouvé une save du 13 mai 2001 juste avant de prendre le bateau... C'est mon avant dernière save. J'ai pas rejoué depuis. Pas le temps.

Mais tout ceci est Hors sujet sur ce forum...

[ 19 juillet 2001: Message édité par : Daynos de Nory ]

Par Daynos le 19/7/2001 à 23:21:00 (#26409)

Débat lancé par Uther Pendragon:
*Uther sirote son café et regardant la pluie tomber...*

... Et upload la version 3.1...

*Regarde dubitativement la leçon 7 à traduire*
Dans 10 minutes, je me lance... peut être... ;)

[ 18 juillet 2001: Message édité par : Uther Pendragon ]

* 18h30 : Daynos rentre de stage, après avoir scripter en ActionScript une anim Flash 5 pendant 8 heures...
... regarde le glossaire et se dit qu'il faut rajouter des mots de passes User et gérer leurs autorisations...
18:55 ... regarde le glossaire et se dit qu'il faut rajouter des mots de passes User et gérer leurs autorisations...
19:00 ... regarde le glossaire et se dit qu'il faut rajouter des mots de passes User et gérer leurs autorisations...
19:05 ... tombe sur le caméleon sur M6 et décide de se changer les idées...
23:25 ... se dit que ce soir c'est un peu trop tard... verra demain s'il est plus motivé :D :rolleyes:

Par gui25 le 23/7/2001 à 14:10:00 (#26410)

Le script BattleCry marche maintenant.
Enfin, la version que j'ai corrigé car il y avait des erreurs dans celui de NWVault

#include <stdio.h>
#include <NWScript.h>

void main()
{
int nCount;
object oTarget= GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
if (GetIsObjectValid(oTarget))
{
if (GetDistanceToObject(oTarget) < 40.0f && GetIsDead(oTarget)==FALSE)
{
if (GetLocalInt(OBJECT_SELF, "FIREBALL") == 0)
{
ActionCastSpellAtObject(SPELL_FIREBALL, oTarget);
SetLocalInt(OBJECT_SELF, "FIREBALL", 1);
}
else if (GetLocalInt(OBJECT_SELF, "WALK") == 0 )
{
ActionMoveToLocation( GetLocalLocation(OBJECT_SELF, "ShamanStart"));
SetLocalInt(OBJECT_SELF, "WALK", 1);
}
else if (GetLocalInt(OBJECT_SELF, "MAGIC MISSILE") < 3)
{
ActionCastSpellAtObject (SPELL_MAGIC_MISSILE, oTarget);
nCount = GetLocalInt(OBJECT_SELF, "MAGIC_MISSILE");
nCount++;
SetLocalInt(OBJECT_SELF, "MAGIC_MISSILE", nCount);
}
else
{
ActionAttack(oTarget);
}
BattleCry("goblin_bc1_tmp","goblin_bc2_tmp");
}
}
}


Attendez un peu qu'uther sorte la nouvelle version :)

Par Seigneur Astarosh le 24/7/2001 à 20:41:00 (#26411)

scuser moa me je suis un ptit nouveau ds ce monde de modules et de scripts bizzar et .... J'COMPREND RIEN!!!! :( :( :( :( pourriez vous eclairer ma lanterne nobles gens :confused: (Ki a dit newb'????)

Par Darkmore le druide le 24/7/2001 à 21:24:00 (#26412)

Commence par visiter le site d'Uther : http://nwn.jeuxonline.info/
et surtout les tutoriaux de scripting : http://nwn.jeuxonline.info/t_tutoriaux.shtml

JOL Archives 1.0.1
@ JOL / JeuxOnLine