• 28 Mars 2024, 16:03:54


Auteur Sujet: [TUTO] Commandes rapides  (Lu 16524 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne FuSion

  • Pawn coder
  • *
  • Grand Banditisme
  • for(new i = 0; i < INFINI; i++)
  • Messages: 888
    • Voir le profil
[TUTO] Commandes rapides
« le: 21 Février 2010, 00:11:19 »
Gentes dames, bonsoir.
Sur ce nouveau tutoriel, nous allons apprendre a utiliser un système plus élaboré et rapide que la méthode strtok, qui es connu pour être compliqué (pour ma part) mais aussi lente, alors pourquoi ne pas utiliser un type de commande beaucoup plus rapide et simple d'utilisation comme le DCMD.


Les commandes rapides

  • Étude de la commande:

Dans une commande qui utilise la méthode strtok on as souvent un petit problème a rendre notre code plus visible et ainsi plus compréhensible, alors que pour le dcmd il nous faudra déclarer notre commande au OnPlayerText et mettre la commande comme une variable voici deux exemple de DCMD et de strtok:

Un exemple du strtok:
Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
new idx, cmd[20];
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/kick", true) == 0)
{
new tmp[20],id;
tmp = strtok(cmdtext, idx);
if (strlen(tmp))
{
id = strval(tmp);
if (IsPlayerConnected(id))
{
Kick(id);
SendClientMessage(playerid, 0x00FF00AA, "Le joueur fut kické(e)");
}
}
return 1;
}
return 0;
}[/code=pawn]

[b]Un exemple du dcmd:[/b]

[code=pawn]public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(kick, 4, cmdtext);
return 0;
}
 
dcmd_kick(playerid, params[])
{
if (strlen(params))
{
id = strval(params);
if (IsPlayerConnected(id))
{
Kick(id);
SendClientMessage(playerid, 0x00FF00AA, "Le joueur fut kické(e)");
}
}
return 1;
}
Étude du code:
- Notez que le strtok disparait logique, par contre on note l'affichage d'une commande plus simple utilisant simplement des commandes de base assez simple a comprendre, notez que cet affichage peux être encore plus simplifié grâce au sscanf (nous allons découvrir dans le chapitre suivant).
- Il sera normal que votre code ne se compile pas avec ce bout de code puisque vous n'aviez pas déclaré la fonction DCMD, pas de soucis tonton FuSion a la solution, il vous suffira d'ajouter cet ligne magique en haut de votre code et hop, ça marche:
Code: (pawn) [Sélectionner]
#define dcmd(%1,%2,%3) if ((strcmp(%3, "/%1", true, %2+1) == 0)&&(((%3[%2+1]==0)&&(dcmd_%1(playerid,"")))||((%3[%2+1]==32)&&(dcmd_%1(playerid,%3[%2+2]))))) return 1;- Dans la ligne suivante : dcmd(kick, 4, cmdtext); on déclare notre commande (kick), le nombre de ces caractères (4) et a la fin le type qui est une cmdtext.

  • Simplifiez vos commandes grâce au SSCANF

Il existe un truc plus simple qui vous permet de vous simplifiez la vie, il s'agit du SSCANF, il s'agit d'une fonction crée par Y_Less.
Vous pourriez prendre la fonction du lien suivant: http://wiki.sa-mp.com/wiki/Sscanf (Le code est trop long pour être mis sur GTAo)
Une fois le code mis en place, a vous la simplicité.

Reprenons notre exemple du dcmd pour faire une comparaison
Un exemple du dcmd:

Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(kick, 4, cmdtext);
return 0;
}
 
dcmd_kick(playerid, params[])
{
if (strlen(params))
{
id = strval(params);
if (IsPlayerConnected(id))
{
Kick(id);
SendClientMessage(playerid, 0x00FF00AA, "Le joueur fut kické(e)");
}
}
return 1;
}

Un exemple en DCMD avec le SSCANF

Code: (pawn) [Sélectionner]
dcmd_heal(playerid, params[])
{
new id;
if (sscanf(params, "d", id)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick <ID>");
else
{
Kick(id);
SendClientMessage(playerid, 0x00FF00AA, "Le joueur fut kické(e)");
}
return 1;
}

C'est plus cout, compréhensible et surtout d'une simplicité étonnante, vous ne trouvez pas ?&nbsp; :D

Étude du code:
- Étudions de plus prêt cet ligne la, qui as surement du attirez votre attention ( Ou pas )
Code: (pawn) [Sélectionner]
if (sscanf(params, "d", id)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick <ID>");Il s'agit de notre commande sscanf, qui prend params comme variable pour extraire les données, "d" comme paramètre des données a renvoyer et id comme donné a renvoyer, simple non ?
- A présent, vous vous demandez surement a quoi sert le "d" qui sert comme paramètre de donnée a renvoyer, bah au faite c'est tout simple, c'est le format du caractère, voici un tableau qui contient tout les caractères de paramètre de donnée. (Source: Wiki SAMP)

Caractère |Paramètre de donnée
dDécimal
c   Une seule lettre(caractère)
u   ID ou Pseudonyme
s   String(Phrase)
h   Hexadécimal
f   Float(X,Y,Z)
z   String optionnel(Phrase optionnel)

Je vais vous donner un exemple pour comprendre plus vite, pour une commande du genre: /ban id raison, il vous faudra deux paramètre et donc utiliser u(id) et z(raison qui es optionnel) ça donnera ça:
Code: (pawn) [Sélectionner]
if (sscanf(params, "uz", id, raison))
  • Fin du tutoriel
Voila, le tutoriel touche a sa fin, j'espère que vous savez maintenant utiliser les commandes rapides pour vos futurs système admin/serveur.
Vous pouvez toujours vous entrainez en créant quelque commandes (/kick, /ban, /freeze, /unfreeze, ...) et laisser court a votre imagination.


Merci d'avoir lu ce tutoriel

Hors ligne Barto

  • Aiiiiiiirght
  • *
  • GTAOnline Addict
  • Messages: 4205
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #1 le: 21 Février 2010, 00:15:35 »
GG beau tuto, j'ai pas tout lu, mais je le fais demain.
Les filles, c'est comme les échappées en cyclisme, faut en tenter plusieurs pour en réussir une.

Gifs interdit dans les avatars/signs

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #2 le: 21 Février 2010, 01:04:31 »
Merci pour ce tuto j'avoue que la fonction SSCANF est vraiment bien :D

Hors ligne FuSion

  • Pawn coder
  • *
  • Grand Banditisme
  • for(new i = 0; i < INFINI; i++)
  • Messages: 888
    • Voir le profil
Re : Re : [TUTO] Commandes rapides
« Réponse #3 le: 21 Février 2010, 01:53:29 »
Merci pour ce tuto j'avoue que la fonction SSCANF est vraiment bien :D

C'est une fonction plutôt simple et rapide a utiliser d'où son adoption au sein de plusieurs système utilisant ce type de commande.  ;)

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #4 le: 21 Février 2010, 07:59:03 »
Une petite question fusion que j'ai poster sur un topic. tu as dit :

Citer
Caractère |   Paramètre de donnée
d   Décimal
c      Une seule lettre(caractère)
u      ID ou Pseudonyme
s      String(Phrase)
h      Hexadécimal
f      Float(X,Y,Z)
z      String optionnel(Phrase optionnel)

Serait tu comment arrondir par exemple une Float ( %f) de façon a retirer les chiffre aprés la virgule ou les arrondir a l'unité ?

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Re : [TUTO] Commandes rapides
« Réponse #5 le: 21 Février 2010, 09:08:11 »
Une petite question fusion que j'ai poster sur un topic. tu as dit :

Citer
Caractère |   Paramètre de donnée
d   Décimal
c      Une seule lettre(caractère)
u      ID ou Pseudonyme
s      String(Phrase)
h      Hexadécimal
f      Float(X,Y,Z)
z      String optionnel(Phrase optionnel)

Serait tu comment arrondir par exemple une Float ( %f) de façon a retirer les chiffre aprés la virgule ou les arrondir a l'unité ?


floatround();



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #6 le: 21 Février 2010, 11:19:26 »
Merci mais la fonction floatround ne met pas automatiquement a l'unité comment faudrait t'il faire par exemple :

new Float:X;// un float pour exemple
X = 55.333333;// la float avec virgule
format(string, sizeof(string), " Vous êtes à: %f X",X);//pour voir la float avec virgule
SendClientMessage(playerid,0x00FF00FF,string);

Comment mettre ceci sans virgule avec la fonction floatround svp

Hors ligne Barto

  • Aiiiiiiirght
  • *
  • GTAOnline Addict
  • Messages: 4205
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #7 le: 21 Février 2010, 11:22:17 »
Je viens e remarquer que tu ne l'avais pas mis dans la partie Tuto.
Les filles, c'est comme les échappées en cyclisme, faut en tenter plusieurs pour en réussir une.

Gifs interdit dans les avatars/signs

Anonyme

  • Invité
Re : [TUTO] Commandes rapides
« Réponse #8 le: 21 Février 2010, 11:24:32 »
Normal c'est a un modérateur de le déplacer on peux pas poster dans la section tuto je pense :p

Sinon, Beau tuto FuSion y vas surement bien m'aider

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Re : [TUTO] Commandes rapides
« Réponse #9 le: 21 Février 2010, 13:19:25 »
Merci mais la fonction floatround ne met pas automatiquement a l'unité comment faudrait t'il faire par exemple :

new Float:X;// un float pour exemple
X = 55.333333;// la float avec virgule
format(string, sizeof(string), " Vous êtes à: %f X",X);//pour voir la float avec virgule
SendClientMessage(playerid,0x00FF00FF,string);

Comment mettre ceci sans virgule avec la fonction floatround svp


euh ta meme pas utiliser la fonction !
 à cette étape tu fait

X = 55.333333;

X = floatround(55.333333);



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #10 le: 21 Février 2010, 14:05:57 »
Désoler j'ai trouver je chercher compliquer avec la fonction alors quel marchais juste la la place de %f mettre %i.

 :dejadehors

Hors ligne Barto

  • Aiiiiiiirght
  • *
  • GTAOnline Addict
  • Messages: 4205
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #11 le: 09 Juin 2010, 19:48:09 »
Désolé de up le sujet mais je me suis rendu compte tout à l'heure (en expliquant un truc à un nouveau) que ce tuto n'était pas dans la section tutoriaux sa:mp.
Vu que c'est un bon tuto, ca serait cool de le déplacer.
Encore désolé d'avoir up ce sujet.

Bonne soirée, Barto.
Les filles, c'est comme les échappées en cyclisme, faut en tenter plusieurs pour en réussir une.

Gifs interdit dans les avatars/signs

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #12 le: 09 Juin 2010, 20:19:53 »
bien vue ^^ je pense que Sim ne l'avait pas vu envoie le lien en MP avec le lien du post il le feras des qu'il seras de retours :)
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Barto

  • Aiiiiiiirght
  • *
  • GTAOnline Addict
  • Messages: 4205
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #13 le: 09 Juin 2010, 20:21:45 »
Ok, je vais faire ça.
Les filles, c'est comme les échappées en cyclisme, faut en tenter plusieurs pour en réussir une.

Gifs interdit dans les avatars/signs

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [TUTO] Commandes rapides
« Réponse #14 le: 18 Juin 2010, 22:02:07 »
Salut,

voilà c'est fait, désolé de ne pas avoir été plus rapide.
Je ne connaissais pas ce tuto (très beau d'ailleurs)

++Sim++
« Modifié: 18 Juin 2010, 22:13:44 par Sim »