Leçon 1.4 · 20 min
Apprendre à utiliser le wiki de Garry's Mod
1Trouver une page
L'adresse est wiki.facepunch.com/gmod. La barre de gauche range tout en trois grands groupes : Player Guides pour les joueurs, Developer Guides pour les tutoriels, et Developer Reference pour la liste de tout ce qui existe en GLua. C'est ce dernier groupe que tu utiliseras : Globals pour les fonctions globales comme print, Classes pour les méthodes des objets comme un joueur ou une entité, Libraries pour les bibliothèques comme net ou hook, Hooks pour les événements du jeu, et Enumerations pour les constantes.
En haut de cette barre, un champ de recherche indique « press / to quick search ». Appuie sur / depuis n'importe quelle page du wiki, tape un nom, et la liste se filtre pendant que tu écris.
2Comprendre le nom d'une page
Le nom d'une page te dit déjà comment écrire l'appel dans ton code.
Global.printest une fonction globale. Dans ton code :print("...").net.Startest une fonction de la bibliothèquenet. Dans ton code :net.Start("...").Player:ChatPrintest une méthode des joueurs. Dans ton code :ply:ChatPrint("...").GM:PlayerSayest un hook du gamemode. Dans ton code :hook.Add("PlayerSay", ...).
Le préfixe Global. n'existe que dans le nom de la page : dans ton code, tu écris juste print. Les deux-points de Player:ChatPrint veulent dire qu'on l'appelle sur un joueur précis, rangé dans une variable, ici ply. Et un hook s'écrit GM:PlayerSay sur le wiki, mais tu t'y abonnes avec hook.Add et le nom seul, sans GM:.
3Lire une page de fonction
Ouvre la page Player:ChatPrint. Sous le titre, une ligne résume la fonction : un petit carré de couleur, puis la signature. Le carré, c'est le royaume, l'endroit où la fonction existe.
- Bleu : serveur seulement.
- Jaune : client seulement.
- Moitié jaune, moitié bleu : les deux. On dit partagé.
- Vert : le menu principal du jeu, que tu n'utiliseras pas dans un addon.
ChatPrint a le carré partagé. Plus bas, la section Arguments liste ce qu'il faut lui donner : un seul argument, string message, c'est-à-dire un texte. Il n'y a pas de section Returns, donc la fonction ne renvoie rien.
Les pages ont aussi des encadrés colorés. Sur ChatPrint, un encadré Warning prévient que le message est limité à 255 octets. Sur Player:Name, un encadré Deprecated dit de ne plus l'utiliser et de prendre Player:Nick à la place. Lis toujours ces encadrés : c'est là que le wiki note les pièges qu'on a découverts avant toi.
4Lire une page de hook
Un hook, c'est un événement du jeu auquel ton addon s'abonne. La page GM:PlayerSay a le carré bleu : le hook est appelé sur le serveur, chaque fois qu'un joueur envoie un message dans le chat. Ses arguments sont le joueur qui parle, le texte, et un booléen qui dit si c'est le chat d'équipe. Le wiki précise aussi que si tu renvoies une chaîne vide "", le message n'est pas affiché.
Avec ces deux pages, tu peux déjà écrire une commande de chat :
hook.Add("PlayerSay", "premiers_pas_aide", function(ply, texte) if texte == "!aide" then ply:ChatPrint("Bienvenue à la mine, " .. ply:Nick()) return "" endend)Ligne 1, le premier argument de hook.Add est le nom du hook, le deuxième un identifiant unique à ton addon : si un autre addon utilise le même identifiant, l'un écrase l'autre. Le troisième est la fonction appelée, avec les arguments que la page du hook annonce, dans le même ordre. On ne garde que les deux premiers, le troisième ne nous sert pas.
Ligne 3, Nick renvoie le pseudo du joueur, et ChatPrint l'envoie dans son chat à lui seul. Ligne 4, le return "" cache !aide aux autres joueurs, comme l'indique la page de PlayerSay.
Exercice 1.4 · À compléter
30 XPLa commande !aide
Le fichier contient une commande de chat à moitié écrite : deux noms de méthodes ont été remplacés par ___.
Sur le wiki, trouve la méthode des joueurs qui envoie un message dans le chat d'un seul joueur, et celle qui renvoie son pseudo. Attention à l'encadré Deprecated.
Remplace les deux ___. Quand Kaze tape !aide, il doit recevoir Bienvenue à la mine, Kaze, et son message ne doit pas s'afficher dans le chat.
hook.Add("PlayerSay", "cosmos_aide", function(ply, texte) if texte == "!aide" then ply:___("Bienvenue à la mine, " .. ply:___()) return "" endend)Ce que les tests vérifient
- Kaze tape !aide et reçoit « Bienvenue à la mine, Kaze » dans son chat
- Le message !aide n'apparaît pas dans le chat
- Un autre message passe sans être modifié
L'atelier se fait sur ordinateur : éditeur, console et tests côte à côte. Les indices et la solution commentée t'attendent dans l'atelier.