diff --git a/assets/ui/help-dialog-confrontation.png b/assets/ui/help-dialog-confrontation.png new file mode 100644 index 0000000..fa618f1 Binary files /dev/null and b/assets/ui/help-dialog-confrontation.png differ diff --git a/assets/ui/help-dialog-degats.png b/assets/ui/help-dialog-degats.png new file mode 100644 index 0000000..7b39814 Binary files /dev/null and b/assets/ui/help-dialog-degats.png differ diff --git a/assets/ui/help-dialog-initiative.png b/assets/ui/help-dialog-initiative.png new file mode 100644 index 0000000..22fdf20 Binary files /dev/null and b/assets/ui/help-dialog-initiative.png differ diff --git a/assets/ui/help-dialog-test.png b/assets/ui/help-dialog-test.png new file mode 100644 index 0000000..57e8b9c Binary files /dev/null and b/assets/ui/help-dialog-test.png differ diff --git a/assets/ui/help-sheet-combat-magie.png b/assets/ui/help-sheet-combat-magie.png new file mode 100644 index 0000000..061897b Binary files /dev/null and b/assets/ui/help-sheet-combat-magie.png differ diff --git a/assets/ui/help-sheet-competences.png b/assets/ui/help-sheet-competences.png new file mode 100644 index 0000000..8cb8428 Binary files /dev/null and b/assets/ui/help-sheet-competences.png differ diff --git a/assets/ui/help-sheet-portrait.png b/assets/ui/help-sheet-portrait.png new file mode 100644 index 0000000..0bdc5f2 Binary files /dev/null and b/assets/ui/help-sheet-portrait.png differ diff --git a/lang/fr.json b/lang/fr.json index 9caadbc..d1698ef 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -115,6 +115,18 @@ "tie": "Égalité : la fiction tranche." } }, + "welcome": { + "title": "Bienvenue dans Les Oubliés", + "eyebrow": "Système", + "intro": "Bienvenue dans le système FoundryVTT des Oubliés.", + "developerLabel": "Développement du système :", + "publisherLabel": "Jeu édité par", + "helpLabel": "Aide intégrée :", + "helpLinkLabel": "Ouvrir l’aide du système", + "helpUnavailable": "le compendium d’aide n’est pas disponible pour le moment.", + "openHelp": "Ouvrir l’aide", + "close": "Fermer" + }, "labels": { "race": "Race", "tribu": "Tribu", diff --git a/modules/les-oublies-main.js b/modules/les-oublies-main.js index 3cc498d..1968c85 100644 --- a/modules/les-oublies-main.js +++ b/modules/les-oublies-main.js @@ -7,6 +7,8 @@ import * as models from "./models/index.mjs" import * as sheets from "./applications/sheets/_module.mjs" const DEFAULT_PERSONNAGE_TOKEN_TEXTURE = "systems/fvtt-les-oublies/assets/tokens/border_token_oublies.webp" +const UBERWALD_URL = "https://www.uberwald.me" +const XII_SINGES_URL = "https://www.les12singes.com/84-les-oublies" function ensureSystemStyles() { const href = `systems/${game.system.id}/css/les-oublies.css` @@ -28,6 +30,53 @@ function usesFoundryDefaultTokenTexture(actor, data) { return !tokenTexture || tokenTexture === CONST.DEFAULT_TOKEN || tokenTexture === "icons/svg/mystery-man.svg" } +async function getHelpJournalEntry() { + const pack = game.packs.get(`${game.system.id}.aide-systeme`) + if (!pack) return null + + const documents = await pack.getDocuments() + return documents[0] ?? null +} + +async function buildWelcomeMessageContent(helpJournal) { + const helpContent = helpJournal + ? await foundry.applications.ux.TextEditor.implementation.enrichHTML( + `@UUID[${helpJournal.uuid}]{${game.i18n.localize("LESOUBLIES.welcome.helpLinkLabel")}}`, + { async: true }, + ) + : game.i18n.localize("LESOUBLIES.welcome.helpUnavailable") + + return ` +
+
+
+

${game.i18n.localize("LESOUBLIES.welcome.eyebrow")}

+

${game.i18n.localize("LESOUBLIES.welcome.title")}

+
+
+
+

${game.i18n.localize("LESOUBLIES.welcome.intro")}

+

${game.i18n.localize("LESOUBLIES.welcome.developerLabel")} Uberwald.

+

${game.i18n.localize("LESOUBLIES.welcome.publisherLabel")} Les XII Singes.

+

${game.i18n.localize("LESOUBLIES.welcome.helpLabel")} ${helpContent}

+
+
+ ` +} + +async function showWelcomeMessage() { + const helpJournal = await getHelpJournalEntry() + const content = await buildWelcomeMessageContent(helpJournal) + + await ChatMessage.create({ + speaker: { + alias: game.system.title, + }, + content, + whisper: [game.user.id], + }) +} + Hooks.once("init", function () { console.info("Les Oubliés | Initialisation du système") ensureSystemStyles() @@ -77,6 +126,10 @@ Hooks.once("init", function () { LesOubliesUtility.registerHandlebarsHelpers() }) +Hooks.once("ready", function () { + showWelcomeMessage() +}) + Hooks.on("preCreateActor", function (actor, data) { if (actor.type !== "personnage") return if (!usesFoundryDefaultTokenTexture(actor, data)) return diff --git a/packs-src/aide-systeme.json b/packs-src/aide-systeme.json new file mode 100644 index 0000000..a046d7d --- /dev/null +++ b/packs-src/aide-systeme.json @@ -0,0 +1,98 @@ +[ + { + "name": "Aide du système", + "type": "JournalEntry", + "ownership": { + "default": 2 + }, + "flags": { + "core": {} + }, + "pages": [ + { + "name": "Bienvenue", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Les Oubliés dans Foundry

Cette aide de jeu présente le fonctionnement concret du système fvtt-les-oublies dans Foundry VTT. Elle est pensée pour une prise en main rapide autour de la fiche, des jets, du combat, de la magie et des compendiums fournis.

Ce que fait le système

Par où commencer ?

  1. Créez un Personnage.
  2. Assignez-lui une Race, une Tribu et un Métier par glisser-déposer.
  3. Complétez ou ajustez ses compétences et son équipement.
  4. Utilisez les boutons de la fiche pour lancer les jets utiles en jeu.

Les pages suivantes détaillent chaque zone importante avec des captures d'écran prises dans le système lui-même.

" + } + }, + { + "name": "Portrait et identité", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Lire la fiche personnage

L'onglet Portrait concentre l'identité du personnage et les éléments de création qui structurent le reste de la fiche.

\"Fiche
La fiche personnage affiche immédiatement les références de race, de tribu et de métier.

À retenir

Le portrait sert surtout de synthèse et de point d'entrée avant de passer aux compétences et aux actions de jeu.

" + } + }, + { + "name": "Compétences et profils", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Compétences et profils

L'onglet Compétences présente les compétences regroupées par profil. Le système rappelle en permanence la logique Base + Profil = Valeur finale.

\"Fiche
Chaque groupe affiche sa valeur de profil et les compétences qui en dépendent.

Fonctionnement

Quand vous préparez un jet, c'est généralement la valeur finale affichée ici qu'il faut reporter dans le dialogue de résolution.

" + } + }, + { + "name": "Jets de test, confrontation et initiative", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Les jets principaux

Le système embarque trois dialogues génériques : test, confrontation et initiative. Ils respectent le principe Songes / Cauchemar avec choix du dé retenu quand plusieurs dés sont en concurrence.

\"Dialogue
Le jet de test permet de choisir la difficulté, le mode de jet et un éventuel dé supplémentaire.
\"Dialogue
La confrontation gère les deux camps, avec saisie manuelle ou sélection d'un adversaire cible.
\"Dialogue
L'initiative s'appuie sur Rapidité puis applique l'arrondi supérieur avec plafond à 12.

Comportements utiles

Après le lancer, le chat produit une carte de résultat dédiée avec le détail utile à la table.

" + } + }, + { + "name": "Combat, dégâts et protections", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Combattre dans le système

L'onglet Combat & Magie regroupe les actions de combat, les armes équipées et les aides à la résolution associées.

\"Fiche
Les actions de combat, les réserves de fils et la magie partagent le même onglet pour limiter les allers-retours.
\"Dialogue
Le helper de dégâts applique la base de l'arme, les modificateurs et la protection ciblée.

Points importants

Les cartes de chat qui en résultent sont compactes et conçues pour un usage fréquent en partie.

" + } + }, + { + "name": "Magie, fils et globes", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Magie et réserves

La moitié basse de l'onglet Combat & Magie gère les fils, les globes et les sortilèges du personnage.

\"Réserves
Les réserves personnelle et de compagnie sont directement manipulables depuis la fiche.

Ce que permet la fiche

Les dépenses de fils rendent automatiquement autant de globes vides à la réserve utilisée. Le système met ainsi l'accent sur la circulation des ressources plutôt que sur des sous-feuilles séparées.

" + } + }, + { + "name": "Compendiums et glisser-déposer", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "text": { + "format": 1, + "content": "

Utiliser les compendiums

Les compendiums fournis par le système servent de base technique pour créer et enrichir les acteurs.

Usages recommandés

À savoir

Pour une table de jeu, le plus simple est donc d'utiliser ces compendiums comme bibliothèque de construction rapide, puis d'affiner directement sur la fiche si nécessaire.

" + } + } + ] + } +] diff --git a/packs/armes/000007.log b/packs/aide-systeme/000009.log similarity index 100% rename from packs/armes/000007.log rename to packs/aide-systeme/000009.log diff --git a/packs/aide-systeme/000011.ldb b/packs/aide-systeme/000011.ldb new file mode 100644 index 0000000..4cedae9 Binary files /dev/null and b/packs/aide-systeme/000011.ldb differ diff --git a/packs/aide-systeme/CURRENT b/packs/aide-systeme/CURRENT new file mode 100644 index 0000000..1a84852 --- /dev/null +++ b/packs/aide-systeme/CURRENT @@ -0,0 +1 @@ +MANIFEST-000002 diff --git a/packs/armures/000007.log b/packs/aide-systeme/LOCK similarity index 100% rename from packs/armures/000007.log rename to packs/aide-systeme/LOCK diff --git a/packs/aide-systeme/LOG b/packs/aide-systeme/LOG new file mode 100644 index 0000000..7ed63d2 --- /dev/null +++ b/packs/aide-systeme/LOG @@ -0,0 +1 @@ +2026/05/06-20:00:09.287368 7f612bfff6c0 Delete type=3 #1 diff --git a/packs/armes/000009.ldb b/packs/armes/000009.ldb deleted file mode 100644 index 8a7487c..0000000 Binary files a/packs/armes/000009.ldb and /dev/null differ diff --git a/packs/competences/000007.log b/packs/armes/000020.log similarity index 100% rename from packs/competences/000007.log rename to packs/armes/000020.log diff --git a/packs/armes/CURRENT b/packs/armes/CURRENT index cacca75..1a84852 100644 --- a/packs/armes/CURRENT +++ b/packs/armes/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/armes/LOG b/packs/armes/LOG index bfedb46..7591b69 100644 --- a/packs/armes/LOG +++ b/packs/armes/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.439890 7fd39d7ec6c0 Recovering log #3 -2026/05/06-10:42:52.439947 7fd39d7ec6c0 Level-0 table #5: started -2026/05/06-10:42:52.443417 7fd39d7ec6c0 Level-0 table #5: 6826 bytes OK -2026/05/06-10:42:52.454459 7fd39d7ec6c0 Delete type=0 #3 -2026/05/06-10:42:52.454587 7fd39d7ec6c0 Delete type=3 #2 -2026/05/06-10:43:22.990986 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:22.991003 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:22.997495 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.019890 7fd39cfeb6c0 Manual compaction at level-0 from '!items!0wVpxy2XZYx6S5QR' @ 72057594037927935 : 1 .. '!items!wvt5PIveAgIdsK1T' @ 0 : 0; will stop at '!items!wvt5PIveAgIdsK1T' @ 35 : 1 -2026/05/06-10:43:23.019900 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.023528 7fd39cfeb6c0 Generated table #9@0: 35 keys, 6826 bytes -2026/05/06-10:43:23.023563 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 6826 bytes -2026/05/06-10:43:23.030165 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.030304 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.050189 7fd39cfeb6c0 Manual compaction at level-0 from '!items!wvt5PIveAgIdsK1T' @ 35 : 1 .. '!items!wvt5PIveAgIdsK1T' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.149296 7f6174dfd6c0 Delete type=3 #1 diff --git a/packs/armes/LOG.old b/packs/armes/LOG.old deleted file mode 100644 index 5edd844..0000000 --- a/packs/armes/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.239714 7f66b3fff6c0 Delete type=3 #1 diff --git a/packs/armes/MANIFEST-000004 b/packs/armes/MANIFEST-000004 deleted file mode 100644 index 50d5f3c..0000000 Binary files a/packs/armes/MANIFEST-000004 and /dev/null differ diff --git a/packs/armures/000009.ldb b/packs/armures/000009.ldb deleted file mode 100644 index e32a5d8..0000000 Binary files a/packs/armures/000009.ldb and /dev/null differ diff --git a/packs/equipements/000007.log b/packs/armures/000020.log similarity index 100% rename from packs/equipements/000007.log rename to packs/armures/000020.log diff --git a/packs/armures/CURRENT b/packs/armures/CURRENT index cacca75..1a84852 100644 --- a/packs/armures/CURRENT +++ b/packs/armures/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/armures/LOG b/packs/armures/LOG index 89d1dc5..0f88486 100644 --- a/packs/armures/LOG +++ b/packs/armures/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.456918 7fd39e7ee6c0 Recovering log #3 -2026/05/06-10:42:52.456943 7fd39e7ee6c0 Level-0 table #5: started -2026/05/06-10:42:52.460700 7fd39e7ee6c0 Level-0 table #5: 815 bytes OK -2026/05/06-10:42:52.470387 7fd39e7ee6c0 Delete type=0 #3 -2026/05/06-10:42:52.470451 7fd39e7ee6c0 Delete type=3 #2 -2026/05/06-10:43:22.984965 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:22.985000 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:22.990909 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.009491 7fd39cfeb6c0 Manual compaction at level-0 from '!items!3BnwI245d2H2cttB' @ 72057594037927935 : 1 .. '!items!ouVi1TDDGHMH7wRj' @ 0 : 0; will stop at '!items!ouVi1TDDGHMH7wRj' @ 2 : 1 -2026/05/06-10:43:23.009499 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.012514 7fd39cfeb6c0 Generated table #9@0: 3 keys, 815 bytes -2026/05/06-10:43:23.012529 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 815 bytes -2026/05/06-10:43:23.019598 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.019764 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.050179 7fd39cfeb6c0 Manual compaction at level-0 from '!items!ouVi1TDDGHMH7wRj' @ 2 : 1 .. '!items!ouVi1TDDGHMH7wRj' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.165377 7f612bfff6c0 Delete type=3 #1 diff --git a/packs/armures/LOG.old b/packs/armures/LOG.old deleted file mode 100644 index a6d5e7f..0000000 --- a/packs/armures/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.316793 7f66b37fe6c0 Delete type=3 #1 diff --git a/packs/armures/MANIFEST-000004 b/packs/armures/MANIFEST-000004 deleted file mode 100644 index 3be5cac..0000000 Binary files a/packs/armures/MANIFEST-000004 and /dev/null differ diff --git a/packs/competences/000009.ldb b/packs/competences/000009.ldb deleted file mode 100644 index c8c74e4..0000000 Binary files a/packs/competences/000009.ldb and /dev/null differ diff --git a/packs/metiers/000007.log b/packs/competences/000020.log similarity index 100% rename from packs/metiers/000007.log rename to packs/competences/000020.log diff --git a/packs/competences/CURRENT b/packs/competences/CURRENT index cacca75..1a84852 100644 --- a/packs/competences/CURRENT +++ b/packs/competences/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/competences/LOG b/packs/competences/LOG index 13e362d..89790b0 100644 --- a/packs/competences/LOG +++ b/packs/competences/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.504965 7fd39d7ec6c0 Recovering log #3 -2026/05/06-10:42:52.505011 7fd39d7ec6c0 Level-0 table #5: started -2026/05/06-10:42:52.508141 7fd39d7ec6c0 Level-0 table #5: 4614 bytes OK -2026/05/06-10:42:52.518635 7fd39d7ec6c0 Delete type=0 #3 -2026/05/06-10:42:52.518695 7fd39d7ec6c0 Delete type=3 #2 -2026/05/06-10:43:23.071936 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.071953 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.077983 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.111647 7fd39cfeb6c0 Manual compaction at level-0 from '!items!1IhIUjv73YMttYW0' @ 72057594037927935 : 1 .. '!items!zrJvQTctIpfjIz7J' @ 0 : 0; will stop at '!items!zrJvQTctIpfjIz7J' @ 20 : 1 -2026/05/06-10:43:23.111655 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.115172 7fd39cfeb6c0 Generated table #9@0: 27 keys, 4614 bytes -2026/05/06-10:43:23.115193 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 4614 bytes -2026/05/06-10:43:23.121954 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.122015 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.122144 7fd39cfeb6c0 Manual compaction at level-0 from '!items!zrJvQTctIpfjIz7J' @ 20 : 1 .. '!items!zrJvQTctIpfjIz7J' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.210742 7f6174dfd6c0 Delete type=3 #1 diff --git a/packs/competences/LOG.old b/packs/competences/LOG.old deleted file mode 100644 index ae39cc4..0000000 --- a/packs/competences/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.548963 7f66b3fff6c0 Delete type=3 #1 diff --git a/packs/competences/MANIFEST-000004 b/packs/competences/MANIFEST-000004 deleted file mode 100644 index 5924048..0000000 Binary files a/packs/competences/MANIFEST-000004 and /dev/null differ diff --git a/packs/equipements/000009.ldb b/packs/equipements/000009.ldb deleted file mode 100644 index c863d2f..0000000 Binary files a/packs/equipements/000009.ldb and /dev/null differ diff --git a/packs/pouvoirs-compagnie/000007.log b/packs/equipements/000020.log similarity index 100% rename from packs/pouvoirs-compagnie/000007.log rename to packs/equipements/000020.log diff --git a/packs/equipements/CURRENT b/packs/equipements/CURRENT index cacca75..1a84852 100644 --- a/packs/equipements/CURRENT +++ b/packs/equipements/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/equipements/LOG b/packs/equipements/LOG index 5c048ae..44fa3a5 100644 --- a/packs/equipements/LOG +++ b/packs/equipements/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.472500 7fd39efef6c0 Recovering log #3 -2026/05/06-10:42:52.472607 7fd39efef6c0 Level-0 table #5: started -2026/05/06-10:42:52.476439 7fd39efef6c0 Level-0 table #5: 6181 bytes OK -2026/05/06-10:42:52.486963 7fd39efef6c0 Delete type=0 #3 -2026/05/06-10:42:52.487018 7fd39efef6c0 Delete type=3 #2 -2026/05/06-10:43:22.997591 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:22.997612 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.003434 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.030431 7fd39cfeb6c0 Manual compaction at level-0 from '!items!19G5qBEMaflvGK28' @ 72057594037927935 : 1 .. '!items!zoKnkvQK4wPA0cvP' @ 0 : 0; will stop at '!items!zoKnkvQK4wPA0cvP' @ 35 : 1 -2026/05/06-10:43:23.030439 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.033703 7fd39cfeb6c0 Generated table #9@0: 35 keys, 6181 bytes -2026/05/06-10:43:23.033732 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 6181 bytes -2026/05/06-10:43:23.039807 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.039906 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.050199 7fd39cfeb6c0 Manual compaction at level-0 from '!items!zoKnkvQK4wPA0cvP' @ 35 : 1 .. '!items!zoKnkvQK4wPA0cvP' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.180731 7f6175dff6c0 Delete type=3 #1 diff --git a/packs/equipements/LOG.old b/packs/equipements/LOG.old deleted file mode 100644 index 1572264..0000000 --- a/packs/equipements/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.389376 7f67015ff6c0 Delete type=3 #1 diff --git a/packs/equipements/MANIFEST-000004 b/packs/equipements/MANIFEST-000004 deleted file mode 100644 index f426162..0000000 Binary files a/packs/equipements/MANIFEST-000004 and /dev/null differ diff --git a/packs/metiers/000009.ldb b/packs/metiers/000009.ldb deleted file mode 100644 index c6c4def..0000000 Binary files a/packs/metiers/000009.ldb and /dev/null differ diff --git a/packs/races/000007.log b/packs/metiers/000020.log similarity index 100% rename from packs/races/000007.log rename to packs/metiers/000020.log diff --git a/packs/metiers/CURRENT b/packs/metiers/CURRENT index cacca75..1a84852 100644 --- a/packs/metiers/CURRENT +++ b/packs/metiers/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/metiers/LOG b/packs/metiers/LOG index 1e8ddc2..f5675eb 100644 --- a/packs/metiers/LOG +++ b/packs/metiers/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.553462 7fd39e7ee6c0 Recovering log #3 -2026/05/06-10:42:52.553504 7fd39e7ee6c0 Level-0 table #5: started -2026/05/06-10:42:52.556942 7fd39e7ee6c0 Level-0 table #5: 4030 bytes OK -2026/05/06-10:42:52.566377 7fd39e7ee6c0 Delete type=0 #3 -2026/05/06-10:42:52.566433 7fd39e7ee6c0 Delete type=3 #2 -2026/05/06-10:43:23.065397 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.065421 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.071751 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.100865 7fd39cfeb6c0 Manual compaction at level-0 from '!items!1o5Kw4HzVNxm2LkJ' @ 72057594037927935 : 1 .. '!items!zIdc7oRRURJK1LCb' @ 0 : 0; will stop at '!items!zIdc7oRRURJK1LCb' @ 6 : 1 -2026/05/06-10:43:23.100878 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.104865 7fd39cfeb6c0 Generated table #9@0: 8 keys, 4030 bytes -2026/05/06-10:43:23.104896 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 4030 bytes -2026/05/06-10:43:23.111409 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.111517 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.122135 7fd39cfeb6c0 Manual compaction at level-0 from '!items!zIdc7oRRURJK1LCb' @ 6 : 1 .. '!items!zIdc7oRRURJK1LCb' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.256606 7f61755fe6c0 Delete type=3 #1 diff --git a/packs/metiers/LOG.old b/packs/metiers/LOG.old deleted file mode 100644 index f91809e..0000000 --- a/packs/metiers/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.785271 7f6700dfe6c0 Delete type=3 #1 diff --git a/packs/metiers/MANIFEST-000004 b/packs/metiers/MANIFEST-000004 deleted file mode 100644 index 4ec3bc1..0000000 Binary files a/packs/metiers/MANIFEST-000004 and /dev/null differ diff --git a/packs/pouvoirs-compagnie/000009.ldb b/packs/pouvoirs-compagnie/000009.ldb deleted file mode 100644 index 2c6aca7..0000000 Binary files a/packs/pouvoirs-compagnie/000009.ldb and /dev/null differ diff --git a/packs/sortileges/000007.log b/packs/pouvoirs-compagnie/000020.log similarity index 100% rename from packs/sortileges/000007.log rename to packs/pouvoirs-compagnie/000020.log diff --git a/packs/pouvoirs-compagnie/CURRENT b/packs/pouvoirs-compagnie/CURRENT index cacca75..1a84852 100644 --- a/packs/pouvoirs-compagnie/CURRENT +++ b/packs/pouvoirs-compagnie/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/pouvoirs-compagnie/LOG b/packs/pouvoirs-compagnie/LOG index 60ada8f..b5a05ea 100644 --- a/packs/pouvoirs-compagnie/LOG +++ b/packs/pouvoirs-compagnie/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.489022 7fd39e7ee6c0 Recovering log #3 -2026/05/06-10:42:52.489067 7fd39e7ee6c0 Level-0 table #5: started -2026/05/06-10:42:52.492225 7fd39e7ee6c0 Level-0 table #5: 2059 bytes OK -2026/05/06-10:42:52.502742 7fd39e7ee6c0 Delete type=0 #3 -2026/05/06-10:42:52.502805 7fd39e7ee6c0 Delete type=3 #2 -2026/05/06-10:43:23.003515 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.003534 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.009396 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.040005 7fd39cfeb6c0 Manual compaction at level-0 from '!items!FfQwxxtecQRrRAOX' @ 72057594037927935 : 1 .. '!items!uKW7eAe5nA8zgHNQ' @ 0 : 0; will stop at '!items!uKW7eAe5nA8zgHNQ' @ 2 : 1 -2026/05/06-10:43:23.040012 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.043526 7fd39cfeb6c0 Generated table #9@0: 8 keys, 2059 bytes -2026/05/06-10:43:23.043551 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 2059 bytes -2026/05/06-10:43:23.049951 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.050079 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.050207 7fd39cfeb6c0 Manual compaction at level-0 from '!items!uKW7eAe5nA8zgHNQ' @ 2 : 1 .. '!items!uKW7eAe5nA8zgHNQ' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.195364 7f61755fe6c0 Delete type=3 #1 diff --git a/packs/pouvoirs-compagnie/LOG.old b/packs/pouvoirs-compagnie/LOG.old deleted file mode 100644 index 69820c9..0000000 --- a/packs/pouvoirs-compagnie/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.470099 7f6700dfe6c0 Delete type=3 #1 diff --git a/packs/pouvoirs-compagnie/MANIFEST-000004 b/packs/pouvoirs-compagnie/MANIFEST-000004 deleted file mode 100644 index 9fccc40..0000000 Binary files a/packs/pouvoirs-compagnie/MANIFEST-000004 and /dev/null differ diff --git a/packs/races/000009.ldb b/packs/races/000009.ldb deleted file mode 100644 index 028c35d..0000000 Binary files a/packs/races/000009.ldb and /dev/null differ diff --git a/packs/tribus/000007.log b/packs/races/000020.log similarity index 100% rename from packs/tribus/000007.log rename to packs/races/000020.log diff --git a/packs/races/CURRENT b/packs/races/CURRENT index cacca75..1a84852 100644 --- a/packs/races/CURRENT +++ b/packs/races/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/races/LOG b/packs/races/LOG index bb83d5f..d52a95a 100644 --- a/packs/races/LOG +++ b/packs/races/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.520730 7fd39e7ee6c0 Recovering log #3 -2026/05/06-10:42:52.520772 7fd39e7ee6c0 Level-0 table #5: started -2026/05/06-10:42:52.523941 7fd39e7ee6c0 Level-0 table #5: 3420 bytes OK -2026/05/06-10:42:52.535782 7fd39e7ee6c0 Delete type=0 #3 -2026/05/06-10:42:52.535848 7fd39e7ee6c0 Delete type=3 #2 -2026/05/06-10:43:23.050346 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.050364 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.058307 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.078097 7fd39cfeb6c0 Manual compaction at level-0 from '!items!0xfnMEBzcDzn33u1' @ 72057594037927935 : 1 .. '!items!ucpCiBTGiqJ4vPoK' @ 0 : 0; will stop at '!items!ucpCiBTGiqJ4vPoK' @ 4 : 1 -2026/05/06-10:43:23.078105 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.081777 7fd39cfeb6c0 Generated table #9@0: 7 keys, 3420 bytes -2026/05/06-10:43:23.081823 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 3420 bytes -2026/05/06-10:43:23.088900 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.089029 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.122115 7fd39cfeb6c0 Manual compaction at level-0 from '!items!ucpCiBTGiqJ4vPoK' @ 4 : 1 .. '!items!ucpCiBTGiqJ4vPoK' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.225835 7f612bfff6c0 Delete type=3 #1 diff --git a/packs/races/LOG.old b/packs/races/LOG.old deleted file mode 100644 index 07ebfc6..0000000 --- a/packs/races/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.629799 7f66b37fe6c0 Delete type=3 #1 diff --git a/packs/races/MANIFEST-000004 b/packs/races/MANIFEST-000004 deleted file mode 100644 index 22aea65..0000000 Binary files a/packs/races/MANIFEST-000004 and /dev/null differ diff --git a/packs/sortileges/000009.ldb b/packs/sortileges/000009.ldb deleted file mode 100644 index 2d22cc0..0000000 Binary files a/packs/sortileges/000009.ldb and /dev/null differ diff --git a/packs/sortileges/000020.log b/packs/sortileges/000020.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/sortileges/CURRENT b/packs/sortileges/CURRENT index cacca75..1a84852 100644 --- a/packs/sortileges/CURRENT +++ b/packs/sortileges/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/sortileges/LOG b/packs/sortileges/LOG index d456362..c010c05 100644 --- a/packs/sortileges/LOG +++ b/packs/sortileges/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.568751 7fd39d7ec6c0 Recovering log #3 -2026/05/06-10:42:52.568899 7fd39d7ec6c0 Level-0 table #5: started -2026/05/06-10:42:52.572727 7fd39d7ec6c0 Level-0 table #5: 16649 bytes OK -2026/05/06-10:42:52.593776 7fd39d7ec6c0 Delete type=0 #3 -2026/05/06-10:42:52.593835 7fd39d7ec6c0 Delete type=3 #2 -2026/05/06-10:43:23.122256 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.122276 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.128449 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.148375 7fd39cfeb6c0 Manual compaction at level-0 from '!items!15iY8vCuisq7fgxC' @ 72057594037927935 : 1 .. '!items!zlacnrDvD6OQqSq9' @ 0 : 0; will stop at '!items!zlacnrDvD6OQqSq9' @ 49 : 1 -2026/05/06-10:43:23.148382 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.151996 7fd39cfeb6c0 Generated table #9@0: 72 keys, 16649 bytes -2026/05/06-10:43:23.152009 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 16649 bytes -2026/05/06-10:43:23.158338 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.158406 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.158547 7fd39cfeb6c0 Manual compaction at level-0 from '!items!zlacnrDvD6OQqSq9' @ 49 : 1 .. '!items!zlacnrDvD6OQqSq9' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.271737 7f6174dfd6c0 Delete type=3 #1 diff --git a/packs/sortileges/LOG.old b/packs/sortileges/LOG.old deleted file mode 100644 index 6213cdc..0000000 --- a/packs/sortileges/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.858447 7f66b3fff6c0 Delete type=3 #1 diff --git a/packs/sortileges/MANIFEST-000004 b/packs/sortileges/MANIFEST-000004 deleted file mode 100644 index fc86698..0000000 Binary files a/packs/sortileges/MANIFEST-000004 and /dev/null differ diff --git a/packs/tribus/000009.ldb b/packs/tribus/000009.ldb deleted file mode 100644 index f71b3a7..0000000 Binary files a/packs/tribus/000009.ldb and /dev/null differ diff --git a/packs/tribus/000020.log b/packs/tribus/000020.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/tribus/CURRENT b/packs/tribus/CURRENT index cacca75..1a84852 100644 --- a/packs/tribus/CURRENT +++ b/packs/tribus/CURRENT @@ -1 +1 @@ -MANIFEST-000004 +MANIFEST-000002 diff --git a/packs/tribus/LOG b/packs/tribus/LOG index 0897ecc..c7007d6 100644 --- a/packs/tribus/LOG +++ b/packs/tribus/LOG @@ -1,15 +1 @@ -2026/05/06-10:42:52.538075 7fd39d7ec6c0 Recovering log #3 -2026/05/06-10:42:52.538162 7fd39d7ec6c0 Level-0 table #5: started -2026/05/06-10:42:52.541922 7fd39d7ec6c0 Level-0 table #5: 6762 bytes OK -2026/05/06-10:42:52.551592 7fd39d7ec6c0 Delete type=0 #3 -2026/05/06-10:42:52.551647 7fd39d7ec6c0 Delete type=3 #2 -2026/05/06-10:43:23.058483 7fd39cfeb6c0 Level-0 table #8: started -2026/05/06-10:43:23.058516 7fd39cfeb6c0 Level-0 table #8: 0 bytes OK -2026/05/06-10:43:23.065217 7fd39cfeb6c0 Delete type=0 #6 -2026/05/06-10:43:23.089170 7fd39cfeb6c0 Manual compaction at level-0 from '!items!4aynfqE4U9hcdgMN' @ 72057594037927935 : 1 .. '!items!yUWIdLKCkSvQcMT7' @ 0 : 0; will stop at '!items!yUWIdLKCkSvQcMT7' @ 9 : 1 -2026/05/06-10:43:23.089178 7fd39cfeb6c0 Compacting 1@0 + 0@1 files -2026/05/06-10:43:23.092608 7fd39cfeb6c0 Generated table #9@0: 11 keys, 6762 bytes -2026/05/06-10:43:23.092669 7fd39cfeb6c0 Compacted 1@0 + 0@1 files => 6762 bytes -2026/05/06-10:43:23.100615 7fd39cfeb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] -2026/05/06-10:43:23.100731 7fd39cfeb6c0 Delete type=2 #5 -2026/05/06-10:43:23.122126 7fd39cfeb6c0 Manual compaction at level-0 from '!items!yUWIdLKCkSvQcMT7' @ 9 : 1 .. '!items!yUWIdLKCkSvQcMT7' @ 0 : 0; will stop at (end) +2026/05/06-20:00:09.241097 7f6175dff6c0 Delete type=3 #1 diff --git a/packs/tribus/LOG.old b/packs/tribus/LOG.old deleted file mode 100644 index ff7b28f..0000000 --- a/packs/tribus/LOG.old +++ /dev/null @@ -1 +0,0 @@ -2026/05/06-10:41:39.711104 7f67015ff6c0 Delete type=3 #1 diff --git a/packs/tribus/MANIFEST-000004 b/packs/tribus/MANIFEST-000004 deleted file mode 100644 index a131c7f..0000000 Binary files a/packs/tribus/MANIFEST-000004 and /dev/null differ diff --git a/scripts/build-compendiums.mjs b/scripts/build-compendiums.mjs index fe19f66..e48e013 100644 --- a/scripts/build-compendiums.mjs +++ b/scripts/build-compendiums.mjs @@ -1,7 +1,7 @@ import path from "node:path" import fs from "node:fs" -import { buildPacks } from "./pack-builder.mjs" +import { buildPacks, SYSTEM_PACK_DEFINITIONS } from "./pack-builder.mjs" const rootDir = path.resolve(import.meta.dirname, "..") const packageJson = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf8")) @@ -10,6 +10,7 @@ const systemJson = JSON.parse(fs.readFileSync(path.join(rootDir, "system.json"), await buildPacks({ sourceRoot: path.join(rootDir, "packs-src"), outputRoot: path.join(rootDir, "packs"), + packDefinitions: SYSTEM_PACK_DEFINITIONS, documentSystemId: systemJson.id, documentSystemVersion: packageJson.version, coreVersion: String(systemJson.compatibility?.verified ?? systemJson.compatibility?.minimum ?? ""), diff --git a/scripts/pack-builder.mjs b/scripts/pack-builder.mjs index 07665ee..7a9a0a6 100644 --- a/scripts/pack-builder.mjs +++ b/scripts/pack-builder.mjs @@ -4,7 +4,7 @@ import crypto from "node:crypto" import { Level } from "level" -export const PACK_DEFINITIONS = [ +export const CONTENT_PACK_DEFINITIONS = [ { sourceFile: "armes.json", outputFolder: "armes", type: "Item" }, { sourceFile: "armures.json", outputFolder: "armures", type: "Item" }, { sourceFile: "equipements.json", outputFolder: "equipements", type: "Item" }, @@ -16,6 +16,11 @@ export const PACK_DEFINITIONS = [ { sourceFile: "sortileges.json", outputFolder: "sortileges", type: "Item" }, ] +export const SYSTEM_PACK_DEFINITIONS = [ + ...CONTENT_PACK_DEFINITIONS, + { sourceFile: "aide-systeme.json", outputFolder: "aide-systeme", type: "JournalEntry" }, +] + function slugId(input) { const hash = crypto.createHash("sha256").update(input).digest() const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" @@ -26,41 +31,122 @@ function slugId(input) { return id } -function toPackDocument(entry, index, { +function createDocumentStats({ documentSystemId, documentSystemVersion, coreVersion, createdTime, lastModifiedBy = "Copilot", } = {}) { + return { + systemId: documentSystemId, + systemVersion: documentSystemVersion, + coreVersion, + createdTime, + modifiedTime: createdTime, + lastModifiedBy, + compendiumSource: null, + duplicateSource: null, + exportSource: null, + } +} + +function toItemPackDocument(entry, index, options = {}) { const docId = slugId(`${entry.type}:${entry.name}`) return { - name: entry.name, - type: entry.type, - img: entry.img ?? "icons/svg/item-bag.svg", - system: entry.system ?? {}, - effects: Array.isArray(entry.effects) ? entry.effects : [], - flags: entry.flags ?? {}, - _stats: { - systemId: documentSystemId, - systemVersion: documentSystemVersion, - coreVersion, - createdTime, - modifiedTime: createdTime, - lastModifiedBy, - compendiumSource: null, - duplicateSource: null, - exportSource: null, - }, - _id: docId, - folder: null, - sort: index * 1000, - ownership: { - default: 0, + key: `!items!${docId}`, + value: { + name: entry.name, + type: entry.type, + img: entry.img ?? "icons/svg/item-bag.svg", + system: entry.system ?? {}, + effects: Array.isArray(entry.effects) ? entry.effects : [], + flags: entry.flags ?? {}, + _stats: createDocumentStats(options), + _id: docId, + folder: null, + sort: index * 1000, + ownership: { + default: 0, + }, }, + embedded: [], } } +function toJournalPageDocument(entry, journalId, page, pageIndex, options = {}) { + const pageId = slugId(`JournalEntryPage:${entry.name}:${page.name ?? page.title ?? pageIndex}`) + return { + _id: pageId, + name: page.name ?? `Page ${pageIndex + 1}`, + type: page.type ?? "text", + title: { + show: page.title?.show ?? true, + level: page.title?.level ?? 1, + }, + text: { + format: page.text?.format ?? 1, + content: page.text?.content ?? "", + }, + system: page.system ?? {}, + image: page.image ?? {}, + video: page.video ?? { controls: true, volume: 0.5 }, + src: page.src ?? null, + category: page.category ?? null, + sort: page.sort ?? pageIndex * 1000, + ownership: page.ownership ?? { default: -1 }, + flags: page.flags ?? {}, + _stats: createDocumentStats(options), + _key: `!journal.pages!${journalId}.${pageId}`, + } +} + +function toJournalPackDocument(entry, index, options = {}) { + const docId = slugId(`JournalEntry:${entry.name}`) + const pages = Array.isArray(entry.pages) + ? entry.pages.map((page, pageIndex) => toJournalPageDocument(entry, docId, page, pageIndex, options)) + : [] + + return { + key: `!journal!${docId}`, + value: { + name: entry.name, + pages: pages.map((page) => page._id), + ownership: entry.ownership ?? { default: 0 }, + flags: entry.flags ?? { core: {} }, + _stats: createDocumentStats(options), + folder: null, + sort: entry.sort ?? index * 1000, + _id: docId, + categories: Array.isArray(entry.categories) ? entry.categories : [], + }, + embedded: pages.map((page) => ({ + key: page._key, + value: { + name: page.name, + type: page.type, + title: page.title, + text: page.text, + system: page.system, + image: page.image, + video: page.video, + src: page.src, + category: page.category, + sort: page.sort, + ownership: page.ownership, + flags: page.flags, + _stats: page._stats, + _id: page._id, + }, + })), + } +} + +function toPackDocument(entry, index, options = {}) { + if (entry.type === "JournalEntry") return toJournalPackDocument(entry, index, options) + return toItemPackDocument(entry, index, options) +} + async function buildPack({ sourcePath, outputPath, @@ -95,7 +181,10 @@ async function buildPack({ createdTime, lastModifiedBy, }) - batch.put(`!items!${doc._id}`, JSON.stringify(doc)) + batch.put(doc.key, JSON.stringify(doc.value)) + for (const embedded of doc.embedded) { + batch.put(embedded.key, JSON.stringify(embedded.value)) + } }) await batch.write() } finally { @@ -106,7 +195,7 @@ async function buildPack({ export async function buildPacks({ sourceRoot, outputRoot, - packDefinitions = PACK_DEFINITIONS, + packDefinitions = SYSTEM_PACK_DEFINITIONS, documentSystemId, documentSystemVersion, coreVersion, diff --git a/scripts/split-compendium-content.mjs b/scripts/split-compendium-content.mjs index 12d73e7..67423c5 100644 --- a/scripts/split-compendium-content.mjs +++ b/scripts/split-compendium-content.mjs @@ -1,7 +1,7 @@ import fs from "node:fs" import path from "node:path" -import { PACK_DEFINITIONS, buildPacks } from "./pack-builder.mjs" +import { CONTENT_PACK_DEFINITIONS, SYSTEM_PACK_DEFINITIONS, buildPacks } from "./pack-builder.mjs" const systemRoot = path.resolve(import.meta.dirname, "..") const targetRoot = path.resolve( @@ -20,10 +20,11 @@ const richFieldMap = Object.fromEntries( Object.entries(systemManifest.documentTypes?.Item ?? {}).map(([type, data]) => [type, data.htmlFields ?? []]), ) const coreVersion = String(systemManifest.compatibility?.verified ?? systemManifest.compatibility?.minimum ?? "") -const basePackDefinitions = PACK_DEFINITIONS.map((pack) => ({ +const basePackDefinitions = CONTENT_PACK_DEFINITIONS.map((pack) => ({ ...pack, outputFolder: `base-${pack.outputFolder}`, })) +const contentPackNames = new Set(CONTENT_PACK_DEFINITIONS.map((pack) => pack.outputFolder)) function setDeepValue(target, propertyPath, value) { const segments = String(propertyPath || "").split(".").filter(Boolean) @@ -142,6 +143,11 @@ function ensureTargetModuleScaffold() { ], }, packs: (systemManifest.packs ?? []).map((pack) => ({ + // The base content module only mirrors content packs, not system journals or utility packs. + ...pack, + })) + .filter((pack) => contentPackNames.has(pack.name)) + .map((pack) => ({ ...pack, name: `base-${pack.name}`, path: `packs/base-${pack.name}`, @@ -201,7 +207,7 @@ pruneStalePackDirectories(targetPacksRoot, basePackDefinitions) await buildPacks({ sourceRoot: systemSourceRoot, outputRoot: path.join(systemRoot, "packs"), - packDefinitions: PACK_DEFINITIONS, + packDefinitions: SYSTEM_PACK_DEFINITIONS, documentSystemId: systemManifest.id, documentSystemVersion: systemPackage.version, coreVersion, diff --git a/system.json b/system.json index 968113f..3620644 100644 --- a/system.json +++ b/system.json @@ -235,6 +235,18 @@ "PLAYER": "OBSERVER", "ASSISTANT": "OWNER" } + }, + { + "type": "JournalEntry", + "label": "Aide du système", + "name": "aide-systeme", + "path": "packs/aide-systeme", + "system": "fvtt-les-oublies", + "flags": {}, + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + } } ], "packFolders": [ @@ -250,7 +262,8 @@ "races", "tribus", "metiers", - "sortileges" + "sortileges", + "aide-systeme" ] } ],