🔧 Chapitre 7 · Ton serveur Garry's Mod sur TeamKit

Devenir admin et le rester

Mis à jour le 04/10/2026 ·

Ton serveur tourne, tes amis arrivent, et la première personne qui fait n'importe quoi te pose la question : comment je l'expulse ? Et juste après : pourquoi je ne suis plus admin depuis le redémarrage d'hier ?

Ce chapitre répond aux deux. Mais d'abord, deux choses portent le même mot :

L'admin… Où ça se règle Ce que ça permet
du panel AMP teamkit.fr, les sous-comptes (chapitre 1) démarrer, régler, toucher aux fichiers
en jeu dans les fichiers du serveur (ce chapitre) expulser, bannir, utiliser les outils réservés

Être propriétaire de l'instance ne fait pas de toi un admin en jeu. Et un modérateur en jeu n'a aucune raison d'avoir un accès au panel.


1. Ce que Garry's Mod sait faire tout seul #

Garry's Mod connaît trois niveaux, et seulement trois :

  • user : tout le monde, par défaut ;
  • admin ;
  • superadmin.

Sans mod d'administration, il n'existe ni bannissement, ni mute, ni gel, ni téléportation en jeu. Tu as le menu contextuel de Garry's Mod, et ce que ton gamemode ajoute de lui-même. Certains gamemodes ont leur propre système de droits : sa documentation te le dira.

Pour tout le reste, il faut un mod d'administration (section 4). Et pour s'en servir, il faut d'abord être reconnu comme admin, ce qui commence par ton SteamID.

✅ À retenir Trois niveaux natifs, aucun outil de modération. Un mod d'administration n'est pas un luxe.


2. Trouver un SteamID #

Le bon format #

Garry's Mod reconnaît les joueurs par leur SteamID au format :

STEAM_0:X:YYYYYYY

Ce n'est pas le SteamID64, ce long nombre qu'on voit dans certaines adresses de profil Steam. Coller un SteamID64 là où on attend un STEAM_0:… ne donne aucune erreur : ça ne marche juste pas.

Recopie aussi le chiffre du milieu avec soin : STEAM_0:0:… et STEAM_0:1:… ne désignent pas la même personne.

Trois façons de le récupérer #

Dans la console AMP, au moment où le joueur se connecte. Une ligne de ce genre apparaît :

"JoueurExemple<2><STEAM_0:1:12345678><>" connected

Le SteamID est entre les deuxièmes chevrons. Le petit nombre entre les premiers, ici 2, est son numéro de session : il servira plus bas pour kickid.

Avec la commande status, tapée dans la console AMP : elle liste les joueurs connectés avec leur numéro et leur SteamID. Le fonctionnement général de la console est expliqué dans le tuto du panel : La console et les journaux.

Dans les journaux du jeu, si la personne n'est plus là : ouvre garrysmod/logs/ dans le File Manager. Il y a un fichier par démarrage, nommé L-AAAA-MM-JJ-NNN.log, et les connexions y sont notées avec les SteamID.

✅ À retenir STEAM_0:X:YYYYYYY, jamais le SteamID64. La console AMP l'affiche à chaque connexion.


3. users.txt : se déclarer admin à la main #

C'est la méthode native de Garry's Mod. Elle marche sans aucun addon, et c'est par elle que tu commences.

Le fichier #

Il se trouve dans garrysmod/settings/users.txt. Une entrée a cette forme :

    "superadmin"
    {
        "MonPseudo"     "STEAM_0:1:12345678"
    }

Le pseudo et le SteamID ci-dessus sont fictifs : remplace-les par les tiens. Le nom de gauche n'est qu'une étiquette pour t'y retrouver en relisant le fichier ; c'est le SteamID qui compte.

La procédure #

  1. Récupère ton SteamID (section 2).
  2. Ouvre le File Manager et va dans garrysmod/settings/.
  3. Ouvre users.txt dans l'éditeur.
  4. Ajoute ta ligne dans le bloc "superadmin", sur le modèle ci-dessus. Garde toutes les accolades déjà présentes dans le fichier : une accolade en trop ou en moins, et le fichier risque de ne plus être lu du tout.
  5. Enregistre.
  6. Va sur Status et clique sur Restart.
  7. Reconnecte-toi et vérifie que tu as bien accès à ce qui est réservé aux admins.

Pour un admin simple, même principe dans un bloc "admin". Une ligne par personne.

Pourquoi le redémarrage est obligatoire #

users.txt est lu au démarrage seulement. Tu peux le modifier pendant que le serveur tourne, l'enregistrer, te reconnecter dix fois : rien ne changera tant que le serveur n'aura pas redémarré. Le chapitre 2 explique pourquoi tant de choses ne sont lues qu'au lancement.

✅ À retenir settings/users.txt, SteamID au bon format, accolades intactes, puis Restart. Sans redémarrage, rien ne bouge.


4. ULX et ULib : le standard gratuit #

Ce que c'est #

ULX est le mod d'administration gratuit le plus répandu. Il apporte ce que Garry's Mod n'a pas : expulser, bannir, rendre muet, et bien d'autres commandes, ainsi qu'un système de grades plus riche que les trois niveaux natifs.

ULX ne fonctionne pas seul : il exige ULib, une bibliothèque sur laquelle il s'appuie.

Addon Id Workshop Taille
ULX 557962280 0,5 Mo
ULib 557962238 0,2 Mo

Ces deux ids ont été vérifiés par l'API Steam : ce sont les versions officielles, avec plus d'un million d'abonnés chacune. Méfie-toi des ré-uploads qu'on trouve en cherchant « ULX » sur le Workshop : deux exemplaires de la même chose, c'est des erreurs Lua assurées (règle du chapitre 4).

L'installation #

Les deux ids vont dans ta collection et dans Resource Lua Code. Dans ce dernier champ, ça donne :

resource.AddWorkshop("557962238")
resource.AddWorkshop("557962280")

Le chapitre 4 explique pourquoi il faut les deux listes, et comment éviter qu'une collection se télécharge à moitié avec la clé -authkey.

Un cas vérifié sur une vraie instance illustre le piège : ULX figurait dans Resource Lua Code, mais n'était pas encore descendu côté serveur. Résultat : aucun fichier ULX sur la machine, et un serveur qui ne le chargeait pas. Resource Lua Code sert aux joueurs, il ne télécharge rien pour le serveur.

Après l'ajout :

  1. Redémarre le serveur : les addons du Workshop sont montés au lancement.
  2. Vérifie que les deux .gma sont bien arrivés dans garrysmod/cache/srcds/ (méthode au chapitre 4).
  3. Connecte-toi et essaie une commande ULX en jeu.

Les grades d'ULX #

Une fois ULX en place, les grades se gèrent par ULX : avec ses commandes ulx, tapées en jeu, ou avec son menu. La liste complète des commandes et la façon d'ajouter un joueur à un grade sont dans la documentation officielle : https://ulyssesmod.net.

Le bon ordre pour démarrer : déclare-toi d'abord superadmin dans settings/users.txt (section 3), pour avoir les pleins droits au moment où tu découvres ULX. Ensuite, range tes modérateurs dans des grades ULX.

ULib enregistre ces grades dans son propre fichier :

garrysmod/data/ulib/users.txt

Ce fichier survit aux redémarrages. C'est toute la différence avec un grade donné « à chaud », qui disparaît au prochain lancement (section 6).

Attention au nom : il existe donc deux fichiers users.txt, et ils n'ont rien à voir.

Fichier Qui l'écrit Rôle
garrysmod/settings/users.txt toi, à la main les admins natifs de Garry's Mod
garrysmod/data/ulib/users.txt ULib, tout seul les grades d'ULX

Laisse ULib écrire le sien : passe par ULX pour changer un grade. Et comme tout ce qui vit dans garrysmod/data/, il fait partie de ton travail : il doit apparaître dans tes sauvegardes (chapitre 9).

✅ À retenir ULX 557962280 + ULib 557962238, dans la collection et dans Resource Lua Code. Les grades ULX vivent dans data/ulib/users.txt et survivent aux redémarrages.


5. La console AMP : agir sans être en jeu #

Tu n'es pas devant ton PC de jeu, et quelqu'un saccage le serveur ? La console AMP suffit. Voici les commandes natives du moteur Source qui y fonctionnent :

Commande Ce qu'elle fait
status liste les joueurs connectés, avec leur numéro de session et leur SteamID
kickid <userid> <motif> expulse le joueur qui porte ce numéro de session
banid <minutes> <steamid> kick bannit ce SteamID pour la durée donnée, et l'expulse
writeid enregistre les bannissements pour qu'ils survivent au redémarrage
say <texte> écrit un message dans le chat du serveur
changelevel <carte> change de carte
sv_password <mot de passe> change le mot de passe du serveur

Expulser puis bannir, pas à pas #

  1. Tape status et repère la ligne du joueur.
  2. Note son numéro de session et son SteamID.
  3. Expulse-le avec son numéro de session :
kickid 2 Destruction volontaire
  1. Bannis-le avec son SteamID, ici pour vingt-quatre heures (1 440 minutes) :
banid 1440 STEAM_0:1:12345678 kick
  1. Tape writeid. Sans lui, le bannissement ne survit pas au redémarrage.

Le numéro de session n'est pas le SteamID : c'est un simple compteur, propre à la connexion en cours. Refais un status juste avant chaque kickid, surtout si le joueur s'est reconnecté entre temps.

Deux remarques sur les autres commandes #

  • changelevel attend le vrai nom du fichier .bsp, pas le titre de la page Workshop. Le chapitre 5 raconte ce qui arrive sinon.
  • sv_password agit tout de suite, sur le serveur qui tourne. Pour un mot de passe qui reste en place, règle Server Password dans Configuration → Garry's Mod.

Pourquoi les commandes de chat de ton gamemode ne marchent pas ici #

Beaucoup de gamemodes ont leurs propres commandes, qu'on tape dans le chat en jeu. Tu les essaies dans la console AMP, et il ne se passe rien. Pas d'erreur, pas de message.

Ce n'est pas une panne. Le code d'un gamemode, vérifié pour ce tuto, commence par s'assurer qu'un joueur valide a tapé la commande. Depuis la console AMP, il n'y a pas de joueur : la fonction s'arrête sans un mot. Ces commandes sont faites pour être tapées en jeu.

Depuis la console, la porte d'entrée vers le code du serveur, c'est lua_run.

✅ À retenir status → kickid → banid → writeid. Les commandes de chat d'un gamemode ne répondent qu'en jeu.


6. lua_run : la porte de derrière #

lua_run exécute une ligne de Lua côté serveur, depuis la console AMP. C'est puissant, et ça n'a aucun garde-fou : une ligne fausse peut casser quelque chose sur le serveur en marche. Dans le pire des cas, un Restart recharge tout le code proprement.

Deux règles, apprises à la dure.

Règle 1 : des guillemets simples #

La console de Source découpe la ligne sur les guillemets doubles. Ton code arrive donc coupé en morceaux avant même d'être lu.

lua_run print("bonjour")

Cette ligne-là risque de ne pas faire ce que tu crois. Écris plutôt :

lua_run print('bonjour')

Le Lua accepte les deux sortes de guillemets : prends l'habitude des simples dans la console, et garde les doubles pour les fichiers.

Règle 2 : comparer sur le SteamID, jamais sur le pseudo #

Un pseudo se change en deux clics, se copie, et peut contenir des caractères invisibles. Le SteamID, lui, désigne un compte et un seul. Dès qu'une ligne de lua_run vise un joueur précis, elle doit le trouver par son SteamID.

Exemple : donner le grade superadmin au joueur STEAM_0:1:12345678 (fictif) pendant qu'il est connecté.

lua_run for _, p in ipairs(player.GetAll()) do if p:SteamID() == 'STEAM_0:1:12345678' then p:SetUserGroup('superadmin') end end

Les fonctions utilisées ici sont documentées sur le wiki officiel : https://wiki.facepunch.com/gmod.

Le piège : un grade donné à chaud ne dure pas #

Le grade posé par cette ligne vit en mémoire. Au prochain redémarrage, il a disparu. C'est pratique pour dépanner un soir, jamais pour installer un admin durable. Pour ça, il y a settings/users.txt (section 3) ou les grades ULX (section 4).

Et les fonctions de ton gamemode ? #

Si la documentation de ton gamemode décrit une fonction Lua équivalente à une commande de chat, appelle-la avec lua_run, en respectant les deux règles. Sinon, connecte-toi en jeu plutôt que de deviner.

✅ À retenir lua_run : guillemets simples, SteamID toujours. Ce qu'il donne s'efface au redémarrage.


7. Rester admin : ce qui fait perdre ses droits #

La plupart des « je ne suis plus admin » ont l'une de ces causes.

  • Un grade donné à chaud. Posé par lua_run, il disparaît au redémarrage. Normal.
  • users.txt modifié, serveur pas redémarré. Le fichier n'est lu qu'au lancement.
  • Un SteamID mal recopié. Un SteamID64 à la place du STEAM_0:…, ou un 0 pris pour un 1.
  • ULX qui n'est pas arrivé. Collection téléchargée à moitié, clé -authkey absente, ou ULX seulement dans Resource Lua Code : voir le chapitre 4.
  • Deux versions d'ULX en même temps. Un ré-upload à côté de l'officiel, et plus rien ne se comporte normalement.
  • Le dossier data/ perdu. Une restauration ancienne, ou une instance libérée : les grades ULX partent avec. Tes sauvegardes sont ton affaire (chapitre 9).

Et pour tes modérateurs : donne-leur un grade en jeu, pas un accès au panel. S'ils doivent aussi pouvoir relever le serveur quand il tombe, le sous-compte Relance suffit (chapitre 1).

✅ À retenir Un droit qui dure est écrit dans un fichier : settings/users.txt ou data/ulib/users.txt. Tout le reste s'efface au redémarrage.


✅ Checklist du chapitre #


❓ Si ça ne marche pas #

J'ai modifié users.txt et je ne suis toujours pas admin. Redémarre le serveur : le fichier n'est lu qu'au lancement. Si ça ne suffit pas, relis ton SteamID (format STEAM_0:…, bon chiffre du milieu) et compte les accolades du fichier.

Les commandes ulx ne répondent pas en jeu. ULX n'est probablement pas chargé par le serveur. Vérifie que ses deux ids sont dans la collection et pas seulement dans Resource Lua Code, que la clé -authkey est en place, et que les .gma sont dans garrysmod/cache/srcds/ (chapitre 4). Vérifie aussi que tu n'as qu'un seul ULX.

Le joueur que j'avais banni est revenu après le redémarrage. Tu as oublié writeid après le banid. Bannis-le à nouveau, puis tape writeid.

kickid ne trouve personne. Le numéro de session a changé : le joueur s'est reconnecté. Refais un status et reprends le numéro affiché.

Une commande de mon gamemode ne fait rien dans la console AMP. C'est normal : elle attend un joueur, et la console n'en est pas un. Tape-la en jeu, ou passe par lua_run si la documentation du gamemode décrit la fonction à appeler.

Mon lua_run renvoie une erreur ou ne fait rien. Cherche les guillemets doubles et remplace-les par des simples. Si l'erreur persiste, copie la ligne tapée et la réponse de la console, et demande sur le Discord TeamKit.

Une étape qui coince ? Ouvre un ticket sur le site ou demande sur le Discord TeamKit. Le bot Guide connaît ces pages.