Leçon 1.5 · 17 min
Utiliser l'IA intelligemment
1Ce que l'IA fait bien
Une IA est très utile pour expliquer. Colle-lui une erreur de la console avec ton code, et elle te dira en français ce que veut dire attempt to index a nil value. Demande-lui de détailler un bout de code ligne par ligne, et tu comprendras plus vite qu'en le fixant pendant dix minutes. Elle sait aussi très bien le Lua de base : les boucles, les tables, les chaînes de caractères.
2Ce qu'elle invente
Le piège le plus courant : un hook ou une fonction qui n'existe pas, mais dont le nom a l'air parfait. Tu demandes « empêche les joueurs de mourir dans la mine pendant l'événement », et tu reçois ceci :
local treveActive = truehook.Add("PlayerShouldDie", "cosmos_treve", function(ply) if treveActive then return false endend)Ligne fautive : 3.
Le code se charge sans erreur. Et pourtant, les joueurs continuent de mourir. PlayerShouldDie n'existe pas : le wiki n'a aucune page à ce nom. hook.Add accepte n'importe quel nom sans broncher, mais GMod ne déclenche jamais un événement qu'il ne connaît pas, donc ta fonction n'est jamais appelée.
Le vrai hook est sur le wiki : GM:PlayerShouldTakeDamage, appelé sur le serveur avant chaque dégât, avec la victime et l'attaquant. S'il renvoie false, le joueur ne prend pas le coup.
local treveActive = truehook.Add("PlayerShouldTakeDamage", "cosmos_treve", function(victime, attaquant) if treveActive then return false endend)Ligne 3, seuls le nom du hook et ses arguments changent, et ils viennent de la page du wiki, dans le même ordre. Ligne 5, return false bloque le dégât. Quand la trêve est finie, la fonction ne renvoie rien, et le jeu applique ses règles normales.
L'autre classique, c'est une fonction qui vient d'un gamemode et que l'IA présente comme du GMod de base. ply:GetMoney() n'existe pas dans GMod. Sur un serveur DarkRP, l'argent passe par les fonctions du gamemode :
local function AcheterPioche(ply) if not ply:canAfford(500) then ply:ChatPrint("Il te faut 500 $ pour acheter une pioche.") return end ply:addMoney(-500)endLigne 2, canAfford renvoie true si le joueur a au moins cette somme. Ligne 6, addMoney avec un nombre négatif retire l'argent. Ces deux fonctions sont écrites dans le code de DarkRP, pas dans GMod : sans DarkRP, la console affiche une erreur dès qu'un joueur essaie d'acheter. Pour lire l'argent d'un joueur, DarkRP fournit ply:getDarkRPVar("money").
3Vérifier chaque nom
La méthode est toujours la même. Avant de coller du code d'IA dans ton addon, liste chaque fonction et chaque hook qu'il utilise, et ouvre leur page sur le wiki. Pour chaque nom, vérifie trois choses : que la page existe, que le royaume correspond au fichier où tu l'appelles, et que les arguments sont dans le bon ordre. Si la page n'existe pas, cherche si un gamemode comme DarkRP la fournit. Sinon, c'est une invention.
4Bien poser ta question
Plus ta question est précise, moins l'IA a de place pour inventer. Donne-lui le gamemode de ton serveur (Sandbox, DarkRP, un autre), le chemin du fichier pour qu'elle sache si le code tourne côté serveur ou client, et l'erreur complète de la console, avec sa première ligne (fichier et numéro de ligne) et la pile en dessous. Demande-lui une explication, pas seulement du code : une explication fausse se repère plus vite qu'un code faux.
Exercice 1.5 · Trouve le bug
30 XPLa trêve de la mine
Pendant un événement, personne ne doit prendre de dégâts. Une IA a écrit ce fichier : il se charge sans erreur, mais les joueurs continuent d'être blessés.
Cherche sur le wiki le hook utilisé. S'il n'existe pas, trouve celui qui décide si un joueur prend des dégâts.
Corrige le fichier : pendant la trêve, un joueur attaqué par un autre ne doit pas perdre de vie.
local treveActive = truehook.Add("PlayerShouldDie", "cosmos_treve", function(ply) if treveActive then return false endend)Ce que les tests vérifient
- Pendant la trêve, Kaze attaqué par Zorg_77 ne prend pas de dégâts
- La fonction est abonnée à PlayerShouldTakeDamage sous l'identifiant cosmos_treve
- Plus rien n'est abonné au hook inventé PlayerShouldDie
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.