# 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()`, **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 : ```csharp 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.