GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Boomerkuigi le 29 Novembre 2010, 16:46:05

Titre: [Conseil/Aides] Commandes
Posté par: Boomerkuigi le 29 Novembre 2010, 16:46:05
Bonsoir,
Pour creer des commandes j'ai vu qu'il y avait plusieurs methodes ,
ZCMD, DCMD, SSCANF .....
Voila j'aimerai savoir laquelle est la plus facile et si vous aurai un lien qui explique a merveille le fonctionnement de ce dernier, surtout sur les commandes multi parametres  avce different genre /commande [Float:_1] [Float:_2] [Float:_3] [String] [...]  , et si vous aurez un lien qui explique a merveille sa serai aussi bien ..
 Merci d'avance ..
Titre: Re : [Conseil] Commandes
Posté par: chneubeul le 29 Novembre 2010, 17:20:29
Salut :)

zcmd + sscanf :D

un tuto expliquand sscanf est sur gta online cherche commande rapide.

A+, Sam.
Titre: Re : [Conseil] Commandes
Posté par: Boomerkuigi le 30 Novembre 2010, 08:23:01
Quelqu'un pourrait m'aider avec cette commande :
***

 if(strcmp(cmd, "/sethp", true) == 0)
   {
        new tmp1[128], tmp2[128];
        tmp1 = strtok(cmd, idx);
        tmp2 = strtok(cmd, idx);

     if(!strlen(tmp1))
         {
            SendClientMessage(playerid, 0x555555AA, "Usage: /sethp <id> <hpamount>");
            return 1;
         }


     if(!strlen(tmp2))
         {
            SendClientMessage(playerid, 0x555555AA, "Usage: /sethp <id> <hpamount>");
            return 1;
         }

     new id, Float:hpamount;
     id = strval(tmp1);
     hpamount = strval(tmp2);

         if(!IsPlayerConnected(id))
         {
                SendClientMessage(playerid, 0xFF0000FF, "ERROR: Player not connected");
                return 1;
         }

            new name1[MAX_PLAYER_NAME], name2[MAX_PLAYER_NAME];
            new str1[128], str2[128];
            GetPlayerName(playerid, name1, sizeof(name2));
            GetPlayerName(id, name2, sizeof(name2));
            SetPlayerHealth(id, hpamount);
            format(str1, sizeof(str1), "%s(%d) has set your health to %f !", name1, playerid, hpamount);
            format(str2, sizeof(str2), "You have set %s's(%d) health to %f", name2, id, hpamount);
            SendClientMessage(id, 0xAAAADDAA, str1);
            SendClientMessage(playerid, 0x30EE3000, str2);
            return 1;
   }

Quoi que je fasse elle m'affiche toujours la meme chose : " Usage: /sethp <id> <hpamount> "
j'ai beau mettre des valeurs sa ne m'affiche rien !
*
Titre: Re : [Conseil/Aides] Commandes
Posté par: Jimmy_Krapovich le 30 Novembre 2010, 17:22:36
Salut toi =D

Tiens essaye sa, sa pourrais t'aidé:

                                if(strcmp(cmd, "/sethp", true) == 0)
{
   if(IsPlayerConnected(playerid))
   {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, 0x555555AA, "Usage: /sethp <id> <hpamount>");
return 1;
}
new playa;
new health;
playa = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
health = strval(tmp);
if (PlayerInfo[playerid][pAdmin] >= 1)
{
   if(IsPlayerConnected(playa))
   {
       if(playa != INVALID_PLAYER_ID)
       {
SetPlayerHealth(playa, health);
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, 256, "Attention: %s a donné %d% de santé à %s", sendername, health, giveplayer);
ABroadCast(COLOR_YELLOW,string,1);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "   Vous n'êtes pas admin !");
}
}
return 1;
}
Titre: Re : [Conseil/Aides] Commandes
Posté par: Xartrick le 30 Novembre 2010, 17:36:23
Je plussoie, copier/coller n'est pas une méthode d'aide !

http://wiki.sa-mp.com/wiki/Zcmd (http://wiki.sa-mp.com/wiki/Zcmd)
Titre: Re : [Conseil/Aides] Commandes
Posté par: Jimmy_Krapovich le 30 Novembre 2010, 18:04:37
Faut faire preuve de patience..

On attend juste sa réponse et c'est à ce moment là que vous pourrez me critiquez, m'insulté...
Titre: Re : [Conseil/Aides] Commandes
Posté par: Ssk le 30 Novembre 2010, 18:11:37
@Jimmy_Krapovich: Ils ont raison la prochaine fois évite de faire des copiés collés de tes bouts de code, si tu veux aider c'est bien, mais faut le faire sérieusement en expliquant ^^
Titre: Re : [Conseil/Aides] Commandes
Posté par: Jimmy_Krapovich le 30 Novembre 2010, 18:12:23
ok
(http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif) free post
Titre: Re : [Conseil/Aides] Commandes
Posté par: S!m le 30 Novembre 2010, 19:25:46
Salut,

pour un gain (très léger) en vitesse, utilisez isnull(...) au lieu de strlen(...) == 0, qui se défini comme suit:

#define isnull(%0) (%0[0] == '\0' || (%0[1] == '\0' && %0[0] == '\1'))
fait de mémoire, normalement ça devrait être correct.

Je vous explique, cette macro test si le premier caractère est le caractère de fin de chaine.
Dans le cas des fonctions appelées de façon externe, il est impossible de mettre une chaine vide, elle sera composé du caractère '\1' suivi du caractère de fin de chaine, c,est la deuxième partie de la macro.

++Sim++
Titre: Re : [Conseil/Aides] Commandes
Posté par: Boomerkuigi le 30 Novembre 2010, 21:26:54
Merci de votre aide, merci Jimmy, mais le truc c'est que je la connai ton code que t'as donnée, (GodFather) ...
Mais le truc c'est que j'arrive pas a voir ce qui cloche dans mon code je pense que sa devrait marcher, et bah non ..
si quelqqu'un pouvait m'eclairer,

IG quand je tappe la commande , sa m'affiche toujours la meme chose et sa ne heal rien
" Usage: /sethp <id> <hpamount> "
Titre: Re : [Conseil/Aides] Commandes
Posté par: D0os-Nox le 30 Novembre 2010, 22:58:26
Bonjour, Ci-dessous, tu lui demande d'extraire cmd comme étant la répétition de la commande /sethp !
tmp1 = strtok(cmd, idx);         
tmp2 = strtok(cmd, idx);

Donc,

tmp1 = strtok(cmdtext, idx);         
tmp2 = strtok(cmdtext, idx);

La variable cmdtext est de base dans la callbacks et permet en outre de garder tes différentes données que tu à exécuté pour L'ID et le montant de la santé !

Voilà, Une fois modifier, strlen va en quelques sortes récupérer les données stocker dans cmdtext et les envoyées .

 ??? D0os-Nox  :-\
Titre: Re : Re : [Conseil/Aides] Commandes
Posté par: S!m le 01 Décembre 2010, 00:06:57
Salut,

c'est pas inclus dans sscanf ça ?

si mes souvenirs sont bons, oui.
Toutefois, ici, ils n'utilisent pas sscanf dans les commandes montrées.

Bien trouvé D0os-Nox ;).

Sinon, pour la quantité de vie à mettre, la variable doit être un «nombre à virgule», soit un float.
Comme la vafriable est un «nombre à virgule», tu ne peut utiliser strval, il faut utiliser floatstr. La fonction est équivalente, mais au lieu de récupérer un entier, elle récupère un nombre fractionnaire (float).

Bonne chance

++Sim++
Titre: Re : Re : [Conseil/Aides] Commandes
Posté par: Boomerkuigi le 01 Décembre 2010, 06:36:04
Bonjour, Ci-dessous, tu lui demande d'extraire cmd comme étant la répétition de la commande /sethp !
tmp1 = strtok(cmd, idx);         
tmp2 = strtok(cmd, idx);

Donc,

tmp1 = strtok(cmdtext, idx);         
tmp2 = strtok(cmdtext, idx);

La variable cmdtext est de base dans la callbacks et permet en outre de garder tes différentes données que tu à exécuté pour L'ID et le montant de la santé !

Voilà, Une fois modifier, strlen va en quelques sortes récupérer les données stocker dans cmdtext et les envoyées .

 ??? D0os-Nox  :-\

 Je t'aime <3
Merci aussi a toi Sim pour la floatstr ;)