Éditeur de code

Écrire, tester et corriger gamemodes et addons Lua sans quitter le jeu, avec rechargement à chaud.

Ouvrir un projet

L'interface

ZoneRôle
Arborescence (gauche)Les fichiers du projet. + Fichier crée un fichier (un modèle d'entité est proposé dans entities/), Supprimer l'envoie à la corbeille, Dossier l'ouvre dans l'explorateur.
Code (centre)Onglets, numéros de ligne, coloration Lua. Un point « • » signale un fichier non enregistré.
Aide (droite)Signature, côté (serveur, client, partagé) et description de la fonction sous le curseur.
Console (bas)Messages print et erreurs Lua, serveur et client. Une erreur est un lien : un clic ouvre le fichier à la ligne fautive (surlignée en rouge) ; sous le message, la pile d'appels liste les fonctions de tes fichiers qui y ont mené. En haut : Pause sur erreur, Retirer les points d'arrêt et Profileur (voir Débogueur). La ligne de saisie exécute du Lua dans la partie en cours (côté serveur ou client).

Autocomplétion

Pendant la frappe, l'éditeur propose les fonctions de l'API PhysiCore : après hook., net., team.…, après ply: ou ent: (méthodes), après GM: (fonctions du gamemode) et ENT: (fonctions d'entité). Entrée ou Tab valide la suggestion.

Tester et recharger

  1. TESTER (F5) enregistre tout et lance une partie solo sur sb_naturebox avec ton gamemode (pour un addon : avec Sandbox, ton addon étant activé).
  2. En jeu, F2 rouvre l'éditeur par-dessus la partie, qui continue.
  3. Modifie le code et enregistre (Ctrl+S) : seul ce fichier est ré-exécuté, la partie continue (autorefresh).
  4. Pour tout relancer : RECHARGER (F5) : tous les scripts sont relus et relancés, côté serveur et chez les joueurs, sans quitter la partie. GM:Initialize est rappelé, et PlayerSpawn pour chaque joueur.
  5. Quitter la partie (Échap → Quitter la partie) ramène à l'éditeur.
Après un rechargement complet (F5)Les props, joueurs et variables réseau restent en place, mais les tables Lua sont recréées : garde l'état important dans des variables réseau plutôt que dans des variables locales si tu recharges souvent. L'autorefresh, lui, garde tout l'état Lua.

Autorefresh

Comme dans Garry's Mod, l'hôte (ou le serveur) vérifie chaque seconde la date de modification des fichiers Lua chargés (gamemode et addons, serveur et client). Un fichier enregistré, depuis l'éditeur de code ou n'importe quel autre éditeur, est ré-exécuté seul :

-- Garder l'état d'un rechargement à l'autre : ne pas écraser une table existante
MonAddon = MonAddon or { scores = {} }

hook.Add("OnReloaded", "MonAddon", function()
	print("MonAddon rechargé, " .. table.Count(MonAddon.scores) .. " scores gardés")
end)

Les joueurs qui arrivent ensuite reçoivent directement la version à jour. RECHARGER / F5 fait toujours un redémarrage complet de tous les scripts.

LimitesLes fichiers chargés par include() ne sont pas surveillés eux-mêmes : ré-enregistre le fichier qui les inclut. Un nouveau fichier ajouté au projet demande un F5. hook.Add avec le même identifiant remplace l'ancienne fonction (sans identifiant, l'ancienne reste aussi) ; timer.Create avec le même nom remplace le timer.

Débogueur

Points d'arrêt

L'écran de pause

Quand l'exécution atteint un point d'arrêt (ou une erreur, ou un pas à pas), tout le jeu s'arrête sur la ligne : l'appel Lua en cours ne peut pas rendre la main. Un écran s'affiche par-dessus, titré LUA EN PAUSE · serveur|client · raison (point d'arrêt, pas à pas, erreur).

CommandeToucheEffet
ContinuerF5Reprend jusqu'au prochain point d'arrêt.
Pas à pas principalF10Ligne suivante de la même fonction (sans entrer dans les fonctions appelées).
Pas à pas détailléF11Prochaine ligne Lua exécutée, même dans une fonction appelée ou un autre appel du jeu.
Pas à pas sortantMaj+F11Termine la fonction en cours et s'arrête dans l'appelant.
ZoneRôle
Code (gauche)Le fichier du niveau choisi, ligne courante surlignée ; un clic dans la marge pose ou retire un point d'arrêt ; molette pour défiler.
Pile d'appelsLes fonctions en cours (nom — fichier:ligne). Un clic choisit le niveau affiché.
VariablesVariables locales du niveau choisi, puis ses upvalues (en bleu) ; molette pour défiler.
ÉVALUERTape une expression ou une instruction Lua puis Entrée : elle s'exécute dans le niveau choisi et le résultat s'affiche. Les variables locales sont lisibles et modifiables (x = 5 change vraiment la locale x).

Profileur

Le bouton Profileur de la console affiche un onglet qui mesure le temps passé dans chaque fonction Lua d'une partie en cours. Choisis le royaume (Serveur ou Client), puis Démarrer / Arrêter ; Réinitialiser remet les compteurs à zéro. La durée mesurée s'affiche à côté ; le tableau est rafraîchi chaque seconde et trié par temps propre.

ColonneContenu
Fonctionhook Event « id », GM:Methode, classe:Methode (entités, armes), sinon le nom de la fonction ; « (moteur) » pour les fonctions du jeu.
Fichierfichier:ligne de la définition. Double-clic sur une ligne : ouvre le fichier.
AppelsNombre d'appels.
Total (ms)Temps total, fonctions appelées comprises.
Propre (ms)Temps sans les fonctions appelées.
ms / sTemps propre par seconde mesurée.
CoûtLa mesure ralentit le Lua tant qu'elle tourne : arrête-la une fois les chiffres lus.

Raccourcis

ToucheAction
Ctrl+S / Ctrl+Maj+SEnregistrer le fichier / tout
Ctrl+FRechercher dans le fichier (Entrée : suivant, Échap : fermer)
F5Tester, ou recharger pendant une partie
F5 / F10 / F11 / Maj+F11Écran de pause du débogueur : continuer / pas à pas principal / détaillé / sortant
F2Pendant un test : passer du jeu à l'éditeur