dcsim-gameserver/Patchs/v3/README_PATCHES_V3.md
2026-04-17 21:04:44 +00:00

3.0 KiB

Patches v3 - Fix bouton Power (câble alim non détecté) sur dedicated server

Diagnostic

Quand tu branches un câble d'alim PDU → serveur, tu as dans les logs serveur :

[Serveur] Câble alim créé : PDU 8 prise 1 → equip 5 port 0   ← ok ça passe
...
BoutonPower: aucun câble d'alimentation branché !            ← refuse

Cause racine : CableAlimentation.Awake() appelle Shader.Find("Sprites/Default") qui retourne null côté dedicated server (le rendu est strippé → pas de shaders). Le new Material(null) qui suit crashe silencieusement l'initialisation du composant, et la méthode CmdCreerCableAlim s'interrompt juste après le AddComponent<CableAlimentation>(), avant les appels à prise.Connecter() et port.Connecter().

Résultat : côté serveur, port.estConnecte reste à false, donc le BoutonPower.Appuyer() refuse d'allumer l'équipement.

Tu peux le vérifier dans tes tout premiers logs de déploiement :

ERROR: Shader Sprites/Default shader is not supported on this GPU
ERROR: Shader Standard shader is not supported on this GPU

Scripts patchés (2)

CableAlimentation.cs

3 gardes if (DedicatedServerMode.IsDedicatedServer) return; ajoutées dans :

  • Awake() → skip création LineRenderer + Shader.Find
  • Update() → skip animation visuelle
  • Initialiser() → skip DessinerCable mais continue d'assigner prisePDU/portEquipement

Le composant existe toujours côté serveur, avec ses références logiques (prisePDU/portEquipement), mais sans LineRenderer. Résultat : prise.Connecter() et port.Connecter() s'exécutent proprement, port.estConnecte = true, le BoutonPower fonctionne.

CableRJ45.cs

Même traitement préventif dans CreerLineRenderer(). Les câbles RJ45 semblaient fonctionner dans tes tests (les logs montrent [Serveur] Câble RJ45 créé), mais Shader.Find("Standard") retourne null côté serveur et ça pollue les WARNINGS. Le patch rend le comportement propre.

Actions à faire

1. Remplacer les 2 scripts

Copie les 2 .cs depuis Scripts_Modifies/ dans Assets/Scripts/ de ton projet Unity, écrase les versions existantes.

2. Switch platform Unity vers Dedicated Server

File → Build Settings → Dedicated Server / Linux → Switch Platform.

3. Rebuild + redéploie

Build → transfert sur la Debian → sudo systemctl restart datacentersim-server.

4. Test

Lance le jeu client :

  1. Connecte-toi au serveur
  2. Commande un serveur 1U + PDU
  3. Branche l'alim PDU → serveur
  4. Appuie sur Power

Attendu : le serveur s'allume et les logs NE disent PLUS BoutonPower: aucun câble d'alimentation branché.

Note sur l'architecture

Cette approche (gardes locales dans chaque composant) est scalable : si tu rencontres un autre script avec Shader.Find / new Material qui plante sur le serveur, le pattern est toujours le même :

if (DedicatedServerMode.IsDedicatedServer) return;
// ... code visuel ...

Placer la garde tout au début de la méthode qui crée le Material, juste après les validations de base.