• 04 Juin 2026, 02:07:15


Auteur Sujet: Probleme  (Lu 1109 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne robyn59

  • *
  • Tueur en série
  • Messages: 108
    • Voir le profil
Probleme
« le: 28 Avril 2009, 09:51:19 »
Bonjour, j'ai un probleme avec une de met commandes
Citer
}
if(strcmp(cmd, "/asay", true) == 0) // Publicly says an admin message. Exact same as RCON's 'say' but in a red color.
    {
    if (PlayerInfo[playerid][pAdmin] >= 1)
    {
      GetPlayerName(playerid, sendername, sizeof(sendername));
        new result[128];
        result = strtok(cmdtext, idx);
        if(!strlen(result))
        {
           SendClientMessage(playerid, COLOR_RED, "USAGE: /asay [message]");
            SendClientMessage(playerid, COLOR_RED, "FUNCTION: Will broadcast an admin message.");
            return 1;
        }
        format(string, sizeof(string), "* Admin: %s", result);
        SendClientMessageToAll(COLOR_LIGHTRED, string);
        printf("%s", string);
        }
        else
        {
         SendClientMessage(playerid,COLOR_GREY, "You are not an admin with the required level.");
            return 1;
      }
    }
quand je fait /asay dans le jeu je peut le faire mais le probleme je peut mettre que un mot dans le message , et je voudrait en mettre plus

(( /asay test + test = /asay test )) donc ses embetent , merci de m'aider

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme
« Réponse #1 le: 28 Avril 2009, 11:25:43 »
Un classique de l'usage intempestif de strtok.
La fonction strtok sert à découper une chaîne en morceaux. La coupure se fait au niveau des espaces.

Classiquement, on fait un premier strtok pour extraire la commande de la ligne saisie par le joueur.
Ensuite, en fonction des commandes, on peut faire d'autre strotk pour extraire les paramètres de la commande.
Mais la fonction strtok renvoie TOUJOURS une chaîne sans espace.

Dans ton cas, la ligne saisie contient plusieurs espaces (exemple : "/asay Le texte a affiché").
Le premier strtok (fait au début de OnPlayerCommandText et commun à toutes les commandes) renvoie la chaîne "/asay" qui correspond à la commande saisie. Jusqu'ici, tout est correct.
Dans le code de ta commande /asay, tu fais un deuxième strtok qui lui va renvoyer le morceau suivant ("Le" si on reprend l'exemple précédent). C'est ce morceau qui sera affiché et ce morceau seulement.

Pour corriger ton problème, il ne faut pas faire de strtok mais dire au serveur qu'il affiche à partir du caractère suivant l'espace qui se trouve juste après la commande.
La fonction strtok met à jour la variable idx en lui affectant l'index du premier caractère du prochain morceau. Dans ton cas, idx correspond donc au premier caractère de la chaîne que tu veux afficher.

Il suffit donc de remplacer la ligne
result = strtok(cmdtext, idx);par
format (result, 128, "%s", cmdtext[idx]);et le tour est joué.

NB : L'appel à format permet de copier le contenu de cmdtext à partir du caractère pointé par idx dans result.

++
Syg

Courtesy of GtaManiac

Hors ligne Mystik

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Probleme
« Réponse #2 le: 28 Avril 2009, 11:42:56 »
Bonjour Syg,

J'aimerais te parler en MP mais c'est impossible, comment je peux faire ? C'est assez important et privé.

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Probleme
« Réponse #3 le: 28 Avril 2009, 11:54:02 »
Si tu peux, tu va sur son profil, et en bas tu fait envoyer un message personnel.

++
nikko

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme
« Réponse #4 le: 28 Avril 2009, 17:15:29 »
Je suis très rarement sur MSN (sinon, j'ai tellement de sollicitations que j'y passe des heures).
Le mieux c'est de m'envoyer un message privé sur ce forum (comme te l'as indiqué Nikko), j'y répond toujours.

++
Syg
Courtesy of GtaManiac