GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: remy69400 le 24 Juin 2011, 11:45:12

Titre: Problème création fonction /kick
Posté par: remy69400 le 24 Juin 2011, 11:45:12
Bonjour  à toute la communauté avant tout,

Je script depuis très très peu de temps et je me suis attaqué à la création des commandesdu type /kick [id], /skin [id].

Après de nombreuse rechercher sur je me suis résolu à faire un copier-coller de wiki pour la cmd /kick.
Je l'ai donc donc intégré  à mon code.
Hélas j'ai tout de même réussi a avoir des erreurs que je n'arrive pas à résoudre, même après de longue recherches où je retrouve ce problème mais pas la solution.

Voici le lien de mon OnPlayerCommandText: http://pastebin.gtaonline.fr/pastebin.php?show=1117 (http://pastebin.gtaonline.fr/pastebin.php?show=1117)

Voici le haut de mon script si ça peut aider: http://pastebin.gtaonline.fr/pastebin.php?show=1118 (http://pastebin.gtaonline.fr/pastebin.php?show=1118)

Voici le message d'erreur: http://pastebin.gtaonline.fr/pastebin.php?show=1120 (http://pastebin.gtaonline.fr/pastebin.php?show=1120)

Je vous serais très reconnaissant d'une aide si possible,
bien à vous,
Remy.
Titre: Re : Problème création fonction /kick
Posté par: Gilux le 24 Juin 2011, 12:07:42
Salut,
As-tu bien copié la fonction strtok quelque part dans ton script ?
++
Titre: Re : Problème création fonction /kick
Posté par: remy69400 le 24 Juin 2011, 12:23:25
Les deux seules fois où fonction strtok est présente dans mon script, c'est dans cette partie du script : http://pastebin.gtaonline.fr/pastebin.php?show=1117
 (http://pastebin.gtaonline.fr/pastebin.php?show=1117)

Il n'y a qu'ici que l'on trouve la fonction strtok dans mon script.
Titre: Re : Problème création fonction /kick
Posté par: Gilux le 24 Juin 2011, 12:29:01
Oui, mais ta fonction strtok ne fait pas partie de <a_samp> !

Moi je te parle de ça :

<?php // Ne copie pas ça (Coloration du code)

strtok(const string[], &index)
{
new length strlen(string);
while ((index length) && (string[index] <= ' '))
{
index++;
}
 
new offset index;
new result[20];
while ((index length) && (string[index] > ' ') && ((index offset) < (sizeof(result) - 1)))
{
result[index offset] = string[index];
index++;
}
result[index offset] = EOS;
return result;
}

Ce bout de code déclare la fonction strtok.
Tu dois mettre celui-ci en bas de ton script, hors de toute callback.
(Regarde mon tuto, chapitre 3 pour comprendre le principe de créer ses fonctions ;) )
++
Titre: Re : Problème création fonction /kick
Posté par: remy69400 le 24 Juin 2011, 12:33:08
D'accord, je pensais en effet qu'elle était intégrée à une des directives.
Je te remercie, et repasserai à nouveau dans ton tuto (sacré tuto d'ailleur ;))

Résolu.
Titre: Re : Problème création fonction /kick
Posté par: Gilux le 24 Juin 2011, 12:37:12
Merci  ;)

D'ailleurs, tu pourrais te simplifier la tâche en utilisant sscanf et zcmd qui sont plus simples à utiliser :P
Regarde du côté du tuto de FuSion pour en savoir plus ;)
++
Titre: Re : Problème création fonction /kick
Posté par: Aegoss le 24 Juin 2011, 12:52:58
Merci d'aller te présenter et lire le topic de règlement.

Bonne journée :)
Titre: Re : Re : Problème création fonction /kick
Posté par: Gilux le 24 Juin 2011, 12:58:37
et lire le topic de règlement.

Bonne journée :)

Je ne vois pas où il n'a pas respecté le règlement  :happy
Titre: Re : Problème création fonction /kick
Posté par: remy69400 le 24 Juin 2011, 14:09:34
Je viens d'aller le lire en effet, je vois pas non plus :O

J'avais une autre question concernant le fameux "strtok", et autant la poser là plutot que créer un nouveau topic, non ? :)
J'aurai aimé savoir à quoi correspond exactement sa fonction ? J'ai lu deux, trois chose dessus sans comprendre réellement sa fonction.

D'où cette lige que je ne comprend pas:

strtok(cmdtext, idx);
Si c'était possible de me l'expliquer en détail ? :P C'est uniquement par curiosité car je vais par là suite utiliser la tuto de Fusion.
Merci à toi.
Titre: Re : Problème création fonction /kick
Posté par: Gilux le 24 Juin 2011, 14:20:12
J'ai toujours eu du mal avec ça...
Si j'ai bien compris (Si quelqu'un peut me corriger au cas où), strtok "sépare" le texte de la commande en 2 (ou plus) dès qu'il y a un espace, et retourne ce qu'il y a écrit après. (Un peu comme split(); sur IV:MP)

Donc normalement, si la commande est /kick [ID], strtok retournera [ID].

Mais comme le wiki SA:MP le dit, cette fonction est obsolète et elle doit être utilisée le moins possible. Pourtant... Je vois très peu de GM/FS codés avec sscanf qui est plus compliqué au début, mais qui après même pas 1h de pratique devient très simple.

Et en plus, sscanf et zcmd permettent de réduire le nombre de lignes :

Code: (Pawn (strtok)) [Sélectionner]
if(strcmp(cmd, "/kick", true) == 0)
{
new tmp[128];
tmp = strtok(cmdtext, idx);
 
if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /kick [playerid]");
 
Kick(strval(tmp));
return 1;
}
Code: (Pawn(Zcmd/sscanf)) [Sélectionner]
CMD:kick(playerid,params[])
{
     new pid;
     if(sscanf(params,i,pid)) return SendClientMessage(playerid,0xFFFFFFFF, "USAGE: /kick [playerid]");
     else
     {
          Kick(pid);
     }
     return 1;
}

(Pour 1 paramètre, même longueur, mais si on veut ajouter un paramètre "Raison" par exemple, alors là il y a pas photo  :happy)

++
Titre: Re : Re : Problème création fonction /kick
Posté par: Aegoss le 24 Juin 2011, 14:41:44
Je viens d'aller le lire en effet, je vois pas non plus :O

J'avais une autre question concernant le fameux "strtok", et autant la poser là plutot que créer un nouveau topic, non ? :)
J'aurai aimé savoir à quoi correspond exactement sa fonction ? J'ai lu deux, trois chose dessus sans comprendre réellement sa fonction.

D'où cette lige que je ne comprend pas:

strtok(cmdtext, idx);
Si c'était possible de me l'expliquer en détail ? :P C'est uniquement par curiosité car je vais par là suite utiliser la tuto de Fusion.
Merci à toi.

Ça fait simplement parti des choses à faire quand on arrive sur un forum.