• 18 Avril 2024, 22:12:44


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.


Sujets - maxya

Pages: [1] 2 3
1
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 ! .

2
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,

3
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,

4
Scripting SA-MP [Pawn center] / Problème mysql
« le: 29 Juillet 2014, 06:11:52 »
Salutation,

Je viens d'installé a_samp depuis ce lien: http://forum.sa-mp.com/showthread.php?t=56564
J'ai bien mit tous ce qui faut à sa place, ensuite je commence a scripter, je me connecte avec mysql_connect tous va bien mais quand je fais ca:

public OnPlayerConnect(playerid)
{
    new nom[MAX_PLAYER_NAME+1];
    new Query[256];
   
    GetPlayerName(playerid, nom, sizeof(nom));
    format(Query, sizeof(Query), "SELECT `Pseudo` FROM jinfo WHERE `Pseudo` = '%s'", nom);
    mysql_query(Query);
    mysql_store_result();

return 1;
}

J'ai 2 erreurs:

error 035: argument type mismatch (argument 1)
error 017: undefined symbol "mysql_store_result"

Je comprends pas j'ai bien lu la doc: http://wiki.sa-mp.com/wiki/MySQL#Plugin_functions

Merci d'avance,
Cordialement,

5
Scripting SA-MP [Pawn center] / soucis sscanf
« le: 24 Juillet 2014, 18:38:22 »
Salut,

Je viens de me documenté un peu sur sscanf, mais sur un tutoriel, j'ai ce que j'ai trouvé:

if(!sscanf(params, "i", a))
{
    //blablabla du code ici
}
else SendClientMessage(playerid, code_Couleur, "blablablabla");


Alors ma question est la suivante, pourquoi utilisé dans la conditions if !sscanf() au lieu de sscanf .

Merci d'avance,
Cordialement,

6
Salut,

J'essaye de crée une petite commande qui crée un véhicule et qui mets le joueur dedans:

new gPlayerVehicle[MAX_PLAYERS];
new Float:px, Float:py, Float:pz;

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/nrg", cmdtext, true, 10) == 0)
{
GetPlayerPos(playerid, px, py, pz);
gPlayerVehicle[playerid] = CreateVehicle(522, px, py, pz, 82.2873, 0, 1, 60);
PutPlayerInVehicle(playerid, gPlayerVehicle[playerid], 0);
return 1;
}
return 0;
}

Et pourtant ça ne marche pas (Unknow command) ! Je pense que je vais devenir fou .

Merci de votre aide,
Cordialement,

7
Scripting SA-MP [Pawn center] / Injection SQL
« le: 07 Juillet 2014, 03:55:55 »
Salut,

Je me demande s'il y'a un risque de se faire hacké son compte si ont utilise une DB pour stocké les informations en utilisant SQL si je protège pas mes requêtes ?

Merci d'avance,
Cordialement,

8
Scripting SA-MP [Pawn center] / PDO mysql
« le: 21 Mars 2014, 20:08:37 »
Salut,

Je voudrai savoir s'il est possible d'utilisé l'objet PDO en pawn comme pour PHP et si oui comment ?

Merci d'avance,
Cordialement,

9
Scripting SA-MP [Pawn center] / conflit commandes
« le: 01 Décembre 2013, 11:43:33 »
Salut,

Alors voila mon problème, j'ai ajouté sur mon serveur le FS X-Administration qui marche à merveille, mais je ne peux plus utilisé les commandes qui sont sur mon GM sa me fais commande inconnu .

Merci de m'aider,

10
Scripting SA-MP [Pawn center] / Code qui marche pas
« le: 10 Août 2013, 15:27:45 »
Salut,

Alors voila un bout de code que j'ai scripter:
public OnPlayerCommandText(playerid, cmdtext[])
{
        if (strcmp("/stats", cmdtext, true, 10) == 0)
{
            new coordsstring[512];
new mort = PlayerInfo[playerid][pDeaths];
new frags = PlayerInfo[playerid][pKills];
new admin = PlayerInfo[playerid][pAdmin];
new pName[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
format(coordsstring, sizeof(coordsstring),"----------------------------------- Statistiques de jeu - %s ------------------------------------------",pName);
SendClientMessage(playerid, COLOR_STATS,coordsstring);
format(coordsstring, sizeof(coordsstring), "[Stats:] Frags: [%d] - kill: [%d] - admin level: [%d] ", frags,mort,admin);
SendClientMessage(playerid, COLOR_STATS,coordsstring);
return 1;
}

return 0;
}

Alors j'utilise le système d'enregistrement y_ini qui marche parfaitement, quand PlayerInfo[playerid][pAdmin] = 0 le /stats marche parfaitement mais quand je le change et que je mets n'importe quel autre valeur et que tape /stats sa me mets UNKNOW COMMAND .

Merci d'avance,
Cordialement,

11
Scripting SA-MP [Pawn center] / Recherche tutoriel
« le: 08 Août 2013, 16:46:09 »
Salut :)

Je recherche un tutoriel pour zcmd et sscanf si possible en français j'ai bien cherché mais je ne trouve que des tutoriel en anglais .

Merci d'avance,
Cordialement,

12
Scripting SA-MP [Pawn center] / problème paramètres fonction
« le: 07 Août 2013, 03:06:09 »
Salut,

Je voudrais crée une fonction dont un de ces paramètre serait killerid de la callback OnPlayerDeath et pouvoir utilisé cette fonction n'importe ou dans le code .

Merci d'avance,
Cordialement,

PS: Je ne sais pas même pas si c'est possible mais bon...

13
Scripting SA-MP [Pawn center] / problème compréhension
« le: 07 Août 2013, 01:38:35 »
Salut,

Je viens de trouver ça:

if(PlayerInfo[targetid][pSex] == 1)      { sexe = "Homme"; } 

J'ai pas compris ce que ça fais .

Merci d'avance,
Cordialement,

14
Jeux vidéo / [Vidéo] compilation buts pes 2013
« le: 15 Juillet 2013, 21:28:38 »
Salut,

Voila une ptite compilation de mes buts sur pes 2013 je suis un débutant sa ne fais que quelque mois que je joue a pes:

Compilation buts pes 2013

N’hésitez pas à visitez ma chaîne il y'a des trucs assez intéressant .

Merci d'avance,
Cordialement,

15
Scripting SA-MP [Pawn center] / Histoire pawn
« le: 05 Juillet 2013, 12:23:42 »
Bonjour,

Alors je cherche un article qui parle de l'histoire de pawn mais ce qui m’intéresse c'est l'histoire de pawn sur SAMP .

Merci d'avance,
Cordialement,

Pages: [1] 2 3