Ajout de la commande /voyage et grosse MAJK de la commande /auberge

This commit is contained in:
2026-01-07 15:04:49 +01:00
parent c8119601d8
commit f525b6c07a
1329 changed files with 24138 additions and 4397 deletions

196
tools/sync-scripts.js Normal file
View File

@@ -0,0 +1,196 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const WFRP4E_SCRIPTS = '/home/morr/work/foundryvtt/WFRP4e-FoundryVTT/scripts';
const FR_SCRIPTS = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/scripts';
const REPORT_FILE = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/tools/script-comparison-report.md';
// Recherche des patterns qui indiquent du texte localisé
const LOCALIZE_PATTERNS = [
/game\.i18n\.localize\(/g,
/game\.i18n\.format\(/g,
/game\.wfrp4e\.i18n\./g
];
// Patterns de textes en dur qui ont probablement été traduits
const HARDCODED_TEXT_PATTERNS = [
/ui\.notifications\.(info|warn|error|notify)\s*\(\s*["'`]([^"'`]+)["'`]/g,
/this\.script\.(scriptNotification|scriptMessage|notification)\s*\(\s*["'`]([^"'`]+)["'`]/g
];
function analyzeScript(filePath) {
const content = fs.readFileSync(filePath, 'utf-8');
// Vérifie si le fichier utilise localize()
const hasLocalize = LOCALIZE_PATTERNS.some(pattern => pattern.test(content));
// Extrait les textes en dur
const hardcodedTexts = [];
HARDCODED_TEXT_PATTERNS.forEach(pattern => {
const matches = content.matchAll(pattern);
for (const match of matches) {
hardcodedTexts.push(match[2] || match[1]);
}
});
return {
hasLocalize,
hardcodedTexts,
content,
size: content.length
};
}
function compareScripts() {
const wfrp4eFiles = fs.readdirSync(WFRP4E_SCRIPTS).filter(f => f.endsWith('.js'));
const frFiles = fs.readdirSync(FR_SCRIPTS).filter(f => f.endsWith('.js'));
const results = {
identical: [],
needsUpdate: [],
usesLocalize: [],
onlyInFR: [],
onlyInWFRP4E: [],
total: 0
};
// Fichiers présents seulement dans le module FR
frFiles.forEach(file => {
if (!wfrp4eFiles.includes(file)) {
results.onlyInFR.push(file);
}
});
// Fichiers présents seulement dans WFRP4E
wfrp4eFiles.forEach(file => {
if (!frFiles.includes(file)) {
results.onlyInWFRP4E.push(file);
}
});
// Comparaison des fichiers communs
const commonFiles = wfrp4eFiles.filter(f => frFiles.includes(f));
results.total = commonFiles.length;
commonFiles.forEach(file => {
const wfrp4ePath = path.join(WFRP4E_SCRIPTS, file);
const frPath = path.join(FR_SCRIPTS, file);
const wfrp4e = analyzeScript(wfrp4ePath);
const fr = analyzeScript(frPath);
// Si WFRP4E utilise localize(), le script FR n'est plus nécessaire
if (wfrp4e.hasLocalize) {
results.usesLocalize.push({
file,
details: 'Le système utilise maintenant localize() - script FR obsolète'
});
}
// Si les contenus sont identiques
else if (wfrp4e.content === fr.content) {
results.identical.push(file);
}
// Si différents, besoin de mise à jour
else {
results.needsUpdate.push({
file,
wfrp4eSize: wfrp4e.size,
frSize: fr.size,
wfrp4eTexts: wfrp4e.hardcodedTexts,
frTexts: fr.hardcodedTexts
});
}
});
return results;
}
function generateReport(results) {
let report = `# Rapport de comparaison des scripts\n\n`;
report += `Date: ${new Date().toISOString()}\n\n`;
report += `## Résumé\n\n`;
report += `- **Total de fichiers communs**: ${results.total}\n`;
report += `- **Scripts identiques**: ${results.identical.length}\n`;
report += `- **Scripts nécessitant mise à jour**: ${results.needsUpdate.length}\n`;
report += `- **Scripts utilisant localize() (obsolètes)**: ${results.usesLocalize.length}\n`;
report += `- **Scripts uniquement dans FR**: ${results.onlyInFR.length}\n`;
report += `- **Scripts uniquement dans WFRP4E**: ${results.onlyInWFRP4E.length}\n\n`;
if (results.usesLocalize.length > 0) {
report += `## Scripts obsolètes (utilisant localize() dans WFRP4E)\n\n`;
report += `Ces scripts peuvent être supprimés du module FR car le système utilise maintenant les fichiers de localisation.\n\n`;
results.usesLocalize.forEach(({file, details}) => {
report += `- \`${file}\` - ${details}\n`;
});
report += `\n`;
}
if (results.needsUpdate.length > 0) {
report += `## Scripts nécessitant une mise à jour\n\n`;
results.needsUpdate.slice(0, 50).forEach(item => {
report += `### ${item.file}\n\n`;
report += `- Taille WFRP4E: ${item.wfrp4eSize} octets\n`;
report += `- Taille FR: ${item.frSize} octets\n`;
if (item.wfrp4eTexts.length > 0) {
report += `- Textes WFRP4E: ${item.wfrp4eTexts.join(', ')}\n`;
}
if (item.frTexts.length > 0) {
report += `- Textes FR: ${item.frTexts.join(', ')}\n`;
}
report += `\n`;
});
if (results.needsUpdate.length > 50) {
report += `\n... et ${results.needsUpdate.length - 50} autres fichiers\n\n`;
}
}
if (results.onlyInWFRP4E.length > 0) {
report += `## Scripts uniquement dans WFRP4E (${results.onlyInWFRP4E.length})\n\n`;
report += `Ces scripts existent dans WFRP4E mais pas dans le module FR.\n\n`;
results.onlyInWFRP4E.slice(0, 20).forEach(file => {
report += `- ${file}\n`;
});
if (results.onlyInWFRP4E.length > 20) {
report += `\n... et ${results.onlyInWFRP4E.length - 20} autres\n`;
}
report += `\n`;
}
if (results.onlyInFR.length > 0) {
report += `## Scripts uniquement dans FR (${results.onlyInFR.length})\n\n`;
report += `Ces scripts existent dans le module FR mais plus dans WFRP4E (probablement supprimés).\n\n`;
results.onlyInFR.slice(0, 20).forEach(file => {
report += `- ${file}\n`;
});
if (results.onlyInFR.length > 20) {
report += `\n... et ${results.onlyInFR.length - 20} autres\n`;
}
report += `\n`;
}
return report;
}
console.log('Analyse des scripts en cours...');
const results = compareScripts();
const report = generateReport(results);
fs.writeFileSync(REPORT_FILE, report, 'utf-8');
console.log(`\nRapport généré: ${REPORT_FILE}`);
console.log(`\nRésumé:`);
console.log(` Identiques: ${results.identical.length}`);
console.log(` À mettre à jour: ${results.needsUpdate.length}`);
console.log(` Obsolètes (localize): ${results.usesLocalize.length}`);
console.log(` Uniquement FR: ${results.onlyInFR.length}`);
console.log(` Uniquement WFRP4E: ${results.onlyInWFRP4E.length}`);
// Export des résultats pour utilisation ultérieure
fs.writeFileSync(
path.join(path.dirname(REPORT_FILE), 'script-comparison-data.json'),
JSON.stringify(results, null, 2),
'utf-8'
);