Aller au contenu
San Andreas Multiplayer

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'tutoriel'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Communauté
    • Annonces et mises à jour
    • La plateforme communautaire
    • Présentations
    • La taverne
  • San Andreas Multiplayer
    • Discussions générales
    • Présentation de vos serveurs
    • Création de projets
    • Assistance
    • Centre d'aide au développement
    • Showroom
    • Chercher/Se proposer
  • Corbeille
    • Archives de la communauté

Catégories

  • San Andreas Multiplayer
    • Gamemodes
    • Filterscripts
    • Plugins & Includes
    • Mappings
  • Modding
    • Skins
    • Véhicules
    • Armes
    • Environnements
    • Mods
    • Divers
  • Modes multijoueurs GTA:SA alternatifs
    • Anderius Multiplayer
    • Criminal Russia Multiplayer
    • United Multiplayer v1.2
    • Gostown6 Multiplayer
    • Vice City Multiplayer
  • PSD & Webdesign
  • Outils web & autres

Formulaires

  • Administration
  • Proposer un article
  • Rédacteur

Catégories

  • San Andreas Multiplayer
    • Windows
    • Linux
    • Mapping
  • Programmation
    • Pawn

Blogs

  • Blog de la communauté

Rechercher les résultats dans…

Rechercher les résultats qui contiennent…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


A propos


Localisation


Site internet


Intérêts


Skype


Discord


Serveur

2 résultats trouvés

  1. Reloadedftw

    Tutoriel: IsPlayerInSquare une dérivée de IsPlayerInArea

    Courte introduction Ne vous êtes vous jamais demandé comment est-ce que l’on peut définir si un joueur se trouve dans une zone délimitée ? IsPlayerInArea (ou JoueurEstDansAire en français) est un nom répandu pour la fonction dont le but est de vérifier cela. IsPlayerInArea(playerid, ...) // La fonction en question Un peu de vocabulaire, un brin de lumière Mais qu’est ce qu’une zone réellement ? Je vois déjà venir Momo dans ses beaux jours, avec son air de françologue son air d’académicien : « Une zone c’est un espace géographique sur lequel on a imposé des limites – qu’on a délimité. » Tu n’as pas tord Momo. Cependant, on peut délimiter une zone de différentes façons et il est important de le souligner. On peut délimiter une zone en faisant un cercle, on peut limiter une zone en traçant un triangle, on peut délimiter une zone avec des contours aléatoires … « Ont peu maime thracé 1 zaunes an pheuzan dés carrés lolilol » Eh bien oui Momo, tu as raison (mais par pitié, corrige ton orthographe). Et c’est justement sur ce point que je veux attirer votre attention. Apprenons aujourd’hui à délimiter une zone rectangulaire (ou cubique) - en bref un parallélogramme régulier (je sens que ma terminologie géométrique est instable…) - , à l’aide d’un peu de logique. « Mé, Reloaded, a kwa ai ceux queue ssa serre ? » Momo, les applications sont multiples ! Si tu fais un système de foot, tu pourrais par exemple délimiter le terrain. Tu saurais si le joueur qui a la balle est hors limite, ou ne l’est pas Avoir les bons outils Maintenant que tout le monde est content, passons aux pré-requis. Pour comprendre facilement ce tutoriel, il faut : Savoir composer une fonction Savoir récupérer la position d'un joueur Savoir ce qu'est un repère orthonormé (c'est en quelle classe qu'on apprend ça déjà ?) Savoir récupérer une position en jeu (/save, sauvegardé dans savedpositions.txt) Avoir au minimum un moreceau de cerveau dans la tête (ou un reste de morceau) Avoir la faculté à raisonner d'un enfant normal de 12 ans. Le vif du sujet Lorsque l’on récupère la position d’un joueur, à l’aide de la bienfaisante fonction GetPlayerPos, on récupère trois types de coordonnées. On récupère la position dite X, la position dite Y et la position dite Z. Les positions X et Y correspondent en réalité à un point situé respectivement sur l’axe des ordonnées et l’axe des abscisses. native GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z); // La fameuse fonction tant utilisée Vous avez (je l’espère) appris à l’école qu’il existe deux types d’axes, qu’on utilise par exemple lorsque l’on veut représenter une fonction. Si votre mémoire est défaillante, ou que vous n’êtes pas encore arrivé là, je vous propose d’aller jeter un coup d’œil rapide sur ce site de maths http://www.cmath.fr/ très bien fait au passage, extrêmement utile et qui propose du contenu pour presque tous les niveaux (jusqu’au Bac Quand on récupère les positions du joueur par la fonction GetPlayerPos, comprenez que l’on récupère donc tout simplement les positions du joueur dans un repère orthonormé (celui du monde de GTA). La position Z comme vous le savez sûrement correspond simplement à la profondeur (ou la hauteur, ou ce que vous voulez). Il s'agit donc de coordonnées dans un repère à 3 dimensions que nous manipulons, mais par soucis de simplification nous nous passerons pour l'instant de la dernière variable (Z). La logique à suivre Peut-être que vous vous êtes déjà fait une idée de comment nous procéderons. Peut-être que vous le saviez déjà avant de lire ce tutoriel. Peut-être que vous n'en savez rien. Peut-être que vous avez en tête une méthode totalement différente de celle que j'ai à proposer. Bon, j'arrête l'anaphore, nous ne sommes point ici pour faire de la poésie Si j'ai introduit la fonction GetPlayerPos et que j'ai fait tout un discours au sujet des repères orthonormés, vous comprendrez que ce n'est pas pour rien. En réalité, pour vérifier qu'un joueur se trouve dans une zone indiquée, il faut vérifier que ses coordonées soient dans la zone indiquée Je sais, dit comme cela ça parrait forcément bête, mais ça ne l'est pas. Ce que cette phrase voulait dire, c'est que nous allons vérifier si les coordonées récupérées se situent dans la zone, c'est à dire si elles sont comprises dedans. Comprises dedans. Je me répète, mais c'est un mot clé ! A quoi revient le fait de vérifier si quelque chose et compris dans une autre ? A comparer les deux choses. Ce que nous allons faire, c'est tout simplement comparer des valeurs. Ou plus précisémment, les encadrer. Un petit exercice Pour vous guider encore mieux, je vous ai préparé un petit exercice. Connectez-vous sur votre serveur SA:MP préféré, ou si vous n'en avez pas, lancez le gm granlarc (le grand larcény vous appelle :déficiencementale: blague pas drôle). Dès votre connexion, visualisez un rectangle, là, sur le sol. C'est IMAGINAIRE !!! J'espère que la petite chanson vous a donné du courage, moi, oui et Momo aussi Alors ce que je vous demande de faire, c'est tout simplement d'imaginer les quatre extrémités du rectangle (celui qui a oublié ce que c'est qu'une extrémité, go se pendre). Placez votre personnage aux quatres extrémités de ce rectangle imaginaire et à chaque extrémité faites: /save Extrémité !!!!!!! Une fois que vous avez récupéré les 4 positions, ouvrez votre fichier savedpositions.txt et examinez ce que vous obtenez. Personellement, j'ai obtenu cela: En regardant ce que l'on obtient de plus près, on remarque qu'il y a des données qui se ressemblent. Les coordonnées Y des deux premières fonctions sont quasiment les même (-1064.3215 , -1060.9962 ). Elles ne sont pas pareilles car mon rectangle imaginaire n'était pas exact (il était un peu approximatif !). Regardez les coordonnées qui se ressemblent. Quelle conclusion pouvez vous en tirer ? Je vous laisse méditer là-dessus (en vraie j'ai la flemme de vous l'expliquer totalement, mais si vous réfléchissez et ne trouvez pas, je veux bien vous éclairer en commentaire ). Rien n'est fait au hasard... En tout cas pas avec moi ! Momo me demande alors : « Mé cé kouha leu butte deux les xair cises ? ». Momo, tu es fort impatient J'y viens ! Le but de tout ça, c'est de vous faire travailler comprendre qu'en réalité, lorsqu'on est aux extrémités du parallélogramme en question, il y a forcément des coordonnées qui se ressemblent. Je ne suis pas clair, je le sais, alors je vous fait un dessin. Si vous regardez mon schéma, vous voyez que certains extrémums partagent les mêmes coordonées. Par exemple, pour les extrémum A et B, il y a forcément la même position Y (y1). C'est le constat qe vous aviez fait dans l'exercice. Et cela n'est pas un hasard. Quand vous observez toutes les coordonnées, vous vous rendez compte qu'il y en a 4. Pour les X nous avons x1 et x2 ; pour les Y nous avons y1 et y2. Reprenez le schéma vous même et placez un point à l'intérieur de la zone. Que remarquez-vous ? Le constat n'est pas une coïncidence. Vous pouvez vous en convaincre en placant un point à l'extérieur de la zone. Le constat est-il toujours vérifié ? Est-il possible qu'un point à l'éxtérieur de la zone valide les conditions remarquées précédemment ? (dans le spoiler). Le but final n'est plus très loin Si vous avez bien tout fait les exercices, vous aurez compris que le but de notre fonction est de vérifier si les coordonnées du joueur (GetPlayerPos) sont comprises entre les positions x1 x2 y1 et y2 de notre zone. Juste dit comme ça, vous devriez savoir qu'est ce qu'il faut placer en paramètre ! Mais alors, qu'est ce qu'il nous faut comprendre maintenant ? Il faut encore comprendre quelles positions correspondront à x1 x2 y1 et y2. Tout à l'heure, nous avons récupéré 4 positions lorsque nous étions dans le jeu. Nous les avons étudiées. Si vous avez pris la peine d'y réfléchir, vous vous serez rendu compte de quoi? Alors maintenant, lorsque vous prendrez les positions de votre zone, vous saurez à quoi correspond quoi... Euh... oui... (petit coup de mou, sorry). Je suppose que parmi vous se cachent un lot bien garnis de segpas qui n'ont rien pigés, alors je vais approfondir un tant soit plus pour eux ! Dans les coordonées que vous récupérez, le x1 correspond à la plus petite valeur de x et le x2 à la plus grande. (Parmis toutes celles que vous avez récupérées). Vous faites de mêmes pour les y. Attention ! Et je dis bien, ATTENTION ! N'oubliez jamais ô grand jamais que lorsque les coordonnées sont NEGATIVES, c'est celle qui parait la plus grande (sans le signe -) qui est en réalité la plus petite. C'est à dire que entre -1500 et -1000, le plus grand des deux, c'est bien -1000, car il se rapproche plus de zéro et des nombres positifs que -1500. Bien sur, sans le signe négatif (-) si vous comparez par exemple 1000 et 1500, il va de soit que 1000 < (inférieur à) 1500. Autrement dit, que 1500 > (supérieur à) 1000. Pondez-moi cette fonction, bande de Jenkins ! Si vous êtes un inculte du MMORPG World of Warcraft, ne cherchez pas à comprendre le sous-titre. ( "Reloaded il en connait des choses !", s'exclama Momo dans un français étrangement correct.) Nous avons tous les outils et jusque là même Momo m'a suivit (bon, il dort, mais il a sûrement révé de moi ). Nous savons tout ce qu'il nous faut, et puisque vous avez les pré-requis, vous êtes en mesure de comprendre la fonction. Regardez ce que j'ai fait pour vous: stock bool:IsPlayerInSquare( playerid, Float:MIN_X , Float:MAX_X , Float:MIN_Y , Float:MAX_Y ) // On dit Square, mais ce n'est pas forcément un carré ! { if( !IsPlayerConnected( playerid ) ) return false ; static Float:P_POS[ 3 ] ; GetPlayerPos( playerid , P_POS[ 0 ] , P_POS[ 1 ] , P_POS[ 2 ] ) ; if( ( MIN_X <= P_POS[ 0 ] <= MAX_X ) && ( MIN_Y <= P_POS[ 1 ] <= MAX_Y ) ) return true ; return false ; } Que pensez-vous de ma fonction ? Elle manque d'optimisation ? Quelque chose ne va pas ? Je vous laisse jeter votre venin en commentaire ! Les devoirs de maison Héhéhéhéhéhéhéhé ! Je n'allais pas vous laisser partir comme ça * dit-il avec son air vraiment sadique *. Place maintenant aux devoirs de maison ! (Momo -> ) Vous allez me faire remarquer que nous n'avons pas dutout travaillé avec la coordonnée Z ici. Si vous voulez l'intégrer, comment pourrait-on faire ? Peut-être que nous pourrions créer une distance Z par rapport à la position Z d'origine. Si le joueur est à une distance (range) plus grande que celle définie, alors il n'est plus dans la zone ! Le premier qui me fait ça, je lui offre 13 points de réputation ! Ensuite, question de réflexion. Est-ce que vous pensez qu'il serait possible de trouver les coordonnées minimales et maximales pour X et pour Y avec 3 positions ? Si oui, pourquoi ? Si non, pourquoi ? Un exercice cette fois un peu plus délicat... Créez-moi une fonction IsPlayerInCircle (oui, plus dans un carré, mais dans un cercle cette fois !) Je vais arrêter les questions, je vous sens préssés d'en finir... Mot de fin... Ceci constitue ma première contribution sur ce forum. J'aimerais connaître votre avis sur mon tutoriel. Je sais qu'il est TREEES long, surtout pour ce de quoi il traite. Mais je suis un perfectionniste, je voulais aborder tous les points pour que tout le monde comprenne VRAIMENT (même si j'ai du en omettre certains pour ne pas vous pondre une thèse de 100 pages). Pardonnez, je vous en prie, les fautes d'orthographes ou grammaticales que j'ai pu comettre. Je tâcherais de les corriger au mieux. Enfin, j'aimerais savoir si vous aimeriez que je fasse un autre tutoriel ? Je reformule: Voulez-vous un autre tutoriel de moi? Si oui, sur quoi ? Fin du livre, je vous remercie de votre lecture attentionnée. Post Scriptum: Il existe déjà des fonctions IsPlayerInArea dont je ne me suis pas inspiré pour faire ce tutoriel. A vrai dire, je n'ai pas fouillé les fonctions déjà présente. Tout provient de mon imagination. Il peut donc existe d'autres méthodes, beaucoup plus efficace. Ce tutoriel a un but purement éducatif.
  2. Ce sujet fait office de support le tutoriel Tutoriel: IsPlayerInSquare une dérivée de IsPlayerInArea. Merci de poster vos questions ici.
×