• 05 Juin 2026, 14:59:37


Auteur Sujet: De l'aide ?  (Lu 1773 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
De l'aide ?
« le: 05 Décembre 2010, 15:02:16 »
Bonjour j'ai créer une commande /kill
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xA60000FF, "Vous vous êtes tué.");

return 1;
}
return 0;
}

Elle marche très bien mais j'aimerais savoir comment créer une autre commande à la suite ?
Exemple celle là.
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xA60000FF, "Vous vous êtes tué.");

return 1;
}
return 0;
}
avec celle-là ?
{
if (strcmp("/equip", cmdtext, true, 10) == 0)
{
GivePlayerWeapon(playerid,31,5050);
        GivePlayerWeapon(playerid,27,5007);
SendClientMessage(playerid, 0xA60000FF, "[Commande réussite]");

return 1;
}
return 0;
}

Merci de bien vouloir m'aidez SVP.
Nippah !

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : De l'aide ?
« Réponse #1 le: 05 Décembre 2010, 15:07:44 »
Salut !

Code: (pawn) [Sélectionner]
{
if (strcmp("/equip", cmdtext, true, 10) == 0)
{
GivePlayerWeapon(playerid,31,5050);
       GivePlayerWeapon(playerid,27,5007);
SendClientMessage(playerid, 0xA60000FF, "[Commande réussite]");

return 1;
}
return 0;
}

et

Code: (pawn) [Sélectionner]
{
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xA60000FF, "Vous vous êtes tué.");

return 1;
}
return 0;
}

Il y a un truc à savoir : return 0; et un code qui termine les commandes mais 1 seul suffis alors fais t'es commande comme ça :

Code: (pawn) [Sélectionner]
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xA60000FF, "Vous vous êtes tué.");

return 1;
}
if (strcmp("/equip", cmdtext, true, 10) == 0)
{
GivePlayerWeapon(playerid,31,5050);
       GivePlayerWeapon(playerid,27,5007);
SendClientMessage(playerid, 0xA60000FF, "[Commande réussite]");

return 1;
}
return 0;
}
Enfaite dès qu'il y a "}" à la fin d'un code passe une ligne et re-fais une commande.
« Modifié: 05 Décembre 2010, 15:09:21 par Julien62430 »

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : De l'aide ?
« Réponse #2 le: 05 Décembre 2010, 15:09:22 »
Je test ça de suite merci de t'es conseilles !

Double post
Ca marche impec' now je vais pouvoir faire des commande à la suite merci beaucoup.
++ Xolokos
« Modifié: 05 Décembre 2010, 15:11:04 par Xolokos »
Nippah !

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : De l'aide ?
« Réponse #3 le: 05 Décembre 2010, 15:12:00 »
Si il y a une erreur dis le mais normalement il n'y en a pas.

Karting06

  • Invité
Re : De l'aide ?
« Réponse #4 le: 05 Décembre 2010, 15:12:14 »
Euh? Je comprends pas y avait quand même rien à faire?!

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : De l'aide ?
« Réponse #5 le: 05 Décembre 2010, 15:17:39 »
Je disait que ça marche et grâce a cela je vais pouvoir créer des commande a la place dans faire qu'une seul dans un GM, donc merci à vous.
Nippah !

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : De l'aide ?
« Réponse #6 le: 05 Décembre 2010, 15:36:50 »
Le mieux est de continuer la condition en utilisant else if.

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xA60000FF, "Vous vous êtes tué.");

return 1;
}
else if (strcmp("/equip", cmdtext, true, 10) == 0)
{
GivePlayerWeapon(playerid,31,5050);
GivePlayerWeapon(playerid,27,5007);
SendClientMessage(playerid, 0xA60000FF, "[Commande réussite]");

return 1;
}
return 0;
}

Et également, il faudrait donner un titre plus précis, sinon, tu ne respecte pas les règles de la section !

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : De l'aide ?
« Réponse #7 le: 05 Décembre 2010, 16:12:15 »
D'acord excusez moi alors.
Nippah !

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : De l'aide ?
« Réponse #8 le: 05 Décembre 2010, 16:28:48 »
Sinon tu peux utiliser zcmd, qui est plus simple à déclarer ;)

CMD:kill(playerid,params[])
{
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,0xFF0000FF,"Vous vous êtes tué !");
return 1;
}

Il faut utiliser une include qui s'appelle zcmd, regarde le tutoriel "Commandes rapides" de FuSion.

++

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : De l'aide ?
« Réponse #9 le: 05 Décembre 2010, 16:36:30 »
Il est nouveau dans le Pawno, commencer pas a l'embrouiller

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Re : De l'aide ?
« Réponse #10 le: 05 Décembre 2010, 16:39:00 »
Il est nouveau dans le Pawno, commencer pas a l'embrouiller

zcmd est beaucoup plus simple que strcmp (enfin, plus rapide).
Si il ne comprend pas le code, il peut demander de l'aide :P
++

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : De l'aide ?
« Réponse #11 le: 05 Décembre 2010, 16:53:43 »
Citer
Il est nouveau dans le Pawno, commencer pas a l'embrouiller
Il a pas tord  :D
Je vais voir commande rapide...
Nippah !

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : De l'aide ?
« Réponse #12 le: 05 Décembre 2010, 18:00:56 »
Salut,

Xokolos, change le nom de ton topic s'il te plait (fonction modifier sur le premier post), sinon je vais devoir le  :lock.

Pour les systèmes de commandes, il faut comprendre que certains sont plus efficace (enfin utilisé normalement):

Du meilleur au pire:

  • Zcmd
  • dcmd
  • strcmp

On ne dit pas nécessairement que si tu as une ou deux commandes, zcmd sera plus rapide. Toutefois, au fur et à mesure que tu ajoute de nouvelles commandes, la quantité de calcul augmente:

 - strcmp: de façon linéaire, 2 fois plus de commandes = 2 fois plus de calcul (enfin c'est presque ça, ce n'est pas tout à fait exact)
 - dcmd : utilise strcmp, donc... de façon linéaire
 - zcmd : o(0) -> c'est à dire que le nombre de commande a pratiquement aucune influence sur la quantité de calcul, du moins sur le temps. Cet avantage vient du fait qu'il utilise l'appel de fonctions locales pour gérer la commande, pas de comparaison de string. Il utilise le système native du PAWN, qui est bien mieux fait que tout ce que nous pourrons faire.

Ensuite, au niveau de l'utilisation:

STRCMP:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/macommande", cmdtext, true, nombre_de_charactere_de_la_commande) == 0)
    {
        .....//gestion des paramètres relativement difficile avec strtok
        return 1;
    }
}

OU:

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[128], idx = 0;
    cmd = strtok(cmdtext, idx);//avec version commune de strtok
    if(strcmp("/macommande", cmd, true) == 0)
    {
        .....//gestion des paramètres moyenne avec strtok
        return 1;
    }
}
On peut toujours utiliser sscanf pour les paramètres, mais il en reste toujours que c'est moins interessant, de plus ces commandes doivent être regroupées, on ne peut les placer où l'on veut dans le script.

DCMD:

public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(macommande, NOMBRE_DE_CARACTERE, cmdtext);
    ...//autres commandes
    return 1;
}


ailleurs dans le script:
dcmd:macommande(playerid, params[])
{
    //code avec les paramètres etc... déjà plus facile, avec séparation commande - paramètres effectuée
    return 1;
}

Cette méthode est généralement plus rapide, elle comporte toutefois certains désavantages:
Parmis ses défauts, ne nommons que:
Doit faire la liste des commandes, et compter le nombre de caractères.
Doit ajouter #pragma unused params si la commande n'a pas de paramètres

ZCMD:
ZCMD:macommande(playerid, params[])
{
    //traitement des paramètres
    ....
    return 1;
}

Déjà, vous pouvez remarquer que ce système est le plus rapide à utiliser, il ne demande que la création de la fonction de la commande.
Aucun besoin de toucher à OnPlayerCommandText, le code est court, pas de problèmes de params inutilisé (cette correction vient du fait que la fonction est désormais public).
Aucun besoin de faire une liste des commandes non plus.
Vous disposez également de 2 nouvelles callbacks afin d'assurer la flexibilité du système.
Une qui est appelée après l'exécution de la commande, permettant entre autre de savoir si elle est réussi.
L'autre avant l'exécution, permet de bloquer les commandes, par exemple.

Voilà, je pense avoir abordé les principaux avantages/désavantages des 3 systèmes. Toutefois, comme je suis vendu à zcmd d'avance, il se peut que je ne sois pas tout à fait impartial.

Il existe aussi un autre système qui peut être interessant, la nouvelle version de y_cmd par Y_LESS.

PS. je n'ai donné aucun lien, une petite recherche sur google ou le forum officiel de sa-mp fera l'affaire

++Sim++