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.FindUpdate()→ skip animation visuelleInitialiser()→ 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 :
- Connecte-toi au serveur
- Commande un serveur 1U + PDU
- Branche l'alim PDU → serveur
- 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.