Ajout de la commande /gennpc pour générer des PNJ Traveller
Implémentation complète du générateur de PNJ Traveller basé sur : https://github.com/carloscasalar/traveller-npc-generator Fonctionnalités : - Génération de caractéristiques selon 4 catégories de citoyens - Distribution des compétences selon 6 niveaux d'expérience - 14 rôles différents avec priorités de caractéristiques spécifiques - Génération de noms aléatoires (masculin/féminin/neutre) - Création de fiche d'acteur mgt2e avec toutes les compétences - Interface utilisateur avec dialogue Handlebars - Commande /gennpc dans le chat Fichiers ajoutés : - scripts/data/travellerNpcGenerator.js (données et constantes) - scripts/travellerNpcGenerator.js (logique métier) - scripts/TravellerNpcDialog.js (interface utilisateur) - templates/traveller-npc-dialog.hbs (template dialogue) - templates/traveller-npc-result.hbs (template résultat) - styles/traveller-npc.css (styles spécifiques) Fichiers modifiés : - scripts/npc.js (intégration de la commande) - module.json (ajout des nouveaux scripts et styles) Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
+41
-2
@@ -1,4 +1,5 @@
|
||||
import { NpcDialog } from './NpcDialog.js';
|
||||
import { TravellerNpcDialog, openTravellerNpcDialog } from './TravellerNpcDialog.js';
|
||||
import { syncNpcRollTables } from './npcRollTableSync.js';
|
||||
import './mgt2eMigration.js';
|
||||
|
||||
@@ -9,6 +10,10 @@ function openNpcDialog(initialTab, options = {}) {
|
||||
new NpcDialog({ initialTab, ...options }).render({ force: true });
|
||||
}
|
||||
|
||||
function openTravellerNpcGenerator() {
|
||||
openTravellerNpcDialog();
|
||||
}
|
||||
|
||||
function registerNpcCommand(commandName, initialTab) {
|
||||
if (!ChatLogV2?.CHAT_COMMANDS) {
|
||||
console.warn(`${MODULE_ID} | ChatLog.CHAT_COMMANDS indisponible, commande /${commandName} non enregistrée`);
|
||||
@@ -25,6 +30,22 @@ function registerNpcCommand(commandName, initialTab) {
|
||||
console.log(`${MODULE_ID} | Commande /${commandName} enregistrée via ChatLog.CHAT_COMMANDS`);
|
||||
}
|
||||
|
||||
function registerTravellerNpcCommand() {
|
||||
if (!ChatLogV2?.CHAT_COMMANDS) {
|
||||
console.warn(`${MODULE_ID} | ChatLog.CHAT_COMMANDS indisponible, commande /gennpc non enregistrée`);
|
||||
return;
|
||||
}
|
||||
|
||||
ChatLogV2.CHAT_COMMANDS.gennpc = {
|
||||
rgx: new RegExp(`^\\/gennpc(?:\\s+(.*))?$`, 'i'),
|
||||
fn: () => {
|
||||
openTravellerNpcGenerator();
|
||||
return false;
|
||||
},
|
||||
};
|
||||
console.log(`${MODULE_ID} | Commande /gennpc enregistrée via ChatLog.CHAT_COMMANDS`);
|
||||
}
|
||||
|
||||
Hooks.once('init', () => {
|
||||
console.log(`${MODULE_ID} | Outils PNJ initialisés`);
|
||||
|
||||
@@ -35,17 +56,20 @@ Hooks.once('init', () => {
|
||||
loadTemplatesFn([
|
||||
`modules/${MODULE_ID}/templates/npc-dialog.hbs`,
|
||||
`modules/${MODULE_ID}/templates/npc-result.hbs`,
|
||||
`modules/${MODULE_ID}/templates/traveller-npc-dialog.hbs`,
|
||||
`modules/${MODULE_ID}/templates/traveller-npc-result.hbs`,
|
||||
]);
|
||||
}
|
||||
|
||||
registerNpcCommand('pnj', 'npc');
|
||||
registerNpcCommand('rencontre', 'encounter');
|
||||
registerNpcCommand('mission', 'mission');
|
||||
registerTravellerNpcCommand();
|
||||
});
|
||||
|
||||
Hooks.once('ready', async () => {
|
||||
await syncNpcRollTables();
|
||||
console.log(`${MODULE_ID} | Outils PNJ prêts – tapez /pnj, /rencontre ou /mission dans le chat`);
|
||||
console.log(`${MODULE_ID} | Outils PNJ prêts – tapez /pnj, /rencontre, /mission ou /gennpc dans le chat`);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -91,13 +115,18 @@ Hooks.on('renderChatInput', (app, html, data) => {
|
||||
event.stopImmediatePropagation();
|
||||
openNpcDialog('mission');
|
||||
input.val('');
|
||||
} else if (content?.startsWith('/gennpc')) {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
openTravellerNpcGenerator();
|
||||
input.val('');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Intercepte les messages de chat pour /pnj, /rencontre, /mission
|
||||
* Intercepte les messages de chat pour /pnj, /rencontre, /mission, /gennpc
|
||||
* Utilise preCreateChatMessage pour Foundry v14+ (avant que le message ne soit validé)
|
||||
* Compatible avec Foundry v13 et v14
|
||||
*/
|
||||
@@ -118,6 +147,11 @@ Hooks.on('preCreateChatMessage', (message, data, options) => {
|
||||
openNpcDialog('mission');
|
||||
return false; // Empêche la création du message
|
||||
}
|
||||
|
||||
if (content === '/gennpc' || content?.startsWith('/gennpc ')) {
|
||||
openTravellerNpcGenerator();
|
||||
return false; // Empêche la création du message
|
||||
}
|
||||
});
|
||||
|
||||
// Gardé pour compatibilité v13
|
||||
@@ -152,4 +186,9 @@ Hooks.on('chatMessage', (...args) => {
|
||||
openNpcDialog('mission');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (trimmed === '/gennpc' || trimmed?.startsWith('/gennpc ')) {
|
||||
openTravellerNpcGenerator();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user