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

  1. Lance PhysiCore avec Steam ouvert.
  2. 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.
  3. Choisis le contenu : un de tes addons locaux, ou une de tes dupes (elle est alors emballée automatiquement dans un addon dupe_<nom>).
  4. Remplis le titre, la description, la visibilité et une note de version.
  5. Clique sur Publier sur le Workshop et suis la progression (préparation, envoi du contenu, envoi de la miniature).
Premier envoiPublie d'abord en visibilité Privé pour vérifier la page, puis passe-la en Public.

Tags

Les tags sont détectés d'après le contenu de l'addon, et tu peux les modifier avant l'envoi :

TagAjouté si l'addon contient
Gamemodeun gamemode (publié depuis l'éditeur de code)
Luades scripts dans lua/
Propsdes modèles dans models/
Mapdes cartes .pcmap dans maps/
Dupedes dupes dans dupes/
Playermodeldes playermodels (fichiers .json dans playermodels/)
Armedes armes de l'éditeur (pack weapons/) ou des SWEP Lua (lua/weapons/)
Véhiculedes véhicules (pack vehicles/)
Outildes 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.

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.

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 :

  1. À 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_id dans addon.json) et la carte jouée.
  2. 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.
  3. Si la carte est une map .pcmap, le serveur l'envoie directement : elle n'a pas besoin d'être installée chez le joueur.
  4. Ces addons sont activés pour la session, sans abonnement, puis retirés quand tu quittes la partie.
  5. 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.

Addons locauxUn addon local de l'hôte publié est téléchargé par les joueurs depuis le Workshop : ils reçoivent la version publiée, pas le dossier de l'hôte. Pense à cliquer sur Mettre à jour après chaque modification. Les identifiants de contenu sont traduits automatiquement : 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

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").

FonctionDescription
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 :

Détails dans Bac à sable et sécurité.

Problèmes fréquents

SymptômeCause 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 propL'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 pasUn 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 pasVérifie qu'il est coché dans Mes addons et que son dossier est directement dans addons/ (pas dans un sous-dossier).