GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Ashley11 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 !
-
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. ;)
-
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
-
@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.
-
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 (http://wiki.sa-mp.com/wiki/Strtok)
Si je ne me trompes pas c'est un peu près ça .
++Vincent