diff --git a/client/README.md b/client/README.md index 51cd184..4f45dad 100644 --- a/client/README.md +++ b/client/README.md @@ -26,9 +26,9 @@ Se il server non è su `localhost:3000`, crea un `.env` da `.env.example` con `V - **Login/Registrazione** — JWT salvato in localStorage. - **Covo** (home) — profilo, denaro, reputazione, barra XP, città corrente, eventi attivi, accesso alle classifiche, logout. - **Mercato** — listino della città corrente (prezzo acquisto/vendita), eventi che influenzano i prezzi, modale compra/vendi con quantità; si auto-aggiorna a ogni tick del server via `market:updated`. -- **Missioni** — missioni attive con countdown e riscossione (esito successo/fallimento con ricompense), missioni disponibili con difficoltà, rischio, durata e merce richiesta. +- **Missioni** — descrizioni narrative, chip per tipo, barra della probabilità di successo stimata, requisito di livello (lucchetto), bottino in merce, abbandono; attive con countdown e riscossione (esito con premi, bottino o multa). - **Zaino** — inventario con quantità e peso totale. -- **Città** — elenco città con rischio, economia e costo viaggio. +- **Città** — mappa SVG stilizzata dell'Italia con marker cliccabili (colore = rischio, pulsazione = città corrente, ⚡ = evento attivo) e pannello viaggio; lista compatta come fallback. - **Classifiche** — denaro e reputazione. ## Realtime diff --git a/server/README.md b/server/README.md index 0f91893..0b2ee0f 100644 --- a/server/README.md +++ b/server/README.md @@ -61,9 +61,10 @@ Tutte le route tranne register/login richiedono `Authorization: Bearer `. | GET | `/market/current` | listino della città corrente + eventi attivi | | POST | `/market/buy` · `/market/sell` | `{itemId, quantity}` — prezzi decisi dal server | | GET | `/inventory` | inventario con peso totale | -| GET | `/missions/available` | missioni nella città corrente | -| POST | `/missions/:missionId/start` | avvia (consuma subito gli item richiesti) | -| POST | `/missions/:playerMissionId/claim` | riscuote: successo/fallimento calcolato dal server | +| GET | `/missions/available` | missioni nella città corrente, con probabilità di successo stimata e requisito di livello | +| POST | `/missions/:missionId/start` | avvia (verifica livello, consuma subito gli item richiesti) | +| POST | `/missions/:playerMissionId/claim` | riscuote: successo (premi + bottino) o fallimento (multa) | +| POST | `/missions/:playerMissionId/abandon` | abbandona una missione attiva (−1 reputazione) | | GET | `/missions/active` | missioni in corso | | GET | `/events/current` | eventi mondo attivi | | GET | `/leaderboard/money` · `/leaderboard/reputation` | classifiche (Redis), `?limit=N` | @@ -82,7 +83,7 @@ I parametri citati sono tutti in `gameBalance.ts`. - **Mercato** (`rawPrice = basePrice * economyModifier * demand / max(supply, 0.25) * eventModifier`): buy = raw×1.12, sell = raw×0.88, limiti [0.35×, 3.5×] del prezzo base. Acquisti/vendite spostano domanda/offerta; ogni minuto il mercato decade verso l'equilibrio (fattore 0.98). - **Viaggio**: `costo = 50 + riskLevel(destinazione) × 25`. -- **Missioni**: `successo = 0.95 − risk×0.6 + livello×0.01 + reputazione×0.0005 − (pressione polizia−1)×0.05`, limitato a [5%, 95%]. Successo: denaro + XP + reputazione (+2×difficoltà). Fallimento: −3 reputazione (mai sotto 0). Massimo 3 missioni attive per giocatore. +- **Missioni**: `successo = 0.95 − risk×0.6 + livello×0.01 + reputazione×0.0005 − (pressione polizia−1)×0.05`, limitato a [5%, 95%]; la stessa stima è esposta al client in `/missions/available`. Ogni tipo ha un carattere (`typeConfig`): Consegna trasporta merce, Furto paga meno ma dà bottino in merce, Contrabbando paga molto e rischia di più, Informazioni dà XP e reputazione doppia. Difficoltà alte richiedono un livello minimo. Successo: denaro + XP + reputazione + eventuale bottino. Fallimento: −3 reputazione e multa (30% del premio × pressione polizia, mai oltre il denaro posseduto). Una missione attiva può essere abbandonata (`POST /missions/:id/abandon`, −1 reputazione, merce consumata persa). Massimo 3 missioni attive per giocatore. - **XP**: per passare dal livello L a L+1 servono `100 × L^1.5` XP. - **Eventi**: ogni 15 min possibile evento locale (25%), ogni ora possibile evento globale (20%); modificano prezzi e pressione di polizia finché attivi.