GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Khay le 08 Août 2011, 09:30:57
-
Bonjour, j'aurais besoin d'aide pour comprendre quelques partie de se script, je ne comprends pas les fonction While et For je comprends que c'est des boucles je connais leurs fonction de base mais pas quand les utilisés et comment vu que c'est souvent utilisé je veux apprendre cela si une bonne explication est possible d'avoir merci
if(strcmp(cmd, "/mp", true) == 0 || strcmp(cmd, "/pm", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gLogged[playerid] == false)
{
SendClientMessage(playerid,COLOR_GRAD1, MSG_ERROR_LOG);
return 1;
}
if(PlayerInfo[playerid][pMuted] > 0)
{
SendClientMessage(playerid,COLOR_GRAD1,MSG_ERROR_MUTE);
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /mp (ou /pm) [playerid/PartOfName] [text]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if (IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(playerid == giveplayerid)
{
SendClientMessage(playerid, COLOR_GRAD1, "...ça ne sert à rien d'envoyer des messages à soi même !");
return 1;
}
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /mp [playerid/PartOfName] [text]");
return 1;
}
format(string, sizeof(string), "MP reçu de [%d]%s: %s", playerid, sendername, (result));
SendClientMessage(giveplayerid, COLOR_YELLOW, string);
format(string, sizeof(string), "MP envoyé à [%d]%s: %s", giveplayerid, giveplayer, (result));
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "MP de [%d]%s à [%d]%s: %s", playerid, sendername, giveplayerid, giveplayer, (result));
printf("%s", string);
if(PlayerInfo[playerid][pAdmin] < 5 && PlayerInfo[giveplayerid][pAdmin] < 5)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && PlayerInfo[pAdmin] > 0 && LookMp == 0)
{
SendClientMessage(i, COLOR_ADMIN_CHAT, string);
}
}
}
return 1;
}
}
}
return 1;
}
-
http://www.gtaonline.fr/forums/index.php/topic,11595.0.html
Chapitre 3: Les boucles
-
J'ai compris leurs fonctions c'est à dire faire des actions répétitives mais ils répètent quoi comme action ici je vais vous dire ce que je comprends
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
Là si idx est plus petit que lenght et cmdtext plus petit ou = a ''
Sa incrémente de +1? ensuite je ne suis plus ^^
for(new i = 0; i < MAX_PLAYERS; i++)
Donc ici on on crée une variable "i", ensuite on met que les joueurs ne seront pas servit et ensuite on incrémente de +1, ensuite la fonction de ceci que je n'ai pas cité
Pourquoi avoir utilisé ici des boucles était ce vraiment obligatoirement nécessaire? Dans quel cas d'un Serveur DM par exemple avec des exemples serait bien de les utiliser? c'est peu etre un peu con mes questions mais je bloque à ce niveau