Je vais essayé d'âtre clair ( Tu vois la subtilité ?)
Ton code et t'es erreurs avec les commentaires //
if (!strcmp(Cmd, "/rapport", true))
{
new Tmp[256];
Tmp = strtok(cmdtext, Idx);
if (!strlen(Tmp))
{
SendClientMessage(playerid, BLANC, "[Usage] /rapport [Texte]");
return 1;
}
new Str[256];//Une chaine de 256
GetPlayerName(playerid, Str, sizeof(Str));//Tu prend son nom
format(Str, sizeof(Str), "[Info] Rapport envoyé!", Str, cmdtext[8]); // Tu formate le message alors que tu met pas le nom ?
SendClientMessage(playerid, info, Str);// Tu envoie le message formaté qui sert a rien.
Rapport(Str);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && Levels[i] != 0)
{
SendClientMessage(i, info,"[Info] Rapport de %s : %s"); // Et la tu formate pas le message tu récupère pas son nom tu lui dit %s et %s
}
}
return 1;
La réponse + les explication le code de départ de mon FS.
if (!strcmp(Cmd, "/rapport", true))
{
new Tmp[256];
Tmp = strtok(cmdtext, Idx);
if (!strlen(Tmp))
{
SendClientMessage(playerid, GRIS, "USAGE: /rapport [Votre Texte]");
return 1;
}
new Str[256];//On créer une chaine de caractère de 256 on peut mettre 256 lettre dedans en bref.
GetPlayerName(playerid, Str, sizeof(Str));//On récupéré le nom du playerid suis qui fait la commande et on le stock dans le Str qu'on a créer plus haut.
format(Str, sizeof(Str), "[[REPORT %s]]-[%s]", Str, cmdtext[8]);//On formate je pense que tu comprend pas ici je t'expliquerais plus bas.
SendClientMessage(playerid, ZAZOLIN, Str);//On envoie le message formaté.
Rapport(Str);
for(new i=0; i<MAX_PLAYERS; i++)//Une boucle elle vas tourné jusqu'à t'en que i le new i arrive a MAX_PLAYERS sois 500 elle passe par tout les joueurs
{
if(IsPlayerConnected(i) && Levels[i] != 0)//Si le joueur est connecter(i) && que son Levels[i] (!=) est différent de 0
{
SendClientMessage(i, ZAZOLIN, Str);//On lui envoi aussi le message formaté plus haut.
}
}
return 1;
}
Pour l’explication de formaté
new Str[256];//On créer une chaine de caractère de 256 on peut mettre 256 lettre dedans en bref.
GetPlayerName(playerid, Str, sizeof(Str));//On récupéré le nom du playerid suis qui fait la commande et on le stock dans le Str qu'on a créer plus haut.
format(Str, sizeof(Str), "[[REPORT %s]]-[%s]", Str, cmdtext[8]);//Voilà donc le format ! penons la fin elle est intéressante !
SendClientMessage(playerid, ZAZOLIN, Str);//On envoie le message formaté.
format(Str, sizeof(Str), "[[REPORT %s]]-[%s]", Str, cmdtext[8]);
Comme tu le remarque il y a Str la chaine de caractère qu'on a fait + haut.
GetPlayerName(playerid, Str, sizeof(Str));
La on prend son nom et on le met dans Str.
Et dans le format on le met a la fin pourquoi ?
Pour savoir l'ordre d'affichage pardi ! [[REPORT Xolokos]] et le cmdtext[8] c'est la commande a partir du caractère numéros 8 de la chaine !
Donc Str pour le nom ce qui nous fait [[REPORT Xolokos]] et cmdtext[8] pour mon texte ensuite a savoir que pour mettre une chaine de caractère dans un format ( dans le "[[REPORT %s]]-[%s]") c'est un %s et mettre un nombre simple %d et un Float un nombre avec une virgule %f. En exemple le playerid c'est l'ID du joueur donc si je fait ça :
format(Str, sizeof(Str), "[[REPORT %s ID [%d] ]]-[%s]", Str,playerid,cmdtext[8]);
On auras son ID magnifique non ? Bon ok je m'emballe !
Pour ton rapport voiçi :
if (!strcmp(Cmd, "/rapport", true))
{
new Tmp[256];
Tmp = strtok(cmdtext, Idx);
if (!strlen(Tmp))
{
SendClientMessage(playerid, GRIS, "USAGE: /rapport [Votre Texte]");
return 1;
}
new Str[256];
GetPlayerName(playerid, Str, sizeof(Str));
format(Str, sizeof(Str), "[Informatation] Rapport de %s ID[%d] : %s", Str, playerid, cmdtext[8]);
SendClientMessage(playerid, ZAZOLIN, "Rapport envoyé avec succès !");
Rapport(Str);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && Levels[i] != 0)
{
SendClientMessage(i, ZAZOLIN, Str);
}
}
return 1;
}
Alors maintenant explique moi ce code ? Héhé ? Heu.