GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Tutoriels et références SA:MP => Discussion démarrée par: Gilux le 21 Septembre 2010, 21:15:32

Titre: [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 21 Septembre 2010, 21:15:32
(http://i27.servimg.com/u/f27/14/77/47/47/pawno10.png)Apprenons le Pawn avec Gilux !(http://i27.servimg.com/u/f27/14/77/47/47/pawno10.png)
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

0) 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)


1) 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 :
(http://gtastuntlife.free-h.fr/gtastuntlife/images/sampclient2.png) (http://team.sa-mp.com/files/samp03csvr_win32.zip)

Vous découvrez l'interface de Pawno :
(http://i27.servimg.com/u/f27/14/77/47/47/pawno10.jpg)

En plus des boutons classiques "Nouveau" "Ouvrir" etc, il y a 2 boutons :
(http://i27.servimg.com/u/f27/14/77/47/47/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.

2) La structure d'un code

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

Les directives de précompilation
Voici quelques exemples :

#include <a_samp>
#include <include_basique>
#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
Code: (PAWN) [Sélectionner]
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 : */

3) 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) :
Code: (PAWN) [Sélectionner]
#include <a_samp>


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)
Code: (PAWN) [Sélectionner]
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 :
Code: (PAWN) [Sélectionner]
if(strcmp(cmd, "/beer", true) == 0)
{
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER);
    return 1;
}

Ce qui donne au final :
Code: (PAWN) [Sélectionner]
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", 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 (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 (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 (http://www.gtasa.fr/download.php?act=view&id=2105)) et le texte à afficher au joueur.

Essayons une commande :

Code: (pawn) [Sélectionner]
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 (phrase pour les incultes, string pour les anglophones)
Et toute chaine de caractères doit être entourée de guillemets doubles !

Reprenons le code :
Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/bonjour", true) == 0)
    {
    SendClientMessage(playerid,0x00FFFFFF,"Au revoir !");
    return 1;
    }

Cela marchera sans problème !

4) 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/ (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)

++ et bon script à tous !

Suite : Stuctures Utiles (Variables, Boucles, etc)
(http://www.siteduzero.com/Templates/images/designs/2/tutos/suivant.png) (http://www.gtaonline.fr/forums/index.php/topic,11595.0.html)



Reproduction autorisée, sous conditions Creative Commons.
(http://i.creativecommons.org/l/by-nc-nd/2.0/fr/88x31.png) (http://creativecommons.org/licenses/by-nc-nd/2.0/fr/)
Tuto réalisé pour The Pawn Zone (http://thepawnzone.net) et GTAOnline. (http://gtaonline.fr)
Titre: Re : [TUTO] On apprend le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Hip-hop le 21 Septembre 2010, 21:52:12
Joli tuto vraiment bien expliqué !  :king
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Lacuisse le 22 Septembre 2010, 12:24:08
Joli tuto épinglé  :)

++

Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Nesik le 22 Septembre 2010, 12:59:56
GG Gilux ça va en aider plus d'un  ;)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 22 Septembre 2010, 15:01:49
Salut, merci pour les commentaires, j'en profite pour dire que la 2e partie vient d'être postée ;)
++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Wati le 17 Octobre 2010, 00:09:26
Merci !!!!!
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: jujuSAMP le 19 Octobre 2010, 01:48:46
Merci pour ce merveilleux TUTO!

Sa ma beaucoup aidé.

Encore Merci !


Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: mougoumougou le 04 Novembre 2010, 21:21:05
#include <a_samp>


main()
{
print("\n----------------------------------");
print(" My First 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;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

public OnPlayerConnect(playerid)
{
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
return 1;
}

public OnPlayerSpawn(playerid)
{
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}

public OnPlayerText(playerid, text[])
{
return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/handsup", cmdtext, true) == 0)
{
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
    return 1;
}
if (strcmp("/biere", cmdtext, true) == 0)
{
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER);
    return 1;
    }
return 0;
}

Je ne sais pas ce qui cloche, mais quelque chose fais que mon serveur Didn't respond, ors avec LARP, mon serveur marche en local.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Nesik le 04 Novembre 2010, 21:34:56
Tu as compilé ton script et configuer ton server.cgf ?
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: mougoumougou le 04 Novembre 2010, 22:10:42
Compilé oui, et voilà mon server.cfg :
echo Executing Server Config...
lanmode 0
rcon_password bossstif
maxplayers 50
port 7777
hostname Stifox Dm
gamemode0 Stifox 1
filterscripts
announce 0
query 1
weburl [url=http://www.sa-mp.com]www.sa-mp.com[/url]
maxnpc 0
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Zombotech_Boss le 04 Novembre 2010, 22:34:56
Merci, sa ma appris des trucs que je ne connaissait pas malgré le petit bout de temps, et qui vont m'aider du coup  :laugh
Beau tuto'  ;)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Nesik le 05 Novembre 2010, 08:38:26
Citer
www.sa-mp.com (http://www.sa-mp.com)
Juste une question :
Pourquoi tu mets des balises BBcode,samp reconnait l'url juste en mettent sa-mp.com  ;)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: mougoumougou le 05 Novembre 2010, 13:01:30
Ouais j'me suis trompé, mais jpense pas que sa vienne de là...
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Nesik le 05 Novembre 2010, 13:29:25
Ouvre ton serveur et ajoute 127.0.0.1 des tes favoris
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jcvag44800 le 05 Novembre 2010, 17:37:15
Merci !

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

Sa me met error 017: undefined symbol "cmd"
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jcvag44800 le 05 Novembre 2010, 17:43:38
Merci , c'est foux sa fait à peine 5 minutes que j'ai commencé je comprend parfaitement ce que tu as dit  :D
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Karting06 le 05 Novembre 2010, 19:54:40
C'est normale c'est les bases!
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Pixect le 13 Novembre 2010, 14:26:12
Salut,

Merci pour cet excellent tuto Gilux !

++
ReGaX
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jcvag44800 le 28 Novembre 2010, 17:48:54
Merci

Mais , je n'ai pas trop compris sur le wiki , pour avoir la liste des commandes, c'est où s'il te plait.
Je suis aller ici (http://wiki.sa-mp.com/wiki/OnPlayerCommandText), mais je ne comprend pas trop où l'on trouve d'autre commande s'il te plait

++Jcvag44800++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 28 Novembre 2010, 18:03:24
Je suppose que tu parles des fonctions ^^

http://wiki.sa-mp.com/wiki/Category:Scripting_Functions (http://wiki.sa-mp.com/wiki/Category:Scripting_Functions)

Sinon, ce que tu as mis correspond à ce qui est appelé lorsqu'un joueur envoie une commande. Néanmoins, je te conseille d'utiliser les includes sscanf et ZCMD, qui sont beaucoup plus simples :)
(Il y a un tuto Commandes Rapides sur ce forum)
++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jcvag44800 le 28 Novembre 2010, 18:15:39
Merci je cherche là .
Tu as vu ma signature ?  :)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 28 Novembre 2010, 18:40:18
Ouais, mais je vois aussi une IP  :D
Titre: Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Wing le 03 Décembre 2010, 20:42:03
Joli tuto épinglé  :)

++


Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 09 Décembre 2010, 19:46:46
Merci all en tout cas  :ninja
Je suis présentement en train de refaire le tuto sur le site du zéro, le 1er avait été refusé (et il y a de quoi  :P)
++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Karting06 le 09 Décembre 2010, 21:43:45
J'aime pas les tutos du site du zero. Je comprends rien, c'est toujours mal mis ...
Titre: Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 09 Décembre 2010, 22:14:51
J'aime pas les tutos du site du zero. Je comprends rien, c'est toujours mal mis ...

-1  :D
J'ai tout appris dessus (VB,HTML,CSS,PHP,SQL) et je trouve ça très clair  ;)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 02 Janvier 2011, 17:25:58
Tutoriel mis à jour (0.3c).
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jcvag44800 le 02 Janvier 2011, 19:52:10
Cool  :)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Boomerkuigi le 03 Janvier 2011, 15:48:17
Je voulais savoir comment avoir les fonctions de samp dans la fenetre de l'editeur pawn, dans la partie reservée pour les fonctions ?
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: cristab le 03 Janvier 2011, 15:58:43
si tu es sous vista (pour seven je ne sais pas peu etre la meme chose)tu ouvre settings.ini et tu edite cette ligne FileAssoc=1  en  FileAssoc=0
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Karting06 le 03 Janvier 2011, 16:05:14
Non, c'est que sur vista.
Sur Seven il n'y a pas ce problème !!
Titre: Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 03 Janvier 2011, 18:01:05
Je voulais savoir comment avoir les fonctions de samp dans la fenetre de l'editeur pawn, dans la partie reservée pour les fonctions ?

Exécute-le en administrateur ^^
++
Titre: Re : Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Boomerkuigi le 04 Janvier 2011, 12:55:55
Je voulais savoir comment avoir les fonctions de samp dans la fenetre de l'editeur pawn, dans la partie reservée pour les fonctions ?

Exécute-le en administrateur ^^
++

Merci,  8)
Titre: Re : Re : Re : [TUTO] On apprend le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 23 Janvier 2011, 12:16:23
Je ne comprend pas la compilation. Quand j'appuie sur le bouton compiler on me dit "enregistrer sous" mais je le met ou?

Enregistre-le dans Gamemodes ;)
Sinon il te demandera d'enregistrer le fichier une seule fois, après ça ira tout seul.
++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: AcidTech™ le 23 Janvier 2011, 17:54:32
Beau tuto !  :king
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Tersatros le 08 Février 2011, 19:16:58
EDIT: Problème réglée, désolé. Bonne soirée.
J'ai un autre problème s'il vous plait, l'instruction SetPlayerSpecialAction est introuvable sur le Wiki (j'en suis sûr, j'ai chercher sur tous les scripting fuctions) et comment peut-on savoir les commandes exemple: lorsque que tu as fait HAND_UP et _BEER. Y a t-il d'autres actions qui existent sur cette instruction ou nous devons les inventer nous même? Désolé que je ne sois pas très compréhensible ^^.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: cristab le 08 Février 2011, 19:59:01
change vite de moteur de recherche http://wiki.sa-mp.com/wiki/SetPlayerSpecialAction (http://wiki.sa-mp.com/wiki/SetPlayerSpecialAction)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Tersatros le 09 Février 2011, 12:24:47
J'te remecie  :D!
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 11 Février 2011, 17:06:08
Je me permet de rappeler que le topic n'est pas fait pour les demandes d'aide et qu'il est préférable que vous vous créiez votre propre topic  ;)
++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Cliss le 27 Février 2011, 15:46:12
C'est bien expliquer tout ça.  ;) Fais juste attention à ne pas confondre fonction et instruction.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 28 Février 2011, 22:50:41
Si tu peux m'expliquer la vraie différence je suis preneur  :D
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 01 Mars 2011, 00:16:34
Une instruction appelle une fonction dans 90% des cas.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: S!m le 01 Mars 2011, 17:07:06
Salut,

Selon des sources relativement fiables:

une instruction est l'opération de base en programmation. Par exemple, une addition, une multiplication, opération binaire quelconque.....

une fonction serait donc une suite d'instructions regroupées ensembles.

Toutefois, on peut aussi parlé d'instruction dans le sens d'un "élément à exécuté".

Par exemple, dans le code suivant:

print("hello world");
AddPlayerClass(.....);
premierJoueur = 0;
premiereVoiture = 1;
limitePickup = 1000, limiteTextDraw = 2048;
derniereVoiture = premiereVoiture + 2000;

Dans les 4 premières lignes, chaque ligne correspond à une instruction.
La 5 contient deux instruction (on assigne une valeur à une variable, puis une autre valeur à une autre variable).
Et la dernière une seule.

++Sim++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 01 Mars 2011, 23:16:29
J'ai dit 90% car je n'étais pas sur que les opérandes était des appels de fonction.
Donc on peut dire que la programmation est faite à 100% de fonction.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Armans le 02 Mars 2011, 16:39:46
Citer
Salut,

Selon des sources relativement fiables:

une instruction est l'opération de base en programmation. Par exemple, une addition, une multiplication, opération binaire quelconque.....

une fonction serait donc une suite d'instructions regroupées ensembles.

Toutefois, on peut aussi parlé d'instruction dans le sens d'un "élément à exécuté".

Par exemple, dans le code suivant:

Code:
print("hello world");
AddPlayerClass(.....);
premierJoueur = 0;
premiereVoiture = 1;
limitePickup = 1000, limiteTextDraw = 2048;
derniereVoiture = premiereVoiture + 2000;

Dans les 4 premières lignes, chaque ligne correspond à une instruction.
La 5 contient deux instruction (on assigne une valeur à une variable, puis une autre valeur à une autre variable).
Et la dernière une seule.

Oh oh calmos je m’échappe de école pour un monde virtuel oû j'ai appris a scripter est pour revoir une phrase ou il y a ecrit multiplication addition et toute la smala ^^,non je lol mais sais drôle SIM quant sais les autre je comprend mais quant sais toi je pige que dalle a se que tu dit donc je prefère que quelqu'un me traduise car moi dans 80%(a par pour le TUTO des opérateur de logique ou la j'ai vite piger)je comprend rien a se que tu dit ^^.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: MK le 02 Mars 2011, 16:44:11
c'est pas si compliqué à comprendre...
tu ne comprend pas la signification d'instruction?
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Cliss le 03 Mars 2011, 18:38:28
Citer
les instructions se chiffrent à un peu plus de 200 avec l'include a_samp

Je parlais pour cette phrase. L'include contient des fonctions pas des instructions. (enfin dans un certain sens si puisque que les fonctions sont composées d'instructions)

Je suis d'accord :
monPoint.getX(); C'est une instruction qui dit à l'ordinateur "lance la fonction getPointPos sur l'objet monPoint".

Par contre :
Admettons que j'ai au préalable implémenté une classe point :
void Point::getX() const{
     return _x;
}
Ça c'est une fonction (un accesseur en lecture même) et pas une instruction. (même si il est uniquement constitué d'une instruction)
Elle dit à l'ordinateur quoi faire lorsqu'on l'appelle.

En gros, a_samp est constitué de fonctions que l'on appelle grâce à des instructions d'où l'ambiguïté de ta phrase. Mais bon, ça change rien à la compréhension du tuto donc on va pas en faire tout un fromage.

En espérant d'avoir été clair,
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: @l3sc48 le 16 Juillet 2011, 00:21:55
Mille merci j'ai compris se que tu ma dit sur mon sujet par compiler car enfete j’ouvrais avec blocnote
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 26 Juillet 2011, 13:02:58
Petite mise à jour, j'ai ajouté des ancres au tuto.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: rlndl le 06 Novembre 2011, 13:41:53
bonjour
quand est-ce que ce tuto sera redispo ?
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: juldu53000 le 17 Novembre 2011, 16:10:35
bonjour , oui exacte j'aimerais aussi savoir quan des ce que le tuto sera remis car je voudrais me mettre au pawn.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 08 Janvier 2012, 20:04:42
Super tuto !
Mais avant de poursuivre, j'aimerais, s'il vous plaît, savoir quelques choses :
- J'ai rename la commande " /beer " en " /bierre " mais elle ne marche pas quand je la teste sur mon serveur : je tape " /bierre " et ça me met : "Serveur unknow command ". Serait-ce la faute du rename de la commande ? Merci de me répondre.

- Je créer un nouveau fichier comme indiqué sur le tutoriel


#include <a_samp>


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


public OnPlayerCommandText(playerid, cmdtext[]) // La callback
{ // On ouvre la callback

if(strcmp(cmdtext, "/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(cmdtext, "/bierre", true) == 0) // Si le joueur n'a pas tapé /handsup, on va vérifier si la commande est "/beer", 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.
}

mais quand je l'indique dans mon server.cfg dans la partie des GM, le samp-server.exe ne se lance pas et donc je ne peux pas atteindre mon serveur.

Ce serait très gentikl de me répondre :)

Je vous souhaite une bonne soirée/journée

A plus tard
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 08 Janvier 2012, 20:35:04
Le code est correct, je ne vois aucune erreur.

Sinon, quelle est ton problème avec samp-server.exe ?

Supprime le fichier server_log.txt, relance ton serveur et met nous le contenu de ce fichier sur le forum.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 08 Janvier 2012, 20:58:28
Merci de m'avoir répondu mais je ne trouve pas le fichier server_log.txt, desolé :s
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 08 Janvier 2012, 21:17:36
Il doit se trouver à la racine de ton serveur, dans le même répertoire que samp-server.exe.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 09 Janvier 2012, 11:18:10
:O Je l'ai pas, j'ai que server-readme.txt et samp-license.txt

J'ai remarqué aussi que j'arrivais pas a stoper l'action du /handsup
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: FR_SalutSSBB le 09 Janvier 2012, 12:29:43
Alors tu dit que samp-server ne se lance et que là ben il s'est lancé parce que : /handsup tu a dit que /handsup ne s'arrêtait jamais mais là t'es dans le serveur en train de le tester non ? Ca veux dire que tu as samp-server ouvert !
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 09 Janvier 2012, 16:04:27
Bonjour et merci de m'avoir répondu.
Quand je dis que le /handsup ne s'arrête pas c'est parce que je l'ai testé sur le GM grandlarc mais quand je met mon GM à moi que j'ai commencé à scripter, le samp-server.exe ne se lance pas donc le serveur ne s'ouvre pas.
J'éspère trouver une réponse
Merci beaucoup
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 09 Janvier 2012, 16:07:31
Le fichier server_log.txt se créer après avoir lancé le serveur, pense à rafraîchir ton explorer (si tu es sous Windows).

PS: Créer un nouveau sujet pour exposer ton problème !
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 09 Janvier 2012, 16:41:17
J'ai lancé le serveur avec le GM grandlarc et j'ai pas le server_log.txt  :(
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xartrick le 09 Janvier 2012, 17:25:03
Créer un nouveau sujet pour exposer ton problème !
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: S!m le 10 Janvier 2012, 04:21:30
Salut,

il est compilé ce fichier? Vérifie que le nom est bon...

normalement aucun plugin n'est nécessaire vu le code, mais si ce n'est pas intégralement ce que tu as posté, c'est possible...

Pour ta commande, déjà on dit bière, pas bièrre...
mais j'avoue que je ne vois pas l'erreur.

bonne chance et essaie de fournir plus de détails, ça ne pourra que nous aider à t'aider.

+Sim++
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Antonio.C le 11 Janvier 2012, 08:34:33
Problème résolu :p Merci
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: horizon974 le 02 Mars 2012, 22:00:20
Bonsoirs, étant nouveau et très intéressé par le langage qu'est le Pawn j'aimerais savoir si Gilux compte continuer ses tutos étant donnés, qu'il s'arrête à la partie 3. Sinon, ce tutoriel ma beaucoup aidé au début et est plutôt bien vu. Pour ceux qui aurait comme moi leurs compilateur qui reverrait une erreur pour "cmd" c'est parce qu'il faut marqué "cmdtext" et normalement ça fonctionnera.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 02 Mars 2012, 23:48:45
Le tuto est terminé, la partie 3 est la "Conclusion" comme son nom l'indique ;)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Konis le 03 Mars 2012, 00:27:29
Merci de ton tuto , j'ai voulu m'y mettre il y'a une petite semaine pour me faire un serv pour le lycée en LAN , ça aide bien. :)
Titre: Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Kevin_Carter le 03 Mars 2012, 06:23:57
Merci de ton tuto , j'ai voulu m'y mettre il y'a une petite semaine pour me faire un serv pour le lycée en LAN , ça aide bien. :)
C'est clair, mais je te donne un conseil, si tu es débutant , apprends le ZCMD+sscanf :)
C'est BEAUUUUUUUCOUP plus lisible et BEAUUUUUCOUP plus simple que le strtok...
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Gilux le 17 Juillet 2012, 23:53:34
10000 vues \o/
Même si je promet rien, j'essaierai de mettre à jour les 3 tutos dans les semaines qui viennent :P
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Galante le 25 Septembre 2012, 00:03:07
Salut,



Double post
Salut,

je comprend parfaitement ton tuto, mais une question me brule les levres, comment fait on pour essayer nos deux commande? enfin je veux dire, comment peut on jouer sur notre serveur?
Bravo pour ton tuto je vien de me lancer dans les conceptions de serveur et tu m'aide vraiment, merci pour tout!!  :cheers

Cordialement, Galante
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Master62 le 08 Juillet 2013, 21:56:00
Je ne comprend pas tout,
La config j'ai compris sa sans soucis. La différences entre FS et GM sa aussi, mais pour ce qu'il en est du code c'est plus complexe car sa me mais des erreurs que je suis incapable de corriger.
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: rafffel le 09 Juillet 2013, 12:47:40
Quelles sont les erreurs que tu obtient ? (si un numéro de ligne est présent copie colle cette ligne ici aussi)
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Jizzy le 17 Octobre 2013, 01:16:14
Très bon tuto encore une fois. Mais pour ce genre de commande "SendClientMessage" où faut-il la placer au niveau du GM quand on fait "nouveau" pour pouvoir la compiler sans erreur svp?
Titre: Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Xolokos le 21 Octobre 2013, 09:34:58
Dans les callback ou il y a le paramètre playerid...
Titre: Re : Re : Re : [TUTO] Apprenons le Pawn avec Gilux ! [Partie 1 : Les bases]
Posté par: Kiloutre le 21 Octobre 2013, 13:05:13
Merci de ton tuto , j'ai voulu m'y mettre il y'a une petite semaine pour me faire un serv pour le lycée en LAN , ça aide bien. :)
C'est clair, mais je te donne un conseil, si tu es débutant , apprends le ZCMD+sscanf :)
C'est BEAUUUUUUUCOUP plus lisible et BEAUUUUUCOUP plus simple que le strtok...
Personnellement, je trouve le strtok beaucoup plus lisible que ZCMD&sscanf
Exemple:
Code: (pawn) [Sélectionner]
COMMAND:givemoney(playerid, params[])
{
    if (IsPlayerAdmin(playerid))
    {
        new
          toplayerid, // the player we want to give money to
          amount;
        // extracting player's ID and amount from params
        if (!sscanf(params, "ii", toplayerid, amount))
        {
          if (toplayerid != INVALID_PLAYER_ID)
          {
            new
              message[40];
            GivePlayerMoney(toplayerid, amount);
            format(message, sizeof(message), "You got $%d from admin!", amount);
            SendClientMessage(toplayerid, 0x00FF00FF, message);
          }
          else SendClientMessage(playerid, 0xFF0000FF, "That player is not connected");
        }
        else SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /givemoney <playerid> <amount>");
    }
    else SendClientMessage(playerid, 0xFF0000FF, "Only admins can use this command!");
    return 1;
}
Et pour strtok:
Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[128], idx, tmp[128];
    cmd=strtok(cmdtext, idx); //On récupère le tout premier paramètre, qui n'en est pas un, car c'est la commande en elle même)

    if(!strcmp(cmd, "/givemoney", true)) //La commande
    {
        new amount, message[40];
        tmp=strtok(cmdtext, idx); //On récupère le vrai premier paramètre, l'id du joueur
        amount=strtok(cmdtext, idx); //On récupère le deuxième paramètre, le montant à donner


        if(strlen(tmp)==null||strlen(amount)==null) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /givemoney <playerid> <amount>");
        if(!isPlayerConnected(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "That player is not connected");
        if(IsPlayerAdmin(playerid)) SendClientMessage(playerid, 0xFF0000FF, "Only admins can use this command!");


        GivePlayerMoney(strval(tmp), strval(amount));
        format(message, sizeof(message), "You got $%d from admin!", strval(amount));
        SendClientMessage(toplayerid, 0x00FF00FF, message);


        return 1;
    }

    return 0;
}

Le strtok est une chose très simple à comprendre, il y a juste à savoir que variable=strtok(cmdtext, idx); récupère le prochain paramètre existant
**Le joueur tape "/commande test atest testa"**
new cmd[128], var[128], avar[128], vara[128];
cmd= strtok(cmdtext, idx); //Récupère "/commande"
var = strtok(cmdtext, idx); //Récupère "test"
avar = strokt(cmdtext, idx); //Récupère "atest"
vara = strtok(cmdtext, idx); //Récupère "testa"