Un serveur Garry's Mod chargé d'addons produit des erreurs. Ce n'est pas un signe d'échec, c'est le quotidien. La différence entre quelqu'un qui galère et quelqu'un qui s'en sort, ce n'est pas le nombre d'erreurs : c'est de savoir les lire.
Ce chapitre t'apprend à décortiquer une erreur Lua, à trouver la ligne qui compte, à savoir si elle vient de ton serveur ou de l'ordinateur d'un joueur, à débloquer un serveur qui ne démarre pas, et à demander de l'aide avec ce qu'il faut — sans rien laisser fuiter.
La méthode générale (ce qui a changé, la première erreur, retirer, restaurer, demander) est déjà dans le chapitre Dépannage du tuto AMP. Ici, on ne parle que de ce qui est propre à Garry's Mod.
1. Ton meilleur outil : le serveur vide qui marchait #
Au chapitre 1, tu as démarré ton serveur en sandbox sur une carte du
jeu, sans aucun addon. Ce démarrage-là est ta référence.
Garde deux réflexes :
- une chose à la fois : un addon, une carte ou un gamemode ajouté, puis un redémarrage, puis un coup d'œil à la console. Si tu ajoutes dix choses d'un coup, tu ne sauras jamais laquelle a cassé ;
- revenir à la référence quand tu es perdu : un serveur qui redémarre sain en
sandboxte prouve que la machine, les ports et AMP vont bien. Le problème est alors dans ce que tu as ajouté.
✅ À retenir Ajoute une chose, redémarre, lis la console. Si tout est flou, reviens à
sandboxsur une carte du jeu pour savoir de quel côté chercher.
2. Anatomie d'une erreur Lua #
Voici une vraie erreur, relevée sur un serveur (le nom du gamemode et du fichier sont remplacés) :
Lua Error: [ERROR] bad argument #3 to 'Add' (function expected, got nil)
1. Add - lua/includes/modules/hook.lua:31
2. unknown - gamemodes/<ton-gamemode>/gamemode/shared/<fichier>.lua:36
3. include - [C]:-1
4. unknown - gamemodes/<ton-gamemode>/gamemode/include.lua:60
Elle a deux parties.
Le message #
La première ligne dit ce qui a cassé. Ici, mot à mot : le troisième argument donné à la fonction
Add était nil (vide, inexistant) alors qu'elle attendait une fonction.
nil revient très souvent. Il veut dire qu'une chose qui devait exister n'existe pas au moment où
le code s'en sert. Garde ce mot en tête : il t'oriente vers « quelque chose n'a pas été chargé »
plutôt que vers « le code est faux ».
La pile d'appels #
Les lignes numérotées en dessous disent par où le serveur est passé. Chaque ligne porte un
chemin de fichier, puis : et un numéro de ligne dans ce fichier.
lua/includes/modules/hook.lua:31: un fichier de Garry's Mod lui-même ;gamemodes/<ton-gamemode>/gamemode/shared/<fichier>.lua:36: un fichier du gamemode ;[C]:-1: un passage par le moteur du jeu, pas par un fichier Lua. Rien à ouvrir ;gamemodes/<ton-gamemode>/gamemode/include.lua:60: encore un fichier du gamemode.
✅ À retenir Le message dit ce qui a cassé, la pile dit par où.
nil= quelque chose qui devait exister n'existe pas.
3. Quelle ligne regarder #
La pile se lit dans les deux sens :
- la ligne 1 est l'endroit où ça a cassé ;
- la dernière ligne est l'endroit d'où tout est parti.
Le piège, c'est de foncer sur la ligne 1. Ici, elle pointe dans lua/includes/, le code de
Garry's Mod. Ce code-là n'est pas en cause : il a simplement reçu un nil qu'on lui a passé.
La ligne utile est la première qui porte un chemin dans TON contenu — ton gamemode, ton addon.
Dans l'exemple, c'est la ligne 2 : le fichier shared/<fichier>.lua, à la ligne 36. C'est là que
quelqu'un appelle Add avec quelque chose de vide.
Ouvrir le fichier en cause #
- Repère le début du chemin :
gamemodes/…,addons/…,lua/…. - Ouvre le File Manager et descends dans
garrysmod/, puis suis le chemin. - Ouvre le fichier et va au numéro de ligne indiqué.
Ça ne marche que pour ce qui a été déposé à la main. Un gamemode ou un addon venu du Workshop
reste dans son .gma, jamais décompressé : tu ne verras pas ses fichiers .lua dans le File
Manager (le chapitre 4 explique pourquoi). Dans ce cas, le chemin te sert à
identifier l'addon fautif, pas à le corriger toi-même.
Avant de toucher au code #
Une erreur dans un addon que des milliers de serveurs utilisent vient rarement d'une faute de son auteur. Cherche d'abord de ton côté :
- un doublon : deux exemplaires de la même base (l'officielle et un ré-upload qui l'embarque) provoquent des erreurs Lua. Règle : un seul exemplaire de chaque chose. Le chapitre 4 détaille ce cas vérifié ;
- une dépendance absente : un gamemode ou un addon qui attend un autre contenu que tu n'as pas installé (voir le chapitre 5) ;
- une erreur plus haut dans la console, qui a empêché un fichier de se charger : c'est la section suivante.
✅ À retenir Ignore les lignes qui pointent dans
lua/includes/. La bonne ligne est la première qui pointe dans ton contenu. Et cherche un doublon avant d'accuser l'auteur.
4. L'effet domino d'un include #
Regarde à nouveau la dernière ligne de l'exemple : include.lua:60. Beaucoup de gamemodes ont un
fichier qui en charge d'autres, un par un, avec include. À la ligne 60, ce fichier a chargé
shared/<fichier>.lua, qui a planté.
Une erreur dans un fichier inclus interrompt le fichier qui l'incluait. Tout ce qui venait après la ligne 60 n'a jamais été chargé. Sur le serveur où cette erreur a été relevée, ça représentait une dizaine de fichiers, dont trois côté serveur.
Le symptôme est très trompeur :
- le serveur démarre ;
- il passe en Running ;
- tu peux le rejoindre ;
- mais la moitié du gamemode n'existe pas : des menus absents, des commandes muettes, des fonctions qui ne font rien.
Tu crois avoir dix problèmes. Tu n'en as qu'un.
La conduite à tenir #
- Remonte la console (ou le journal, section 7) jusqu'à la toute première erreur Lua du démarrage.
- Corrige celle-là, et seulement celle-là.
- Redémarre : le code d'un gamemode est chargé au lancement, une correction déposée sur un serveur qui tourne ne change rien tant qu'il n'a pas redémarré.
- Relis la console. Bien souvent, les erreurs suivantes ont disparu : elles n'étaient que des conséquences.
✅ À retenir Une erreur dans un
includecoupe tout ce qui suit. Corrige la première erreur, redémarre, et regarde combien des autres ont disparu toutes seules.
5. Erreur du serveur ou erreur d'un joueur ? #
Le chapitre 2 explique qu'une partie du Lua tourne sur le serveur et une autre sur l'ordinateur de chaque joueur. Les erreurs suivent la même frontière.
Cas vérifié sur un serveur TeamKit : un joueur signalait une erreur qui citait un chemin
lua/autorun/… d'un addon. Or cet addon n'était ni parmi les .gma du serveur, ni dans
addons/. Le serveur ne l'avait tout simplement pas. L'erreur venait du Garry's Mod du joueur,
d'un addon auquel il était abonné de son côté.
Le test #
Quand on t'envoie une erreur, pose-toi une question : est-ce que mon serveur a cet addon ?
- Repère le nom de l'addon dans le chemin de l'erreur.
- Cherche-le dans
garrysmod/addons/avec le File Manager. - Cherche-le dans ta collection Workshop, puis vérifie qu'il est vraiment descendu dans
garrysmod/cache/srcds/(méthode au chapitre 4). - Regarde si la même erreur apparaît dans ta console AMP.
| Ce que tu trouves | D'où vient l'erreur |
|---|---|
| L'erreur est dans la console AMP | du serveur : c'est à toi d'agir |
| L'addon n'est nulle part sur le serveur | de l'ordinateur du joueur |
| L'addon est sur le serveur, l'erreur n'est que chez un joueur | côté client d'un addon du serveur : cherche si d'autres joueurs l'ont aussi |
Si l'erreur vient de l'ordinateur du joueur, ton serveur n'y peut rien. Le joueur doit regarder du côté des addons auxquels il est abonné lui-même.
✅ À retenir Une erreur qui cite un addon que ton serveur n'a pas vient du joueur, pas de toi. Vérifie avant de chercher pendant une heure.
6. Le serveur bloqué sur « Starting » #
Tu cliques sur Start, l'état passe à Starting… et n'arrive jamais à Running. Trois causes ont été constatées sur les serveurs TeamKit. Vérifie-les dans cet ordre.
Cause 1 : Custom Map ne porte pas le vrai nom du .bsp #
C'est la plus sournoise. Une carte dont la page Workshop s'appelle « Rp_NewExton2 » contient en
réalité le fichier maps/rp_newexton2_v4h.bsp. Mettre rp_newexton2 dans Custom Map fait
tourner le serveur dans le vide, sans jamais ouvrir sa console, et sans message d'erreur.
Le nom à saisir est celui du fichier, sans .bsp. Le chapitre 5 montre
comment le retrouver.
Cause 2 : la collection n'est descendue qu'à moitié #
Sans -authkey dans Additional Command Line Parameters, le serveur télécharge la collection en
anonyme, et Steam arrête le téléchargement en cours de route, sans prévenir. Relevé sur deux
instances : 8 items sur 17, et 67 sur 88.
Si ta carte ou ton gamemode fait partie de ce qui n'est pas descendu, le serveur ne peut pas le trouver. Le correctif et la vérification sont au chapitre 4.
Cause 3 : des erreurs Lua au chargement #
Lis la console pendant le démarrage. Une erreur Lua n'empêche pas toujours le serveur d'arriver à Running (section 4), mais c'est la première chose à regarder quand le démarrage s'éternise.
La méthode pour trancher #
- Clique sur Stop.
- Va dans Configuration → Garry's Mod, onglet Server.
- Note tes valeurs actuelles de Initial Map, Custom Map, Initial Gamemode et Custom Gamemode.
- Remets Initial Map sur une carte de la liste livrée avec le jeu, comme
gm_construct. - Démarre, et regarde si le serveur arrive à Running.
Si oui, la carte était en cause : retour à la cause 1 ou 2. Si non, remets aussi le gamemode sur
sandbox et recommence : si ça passe, le problème est dans le gamemode (cause 2 ou 3).
✅ À retenir Bloqué sur Starting : vérifie le vrai nom du
.bsp, puis que la collection est entièrement descendue, puis les erreurs Lua. Pour trancher, repasse sur une carte du jeu.
7. Les journaux : là où rien ne se perd #
La console AMP est pratique mais elle oublie : un bandeau te rappelle qu'elle n'affiche que les 1 000 dernières lignes. Au démarrage d'un serveur chargé en addons, la première erreur a souvent déjà disparu de l'écran. Les journaux, eux, gardent tout.
| Où | Ce que tu y trouves |
|---|---|
| La page Console d'AMP | les 1 000 dernières lignes, en direct |
garrysmod/logs/ |
l'historique du jeu, un fichier par démarrage |
AMP_Logs/, à la racine de l'instance |
les journaux d'AMP lui-même |
Les journaux du jeu #
Dans garrysmod/logs/, chaque démarrage crée un fichier nommé L-AAAA-MM-JJ-NNN.log : la date,
puis un numéro. Le plus récent correspond au dernier démarrage.
On y retrouve les connexions des joueurs avec leur SteamID, le chargement de la carte, et les erreurs Lua.
- Ouvre le File Manager et va dans
garrysmod/logs/. - Repère le fichier du démarrage qui t'intéresse, par sa date.
- Ouvre-le dans l'éditeur, ou télécharge-le pour le lire sur ton PC.
- Cherche le mot
ERRORet prends la première occurrence.
Les journaux d'AMP #
Le dossier AMP_Logs/ contient ce qu'AMP lui-même a noté sur ton instance. Tu en auras rarement
besoin pour une erreur Lua, mais garde en tête qu'il existe : il peut t'être demandé quand on
t'aide sur le Discord.
Pour lire la console et les journaux en général, le chapitre Console du tuto AMP complète cette section.
✅ À retenir La console oublie,
garrysmod/logs/se souvient. Un fichier par démarrage, chercheERROR, prends la première.
8. Demander de l'aide sur le Discord TeamKit #
Tu as cherché, tu bloques. C'est normal, et c'est à ça que sert le Discord TeamKit. La qualité de la réponse dépend surtout de ce que tu fournis.
Ce qu'il faut donner #
- le jeu : Garry's Mod (ça paraît évident, mais le Discord héberge beaucoup de jeux) ;
- le gamemode utilisé, et s'il vient du Workshop ou a été déposé à la main ;
- ce qui a changé juste avant la panne : addon ajouté, réglage modifié, Update ;
- le bloc d'erreur complet, message et toutes les lignes de la pile, copié en texte plutôt qu'en capture d'écran ;
- d'où vient l'erreur : ta console AMP, ton journal, ou l'écran d'un joueur ;
- l'ID de ta collection Workshop, et le nombre de
.gmaréellement présents dansgarrysmod/cache/srcds/face au nombre d'items de la collection ; - ce que tu as déjà essayé, pour qu'on ne te le redemande pas.
Ce qu'il ne faut JAMAIS coller #
⚠️ Un message sur Discord peut être lu, copié, capturé. Ne colle jamais :
- ton mot de passe AMP (c'est aussi ton mot de passe SFTP) ;
- le RCON Password et le Server Password ;
- ton Game Server Login Token (GSLT) ;
- ta Steam Web API key, celle qui suit
-authkeydans Additional Command Line Parameters.
Les pièges classiques :
- une capture de la page Configuration qui montre la ligne
-authkeyen clair ; - un fichier de configuration collé en entier sans l'avoir relu.
💡 Avant d'envoyer un fichier ou une capture, relis-les et remplace toute valeur de mot de passe, de
clé ou de jeton par XXX. Personne n'en a besoin pour t'aider.
✅ À retenir Le jeu, le gamemode, ce qui a changé, l'erreur complète en texte, ce que tu as essayé. Et jamais un mot de passe, un jeton ou une clé.
✅ Checklist du chapitre #
❓ Si ça ne marche pas #
J'ai corrigé le fichier, et l'erreur est toujours là. Le serveur tournait pendant la correction. Le code d'un gamemode est lu au lancement : clique sur Restart, puis relis la console.
Je ne trouve pas le fichier cité par l'erreur dans le File Manager.
Il vient sans doute d'un addon ou d'un gamemode du Workshop, qui reste enfermé dans son .gma.
Sers-toi du chemin pour identifier l'addon, puis cherche un doublon ou une dépendance manquante
(chapitre 4, chapitre 5).
Le serveur se rejoint, mais des pans entiers du gamemode manquent.
C'est l'effet domino (section 4). Remonte jusqu'à la toute première erreur Lua du démarrage, dans
garrysmod/logs/ si la console ne va pas assez haut.
Un joueur a une erreur que je ne vois jamais. Vérifie si ton serveur possède l'addon cité. S'il ne l'a pas, l'erreur vient d'un addon du joueur lui-même (section 5).
Le serveur reste sur Starting, même avec une carte du jeu et sandbox.
Ta référence ne démarre plus : ce n'est donc ni la carte ni le gamemode. Demande sur le Discord
TeamKit, en précisant que le serveur ne démarre plus en sandbox sur gm_construct.
La première erreur a disparu de la console.
La console n'affiche que les 1 000 dernières lignes. Ouvre le fichier du dernier démarrage dans
garrysmod/logs/.