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

Titre: Besoin d'aide pour comprendre certaines Boucles
Posté 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


Citer
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;
   }
Titre: Re : Besoin d'aide pour comprendre certaines Boucle
Posté par: Xartrick le 08 Août 2011, 09:33:00
http://www.gtaonline.fr/forums/index.php/topic,11595.0.html

Chapitre 3: Les boucles
Titre: Re : Besoin d'aide pour comprendre certaines Boucle
Posté par: Khay le 09 Août 2011, 01:29:47
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

Citer
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 ^^

Citer
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