Jump to content
×
×
  • Create New...

[TUTO] Apprenons le Pawn [Partie 1 : Les bases]


Recommended Posts

Apprenons le Pawn

Partie 1 : Les bases

 

Salut à tous, et bienvenue dans ce qui sera ma série de tutoriels sur le langage Pawn.

Je vais commencer en douceur, avec les bases du langage.

 

Sommaire

0) Introduction

1) Découvrir Pawno

2) La Structure d'un code.

3) Votre première instruction

4) Conclusion

 

1) Introduction

 

Si vous lisez ce tutoriel, c'est que vous avez envie d'apprendre à coder en Pawn, et c'est un bon choix si vous débutez ! En effet, le pawn est un langage de programmation simple, mais puissant (quand il est maîtrisé toutefois)

 

Sont requis :

• La patience, l'apprentissage complet du PAWN prend quelques mois si c'est votre premier langage de programmation, et les erreurs vont venir mettre un peu plus vos nerfs à bout :D De plus, beaucoup de personnes veulent commencer un RP dès qu'ils apprennent, c'est la voie du suicide assurée ! (Bon allez encore passable si vous connaissez le C)

• Une maîtrise de l'anglais correcte, en effet le langage est 100% en anglais (Pas besoin de doctorat en anglais quand même hein ^^)

• De l'envie et de la persévérance, les bugs ne doivent pas vous rebuter...

• GTA San Andreas version 1.0 (Au cas où...)

 

Sans plus attendre, débutons le tutoriel. (Je partirai du principe que vous savez ouvrir vos ports si besoin, et les risques que cela entraîne (hack) et que vous savez configurer un serveur)

 

2) Découvrir Pawno

 

Je vais passer tout ce qui est configuration du serveur, vous trouverez sûrement comment configurer le serveur quelque part, ici je ne parlerai que de script.

Il va vous falloir ouvrir Pawno, livré avec l'archive de votre serveur :

sampclient2.png

 

Vous découvrez l'interface de Pawno :

pawno10.jpg

 

En plus des boutons classiques "Nouveau" "Ouvrir" etc, il y a 2 boutons :

captur10.png

 

Ils servent à compiler le script, car votre serveur ne fonctionnera pas avec les fichiers .pwn mais avec les fichiers .amx (Compilés)

C'est lors de cette compilation que le logiciel vous retournera des erreurs / avertissements si il doit en retourner.

 

Info : Pawno est ce qu'on appelle un IDE : Integrated Development Environment. En Français, cela se traduit par Environnement de développement.

Il contient l'éditeur de code, le compilateur, et le débuggeur qui vous retournera les erreurs. Il vous évite donc d'éditer le texte et d'avoir à utiliser un autre logiciel pour compiler.

 

Cliquez sur "New", un code s'affichera (Comme sur le screen)

C'est la structure de base d'un code, Nous allons l'aborder plus précisément dans le prochain chapitre.

3) La structure d'un code

 

Un code a plusieurs parties, nous allons les voir ici.

 

Les directives de précompilation

Voici quelques exemples :

 

#include

#include

#define COULEUR_ROUGE 0xFF0000FF

#define GivePlayerWeapon(%0,%1,%2); GiveWeaponToPlayer(%0,%1,%2);

 

Ces lignes sont en haut de votre script, et sont introduites par un dièse.

Elles permettent d'inclure des includes (fichiers contenant des fonctions supplémentaires), de substituer une fonction par une autre, etc etc.

 

La fonction main

 

{
   print("\n----------------------------------");
   print(" Gilux's GM");
   print("----------------------------------\n");
}

Cette fonction main est la fonction principale du script.

Elle permet juste de démarrer le serveur, il est inutile d'y toucher.

 

Les Callbacks

Les Callbacks sont des sortes d'évènements (OnPlayerConnect = Que faire à la connexion d'un joueur ?)

Elles se concluent toutes par un return 1; ou return 0; , Nous verrons cela plus en détail par la suite.

 

Les commentaires

C'est pas tellement une partie de code, mais c'est tellement utile que je vais en parler ici.

Un commentaire est une note que vous pouvez laisser, mais qui ne sera pas prise en compte dans la compilation.

C'est donc utile pour noter des crédits, des choses à faire, etc.

Un commentaire sur une ligne se commence comme cela : // et votre texte sur la ligne deviendra tout vert !

Si vous voulez mettre un commentaire sur plusieurs lignes, il faut le commencer comme cela :

/*

Et tout

Votre

Texte mis en commentaire deviendra vert !

*/

Vous l'avez remarqué, un commentaire multiligne se termine comme ça : */

 

4) Votre première instruction

 

Avant de commencer à scripter, il faut que je vous explique la différence entre un GameMode (GM) et FilterScript (FS) (Et include en même temps tiens !)

 

Un GM, c'est le script principal de votre serveur, alors qu'un FS est un script additionnel qui peut être chargé / déchargé à tout instant.

Quand j'ai un test dont je ne suis pas sûr, je le met en FS pour le tester, après je le met en GM si il marche.

 

Une include est un fichier avec l'extension .inc qui permet d'ajouter des fonctions au serveur.

 

Rappel : Les FS s'ajoutent au server.cfg sur la ligne filterscripts ! Vous pouvez aussi les charger / décharger IG avec la commande /rcon loadfs [Nom] et /rcon unloadfs [Nom]

 

Si vous voulez faire un GM, laissez tel quel ou utilisez ce début de code (Supprimez les #define, #if defined, OnFilterScriptInit et Exit qui correspondent aux initialisations et déchargement de FS, ce qui ne nous servira pas) :

 

#include 


main()
{
   print("\n----------------------------------");
   print(" Gilux's GM");
   print("----------------------------------\n");
}


public OnGameModeInit()
{
   // Don't use these lines if it's a filterscript
   SetGameModeText("Blank Script");
   AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
   return 1;
}

public OnGameModeExit()
{
   return 1;
}

 

(On se débarasse des conditions inutiles)

 

Nous allons commencer par un GM, histoire de pas trop nous embrouiller ^^

 

Que diriez-vous de créer une commande /handsup, qui permettra au joueur de se retrouver les mains en l'air ?

 

Pour cela, vous devez trouver la callback "OnPlayerCommandText" => Callback appelée quand un joueur tape une commande (/commande)

 

NOTE : Je m'habituerai à mettre des flèches orange autour des Callbacks et des instructions pour vous en donner le sens.

 

Voici le code à copier dans la callback (Entre les accolades d'ouverture et de fermeture)

 

if(strcmp(cmd, "/handsup", true) == 0)
{
   SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
   return 1;
}

 

En voici une autre, qui donnera une bouteille de bière au joueur :

 

if(strcmp(cmd, "/beer", true) == 0)
{
   SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER);
   return 1;
}

 

Ce qui donne au final :

 

<?php // Ne prêtez pas attention à ceci, c'est pour que le code soit en couleur ^^

public OnPlayerCommandText(playerid, cmdtext[]) // La callback
{ // On ouvre la callback 
if(strcmp(cmd, "/handsup", true) == 0) // On compare la commande et la chaîne de caractères /handsup
   { // Si la commande est /handsup, on ouvre une condition
   SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP); // On utilise une instruction
   return 1; // On retourne 1 au compilateur, ce qui veut dire que l'action a été effectuée sans problèmes.
   } // On ferme la condition car elle est finie
if(strcmp(cmd, "/beer", true) == 0) // Si le joueur n'a pas tapé /handsup, on va vérifier si la commande est "/beer", 
// (suite de la ligne au desus) sinon on ne procèdera pas à la vérification et on sortira de la "boucle" 
   { // On ouvre les accolades si la commande est correcte, sinon on retourne 0 (commande invalide)
   SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER); // On donne une bouteille au joueur (instruction)
   return 1; // On retourne 1, le boulot est fait, et on sort de la "boucle"
   } // on ferme la condition
return 0; // On retourne 0 si la commande tapée ne correspond à aucune commande listée.
} // On referme la callback

 

Dans ce code, on va comparer la commande à plusieurs "propositions" : La 1ère étant "Si le joueur a tapé /handsup". C'est une condition (Je vous en reparlerai plus précisément dans une prochaine partie du tutoriel). Si la condition est fausse, on passe à la suivante, etc. jusqu'à ce qu'on arrive au return 0; , ce qui signifiera que la commande ne correspond à rien (Le joueur aura un SERVER:UNKNOWN COMMAND qui s'affichera)

 

Dans les commentaires, j'ai parlé de "boucle". Ce terme n'est pas très approprié car il existe les "vraies" boucles qui n'ont pas du tout ce sens (quoique...) Bref, nous verrons les boucles plus tard ^^

Compilez le code, et lancez le serveur : Connectez-vous et tapez /beer et /handsup, cela devrait marcher sans problème si le compilateur n'a pas renvoyé d'erreur.

N'oubliez pas de sauvegarder le script dans "Gamemodes" et non dans "filterscripts" bien entendu ::)

 

Je vais maintenant revenir sur les instructions : Qu'est-ce qui caractérise une instruction ?

Une instruction (Ou fonction) effectue une action, les instructions se chiffrent à un peu plus de 200 avec l'include a_samp.

UNE INSTRUCTION SE TERMINE TOUJOURS PAR ; (A ne pas oublier !)

Une instruction reçoit des paramètres, donc on peut constater ici qu'elle en a reçu 2 : playerid et SPECIAL_ACTION_HANDSUP

Et maintenant, je vous donne un petit lien vers la page du wiki samp consacrée à cette instruction : http://wiki.sa-mp.com/wiki/SetPlayerSpecialAction (Comme j'avais dit, connaître l'anglais c'est mieux ^^)

On voit 2 paramètres : playerid (Ce paramètre on a pas besoin d'y toucher, il définit tout simplement l'ID du joueur qui a tapé la commande, et par conséquent, à qui va être affectée l'action, et actionid (en cliquant sur le lien vous trouverez différentes actions, comme sortir un portable, etc etc)

Vous pouvez donc commencer à créer des commandes avec les différentes instructions (Elles sont toutes disponibles ici : http://wiki.sa-mp.com/wiki/Category:Scripting_Functions)

Mais avant, nous allons voir comment envoyer du texte au joueur ("client")

C'est THE instruction à retenir, elle s'appelle : SendClientMessage(playerid,color,text);

 

Les paramètres montrent : playerid (comme j'ai dit plus haut on touche pas), color ( la couleur en héxadécimal, utilisez SA:MP Color Picker) et le texte à afficher au joueur.

 

Essayons une commande :

 

if(strcmp(cmd, "/bonjour", true) == 0)
   { 
   SendClientMessage(playerid,0x00FFFFFF,Au revoir !);
   return 1;
   }

 

Votre compilateur devrait vous renvoyer :

Undefined symbol "Au"

Undefined symbol "Revoir"

 

Ce qui veut dire en gros, que Au et Revoir ne sont ni des instructions, ni des variables...

Pour résoudre ce problème, il faut savoir que Au revoir est une chaine de caractères ([tt]phrase[/tt] pour les incultes, [tt]string[/tt] pour les anglophones)

Et toute chaine de caractères doit être entourée de guillemets doubles !

 

Reprenons le code :

if(strcmp(cmd, "/bonjour", true) == 0)
   { 
   SendClientMessage(playerid,0x00FFFFFF,"Au revoir !");
   return 1;
   }

 

Cela marchera sans problème !

 

5) Conclusion

 

Ainsi se termine ce 1er tutoriel qui, je pense, aidera beaucoup de monde pour débuter.

J'ai volontairement omis la configuration (server.cfg) pour la raison que des tutos existent déjà à ce propos (Tapez créer son serveur SA:MP sur Google)

En attendant la sortie de la partie 2, vous avez le temps de vous entrainer à l'aide du wiki : http://wiki.sa-mp.com/

Vous pouvez par exemple, à la mort d'un joueur (OnPlayerDeath) lui retirer de l'argent (GivePlayerMoney) et lui afficher un message !

Ou vous pouvez créer des commandes pour vous remettre la vie au maximum (SetPlayerHealth) et de l'armure tant qu'on y est ! (SetPlayerArmour)

 

/!\ Tuto par Gilux, merci a lui d'avoir bien voulu partager ces tutoriels avec notre communautée !

 

Link to comment
  • Replies 0
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Popular Days

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Flux d'Activité

    1. 29

      Rodnia.net | PVM | International | The Great Conqueror |

    2. 0

      [Funding/Incubator Program] W Combinator

    3. 25

      File Bvural41 (PAYANT) lvl 1-120 - Multi-Language

    4. 25

      File Bvural41 (PAYANT) lvl 1-120 - Multi-Language

    5. 9

      Canal général

    6. 9

      Canal général

    7. 9

      Canal général

    8. 9

      Canal général

    9. 9

      Canal général

  • Recently Browsing

    No registered users viewing this page.

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.