• 22 Avril 2025, 00:10:07


Auteur Sujet: Les petits galères de l'agent K.  (Lu 1291 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Kreys

  • © K. - Le rêveur
  • *
  • Nouveau
  • K. pour le meilleur et surtout pour le pire.
  • Messages: 18
    • Voir le profil
Les petits galères de l'agent K.
« le: 11 Juillet 2013, 17:27:44 »
Bonjour tout le monde !
Donc j'apprend à scripter en pawn et...je galère.
Même si je fais le plus de recherches possible afin de trouver les solutions et les résoudre par moi-même, parfis je bloque et...je poste ici.
Arrivant à la conclusion que ça m'arriverais plusieurs fois, je me suis dit qu'il serait judicieux de faire un seul poste, plutot qu'un poste à chaque problème.
Bien-sûr, si ça vous fait ch*** de m'aider, dites-le y'a pas de problèmes  :tongue:

Donc là j'ai un petit problème de commandes.
J'ai téléchargé un FS "X-Administration" dont la callback des commandes fini par "return SendErrorMessage(blabla)".
J'ai également mit des commandes dans mon GM (normal) sauf que j'ai l'impréssion que c'est pas lu, car quand je tape la commande de mon GM, ça me met le SendClientMessage du return du FS, j'en déduit donc que les commandes du GM ne sont pas lues ? Je fais comment pour qu'elle soit prises en comptes ? Return 0; ?

Merci beaucoup,
Kreyz.

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Les petits galères de l'agent K.
« Réponse #1 le: 11 Juillet 2013, 18:16:24 »
Il faudrait que tu nous montres le code source, ou en tout cas la structure. Si la callback utilise un return de message d'erreur, alors tu dois dans tes commandes préciser qu'il faut sortir de la callback avec, par exemple, un return true; (ou return 1;, c'est identique). Ainsi, le return de la callback ne sera pas lu (puisque le tiens sera arrivé avant).

Pour rendre ça un peu plus clair, voici un petit schéma :

Code: (pawn) [Sélectionner]
public UneCallback(...)
{
    if(commande1)
    {
        Blabla, commande 1
        return PAS_ERREUR:
    }

    if(commande2)
    {
        Blabla, commande 2
    }

    return ERREUR;
}

Si la commande est la première, le retour de valeur indique qu'il n'y a pas d'erreur. C'est parfait. Par contre, dans le cas de la seconde, comme la condition ne renvoi strictement rien, le script passe au return de la callback... qui indique une erreur. Tu cernes le principe ?

Désolé si c'est pas très clair, j'espère quand même que tu vois où je veux en venir.

Hors ligne Kreys

  • © K. - Le rêveur
  • *
  • Nouveau
  • K. pour le meilleur et surtout pour le pire.
  • Messages: 18
    • Voir le profil
Re : Les petits galères de l'agent K.
« Réponse #2 le: 11 Juillet 2013, 19:33:38 »
Merci, t'a été clair, mais il semblerais que c'est moi qui ne l'a pas été dans ma question :P J'ai bien compris le système des returns (enfin je crois :P)
Je ré-explique:

J'ai dans mon FS la callback OnPlayerCommandText avec plusieurs commandes dedans, qui marchent. Cettte callback se termine par : "return SendClientMessage(playerid, color_rouge, "Commande inconnue. /aide.");
Dans mon GM, ma callback OnPlayerCommandText se terminé par return SendClientMessage(playerid, color_rouge, "[ERREUR] Commande inconnus");
Quand je tape une commande qu'est dans mon FS, ça marche, mais quand je tape une commande qu'est dans mon GM, ça me revoit le SendClientMessage(playerid, color_rouge, "Commande inconnue. /aide."); du FS donc. Je pense qu'à la place du message d'erreur à la fin du FS faudrait plutot dire "va voir dans le GM si la commande n'y est pas".
Tu m'a compris ? :P

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Les petits galères de l'agent K.
« Réponse #3 le: 12 Juillet 2013, 03:54:40 »
Bonjour Kreys,

en fait ton problème est bien simple:

Dans la callback OnPlayerCommandText, dès qu'un script retourne la valeur 1 c'est qu'une commande a été exécutée et donc le serveur ne vas pas voir dans les scripts suivants. De plus, les filterscripts passent avant le gamemode. La fonction SendErrorMessage renvoie 1. Donc, dès qu'une commande ou non du filterscript est exécuté, le serveur ne vas pas voir plus loin dans le code.

Pour régler ton problème:
Remplace le return SendErrorMessage .... dans le filterscript par return 0.

Lorsqu'au contraire la callback retourne 0, cela indique au serveur qu'aucune commande n'a été exécuté et qu'il doit poursuive son exécution des scripts suivants.

Bonne chance.

++Sim++