Structure d'un addon
Un addon est un dossier. Le même format sert pour les addons locaux et pour ceux du Workshop.
Arborescence
mon_addon/
├── addon.json titre, description (et workshop_id une fois publié)
├── preview.png miniature Workshop (ou preview.jpg) — facultatif
├── lua/ scripts Lua (par ordre alphabétique dans chaque dossier)
│ ├── autorun/ partagés : serveur + client
│ │ ├── server/ serveur seulement
│ │ └── client/ client seulement (HUD)
│ ├── entities/ entités scriptées (classe = nom du fichier)
│ ├── weapons/ armes Lua (SWEP, classe = nom du fichier)
│ │ └── gmod_tool/stools/ outils de toolgun Lua (TOOL)
│ └── *.lua serveur (anciens addons)
├── models/ modèles (pack de modèles)
│ ├── *.glb (ou .gltf)
│ ├── props.json réglages des modèles (nom, physique, collision…) — facultatif
│ └── textures/ images utilisées par les matériaux
├── vehicles/ véhicules : un .json par véhicule + modèles, voir Véhicules
├── weapons/ armes : un .json par arme + modèles et animations, voir Armes personnalisées
├── playermodels/ playermodels : un .json par playermodel + modèles et skins, voir Playermodels
├── sound/ sons (.ogg, .wav, .mp3) pour EmitSound / CreateSound
│ └── mon_addon/sirene.ogg
├── maps/ cartes faites avec l'éditeur de map
│ └── *.pcmap
└── dupes/ constructions sauvegardées
└── *.json
Tous les dossiers sont facultatifs : un addon peut ne contenir que des props, que des scripts, ou un mélange. L'éditeur de map crée lui-même l'addon (dossier, addon.json et maps/) de chaque nouvelle map, et l'éditeur de modèles celui de chaque pack de modèles.
Ordre de chargement des scripts : lua/entities/, lua/weapons/ et lua/weapons/gmod_tool/stools/ (partagés, voir Armes et outils en Lua), lua/autorun/, puis lua/autorun/server/ (et lua/*.lua) côté serveur, ou lua/autorun/client/ côté client. Les gamemodes ne sont pas des addons : ils ont leur propre dossier gamemodes/.
Les fichiers rangés dans d'autres sous-dossiers de lua/ (lua/monaddon/config.lua) ne sont pas lancés tout seuls : on les charge avec include, et le serveur les envoie aux joueurs avec AddCSLuaFile.
addon.json
| Clé | Type | Rôle |
|---|---|---|
title | texte | Nom affiché dans Mes addons, dans le menu de spawn (onglet de l'addon) et sur le Workshop. Par défaut : le nom du dossier. |
description | texte | Description affichée dans Mes addons et pré-remplie à la publication. |
workshop_id | nombre | Écrit automatiquement après la première publication. Il permet ensuite de mettre à jour le même objet Workshop. Ne le modifie pas à la main. |
{
"title": "Pack de véhicules",
"description": "Une jeep, un buggy et des roues tout-terrain."
}
Où sont les addons ?
| Source | Emplacement | Identifiant interne (clé) |
|---|---|---|
| Local | %APPDATA%\Godot\app_userdata\PhysiCore\addons\<dossier> | local_<dossier> |
| Workshop | Dossier géré par Steam (abonnements et téléchargements) | ws_<id Workshop> |
La clé sert à référencer le contenu d'un addon, par exemple un prop : addon:local_mon_addon/models/caisse.glb. Voir Props, maps et dupes.
Activer et désactiver
Dans Explorer → Mods → Mes addons, chaque addon a une case à cocher. Le choix est mémorisé. Un addon désactivé n'est ni chargé (scripts), ni proposé (props, maps, dupes).
Supprimer
Le bouton Supprimer de Mes addons demande une confirmation puis envoie le contenu à la corbeille de Windows (récupérable) :
- Addon (onglets Lua, Modèles, Tous) : tout son dossier.
- Map (onglet Maps) : la map choisie (une liste apparaît si l'addon en contient plusieurs) ; l'addon part aussi s'il ne contient plus rien d'autre que
addon.jsonet sa miniature. - Gamemode : son dossier. La confirmation prévient si d'autres gamemodes dérivent de lui. Base et Sandbox, intégrés au jeu, ne se suppriment pas.
- Objet du Workshop : tu t'en désabonnes et ses fichiers téléchargés sont effacés (dans l'onglet Maps, tout l'objet).
Ordre de chargement
- Au lancement d'une partie, l'hôte charge tous les addons activés, triés par titre.
- Dans chaque addon, les fichiers de
lua/sont exécutés par ordre alphabétique. Préfixe-les (00_config.lua,10_commandes.lua…) si l'ordre compte. - Tous les addons partagent le même état Lua : une variable globale définie par un addon est visible par les autres. Préfère
localet des identifiants de hook uniques (monaddon_…).
L'addon d'exemple
Au premier lancement, PhysiCore crée l'addon local « Exemple Lua » (addons/exemple_lua). Il ajoute un message de bienvenue et les commandes /aide et /soin. C'est un bon point de départ à copier.