Salut,
Comme certaine personnes voulaient savoir comment utiliser les tables, voilà un petit tuto. :)
Tableaux à 2 dimensions
En Squirrel, vous pourrez définir un tableau à deux dimensions en utilisant ceci :
local maTable = {};
Le "local" permet de définir ce tableau seulement pour la partie et les sous parties qu'il constitue.
Petit exemple pour être plus clair :
local variable = true;
if(variable)
{
local seconde_variable = false;
if(!seconde_variable)
log("Tout marche bien ici !");
}
if(!seconde_variable)
log("Ce message ne va pas être affiché car seconde_variable n'est pas défini pour cette structure.");
Vous pouvez utiliser ceci pour que la variable soit globale.
maTable <- {};
Votre variable maTable peut maintenant contenir plusieurs colonnes :
maTable[0] <- 1;
maTable[0] = 2;
On utilise à la première ligne "<-" pour définir la colonne 0.
Une fois qu'elle est définie, on peut utiliser = pour modifier la variable.
Ainsi, vous pouvez déterminer plusieurs éléments sur une seule variable.
local maTable = {};
maTable[0] <- "Ceci est la colonne 0";
maTable[1] <- "ceci est la colonne 1";
log(maTable[0]+" et "+maTable[1]); Affiche: "Ceci est la colonne 0 et ceci est la colonne 1";
Vous pouvez ensuite poffiner et améliorer vos scripts avec quelques astuces/trucs :
.len(); va donner le nombre de colonne dans votre tableau, c'est donc pratique pour avoir des colonnes croissantes sans spécifier 0, 1, 2... dans les boucles par exemple.
local maTable = {};
maTable[maTable.len()] <- 1
maTable[maTable.len()] <- maTable[maTable.len()-1] // maTable.len() est égale à 1, si on retire 1 à maTable.len(), on a la donnée de maTable[0].
maTable[maTable.len()] <- 1
maTable[maTable.len()] <- 1
foreach(id, values in maTable)
log("maTable["+id+"] est définie ("+values+")"); // Ceci va vous afficher "maTable[0] est définie (1), maTable[1] est définie(1), etc." jusqu'à 3.
Voilà; vous savez maintenant faire des tableaux à deux dimensions, voici un petit exemple facile pour remplacer une lettre par une autre dans un texte (ici e par a) (fonction pas utile du tout, mais j'avais pas d'idées).
function onScriptInit()
{
maTable <- {};
string <- "Je suis un texte découpé par lettres !";
foreach(i, idx in string)//Boucle répétée pour chaque lettres de string
maTable[i] <- idx.tochar()// i va être la position de chaque lettres de string, de 0 à ... la position du "!" à la fin. .tochar() permet de remplacer idx qui est le numéro héxadécimal de la lettre par la lettre auquel le numéro est attribué.
//maTable[0] va donc être "J", [1] va être "e", etc.
local new_string = "";
foreach(i, var in maTable) { // boucle pour toutes colonnes du tableau : i = numéro de colonne, var = variable de la colonne.
if(var == "e" || var == "é")
new_string += "a";
else
new_string += var;
}
log("Nouveau texte: "+new_string) // affiche "Ja suis un taxta dacoupa par lattras !"
return 0;
}
Tableaux à 3 dimensions
Passons maintenant aux tableaux à 3 dimensions.
Vous faîtes comme un tableau à deux dimensions, mais cette fois ci on défini une colonne comme table.
local maTable = {};
maTable[0] <- {};
maTable[0].variable <- "Salut !";
maTable[0].variable = "Je change ma variable avec = car elle est déjà définie.";
Vous pouvez, une fois la colonne attribuée comme table, spécifier un nom à votre sous-colonne. Vous devez mettre un point entre le crochet et votre variable.
Ainsi, vous pouvez (en gros) spécifier des variables aux variables d'une variable. Pas mal, non ?
Je vais vous montrer un petit exemple d'utilisation pour gérer les comptes des joueurs.
local infoJoueur = {};
function onPlayerConnect(playerid)
{
infoJoueur[playerid] <- {};
infoJoueur[playerid].nom <- getPlayerName(playerid);
infoJoueur[playerid].level <- 0;
infoJoueur[playerid].admin <- 0;
infoJoueur[playerid].login <- 0;
sendPlayerMessage(playerid, "Bienvenue à Liberty City, "+infoJoueur[playerid].nom+" !");
return 1;
}
function onPlayerLogin(playerid) // fonction appellée quand le joueur se connectera grâce à votre système de login
{
infoJoueur[playerid].login = 1;
infoJoueur[playerid].level = 10;
return sendPlayerMessage(playerid, "Vous êtes loggué !");
}
function onPlayerDisconnect(playerid) // fonction appellée quand il se déconnecte
{
log("Le joueur "+infoJoueur[playerid].nom+" s'est déconnecté.");
return delete infoJoueur[playerid];
}
envoiMessageLevel("Salut !", 10);
function envoiMessageLevel(message, level) // on envoi le message 'message' aux joueurs de level 'level'.
{
foreach(i, var in infoJoueur) // boucle qui va lister tous les joueurs
{
if(infoJoueur[i].level == level)
sendPlayerMessage(i, message);
}
}
Si vous avez des questions, des problèmes ou autre, dîtes le moi ;)