May 7, 201313 yr Popular Post comment_146410 Salut tout le monde ! Je tiens à préciser que ce tutoriel sera une base pour l'apprentissage du sourcepawn donc ce sujet sera assez "précis". Si vous voulez apprendre un autre langage, vous pouvez également suivre ce tutoriel mais je vous conseille de poursuivre sur le site du zéro !Les phrases ou mot dans ce tutoriel seront "grossière" dans le sens où cela ne sera pas totalement vrai mais ça en donne une bonne description.Je tient à rappeler également qu'il ne sera surement pas le plus exhaustif possible, donc si vous avez des questions ou autre n'hésitez pas. À quoi cela va nous servir exactement ?-Le sourcepawn est un langage spécialisé pour le jeu counter strike : source. Donc cela nous servira à améliorer/modifier/créer un mod de jeu. Donc ce tutoriel va fonctionner dans l'analyse d'un fichier source. Je vais vous expliquer à quoi servent chacune des parties d'un fichier source. Commençons ! 1°/ Les includes : Elles sont TOUJOURS défini en début de votre fichier source. Elles sont là principalement pour vous permettre de programmer plus facilement dans le sens où elles vous proposent un large stock de fonction. #include <sourcemod>#include <colors>#include "mesfonctions.h" Avez vous suivi mon tuto sur la compilation d'un plugin ? Si oui, vous devriez remarquer la présence d'include familière comme sourcemod et colors. Voici un exemple de fonction disponible grâce à ces deux librairies : PrintToChat ==> cela permettra d'écrire dans le chat en jeu, une des fonctions les plus utiliser.GetClientTeam ==> Permet de savoir si un joueur est terroristes ou non CPrintToChat ==> vous allez me dire que c'est la même fonction que la première mais elle ne vient pas de la même librairies. "PrintToChat" vient de la librairie <sourcemod> et "CPrintToChat" vient de la librairie colors. La différence, c'est qu'avec "CPrintToChat" nous pouvons écrire en couleur. Pourquoi la troisième librairie n'est elle pas écrite comme les autres ? Car celle ci est une librairie que vous avez créer vous même et qui est relié à votre projet. Nous n'allons pas nous attarder la dessus car c'est pas encore de votre niveau ^^ ! 2°/ Les variables : Il existe un bon nombre de variable et nous pouvons les définir par de nombreuse manière. Les variables sont la pour stocké des informations que vous voulez stocker et de n'importe quel forme. Dans ces variables vous pouvez stocker du texte, des chiffres, des nombres, une suite de caractère etc etc ... a) Comment et où les définit-on ?Vous avez de nombreux choix qui s'offre à vous. Dans un premier temps vous avez les variables globales qui seront définies juste en dessus des includes. Les variables globales sont des variables qui pourront être utilisé dans n'importe quel fonction de notre programme mais elles seront également modifier dès que vous changerez ce qu'il y a dedans. Elles sont très pratique dans le sourcepawn mais attention à n'en pas en abuser. Ensuite nous avons les variables tout court, dans le sens où elles sont utilisés, reconnu et modifié seulement dans la fonction / la boucle où elle sera définie. Nous pouvons donner n'importe quel nom à notre variable mais évitez les caractères spéciaux. Comment les définit-on ?Très simple voici les différentes manières de définir une variable :PS : j'utiliserais la même variable à chaque fois, mais n'oubliez pas qu'une variable ne peut être défini qu'une fois si elle est défini en variable globale mais elle peut être défini plusieurs fois seulement si nous ne l'a définissons pas dans la même fonction / boucles. new tuto = 7 ; ==> je déclare une variable sous le nom de "tuto" et je lui introduit le nombre "7". Ici la variables n'acceptera que les nombres entier new bool:tuto = true ; ==> Ici j'ai déclaré une variable booléan ce qui veut dire qu'elle accepte que deux valeurs "true" ou "false" qui n'est autre que "1" ou "0" new Float:Nombre; ==> ici nous acceptons aussi les nombres à virgules new String:tuto[64]="bonjour tout le monde" ==> Ici j'ai déclaré une variable qui n'acceptera qu'une suite de caractère (donc suite de mots ou de nombres). "String" veut dire "chaine" et 64 signifie le nombre de caractère que nous pouvons mettre dans la variable qui comprends chiffre, lettre, espace, caractère spéciaux etc ... Attention Lorsque vous écrivez du texte il est impératif de le mettre entre guillemets ! Nous pouvons faire ce que l'on veut avec ces variables et nous pouvons les additionner/soustraire/multiplier/diviser lorsque c'est des nombres :alibaba = 5 + 6; ==> Ici alibaba est égale à 11alibaba = 8-12; ==> Ici alibaba est égale à -4alibaba = alibaba + alibaba ; ==> Ici alibaba est égale "-4" + "-4" donc "-8" Nous allons prendre le petit programme que j'avais pris en exemple dans mon tutoriel sur la compilation : #include <sourcemod> #include <colors> new alibaba = 7; OnClientPutInServer(client) // ==> nous verrons après, dites vous que c'est une fonction quelconque { new voleur = 0; new String:Phrase[64]="lol" ; alilibaba = 9; voleur = alibaba ; PrintToChat(client, Phrase); } c) Petit exercice sur les variables : Que vaut la valeur qui est dans "alibaba" à la fin du programme ?Que vaut la valeur qui est dans "voleur" à la fin du programme ?Qu'est ce qui est écrit lorsque nous utilisons "PrintToChat" avec notre variable "Phrase" ? Réfléchissez et voici ensuite les réponses pour vous corriger : alibaba vaut 9voleur vaut 9Ce qui est écrit est "lol" 3°/ Les fonctions / les boucles : Les fonctions généralistes :J'appelles cela des fonctions "généralistes" car elles sont utilisés dans un grand nombre de langage de programmation et non pas seulement que dans le sourcepawn. a) la condition "if" :Pour commencer "if" veut dire "si" en français. Cela va se structurer comme une propriété de mathématique que vous avez appris au collège :SI ma condition est vrai alors "je fais ce qui est dans la boucle" SINON "je fais autre chose" Il existe plusieurs "test" que nous pouvons faire dans ce "if" : alibaba == voleur Ceci teste si la variable alibaba est égale à la variable voleuralibaba > voleur Ceci teste si la variable alibaba est supérieur strictement à la variable voleuralibaba < voleur Ceci teste si la variable alibaba est inférieur strictement à la variable voleuralibaba <= voleur Ceci teste si la variable alibaba est inférieur ou égale à la variable voleuralibaba >= voleur Ceci teste si la variable alibaba est supérieur ou égale à la variable voleuralibaba != voleur Ceci teste si la variable alibaba n'est pas égale à la variable voleyr On peut également faire plusieurs test dans un même "if" grâce à des transitions comme celles-ci : && Ceci veut dire "ET"|| Ceci veut dire "OU" (double barre du 6) En langage de programmation cela s'écrit comme ceci : //SANS TRANSITIONS if(tuto == 5) //Si tuto est égale à 5 alors { Nous faisons quelque chose } else //Sinon { Nous faisons autre chose } //AVEC TRANSITIONSif(tuto == 5 && voleur ==6) //Si tuto est égale à 5 ET voleur est égale à 6 alors{Nous faisons quelque chose}else // Sinon{Nous faisons autre chose} la condition "switch" : (copiez sur le site du zéro et modifié pour le sourcepawn) La condition if... else que l'on vient de voir est le type de condition le plus souvent utilisé. En fait, il n'y a pas 36 façons de faire une condition en Sourcepawn . Le if... else permet de gérer tous les cas.Toutefois, le if... else peut s'avérer quelque peu"¦ répétitif. Prenons cet exemple : if (age == 2) { PrintToChat(client,"Salut bebe !"); } else if (age == 6) { PrintToChat(client, "Salut gamin !"); } else if (age == 12) { PrintToChat(client, "Salut jeune !"); } else if (age == 16) { PrintToChat(client, "Salut ado !"); } else if (age == 18) { PrintToChat(client, "Salut adulte !"); } else if (age == 68) { PrintToChat(client, "Salut papy !"); } else { PrintToChat(client, "Je n'ai aucune phrase de prête pour ton age"); } Construire un switch : Les informaticiens détestent faire des choses répétitives.Alors, pour éviter d'avoir à faire des répétitions comme ça quand on teste la valeur d'une seule et même variable, ils ont inventé une autre structure que le if... else. Cette structure particulière s'appelle switch. Voici un switch basé sur l'exemple qu'on vient de voir : switch (age) { case 2: PrintToChat(client,"Salut bebe !"); break; case 6: PrintToChat(client,"Salut gamin !"); break; case 12: PrintToChat(client, "Salut jeune !"); break; case 16: PrintToChat(client, "Salut ado !"); break; case 18: PrintToChat(client, "Salut adulte !"); break; case 68: PrintToChat(client, "Salut papy !"); break; default: PrintToChat(client, "Je n'ai aucune phrase de prête pour ton age "); break; } Imprégnez-vous de mon exemple pour créer vos propres switch. On les utilise plus rarement, mais c'est vrai que c'est pratique car ça fait (un peu) moins de code à taper.L'idée c'est donc d'écrire switch (maVariable) pour dire « je vais tester la valeur de la variable maVariable ». Vous ouvrez ensuite des accolades que vous refermez tout en bas. Ensuite, à l'intérieur de ces accolades, vous gérez tous les cas : case 2, case 4, case 5, case 45"¦ Attention Vous devez mettre une instruction break; obligatoirement à la fin de chaque cas. Si vous ne le faites pas, alors l'ordinateur ira lire les instructions en dessous censées être réservées aux autres cas ! L'instruction break; commande en fait à l'ordinateur de « sortir » des accolades.Enfin, le cas default correspond en fait au else qu'on connaît bien maintenant. Si la variable ne vaut aucune des valeurs précédentes, l'ordinateur ira lire le default. c) la boucle "while" : (copiez sur le site du zéro et modifié pour le sourcepawn) une boucle est une structure qui permet de répéter les mêmes instructions plusieurs fois.Tout comme pour les conditions, il y a plusieurs façons de réaliser des boucles. Au bout du compte, cela revient à faire la même chose : répéter les mêmes instructions un certain nombre de fois.Nous allons voir trois types de boucles courantes en C : whiledo"¦ whilefor Dans tous les cas, le schéma est le même (fig. suivante). http://uploads.siteduzero.com/files/7001_8000/7855.gifVoici ce qu'il se passe dans l'ordre : l'ordinateur lit les instructions de haut en bas (comme d'habitude) ;puis, une fois arrivé à la fin de la boucle, il repart à la première instruction ;il recommence alors à lire les instructions de haut en bas"¦"¦ et il repart au début de la boucle. Le problème dans ce système c'est que si on ne l'arrête pas, le serveur est capable de répéter les instructions à l'infini ! Il n'est pas du genre à se plaindre, vous savez : il fait ce qu'on lui dit de faire"¦ Il pourrait très bien se bloquer dans une boucle infinie, c'est d'ailleurs une des nombreuses craintes des programmeurs (plantage du serveur).Et c'est là qu'on retrouve"¦ les conditions ! Quand on crée une boucle, on indique toujours une condition. Cette condition signifiera « Répète la boucle tant que cette condition est vraie ».Comme je vous l'ai dit, il y a plusieurs manières de s'y prendre. Voyons voir sans plus tarder comment on réalise une boucle de type while en C. Voici comment on construit une boucle while : while (/* Condition */) { // Instructions à répéter } While veut dire "tant que" en français, donc nous pourrions traduire le code juste au dessus par :Tant que la condition est vrai, nous faisons l'instruction à répéter. Dès que cette condition n'est plus vrai, on passe à la suite. Petit exemple : new compteur= 1 ; while(compteur< 6) { PrintToChat(client, "salut"); compteur = compteur + 1; // On ajoute 1 a chaque fois que l'on rentre dans la boucle } //Ici la boucle est effectué 5 fois. Elle est donc effectué jusqu'à que compteur égale 5. d) la boucle do - while : (copiez sur le site du zéro et modifié pour le sourcepawn) Ce type de boucle est très similaire à while, bien qu'un peu moins utilisé en général.La seule chose qui change en fait par rapport à while, c'est la position de la condition. Au lieu d'être au début de la boucle, la condition est à la fin : new compteur = 0; do { PrintToChat(client, "Salut tout le monde !"); compteur++; } while (compteur < 10); Qu'est-ce que ça change ?C'est très simple : la boucle while pourrait très bien ne jamais être exécutée si la condition est fausse dès le départ. Par exemple, si on avait initialisé le compteur à 50, la condition aurait été fausse dès le début et on ne serait jamais rentré dans la boucle.Pour la boucle do"¦ while, c'est différent : cette boucle s'exécutera toujours au moins une fois. En effet, le test se fait à la fin comme vous pouvez le voir. Si on initialise compteur à 50, la boucle s'exécutera une fois.Il est donc parfois utile de faire des boucles de ce type, pour s'assurer que l'on rentre au moins une fois dans la boucle. Attention ! Il y a une particularité dans la boucle do"¦ while qu'on a tendance à oublier quand on débute : il y a un point-virgule tout à la fin ! N'oubliez pas d'en mettre un après le while, sinon votre programme plantera à la compilation !Je crois quand dans le sourcepawn, les virgules ne sont pas obligatoires mais prenez le réflexe maintenant si vous voulez apprendre d'autre langage par la suite e) la boucle for : (copiez sur le site du zéro et modifié pour le sourcepawn) En théorie, la boucle while permet de réaliser toutes les boucles que l'on veut.Toutefois, tout comme le switch pour les conditions, il est dans certains cas utile d'avoir un autre système de boucle plus « condensé », plus rapide à écrire.Les boucles for sont très très utilisées en programmation. Je n'ai pas de statistiques sous la main, mais sachez que vous utiliserez certainement autant de for que de while, si ce n'est plus, il vous faudra donc savoir manipuler ces deux types de boucles.Comme je vous le disais, les boucles for sont juste une autre façon de faire une boucle while.Voici un exemple de boucle while que nous avons vu tout à l'heure : new compteur = 0; while (compteur < 10) { PrintToChat(client, "Salut tout le monde !"); compteur++; } Voici maintenant l'équivalent en boucle for : new compteur = 0; for( compteur = 0 ; compteur < 10 ; compteur ++) { PrintToChat(client, " Salut tout le monde !"); } Quelles différences ?Vous noterez que l'on n'a pas initialisé la variable compteur à 0 dès sa déclaration (mais on aurait pu le faire).Il y a beaucoup de choses entre les parenthèses après le for (nous allons détailler ça après).Il n'y a plus de compteur++; dans la boucle.Intéressons-nous à ce qui se trouve entre les parenthèses, car c'est là que réside tout l'intérêt de la boucle for. Il y a trois instructions condensées, chacune séparée par un point-virgule.La première est l'initialisation : cette première instruction est utilisée pour préparer notre variable compteur. Dans notre cas, on initialise la variable à 0.La seconde est la condition : comme pour la boucle while, c'est la condition qui dit si la boucle doit être répétée ou non. Tant que la condition est vraie, la boucle for continue.Enfin, il y a l'incrémentation : cette dernière instruction est exécutée à la fin de chaque tour de boucle pour mettre à jour la variable compteur. La quasi-totalité du temps on fera une incrémentation, mais on peut aussi faire une décrémentation (variable--) ou encore n'importe quelle autre opération (variable += 2; pour avancer de 2 en 2 par exemple).Bref, comme vous le voyez la boucle for n'est rien d'autre qu'un condensé. Sachez vous en servir, vous en aurez besoin plus d'une fois ! Les fonctions spécialistes :Ces fonctions là sont particulières au sourcepawn et vous pourrez les retrouver dans d'autres langages de programmation pour certaines mais pour d'autre non.Je vais vous en expliquer une mais si vous voulez en apprendre plus je vous conseille ce site qui référence toutes les fonctions existantes dans le langage sourcepawn :http://docs.sourcemod.net/api/ Il faut savoir également que les fonctions sont structurés d'une certaine manière : 1°) Le type de la fonction (comme pour une variable) (en vert, elle est facultative)2°) Le nom de la fonction (en rouge)3°) Les paramètres que vous passez à la fonction (en orange)PrintToChat( client, "du texte"); Attention Lorsque vous écrivez du texte il est impératif de le mettre entre guillemets ! Dans cette fonction nous pouvons mettre des variables entre les guillements. Mais comment ? Car la fonction ne va pas reconnaître la variable mais du simple texte ! Pas de panique voici la solution : //Lorsque vous avez "lol" dans votre fonction, dans la chat va s'afficher le mot lol //Mais si vous faites comme ceci : new String:Phrase[64] = "mdr"; PrintToChat(client, "lol %s", Phrase); // Dans le chat va s'afficher la phrase : "lol mdr" Voici toutes les formes de raccourcis que nous pouvons mettre en guillemet %s ==> pour une variable de texte%d ==> pour une variable de nombreCe sont les deux principales que vous utiliserez Voilà c'est fini pour cette introduction à la programmation.Preparez vous sur des exercices que je mettrais plus tard à la suite du topic car dans quelque jour, vous me suivrez pour créer votre premier plugin et voir comment les fichiers source sont organisés ! Vous pourrez vous aider également des ces sites si vous voulez vous approfondir la dedans : http://docs.sourcemod.net/api/http://wiki.alliedmods.net/Introduction_to_SourcePawnhttp://wiki.alliedmods.net/Category:SourceMod_Scripting Mais également voir de plus près les tableaux : http://www.siteduzero.com/informatique/tutoriels/apprenez-a-programmer-en-c/les-tableaux-2 Bonne journée ! Si j'ai oublié ou fait une faute, c'est possible donc dites le moi ! Pour toutes questions, postez à la suite du topic. Report
May 10, 201313 yr comment_146692 Voila presque qu'un an que je te connais.Un an que tu code en SourcePawn, un an que tu me demande de l'aide. Plus tu me demande de l'aide moins je peux t'aider car tu atteins mon niveau (Même si il est pas comme celui de Kossolax ou SpheX). Tu as beacoup progresser depuis.Bravo Dertione Kriax. Report
July 12, 201312 yr Author comment_151748 Merci et derien, si tu as quelque probleme avec ce langage, tu peux m'ajouter steam : Dertione Report
July 12, 201312 yr comment_151761 J'ai quitté ma licence sciences de l'ingénieur à cause des algorithmes & de la programmation en langage C et quand je relis celà, j'ai tout un paquet de mauvais souvenirs qui resurgissent ( dont mon 2 en partiel de fin d'année sur ce bordel ) Si vous êtes pas patient de nature, c'est pas la peine de vous y mettre les gars. Je me rappellerais toujours des pages de code qu'on devait établir en C++ pour créer une animation alakon qui faisait défiler des images. Report
July 12, 201312 yr Author comment_151763 Bah moi, j'ai trouvé pas ca compliquer quand j'etais en DUT, sa depends du prof aussi apres lol. Nous pour faire une animation, on utilisait SDL. Report
July 12, 201312 yr comment_151764 Si vous êtes pas patient de nature, c'est pas la peine de vous y mettre les gars. J'ai même pas eu la patience de lire tout le tuto #NoFake Report
July 12, 201312 yr comment_151769 J'ai même pas eu la patience de lire tout le tuto #NoFake Tu es faible. Report
August 5, 201312 yr comment_153839 Bravo Dertione beaucoup de temps passer pour un tutoriel que j'ai en majorité compris même si j'ai des rudiments. Report
March 1, 201412 yr comment_169371 Meme si j'aime pas le code j'ai quand meme tout lu pour pouvoir en apprendre plus et etre curieux sur ce language la, je ne m'en servirait peut etre jamais a mon niveau mais ca pourra servir un jour, tres bon tuto malgres tout ;-) Report
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.