?
| Nos forums | NwN2.fr | Lyncya | Notre channel IRC |
La Bibliothéque de Neverwinter Nights
La Bibliothéque de Neverwinter Nights
 
 
 
 
 
Bienvenue, connectez vous ou créez votre compte. Changer d'interface
 
Se connecter:
Login:

Password:


 
Neverwinter Nights 2
  Compendium NWN/NWN2
Classe, Warlock
Classes de Base
Classes de Prestige
Forum Joueur NWN2
Forum Concepteur NWN2
Bestiaire (Créatures)
Races
Tests
 - Collector Chaotique Mauvais (bbnwn, 4 nov 2006)
 - Mask of the Betrayer
 - Storm of Zehir
 - Mysteries of Westgate
Mondes
 - Les Artisans du Mitan
 - Les Légendes de Luiren
 - LanceDragon
 - La Bataille pour Cormanthor
 - Man O'War
 - Sendarie Nouvel Âge
Preview
 - 29 Mars 2006 (BBNWN)
 - 2 mai 2006 (Gamespot)
 - 17 Mai 2006 (WarCry)
 - 19 Mai 2006 (NWVault)
 - Designer Diary #1 (Gamespot, 1er Juin 2006)
Interview
 - Dorian Richard (20/02/2006)
 - Ferret Baudoin (22/02/2006)
 - Feargus Urquhart (2 mai 2006)
 - La Lettre Ouverte de Papermonk
 - Chris Avellone (Total Video Games)
Logs IRC
 - Warcry (27/01/2006)
 - NWVault / NWC (3 Juin 2006)
 - NWN2News.net (30 Juin 2006)
Faciliter la diffusion et l'installation de vos créations

 
Communauté
  Forums
Channel #nwnights-fr
Guide IRC
Liens
CEP

 
Fichier
  Tileset
Module
Hakpak
Objets
Portraits
Créatures
Scripts
Tutoriaux
Autres
Wallpapers

 
Editeur
  Tutorial Editeur
Cinématiques
Musiques
Textures
Tutoriaux NWScripts
Scripts

 
Le jeu
  Solution
Sorts
Classes
Dons (feat)
Aptitudes (skill)
Bestiaire
Règles 3e Edition
Jouer en multiplayer

 
Hordes of the Underdark
  Informations Générales
Solution [forum]

 
Shadows of Undrentide
  Preview
Informations générales
Classes de Prestige
'Lisez Moi.txt' de la Démo
FAQ
Nouveaux tilesets
Solution [forum]

 
Divers
  Traductions Logs Irc
Guides divers

 
Présentation
  Généralités
Configuration minimale
Serveur Dédié
Traduction FAQ
Historique (nwn et bioware)
Contrats de Bioware (vf)

 
Site
  Copyrights
Webmasters

 
     
 
Dîtes non aux inutiles protections contre la copie dans les jeux (SecuROM, StarForce, etc) !!
HADOPI - Le Net en France : black-out

6. Les fonctions


Une fonction vous permet de faire plusieurs choses :
  • premièrement, elle vous permet d'éviter les répétitions dans votre code : en créant une fonction, vous pouvez par exemple éviter de réécrire 5000 fois le même code.
  • deuxièmement : une fonction vous permet de généraliser vos codes sources. Si par exemple votre bout de code crée automatiquement un objet qui a un blueprint commençant par « nws_ » vous pourrez tout à fait définir une fonction qui va ajouter « nws_ » à vos blueprint.
  • troisièmement une fonction vous permet de conserver des routines (un bloc de code) dans des fichiers d'inclusions ce qui évidemment vous rend la vie plus facile lorsqu'il s'agit de les modifier.

Il existe deux types généraux de fonctions : les fonctions qui renvoient une valeur, et les fonctions qui n'en renvoient pas (c'est le cas des procédures en Delphi par exemple). Avec les NWScripts, il n'y a pas de réelles différences entre une fonction qui renvoie quelque chose et une autre qui ne renvoie rien.

Voici la définition d'une fonction :

type FunctionName( [[type Argument1 [= ValeurArg1][ , ..., type ArgumentN [= ValeurArgN ]]] )
{
  return Variable;
}

Oui, ce n'est pas très clair, décomposons :

  • type FunctionName : ici vous devez indiquer le type de la fonction, c'est-à-dire le type de contenu qu'elle va renvoyer. Par exemple, un entier (int). Si celle-ci ne renvoie rien, vous devrez mettre void FunctionName (par exemple), si elle renvoie quelque chose alors Variable devra être du même type que la fonction (par exemple, int). FunctionName correspond à un nom de fonction, tout comme les variables le nom de fonction ne peut pas être n'importe quoi : il ne doit contenir que des lettres, des chiffres et le tiret « _ » et doit commencer par une lettre. Aussi, le nom de la fonction ne doit jamais être celui d'une fonction déjà existante, il ne doit pas être égal à « main » ou à « StartingConditionnal ».
  • entre parenthèses, vous devez indiquer les différents paramètres. Exemple avec une fonction « officielle » :

    talent GetCreatureTalentRandom( int nCategory, object oCreature = OBJECT_SELF );

    Vous devez aussi indiquer le type des paramètres et une valeur optionnelle : par exemple OBJECT_SELF. Néanmoins, vous n'êtes absolument pas forcé d'utiliser des arguments : ceci est possible :

    string RandomName();
  • l'instruction return vous permet de renvoyer une valeur qui devra être du type de la fonction, sauf si la fonction est de type void (elle ne renvoie rien donc). Return fonctionne comme les instructions break et continue : c'est à dire que le code placé après return n'est pas exécuté. Le mieux est de stocker la valeur qui va être renvoyée dans une variable temporaire et la renvoyer en fin de fonction. (note : vous pouvez quand même utiliser l'instruction return dans une fonction de type void pour par exemple cesser l'exécution de code)

Pour appeler une fonction : vous devez en connaître sa définition : vous pouvez double cliquer sur le nom de celle-ci dans l'éditeur de script de Neverwinter. Cependant, cela ne vous indiquera jamais les définitions de vos fonctions : pour cela, vous devez effectuer une manipulation particulière :

// Description
// Ligne 1
// ...
// Ligne N

type FunctionName( [[type Argument1 [= ValeurArg1][ , ..., type ArgumentN [= ValeurArgN ]]] );

Vous devez placer la définition de la fonction en entête de votre script. Vous pouvez la faire précéder d'un commentaire décrivant son action. Dans ce cas, vous ne devrez utiliser que des commentaires sur une ligne, sinon ceux-ci ne s'afficheront jamais.

Une fois que vous avez la définition : vous pouvez l'appeler :

FunctionName( [[[ValeurArg1], ...,] ValeurArgN][,][[ValeurArgOpt1], ...,] ValeurArgOptN] );

Par exemple :

void Foo( int i, int j = 0, object = OBJECT_SELF )
{
  instruction;
}

Pour appeler Foo :

Foo( 0 );
Foo( 0, 1 );
Foo( 0, 1, OBJECT_SELF );

Mais pas :

Foo( 0, OBJECT_SELF );

(Vous devez respecter l'ordre des arguments, même ceux qui sont optionnels)

Dans notre exemple, Foo ne renvoie rien : si vous tentiez de faire ceci :

int i = Foo( 1 );

L'éditeur de script vous renverrait une erreur. Cependant, si Foo est définie ainsi :

int Foo( int i, int j = 0, object = OBJECT_SELF )
{
  instruction;
}

Alors int i = Foo( 1 ); n'affichera plus d'erreur.

C'est à peu près tout ce qu'il y a à savoir sur les fonctions : ensuite, vous êtes libre de mettre ce que vous voulez dans votre fonction : par exemple, une fonction qui créerait 5 créatures à côté du joueur... etc.

Dans la section précédente nous vous avions parlé des fonctions récursives. Il s'agit de fonctions qui vont se rappeler elle-même :

void Foo( int i = 0 )
{
  if ( i < 100 )
    Foo( ++i );
  else
    instruction;
}

Cette fonction revient au même que faire :

int i = 0;
while ( ++i <= 100 )
continue;
instruction;

L'existence des fonctions récursives est bonne à savoir, cependant vous ne devriez pas trop en avoir besoin dans vos NWScripts. Ces fonctions sont utiles pour par exemple « visiter » le contenu d'un répertoire.

C'est à peu près tout ce que vous avez à savoir sur les fonctions.









Navigation rapide:
 
 
Revenir à la page d'accueil du site Ajouter la Bibliothéque de Neverwinter dans vos favoris Afficher une version imprimable de la page
  NeverList - Liste ...
Lyncya 3 - La Gue ...
Sarmates!
Le dernier des fi ...
Bonne année
Joyeux Noël 2010
The Witcher 2 en ...

Archives
Rechercher
 
 
Le Site



NwN 2 - Support des Modules Solos


Groupes
Archives
 

:: design by ghaxir :: coding by baldurien :: la bibliothèque de neverwinter :: tous droits réservés ::