GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Xolokos 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.
-
Salut !
{
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
{
{
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 :
{
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.
-
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
-
Si il y a une erreur dis le mais normalement il n'y en a pas.
-
Euh? Je comprends pas y avait quand même rien à faire?!
-
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.
-
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 !
-
D'acord excusez moi alors.
-
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.
++
-
Il est nouveau dans le Pawno, commencer pas a l'embrouiller
-
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
++
-
Il est nouveau dans le Pawno, commencer pas a l'embrouiller
Il a pas tord :D
Je vais voir commande rapide...
-
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++