# Mode automatique – 50 profils et sélection hiérarchique **Objectif :** Proposer 50 profils de mode automatique répartis en 5 familles, avec une interface de sélection en deux étapes (Famille → Spécialisation) et utilisation des paramètres du profil choisi pour les décisions d’upgrade du joueur. **Référence :** Cahier des charges §5 ; plan d’action BLOC 3. ## Impacts - **State :** `autoModeProfileId` (1–50) stocke le profil choisi ; `autoModeProfile` ("fast"|"slow"|"balanced") reste pour rétrocompatibilité et est mappé à un profil par défaut (balanced→25, fast→33, slow→7). - **Mode auto joueur :** Les décisions d’upgrade (parcelle, compétences, camion) utilisent les paramètres du profil (seuil de dépense, probabilité d’upgrade) au lieu des 3 profils legacy uniquement. - **UI :** Clic sur le bouton mode auto quand il est inactif ouvre un panneau (Famille → Spécialisation) ; choix d’une spécialisation active le mode auto avec ce profil. Clic quand le mode auto est actif le désactive. - **Bots :** Les décisions upgrade/sell/buy utilisent `getProfileParams(LEGACY_PROFILE_TO_ID[profile])` ; paramètres centralisés dans auto-mode-profiles (plus de ternaires fast/slow/balanced). ## Modifications - **web/js/auto-mode-profiles.js** (nouveau) : 50 profils avec id, familyId (1–5), spendThreshold, upgradeChance, sellChance, clés i18n (label, priorities, risks). Familles : Conservateurs (1–10), Éleveurs (11–20), Commerçants (21–30), Expansionnistes (31–40), Scientifiques (41–50). `getEffectiveProfileId(state)`, `getProfileParams(profileId)`, `getProfilesByFamily(familyId)`, `getAllProfiles()`. - **web/js/types.js** : `GameState.autoModeProfileId?`, `autoProfilePickerOpen?`, `autoProfilePickerFamily?`. - **web/js/state.js** : `saveState` omet les champs `autoProfilePickerOpen` et `autoProfilePickerFamily` avant persistance ; `applyLoadStateScalarDefaults` remet ces champs à false/undefined au chargement. - **web/js/bot-zoo.js** : `tickPlayerAutoMode` utilise `getEffectiveProfileId(state)` et `getProfileParams(profileId)` ; `playerAutoDoOneUpgrade(state, params, rng)` reçoit des paramètres numériques. Pour les bots, `tickBotDecisions` utilise `LEGACY_PROFILE_TO_ID[b.profile]` et `getProfileParams(profileId)` ; `botDecideUpgrade`, `botDecideSell`, `botDecideBuy` reçoivent un objet `params` (spendThreshold, upgradeChance, sellChance) au lieu du libellé. - **web/js/ui.js** : Clic sur le bouton mode auto ouvre le picker si inactif ; panneau avec 5 familles puis 10 spécialisations, bouton Annuler. Au choix d’une spécialisation : `autoModeProfileId`, `autoMode: true`, fermeture du picker. - **web/js/texts-fr.js** : `autoProfileFamilyLabel` (5 familles), `autoProfileSpecialisationLabel` (1–50), `autoProfilePrioritiesLabel`, `autoProfileRisksLabel` (placeholders), libellés du picker. - **web/css/main.css** : `.auto-profile-picker-wrap`, `.auto-profile-picker-title`, `.auto-profile-picker-step`, `.auto-profile-picker-families`, `.auto-profile-picker-specialisations`, boutons famille/spécialisation, bouton Annuler. ## Modalités de déploiement - Client uniquement. Rechargement suffit. ## Modalités d’analyse - Désactiver le mode auto, cliquer sur le bouton mode auto : le panneau « Choisir le profil » s’affiche avec 5 familles. - Choisir une famille : affichage des 10 spécialisations. - Choisir une spécialisation : le mode auto s’active avec le profil correspondant (🤖), le panneau se ferme. - Annuler : le panneau se ferme sans activer le mode auto. - Avec le mode auto actif, les upgrades automatiques utilisent les paramètres du profil sélectionné (seuil de dépense et probabilité d’upgrade). - Ancienne sauvegarde sans `autoModeProfileId` : comportement identique à « balanced » (profil 25).