Workshop et multijoueur
Publier ton addon sur le Steam Workshop, le mettre à jour, et comprendre comment les addons circulent entre les joueurs.
Publier un addon
- Lance PhysiCore avec Steam ouvert.
- Va dans Explorer → Mods → Publier, ou clique Publier… dans un éditeur (map, modèles, véhicules, armes, playermodels, code) : la fenêtre s'ouvre directement sur le mod que tu modifies.
- Choisis le contenu : un de tes addons locaux, ou une de tes dupes (elle est alors emballée automatiquement dans un addon
dupe_<nom>). - Remplis le titre, la description, la visibilité et une note de version.
- Clique sur Publier sur le Workshop et suis la progression (préparation, envoi du contenu, envoi de la miniature).
Tags
Les tags sont détectés d'après le contenu de l'addon, et tu peux les modifier avant l'envoi :
| Tag | Ajouté si l'addon contient |
|---|---|
Gamemode | un gamemode (publié depuis l'éditeur de code) |
Lua | des scripts dans lua/ |
Props | des modèles dans models/ |
Map | des cartes .pcmap dans maps/ |
Dupe | des dupes dans dupes/ |
Playermodel | des playermodels (fichiers .json dans playermodels/) |
Arme | des armes de l'éditeur (pack weapons/) ou des SWEP Lua (lua/weapons/) |
Véhicule | des véhicules (pack vehicles/) |
Outil | des outils Lua STOOL (lua/weapons/gmod_tool/stools/) |
Entité | des entités scriptées (lua/entities/) |
Miniature
Chaque objet du Workshop a une miniature : preview.png (ou preview.jpg) à la racine de l'addon, 512 × 512, moins de 1 Mo.
- Dans l'éditeur de map (menu Fichier), l'éditeur de modèles, l'éditeur de véhicules et l'éditeur d'armes (bouton Photo Workshop) : Prendre la photo (la vue actuelle, sans l'interface ni les repères), Photo avec cadrage automatique, Choisir une image du PC… (recadrée en carré et redimensionnée) et Voir la photo actuelle. Un aperçu propose Garder ou Reprendre.
- Dans la fenêtre Publier (tous les addons, gamemodes et dupes, aussi depuis l'éditeur de code), la miniature actuelle est affichée : un clic dessus (ou les boutons à côté) propose Choisir une image du PC… (recadrée en carré 512 × 512, avec un aperçu Garder / Reprendre), Miniature générée (le logo du jeu, un texte, par défaut le titre, et une couleur de fond au choix) et Retirer la miniature (envoyée à la corbeille). Pour une dupe, la miniature choisie est enregistrée au moment de la publication.
- Si tu publies depuis un éditeur sans avoir pris de photo, une photo automatique est prise avant l'envoi.
- Si tu publies sans éditeur (addon Lua, gamemode, dupe) et sans image, une miniature au logo de PhysiCore est générée.
Accord du Workshop
Steam exige que tu acceptes l'accord juridique du Workshop une fois. Si c'est nécessaire, PhysiCore ouvre la page correspondante dans l'overlay Steam après l'envoi.
Dépendances
Un addon peut exiger d'autres objets Workshop (un pack de modèles utilisé par une map, un addon de base…). Au moment de publier, indique leurs identifiants dans Dépendances (le nombre dans l'adresse de leur page : ?id=…). Ils sont enregistrés comme « objets requis » sur la page Steam.
- S'abonner depuis le jeu abonne aussi aux dépendances.
- Un serveur télécharge les dépendances de son contenu, et les joueurs qui le rejoignent les reçoivent.
- Dans Mes addons, un addon du Workshop dont une dépendance manque affiche un avertissement et un bouton Installer les dépendances.
Collections
Une collection Workshop regroupe des objets. Un serveur peut charger toute une collection (réglage Collection Workshop de la page Réglages du serveur) : tous ses objets et leurs dépendances sont téléchargés, puis envoyés aux joueurs. Pratique pour garder le même contenu sur un serveur dédié : on modifie la collection sur Steam, et le serveur suit au prochain redémarrage.
Mettre à jour
Après la première publication, l'identifiant Workshop est enregistré dans addon.json (workshop_id). Le bouton devient Mettre à jour : le même objet Workshop est remplacé par le contenu actuel du dossier, avec ta note de version. Les joueurs abonnés reçoivent la mise à jour automatiquement.
À côté, Republier comme nouvel objet (après confirmation) ignore l'identifiant enregistré et crée un nouvel objet Workshop, dont l'identifiant remplace l'ancien dans addon.json (ou gamemode.json). C'est utile si l'ancien objet est cassé ou a été supprimé. L'ancien objet reste en ligne, mais ses abonnés ne reçoivent plus les mises à jour.
S'abonner depuis le jeu
Explorer → Mods affiche le Workshop de PhysiCore : tri Populaires ou Récents, filtre par type (bouton entonnoir : Gamemodes, Addons Lua, Props, Maps, Dupes, Playermodels, Armes, Véhicules, Outils, Entités, d'après les tags) et recherche (barre au-dessus de la page, valider avec Entrée). S'ABONNER télécharge l'addon tout de suite (le bouton affiche TÉLÉCHARGEMENT … %), puis il apparaît dans Mes addons sans relancer le jeu. Steam met normalement en pause les téléchargements Workshop pendant qu'un jeu tourne : PhysiCore les demande explicitement, et au lancement il télécharge aussi les abonnements manquants ou pas à jour (abonnement fait depuis la page Steam, nouvelle version publiée…). Clique sur la miniature pour ouvrir la page Steam de l'objet.
Téléchargement automatique
Comme dans Garry's Mod, rejoindre un serveur télécharge ses addons :
- À la connexion, le serveur envoie la liste de ses addons Workshop activés (avec ceux de sa collection et leurs dépendances), de ses addons locaux activés déjà publiés (ceux qui ont un
workshop_iddansaddon.json) et la carte jouée. - Un écran de chargement s'affiche : le client télécharge ceux qui lui manquent ou qui ne sont pas à jour (barre de progression), reçoit la map puis les scripts. Le bouton Annuler quitte la connexion.
- Si la carte est une map
.pcmap, le serveur l'envoie directement : elle n'a pas besoin d'être installée chez le joueur. - Ces addons sont activés pour la session, sans abonnement, puis retirés quand tu quittes la partie.
- La carte est chargée, puis le joueur apparaît.
Un serveur dédié peut aussi envoyer ses mods sans le Workshop, depuis son dossier fastdl/ : voir FastDL. Ils sont téléchargés juste avant ceux du Workshop, sur le même écran de chargement.
addon:local_mon_pack/models/caisse.glb chez l'hôte correspond à addon:ws_<id>/models/caisse.glb chez le joueur, dans les deux sens.Un addon local jamais publié n'est pas envoyé. Ses scripts fonctionnent quand même, puisqu'ils tournent sur l'hôte, et la map jouée est toujours envoyée par le serveur. En revanche, ses props s'affichent en cube ERROR chez les autres joueurs.
Lua et multijoueur
- Les scripts serveur (règles du gamemode, scripts serveur des addons) tournent chez l'hôte. Santé, props, couleurs, messages, équipes et variables réseau sont envoyés automatiquement aux joueurs.
- Les scripts client (HUD, affichage) sont envoyés par l'hôte aux joueurs qui rejoignent : ils fonctionnent même si le gamemode ou l'addon n'est pas publié. Voir Lua client et réseau.
- Tes commandes de chat (
concommand) fonctionnent pour tous les joueurs : le message est envoyé à l'hôte, qui exécute la commande.
Workshop depuis le Lua : steamworks
Côté client seulement, et seulement quand Steam est lancé (sinon les fonctions renvoient false, "" ou appellent le rappel avec nil). Les identifiants (objets Workshop, SteamID64) se passent en texte, comme dans GMod ("3456789012").
| Fonction | Description |
|---|---|
steamworks.IsSteamAvailable() | Steam est-il lancé ? |
steamworks.IsSubscribed(id) | Le joueur est-il abonné à cet objet ? |
steamworks.ShouldMountAddon(id) | L'addon Workshop est-il activé chez le joueur ? |
steamworks.ViewFile(id) | Ouvre la page de l'objet dans l'overlay Steam. |
steamworks.FileInfo(id, rappel) | Demande les infos de l'objet à Steam ; rappel(info) avec info.id, title, description, owner (SteamID64), created, updated (secondes Unix), size (octets), tags (table), up, down (votes), installed ; nil si Steam ne le connaît pas. |
steamworks.DownloadUGC(id, rappel) | Télécharge l'objet (sans abonnement et sans l'activer) ; rappel(dossier) avec son dossier d'installation, ou nil en cas d'échec. |
steamworks.GetPlayerName(steamid64) | Nom Steam connu de ce compte ("" sinon). |
steamworks.RequestPlayerInfo(steamid64, rappel) | Demande son nom à Steam ; rappel(nom) environ une seconde plus tard. |
steamworks.FileInfo("3456789012", function(info)
if not info then return end
print(info.title .. " : " .. info.up .. " votes positifs")
end)
achievements.Count(), GetName(i), GetDesc(i), IsAchieved(i), GetCount(i), GetGoal(i) lisent les succès Steam de PhysiCore (lecture seule : un script ne peut pas en débloquer). Les compteurs propres à GMod (achievements.SpawnedProp(), BalloonPopped()…) existent mais ne font rien.
Publier un gamemode
Depuis l'éditeur de code (Publier…) ou Mods → Publier, choisis « Gamemode : … ». Il reçoit le tag Gamemode et son identifiant Workshop est enregistré dans gamemode.json. Les abonnés le voient dans Créer une partie ; le filtre Gamemodes de la page Mods les liste.
Sécurité
Un addon Workshop téléchargé automatiquement ne peut pas :
- lire ou écrire des fichiers (
io,dofile,loadfileetrequiresont retirés) ; - lancer des programmes ou lire l'environnement (
osest retiré) ; - accéder aux classes du moteur (nœuds, réseau, fichiers).
Détails dans Bac à sable et sécurité.
Problèmes fréquents
| Symptôme | Cause probable |
|---|---|
| « Steam n'est pas lancé » | Ouvre Steam avant le jeu ; le Workshop et la publication en ont besoin. |
| « Création refusée par Steam » | Le Workshop n'est pas encore activé pour l'application dans Steamworks (développeur du jeu). |
| « Échec de l'envoi (code 8) » | L'objet est créé mais Steam refuse le contenu. Le journal de Steam (Steam/logs/workshop_log.txt) indique no workshop depot found : dans Steamworks, onglet Workshop, cocher Activer ISteamUGC pour le transfert de fichiers, puis publier la configuration (onglet Publier) et redémarrer Steam. |
| « Échec de l'envoi (code 15) » | Le contenu est envoyé, mais la miniature est refusée : le journal de Steam indique Failed to upload workshop preview file … (Access Denied). Les miniatures passent par le Steam Cloud : dans Steamworks, Application → Steam Cloud, donner un quota d'octets et de fichiers par utilisateur, publier la configuration, redémarrer Steam, puis cliquer sur Mettre à jour. |
| Cube rouge ERROR à la place d'un prop | L'addon du prop n'est pas installé chez ce joueur : addon local de l'hôte jamais publié, objet Workshop introuvable (l'écran de chargement le signale), ou téléchargement en cours. |
| Mes changements de script ne s'appliquent pas | Un fichier Lua déjà chargé est ré-exécuté quand tu l'enregistres (autorefresh) ; un nouveau fichier demande un rechargement (F5 dans l'éditeur de code) ou de relancer la partie. |
| Mon addon n'apparaît pas | Vérifie qu'il est coché dans Mes addons et que son dossier est directement dans addons/ (pas dans un sous-dossier). |