• 28 Mars 2024, 20:57:37


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - maxya

Pages: [1] 2 3 ... 11
1
Scripting SA-MP [Pawn center] / Re : [BIG TUTO] zcmd && sscanf2
« le: 02 Août 2014, 19:17:41 »
D'accord Kiloutre merci pour l'info je ne savait pas, sinon j'ai modifié le tutoriel et j'ai repris quelque une de tes phrase si ça ne te dérange pas . Si vous avez d'autres remarques, je suis ouvert à toutes critiques  :smile: .

2
Scripting SA-MP [Pawn center] / Re : [BIG TUTO] zcmd && sscanf2
« le: 02 Août 2014, 14:46:24 »
Merci kiloutre je vais modifié ça après (c'est mon premier tuto), mais je ne suis pas d'accord avec toi sur le fait qu'on puisse toujours utilisé OnPlayerCommandText, j'ai essayé de l'utilisée en même temps que zcmd et elle n'a pas fonctionnée .

3
Scripting SA-MP [Pawn center] / [BIG TUTO] zcmd && sscanf2
« le: 02 Août 2014, 04:12:32 »
I - Le commencement :

Salut la communauté !

Vous connaissez déjà SA:MP (Le multi-joueurs de GTA:san andreas) et le Pawn ? Vous vous débrouillez pas mal avec de petits script par ci par là, vous créez des commandes basiques, mais votre problèmes c'est que vous ne savez pas crée des commandes dynamiques qui vont affectés les autres joueurs ? Alors ce tutoriel est pour vous ! Ont va apprendre ensemble à crée des commandes dynamiques qui vont affecter les autres joueurs et pas que vous, vous pouvez maintenant enfin (ou presque) vous passez du ennuyeux playerid, pour cela ont va utilisé un couple de plugin, un duo, qui sont: zcmd et sscanf version 2 .

Vous êtes prêt ? Alors, allons y !

Voilà, on va enfin commencer a créé nos commandes, mais attendez ! Il nous faudra d'abord télécharger nos includes et les ajouter a notre dossier pawno pour cela, rendez vous ici:

- sscanf: qui contiens notre include sscanf .

- zcmd: qui contient notre include zcmd .

- Et si ce n'est déjà fais le dossier pawno .

Une fois ces deux includes télécharger, vous aurez une archive .rar pour sscanf, et un fichier .inc pour zcmd .


On va commencé par l'étape la plus délicate celle du sscanf, vous allez ouvrir votre dossier pawno et en même temps votre archive sscanf, ensuite vous aller extraire sscanf2.inc qui se trouve pawno/include de votre archive dans le répertoire pawno/include de votre dossier pawno, vous allez faire de même pour plugin par contre le dossier sscanf vous aller directement le placez à la racine de votre dossier pawno avec le samp-server.exe .

Si vous ne trouvez pas le dossier plugin créez le puis mettez y le contenu de plugin qui se trouve dans l'archive .

Au final vous aurez quelque chose qui ressemble à ça .


Puis pour le zcmd c'est extrêmement facile puisqu'il suffit de prendre le fichier zcmd.inc et le mettre dans pawno/include de votre dossier pawno .

Enfin vous devez alleer dans votre fichier server.cfg qui se trouve dans la racine de votre dossier pawno et y rajouté cette ligne .

plugins sscanf
Si plugins y est déjà ajoutez simplement sscanf dans la même ligne précédé d'un espace .


II - Sscanf kézako ? :

Eh bien mes chèrs petits, sscanf est un plugin crée par Alex alias Y_Less, et ce plugin est très utile car il permet de décomposer une variable de type string en plusieurs variables, c'est un peu comme la méthode split qui est utilisé en C++ ou encore en python et donc nous allons dès a présent voir comment utilisé cette include.

Tous d'abord on doit include le plugin, pour cela allez en haut de votre GM et tapez ceci:

#include <sscanf2>
Voilà maintenant notre plugin est inclu à notre GM ! Maintenant on va enfin pouvoir rencontrer la fonction sscanf, mesdames et messieurs veuillez accueillir la célèbre l'unique la merveilleuse fonction sscanf !

sscanf(string, spef, resul1, resul2);
Le premier argument de cette fonction que j'ai appeler string doit être une chaîne de caractère, et c'est de cette chaîne de caractère qu'on va découper, c'est donc cette argument qui dans notre exemple va contenir "Hello world !" .

Le premier argument de cette fonction que j'ai appelé string doit être une chaîne de caractère et c'est de cette chaîne de caractère qu'on va découper, c'est donc cet argument qui dans notre exemple va contenir "Hello world !" .

Le deuxième argument que j'ai appelé spécificateur sert à aider la fonction sscanf et lui indiquer comment elle doit extraire la chaîne de caractère principale dans plusieurs variables (3ème paramètre), est ce qu'elle doit l’extraire sous forme de 3 strings ou sous forme de seulement 2 string ou pourquoi pas sous forme d'un string suivi d'un int ou d'un float ou pourquoi seulement en un float, dans notre cas ce sera 3 strings puisqu'on a " Hello " puis " world " puis " ! ".

je tiens aussi a préciser que sscanf découpe (par défaut) a chaque fois qu'elle rencontre le premier espace, sscanf considère qu'on passe à une nouvelle valeur lorsqu'elle rencontre un espace, et ensuite suivant la spécification il va extraire ou non la valeur dans une variable

Pour dire à sscanf d'extraire à chaque fois qu'elle rencontre un signe que nous choisissons, il suffit d'ajouté un spécificateur p suivis de deux crochets, et entre les deux crochets ont mets le signe "séparateur". exemple:

sscanf(variable, "p<|>fi", var1, var2);
Maintenant sscanf va extraire à chaque fois qu'elle va rencontrée un "|" .

Enfin les derniers arguments, c'est dans quelles variables mettre ce qu'on vient d'extraire suivant les spécifications, par exemple si dans spef on précise string puis integer, alors resul1 doit être de type string et resul2 doit être de type int, dans notre exemple on doit avoir 3 variables de type string la première qu'on appellera contiendra resul1 contiendra "Hello" puis la deuxième resul2 contiendra "world" et la troisième resul3 contiendra "!" .

Mais concrètement, qu'est-ce que cela donne ? Nous allons tous d'abord déclaré une variable de type string qui contiendra "Hello world !" et 3 variables de type string vide .

new test[15] = "Hello world !";
new a[10] = "";
new b[10] = "";
new c[3] = "";

Ensuite je vais allé au main et je tape ça .

main()
{
    sscanf(test, "s[6]s[6]s[3]", a, b, c);

    printf("La variable a contient: %s", a);
    printf("La variable b contient: %s", b);
    printf("La variable c contient: %s", c);
}

Et donc quand je lance le samp-server j'ai belle et bien .


Explications du code, tous d'abord on déclare 4 variables de type string dont l'une contiens notre hello world, ensuite avec la fonction sscanf on extrait la variable string en 3 morceaux qu'on stock dans les variables a, b et c puis on affiche . Comme vous avez pus le remarquer les spécificateurs doivent être entre double guillemets (donc une chaîne de caractère) et aux seins de ces derniers, vous mettez ces derniers comme expliquer ci-dessus, pour une liste complète des spécificateurs je vous invite à aller lire la documentation très simple .

III - Zcmd c'est bon pour la santé ! :

Pour commencé ont dois d'abord inclure zcmd ce qui est relativement facile .

#include <zcmd>
Après avoir fait cela, nous allons voir comment crée une commande zcmd, pour cela il y'a 4 façons différentes pour le faire .

Ce que je vous conseil de faire c'est soit :

COMMAND:macommande(playerid, params[])
{
    return 1;
}

Soit:

CMD:macommande(playerid, params[])
{
  return 1;
}

Mais vous pouvez aussi utilisé:

command(macommande, playerid, params[])
{
  return 1;
}

ou encore:

cmd(macommande, playerid, params[])
{
  return 1;
}

Mais ces deux dernières commencent a devenir obsolète et je vous conseille pas de les utilisé .

Tous au long de ce tutoriel je vais travaillé avec CMD:macommande(playerid, params[]) mais rien ne vous empêche d'utilisé un autre style .

Analysons le code:

Au début nous tapons CMD:macommande jusqu'ici rien de sorcier, mais analysons les paramètres, au début nous avons le classique playerid qui définit l'id du joueur qui a tapé la commande, puis nous avons params[] qui est une chaîne de caractère qui contient tous qu'on écrit après macommande et là si vous êtes un peu malin vous devez voir le lien qui existe entre zcmd et sscanf, non vous ne l'avez pas trouver ? Ce n'est pas grave, essayons de faire une commande /v id_du_véhicule_a_crée qui crée un véhicule que le joueur choisit en tapant l'id du véhicule après la commande /v, et qui met le joueur dedans .

Même si la commande c'est /v dans CMD:macommande(playerid, params[]) on ne fais que v sans le / ce qui va donner dans notre cas CMD:v(playerid, params[])

Nous allons allé à la toute fin de notre GM puis nous allons tapé .

CMD:v(playerid, params[])
{
    if(IsPlayerConnected(playerid))
    {
        new vehicle = 0;

        if(!sscanf(params, "i", vehicle))
        {
            new float:fPosX = 0.0, float:fPosY = 0.0, float:fPosZ = 0.0, float:fPosAngle = 0.0;
            new iVehicleID = 0;

            GetPlayerPos(playerid, fPosX, fPosY, fPosZ);
            GetPlayerFacingAngle(playerid, fPosAngle);
            iVehicleID = CreateVehicle(vehicle, fPosX, fPosY, fPosZ, fPosAngle, 0, 1,60);
            PutPlayerInVehicle(playerid, iVehicleID, 0);
        }
        else SendClientMessage(playerid, 0xFFFFFFFF, "Astuce: /v <id_vehicule>");
    }
        else SendClientMessage(playerid, 0xFFFFFFFF, "Error !");

    return 1;
}

Explication du code:

au début on regarde si le joueur qui tape la commande est belle et bien connecter, s'il est connecté on crée la variable de type integer qui va contenir l'id du véhicule, ensuite on va utiliser sscanf pour extraire le contenu de params (la chaîne qui contient nos paramètres), et ce dans notre variable vehicle, vous pouvez,  remarquer que le spécificateur est un integer (i), si ce n'est pas un integer, on envoie au joueur un message "Astuce: /v <id_vehicule>", mais si c'est bien un integer, on crée des variables pour récupérer les coordonnées du joueur ainsi que l'angle ou il regarde et une variable iVehicleID qui va contenir le véhicule qu'on va créer .

Ensuite, on récupère la position du joueur ainsi que l'angle ou il regarde, puis on crée un véhicule qui aura les mêmes coordonnées que le joueur ainsi que le même angle de vue, remarquez le premier paramètre de CreateVehicle qui est notre "vehicle" qui définit l'id du véhicule a créé, enfin on met le joueur dans le véhicule à la place conducteur et si tous ça marche bien on fait un return 1 pour dire que la commande c'est bien exécuté .

Une fois que vous utilisé zcmd oubliez la callback OnPlayerCommandText, elle ne peut plus être utilisé !

IV - Remerciement :

Je tiens à remercier toutes les personnes qui m'ont aidé à apprendre le Pawn et qui m'ont aider sur ce forum: Kiloute (qui m'a beaucoup aidé pour ce tutoriel) ,Gilux, Ssk, Xolokos, Infu, Xartrick, Gzsume ainsi que tous les autres que j'ai malheureusement oublié .

PS: ce tuto est à moi sous-license CC-BY ce qui veux dire que vous pouvez en faire ce que vous voulez à condition de précisez que j'en suis l'auteur (maxia ou maxya) .

PS2: Je l'ai aussi mit sur ZDS: http://zestedesavoir.com/tutoriels/off/401/pawn-utilise-zcmd-et-sscanf/

PS3: Svp, si un admin peut me faire la mise en forme, je ne suis pas très bon en design et tous ça  :smile: .

Voila si vous ne comprenez pas bien un truc dîtes le moi ! .

4
Scripting SA-MP [Pawn center] / Re : Problème mysql
« le: 01 Août 2014, 20:58:37 »
Merci Ssk, j'avait pas pensé à faire ça:

format(joueurinfo[playerid][jPseudo], MAX_PLAYER_NAME, nom);
Mais au début je fais TOUJOURS un code qui marche, ensuite je l'optimise  :wink: .

5
Scripting SA-MP [Pawn center] / Re : Problème mysql
« le: 01 Août 2014, 18:17:53 »
la requête sql:

format(query, sizeof(query), "SELECT * FROM jinfo WHERE Pseudo = '%s' ", nom);

et:



Je viens de rajouté job et bombes donc, je les prends pas en considération pour l'instant .

6
Scripting SA-MP [Pawn center] / Re : Problème mysql
« le: 31 Juillet 2014, 22:00:46 »
J'utilise la R6, dont j'ai fais:

if(mysql_fetch_row_format(message,"|"))
  {
      sscanf(message, "p<|>ds[32]s[32]iii", a, joueurinfo[playerid][jPseudo], joueurinfo[playerid][jPass], joueurinfo[playerid][jArgent], joueurinfo[playerid][jAdmin], joueurinfo[playerid][jMort]);
    }

et ça marche très bien, si vous trouvez que cette méthode n'est pas bien dîtes le moi svp .

Merci .

7
Présentation / Re : Présentation maxya
« le: 31 Juillet 2014, 18:01:58 »
merci, une ptite présentation ça fait toujours plaisir .

8
Présentation / Présentation maxya
« le: 31 Juillet 2014, 17:20:21 »
Salut,

Après 2 ans passé sur ce forum, je décide enfin de faire ma présentation.

Je suis maxya, 17 ans, je suis Marocain et je suis passionné d'informatique depuis mon tous jeune âge, j'ai jouais a tous les GTA depuis 2004, mais je n'ai découvert le multi-joueur de san andreas que très tardivement en 2009 .

J'ai commencé a apprendre le pawn en 2013 et voila ou j'en suis maintenant, je fais aussi du C++ et du php, en ce qui concerne le C++, je suis un gros débutant, je viens a peine de crée mon premier jeu 2D ! Sinon pour le php couplé avec sql je sais faire à peu près tous, et si quelqu'un à besoin d'aide dans n'importe quoi qui touche a l'informatique MP moi  :wink: .

Je suis un gros gros naze en graphisme, et donc si quelqu'un pouvait me faire un avatar, ce serait vraiment sympa  :smile: .

J’espère que je vais passé de bon moments ici avec vous .

Cordialement,
Le gros n00b maxya,

9
Scripting SA-MP [Pawn center] / Re : Problème sscanf mysql
« le: 31 Juillet 2014, 17:10:02 »
C'est juste qu'a 4h du mat' mon cerveau n'était pas très bien en place, donc je faisait un peu n'importe quoi .

10
Scripting SA-MP [Pawn center] / Re : Problème sscanf mysql
« le: 31 Juillet 2014, 16:58:06 »
Non elle n'affiche que des string, printf formate le texte et le rends un string avant d’afficher moi je faisait directement:

printf(joueurinfo[playerid][jArgent]);

http://wiki.sa-mp.com/wiki/Printf

Le premier paramètre et bien une chaîne de caractère ;) .

11
Scripting SA-MP [Pawn center] / Re : Problème sscanf mysql
« le: 31 Juillet 2014, 13:53:45 »
Enfaîte, c'est bon, les valeurs sont effectivement récupéré, mais comme printf n'affiche que des strings et que mes variables sont des int sa fais des trucs bizarres .

12
Discussions générales / Re : [Jeu] Qu'est-ce que vous faites ?
« le: 31 Juillet 2014, 06:36:48 »
6:36, je code . Vive le C++ !

13
Scripting SA-MP [Pawn center] / Problème sscanf mysql
« le: 31 Juillet 2014, 04:55:11 »
Salut !

Alors d'abord voila mon code:

stock LoginPlayer(playerid)
{
new query[256], name[MAX_PLAYER_NAME+1], string[256], a, message[256];

GetPlayerName(playerid, name, sizeof(name));
format(query, sizeof(query), "SELECT * FROM jinfo WHERE Pseudo = '%s' ", name);

mysql_query(query);
mysql_store_result();

  if(mysql_fetch_row_format(message,"|"))
  {
      sscanf(message, "p<|>ds[32]s[32]ddd", a, joueurinfo[playerid][jPseudo], joueurinfo[playerid][jPass], joueurinfo[playerid][jArgent], joueurinfo[playerid][jAdmin], joueurinfo[playerid][jMort]);

    }
   
    print(message);
    printf(joueurinfo[playerid][jPseudo]);
    printf(joueurinfo[playerid][jArgent]);
    printf(joueurinfo[playerid][jAdmin]);
    printf(joueurinfo[playerid][jMort]);
    format(string, sizeof(string), "Bienvenu %s", joueurinfo[playerid][jPseudo]);
    SendClientMessage(playerid, COLOR_ACTION, string);

mysql_free_result();
}

Le problème c'est que j'ai des symbole bizarre sur la console pour l'affichage des valeurs de jArgent, jAdmin et jMort, j'ai des cœurs et des smiley, sachant que la variable jArgent contiens 1, jAdmin 2 et jMort 3, c'est chelou parce que dans le premier printf celui de message, j'ai bel et bien 1|2|3 .

Je pense a un problème de type de variable (string, float, integer), mais je sais pas comment le résoudre .


Merci d'avance,
Cordialement,

14
Jeux vidéo / Re : Screen GTAIV Enb3.0 et quelques modifs
« le: 30 Juillet 2014, 16:15:12 »
Magnifique les screens ! J'adore .

15
Scripting SA-MP [Pawn center] / Re : Problème mysql
« le: 30 Juillet 2014, 16:10:23 »
Désolé du double post, mais j'ai encore un petit problème .

Je me suis connecté à la DB et j'ai crée un système d'inscription /connexion, seulement voila, je ne sais pas comment récupéré les informations qui sont dans ma DB comme l'argent du joueurs pour le mettre dans une variable .

Merci d'avance,

Pages: [1] 2 3 ... 11