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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Tuts de scripts avancés

Par Azrael07 le 26/7/2002 à 12:50:06 (#1862262)

Salut, alors maintant que vous avez lu les cours de Lumina, vous etes plus des quiches, et on vas pouvoir se lancer dans des notions un peu plus complexes

Bon le titre ca veut pas dire que c particulièrement complexe ni que je suis un pro du script, mais c en opposition aux cours pour les quiches que propose Lumina

Ce tut va porter sur les boucles, une notion fondamentales pour l'élaboration de scripts un peu plus complexe.


Il y a trois boucles vraiment importantes en prog

le "while"

ca s'ecrit :

while(condition)
{
//Code
};

Ca veut dire que tant que la condition est respectée, le code entre crochets recommence

exemple :

while (oObject != OBJECT_INVALID)
{
DestroyObject(oObject);
oObject (GetNextObjectInArea(oArea));
};

Cette fonction a pour effet anarchique de detruire tout les objet dans l'area, puisqu'elle effectue la boucle tant que oObjet n'est pas null, c a dire tant qu'il y a un objet dans l'area.
Il faut savoir que si la condition n'est pas respectée, le code n'est pas rééxécuté, et l'éxecution va directement a la fin de la boucle

while (i < 10)
{
i++;
};

la valeur de i sera 9 et non pas 10



Puis on a le for

for(variable, condition, opération)
{
//Code
};


Une boucle for ecrit sous forme de while donnerait ca :

variable;
while (condition)
{
opération;
//Code
};


Le for s'utilise souvent comme ca :

for(int i = 0; i < valeurmax; i++)
{
//Code où on utilise i
};

Et voila, chaque fois que la boucle sera utilisée, et ben i augmentera d'un, jusqu'a ce que i soit égal a valeurmax



Bon vous etes grand je met pas d'exemple


Pour finir, la boucle do, qui est en fait très proche de while

do {
//Code
} while (condition);


je vais pas m'attarder dessus c comme la boucle while sauf que la condition est vérifiée à la fin plutot qu'au debut


Un petit truc sur les boucles sans fin :

si vous écrivez

while (1)

ca veut dire en gros while(1 == TRUE) donc while(1 != 0)

si vous voyez un exemple où 1 est différent de zero, je crois que vous allez remetre en question les fondements des lois mathématiques

ben oui 1 != 0 c toujours vrai

On obtient donc une boucle sans fin, l'execution de la boucle se fera jusqu'a ce qu'on la stoppe manuellement(par un return par exemple)

Sa peut être très pratique parfois mais prenez garde !!!

Il arrive parfois aussi de faire des boucles sans fin par inadvertance. Il faut faire gaffe pasque si un de vos script est buggé par une boucle sans fin, le compilateur ne vera rien et vous risquez de faire planter le serveur


Voila pour les boucle
Dans la pratique, on se sert des boucle pour passer en revue un ensemble de variables, pour leurs faire subir(les pauvres) divers opération.
L'exemple du DestroyAllObject, meme si c un exemple est caractéristique de l'utilisation des boucles

Voila pour mon premier tut je ne pense pas qu'il soit à la hauteur de ceux de Lumina mais ca devrait sufir aux gens à peut près motivés.

Bonne chance et n'hésitez pas a poser des questions si vous comprenez pas. Moi je part en vacance mais y'a plein d'autres personnes pret a vous répondre

Ah, un dernier truc... Ce post ne m'est pas reservé, mettez y tout les tuts que vous voulez, mais please ne mettez QUE de tuts...
Et pis si un op voulez bien le faire passer en permanant...

Par Azrael07 le 26/7/2002 à 14:19:29 (#1862883)

Tadaaaa !!!

Pof un nouveau tut à la suite du premier

La ca va porter sur la creation des fonction...

Attention : pour l'assimilation de ce tut vous devrez d'abord comprendre et maitriser tout les cours de script pur les quiches de Lumina

Je vais tout de suite présiser un truc, la creation de fontion est interessante pour principalement deux choses :
1. Eviter des répétitions dans un script en généralisant un code redondant.
2. Permettre l'utilisation d'un script sous la forme d'une fonction, et ainsi pouvoir l'utiliser comme n'importe quel fonction de neverwinter

Tout dabord je trouve necessaire de clarifié le fait que dans le script editor, tout est fonction.
je m'explique : a chaque fois que vous tappez qlc avec un nom et des parenteses, si c pas une structure de controle (bloc if, while, for, ect), c une fonction

la syntaxe toute bète de la fonction, pompé sur mon bouquin de c++, est :

TypeDeRetour NomDeLaFonction(Type Argument1, Type Argument2, ...)
{
//Code de la fonction
}

Pour l'instant c super complexe mais partez pas je vais vous expliquer...

TypeDeRetour, c'est la variable que doit retourner la fonction une fois terminée.
ca peut etre tout type de variable, int, string, float, object, location, ect...
ca peut aussi ne rien être, au quel cas on va mettre void (vide).


NomDeLaFonction, c tout simplement bah euh le nom de la fonction tient, c a vous de l'inventer

Type Argument : ca c une définition de variable. Type c le type de variable, et Argument1 c le nom de la variable. Cette variable sera définie lors de l'appel de la fonction, et pourra être utilisée au sein de cette fct
Une fontion peut attendre autant d'arguments que voulus


Pour clarifier tout ca on va prendre la fonction de neverwinter GetLocation

Si on la selectionne dans le script editor on voit sa syntaxe :

location GetLocation(object oObject)

ca veut dire que la fonction attend pour argument un objet, et renvoie une location

dans la pratique, on utilise cette fonction en initialisant une location, par exemple

location lLocation = GetLocation(oObject);

et on obtient une location

Maintenant, pour créer un fonction soit même, il faut faire sa propre syntaxe. Le mieux c de présenter tout ca par un exemple
le problème c que j'ai pas d'idées...

Tient par exemple une fonction qui donne de l'XP a tout les joueurs, comme ca en plus elle sera récuperable pasqu'elle est vraiment pratique

void GiveXPToAllPlayers(int nXpAmount)
{
object oPC;
object oLastPC = GetLastPCRested();
int i = 0;
do {
oPC = GetNextPC();
GiveXPToCreature(oPC, nXpAmount);

} while(oPC != GetNextPC);

return;
}

Maintent les explications :

1.Dans cet exemple on n'attend pas de valeur de retour, donc notre fonction va être de type void.

2.int nXpAmount représente la quantité d'XP que l'on veut donner a tout les joueurs.

3.La boucle do {} while permet de passer en revue les joueurs jusqu'au dernier

4.On initialise oPC avec le PC suivant et on lui donne l'experience grace a la fct suivante. Comme on peut le voir, la valeur nXpAmount est définie est récupérée dans les arguments de notre fonction

5.Pour finir on vérifie si le PC actuel n'est pas le dernier, au quel cas on arrete tout.

6.Le return indique la fin de la fonction. Il est facultatif dans une fonction de type void, mais obligatoire dans les autres cas où il est utilisé pour renvoyé la valeur voulue. Par exemple, la dernière ligne du code source de GetLocation doit être un truc du genre return lLocation;


A partir de la l'utilisation de la fonction se fait comme les originales, dans notre code on peut rentrer GiveXPToAllPlayer(200), et pof, 200 d'XP pour tout le monde.

L'utilisation des fonction requiert quand même une restriction, il faut placer le corp de la fonction (le code) avant la fonction qui appelle celle ci.

Un petit truc en passant : avez vous remarqué le truc dans lequel vous tapez votre code ? main() .
Bingo, c'est une fonction. Celle si est en fait automatiquement appelée quand la condition est remplie (OnSpawn, OnAttack, ect)

Pour finir, je vais parler en vitesse de la surcharge d'opérateurs

si vous écrivez une fonction dans ce genre la :

void MaFonction(int Integer, int Surcharge = 1)


vous pouvez l'appeler de deux manière :

MaFonction(UneVariable, UneAutreVariable);//ca c'est comme normalement

MaFonction(UneVariable);// Dans ce cas la, l'opérateur Surcharge prendra automatiquement la valeur 1

Le système de surcharge d'opérateur permet de créer les valeurs par default les plus courantes, mais qui peuvent être changés en cas de besoin

Par exemple, la fonction

void ActionMoveToObject(object oObject, int bRun = FALSE)

ActionMoveToObject(oMonObjet, TRUE);//L'objet va courir
ActionMoveToObject(oMonObjet);//L'objet ne va pas courir (c comme si on mettait FALSE)


Voila je pense que j'ai a peu près tout dit, maintenant vous pouvez faire des fonction a volonté, c vraiment superutile quand on fait des gros scripts bien costaux qui demande de la rigueur dans l'écriture, et puis, ceux d'entre vous qui n'ont pas ce genre de projets, vous pouvez avez toujours appris des trucs quand à l'utisation des fonctions de base

J'ai plus vraiment d'idée pour des tuts je crois que vous avez maintenant toutes les bases pour "scripter", mais si vous vous avez des idées pour des tuts que vous aimeriez, faites moi le savoir :) :) :)

Et puis toujours pareil si vous avez pas compris vous demandez, en générales les réponces viennent vite sur ce forum.

bon bein @+

PS : Desolé pour les fôtes d'orthographe je peux pas m'en empecher :ange: :ange:

puisque tu le propose !

Par hido le 1/8/2002 à 14:06:29 (#1889922)

bonjour !

je suis pas assez fort pour comprendre ton post mais, mais mais mais !!!!!

:mdr: :mdr: :mdr: :ange:

pourrais-tu me dire comment faire pour avoir ca ?

-NPC qui stop le combat !

-NPC qui stop le combat et ce teleporte (ou disparait)

-pendant une conversation, 1 ou + PNJ apparaissent !

-pendant un fight il (PNJ) ce teleporte !(waypoint 6 a 10m pour reprendre son soufle)

-NPC qui avance(waypoint) et meure quand on clic dessus !
épidemie

-quand on choisi le module (faire apparaitre un texte pour expliquer)

-peut-on creer une demo (le PJ ne bouge plus et observe)
((deroulement du scenario))(avec dialogue a l'appui)
camera qui suis l'action de l'endroit.

:ange: :ange: je t'en demande beaucoup !c'est vrai.....

choisi celui qui te plait et explique les choses a faire et ou les mettrent plz !
ou alors soit tres sympa et dis moi tout !:ange:

Par Shanaee le 1/8/2002 à 16:37:05 (#1891372)

Pour Hido

Je peux répondre a une de tes questions, pour le reste j'en ai aucune idée.


-quand on choisi le module (faire apparaitre un texte pour expliquer)

Rien de plus simple, meme pas de script a faire pour ça, le reve quoi ;)
Donc, tu lance ton module, tu vas sur "edit" et la tu vas dans "module properties" et tu pose ton texte d'explication dans "description".

Voila :)

merchiiiiii

Par hido le 1/8/2002 à 17:06:51 (#1891657)

tres sympa de ta part !

Par gaeriel le 2/8/2002 à 18:32:04 (#1900849)

Pour la démo, j'avais cru comprendre que ce ne serait pas possible, même avec des scripts mais ca a peut-être changé ;)
A voir donc, mais je pense pas qu'ils l'aient inclus finalement. :(

c'est bien dommage !

Par hido le 2/8/2002 à 18:47:36 (#1900973)

arfff ....les saligo !!!

;) dommage quand meme !

alors personne a une idee sur le script a mettre pour faire disparaitre un PNJ pendant une conversation ?


:ange:

Par Kemay le 3/8/2002 à 13:11:42 (#1906195)

1. un NPC qui stop le combat :

AssignCommand(oNPC,ClearAllActions());
AssignCommand(oPC,ClearAllActions());
AdjustReputation(oPC,oNPC,100);

En gros c'est l'idée, après à toi de définir oPC, oNPC selon les conditions qui font que le NPC stoppe le combat

2. un NPC qui stoppe le combat et se téléporte (ou disparaît)

DestroyObject(oNPC); (disparaît)
ou
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,JumpToLocation(location)); (se téléporte)

Là c'est pareil à toi de définir oPC, oNPC et location selon les conditions

3. pendant une conversation, 1 ou + PNJ apparaissent !

Dans l'onglet Action Taken du conversation editor :
CreateObject(OBJECT_TYPE_CREATURE,"blueprint_de_la_creature",location)
ou si la creature existe déjà dans le module et que tu veux la téléporter
AssignCommand(GetObjectByTag("tag_de_la_creature"),JumpToLocation(location));

4. pendant un fight il (PNJ) ce teleporte !(waypoint 6 a 10m pour reprendre son soufle)

voir 2.

5. NPC qui avance(waypoint) et meure quand on clic dessus !
épidemie

Dans l'event onConversation du NPC
void main()
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDeath(),OBJECT_SELF);
}

6. quand on choisi le module (faire apparaitre un texte pour expliquer)

Shanaee a déjà repondu :p

7. peut-on creer une demo (le PJ ne bouge plus et observe) (deroulement du scenario) (avec dialogue a l'appui)
camera qui suis l'action de l'endroit.

possible, tant que la caméra ne bouge pas:
SetCommandable(FALSE, oPC);
comme d'hab oPC dépend de blabla

Kemay

Par hido le 3/8/2002 à 14:33:25 (#1906585)

merci a toi l'ami !


j'ai trouver hier dans la nuit .....

j'ai du me taper 4 modules ricain pour trouver.

pour faire parler un NPC:
a mettre dans action token dans la derniere phrase !

void main()
{
SpeakString("DA DAAAAAA AU REVOIR !");
PlaySound("vs_chant_conj_hf");
DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), OBJECT_SELF));
DestroyObject(OBJECT_SELF,2.0);
}

encore une chose !

Par hido le 3/8/2002 à 14:55:15 (#1906687)

tes explications sont tres clair a un detail pret !

AssignCommand(oNPC,ClearAllActions());
AssignCommand(oPC,ClearAllActions());
AdjustReputation(oPC,oNPC,100);

je met ca ou ? dans koi ? script ? dial ?
script ! lequel ?
je dois rajouter quelques chose ?
je dois choisir ?
lequels fait koi ?

j'avoue que n'importe qui sur ce froum comprendre parce-que vous etes tous plus ou moins fort !
nous sommes pas tous comme vous !

oNPC= ???
oPC= ???

ne le prend pas mal stp !
ex: imagine, tu es mon apprenti et je te dis :

moi: prend cette astropic et tourne la !
toi : la quoi ?hein ?
moi: arff prend la et met la sur le tableur !
toi : hein ?
moi: c'est pas compliqué ! tu prend l'astropic et met la sur le tableur!

tu devrait normalement me repondre !

bon ecoute .....tu es gentil mais si tu me dis pas c'est koi un astropic et c'est koi un tableur je peux pas avancer...puis d'abord je tourne dans quel sensse ? et je le met comment ?

voila l'ex: tout ceci pour dire que beaucoups de personnes viennent ici parce-que le site est vraiment genial et chaqu'un respecte l'autre.

merci encore pour l'aide Kemay je vais essayer de dechiffrer....

un ex : plz

Par hido le 3/8/2002 à 18:49:24 (#1907885)

le chien s'apel doby !

-chien(tag)= doby
-waypoint(tag)= WP_doby_01
-waypoint(tag)=WP_doby_02
-waypoint(tag)= WP_doby_03

donne moi un script simple pour qu'il marche du point 01 a 03.


s'il te plaît Kemay ! :aide:

donne moi aussi l'emplacement du script (ou je le met)



Merci a toi !

Par Kemay le 3/8/2002 à 21:06:09 (#1908609)

La première chose quand tu veux écrire un script, c'est de déterminer exactement ce que tu veux faire. Dans le cas présent, tu veux que le chien marche du waypoint 1 au waypoint 2 puis du waypoint 2 au waypoint 3. En fait ce n'est pas assez précis : pour un script il faut un évènement déclencheur. C'est à dire qu'au moment où tu penses à ce que tu veux faire il faut aussi que tu détermines quand tu veux le faire. Bon dans le cas du chien je suppose que tu voudrais qu'il le fasse en permanence, tournant entre les waypoints 1 à 3.

La façon la plus rapide de faire cela c'est d'utiliser la fonction WalkWayPoint() ou quelquechose comme cela qui est déjà compris dans les scripts par défaut des NPC, il y a plusieurs posts sur ce forum qui explique son fonctionnement. En gros si je me souviens bien il s'agit de "décommenter" une ligne de code (enlever le "//" au début de la ligne) dans le script de l'event onSpawn de la creature.

Cela dit, la fonction WalkWaypoint() agit en fait à partir du onHeartBeat. Dans le cas d'un chien marchant entre 3 waypoint n'est pas bien grave mais si tu rajoutes à cela que tous les NPC utilisant les scripts par défaut exécutent des scripts placés dans le onHeartBeat, plus toutes les créatures créés par encounter, plus toutes les serveuses d'auberge, forgerons, gardes etc... cela ralentit considérablement la performance du module.

Il est possible de faire un chien marchant continuellement entre 3 waypoints sans utiliser l'event onHeartBeat du tout, mais c'est relativement compliqué et surtout c'est très dificilement générable sous forme de script générique (cad un script que tu pourrais attacher à tous tes chiens sans avoir à modifier une ligne et qui ferait qu'il marcherait tous entre trois waypoints). Cela demanderait donc énormément de temps pour quelquechose qui (selon moi) n'en vaut pas la peine.

En gros les règles d'or pour scripter selon moi :

1. Essayer d'éviter au maximum de scripter.

2. Quand pour faire ce que l'on veut il faut passer par un script, chercher un script écrit par quelqu'un d'autre qui fait ce que l'on veut ou quelquechose d'approchant (c'est toujours plus rapide de modifier quelques détails que de commencer à 0) (Rappel : Il y a des liens vers des sites qui recensent des listes scripts prêt à servir et franchement c'est difficile de trouver quelquechose qui ne ressemble à rien de ce qui a déjà été scripté).

3. Si on ne trouve vraiment rien qui ressemble à ce que l'on veut, il faut commencer par déterminer l'évènement qui déclenche le script et l'évènement qui l'interrompt. Si c'est deux évènements sont facilement trouvés et si on trouve facilement ce à quoi ils correspondent dans le toolset, on peut commencer à scripter et l'écriture du script ne devrait pas être difficile à réaliser (si tu ne sais pas vraiment pas du tout comment scripter, tu peux soit essayer d'apprendre mais ca prend du temps soit demander à quelqu'un que tu connais ou sur un forum, en précisant ce qui déclenche et interrompt le script, ce que doit faire le script).

4. Si le déclencheur et/ou l'interruption ne sont pas évidents, il faut se demander si ça vaut vraiment le coup d'essayer de faire un script pour ça. Si c'est vraiment important et qu'il n'ya pas d'autre choix, alors on peut commencer à faire un script pour le onHeartBeat. (De mon point de vue, je n'ai vu presque aucun script qui justifiait l'utilisation du onHeartBeat. Les animations d'ambience des NPC c'est bien, mais pour ma part je préfère jouer dans un monde où les NPC sont un peu trop statiques que dans un monde qui bouffe toutes les ressources de mon ordi parce que les NPC ont une vie pendant que je nettoie le donj' d'à côté où que je résouds une enquête dans le coin . )

Voilà cela dit est à prendre pour ce que c'est, seulement une opinion. :)

ilne fait pas te donner autant de mal

Par hido le 3/8/2002 à 22:13:13 (#1908915)

l'ami !


je suis un perfectionniste de nature !

il est vrai que de gerer autant de NPC risque de poser quelques problemes de ramage.

mon module comporte 30 zone differentes, et seulement 2 zones ou des lapins font gouzizi dans la nature :)

-je suis presque a la fin et ca me chier de voir mon chien+trois cochon et un blaireau au debut qui ne parviennent pas a faire 3 pas alors que tout le reste bouge ou est animé.

-j'ai principalement travaillé 3semaines pour vous apporter un module different des autres.
en quoi ? héhé je sais pas...peu etre ma touche personnel.

tout est en place ou presque ! encore quelques trucs qui m'enerve (genre deplacement) :mdr:
et le deroulement d'une fin qui laisse présagé une suite....
on vera ..la plus grande partie de l'aide, je l'ai obtenue ici.
pourquoi ce site ? pour la simple et bonne raison c'est que grande nombre d'entre vous respecte le travail des autres et les poussent encore et encore a amélioré leur scripts.
je sais demarrer une quete,ouvrir une porte,faire ouvrir la meme porte,discuter,combattre un npc apres un dialogue,ou now le faire stoper...et je sais toujours pas comment faire bouger un lapin.......avoue que la y a matiere a rire non ?
imagine un chef cuisinier (4etoiles) qui c'est pas faire des pattes....
apprendre a travailler le language me semble etre une bonne idee pour qui veut consacrer enormement de temps...
pour ma part, creer un module est moins marrant que je l'aurais imaginé.
apres celui la je pense faire une pose en attendant la version (FR)
ou si le module plait voir pour une gigantesque suite....
je te remercie pour le temps que tu as bien voulu me consacrer et te souhaite bonne continuation.

Par Azrael07 le 27/8/2002 à 13:26:53 (#2037495)

Les librairies

Attention : les libraires exploite abondamment le principe des fonctions, et vous devez le maitrisez pour pouvoir créer ou utiliser une librairie

J'ai pas le gout de faire une intro alors on rentre tout de suite dans le vif du sujet:

Une librairie est un fichier regroupant de nombreuses fonction classée par thème (normalement :) )
Ainsi, une librairie bien utilisée aura pour effet d'ajouter des fonctions a la listes de celles presentes dans nwn
Cela presente l'interet de ne pas avoir a redefinir le corps d'une fonction utile sur chaque scipts, et ainsi étendre l'interet des fonctions

Creation d'une librairie :

Il faut savoir qu'une librairie n'est jamais appelée seule et est toujours associée a un autre scipt, pusqu'elle a pour simple but de regrouper des fonctions. Nous verrons dans la partie utilisation comment associer une librairie avec un autre fichier script
Pour créer une librairie, il faut proceder en deux temps :

La creation du corp des fonctions dans un nouveau fichier(supprimez manuellement la fonction main inutile)
Pensez a bien commenter les fonction, si jamais votre librairie a a être réutilisée, et respectez les conventions d'ecritures :
- le nom de chaques variables doit etre précedé d'une lettre correspondant a son type (n pour int, f pour float, o pour object, s pour string, l pour location)
- Le nom des fonction doit correspondre precisement a leurs effet : une fonction qui renvoi une valeur aura un nom commencant par Get, une fonction qui etablit quelquechose au sein du module commencera par Set, ect

Une fois les corps des fonction crées(ou avant sa n'a pas d'importance), il faut créer les prototypes des fonctions
Un prototye d'une fonction est en fait la première ligne de la fonction qui est dupliquée au debut du fichier :
le prototype de la fonction:


TypeDeRetour NomDeLaFonction(Type Argument1, Type Argument2, ...)
{
//Code de la fonction
}


est le suivant :

TypeDeRetour NomDeLaFonction(Type Argument1, Type Argument2, ...);


Notez bien l'apparition du ; a la fin de la ligne

Quel est l'interet des prototypes ?

D'une part, un prototype sert a informer le compilateur de l'existance de la fonction, ce qui permet d'utiliser la fonction avant que le corps de celle-ci ne soit detaillé
ex :

void fonction1(void)
{
fonction2();
}

void fonction2(void)
{
//du code
}

Cette ecriture est impossible puisque lors de l'appel de la fonction 2 dans le corp de la fonction 1, celle-ci n'est pas encore definie, et le compilateur ne la connais pas
le même code avec un prototype :

void fonction2(void);

void fonction1(void)
{
fonction2();
}

void fonction2(void)
{
//du code
}

Cette ecriture est correcte, le compilateur est maintenant informé de la presence de la fonction grace au prototype

Le script editor a egalement trouvé un autre interet aux prototype : Le fait de donner le prototype d'une fonction provoquera son apparition dans la liste des fonction a droite du scitp editor

C'est pas génial ca :) :) :)

//ici vous pouvez commenter tout ce que vous voulez consernant la fonction
//Ces commentaires apparaitre dans l'aide en bas du script editor quand la fonction sera selectionnée dans la liste de droite
//Il vous faut bien expliquer l'utilisation de votre fonction ici (effet de la fct, desciption des variables en paramètres, ect
//Vous pouvez mettre autant de commentaires que vous voulez, tant qu'il n'y a pas de ligne vide entre les commentaires et le prototype
TypeDeRetour NomDeLaFonction(Type Argument1, Type Argument2, ...);


Attention : une librairie n'est pas un script complet, et ne peut donc pas être compilé(il le sera lorsqu'un fichier l'utilisera)
Une librerie doit donc être sauvegardé, mais pas complié sans quoi le compilateur provoquera une erreur du type
ERROR: NO FUNCTION STARTINGCONDITIONAL() IN SCRIPT
le fait de sauvegarder provoque une recherche des erreurs, cela ne pose donc aucun problème d'utilidation de ne pas compiler(en pratique, cela ne fait donc aucune difference, il faut juste penser a mettre "save" au lieu de "compile")
Consernant le nom de la librairie, il y a peut être des convention a ce sujet mais je ne les connais pas, donc mettez ce que vous voulez

La libraire est donc prete a être utilisée dans ce module, vous pouvez aussi l'exportez sous la forme de fichiers pour pouvoir le reimporter via un autre module. Bon j'explique pour ceux qui ne connaisse pas :

- Une fois votre librairie finie, sortez du script editor
- Dans la fenetre principale d'aurora, mettez "file" puis "export"
- Dans "ressource of type", bein ... c'est le type de resource a exporter. Des script, conversation, objets, ou area
- Choisissez votre librairie dans les script, il vous reste a tapper le nom du fichier et voila

Ben vous venez de pondre une belle librairie, maintenant faut voir comment l'utiliser

Utilisation des Librairies :

Pour commencer, si votre librairie a été téléchargée ou provient d'un autre module, il faut l'importer : "file", "import", puis choisir le fichier

maintenant charger une fonction qui doit utiliser la librairie.

Il va faloir indiquer au compilateur que l'on souaite utiliser un autre fichier
syntaxe :

#include "nom_du_fichier"


le mot clé "#include" indique au compilateur que le fichier entre crochet doit être inserer dans le script(cela equivaux en gros a un copier/coller de la librairie jusque dans le script)

Maintenant toutes les fonctions de la librairie peuvent être utilisées dans le scipt
Note : Pour voir apparaitre les fonction dans la liste a droite il faut d'abord sauvegarder une première fois votre scipt après qu'il ait recu le "#include"

Voila donc pour la creation et l'utilisation des librairies.
Si vous voulez un exemple concret de librairie, bioware en a deja créé qlqunes(dans le menu ouverture de scipt, choisissez "all ressources" puis selectionner par exemple le scipt "nw_i0_plot" : c'est une librarie
Plusieurs libraires commencent a faire leurs apparition, presentant des fonction de routines destiniée a faire gagner du temp a leurs utilisateurs
L'utilisation d'une librairie d'un autre requert quand même une règle : ne modifiez jamais une libraire qui n'est pas la votre, si elle est buggé prevenir son auteur si vous la corrigez. Je vous fait peut être chier a vous faire la morale mais c'est comme ca !!!
Par opposition si vous créez une librairie pensez a la faire claire, donnez bien des explication et faites des noms de fonctions qui tombent sous le sens, de facon a permettre la recherche par mot clé, et ne soyez pas modeste, indiquez au debut votre nom et votre mail.

Bon ben voila, je crois que c'est tout

Par Louis Kharn le 27/8/2002 à 13:55:19 (#2037648)

pkoi y a personen ui sais parler le français simple quand on explique quelque choses sur les scriptes:sanglote: :sanglote: faut pas oublier y a des gens qui sotn pas doué ou qui debute et qui essaye de comprendre ont pas facil!!! soyez un peu plus clair pour votre
THE NOOOOOOOOOOOOOOOOOOOOOOOOOB,préféré ou expliquer mon en pv :)

Par Théranthil le 27/8/2002 à 23:43:36 (#2041772)

Ba le problème c'est que certains termes sont propre à l'éditeur et si chaqu'un les traduits de son côté, c'est le fouillis.
Mais commence déjà par les tutoriaux normaux. Ils sont bcp plus simple ;)

Par Azrael07 le 28/8/2002 à 22:53:22 (#2049018)

pkoi y a personen ui sais parler le français simple quand on explique quelque choses sur les scriptes faut pas oublier y a des gens qui sotn pas doué ou qui debute et qui essaye de comprendre ont pas facil!!! soyez un peu plus clair pour votre


Bon alors regarde plus haut, jusqu'au titre, tu voit "Tutorial avancé pour les scripts", ca veut donc dire que de base c pas simple. Cela dit, les librairies sont très loins d'être indispensable pour scipter.

Mais commence déjà par les tutoriaux normaux. Ils sont bcp plus simple


Comme par suivre ces conseils, mes tuts sont destiné a des personnes qui savent deja scipter.

Ba le problème c'est que certains termes sont propre à l'éditeur et si chaqu'un les traduits de son côté, c'est le fouillis.


Je pense que le voc que j'utilise est celui courrament utilisé, mais peut être pas... De toute facon j'ai dut expliquer tout les mots compliqués dans ce tut ou dans les precedants.

Après, si vous ne comprenez pas, demandez-moi : comme dit Armathandre, pour un qui pose la question, dix y attendent une reponse. Je suis desolé mais je peux pas nom plus detailler et fournir des exemples pour chaques trucs.

Par Vlad_F le 29/8/2002 à 15:06:49 (#2053528)

Provient du message de Louis Kharn
pkoi y a personen ui sais parler le français simple quand on explique quelque choses sur les scriptes:sanglote: :sanglote: faut pas oublier y a des gens qui sotn pas doué ou qui debute et qui essaye de comprendre ont pas facil!!! soyez un peu plus clair pour votre
THE NOOOOOOOOOOOOOOOOOOOOOOOOOB,préféré ou expliquer mon en pv :)



Ce tuto est clairement intitulé comme étant "avancé" donc faudrait peut être lire un peu avant d'écrire :rolleyes:

En plus ça me fait halluciner de te voir reprocher à l'auteur de pas "parler français" alors qu'il explique quelque chose de relativement technique : Non mais tu as vu l'infâme bouillie qu'est ton message ? Il faut le dictionnaire français petit negre pour te déchiffrer... Je trouve ça un peu fort !
Ca donne pas envie de t'aider. Sans rancune.

Sinon pour revenir au scripting :

J'apprécierais un petit tuto sur les evenements "onUserDefined".
Est-il possible de créer ses propre déclencheurs d'évènements ? Si oui comment ?

Merci :)

Par Kemay le 29/8/2002 à 15:21:44 (#2053635)

J'apprécierais un petit tuto sur les evenements "onUserDefined".
Userdefined Event est votre ami

Est-il possible de créer ses propre déclencheurs d'évènements ? Si oui comment ?
La fonction SignalEvent() sert à cela. sinon selon ce que tu veux faire ExecuteScript() peut être utile aussi.

Par Azrael07 le 29/8/2002 à 15:25:47 (#2053665)

et doucement nous vous entretuez pas, c'est pas ce que je veux, Vlad_F, merci pour ton soutient, mais n'en rajoute pas trop non plus.:chut:

J'apprécierais un petit tuto sur les evenements "onUserDefined".



c 'est ici, tut de Théranthil -> chapitre 8

HAHEM...

Par Louis Kharn le 29/8/2002 à 17:31:06 (#2054665)

excuse moi de ne pas prendre 1heures pour ecrires en français corect un message...et excuse moi encore de ne pas etre doué en scriptage...je fais de mon mieu et je ne veux que apprendre...
mais si vous commencer direct par un "avancer" j'y peu rien si je demande...

bon aller j'ai pas trop envie de me tuer a répondre...
a+
THE NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOB

Par Louis Kharn le 29/8/2002 à 17:32:43 (#2054676)

Provient du message de Théranthil
Ba le problème c'est que certains termes sont propre à l'éditeur et si chaqu'un les traduits de son côté, c'est le fouillis.
Mais commence déjà par les tutoriaux normaux. Ils sont bcp plus simple ;)


et encore emrci a toi theranthil pour avoir répondu gentillement a une simple question je ne vise personne...:rolleyes:

Par Théranthil le 29/8/2002 à 17:46:07 (#2054789)

mais si vous commencer direct par un "avancer" j'y peu rien si je demande...


Juste en dessous, il y a un tutorial pour les quiches. ;)

J'apprécierais un petit tuto sur les evenements "onUserDefined".


Je crois qu'il faudrait mettre une pancarte. Regardez les messages persistants et en particulier les tutoriaus avant de poster.

Par Louis Kharn le 29/8/2002 à 17:49:06 (#2054809)

la tu m'as mechament cassé theranthil ;) :p
mais bon'comem excuse (elle sotn faites pour s'en servir...)
je savais pas se que quiche voualsi dire c pour sa que g pas été voir ^^

enfin merci de la précision je v aller voir

THE NOOOOOOOOOOOB

JOL Archives 1.0.1
@ JOL / JeuxOnLine