GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: asto63 le 25 Octobre 2013, 16:05:09
-
Salut, j'aurais besoin d'aide pour pouvoir créer une sous-commande?
Voici mon code déjà fait:
Mes includes:
Le code:
if(strcmp(cmdtext, "/police", true) == 0 || strcmp(cmdtext, "/pol", true) == 0)
{
subcmd = strtok(cmdtext, idx);
if(gTeam[playerid] = TEAM_POLICE)
{
SendClientMessage(playerid,C_TEAM_POLICE,"[INFO]Vous n'appartenez pas à la Police.");
}
if(!strlen(subcmd))
{
SendClientMessage(playerid, C_USAGE, "{FF6600}[Action]{99EEFF} /(pol)ice <nom>");
}
return 1;
}
Et sa me dit ces erreurs:
C:\Users\utilisateur\****\***\*****\***\gamemodes\GM2.pwn(662) : error 017: undefined symbol "cmd"
C:\Users\utilisateur\****\***\*****\***\gamemodes\GM2.pwn(664) : error 017: undefined symbol "subcmd"
C:\Users\utilisateur****\***\*****\***\gamemodes\GM2.pwn(664) : error 017: undefined symbol "idx"
C:\Users\utilisateur\****\***\*****\***\gamemodes\GM2.pwn(670) : error 017: undefined symbol "subcmd"
Je ne sais pas comment faire pour régler ce problème.
-
Salut, tes erreurs disent que tu n'as pas crée les variables cmd, idx, etc...
Donc crée-les ^^ (pas dans une commande, dans la callback directement)
new cmd[128], idx, subcmd[128];
(Pour les [128] je ne suis pas sûr: si ça te met une erreur, essaie de les enlever)
PS: pour une si petite commande tu prends beaucoup de place, regarde ce que je ferais moi à ta place :
if(!strcmp(cmdtext, "/police", true)||!strcmp(cmdtext, "/pol", true))
{
subcmd = strtok(cmdtext, idx);
if(gTeam[playerid] = TEAM_POLICE) return SendClientMessage(playerid,C_TEAM_POLICE,"[INFO]Vous n'appartenez pas à la Police.");
if(!strlen(subcmd)) return SendClientMessage(playerid, C_USAGE, "{FF6600}[Action]{99EEFF} /(pol)ice <nom>");
//Tout est correct, tu peux effectuer l'action désirée
return 1;
}
PPS: Utilise la balise [ code ] [ / code ] (sans les espaces) pour montrer tes codes, et si c'est du pawn utilise [ code = pawn ] [ / code ] (Toujours sans les espaces)
-
Une erreur:
gamemodes\GM2.pwn(814) : error 047: array sizes do not match, or destination array is too small
Ligne 814:
subcmd = strtok(cmdtext, idx);
-
Tu modifies la valeur d'une chaîne de caractère d'une très mauvaise façon. Le signe égal suivi de la valeur n'est possible qu'à l'initialisation de la variable, lors de sa création.
-
Tu modifies la valeur d'une chaîne de caractère d'une très mauvaise façon. Le signe égal suivi de la valeur n'est possible qu'à l'initialisation de la variable, lors de sa création.
Donc tu voudrais qu'il fasse new cmd=strtok(cmdtext, idx) ?
Si oui le souci est le suivant:
error 008: must be a constant expression; assumed zero
Une erreur:
gamemodes\GM2.pwn(814) : error 047: array sizes do not match, or destination array is too small
Ligne 814:
subcmd = strtok(cmdtext, idx);
Est-tu bien sûr d'avoir mit [128] ? Si oui, essaie de monter à [256] voir plus (mais pas trop)
Et en cas où ça ne marche toujours pas, je ne sais rien du tout d'autre :/
-
Pas forcément, mais la fonction strcmp est plus appropriée pour modifier une chaîne après la déclaration.
-
Je vois mal comment tu peux modifier une chaîne avec une fonction de comparaison
En l'occurrence on ne veut pas modifier la chaîne mais récupérer le reste de la commande, et quand bien même on voudrait modifier en comparant, que veux-tu qu'on compare en sachant qu'on a pas le reste de la commande u_u (certes, suffit de remplacer /police par '' mais il débute, on va donc faire les choses simplement), le strtok est donc approprié lorsque l'on débute, comme dans le cas ici présent.
-
Toutes mes excuses, je me suis trompé de fonction ! À force de ne plus coder, on rouille... Je voulais parler de la fonction format (si je ne me trompe pas de nouveau). :biggrin:
-
Format, c'est correct pour modifier un string, mais quelle est le différence au juste ?
J'ai toujours fait variable=strtok(cmdtext, idx); et ça ne m'a jamais posé aucun problème personnellement ^^
-
Beh de tête, définir une valeur directement par le signe égal pour une chaîne de caractères ça ne fonctionne qu'à la déclaration, ensuite on utilise une fonction qui modifie la chaîne case par case... ? À moins que ça ne soit disponible en Pawn et que c'est un attribut propre au C, auquel cas je dois être complètement à côté de la plaque. :grin:
-
Résolue:
subcmd = strtok(cmdtext, idx);
// Transformer en:
#define subcmd strtok(cmdtext, idx);
Merci de l'aide