**Motivations:** - Make docs/specs implementation-ready without empty sections or placeholders. **Root causes:** - Multiple specs still contained non-actionable placeholders (N/A, “see above”, "..."), and inconsistent “no cache” wording. **Correctifs:** - Replace placeholders with explicit tables, structures, and typed examples. - Align “no cache / no memorization” statements where relevant. **Evolutions:** - Add a features doc entry to track the documentation enrichment effort. **Pages affectées:** - docs/specs/* - docs/features/docs-specs-enrichment.md - docs/leo.md - docs/plan-enrich-docs-specs.md
179 lines
5.8 KiB
Markdown
179 lines
5.8 KiB
Markdown
# 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.
|