Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

254731 Messages dans 14037 Fils de discussion- par 6623 Membres - Dernier membre: Magicien

24 Mai 2012 à 17:39:21
GTAOnline.frSan Andreas MultiplayerScripting SA-MP [Pawn center]Tutoriels et références SA:MP (Modérateurs: S!m, Xartrick)[TUTO] Commandes rapides
Pages: [1] 2   Bas de page
Imprimer
Auteur Fil de discussion: [TUTO] Commandes rapides  (Lu 3160 fois)
0 Membres et 1 Invité sur ce fil de discussion.
FuSion
Pawn coder
Hors ligne Hors ligne


GTAOnline Big Member
*

for(new i = 0; i < INFINI; i++)

Messages: 526


WWW



« 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:
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;
}

Un exemple du dcmd:

Code:
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:
#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:
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:
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 ? Tr&egrave;s souriant

Étude du code:
- Étudions de plus prêt cet ligne la, qui as surement du attirez votre attention ( Ou pas )
Code:
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:
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
Journalisée

Barto
Aiiiiiiirght
Hors ligne Hors ligne


Team NHS
GTAOnline Fan Boy
*

Andy Schleck Fan

Messages: 2745






Barto_59

« Répondre #1 le: 21 Février 2010 à 00:15:35 »

GG beau tuto, j'ai pas tout lu, mais je le fais demain.
Journalisée

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




Dark_revan
Serveur RPG : *¤REAL DREAM¤*
Hors ligne Hors ligne


GTAOnline Big Member
*

Script Serveur RolePlay.

Messages: 338


« Répondre #2 le: 21 Février 2010 à 01:04:31 »

Merci pour ce tuto j'avoue que la fonction SSCANF est vraiment bien Tr&egrave;s souriant
Journalisée

FuSion
Pawn coder
Hors ligne Hors ligne


GTAOnline Big Member
*

for(new i = 0; i < INFINI; i++)

Messages: 526


WWW



« Répondre #3 le: 21 Février 2010 à 01:53:29 »

Merci pour ce tuto j'avoue que la fonction SSCANF est vraiment bien Tr&egrave;s souriant

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.  Clin d'oeil
Journalisée

Dark_revan
Serveur RPG : *¤REAL DREAM¤*
Hors ligne Hors ligne


GTAOnline Big Member
*

Script Serveur RolePlay.

Messages: 338


« Répondre #4 le: 21 Février 2010 à 07:59:03 »

Une petite question fusion que j'ai poster sur un topic. tu as dit :

Citation
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é ?
Journalisée

Ssk
Développeur d'Open SA-MP
En ligne En ligne


Sous-admin
GTAOnline Legend
*

Open-SA-MP - Unlimited Experience

Messages: 3731


WWW



sasuke78200

« Répondre #5 le: 21 Février 2010 à 09:08:11 »

Une petite question fusion que j'ai poster sur un topic. tu as dit :

Citation
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();
Journalisée






Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog
Dark_revan
Serveur RPG : *¤REAL DREAM¤*
Hors ligne Hors ligne


GTAOnline Big Member
*

Script Serveur RolePlay.

Messages: 338


« Répondre #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 :

Code:
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
Journalisée

Barto
Aiiiiiiirght
Hors ligne Hors ligne


Team NHS
GTAOnline Fan Boy
*

Andy Schleck Fan

Messages: 2745






Barto_59

« Répondre #7 le: 21 Février 2010 à 11:22:17 »

Je viens e remarquer que tu ne l'avais pas mis dans la partie Tuto.
Journalisée

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




JiKay
Group: PGM de Lalu's Stunt
Hors ligne Hors ligne


Team NHS
GTAOnline Big Member
*

NHS Member's

Messages: 764


WWWnhs-jikay



« Répondre #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
Journalisée









Kit By Manioc
Ssk
Développeur d'Open SA-MP
En ligne En ligne


Sous-admin
GTAOnline Legend
*

Open-SA-MP - Unlimited Experience

Messages: 3731


WWW



sasuke78200

« Répondre #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 :

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

Code:
X = 55.333333;

X = floatround(55.333333);
Journalisée






Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog
Dark_revan
Serveur RPG : *¤REAL DREAM¤*
Hors ligne Hors ligne


GTAOnline Big Member
*

Script Serveur RolePlay.

Messages: 338


« Répondre #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
Journalisée

Barto
Aiiiiiiirght
Hors ligne Hors ligne


Team NHS
GTAOnline Fan Boy
*

Andy Schleck Fan

Messages: 2745






Barto_59

« Répondre #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.
Journalisée

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




cristab
Hors ligne Hors ligne


Admin V.I.P
GTAOnline Legend
*

Messages: 7333


« Répondre #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 Sourire
Journalisée

Barto
Aiiiiiiirght
Hors ligne Hors ligne


Team NHS
GTAOnline Fan Boy
*

Andy Schleck Fan

Messages: 2745






Barto_59

« Répondre #13 le: 09 Juin 2010 à 20:21:45 »

Ok, je vais faire ça.
Journalisée

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




S!m
Hors ligne Hors ligne


Moderateur
GTAOnline Fan Boy
*

Messages: 2260


« Répondre #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++
« Dernière édition: 18 Juin 2010 à 22:13:44 par Sim » Journalisée





Pages: [1] 2   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.506 secondes avec 24 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com | Contact