la création des fonction.

Tadaaaa !!!

Pof un nouveau tut à la suite du premier

Là ça 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 d'Amaranthe.

Je vais tout de suite préciser un truc, la création de fontion est intéressante 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 clarifier 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 tous 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 des paramètres par défaut:

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 paramètre par défaut 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

__________________
Azrael07

C'est Ton Choix...