• 06 Décembre 2019, 09:55:52


Auteur Sujet: [Tool] Modular Pawn  (Lu 4999 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2225
    • Voir le profil
[Tool] Modular Pawn
« le: 03 Juillet 2014, 16:04:16 »
Modular Pawn

Comme certains d'entre-vous le savent, je travaille actuellement sur un projet de serveur SA-MP. Pour ce dernier, j'ai eu envie d'utiliser le principe de la programmation modulaire (plus ou moins ce qu'on retrouve dans des langages tels que le C, par exemple). Seulement, le Pawn (dans un usage propre à SA-MP) n'est pas vraiment adapté à ça, de base. La faute à un IDE pauvre qui, lorsqu'on souhaite créer un nouveau projet, se contente d'afficher un fichier par défaut.

Pour pallier à ce problème, j'ai regroupé (avec l'aide de Kilou) toutes les callbacks existantes en plusieurs catégories, chacune propre à un système différent. Par exemple, tout ce qui concerne les véhicules est regroupé dans un fichier vehicles.pwn. Tout ce qui concerne le network et la synchronisation est regroupé dans un fichier network.pwn, et ainsi de suite.

On se retrouve au final avec plusieurs fichiers où il est beaucoup plus simple de trouver ce qu'on cherche au fil du temps. Tous sont reliés par un fichier principal (celui appelé par le serveur au lancement), qui se contente de les inclure. Ce fichier principal est également destiné à recevoir les variables globales, les directives de préprocesseur, les macros, etc.

Performances et utilisation

Côté performances, ça ne consomme absolument rien en ce qui concerne les ressources du serveur puisque j'utilise les directives de préprocesseur et qu'ainsi, après compilation, il n'y a qu'un seul fichier .amx comme ce serait le cas en temps normal. On pourrait imaginer que le temps de compilation soit légèrement plus long, mais ça reste à prouver (et si ça s'avère exact, ça ne devrait logiquement pas dépasser le centième de seconde).

Important : L'intérêt de cet outil, c'est de découper le code source en plusieurs fichiers. Il semble donc évidement qu'un IDE tel que Pawno est inadapté, puisque vous devriez ouvrir chaque fichier dans un nouvelle fenêtre. Pour utiliser pleinement le modulaire, je vous conseille des IDE tels que Notepad++ ou Sublime Text, qui offrent la fonctionnalité de file tree (arborescence de fichiers). De nombreux tutoriels sont disponibles sur le net pour les configurer afin de compiler du Pawn.

Pour utiliser cet outil, téléchargez-le, dézippez-le et placez le contenu dans le répertoire gamemodes de votre serveur. Compilez le fichier principal (main.pwn) et configurez le fichier server.cfg afin qu'il appelle ce dernier.

Si vous souhaitez ajouter vos propres fichiers, je vous conseille de créer un répertoire includes et de les placer dedans. De toute manière, jetez un œil au fichier principal et vous verrez que c'est plutôt simple à comprendre et copier.

Téléchargement

Télécharger la version 1.0 (03/07/14, .zip, 3.83 Ko)

Versions

  • Version 1.0
    • Release initiale
Bugs

Comment diantre voulez-vous qu'il y ait des bugs dans un truc aussi simple ? :biggrin:
Plus sérieusement, si vous en trouvez, prévenez-moi. Et vous aurez un cookie.

Notes
  • Cet outil n'est pas destiné à être utilisé en tant que filterscript. Mais modifiez-le à vos risques et périls si l'envie vous en prend.
  • Au final, c'est vraiment pas compliqué et je le partage surtout pour vous éviter de perdre votre temps en classant les callbacks par catégories. Ça reste à la portée du premier venu.
  • Concernant les crédits, faîtes ce que vous voulez de ces fichiers. Modifiez-les, partagez-les, vendez-les, imprimez-les, faîtes-en votre tapisserie, mentez sur votre CV en prétendant en être l'auteur, donnez-les à manger à votre chat... pour faire simple (et parler anglais parce que c'est classe), do what the fuck you want with those files.

PS - Merci à Kilou pour m'avoir aidé à ranger les callbacks par catégories. C'était ennuyeux. é_è

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1133
    • Voir le profil
Re : [Tool] Modular Pawn
« Réponse #1 le: 19 Juillet 2014, 07:11:28 »
Salut,

C'est une très bonne idée, mais si l'on souhaite utiliser des informations communes aux différents module (variable, fonction etc..) est-ce que l'utilisation des varint, risque pas de compliqués un peu la choses ?

A+, Sam.
:cheers:

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2225
    • Voir le profil
Re : [Tool] Modular Pawn
« Réponse #2 le: 19 Juillet 2014, 22:18:44 »
Salut,

Le fonctionnement du script principal permet d'utiliser des fonctions et variables globales sans soucis. Comme je l'ai expliqué, ça consiste simplement en un découpage des fichiers, et quelques directives de préprocesseur dans le fichier principal. Autrement dit, lors de la compilation, il n'y a qu'un seul fichier source (une fois le préprocessus terminé).

Comme je l'ai également indiqué, je recommande de créer un fichier pour les fonctions codées soi-même (en gros, tout ce qui ne touche pas aux callbacks), ainsi que pour les callbacks de plugins (streamer, par exemple). Au final, le fonctionnement ne change en rien, que ce soit avec les callbacks de base ou des customs. :)

Bonne soirée !

Hors ligne DexX

  • Développeur d'applications
  • *
  • Criminel
  • Senior de SA-MP
  • Messages: 30
    • Voir le profil
Re : [Tool] Modular Pawn
« Réponse #3 le: 23 Juillet 2014, 12:06:48 »
Salut, sympa l'outil, je travaillais déjà de cette manière sur mes projets SA-MP.
Je vais tester cela sur mon projet en cours.

Bien joué et merci ! ;)
« La patience mène à tous, faut juste savoir attendre ... »

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
Re : [Tool] Modular Pawn
« Réponse #4 le: 24 Juillet 2014, 01:48:25 »
Merci Gzsume très utile comme tool !