En fait, les fonctions déclarées avec stock n'ont pas besoin de forward autant pour moi.
Le mot clé stock permet de créer des fonctions qui renvoie autre chose qu'un nombre entier.
Exemple:
stock DonnerNomJoueur (playerid)
{
new Nom Joueur[40];
GetPlayerName (players, Name, 40);
return Name; // Renvoie une chaîne de caractères
}
ou
stock Float:DonnerValeur ()
{
return 12.5; // Renvoie un nombre décimal
}
Si la fonction est définie après son appel dans le script, il faut la déclarer en amont avant de pouvoir l'appeler (de toutes façons, si le compilateur n'est pas content il mettra un warning).
La déclaration de la deuxième fonction (à mettre en tête de script par exemple) est :
Float:DonnerValeur ();
Pour ce qui est du mot clé static, il permet de conserver la valeur d'une variable à l'intérieur d'une fonction entre deux appels.
Exemple :
Compteur ()
{
static i=0;
i++;
return i;
}
Au premier appel de cette fonction, elle renverra la valeur 1. A l'appel suivant 2, puis 3, etc.
Si on met new à la place de static, la fonction renverra toujours 1.
Le mot clé enum sert, comme sont nom l'indique presque, à définir une énumération, c'est à dire une suite de constantes.
Si on reprend ton exemple, pSpec n'est pas une variable mais une constante. Il n'est pas possible de lui affecter une valeur.
Si on fait pSpec = 23;, le compilateur sortira une erreur.
Pour schématiser, pSpec est un constante égale au nombre de membres qu'il y a dans l'enum (6 dans ton exemple). Et chaque membre de l'enum à une valeur allant de 0 à 5 (dans l'ordre de leurs déclarations).
En PAWN, ce genre d'enum permet d'émuler les structures de données si pratiques dans les autres langages (notamment C/C++) et qui n'existent pas en PAWN.
Ton exemple crée un tableau à deux entrées [MAX_PLAYERS] et [pSpec] soit [200][6].
On accède aux éléments du tableau en utilisant les membres de l'enum.
Ainsi Unspec[12][sPint] sera en fait Unspec[12][3] mais sPint est plus parlant que 3 (bien que :))
L'avantage c'est qu'avec un(une) enum, on peut mixer les types de données dans un tableau (c'est le cas dans ton exemple où cohabitent des Float et des entiers). Ceci n'est pas possible autrement.
++
Syg