diff --git a/lang/fr.json b/lang/fr.json
index c67a72b..57daf7a 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -204,5 +204,56 @@
"DNC.Chat.DamageUsageStable": "L'arme tient bon, ses degats restent inchanges.",
"DNC.Chat.DamageUsageExhausted": "L'arme est epuisee, elle ne peut plus causer de degats.",
"DNC.UI.DamageExhausted": "Epuise",
- "DNC.Warn.DamageExhausted": "Cette arme est epuisee et ne peut plus causer de degats."
+ "DNC.Warn.DamageExhausted": "Cette arme est epuisee et ne peut plus causer de degats.",
+
+ "DNC.Dialog.EmployeesTitle": "Employés",
+
+ "DNC.Dialog.EmployeesTabEmployes": "Employés",
+ "DNC.Dialog.EmployeesTabCombat": "Combat",
+ "DNC.Dialog.EmployeesTabCharacteristics": "Caractéristiques",
+ "DNC.Dialog.EmployeesTabMagie": "Magie",
+ "DNC.Dialog.EmployeesTabClients": "Clients",
+
+ "DNC.Empty.NoEmployees": "Aucun employé trouvé.",
+
+ "DNC.UI.Weapons": "Armes",
+ "DNC.UI.Armors": "Armures",
+ "DNC.UI.Spells": "Sortilèges",
+ "DNC.UI.Capacities": "Capacités",
+
+ "DNC.UI.Employee": "Employé",
+ "DNC.UI.Dv": "DV",
+ "DNC.UI.MeleeAttacks": "Attaques CàC",
+ "DNC.UI.RangedAttacks": "Attaques Dist.",
+
+ "DNC.UI.Damage": "Dégâts",
+ "DNC.UI.Range": "Portée",
+ "DNC.UI.Ammunition": "Munitions",
+ "DNC.UI.ProtectionDie": "Protection Δ",
+ "DNC.UI.Encumbrance": "Encombrement",
+ "DNC.UI.RemainingProtection": "Protection restante",
+ "DNC.UI.Notes": "Notes",
+ "DNC.UI.Description": "Description",
+
+ "DNC.UI.Rank": "Rang",
+ "DNC.UI.Focus": "Focus",
+ "DNC.UI.Chaos": "Chaos",
+
+ "DNC.WeaponCategory.Melee": "Corps à corps",
+ "DNC.WeaponCategory.Ranged": "Distance",
+ "DNC.WeaponHands.Label": "Mains",
+ "DNC.WeaponHands.One": "1 main",
+ "DNC.WeaponHands.Two": "2 mains",
+ "DNC.WeaponRange.Contact": "Contact",
+ "DNC.Ammunition.Exhausted": "Épuisées",
+
+ "DNC.Empty.NoWeapons": "Aucune arme répertoriée.",
+ "DNC.Empty.NoArmors": "Aucune armure répertoriée.",
+ "DNC.Empty.NoSpells": "Aucun sortilège répertorié.",
+ "DNC.Empty.NoCapacities": "Aucune capacité répertoriée.",
+ "DNC.Empty.NoClients": "Aucun client répertorié.",
+
+ "DNC.Client.Species": "Espèce",
+ "DNC.Client.Category": "Catégorie",
+ "DNC.Client.Role": "Rôle"
}
diff --git a/less/actor-sheet.less b/less/actor-sheet.less
index a90afa2..8258d08 100644
--- a/less/actor-sheet.less
+++ b/less/actor-sheet.less
@@ -21,6 +21,16 @@
gap: @spacing-md;
}
+// Réduction de la taille des champs PV
+.dnc-actor-sheet .hp-field .counter-field input[type="number"] {
+ max-width: 60px;
+ text-align: center;
+}
+
+.dnc-actor-sheet .hp-field .counter-field {
+ gap: @spacing-xs;
+}
+
.dnc-actor-sheet .profile-card-wide {
width: 100%;
}
diff --git a/less/chat.less b/less/chat.less
index 6e6e0c3..b6f082a 100644
--- a/less/chat.less
+++ b/less/chat.less
@@ -44,7 +44,7 @@
}
.chat-card-kicker {
- margin: 0 0 0.25rem;
+ margin: 0 0 @spacing-xs;
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.16em;
@@ -189,7 +189,7 @@
}
.chat-details li + li {
- margin-top: 0.25rem;
+ margin-top: @spacing-xs;
}
.chat-actions {
@@ -235,9 +235,28 @@
padding: 0.35rem 0.65rem;
min-height: 1.75rem;
font-size: 0.82rem;
+ flex: 0 0 auto;
}
}
+// Boutons Appliquer et Avec Armure sur une seule ligne
+.dnc-chat-card-damage .chat-actions-inline {
+ flex-wrap: nowrap;
+ gap: @spacing-xs;
+}
+
+.dnc-chat-card-damage .chat-actions-inline .chat-action-button {
+ padding: 0.3rem 0.55rem;
+ min-height: 1.65rem;
+ font-size: 0.78rem;
+ flex: 0 0 auto;
+}
+
+.dnc-chat-card-damage .chat-actions-inline .chat-action-button i {
+ font-size: 0.85rem;
+ margin-right: 0.2rem;
+}
+
.chat-control {
display: grid;
gap: 0.2rem;
@@ -263,7 +282,7 @@
display: inline-flex;
align-items: center;
min-height: 2rem;
- padding: 0.25rem 0.7rem;
+ padding: @spacing-xs 0.7rem;
border-radius: 999px;
border: 1px solid fade(@color-border, 38%);
background: rgba(255, 255, 255, 0.5);
@@ -425,7 +444,7 @@
}
.chat-chaos-result-title {
- margin: 0 0 0.25rem;
+ margin: 0 0 @spacing-xs;
font-weight: 800;
}
diff --git a/less/donjon-et-cie.less b/less/donjon-et-cie.less
index 62ac9e3..912456a 100644
--- a/less/donjon-et-cie.less
+++ b/less/donjon-et-cie.less
@@ -5,3 +5,4 @@
@import "item-sheet";
@import "dialogs";
@import "chat";
+@import "employes-dialog";
diff --git a/less/employes-dialog.less b/less/employes-dialog.less
new file mode 100644
index 0000000..30754ab
--- /dev/null
+++ b/less/employes-dialog.less
@@ -0,0 +1,389 @@
+// ============================================
+// Dialog Employés - Styles
+// Structure 2 niveaux : Employés/Clients → sous-onglets par PC/client
+// ============================================
+
+// Conteneur principal
+.dnc-employes-dialog {
+ display: flex;
+ flex-direction: column;
+ gap: @spacing-md;
+ padding: @spacing-lg;
+ min-width: 640px;
+ max-width: 90vw;
+ max-height: 90vh;
+ overflow-y: auto;
+
+ .sheet-header {
+ display: block;
+ grid-template-columns: none;
+ gap: normal;
+
+ h1 {
+ font-family: @font-display;
+ font-size: 1.4rem;
+ color: @color-accent;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ margin: 0;
+ text-align: center;
+ }
+ }
+}
+
+// Wrapper pour DialogV2
+.dnc-employes-dialog-wrapper {
+ .dialog-content,
+ .window-content {
+ padding: 0;
+ }
+}
+
+// ============================================
+// Onglets racine (niveau 1)
+// ============================================
+.dnc-root-tabs {
+ display: flex;
+ justify-content: center;
+ gap: @spacing-md;
+ border-bottom: 2px solid @color-border;
+ padding-bottom: @spacing-sm;
+}
+
+.dnc-root-tab {
+ border: 1px solid fade(@color-border, 55%);
+ border-radius: @radius-md @radius-md 0 0;
+ background: @color-panel-strong;
+ color: @color-ink;
+ font-size: 0.9rem;
+ font-weight: 700;
+ padding: @spacing-sm @spacing-lg;
+ display: flex;
+ align-items: center;
+ gap: @spacing-xs;
+ cursor: pointer;
+ transition: all 0.2s ease;
+
+ i { font-size: 0.9rem; }
+
+ &.active {
+ background: @color-accent;
+ border-color: darken(@color-accent, 12%);
+ color: #fff;
+ box-shadow: 0 -3px 8px fade(@color-shadow, 20%);
+ position: relative;
+ bottom: -2px;
+ }
+
+ &:hover:not(.active) {
+ background: fade(@color-panel-strong, 120%);
+ border-color: fade(@color-border, 75%);
+ }
+}
+
+// Panneaux racine
+.dnc-root-panels {
+ position: relative;
+}
+
+.dnc-root-panel {
+ display: none;
+
+ &.active {
+ display: block;
+ }
+}
+
+// ============================================
+// Sous-onglets (niveau 2 — par PC ou client)
+// ============================================
+.dnc-pc-tabs {
+ display: flex;
+ gap: @spacing-xs;
+ flex-wrap: wrap;
+ padding: @spacing-sm 0;
+ border-bottom: 1px solid fade(@color-border, 40%);
+ margin-bottom: @spacing-md;
+}
+
+.dnc-pc-tab {
+ border: 1px solid fade(@color-border, 45%);
+ border-radius: @radius-sm;
+ background: rgba(255, 255, 255, 0.5);
+ color: @color-muted;
+ font-size: 0.82rem;
+ font-weight: 600;
+ padding: @spacing-xs @spacing-md;
+ cursor: pointer;
+ transition: all 0.15s ease;
+ white-space: nowrap;
+
+ &.active {
+ background: @color-accent;
+ border-color: darken(@color-accent, 10%);
+ color: #fff;
+ font-weight: 700;
+ }
+
+ &:hover:not(.active) {
+ background: fade(@color-panel-strong, 110%);
+ color: @color-ink;
+ }
+}
+
+// Panneaux par PC / client
+.dnc-pc-panels {
+ position: relative;
+}
+
+.dnc-pc-panel,
+.dnc-client-panel {
+ display: none;
+
+ &.active {
+ display: block;
+ }
+}
+
+// ============================================
+// Fiche compacte par employé (3 sections)
+// ============================================
+.dnc-compact-section {
+ padding: @spacing-md;
+ margin-bottom: @spacing-sm;
+ border: 1px solid fade(@color-border, 40%);
+ border-radius: @radius-md;
+ background: @color-panel;
+
+ & + .dnc-compact-section {
+ margin-top: @spacing-sm;
+ }
+}
+
+.dnc-compact-section-title {
+ font-family: @font-display;
+ font-size: 0.9rem;
+ font-weight: 700;
+ color: @color-accent;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ margin: 0 0 @spacing-sm;
+ display: flex;
+ align-items: center;
+ gap: @spacing-xs;
+ border-bottom: 1px solid fade(@color-border, 35%);
+ padding-bottom: @spacing-xs;
+
+ i { font-size: 0.85rem; }
+}
+
+.dnc-compact-concept {
+ font-size: 0.8rem;
+ color: @color-muted;
+ font-style: italic;
+ margin: @spacing-xs 0 0;
+}
+
+// Grille de caractéristiques compacte
+.dnc-compact-carac-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: @spacing-sm;
+}
+
+.dnc-carac-stat {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-width: 48px;
+ background: rgba(255, 255, 255, 0.6);
+ border: 1px solid fade(@color-border, 40%);
+ border-radius: @radius-sm;
+ padding: @spacing-xs @spacing-sm;
+}
+
+.dnc-carac-label {
+ font-size: 0.68rem;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: @color-muted;
+ font-weight: 700;
+}
+
+.dnc-carac-value {
+ font-size: 1rem;
+ font-weight: 700;
+ color: @color-ink;
+
+ &.warning {
+ color: @color-failure;
+ }
+}
+
+// Combat stats badges
+.dnc-compact-combat-stats {
+ display: flex;
+ gap: @spacing-sm;
+ flex-wrap: wrap;
+ margin-bottom: @spacing-sm;
+}
+
+.dnc-combat-badge {
+ font-size: 0.82rem;
+ padding: @spacing-xs @spacing-sm;
+ background: @color-panel-strong;
+ border: 1px solid fade(@color-border, 40%);
+ border-radius: @radius-sm;
+ color: @color-ink;
+}
+
+// Listes d'items compactes
+.dnc-compact-item-list {
+ margin-top: @spacing-sm;
+}
+
+.dnc-compact-subhead {
+ font-size: 0.78rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: @color-muted;
+ margin: 0 0 @spacing-xs;
+ display: flex;
+ align-items: center;
+ gap: @spacing-xs;
+
+ i { color: @color-accent; }
+}
+
+.dnc-compact-item {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: @spacing-xs;
+ padding: @spacing-xs 0;
+ border-top: 1px dashed fade(@color-border, 35%);
+ font-size: 0.85rem;
+
+ &:first-of-type {
+ border-top: 0;
+ }
+}
+
+.dnc-compact-item-name {
+ font-weight: 600;
+ color: @color-ink;
+}
+
+.dnc-compact-item-detail {
+ font-size: 0.78rem;
+ color: @color-muted;
+ background: rgba(255, 255, 255, 0.5);
+ border-radius: @radius-sm;
+ padding: 0.05rem 0.3rem;
+}
+
+// Stats magie compactes
+.dnc-compact-magic-stats {
+ display: flex;
+ flex-wrap: wrap;
+ gap: @spacing-sm;
+ margin-bottom: @spacing-sm;
+}
+
+// Réutilisation de .item-meta pour les badges de sortilège/capacité
+.item-meta {
+ border-radius: 999px;
+ background: @color-panel-strong;
+ color: @color-ink;
+ font-size: 0.75rem;
+ padding: 0.1rem 0.5rem;
+}
+
+// ============================================
+// Fiche client dans sous-panneau
+// ============================================
+.client-summary {
+ margin: @spacing-sm 0 0;
+ color: @color-ink;
+ font-size: 0.9rem;
+ line-height: 1.45;
+}
+
+.client-description {
+ margin-top: @spacing-md;
+ padding-top: @spacing-md;
+ border-top: 1px solid fade(@color-border, 45%);
+
+ p {
+ margin: 0;
+ color: @color-muted;
+ font-size: 0.85rem;
+ line-height: 1.5;
+ }
+}
+
+
+// ============================================
+// Roll buttons dans vue clients
+// ============================================
+.dnc-roll-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+ padding: 0.1rem 0.5rem;
+ font-size: 0.78rem;
+ font-family: @font-body;
+ color: @color-ink;
+ background: @color-panel-strong;
+ border: 1px solid fade(@color-border, 60%);
+ border-radius: @radius-sm;
+ cursor: pointer;
+ transition: background 0.15s;
+
+ i { font-size: 0.7rem; color: @color-accent; }
+
+ &:hover {
+ background: @color-accent;
+ color: #fff;
+ border-color: @color-accent;
+ i { color: #fff; }
+ }
+}
+
+.dnc-carac-rollable {
+ cursor: pointer;
+ transition: background 0.15s;
+ border-radius: @radius-sm;
+ position: relative;
+
+ &:hover {
+ background: fade(@color-accent, 18%);
+ .dnc-carac-label { color: @color-accent; }
+ }
+}
+
+// Bouton ouvrir fiche dans les titres de section
+.dnc-compact-section-title {
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+
+ .dnc-open-sheet-btn {
+ margin-left: auto;
+ background: none;
+ border: 1px solid fade(@color-border, 50%);
+ border-radius: @radius-sm;
+ color: @color-muted;
+ cursor: pointer;
+ font-size: 0.7rem;
+ padding: 0.1rem 0.35rem;
+ line-height: 1;
+ transition: color 0.15s, border-color 0.15s;
+
+ &:hover {
+ color: @color-accent;
+ border-color: @color-accent;
+ }
+ }
+}
diff --git a/less/variables.less b/less/variables.less
index 0e5c044..9a7e266 100644
--- a/less/variables.less
+++ b/less/variables.less
@@ -20,6 +20,7 @@
@color-failure: #842c2c;
@color-shadow: rgba(0, 0, 0, 0.22);
+@spacing-xs: 0.25rem;
@spacing-sm: 0.4rem;
@spacing-md: 0.75rem;
@spacing-lg: 1rem;
diff --git a/macros/Macro-magie-et-capacites-des-employes.json b/macros/Macro-magie-et-capacites-des-employes.json
new file mode 100644
index 0000000..c293934
--- /dev/null
+++ b/macros/Macro-magie-et-capacites-des-employes.json
@@ -0,0 +1,30 @@
+{
+ "name": "Magie et Capacités des Employés",
+ "type": "script",
+ "command": "// =========================================================\n// 1. RECUPERATION DES PC (employés)\n// =========================================================\nconst pcs = game.actors.filter(a => a.type === \"character\" || a.hasPlayerOwner);\n\nif (pcs.length === 0) {\n ui.notifications.warn(\"Aucun personnage de joueur trouvé.\");\n return;\n}\n\n// =========================================================\n// 2. CONSTRUCTION DU CODE HTML (avec onglets et panel)\n// =========================================================\nlet tabsHtml = `
`;\nlet panelsHtml = ``;\n\n// =========================================================\n// 3. POUR CHAQUE PC\n// =========================================================\npcs.forEach((pc, index) => {\n const sys = pc.system || {};\n \n // ---------------------------\n // Bouton d'onglet\n // ---------------------------\n tabsHtml += `\n
\n `;\n \n // ---------------------------\n // Données martiales\n // ---------------------------\n const focus = \"Δ\" + sys.magie?.focus?.delta ?? 0;\n const ptsMagie = sys.magie?.focus?.resultat ?? 0;\n\n // ---------------------------\n // Equipements\n // ---------------------------\n const items = pc.items ? pc.items.contents : [];\n let magieHtml = \"\";\n let capacitesHtml = \"\";\n\n // ---------------------------\n // POUR CHAQUE CAPACITE\n // ---------------------------\n items.forEach(item => {\n const itemSys = item.system || {};\n \n // ---------------------------\n // --- TRAITEMENT DES CAPACITES ---\n // ---------------------------\n if (item.type === \"capacite\") {\n const cout = itemSys.cout ?? \"\";\n const effet = itemSys.effet ?? \"\";\n const notes = itemSys.notes ? `
Note: ${itemSys.notes}
` : \"\";\n const desc = item.description || itemSys.description;\n const descHtml = desc && desc.trim() !== \"\" ? `
${desc}
` : \"\";\n\n capacitesHtml += `\n
\n
\n
\n
\n \n | ${item.name} | \n
\n \n | Cout : | ${cout} | \n
\n \n | Effet : | ${effet} | \n
\n \n | Description : | ${descHtml} | \n
\n \n | Notes : | ${notes} | \n
\n
\n
\n
\n
`;\n }\n\n // ---------------------------\n // --- TRAITEMENT DES SORTS ---\n // ---------------------------\n if (item.type === \"sortilege\") {\n const cout = itemSys.coutPv ?? \"\";\n const carac = itemSys.caracteristique ?? \"\";\n const effet = itemSys.effet ?? \"\";\n const degats = itemSys.degats ?? \"\";\n const difficulte = itemSys.difficulte ?? 0;\n const duree = itemSys.duree ?? \"\";\n const portee = itemSys.portee ?? \"\"; \n \n const notes = itemSys.notes ? `
Note: ${itemSys.notes}
` : \"\";\n const desc = item.description || itemSys.description;\n const descHtml = desc && desc.trim() !== \"\" ? `
${desc}
` : \"\";\n\n magieHtml += `\n
\n
\n
\n
\n \n | ${item.name} | \n ${carac} | \n | \n ${cout} PV | \n
\n \n | Dégats : | ${degats} | \n Portée : | ${portee} | \n Durée : | ${duree} | \n Diff. : | ${difficulte} | \n
\n \n | Effet : | ${effet} | \n
\n \n | Notes : | ${notes} | \n
\n \n | Description : | ${descHtml} | \n
\n
\n
\n
\n
`;\n }\n });\n\n if (!capacitesHtml) capacitesHtml = `
Aucune capacité.
`;\n if (!magieHtml) magieHtml = `
Aucun sort.
`;\n\n panelsHtml += `\n
\n
\n
\n
\n
Focus restant\n
${ptsMagie}
\n
\n
\n\n
\n\n
\n
`;\n});\n\ntabsHtml += `
`;\n\nlet content = `\n\n
\n
Capacités Spéciales et Magiques des Employés
\n ${tabsHtml}\n
\n ${panelsHtml}\n
\n
\n
\n`;\n\n// =========================================================\n// 4. AFFICHE DE LA BOITE DE DIALOGUE\n// =========================================================\nconst dialog = await foundry.applications.api.DialogV2.wait({\n window: {\n title: \"Capacités Spéciales et Magiques des Employés\",\n icon: \"fa-solid fa-shield-halved\"\n },\n content: content,\n classes: [\"fvtt-donjon-et-cie\"],\n buttons: [\n {\n action: \"close\",\n label: \"Fermer\",\n icon: \"fas fa-xmark\",\n callback: () => ({action: \"Fermer\"})\n } \n ],\n rejectClose: false,\n render: (event, dialog) => {\n const root = dialog.element;\n \n const triggers = root.querySelectorAll('.custom-tab-trigger');\n const panels = root.querySelectorAll('.custom-pc-panel');\n \n const setActiveTab = (activeId) => {\n triggers.forEach(btn => {\n const pcId = btn.getAttribute('data-pc-id');\n if (pcId === activeId) {\n btn.style.setProperty('background', '#8b2e17', 'important');\n btn.style.setProperty('color', '#ffffff', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n } else {\n btn.style.setProperty('background', 'rgba(226, 208, 177, 0.6)', 'important');\n btn.style.setProperty('color', '#221b18', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n }\n });\n \n panels.forEach(panel => {\n const panelId = panel.getAttribute('id');\n if (panelId === `panel-pc-${activeId}`) {\n panel.style.setProperty('display', 'block', 'important');\n } else {\n panel.style.setProperty('display', 'none', 'important');\n }\n });\n };\n \n if (triggers.length > 0) {\n const firstId = triggers[0].getAttribute('data-pc-id');\n setActiveTab(firstId);\n }\n \n triggers.forEach(btn => {\n btn.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const pcId = btn.getAttribute('data-pc-id');\n setActiveTab(pcId);\n });\n });\n }, \n submit: (result) => {}\n});",
+ "img": "icons/magic/air/air-smoke-casting.webp",
+ "author": "eibNkxM8PO50SgGM",
+ "scope": "global",
+ "folder": null,
+ "flags": {},
+ "_stats": {
+ "compendiumSource": null,
+ "duplicateSource": null,
+ "exportSource": {
+ "worldId": "donjon-et-cie",
+ "uuid": "Macro.ONARNmaGsRGT32S6",
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14"
+ },
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14",
+ "createdTime": 1780387298591,
+ "modifiedTime": 1780424861265,
+ "lastModifiedBy": "eibNkxM8PO50SgGM"
+ },
+ "ownership": {
+ "default": 0
+ }
+}
\ No newline at end of file
diff --git a/macros/fvtt-Macro-capacites-de-combat-des-employes.json b/macros/fvtt-Macro-capacites-de-combat-des-employes.json
new file mode 100644
index 0000000..cce4087
--- /dev/null
+++ b/macros/fvtt-Macro-capacites-de-combat-des-employes.json
@@ -0,0 +1,30 @@
+{
+ "name": "Capacités de combat des Employés",
+ "type": "script",
+ "command": "// =========================================================\n// 1. RECUPERATION DES PC (employés)\n// =========================================================\nconst pcs = game.actors.filter(a => a.type === \"character\" || a.hasPlayerOwner);\nif (pcs.length === 0) {\n ui.notifications.warn(\"Aucun personnage de joueur trouvé.\");\n return;\n}\n\n// =========================================================\n// 2. CONSTRUCTION DU CODE HTML (avec onglets et panel)\n// =========================================================\nlet tabsHtml = ``;\nlet panelsHtml = ``;\n\n// =========================================================\n// 3. POUR CHAQUE PC\n// =========================================================\npcs.forEach((pc, index) => {\n const sys = pc.system || {};\n \n // ---------------------------\n // Bouton d'onglet\n // ---------------------------\n tabsHtml += `\n
\n `;\n \n // ---------------------------\n // SANTE ET ATTAQUES\n // ---------------------------\n const pvVal = sys.sante?.pv?.value ?? 0;\n const pvMax = sys.sante?.pv?.max ?? 0;\n const dv = sys.sante?.dv ?? \"1d6\";\n const attCc = sys.combat?.attaquesCorpsACorps ?? 1;\n const attDist = sys.combat?.attaquesDistance ?? 1;\n\n const items = pc.items ? pc.items.contents : [];\n let armesHtml = \"\";\n let armuresHtml = \"\";\n\n // ---------------------------\n // POUR CHAQUE ARME ET ARMURE\n // ---------------------------\n items.forEach(item => {\n const itemSys = item.system || {};\n \n // ---------------------------\n // --- TRAITEMENT DES ARMES ---\n // ---------------------------\n if (item.type === \"arme\" || item.type === \"weapon\") {\n const typeArme = itemSys.categorie === \"distance\" ? \"Distance\" : \"Corps à corps\";\n const carac = itemSys.caracteristique ? itemSys.caracteristique.toUpperCase() : \"FOR\";\n const mains = itemSys.mains === 2 || itemSys.deuxMains ? \"2 mains\" : \"1 main\";\n const portee = itemSys.portee ? `${itemSys.portee}` : \"Contact\";\n \n let degats = \"\";\n if(itemSys.degatsEstUsageDe) {\n degats = itemSys.degats + \"(Δ)\";\n } else {\n degats = itemSys.degats;\n }\n\n let munitions = \"\";\n if(itemSys.munitionsDelta == null) {\n munitions = \"\";\n } else {\n if(itemSys.munitionsDelta == 0) {\n munitions = \"Epuisées\"; \n } else {\n munitions = \"Δ\" + itemSys.munitionsDelta;\n }\n }\n\n const notes = itemSys.notes ? `
Note: ${itemSys.notes}
` : \"\";\n const desc = item.description || itemSys.description;\n const descHtml = desc && desc.trim() !== \"\" ? `
${desc}
` : \"\";\n\n armesHtml += `\n
\n
\n
\n
\n \n | ${item.name} | \n ${typeArme} | \n ${carac} | \n ${mains} | \n
\n \n | Dégats : | ${degats} | \n Portée : | ${portee} | \n Munitions : | ${munitions} | \n
\n \n | Notes : | ${notes} | \n
\n \n | Description : | ${descHtml} | \n
\n
\n
\n
\n
`;\n }\n\n // ---------------------------\n // --- TRAITEMENT DES ARMURES ---\n // ---------------------------\n if (item.type === \"armure\" || item.type === \"armor\") {\n const protection = \"Δ\" + itemSys.delta;\n const protectionRestante = itemSys.resultatProtection;\n const encombrement = itemSys.encombrement;\n \n const notes = itemSys.notes ? `
Note: ${itemSys.notes}
` : \"\";\n const desc = item.description || itemSys.description;\n const descHtml = desc && desc.trim() !== \"\" ? `
${desc}
` : \"\";\n\n armuresHtml += `\n
\n
\n
\n
\n \n | ${item.name} | \n
\n \n | Protection Δ : | ${protection} | \n Encombrement : | ${encombrement} | \n
\n \n | Protection restante : | ${protectionRestante} | \n
\n \n | Notes : | ${notes} | \n
\n \n | Description : | ${descHtml} | \n
\n
\n
\n
\n
`;\n }\n });\n\n if (!armesHtml) armesHtml = `
Aucune arme répertoriée.
`;\n if (!armuresHtml) armuresHtml = `
Aucune armure répertoriée.
`;\n\n panelsHtml += `\n
\n
\n
\n
\n
PV\n
${pvVal} / ${pvMax}
\n
\n
\n
Attaques CàC\n
⚔️ x${attCc}
\n
\n
\n
Attaques Dist.\n
🏹 x${attDist}
\n
\n
\n\n
\n\n
\n
`;\n});\n\ntabsHtml += `
`;\n\nlet content = `\n\n
\n
Capacités de Combat des Employés
\n ${tabsHtml}\n
\n ${panelsHtml}\n
\n
\n
\n`;\n\n// =========================================================\n// 4. AFFICHE DE LA BOITE DE DIALOGUE\n// =========================================================\nconst dialog = await foundry.applications.api.DialogV2.wait({\n window: {\n title: \"Capacités de Combat des Employés\",\n icon: \"fa-solid fa-shield-halved\"\n },\n content: content,\n classes: [\"fvtt-donjon-et-cie\"],\n buttons: [\n {\n action: \"close\",\n label: \"Fermer\",\n icon: \"fas fa-xmark\",\n callback: () => ({action: \"Fermer\"})\n } \n ],\n rejectClose: false,\n render: (event, dialog) => {\n const root = dialog.element;\n \n const triggers = root.querySelectorAll('.custom-tab-trigger');\n const panels = root.querySelectorAll('.custom-pc-panel');\n \n const setActiveTab = (activeId) => {\n triggers.forEach(btn => {\n const pcId = btn.getAttribute('data-pc-id');\n if (pcId === activeId) {\n btn.style.setProperty('background', '#8b2e17', 'important');\n btn.style.setProperty('color', '#ffffff', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n } else {\n btn.style.setProperty('background', 'rgba(226, 208, 177, 0.6)', 'important');\n btn.style.setProperty('color', '#221b18', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n }\n });\n \n panels.forEach(panel => {\n const panelId = panel.getAttribute('id');\n if (panelId === `panel-pc-${activeId}`) {\n panel.style.setProperty('display', 'block', 'important');\n } else {\n panel.style.setProperty('display', 'none', 'important');\n }\n });\n };\n \n if (triggers.length > 0) {\n const firstId = triggers[0].getAttribute('data-pc-id');\n setActiveTab(firstId);\n }\n \n triggers.forEach(btn => {\n btn.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const pcId = btn.getAttribute('data-pc-id');\n setActiveTab(pcId);\n });\n });\n }, \n submit: (result) => {}\n});",
+ "img": "icons/environment/people/charge.webp",
+ "author": "eibNkxM8PO50SgGM",
+ "scope": "global",
+ "folder": null,
+ "flags": {},
+ "_stats": {
+ "compendiumSource": null,
+ "duplicateSource": null,
+ "exportSource": {
+ "worldId": "donjon-et-cie",
+ "uuid": "Macro.u5wLzazd4Ls5Dv0b",
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14"
+ },
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14",
+ "createdTime": 1780351858617,
+ "modifiedTime": 1780424697902,
+ "lastModifiedBy": "eibNkxM8PO50SgGM"
+ },
+ "ownership": {
+ "default": 0
+ }
+}
\ No newline at end of file
diff --git a/macros/fvtt-Macro-caracteristiques-des-employes.json b/macros/fvtt-Macro-caracteristiques-des-employes.json
new file mode 100644
index 0000000..aff7086
--- /dev/null
+++ b/macros/fvtt-Macro-caracteristiques-des-employes.json
@@ -0,0 +1,30 @@
+{
+ "name": "Caractéristiques des Employés",
+ "type": "script",
+ "command": "// =========================================================\n// 1. RECUPERER LES PJ (les employés)\n// =========================================================\nconst pcs = game.actors.filter(a => a.type === \"character\" || a.hasPlayerOwner);\n\nif (pcs.length === 0) {\n ui.notifications.warn(\"Aucun personnage de joueur trouvé.\");\n return;\n}\n\n// =========================================================\n// 2. CONSTRUCTION DU CONTENU DE LA BOITE DE DIALOGUE\n// =========================================================\nlet content = `\n\n
\n
Caractéristiques des Employés
\n
\n \n \n | Nom / Concept | \n PV | \n DV | \n FOR | \n DEX | \n CON | \n INT | \n SAG | \n CHA | \n Suspicion | \n Avertissements | \n Missions réussies | \n Traits | \n
\n \n \n`;\n\n// =========================================================\n// 3. POUR CHAQUE PERSONNAGE-JOUEUR\n// =========================================================\nfor (let pc of pcs) {\n const sys = pc.system;\n if (!sys || !sys.caracteristiques) continue;\n\n const name = pc.name;\n const concept = sys.concept || \"\";\n const pvVal = sys.sante?.pv?.value ?? 0;\n const pvMax = sys.sante?.pv?.max ?? 0;\n const dv = sys.sante?.dv ?? 0;\n \n // Caractéristiques\n const force = sys.caracteristiques.force?.value ?? 0;\n const dex = sys.caracteristiques.dexterite?.value ?? 0;\n const con = sys.caracteristiques.constitution?.value ?? 0;\n const int = sys.caracteristiques.intelligence?.value ?? 0;\n const sag = sys.caracteristiques.sagesse?.value ?? 0;\n const cha = sys.caracteristiques.charisme?.value ?? 0;\n \n // Profil\n const suspicion = sys.profil?.suspicion ?? 0;\n const avertissements = sys.profil?.avertissements ?? 0;\n const missionsReussies = sys.profil?.missionsReussies ?? 0;\n\n // Traits\n const items = pc.items ? pc.items.contents : [];\n let traits = \"\";\n let first = true;\n items.forEach(item => {\n const itemSys = item.system || {};\n if (item.type === \"trait\" || item.type === \"???\") {\n if(first) {\n first = false;\n } else {\n traits += \", \";\n }\n traits += item.name;\n }\n });\n\n content += `\n \n \n ${name} \n ${concept}\n | \n \n ${pvVal} / ${pvMax}\n | \n ${dv} | \n ${force} | \n ${dex} | \n ${con} | \n ${int} | \n ${sag} | \n ${cha} | \n ${missionsReussies} | \n 0 ? '#842c2c' : '#221b18'};\">${suspicion} | \n 0 ? '#842c2c' : '#221b18'};\">${avertissements} | \n ${traits} | \n
\n `;\n}\n\ncontent += `\n \n
\n
\n
\n`;\n\n// =========================================================\n// 4. AFFICHAGE DE LA BOITE DE DIALOGUE\n// =========================================================\nconst dialog = await foundry.applications.api.DialogV2.wait({\n window: {\n title: \"Caractéristiques des Employés\",\n icon: \"fa-solid fa-users\"\n },\n content: content,\n classes: [\"fvtt-donjon-et-cie\"], // Applique le fond et le style global de la fenêtre\n buttons: [\n {\n action: \"close\",\n label: \"Fermer\",\n icon: \"fas fa-xmark\",\n callback: (event, button, dialog) => {\n return {action: \"Fermer\"};\n }\n } \n ],\n rejectClose: false,\n render: (event, dialog) => {\n const root = dialog.element;\n this._dialogElement = root;\n }, \n submit: (result) => {}\n});",
+ "img": "icons/environment/people/group.webp",
+ "author": "eibNkxM8PO50SgGM",
+ "scope": "global",
+ "folder": null,
+ "flags": {},
+ "_stats": {
+ "compendiumSource": null,
+ "duplicateSource": null,
+ "exportSource": {
+ "worldId": "donjon-et-cie",
+ "uuid": "Macro.Y8xsVOLKNcMnIOAr",
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14"
+ },
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14",
+ "createdTime": 1780347363797,
+ "modifiedTime": 1780424175701,
+ "lastModifiedBy": "eibNkxM8PO50SgGM"
+ },
+ "ownership": {
+ "default": 0
+ }
+}
\ No newline at end of file
diff --git a/macros/fvtt-Macro-clients.json b/macros/fvtt-Macro-clients.json
new file mode 100644
index 0000000..faf9844
--- /dev/null
+++ b/macros/fvtt-Macro-clients.json
@@ -0,0 +1,30 @@
+{
+ "name": "Clients",
+ "type": "script",
+ "command": "// =========================================================\n// 1. RECUPERATION DES CLIENTS\n// =========================================================\nconst clients = canvas.scene.tokens.filter(token =>\n token.actor.hasPlayerOwner === false &&\n token.actor.type === \"pnj\" &&\n token.actor.system.categorie === \"Client\"\n);\n\nif (clients.length === 0) {\n ui.notifications.warn(\"Aucun Client trouvé.\");\n return;\n}\n\n// =========================================================\n// 2. CONSTRUCTION DU CODE HTML (avec onglets et panel)\n// =========================================================\nlet tabsHtml = ``;\nlet panelsHtml = ``;\n\n// =========================================================\n// 3. POUR CHAQUE CLIENT\n// =========================================================\nclients.forEach((client, index) => {\n const sys = client.actor.system || {};\n \n // ---------------------------\n // Bouton d'onglet\n // ---------------------------\n tabsHtml += `\n
\n `;\n // ---------------------------\n // PERSONNAGE\n // ---------------------------\n const espece = sys.espece ?? \"humain\";\n const role = sys.role ?? \"\";\n const resume = sys.resume ?? \"\";\n const courage = sys.defense.courage.delta ?? \"\";\n \n // ---------------------------\n // SANTE\n // ---------------------------\n const pvVal = sys.sante?.pv?.value ?? 0;\n const pvMax = sys.sante?.pv?.max ?? 0;\n const dv = sys.sante?.dv ?? \"1d6\";\n\n // ---------------------------\n // ATTAQUES\n // ---------------------------\n const armureDelta = sys.defense.armure.delta;\n const armureProtectionStockee = sys.defense.armure.resultatProtection;\n const attaques = sys.attaques;\n let attaquesHtml = null;\n if(attaques.length > 0) {\n attaquesHtml = `\n
\n \n `;\n attaques.forEach(attaque => {\n attaquesHtml += `\n
\n
\n
Arme\n
${attaque.nom}
\n
\n
\n
Dégats\n
${attaque.degats}
\n
\n
\n `;\n });\n attaquesHtml += `
`;\n }\n \n // ---------------------------\n // SORTS\n // ---------------------------\n const sorts = client.actor.items?.filter(item => item.type === \"sortilege\")\n let sortsHtml = \"\";\n if(sorts.length > 0) {\n sortsHtml = `\n
\n \n `;\n \n sorts.forEach(sort => {\n sortsHtml += `\n
\n
\n
\n
Effet\n
${sort.system.effet}
\n
\n
\n `;\n });\n sortsHtml += `
`;\n } \n\n // ---------------------------\n // CAPACITES\n // ---------------------------\n const capacites = client.actor.items?.filter(item => item.type === \"capacite\")\n let capacitesHtml = \"\";\n if(capacites.length > 0) {\n capacitesHtml = `\n
\n \n `;\n \n capacites.forEach(capacite => {\n capacitesHtml += `\n
\n
\n
Nom\n
${capacite.name}
\n
\n
\n
Cout\n
${capacite.system.cout}
\n
\n
\n
Effet\n
${capacite.system.effet}
\n
\n
\n `;\n });\n capacitesHtml += `
`;\n }\n\n \n // ---------------------------\n // CONSTITUER LE HTML COMPLET\n // ---------------------------\n panelsHtml += `\n
\n
\n
\n
\n
\n
\n
PV\n
${pvVal} / ${pvMax}
\n
\n
\n
Courage\n
Δ${courage}
\n
\n
\n
\n\n ${attaquesHtml}\n\n
\n \n
\n
\n
Armure\n
${armureDelta}
\n
\n
\n
Protection stockée\n
${armureProtectionStockee}
\n
\n
\n
\n \n ${sortsHtml}\n \n ${capacitesHtml}\n \n
`;\n});\n\ntabsHtml += `
`;\n\nlet content = `\n\n
\n
Les Clients
\n ${tabsHtml}\n
\n ${panelsHtml}\n
\n
\n
\n`;\n\n// =========================================================\n// 4. AFFICHE DE LA BOITE DE DIALOGUE\n// =========================================================\nconst dialog = await foundry.applications.api.DialogV2.wait({\n window: {\n title: \"Les Clients\",\n icon: \"fa-solid fa-shield-halved\"\n },\n content: content,\n classes: [\"fvtt-donjon-et-cie\"],\n buttons: [\n {\n action: \"close\",\n label: \"Fermer\",\n icon: \"fas fa-xmark\",\n callback: () => ({action: \"Fermer\"})\n } \n ],\n rejectClose: false,\n render: (event, dialog) => {\n const root = dialog.element;\n \n const triggers = root.querySelectorAll('.custom-tab-trigger');\n const panels = root.querySelectorAll('.custom-pc-panel');\n \n const setActiveTab = (activeId) => {\n triggers.forEach(btn => {\n const pcId = btn.getAttribute('data-pc-id');\n if (pcId === activeId) {\n btn.style.setProperty('background', '#8b2e17', 'important');\n btn.style.setProperty('color', '#ffffff', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n } else {\n btn.style.setProperty('background', 'rgba(226, 208, 177, 0.6)', 'important');\n btn.style.setProperty('color', '#221b18', 'important');\n btn.style.setProperty('border-color', '#561d0e', 'important');\n }\n });\n \n panels.forEach(panel => {\n const panelId = panel.getAttribute('id');\n if (panelId === `panel-pc-${activeId}`) {\n panel.style.setProperty('display', 'block', 'important');\n } else {\n panel.style.setProperty('display', 'none', 'important');\n }\n });\n };\n \n if (triggers.length > 0) {\n const firstId = triggers[0].getAttribute('data-pc-id');\n setActiveTab(firstId);\n }\n \n triggers.forEach(btn => {\n btn.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const pcId = btn.getAttribute('data-pc-id');\n setActiveTab(pcId);\n });\n });\n }, \n submit: (result) => {}\n});",
+ "img": "icons/environment/people/cleric-grey.webp",
+ "author": "eibNkxM8PO50SgGM",
+ "scope": "global",
+ "folder": null,
+ "flags": {},
+ "_stats": {
+ "compendiumSource": null,
+ "duplicateSource": null,
+ "exportSource": {
+ "worldId": "donjon-et-cie",
+ "uuid": "Macro.JHKPpJNz2LP5YDUd",
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14"
+ },
+ "coreVersion": "13.351",
+ "systemId": "fvtt-donjon-et-cie",
+ "systemVersion": "14.0.14",
+ "createdTime": 1780430930887,
+ "modifiedTime": 1780468322761,
+ "lastModifiedBy": "eibNkxM8PO50SgGM"
+ },
+ "ownership": {
+ "default": 0
+ }
+}
\ No newline at end of file
diff --git a/modules/applications/donjon-et-cie-employes-dialog.mjs b/modules/applications/donjon-et-cie-employes-dialog.mjs
new file mode 100644
index 0000000..7843fdb
--- /dev/null
+++ b/modules/applications/donjon-et-cie-employes-dialog.mjs
@@ -0,0 +1,363 @@
+/**
+ * Donjon & Cie - Systeme FoundryVTT
+ *
+ * Fenêtre de dialogue pour afficher les employés (PJ)
+ * Structure : 2 onglets racine (Employés / Clients),
+ * avec sous-onglets par PC ou par client.
+ *
+ * @author LeRatierBretonnien
+ * @copyright 2025–2026 LeRatierBretonnien
+ * @license CC BY-NC-SA 4.0
+ */
+
+import { DonjonEtCieUtility } from "../donjon-et-cie-utility.mjs";
+import { DONJON_ET_CIE } from "../donjon-et-cie-config.mjs";
+
+export class DonjonEtCieEmployesDialog {
+ /**
+ * Ouvre la fenêtre des employés
+ */
+ static async open() {
+ const pcs = this.#getPlayerCharacters();
+ const clientTokens = this.#getClients();
+ const characteristicKeys = this.#getCharacteristicKeys();
+
+ const pcsData = await Promise.all(
+ pcs.map(async (pc) => this.#preparePcData(pc, characteristicKeys))
+ );
+
+ const templateContext = {
+ pcs: pcsData,
+ clients: clientTokens.map(t => this.#prepareClientData(t)),
+ characteristicKeys
+ };
+
+ const content = await foundry.applications.handlebars.renderTemplate(
+ "systems/fvtt-donjon-et-cie/templates/dialogs/employes-dialog.hbs",
+ templateContext
+ );
+
+ return foundry.applications.api.DialogV2.wait({
+ window: {
+ title: "Employés",
+ icon: "fa-solid fa-hard-hat"
+ },
+ classes: ["fvtt-donjon-et-cie", "dnc-employes-dialog-wrapper"],
+ content,
+ modal: false,
+ buttons: [
+ {
+ action: "close",
+ label: "Fermer",
+ icon: "fa-solid fa-xmark",
+ callback: () => true
+ }
+ ],
+ rejectClose: false,
+ render: (event, dialog) => this.#setupTabs(dialog)
+ });
+ }
+
+ /**
+ * Récupère les personnages joueurs (employés)
+ */
+ static #getPlayerCharacters() {
+ return game.actors.filter(a => a.type === "character" || a.hasPlayerOwner);
+ }
+
+ /**
+ * Récupère les PNJ clients de la scène courante (retourne les TokenDocuments)
+ */
+ static #getClients() {
+ const scene = canvas?.scene ?? game.scenes?.current;
+ if (!scene) return [];
+
+ return scene.tokens.filter(token => {
+ const actor = token.actor;
+ return actor &&
+ !actor.hasPlayerOwner &&
+ actor.type === "pnj" &&
+ actor.system.categorie === "Client";
+ });
+ }
+
+ /**
+ * Récupère les clés des caractéristiques
+ */
+ static #getCharacteristicKeys() {
+ return Object.entries(DONJON_ET_CIE.characteristics).map(([key, metadata]) => ({
+ key,
+ label: metadata.label,
+ short: metadata.short
+ }));
+ }
+
+ /**
+ * Prépare les données d'un PJ pour l'affichage
+ */
+ static async #preparePcData(pc, characteristicKeys) {
+ const sys = pc.system || {};
+ const items = pc.items?.contents || [];
+
+ const pvValue = sys.sante?.pv?.value ?? 0;
+ const pvMax = sys.sante?.pv?.max ?? 0;
+ const dv = sys.sante?.dv ?? "1d6";
+ const meleeAttacks = sys.combat?.attaquesCorpsACorps ?? 1;
+ const rangedAttacks = sys.combat?.attaquesDistance ?? 1;
+
+ const magicResources = DonjonEtCieUtility.getMagicResourceContext(pc);
+
+ const weapons = [];
+ const armors = [];
+ const spells = [];
+ const capacities = [];
+
+ for (const item of items) {
+ const itemSys = item.system || {};
+
+ if (item.type === "arme") {
+ const categoryLabel = itemSys.categorie === "distance" ? "Distance" : "Corps à corps";
+ const handsLabel = (itemSys.mains ?? 1) > 1 ? "2 mains" : "1 main";
+
+ weapons.push({
+ name: item.name,
+ categoryLabel,
+ handsLabel,
+ damage: itemSys.degatsEstUsageDe
+ ? `${itemSys.degats}(Δ)`
+ : (itemSys.degats || "—"),
+ range: itemSys.portee || "Contact",
+ ammunition: itemSys.munitionsDelta != null
+ ? (itemSys.munitionsDelta === 0 ? "Épuisées" : `Δ${itemSys.munitionsDelta}`)
+ : ""
+ });
+ }
+
+ if (item.type === "armure") {
+ armors.push({
+ name: item.name,
+ protectionDie: `Δ${itemSys.delta || 0}`,
+ encumbrance: itemSys.encombrement || "—",
+ remainingProtection: itemSys.resultatProtection || "—"
+ });
+ }
+
+ if (item.type === "sortilege") {
+ spells.push({
+ name: item.name,
+ usageLabel: itemSys.delta > 0 ? DonjonEtCieUtility.formatUsageDie(itemSys.delta) : null
+ });
+ }
+
+ if (item.type === "capacite") {
+ capacities.push({
+ name: item.name,
+ usageLabel: itemSys.delta > 0 ? DonjonEtCieUtility.formatUsageDie(itemSys.delta) : null
+ });
+ }
+ }
+
+ // Spread des valeurs de caractéristiques directement sur l'objet pc
+ const characteristics = {};
+ characteristicKeys.forEach(({ key }) => {
+ characteristics[key] = sys.caracteristiques?.[key]?.value ?? 0;
+ });
+
+ return {
+ actorId: pc.id,
+ name: pc.name,
+ concept: pc.system.concept || "",
+ pvValue,
+ pvMax,
+ dv,
+ meleeAttacks,
+ rangedAttacks,
+ weapons,
+ armors,
+ spells,
+ capacities,
+ magicRank: magicResources.rank,
+ focusDisplay: magicResources.focusDisplay,
+ chaosDisplay: magicResources.chaosLabel,
+ ...characteristics
+ };
+ }
+
+ /**
+ * Prépare les données d'un client (PNJ) depuis son TokenDocument
+ */
+ static #prepareClientData(token) {
+ const client = token.actor;
+ const sys = client.system || {};
+ const items = client.items?.contents || [];
+
+ // Attaques système du modèle PNJ
+ const attaques = (sys.attaques || []).filter(a => a.nom || a.degats);
+
+ // Items du PNJ
+ const weapons = [];
+ const spells = [];
+ const capacities = [];
+
+ for (const item of items) {
+ const itemSys = item.system || {};
+ if (item.type === "arme") {
+ weapons.push({
+ name: item.name,
+ damage: itemSys.degatsEstUsageDe
+ ? `${itemSys.degats}(Δ)`
+ : (itemSys.degats || "—"),
+ categoryLabel: itemSys.categorie === "distance" ? "Distance" : "Corps à corps"
+ });
+ }
+ if (item.type === "sortilege") {
+ spells.push({
+ name: item.name,
+ usageLabel: itemSys.delta > 0 ? DonjonEtCieUtility.formatUsageDie(itemSys.delta) : null
+ });
+ }
+ if (item.type === "capacite") {
+ capacities.push({
+ name: item.name,
+ usageLabel: itemSys.delta > 0 ? DonjonEtCieUtility.formatUsageDie(itemSys.delta) : null
+ });
+ }
+ }
+
+ return {
+ id: client.id,
+ tokenUuid: token.uuid,
+ name: client.name,
+ species: sys.espece || "",
+ category: sys.categorie || "",
+ role: sys.role || "",
+ summary: sys.resume || "",
+ pvValue: sys.sante?.pv?.value ?? 0,
+ pvMax: sys.sante?.pv?.max ?? 0,
+ dv: sys.sante?.dv || "1d8",
+ armureDelta: sys.defense?.armure?.delta ?? 0,
+ armureProtection: sys.defense?.armure?.resultatProtection ?? 0,
+ courageDelta: sys.defense?.courage?.delta ?? 0,
+ attaques,
+ weapons,
+ spells,
+ capacities,
+ pouvoirsSpeciaux: sys.pouvoirsSpeciaux || "",
+ hasMagie: spells.length > 0 || capacities.length > 0 || !!(sys.pouvoirsSpeciaux || "").trim()
+ };
+ }
+
+ /**
+ * Configuration des onglets à 2 niveaux
+ * Niveau 1 : Employés / Clients (root tabs)
+ * Niveau 2 : un onglet par PC ou par client (sub-tabs)
+ */
+ static #setupTabs(dialog) {
+ const root = dialog.element;
+
+ // ---- Onglets racine ----
+ const rootTabs = root.querySelectorAll('.dnc-root-tab');
+ const rootPanels = root.querySelectorAll('.dnc-root-panel');
+
+ const activateRoot = (tabName) => {
+ rootTabs.forEach(btn => btn.classList.toggle('active', btn.dataset.rootTab === tabName));
+ rootPanels.forEach(panel => panel.classList.toggle('active', panel.dataset.rootPanel === tabName));
+ };
+
+ rootTabs.forEach(btn => {
+ btn.addEventListener('click', (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ activateRoot(btn.dataset.rootTab);
+ });
+ });
+
+ // Activer premier onglet racine par défaut
+ if (rootTabs.length > 0) activateRoot(rootTabs[0].dataset.rootTab);
+
+ // ---- Sous-onglets PC ----
+ const pcTabs = root.querySelectorAll('.dnc-pc-tab[data-pc-tab]');
+ const pcPanels = root.querySelectorAll('.dnc-pc-panel[data-pc-panel]');
+
+ const activatePc = (actorId) => {
+ pcTabs.forEach(btn => btn.classList.toggle('active', btn.dataset.pcTab === actorId));
+ pcPanels.forEach(panel => panel.classList.toggle('active', panel.dataset.pcPanel === actorId));
+ };
+
+ pcTabs.forEach(btn => {
+ btn.addEventListener('click', (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ activatePc(btn.dataset.pcTab);
+ });
+ });
+
+ if (pcTabs.length > 0) activatePc(pcTabs[0].dataset.pcTab);
+
+ // ---- Sous-onglets Clients ----
+ const clientTabs = root.querySelectorAll('.dnc-pc-tab[data-client-tab]');
+ const clientPanels = root.querySelectorAll('.dnc-client-panel[data-client-panel]');
+
+ const activateClient = (clientId) => {
+ clientTabs.forEach(btn => btn.classList.toggle('active', btn.dataset.clientTab === clientId));
+ clientPanels.forEach(panel => panel.classList.toggle('active', panel.dataset.clientPanel === clientId));
+ };
+
+ clientTabs.forEach(btn => {
+ btn.addEventListener('click', (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ activateClient(btn.dataset.clientTab);
+ });
+ });
+
+ if (clientTabs.length > 0) activateClient(clientTabs[0].dataset.clientTab);
+
+ // ---- Ouverture des fiches ----
+ root.addEventListener('click', (e) => {
+ const btn = e.target.closest('.dnc-open-sheet-btn');
+ if (!btn) return;
+ e.preventDefault();
+ e.stopPropagation();
+
+ const type = btn.dataset.openSheet;
+ if (type === "pc") {
+ const actor = game.actors.get(btn.dataset.actorId);
+ actor?.sheet.render(true);
+ } else if (type === "client") {
+ const tokenDoc = fromUuidSync(btn.dataset.tokenUuid);
+ const actor = tokenDoc?.actor ?? game.actors.get(btn.dataset.actorId);
+ actor?.sheet.render(true);
+ }
+ });
+
+ // ---- Jets de dés depuis la vue clients (même dialogs que la fiche PNJ) ----
+ root.addEventListener('click', async (e) => {
+ const btn = e.target.closest('.dnc-roll-btn, .dnc-carac-rollable');
+ if (!btn) return;
+ e.preventDefault();
+ e.stopPropagation();
+
+ // Résolution de l'actor : token UUID pour gérer les tokens non-liés
+ const tokenUuid = btn.dataset.tokenUuid;
+ const actorId = btn.dataset.actorId;
+ let actor = null;
+ if (tokenUuid) {
+ const tokenDoc = fromUuidSync(tokenUuid);
+ actor = tokenDoc?.actor ?? null;
+ }
+ if (!actor && actorId) {
+ actor = game.actors.get(actorId);
+ }
+ if (!actor) return;
+
+ const action = btn.dataset.pnjAction;
+ switch (action) {
+ case "rollArmure": return actor.rollPnjArmor();
+ case "rollCourage": return actor.rollPnjCourage();
+ case "rollAttaque": return actor.rollPnjAttackDamage(btn.dataset.attackIndex ?? 0);
+ }
+ });
+ }
+}
+
diff --git a/modules/donjon-et-cie-main.mjs b/modules/donjon-et-cie-main.mjs
index d44f138..1f792e4 100644
--- a/modules/donjon-et-cie-main.mjs
+++ b/modules/donjon-et-cie-main.mjs
@@ -18,6 +18,7 @@ import { DonjonEtCieItem } from "./donjon-et-cie-item.mjs";
import * as models from "./models/index.mjs";
import * as sheets from "./applications/sheets/_module.mjs";
import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs";
+import { DonjonEtCieEmployesDialog } from "./applications/donjon-et-cie-employes-dialog.mjs";
import { DonjonEtCieRolls } from "./donjon-et-cie-rolls.mjs";
import { DonjonEtCieMacros } from "./donjon-et-cie-macros.mjs";
@@ -233,10 +234,62 @@ Hooks.once("init", async () => {
}
});
+// Gestion de la commande /employes
+// Enregistrement officiel via ChatLogV2.CHAT_COMMANDS (comme mgt2-compendium-amiral-denisov)
+function registerEmployesCommand() {
+ const ChatLogV2 = foundry.applications.sidebar.tabs.ChatLog;
+
+ if (ChatLogV2?.CHAT_COMMANDS) {
+ ChatLogV2.CHAT_COMMANDS.employes = {
+ rgx: /^\/employes(?:\s+(.*))?$/i,
+ fn: () => {
+ DonjonEtCieEmployesDialog.open();
+ return false;
+ },
+ };
+ console.log("DNC | Commande /employes enregistrée via ChatLog.CHAT_COMMANDS");
+ } else {
+ console.warn("DNC | ChatLog.CHAT_COMMANDS indisponible, utilisation des hooks de fallback");
+ }
+}
+
+Hooks.once("init", () => {
+ registerEmployesCommand();
+});
+
Hooks.once("ready", () => {
DonjonEtCieMacros.registerSocketListeners();
document.addEventListener("click", onChatActionClick);
void maybeCreateWelcomeMessage();
+
+ // Hooks de fallback pour compatibilité
+ Hooks.on("preCreateChatMessage", (message, data, options, userId) => {
+ const content = data.content?.trim()?.toLowerCase();
+ if (content === "/employes" || content?.startsWith("/employes ")) {
+ DonjonEtCieEmployesDialog.open();
+ return false;
+ }
+ return true;
+ });
+
+ Hooks.on("chatMessage", (...args) => {
+ // Gestion compatibilité v13/v14
+ let message;
+ if (args[0]?.content !== undefined) {
+ message = args[0].content; // v14
+ } else if (typeof args[1] === "string") {
+ message = args[1]; // v13
+ } else {
+ return true;
+ }
+
+ const trimmed = message?.trim()?.toLowerCase();
+ if (trimmed === "/employes" || trimmed?.startsWith("/employes ")) {
+ DonjonEtCieEmployesDialog.open();
+ return false;
+ }
+ return true;
+ });
});
Hooks.on("renderActorDirectory", (app, element) => {
diff --git a/modules/donjon-et-cie-utility.mjs b/modules/donjon-et-cie-utility.mjs
index 8e07df6..9f4a467 100644
--- a/modules/donjon-et-cie-utility.mjs
+++ b/modules/donjon-et-cie-utility.mjs
@@ -36,6 +36,7 @@ export class DonjonEtCieUtility {
"systems/fvtt-donjon-et-cie/templates/dialogs/usage-roll.hbs",
"systems/fvtt-donjon-et-cie/templates/dialogs/mission-pack-dialog.hbs",
"systems/fvtt-donjon-et-cie/templates/dialogs/mission-pack-campaign-dialog.hbs",
+ "systems/fvtt-donjon-et-cie/templates/dialogs/employes-dialog.hbs",
"systems/fvtt-donjon-et-cie/templates/chat/roll-card.hbs",
"systems/fvtt-donjon-et-cie/templates/chat/spell-card.hbs",
"systems/fvtt-donjon-et-cie/templates/chat/chaos-card.hbs",
diff --git a/packs/equipment/000171.log b/packs/equipment/000187.log
similarity index 100%
rename from packs/equipment/000171.log
rename to packs/equipment/000187.log
diff --git a/packs/equipment/CURRENT b/packs/equipment/CURRENT
index b0fe36e..48e7a36 100644
--- a/packs/equipment/CURRENT
+++ b/packs/equipment/CURRENT
@@ -1 +1 @@
-MANIFEST-000169
+MANIFEST-000185
diff --git a/packs/equipment/LOG b/packs/equipment/LOG
index e061088..0255d58 100644
--- a/packs/equipment/LOG
+++ b/packs/equipment/LOG
@@ -1,7 +1,7 @@
-2026/06/01-08:00:33.882857 7f52c53fc6c0 Recovering log #167
-2026/06/01-08:00:33.938200 7f52c53fc6c0 Delete type=3 #165
-2026/06/01-08:00:33.938259 7f52c53fc6c0 Delete type=0 #167
-2026/06/01-08:25:27.517975 7f52c4bfb6c0 Level-0 table #172: started
-2026/06/01-08:25:27.518020 7f52c4bfb6c0 Level-0 table #172: 0 bytes OK
-2026/06/01-08:25:27.527546 7f52c4bfb6c0 Delete type=0 #170
-2026/06/01-08:25:27.538006 7f52c4bfb6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end)
+2026/06/03-17:24:13.769178 7f589dbff6c0 Recovering log #183
+2026/06/03-17:24:13.812146 7f589dbff6c0 Delete type=3 #181
+2026/06/03-17:24:13.812199 7f589dbff6c0 Delete type=0 #183
+2026/06/03-19:19:52.344655 7f584f7fe6c0 Level-0 table #188: started
+2026/06/03-19:19:52.344671 7f584f7fe6c0 Level-0 table #188: 0 bytes OK
+2026/06/03-19:19:52.350896 7f584f7fe6c0 Delete type=0 #186
+2026/06/03-19:19:52.367561 7f584f7fe6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end)
diff --git a/packs/equipment/LOG.old b/packs/equipment/LOG.old
index 18e7ce3..2b4d79c 100644
--- a/packs/equipment/LOG.old
+++ b/packs/equipment/LOG.old
@@ -1,7 +1,7 @@
-2026/05/28-20:45:21.096499 7f3977fff6c0 Recovering log #163
-2026/05/28-20:45:21.107112 7f3977fff6c0 Delete type=3 #161
-2026/05/28-20:45:21.107149 7f3977fff6c0 Delete type=0 #163
-2026/05/28-20:46:40.064748 7f39767fc6c0 Level-0 table #168: started
-2026/05/28-20:46:40.064805 7f39767fc6c0 Level-0 table #168: 0 bytes OK
-2026/05/28-20:46:40.070966 7f39767fc6c0 Delete type=0 #166
-2026/05/28-20:46:40.093671 7f39767fc6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end)
+2026/06/03-14:32:18.707088 7f589cbfd6c0 Recovering log #179
+2026/06/03-14:32:18.746806 7f589cbfd6c0 Delete type=3 #177
+2026/06/03-14:32:18.746858 7f589cbfd6c0 Delete type=0 #179
+2026/06/03-14:50:48.204211 7f584f7fe6c0 Level-0 table #184: started
+2026/06/03-14:50:48.204256 7f584f7fe6c0 Level-0 table #184: 0 bytes OK
+2026/06/03-14:50:48.210307 7f584f7fe6c0 Delete type=0 #182
+2026/06/03-14:50:48.223300 7f584f7fe6c0 Manual compaction at level-0 from '!folders!K9aiFu0dE6UYiXBd' @ 72057594037927935 : 1 .. '!items!zyqLzmpbHxK3jt5q' @ 0 : 0; will stop at (end)
diff --git a/packs/equipment/MANIFEST-000169 b/packs/equipment/MANIFEST-000185
similarity index 72%
rename from packs/equipment/MANIFEST-000169
rename to packs/equipment/MANIFEST-000185
index 5a7432c..2c13d86 100644
Binary files a/packs/equipment/MANIFEST-000169 and b/packs/equipment/MANIFEST-000185 differ
diff --git a/packs/random-tables/000158.log b/packs/random-tables/000174.log
similarity index 100%
rename from packs/random-tables/000158.log
rename to packs/random-tables/000174.log
diff --git a/packs/random-tables/CURRENT b/packs/random-tables/CURRENT
index c16f179..647a5d6 100644
--- a/packs/random-tables/CURRENT
+++ b/packs/random-tables/CURRENT
@@ -1 +1 @@
-MANIFEST-000156
+MANIFEST-000172
diff --git a/packs/random-tables/LOG b/packs/random-tables/LOG
index 1853ffd..74a9484 100644
--- a/packs/random-tables/LOG
+++ b/packs/random-tables/LOG
@@ -1,7 +1,7 @@
-2026/06/01-08:00:33.958934 7f52c6bff6c0 Recovering log #154
-2026/06/01-08:00:34.023819 7f52c6bff6c0 Delete type=3 #152
-2026/06/01-08:00:34.023899 7f52c6bff6c0 Delete type=0 #154
-2026/06/01-08:25:27.615107 7f52c4bfb6c0 Level-0 table #159: started
-2026/06/01-08:25:27.615150 7f52c4bfb6c0 Level-0 table #159: 0 bytes OK
-2026/06/01-08:25:27.624874 7f52c4bfb6c0 Delete type=0 #157
-2026/06/01-08:25:27.643263 7f52c4bfb6c0 Manual compaction at level-0 from '!tables!PPsxQgHwLCQ2gjSW' @ 72057594037927935 : 1 .. '!tables.results!wJZXUo4q5b5vE3Dy.zFTPLMc9zOl5hISV' @ 0 : 0; will stop at (end)
+2026/06/03-17:24:13.815984 7f589cbfd6c0 Recovering log #170
+2026/06/03-17:24:13.870566 7f589cbfd6c0 Delete type=3 #168
+2026/06/03-17:24:13.870643 7f589cbfd6c0 Delete type=0 #170
+2026/06/03-19:19:52.350980 7f584f7fe6c0 Level-0 table #175: started
+2026/06/03-19:19:52.351000 7f584f7fe6c0 Level-0 table #175: 0 bytes OK
+2026/06/03-19:19:52.357007 7f584f7fe6c0 Delete type=0 #173
+2026/06/03-19:19:52.367567 7f584f7fe6c0 Manual compaction at level-0 from '!tables!PPsxQgHwLCQ2gjSW' @ 72057594037927935 : 1 .. '!tables.results!wJZXUo4q5b5vE3Dy.zFTPLMc9zOl5hISV' @ 0 : 0; will stop at (end)
diff --git a/packs/random-tables/LOG.old b/packs/random-tables/LOG.old
index d954c57..ab8bf2c 100644
--- a/packs/random-tables/LOG.old
+++ b/packs/random-tables/LOG.old
@@ -1,7 +1,7 @@
-2026/05/28-20:45:21.112773 7f3976ffd6c0 Recovering log #150
-2026/05/28-20:45:21.122136 7f3976ffd6c0 Delete type=3 #148
-2026/05/28-20:45:21.122181 7f3976ffd6c0 Delete type=0 #150
-2026/05/28-20:46:40.081166 7f39767fc6c0 Level-0 table #155: started
-2026/05/28-20:46:40.081191 7f39767fc6c0 Level-0 table #155: 0 bytes OK
-2026/05/28-20:46:40.087200 7f39767fc6c0 Delete type=0 #153
-2026/05/28-20:46:40.093692 7f39767fc6c0 Manual compaction at level-0 from '!tables!PPsxQgHwLCQ2gjSW' @ 72057594037927935 : 1 .. '!tables.results!wJZXUo4q5b5vE3Dy.zFTPLMc9zOl5hISV' @ 0 : 0; will stop at (end)
+2026/06/03-14:32:18.750680 7f584ffff6c0 Recovering log #166
+2026/06/03-14:32:18.814542 7f584ffff6c0 Delete type=3 #164
+2026/06/03-14:32:18.814578 7f584ffff6c0 Delete type=0 #166
+2026/06/03-14:50:48.210430 7f584f7fe6c0 Level-0 table #171: started
+2026/06/03-14:50:48.210463 7f584f7fe6c0 Level-0 table #171: 0 bytes OK
+2026/06/03-14:50:48.216940 7f584f7fe6c0 Delete type=0 #169
+2026/06/03-14:50:48.223313 7f584f7fe6c0 Manual compaction at level-0 from '!tables!PPsxQgHwLCQ2gjSW' @ 72057594037927935 : 1 .. '!tables.results!wJZXUo4q5b5vE3Dy.zFTPLMc9zOl5hISV' @ 0 : 0; will stop at (end)
diff --git a/packs/random-tables/MANIFEST-000156 b/packs/random-tables/MANIFEST-000172
similarity index 84%
rename from packs/random-tables/MANIFEST-000156
rename to packs/random-tables/MANIFEST-000172
index 7d86353..2d57491 100644
Binary files a/packs/random-tables/MANIFEST-000156 and b/packs/random-tables/MANIFEST-000172 differ
diff --git a/packs/system-help/000093.log b/packs/system-help/000008.log
similarity index 100%
rename from packs/system-help/000093.log
rename to packs/system-help/000008.log
diff --git a/packs/system-help/000010.ldb b/packs/system-help/000010.ldb
index 109c785..fe26f69 100644
Binary files a/packs/system-help/000010.ldb and b/packs/system-help/000010.ldb differ
diff --git a/packs/system-help/CURRENT b/packs/system-help/CURRENT
index 00f4669..1a84852 100644
--- a/packs/system-help/CURRENT
+++ b/packs/system-help/CURRENT
@@ -1 +1 @@
-MANIFEST-000091
+MANIFEST-000002
diff --git a/packs/system-help/LOG b/packs/system-help/LOG
index 5a706e2..b58e3e5 100644
--- a/packs/system-help/LOG
+++ b/packs/system-help/LOG
@@ -1,8 +1,5 @@
-2026/06/01-08:00:34.033489 7f52c5bfd6c0 Recovering log #89
-2026/06/01-08:00:34.082405 7f52c5bfd6c0 Delete type=3 #87
-2026/06/01-08:00:34.082456 7f52c5bfd6c0 Delete type=0 #89
-2026/06/01-08:25:27.527672 7f52c4bfb6c0 Level-0 table #94: started
-2026/06/01-08:25:27.527708 7f52c4bfb6c0 Level-0 table #94: 0 bytes OK
-2026/06/01-08:25:27.537856 7f52c4bfb6c0 Delete type=0 #92
-2026/06/01-08:25:27.538199 7f52c4bfb6c0 Manual compaction at level-0 from '!journal!69Da9YvF9BfOV7oK' @ 72057594037927935 : 1 .. '!journal.pages!69Da9YvF9BfOV7oK.XM0eLkgKXPyskV65' @ 0 : 0; will stop at (end)
-2026/06/01-08:25:27.566799 7f52c4bfb6c0 Manual compaction at level-1 from '!journal!69Da9YvF9BfOV7oK' @ 72057594037927935 : 1 .. '!journal.pages!69Da9YvF9BfOV7oK.XM0eLkgKXPyskV65' @ 0 : 0; will stop at (end)
+2026/06/03-19:15:07.672519 7f0e893fd6c0 Delete type=3 #1
+2026/06/03-19:15:07.674981 7f0e6bfff6c0 Level-0 table #5: started
+2026/06/03-19:15:07.678129 7f0e6bfff6c0 Level-0 table #5: 3056 bytes OK
+2026/06/03-19:15:07.685023 7f0e6bfff6c0 Delete type=0 #3
+2026/06/03-19:15:07.685556 7f0e6bfff6c0 Manual compaction at level-0 from '!journal!69Da9YvF9BfOV7oK' @ 72057594037927935 : 1 .. '!journal.pages!69Da9YvF9BfOV7oK.XM0eLkgKXPyskV65' @ 0 : 0; will stop at (end)
diff --git a/packs/system-help/LOG.old b/packs/system-help/LOG.old
deleted file mode 100644
index 2f56803..0000000
--- a/packs/system-help/LOG.old
+++ /dev/null
@@ -1,8 +0,0 @@
-2026/05/28-20:45:21.125760 7f39777fe6c0 Recovering log #85
-2026/05/28-20:45:21.135844 7f39777fe6c0 Delete type=3 #83
-2026/05/28-20:45:21.135894 7f39777fe6c0 Delete type=0 #85
-2026/05/28-20:46:40.071060 7f39767fc6c0 Level-0 table #90: started
-2026/05/28-20:46:40.071086 7f39767fc6c0 Level-0 table #90: 0 bytes OK
-2026/05/28-20:46:40.081072 7f39767fc6c0 Delete type=0 #88
-2026/05/28-20:46:40.093682 7f39767fc6c0 Manual compaction at level-0 from '!journal!69Da9YvF9BfOV7oK' @ 72057594037927935 : 1 .. '!journal.pages!69Da9YvF9BfOV7oK.XM0eLkgKXPyskV65' @ 0 : 0; will stop at (end)
-2026/05/28-20:46:40.093703 7f39767fc6c0 Manual compaction at level-1 from '!journal!69Da9YvF9BfOV7oK' @ 72057594037927935 : 1 .. '!journal.pages!69Da9YvF9BfOV7oK.XM0eLkgKXPyskV65' @ 0 : 0; will stop at (end)
diff --git a/packs/system-help/MANIFEST-000091 b/packs/system-help/MANIFEST-000091
deleted file mode 100644
index 4f42f03..0000000
Binary files a/packs/system-help/MANIFEST-000091 and /dev/null differ
diff --git a/styles/donjon-et-cie.css b/styles/donjon-et-cie.css
index bbc8e67..781d087 100644
--- a/styles/donjon-et-cie.css
+++ b/styles/donjon-et-cie.css
@@ -271,6 +271,13 @@
grid-template-columns: 1fr;
gap: 0.75rem;
}
+.dnc-actor-sheet .hp-field .counter-field input[type="number"] {
+ max-width: 60px;
+ text-align: center;
+}
+.dnc-actor-sheet .hp-field .counter-field {
+ gap: 0.25rem;
+}
.dnc-actor-sheet .profile-card-wide {
width: 100%;
}
@@ -889,6 +896,21 @@
padding: 0.35rem 0.65rem;
min-height: 1.75rem;
font-size: 0.82rem;
+ flex: 0 0 auto;
+}
+.dnc-chat-card-damage .chat-actions-inline {
+ flex-wrap: nowrap;
+ gap: 0.25rem;
+}
+.dnc-chat-card-damage .chat-actions-inline .chat-action-button {
+ padding: 0.3rem 0.55rem;
+ min-height: 1.65rem;
+ font-size: 0.78rem;
+ flex: 0 0 auto;
+}
+.dnc-chat-card-damage .chat-actions-inline .chat-action-button i {
+ font-size: 0.85rem;
+ margin-right: 0.2rem;
}
.chat-control {
display: grid;
@@ -1090,5 +1112,325 @@
.initiative-sync p {
margin: 0.4rem 0 0;
}
+.dnc-employes-dialog {
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+ padding: 1rem;
+ min-width: 640px;
+ max-width: 90vw;
+ max-height: 90vh;
+ overflow-y: auto;
+}
+.dnc-employes-dialog .sheet-header {
+ display: block;
+ grid-template-columns: none;
+ gap: normal;
+}
+.dnc-employes-dialog .sheet-header h1 {
+ font-family: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif;
+ font-size: 1.4rem;
+ color: #8b2e17;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ margin: 0;
+ text-align: center;
+}
+.dnc-employes-dialog-wrapper .dialog-content,
+.dnc-employes-dialog-wrapper .window-content {
+ padding: 0;
+}
+.dnc-root-tabs {
+ display: flex;
+ justify-content: center;
+ gap: 0.75rem;
+ border-bottom: 2px solid #5b4634;
+ padding-bottom: 0.4rem;
+}
+.dnc-root-tab {
+ border: 1px solid rgba(91, 70, 52, 0.55);
+ border-radius: 10px 10px 0 0;
+ background: #e2d0b1;
+ color: #221b18;
+ font-size: 0.9rem;
+ font-weight: 700;
+ padding: 0.4rem 1rem;
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+.dnc-root-tab i {
+ font-size: 0.9rem;
+}
+.dnc-root-tab.active {
+ background: #8b2e17;
+ border-color: #561d0e;
+ color: #fff;
+ box-shadow: 0 -3px 8px rgba(0, 0, 0, 0.2);
+ position: relative;
+ bottom: -2px;
+}
+.dnc-root-tab:hover:not(.active) {
+ background: #e2d0b1;
+ border-color: rgba(91, 70, 52, 0.75);
+}
+.dnc-root-panels {
+ position: relative;
+}
+.dnc-root-panel {
+ display: none;
+}
+.dnc-root-panel.active {
+ display: block;
+}
+.dnc-pc-tabs {
+ display: flex;
+ gap: 0.25rem;
+ flex-wrap: wrap;
+ padding: 0.4rem 0;
+ border-bottom: 1px solid rgba(91, 70, 52, 0.4);
+ margin-bottom: 0.75rem;
+}
+.dnc-pc-tab {
+ border: 1px solid rgba(91, 70, 52, 0.45);
+ border-radius: 6px;
+ background: rgba(255, 255, 255, 0.5);
+ color: #6d5a4f;
+ font-size: 0.82rem;
+ font-weight: 600;
+ padding: 0.25rem 0.75rem;
+ cursor: pointer;
+ transition: all 0.15s ease;
+ white-space: nowrap;
+}
+.dnc-pc-tab.active {
+ background: #8b2e17;
+ border-color: #5f2010;
+ color: #fff;
+ font-weight: 700;
+}
+.dnc-pc-tab:hover:not(.active) {
+ background: #e2d0b1;
+ color: #221b18;
+}
+.dnc-pc-panels {
+ position: relative;
+}
+.dnc-pc-panel,
+.dnc-client-panel {
+ display: none;
+}
+.dnc-pc-panel.active,
+.dnc-client-panel.active {
+ display: block;
+}
+.dnc-compact-section {
+ padding: 0.75rem;
+ margin-bottom: 0.4rem;
+ border: 1px solid rgba(91, 70, 52, 0.4);
+ border-radius: 10px;
+ background: #f1e5d0;
+}
+.dnc-compact-section + .dnc-compact-section {
+ margin-top: 0.4rem;
+}
+.dnc-compact-section-title {
+ font-family: "IM Fell English SC", "Palatino Linotype", "Book Antiqua", Palatino, serif;
+ font-size: 0.9rem;
+ font-weight: 700;
+ color: #8b2e17;
+ text-transform: uppercase;
+ letter-spacing: 0.05em;
+ margin: 0 0 0.4rem;
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+ border-bottom: 1px solid rgba(91, 70, 52, 0.35);
+ padding-bottom: 0.25rem;
+}
+.dnc-compact-section-title i {
+ font-size: 0.85rem;
+}
+.dnc-compact-concept {
+ font-size: 0.8rem;
+ color: #6d5a4f;
+ font-style: italic;
+ margin: 0.25rem 0 0;
+}
+.dnc-compact-carac-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.4rem;
+}
+.dnc-carac-stat {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-width: 48px;
+ background: rgba(255, 255, 255, 0.6);
+ border: 1px solid rgba(91, 70, 52, 0.4);
+ border-radius: 6px;
+ padding: 0.25rem 0.4rem;
+}
+.dnc-carac-label {
+ font-size: 0.68rem;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: #6d5a4f;
+ font-weight: 700;
+}
+.dnc-carac-value {
+ font-size: 1rem;
+ font-weight: 700;
+ color: #221b18;
+}
+.dnc-carac-value.warning {
+ color: #842c2c;
+}
+.dnc-compact-combat-stats {
+ display: flex;
+ gap: 0.4rem;
+ flex-wrap: wrap;
+ margin-bottom: 0.4rem;
+}
+.dnc-combat-badge {
+ font-size: 0.82rem;
+ padding: 0.25rem 0.4rem;
+ background: #e2d0b1;
+ border: 1px solid rgba(91, 70, 52, 0.4);
+ border-radius: 6px;
+ color: #221b18;
+}
+.dnc-compact-item-list {
+ margin-top: 0.4rem;
+}
+.dnc-compact-subhead {
+ font-size: 0.78rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: #6d5a4f;
+ margin: 0 0 0.25rem;
+ display: flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+.dnc-compact-subhead i {
+ color: #8b2e17;
+}
+.dnc-compact-item {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 0.25rem;
+ padding: 0.25rem 0;
+ border-top: 1px dashed rgba(91, 70, 52, 0.35);
+ font-size: 0.85rem;
+}
+.dnc-compact-item:first-of-type {
+ border-top: 0;
+}
+.dnc-compact-item-name {
+ font-weight: 600;
+ color: #221b18;
+}
+.dnc-compact-item-detail {
+ font-size: 0.78rem;
+ color: #6d5a4f;
+ background: rgba(255, 255, 255, 0.5);
+ border-radius: 6px;
+ padding: 0.05rem 0.3rem;
+}
+.dnc-compact-magic-stats {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.4rem;
+ margin-bottom: 0.4rem;
+}
+.item-meta {
+ border-radius: 999px;
+ background: #e2d0b1;
+ color: #221b18;
+ font-size: 0.75rem;
+ padding: 0.1rem 0.5rem;
+}
+.client-summary {
+ margin: 0.4rem 0 0;
+ color: #221b18;
+ font-size: 0.9rem;
+ line-height: 1.45;
+}
+.client-description {
+ margin-top: 0.75rem;
+ padding-top: 0.75rem;
+ border-top: 1px solid rgba(91, 70, 52, 0.45);
+}
+.client-description p {
+ margin: 0;
+ color: #6d5a4f;
+ font-size: 0.85rem;
+ line-height: 1.5;
+}
+.dnc-roll-btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+ padding: 0.1rem 0.5rem;
+ font-size: 0.78rem;
+ font-family: "Signika", sans-serif;
+ color: #221b18;
+ background: #e2d0b1;
+ border: 1px solid rgba(91, 70, 52, 0.6);
+ border-radius: 6px;
+ cursor: pointer;
+ transition: background 0.15s;
+}
+.dnc-roll-btn i {
+ font-size: 0.7rem;
+ color: #8b2e17;
+}
+.dnc-roll-btn:hover {
+ background: #8b2e17;
+ color: #fff;
+ border-color: #8b2e17;
+}
+.dnc-roll-btn:hover i {
+ color: #fff;
+}
+.dnc-carac-rollable {
+ cursor: pointer;
+ transition: background 0.15s;
+ border-radius: 6px;
+ position: relative;
+}
+.dnc-carac-rollable:hover {
+ background: rgba(139, 46, 23, 0.18);
+}
+.dnc-carac-rollable:hover .dnc-carac-label {
+ color: #8b2e17;
+}
+.dnc-compact-section-title {
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+}
+.dnc-compact-section-title .dnc-open-sheet-btn {
+ margin-left: auto;
+ background: none;
+ border: 1px solid rgba(91, 70, 52, 0.5);
+ border-radius: 6px;
+ color: #6d5a4f;
+ cursor: pointer;
+ font-size: 0.7rem;
+ padding: 0.1rem 0.35rem;
+ line-height: 1;
+ transition: color 0.15s, border-color 0.15s;
+}
+.dnc-compact-section-title .dnc-open-sheet-btn:hover {
+ color: #8b2e17;
+ border-color: #8b2e17;
+}
/*# sourceMappingURL=donjon-et-cie.css.map */
/*# sourceMappingURL=donjon-et-cie.css.map */
diff --git a/styles/donjon-et-cie.css.map b/styles/donjon-et-cie.css.map
index 6462851..581f3f3 100644
--- a/styles/donjon-et-cie.css.map
+++ b/styles/donjon-et-cie.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../variables.less","../base.less","../components.less","../actor-sheet.less","../item-sheet.less","../dialogs.less","../chat.less"],"names":[],"mappings":"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","file":"donjon-et-cie.css","sourcesContent":[]}
\ No newline at end of file
+{"version":3,"sources":["../variables.less","../base.less","../components.less","../actor-sheet.less","../item-sheet.less","../dialogs.less","../chat.less","../employes-dialog.less"],"names":[],"mappings":"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","file":"donjon-et-cie.css","sourcesContent":[]}
\ No newline at end of file
diff --git a/templates/dialogs/employes-dialog.hbs b/templates/dialogs/employes-dialog.hbs
new file mode 100644
index 0000000..cc1a39e
--- /dev/null
+++ b/templates/dialogs/employes-dialog.hbs
@@ -0,0 +1,366 @@
+
+
+
+
+
+
+
+
+
+
+ {{#if pcs.length}}
+
+
+
+
+
+ {{#each pcs}}
+
+
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabCharacteristics"}}
+
+
+
+
+ {{localize "DNC.UI.Pv"}}
+ {{this.pvValue}}/{{this.pvMax}}
+
+
+ {{localize "DNC.UI.Dv"}}
+ {{this.dv}}
+
+ {{#each ../characteristicKeys}}
+
+ {{this.short}}
+ {{lookup .. this.key}}
+
+ {{/each}}
+
+ {{#if this.concept}}
+ {{this.concept}}
+ {{/if}}
+
+
+
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabCombat"}}
+
+
+ ⚔️ ×{{this.meleeAttacks}} {{localize "DNC.UI.MeleeAttacks"}}
+ 🏹 ×{{this.rangedAttacks}} {{localize "DNC.UI.RangedAttacks"}}
+
+
+ {{#if this.weapons.length}}
+
+
{{localize "DNC.UI.Weapons"}}
+ {{#each this.weapons}}
+
+ {{this.name}}
+ {{this.categoryLabel}}
+ {{this.handsLabel}}
+ {{localize "DNC.UI.Damage"}} {{this.damage}}
+ {{#if this.ammunition}}{{localize "DNC.UI.Ammunition"}} {{this.ammunition}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+
+ {{#if this.armors.length}}
+
+
{{localize "DNC.UI.Armors"}}
+ {{#each this.armors}}
+
+ {{this.name}}
+ {{this.protectionDie}}
+ {{#if this.remainingProtection}}ARM {{this.remainingProtection}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+
+
+
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabMagie"}}
+
+
+
+ {{localize "DNC.UI.Rank"}}
+ {{this.magicRank}}
+
+
+ {{localize "DNC.UI.Focus"}}
+ {{this.focusDisplay}}
+
+
+ {{localize "DNC.UI.Chaos"}}
+ {{this.chaosDisplay}}
+
+
+
+ {{#if this.spells.length}}
+
+
Sortilèges
+ {{#each this.spells}}
+
+ {{this.name}}
+ {{#if this.usageLabel}}{{this.usageLabel}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+
+ {{#if this.capacities.length}}
+
+
Capacités
+ {{#each this.capacities}}
+
+ {{this.name}}
+ {{#if this.usageLabel}}{{this.usageLabel}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+
+
+ {{/each}}
+
+
+ {{else}}
+
{{localize "DNC.Empty.NoEmployees"}}
+ {{/if}}
+
+
+
+
+ {{#if clients.length}}
+
+
+
+
+
+ {{#each clients}}
+
+
+
+
+
+ {{this.name}}
+
+
+
+ {{#if this.species}}
Espèce{{this.species}}
{{/if}}
+ {{#if this.category}}
Catégorie{{this.category}}
{{/if}}
+ {{#if this.role}}
Rôle{{this.role}}
{{/if}}
+
+ {{localize "DNC.UI.Pv"}}
+ {{this.pvValue}}/{{this.pvMax}}
+
+
+ {{localize "DNC.UI.Dv"}}
+ {{this.dv}}
+
+ {{#if this.armureDelta}}
+
+ Armure
+ Δ{{this.armureDelta}}
+
+ {{/if}}
+ {{#if this.courageDelta}}
+
+ Courage
+ Δ{{this.courageDelta}}
+
+ {{/if}}
+
+ {{#if this.summary}}{{this.summary}}
{{/if}}
+
+
+
+ {{#if this.attaques.length}}
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabCombat"}}
+
+
+ {{#each this.attaques}}
+
+ {{this.nom}}
+
+ {{#if this.notes}}{{this.notes}}{{/if}}
+
+ {{/each}}
+
+ {{#if this.weapons.length}}
+
+
{{localize "DNC.UI.Weapons"}}
+ {{#each this.weapons}}
+
+ {{this.name}}
+ {{this.categoryLabel}}
+ {{this.damage}}
+
+ {{/each}}
+
+ {{/if}}
+
+ {{else if this.weapons.length}}
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabCombat"}}
+
+
+ {{#each this.weapons}}
+
+ {{this.name}}
+ {{this.categoryLabel}}
+ {{this.damage}}
+
+ {{/each}}
+
+
+ {{/if}}
+
+
+ {{#if this.hasMagie}}
+
+
+
+ {{localize "DNC.Dialog.EmployeesTabMagie"}}
+
+ {{#if this.spells.length}}
+
+
Sortilèges
+ {{#each this.spells}}
+
+ {{this.name}}
+ {{#if this.usageLabel}}{{this.usageLabel}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+ {{#if this.capacities.length}}
+
+
Capacités
+ {{#each this.capacities}}
+
+ {{this.name}}
+ {{#if this.usageLabel}}{{this.usageLabel}}{{/if}}
+
+ {{/each}}
+
+ {{/if}}
+ {{#if this.pouvoirsSpeciaux}}
+ {{{this.pouvoirsSpeciaux}}}
+ {{/if}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+ {{else}}
+
{{localize "DNC.Empty.NoClients"}}
+ {{/if}}
+
+
+
+