# Spécifications : Ventes d'Animaux (Général) ## Types de Ventes - **Aux Enchères** : Vers d'autres joueurs (prix potentiellement élevé). - **Libération (Vente rapide)** : Vente au "système" (prix plancher fixe) pour libérer de la place rapidement (optionnelle selon design retenu). *Note : Le cahier des charges privilégie le marché joueurs ; la libération est un mode de vente alternatif.* ## Contraintes - Un animal malade ou mourant ne peut pas être mis en vente. - Le transport (Camion) immobilise l'animal pendant la durée de la vente. # Annexes Techniques ## 1. Données et États ### Modèle de Données (JSON) ```json { "sale_id": "uuid", "seller_zoo_id": "uuid", "seller_player_id": "uuid | null (null si bot)", "animal_id": "uuid", "sale_type": "enum('auction_adult','auction_baby','release_system')", "status": "enum('draft','in_transit','listed','pending_validation','completed','expired','cancelled')", "created_at": "timestamp", "updated_at": "timestamp", "listing": { "start_price": "integer", "buy_now_price": "integer | null", "currency": "enum('coins')", "duration_seconds": "integer (3600|14400|86400)", "end_at": "timestamp" }, "bids": [ { "bid_id": "uuid", "bidder_zoo_id": "uuid", "amount": "integer", "created_at": "timestamp" } ], "validation": { "accepted_bid_id": "uuid | null", "pending_until": "timestamp | null (sablier 10 min)", "finalized_at": "timestamp | null" }, "transport": { "truck_id": "uuid", "from_site_id": "uuid", "to_site_id": "uuid | null", "climate_control": "boolean", "insurance": "boolean", "transport_started_at": "timestamp", "transport_eta_at": "timestamp" }, "iso_x": "integer", "iso_y": "integer", "z_index": "integer" } ``` ### Caractéristiques Initiales **Total Vendu** : 0 animaux. ### Scores Initiaux **Réputation Vendeur** : Neutre (0). ## 2. Cycles de Vie et Apparition ### Conditions d'Apparition **Marché** : Offre publiée par le joueur. ### Conditions de Disparition **Vente conclue** (Achat par tiers) ou **Annulation** (Retour au zoo). ### Hérédité **Certificat** : L'acheteur voit les parents et l'arbre généalogique. ## 3. Impacts Environnementaux ### Impact Température **Transport** : Camion climatisé requis si T° extrême (Coût +10%). ### Impact Milieu (Biome) **Export** : Le biome d'origine est indiqué (Bonus adaptation si même biome cible). ### Impact Saisons **Demande** : Varie selon saison (ex: Rennes très demandés en Hiver, Lapins au Printemps). ### Impact Heure / Jour-Nuit **Enchères** : Souvent le soir (18h-22h) pour maximiser les vues (Prime Time). ## 4. Impacts Biologiques et Sociaux ### Impact Reproduction **Vente Reproducteur** : Un animal fertile vaut 2x plus cher. ### Impact Mort **Assurance** : Remboursement 50% si mort pendant transport (si assurance payée). ### Impact Nourriture **Panier repas** : Coût inclus dans frais vente (L'animal ne doit pas arriver affamé). ### Impact Attractivité (Visiteurs/Animaux) **Perte Star** : Vendre son meilleur animal (Légendaire) baisse l'attractivité du zoo (-10%). ### Impact Valeur **Prix Libération** : 10% de la valeur théorique de l'animal (Prix plancher). **Prix Enchère** : Potentiellement infini (Offre/Demande). ## 5. Impacts Logistiques et Économiques ### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite) **Durée Enchère** : 1h, 4h, 24h (au choix). ### Dépenses (Boutiques/Visiteurs) **Taxe Salle Vente** : 10% du prix final prélevé par le jeu. ### Trajet Visiteurs **Départ** : Les visiteurs font signe "au revoir" quand le camion part. ## 6. Événements ### Événements du Jeu / Carte / Zoo / Ville / Visiteur * **Offre** : Mise en ligne. * **Bid** : Nouvelle enchère reçue. * **Sold** : Vente terminée. ## 7. Progression ### Tableau des Upgrades *Note : Compétences Marchand.* | Niveau | Nom | Avantage | | :--- | :--- | :--- | | 1 | Vendeur Rue | Taxe 10% | | 2 | Négociant | Taxe 8% | | 3 | Exportateur | Taxe 5%, Visibilité Mondiale | ## 8. Logique et Interfaces ### Pseudo-code Impacts ```javascript function sellAnimal(animal, price, mode): if mode == "RELEASE": player.coins += animal.value * 0.10 removeAnimal(animal) else: createOffer(animal, price) animal.status = "TRANSIT" ``` ### Messages d'Infos / Alerte | ID | Niveau | Message | | :--- | :--- | :--- | | `ANIMAL_SOLD` | Succès | "Animal vendu pour {amount} pièces !" | | `ANIMAL_RELEASED` | Info | "Animal relâché dans la nature." | # Annexes UX/UI ## 0. Direction Artistique & Vue * **Vue** : Isométrique (2.5D). * **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg). * **Sprites** : 4 directions. * **Interactions** : * **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner. * **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris. ## 1. Expérience Utilisateur (UX) ### Libération (Action) **Description UX** : Le joueur relâche un animal (vente système). **Description UI** : Bouton "Libérer" (souvent rouge ou discret pour éviter les erreurs). Confirmation "Êtes-vous sûr ? Vous gagnerez peu (X pièces)". **Emplacement** : Panneau Animal. **Intégration** : Option secondaire. **Navigation** : Clic Libérer -> Confirmer. **Événements** : `RELEASE_ANIMAL`. #### Assets - **Musiques** : `ui_warning_soft.mp3` (jingle court à l’ouverture de confirmation). - **Sons** : `bird_fly_away.mp3` (bruit de nature positif). - **Graphiques** : Icône Cage ouverte. - **Images** : `icon_release.png`, `modal_confirm.png`. - **Vidéos** : `release_fade.webm` (1.2s non loop, optionnel). - **Animations** : Animal s'estompe ou court hors de l'écran. - **Couleurs** : Vert (Nature). - **Textes** : "Libéré !". - **Formes** : Bouton danger (rouge) + modal arrondie.