Note préliminaire : PAWN travaille en terme de cellule (cell) et les nombres donnes ci dessus sont des nombres de cellules, pas des octets.
Pour info, sur une machine 32 bits, une cellule = 4 octets.
Le mot clé enum permet de faire une énumération de constantes, comme en C/C++.
Dans un énumération, chaque élément à une valeur de +1 par rapport à l'élément suivant.
Le premier élément à toujours la valeur 0.
Exemple :
enum MyEnum
{
Premier,
Deuxieme,
Troisieme
}Dans cet exemple, Premier=0, Deuxieme=1 (Premier+1) et Troisieme=2 (Deuxieme+1).
Note : Il n'y a pas de ; (point-virgule) après l'accolade fermante d'un enum mais si on en mais un, le compilo ne mettra pas d'erreur.
Par contre, en PAWN, il existe un particularité, il est possible de spécifier l'increment. C'est le cas de ton exemple :
enum pInfo
{
pKey[128],
pLevel,
pAdmin,
pDonateRank,
gPupgrade,
pConnectTime,
pReg,
pSex,
}
Ici, pKey=0 mais pLevel=0+128=128 puis pAdmin=129 (128+1), ....
Un énumération est donc une déclaration de constantes avec incrément automatique.
Ces énumérations peuvent être utilisé à la place des #define :
#define TEAM_NOTEAM 0
#define TEAM_GANGSTA 1
#define TEAM_FLIC 2
#define TEAM_CIVIL 3
#define TEAM_MEDIC 4peut être remplacé par
enum Teams
{
TEAM_NOTEAM,
TEAM_GANGSTA,
TEAM_FLIC,
TEAM_CIVIL,
TEAM_MEDIC
}
Mais là où les enums sont le plus utiles, c'est dans les accès aux éléments des tableaux.
Exemple :
enum Infos
{
Name[40],
Color,
Vehicle
}
new PlayerInfos[Infos];
Dans cet exemple, on défini un tableau (PlayerInfos) qui contient trois éléments (Name, Color et Vehicle).
Ces éléments sont accessibles comme suit :
PlayerInfos[Name], PlayerInfos[Color] et PlayerInfos[Vehicle].
Cette fonctionnalité de PAWN permet de palier l'impossibilité de créer des structures (comme en C).
Il est possible de créer des tableaux à double entrées beaucoup plus utiles :
new PlayerInfos[MAX_PLAYERS][Infos];Exemple d'utilisation :
/* Si c'est JimmyJim et qu'il est en rouge */
if (strcmp (PlayerInfos[playerid][Name], "JimmyJim", true) == 0 && PlayerInfos[playerid][Color]==0xFF0000AA)
{
/* Faire des trucs */
}
On trouve des exemples d'utilisation concrets dans les scripts fournis avec le serveur SAMP (minigunmadness.pwn, sniper.pwn) et dans des modes comme The GodFather, etc ...
++
Syg