fix: corrections générateur PNJ Traveller et tests Jest
- validateOptions : remplit les champs manquants et corrige les clés invalides (détection précédemment inopérante car getXByKey renvoie l'objet par défaut) - generateCharacteristics : ne mélange plus le tableau avant affectation, la priorité des caractéristiques (high → medium → low) est respectée - Exports manquants : convertSkillToMgt2eFormat, popRandomItems, ERROR_CODES, TravellerNpcError - Tests : import des globals via @jest/globals (obligatoire en ESM), suppression de l'import obsolète buildMgt2eBaseActorSystem, attente corrigée pilot.smallCraft, test des doublons aligné sur le dédoublonnage réel (noms complets, spécialisations conservées) - AGENTS.md : section Testing mise à jour - README.md : ajouté
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
# MgT2e — Compendium Amiral Denisov
|
||||
|
||||
Module **FoundryVTT** pour **Mongoose Traveller 2e (MgT2e)**, regroupant des compendiums de référence et une suite d'outils d'aide au MJ (commerce, PNJ, rencontres, missions, cartes stellaires, calendrier impérial).
|
||||
|
||||
**Compatibilité :** FoundryVTT v13 et v14
|
||||
|
||||
---
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
### Commandes de chat
|
||||
|
||||
| Commande | Rôle |
|
||||
|---|---|
|
||||
| `/commerce` | Génération d'offres de commerce (3 onglets) |
|
||||
| `/pnj` | Génération de PNJ rapide (4 onglets) |
|
||||
| `/rencontre` | Rencontres aléatoires |
|
||||
| `/mission` | Contrats / missions aléatoires |
|
||||
| `/sector` | Carte stellaire interactive (Traveller Map) |
|
||||
| `/subsector` | Carte d'un sous-secteur |
|
||||
| `/cal` | Fenêtre du calendrier impérial |
|
||||
|
||||
### Génération de PNJ
|
||||
|
||||
- **PNJ rapide** : nom, carrière, caractéristiques, compétences (localisées en français), relations
|
||||
- **PNJ détaillé (Traveller)** : génération selon les règles du générateur officiel, création de fiche `npc` MgT2e avec spécialités de compétences natives
|
||||
- **Alliés & Ennemis** : relations générées via tables D66, modificateurs d'affinité/inimité, caractéristiques spéciales
|
||||
- **Création d'acteur** : possibilité de créer directement une fiche PNJ et de l'ouvrir
|
||||
|
||||
### Import par lot de PNJ
|
||||
|
||||
- **`scripts/batchNpcCreator.js`** : importe un répertoire d'images (fichiers) comme PNJs, grille de raccourcis dans la barre latérale *Acteurs* (Commerce, PNJ, Rencontre, Mission), bouton *Traveller Map* dans la barre latérale *Scènes*
|
||||
|
||||
### Carte stellaire (Traveller Map)
|
||||
|
||||
- Carte interactive en IFRAME avec recherche de mondes
|
||||
- Carte de chat complète : UWP (avec détail), importance, économie, culture, population, noblesse, bases, remarques, allégeance, étoiles
|
||||
- **Synchronisation** : le MJ peut partager la vue actuelle (hex, zoom) avec tous les joueurs via socket
|
||||
- **Vue joueur** en lecture seule, mise à jour en temps réel
|
||||
- **Synchronisation du canvas** : le MJ peut aligner la vue des joueurs sur la sienne
|
||||
|
||||
### Calendrier impérial
|
||||
|
||||
- Fenêtre compacte affichant la date impériale (`Wonday, 234-1116 IC ─ 14:30`)
|
||||
- **Configurable par le MJ** : année, jour (1-365), heure:minute locale, planète
|
||||
- Boutons rapides `+1 jour` et `+1 heure` (report 24 h → jour, 365 → 1)
|
||||
- **Conversions calendaires** : Solomani, Vilani, Zhodani (Olympiades), Aslan, K'Kree, Hiver (formules approximatives de [Date_Conversion](https://wiki.travellerrpg.com/Date_Conversion))
|
||||
- **Synchronisé pour les joueurs** en temps réel via socket
|
||||
- **Auto-ouverture** au démarrage (désactivable) et **sauvegarde de la position** de la fenêtre
|
||||
- **Notes de bord** : bouton crayon → saisie d'une note datée (date impériale + date réelle), ajoutée à un journal de session
|
||||
|
||||
### Compendiums
|
||||
|
||||
14 compendiums organisés en dossiers thématiques :
|
||||
|
||||
| Dossier | Contenu |
|
||||
|---|---|
|
||||
| **Équipements** | armures, objets, équipement, ordinateur, contenants, armes |
|
||||
| **Références** | compétences, maladie/poison/blessure, espèces, talents psioniques, carrières |
|
||||
| **PNJ & Items** | tables PNJ, PNJ, compétences, maladies, espèces, talents, carrières |
|
||||
| **Journaux** | journal psioniques |
|
||||
|
||||
---
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
1. **Copie manuelle** : placer le dossier dans `FoundryVTT/Data/modules/mgt2-compendium-amiral-denisov/`
|
||||
2. **Manifest** : dans FoundryVTT, *Add-on Modules → Install Module* avec l'URL du manifest
|
||||
|
||||
Activer ensuite le module dans la configuration du monde.
|
||||
|
||||
---
|
||||
|
||||
## 🎮 Utilisation
|
||||
|
||||
### Commencer une partie
|
||||
|
||||
Tapez une commande dans le chat (ex. `/pnj`) ou utilisez les raccourcis de la barre latérale. Le message d'accueil au lancement rappelle les commandes disponibles.
|
||||
|
||||
### Calendrier impérial
|
||||
|
||||
1. `/cal` (ou auto-ouverture au démarrage)
|
||||
2. Clic sur la roue dentée **⚙** (MJ) pour configurer la date
|
||||
3. Clic sur le crayon **✎** (MJ) pour ajouter une note au journal de bord
|
||||
|
||||
### Paramètres du monde
|
||||
|
||||
Dans *Configuration → Réglages → Module Settings* :
|
||||
|
||||
| Réglage | Description |
|
||||
|---|---|
|
||||
| **Calendrier impérial : auto-ouverture** | Ouvrir automatiquement la fenêtre au démarrage |
|
||||
| **Journal de bord** | Nom du journal utilisé pour les notes de session (créé automatiquement) |
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Développement
|
||||
|
||||
### Structure
|
||||
|
||||
```
|
||||
module.json Manifeste du module (source de vérité pour la version)
|
||||
scripts/
|
||||
data/ Tables de données (NPC, commerce, alliés/ennemis, générateur Traveller)
|
||||
tests/ Tests unitaires (Jest)
|
||||
*.js Logique des outils
|
||||
*.css → styles/ Styles
|
||||
templates/ Templates Handlebars
|
||||
packs/ Compendiums (niveau de base de données)
|
||||
```
|
||||
|
||||
### Prérequis
|
||||
|
||||
- Aucun gestionnaire de paquets, aucun build — JavaScript ESM chargé directement par FoundryVTT
|
||||
- `package.json` créé uniquement pour les tests (`"type": "module"`)
|
||||
|
||||
### Tests
|
||||
|
||||
Deux styles de tests coexistent (pas de configuration Jest, `package.json` n'existe que pour `"type": "module"` + mock FoundryVTT fait main) :
|
||||
|
||||
- **`allyEnemyGenerator.test.js`** — mini-runner maison (`test()`/`assertEqual`), à lancer avec Node directement :
|
||||
|
||||
```sh
|
||||
node scripts/tests/allyEnemyGenerator.test.js # "All N tests passed"
|
||||
```
|
||||
|
||||
- **`travellerNpcGenerator.test.js`** — Jest (`describe`/`it`), à lancer avec le flag ESM :
|
||||
|
||||
```sh
|
||||
NODE_OPTIONS="--experimental-vm-modules" npx jest scripts/tests/travellerNpcGenerator.test.js
|
||||
```
|
||||
|
||||
### Conventions
|
||||
|
||||
- Tout le contenu (libellés, commentaires, messages de commit) est en **français**
|
||||
- Dialogs : `ApplicationV2` + `HandlebarsApplicationMixin`
|
||||
- Compatibilité v13/v14 : certains hooks doivent gérer les API jQuery (v13) et DOM (v14)
|
||||
- Dés à lancer : toujours `await new Roll(formula).evaluate()`
|
||||
|
||||
---
|
||||
|
||||
## 📄 Licence & Crédits
|
||||
|
||||
- Contenu Traveller © Mongoose Publishing — sous licence pour *Mongoose Traveller 2e*
|
||||
- Cartes stellaire via [Traveller Map](https://www.travellermap.com)
|
||||
- Règles de conversion calendaires d'après [Traveller Wiki](https://wiki.travellerrpg.com/Date_Conversion)
|
||||
- Module initié par **JdR.Ninja**
|
||||
Reference in New Issue
Block a user