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:
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++