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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${item.name}
Cout :${cout}
Effet :${effet}
Description :${descHtml}
Notes :${notes}
\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${item.name}${carac}${cout} PV
Dégats :${degats}Portée :${portee}Durée :${duree}Diff. :${difficulte}
Effet :${effet}
Notes :${notes}
Description :${descHtml}
\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 Focus\n

${focus}

\n
\n
\n Focus restant\n

${ptsMagie}

\n
\n
\n\n
\n

Sorts

\n
${magieHtml}
\n
\n\n
\n

Capacités

\n
${capacitesHtml}
\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${item.name}${typeArme}${carac}${mains}
Dégats :${degats}Portée :${portee}Munitions :${munitions}
Notes :${notes}
Description :${descHtml}
\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${item.name}
Protection Δ :${protection}Encombrement :${encombrement}
Protection restante :${protectionRestante}
Notes :${notes}
Description :${descHtml}
\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 DV\n

${dv}

\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

Armes

\n
${armesHtml}
\n
\n\n
\n

Armures

\n
${armuresHtml}
\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 \n \n \n \n \n \n \n \n \n \n \n \n \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 \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n}\n\ncontent += `\n \n
Nom / ConceptPVDVFORDEXCONINTSAGCHASuspicionAvertissementsMissions réussiesTraits
\n ${name}
\n ${concept}\n
\n ${pvVal} / ${pvMax}\n ${dv}${force}${dex}${con}${int}${sag}${cha}${missionsReussies} 0 ? '#842c2c' : '#221b18'};\">${suspicion} 0 ? '#842c2c' : '#221b18'};\">${avertissements}${traits}
\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

Attaques

\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

SORTILEGES

\n `;\n \n sorts.forEach(sort => {\n sortsHtml += `\n
\n
\n Nom\n

${sort.name}

\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

CAPACITES

\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 Espèce\n

${espece}

\n
\n
\n Rôle\n

${role}

\n
\n
\n DV\n

${dv}

\n
\n
\n PV\n

${pvVal} / ${pvMax}

\n
\n
\n Courage\n

Δ${courage}

\n
\n
\n
\n
\n resume\n

${resume}

\n
\n
\n\n ${attaquesHtml}\n\n
\n

Protection

\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 @@ +
+
+

{{localize "DNC.Dialog.EmployeesTitle"}}

+
+ + + + +
+ + +
+ {{#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}} +
+ +
+