• 20 Mai 2024, 17:42:04


Auteur Sujet: [COMMANDE] Unknow Commande  (Lu 1642 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne asto63

  • *
  • Nouveau
  • Messages: 6
    • Voir le profil
[COMMANDE] Unknow Commande
« le: 25 Décembre 2013, 21:20:40 »
Salut,
J'ai un petit problème, j'ai créer une commande qui donne sur des sous-commandes:

if(strcmp(cmdtext, "/devenir", true) == 0)
{
subcmd = strtok(cmdtext, idx);
if( !strlen(subcmd) )
{
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} /devenir <nom>");
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} (mem)bre, (help)eur, (mod)erateur, (admin)istrateur");
return 1;
}
else if(strcmp(subcmd, "mem", true) == 0 || strlen(subcmd, "membre", true) == 0)
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous êtes déjà membre.");
}
else
{
    UserInformation[playerid] == USER_MEMBER;
    SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais membre ! ");
}
}
else if(strcmp(subcmd, "help", true) == 0 || strlen(subcmd, "helpeur", true) == 0)
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas les droits nécessaire pour executer cela.");
}
else
{
UserInformation[playerid] == USER_HELPEUR;
SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais Helpeur !");
}
}
return 1;
}
Et lorsque l'on fait:
/devenir helpeur ou /devenir help
Sa fait un Unknow Command !

Help pliz ! (Tout le code marche sauf la sous-commande)
Merci de votre futur aide.

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #1 le: 25 Décembre 2013, 23:11:24 »
Bonsoir, Joyeux Noël  :xmas_happy:
Mes changements effectués sont notés en commentaire. C'est la manière que j'aurai utilisé pour faire ça... Je n'ai pas compilé je ne sais pas si cela fonctionne. Bonne soirée  :biggrin:


Code: (pawn) [Sélectionner]
if(strcmp(cmdtext, "/devenir", true) == 0)
{
subcmd = strtok(cmdtext, idx); // ça, je supprime.
if( !strlen(cmdtext) ) // Remplacement subcmd -> cmdtext
{
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} /devenir <nom>");
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} (mem)bre, (help)eur, (mod)erateur, (admin)istrateur");
return 1;
}
else if(strcmp(cmdtext, "mem", true) == 0 || strlen(cmdtext, "membre", true) == 0) // Remplacement subcmd -> cmdtext
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous êtes déjà membre.");
}
else
{
    UserInformation[playerid] == USER_MEMBER;
    SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais membre ! ");
}
}
else if(strcmp(cmdtext, "help", true) == 0 || strlen(cmdtext, "helpeur", true) == 0) // Remplacement subcmd -> cmdtext
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas les droits nécessaire pour executer cela.");
}
else
{
UserInformation[playerid] == USER_HELPEUR;
SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais Helpeur !");
}
}
return 1;
}

Edit: Je viens de penser, il serait peut-être judicieux d'utiliser strfind pour vérifier si la commande contient (ou non) tel ou tel mot.  :smile:


Adju ♥
(-_-)



Hors ligne asto63

  • *
  • Nouveau
  • Messages: 6
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #2 le: 25 Décembre 2013, 23:26:16 »
Sa ne marche pas :s

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #3 le: 26 Décembre 2013, 00:56:17 »
Montre moi le code après modifications stp


Adju ♥
(-_-)



Hors ligne asto63

  • *
  • Nouveau
  • Messages: 6
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #4 le: 26 Décembre 2013, 11:24:22 »
     if(strcmp(cmdtext, "/devenir", true) == 0)
        {
                if( !strlen(cmdtext) )
                {
                        SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} /devenir <nom>");
                        SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} (mem)bre, (help)eur, (mod)erateur, (admin)istrateur");
                        return 1;
                }
                else if(strcmp(cmdtext, "mem", true) == 0 || strlen(cmdtext, "membre", true) == 0)
                {
                    if(UserInformation[playerid] == USER_MEMBER)
                    {
                        SendClientMessage(playerid, COLOR_ERROR, "Vous êtes déjà membre.");
                        }
                        else
                        {
                            UserInformation[playerid] == USER_MEMBER;
                            SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais membre ! ");
                        }
                }
                else if(strcmp(cmdtext, "help", true) == 0 || strlen(cmdtext, "helpeur", true) == 0)
                {
                    if(UserInformation[playerid] == USER_MEMBER)
                    {
                        SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas les droits nécessaire pour executer cela.");
                        }
                        else
                        {
                                UserInformation[playerid] == USER_HELPEUR;
                                SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais Helpeur !");
                        }
                }
        return 1;
        }

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #5 le: 26 Décembre 2013, 14:16:14 »
Je t'ai demandé de remplacer par strfind au cas où ça ne fonctionnerai pas ^^


Adju ♥
(-_-)



Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #6 le: 27 Décembre 2013, 00:38:11 »
Pourquoi tu utilses STRLEN pour comparer ? Ô_Ô
Citer
else if(strcmp(cmdtext, "help", true) == 0 || strlen(cmdtext, "helpeur", true) == 0)
strlen permet d'obtenir la taille d'une chaîne et non pas de comparer
http://wiki.sa-mp.com/wiki/Strlen_FR

[/url]

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [COMMANDE] Unknow Commande
« Réponse #7 le: 27 Décembre 2013, 15:01:00 »
Salut,

attention, j'ai vu quelques petits problèmes.

Si on reprend la commande originale:

if(strcmp(cmdtext, "/devenir", true) == 0)
{
subcmd = strtok(cmdtext, idx);
if( !strlen(subcmd) )
{
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} /devenir <nom>");
SendClientMessage(playerid, COLOR_RED, "[UTILISATION]{0xFF4500FF} (mem)bre, (help)eur, (mod)erateur, (admin)istrateur");
return 1;
}
else if(strcmp(subcmd, "mem", true) == 0 || strlen(subcmd, "membre", true) == 0)
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous êtes déjà membre.");
}
else
{
    UserInformation[playerid] == USER_MEMBER;
    SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais membre ! ");
}
}
else if(strcmp(subcmd, "help", true) == 0 || strlen(subcmd, "helpeur", true) == 0)
{
    if(UserInformation[playerid] == USER_MEMBER)
    {
        SendClientMessage(playerid, COLOR_ERROR, "Vous n'avez pas les droits nécessaire pour executer cela.");
}
else
{
UserInformation[playerid] == USER_HELPEUR;
SendClientMessage(playerid, COLOR_GREEN, "Vous êtes désormais Helpeur !");
}
}
return 1;
}

Es-ce que ton OnPlayerCommandText commence avec un strtok?

La façon de fonctionner de strtok est très simple, elle va chercher le enieme mot dans le texte.
Si tu as fait un strtok auparavant, elle ira chercher le second terme.
Sinon, elle ira chercher le premier terme (soit «/devenir»).
Attention, si tu utilise strtok dans tout ton système de commande sache que ce n'est pas vraiment le meilleur système (tendance à faire des erreurs (dans le code), risque au niveau des dimensions des array etc...).

Petit conseil:
Si tu as peut de commande et voudrait bien te lancer dans une petite amélioration de ton script, tu pourrais essayer de passer ton code en YCMD ou ZCMD qui sont très bons (ZCMD un peu plus simple pour toi).

Si tu ne veut pas passer avec un tel système de commande, j'aurais tendance à faire ainsi:

if(strcmp(cmdtext[1], "devenir", true, 7) == 0) //(on ne vérifie pas le premier caractère que l'on sait être "/"
    {
        format(subcmd, size(subcmd), cmdtext[9]); // on copie à partir du 9e caratère qui est la première lettre du second mot ('/0' si aucun mot normalement)
        if(strlen(subcmd) < 3) // tout texte de moins de 3 caractère sera trop court
        {
            ........
        }
        else if(strcmp(subcmd, "mem", true) == 0 || strcmp(subcmd, "membre", true) == 0)
        {
            ...............
        }
        ........
        return 1;
    }

Voilà, ça devrait fonctionner pour remplacer ta façon de faire et c'est plus rapide.
Toutefois, c'est moins compréhensible, si tu veut tu peut changer le cmdtext[1] en cmdtext, il faut alors mettre "/devenir" et 8 pour la longueur au lieu de 7.

merci et bonne chance

++Sim++