• 23 Avril 2025, 07:52:48


Auteur Sujet: Compréhension commande  (Lu 796 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Compréhension commande
« le: 30 Octobre 2011, 14:06:59 »
Bonjour,

J'essaye de créer un cmd "/skin [ID]", elle marche mais j'arrive pas trop à comprendre comment ça marche, j'ai quelques questions :

- Pourquoi créer une variable cmd ?
- Que fait "strcmp(cmd, "/skin")"
- A quoi sert idx.

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128];
new idx;
cmd = strtok(cmdtext, idx);
////////////////////////////////////////////////////////////////////////////////
if (strcmp(cmd, "/skin", true) == 0)
{
   new tmp[128];
   tmp = strtok(cmdtext, idx);
   
   if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFF0000FF, "USAGE: /skin [ID]");
return 1;
}

if(!strval(tmp)) {
           SendClientMessage(playerid, 0xFF0000FF, "USAGE: /skin [ID]");
return 1;
}

if(strval(tmp)) {
SetPlayerSkin(playerid, strval(tmp));
   }
return 1;
}


Merci d'avance !
« Modifié: 30 Octobre 2011, 15:18:11 par Ashley11 »

Hors ligne Sunaxx

  • *
  • Nouveau
  • Messages: 14
    • Voir le profil
Re : Compréhension commande
« Réponse #1 le: 30 Octobre 2011, 18:14:48 »
Bonsoir,

1) Comme indiqué dans ton script cmd veut dire strtok(cmdtext, idx), il peut être  écrit aussi sous cette forme  :


if (strcmp(strtok(cmdtext, idx, "/skin", true) == 0)


2) bah.. tout les commandes commencent avec ce code..

3) idx = id du skin.  ;)

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : Compréhension commande
« Réponse #2 le: 30 Octobre 2011, 18:28:02 »
Merci,

Mais mais tu répond pas tout à fait à ma 1ère question, et à la deuxiéme, d'autre commence par :

("/cmd", cmdtext, true) // Ici pas de "cmd" en vu 

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Compréhension commande
« Réponse #3 le: 31 Octobre 2011, 01:56:31 »
@Sunaxx: Il n'est pas possible d'utiliser la fonction strtok de cette façon, il suffit simplement de lire le prototype de la fonction pour comprendre pourquoi.

strtok(const string[], &index);
Des affirmations tel que celle-ci pourrait mettre en doute les connaissances de quelques personnes (comme Ashley11 par exemple) mais qui se montre totalement fausse dès la première vérification, je te demanderai donc de ne pas te précipiter pour répondre par des affirmation complètement fausse.

Je salue ta participation, mais il ne faut pas que ça soit une intervention fausse.

vincentdu90

  • Invité
Re : Compréhension commande
« Réponse #4 le: 31 Octobre 2011, 21:24:24 »
Bonjour Ashley11 ,

Je vais essayer de répondre au mieux à tes questions .

    Tout d'abord on peut remarqué que dans le code on affecte la valeur :strtok(cmdtext , idx); à la variable "cmd" .
En fait ici , la variable est crée pour pouvoir récupérer la valeur que retourne la fonction "strtok()" qui sert justement à récupérer ce que le joueur à taper après le slash ("/") .

    Puis une fois ces données récupérer on les compare à la valeur "/kick" à l'aide de la commande "strcmp()".
En effet , la fonction va comparer ce qu'on à récupérer avec ce qui se trouve entre les " " (guillemets) , qui correspond à ta commande , et si les deux sont similaires la fonction retourne 0 , d'où le "== 0" à la fin .

    Quand à la variable "idx" , c'est seulement un paramètre de la fonction "strtok" qui vaut zéro puisqu'on ne lui a affecté aucune valeur . C'est un peu plus complexe à expliquer car ça joue un rôle dans la structure de la fonction qui comporte en fait une boucle (même plusieurs) qui va faire avancer un "curseur" ,si on peut dire, jusqu'à la fin de la commande pour récupérer tout ce que le joueur à tapé .
C'est pour ça que je t'invite à visiter le Wiki Sa-Mp . => Ici
 

Si je ne me trompes pas c'est un peu près ça .

++Vincent
« Modifié: 31 Octobre 2011, 23:27:56 par vincentdu90 »