Compare commits

...
Author SHA1 Message Date
VincentVk 37a33691ff 14.0.1 - Les imprécisions de Tétragor
Release Creation / build (release) Failing after 14s
2026-07-21 22:45:47 +02:00
VincentVk ce7271b569 Fix: ouverture des items
Fix appel methode sur objet SANS_COMPETENCE, qui n'etait pas
un RdDItem / RdDItemCompetence
2026-07-21 22:28:06 +02:00
VincentVk 5dbd7c3784 Fix Description aléatoire 2026-07-17 03:07:30 +02:00
fabres a55904742b fix(encombrement): exclure le poids propre des conteneurs du total
- Les conteneurs n'ajoutent plus leur propre encombrement au total
  (seuls les objets qu'ils contiennent sont comptés)
- Ajout indicateur visuel quand une compétence atteint son niveau d'archétype
  (bordure dorée + icône ✓)
2026-07-14 22:08:32 +02:00
fabres ded584ccc8 feat(inventaire): tri par quantité, dialogues de gestion, duplication cachée des livres lus
Release Creation / build (release) Successful in 1m45s
- Remplace le tri 'Manuel' par un tri 'Quantité' dans l'inventaire
- Supprime _onDrop / _onSortItem (obsolètes sans tri manuel)
- Nouveau dialogue 'Gérer ses deniers' (ApplicationV2)
- Nouveau dialogue 'Gérer ses potions' (ApplicationV2)
- Boutons herbes/ingrédients/potions/deniers déplacés dans l'onglet Équipement
- Dialogues herbes/ingrédients harmonisés (alterne-list, contrôles +/-)
- Ajout titre 'Livres lus' et en-têtes alignés
- Ajout estCopieLue au schéma livre (template.json)
- creerCopieLue() extrait dans base-actor.js
- Filtre estCopieLue dans prepareInventaire/buildContenuConteneur
2026-07-14 18:56:38 +02:00
fabres ac10de85cf Gestion des livres lus et des herbes 2026-07-14 08:28:44 +02:00
VincentVk b9fec47311 Correction du but des recettes alchimiques 2026-07-14 01:21:52 +02:00
VincentVk 7d5903aa84 Support des tâches à plusieurs
Release Creation / build (release) Successful in 1m50s
2026-07-11 16:12:15 +02:00
VincentVk 66a8eb0e8a Images de la barre de menu droite 2026-07-11 01:16:10 +02:00
VincentVk 6636ebb77c Améliorations des titres des fenêtres de jets 2026-07-10 23:37:42 +02:00
VincentVk 89207df01d Correction d'updates non affichés 2026-07-10 20:34:16 +02:00
VincentVk 000e16f8b7 Amélioration sur les voies de Draconic
- Ne pas proposer les voies de Draconic à -11 pour lire un signe
  draconic ou lancer un sort
- Trier les voies par ordre décroissant pour le sorts à voies multiples
- Les rencontres et les maîtrises dans les TMR peuvent être vaincues
  sans draconic si les voies sont négatives
2026-07-10 19:26:34 +02:00
VincentVk bbbc817e5f Pas de lecture avec Draconic à -11 2026-07-10 18:13:29 +02:00
VincentVk b89dd3845a Visibilité des jets /rdd 2026-07-10 18:07:08 +02:00
VincentVk 6c239b8ed9 Suppression de TMR "Inconnu" pour signes 2026-07-10 16:50:41 +02:00
86 changed files with 1536 additions and 692 deletions
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

-449
View File
@@ -1,449 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512.07 512" style="enable-background:new 0 0 512.07 512;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;}
.st2{fill:#DCDCDC;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<g id="icon_x5F_sidebar_x5F_chat" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M180,480.93c14-15.25,27.95-29.3,40.56-44.47c14.18-17.05,23.54-36.69,26.34-59.05
c1.66-13.29-0.67-25.98-5.04-38.48c-1.8-5.15-5.7-5.52-10.23-5.78c-18.92-1.08-37.99-1.21-56.71-3.83
c-40-5.59-76.63-19.99-107.18-47.16c-36.18-32.19-46.99-77.73-26.93-122.29c15.37-34.14,40.96-59.17,71.93-78.94
c47.68-30.44,100.22-45.65,156.55-49.23c41.61-2.64,81.81,2.91,120.81,17.42c26.15,9.73,48.71,24.87,66.74,46.2
c29.1,34.42,32.23,80.62,8.86,120.58c-23.61,40.37-58.93,67.06-100.58,86.28c-10.17,4.7-20.81,8.38-31.3,12.36
c-4.3,1.63-6.47,4.24-6.8,9.02c-2.04,29.43-14.23,54.78-32.77,77.05c-29.18,35.06-66,59.86-107.6,77.9
C184.67,479.39,182.56,480.01,180,480.93z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_rolltable">
<g>
<g>
<g>
<path class="st2" d="M255.1,55.46c6.7,2.37,12.64,3.53,17.63,6.38c47.83,27.36,95.49,55,143.19,82.58
c1.76,1.02,3.5,2.14,5.06,3.43c4.67,3.85,4.73,8.08-0.19,11.57c-4.48,3.18-9.3,5.9-14.07,8.66
c-43.81,25.34-87.68,50.58-131.43,76.01c-12.79,7.43-25.19,8.02-38.18,0.44c-47.26-27.53-94.66-54.81-141.95-82.29
c-11.67-6.78-11.5-10.86,0.17-17.61c45.93-26.57,91.78-53.27,137.82-79.64C240.07,61.03,247.84,58.57,255.1,55.46z
M256.6,177.07c8.18-2.74,15.83-4.76,23.02-7.85c6.75-2.9,11.12-8.42,11.32-16.12c0.2-7.86-4.55-13.18-10.98-16.36
c-16.34-8.07-32.92-8.99-48.94,0.93c-13.18,8.17-13.33,23.46,0.28,30.9C238.94,172.75,248.01,174.3,256.6,177.07z
M139.44,174.49c10.51,0.36,20.31-1.78,28.43-8.85c7.92-6.9,8.07-17.96,0.6-25.36c-13.09-12.97-44.39-13.07-57.62-0.19
c-8.94,8.7-8.15,19.73,2.02,27.08C120.8,172.91,129.82,174.83,139.44,174.49z M371.05,174.5c13.13,0.01,20.45-1.93,27.72-7.04
c11.22-7.88,11.04-21.8-0.38-29.44c-14.58-9.76-37.05-9.78-51.54-0.06c-11.6,7.78-11.75,21.98-0.23,29.88
C354.29,173.1,362.88,175.12,371.05,174.5z M257.2,200.1c-10.74-0.21-20.43,1.8-28.51,8.53c-9.63,8.02-9.2,19.91,0.7,27.6
c13.81,10.71,40.59,10.4,54.05-0.63c9.82-8.05,9.29-21.21-1.19-28.54C274.59,201.7,265.94,199.86,257.2,200.1z M255.77,105.95
c10.86-0.08,20.49-2.25,28.35-9.28c8.51-7.61,8.52-17.75,0.3-25.54c-13.52-12.81-43.78-12.59-57.1,0.4
c-7.45,7.27-7.44,17.61,0.19,24.78C235.62,103.93,245.78,105.61,255.77,105.95z"/>
</g>
<g>
<path class="st2" d="M73.56,270.29c-0.01-23.47-0.01-46.95,0-70.42c0-2.24-0.04-4.5,0.09-6.73c0.55-9.08,4.45-11.43,12.3-7.03
c14.77,8.29,29.43,16.78,44.1,25.25c31.29,18.06,62.49,36.27,93.87,54.16c13.59,7.75,19.9,19.03,19.84,34.61
c-0.18,47.56-0.07,95.12-0.07,142.68c0,1.02,0,2.04-0.03,3.06c-0.37,10.88-4.46,13.26-13.91,7.81
c-46.51-26.8-93.02-53.6-139.43-80.56c-11.08-6.44-16.76-16.38-16.77-29.35C73.56,319.28,73.57,294.79,73.56,270.29z
M238.89,301.12c-1.04-15.22-9.94-29.1-25.87-37.67c-12.78-6.88-25.53,0.97-25.17,15.07c0.45,18,8.76,32.2,24.15,41.47
C226.27,328.58,238.87,320.93,238.89,301.12z M238.88,424.25c-0.03-14.84-11.77-33.85-24.91-40.35
c-13.82-6.83-27.24,1.36-26.24,16.4c1.14,17.22,9.44,30.68,24.03,39.63C226.22,448.8,238.92,441.17,238.88,424.25z
M78.36,336.56c-0.07,16.35,12.18,35.46,26.64,41.57c13.6,5.74,24.53-1.52,24.14-16.28c-0.47-17.75-9.44-30.82-23.63-40.54
c-5.85-4.01-12.62-5.05-19.12-1.43C80,323.43,78.2,329.62,78.36,336.56z M78.16,216.83c1.81,17.43,9.33,31.66,25.03,40.21
c13.84,7.55,26.4-0.25,25.96-15.46c-0.51-17.56-9.43-30.51-23.26-40.31c-5.78-4.1-12.64-5.27-19.16-1.76
C80.09,203.09,78.12,209.49,78.16,216.83z"/>
</g>
<g>
<path class="st2" d="M438.48,269.36c0,23.88-0.09,47.77,0.04,71.65c0.08,14.95-5.66,26.05-19.04,33.69
c-45.56,26.01-90.87,52.43-136.3,78.66c-1.93,1.11-4.02,2.03-6.14,2.72c-4.13,1.36-6.9-0.45-7.9-4.42
c-0.69-2.73-0.78-5.65-0.78-8.49c-0.04-48.18,0.04-96.35-0.07-144.53c-0.03-14.73,6.49-25.32,19.04-32.56
c44.18-25.53,88.36-51.07,132.54-76.6c1.24-0.71,2.5-1.39,3.75-2.08c11.32-6.2,14.8-4.14,14.84,9.08
C438.53,220.78,438.48,245.07,438.48,269.36z M273.14,421.22c0.05,19.9,12.39,27.34,26.79,18.9
c14.92-8.75,23.03-22.32,24.24-39.46c1.09-15.44-12.22-24.3-25.6-16.81C282.99,392.57,274.73,406.59,273.14,421.22z
M273.19,300.58c-0.25,19.57,10.43,26.62,25.43,19.95c14.02-6.23,26.59-26.94,25.75-42.41c-0.77-14.26-13.04-21.55-25.73-14.51
C283.1,272.22,275.12,286.19,273.19,300.58z M378.55,373.28c0.05-21.14-11.77-28.95-25.77-20.61
c-15.26,9.09-24.61,22.51-24.5,41.07c0.1,15.52,11.79,22.77,25.39,15.25C369.25,400.38,377.63,386.78,378.55,373.28z
M433.65,340.47c0.1-20.18-12.26-27.99-26.62-19.24c-14.51,8.85-23.33,22.09-24,39.66c-0.62,16.14,11.34,23.92,25.59,16.37
C424.57,368.82,431.83,354.54,433.65,340.47z M378.56,249.19c0.11-16.72-10.87-24.46-24.88-17.53
c-15.12,7.48-26.59,27.54-25.35,44.37c0.88,11.94,10.06,18.07,21.51,14.37C365.3,285.38,378.44,266.54,378.56,249.19z
M433.67,217.08c0.11-15.23-9.9-22.9-23.27-17.86c-16.2,6.12-29.92,29.74-27.12,46.71c1.73,10.53,10.4,15.95,20.67,12.93
C419.6,254.24,433.54,234.65,433.67,217.08z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_actor" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M194.72,240.85c-18.71-10.84-37.43-21.65-56.1-32.56c-4.38-2.56-3.72-6.78-3.09-10.93
c4.53-29.87,16.49-56.68,33.54-81.37c22.53-32.64,51.22-59.09,83.04-82.38c1.94-1.42,4.08-2.55,6.44-4.01
c2.95,1.91,5.76,3.52,8.35,5.44c34.2,25.36,64.61,54.39,87.21,90.87c13.92,22.47,23.34,46.63,27.11,72.93
c0.74,5.19-0.6,8.42-5.19,11.05c-17.12,9.83-34.08,19.93-51.1,29.92c-0.35-0.42-0.7-0.84-1.06-1.26
c7.2-7.59,13.9-15.74,21.74-22.61c6.97-6.11,8.08-12.73,6.54-21.27c-5.03-27.96-18.41-51.68-36.13-73.32
c-14.99-18.3-32.86-33.43-51.91-47.27c-3.26-2.37-6.29-3.56-10-0.89c-28.94,20.8-54.74,44.63-72.73,75.88
c-9.25,16.07-15.58,33.21-17.65,51.81c-0.5,4.49,0.65,7.78,3.76,10.99c9.23,9.52,18.23,19.25,27.32,28.9L194.72,240.85z"/>
</g>
<g>
<path class="st2" d="M168.55,345.65c-12.76,3.01-23.81-2.22-35.94-5.83c-3.63,12.02-1.15,22.71,4.28,33.16
c-0.52,0.49-1.04,0.98-1.56,1.47c-7.28-3.95-14.57-7.89-22.66-12.28c-0.94,40.71,5.85,79.96,12.76,120.22
c-9.73,0-18.21,0-28.31,0c0-4.71-0.17-8.65,0.03-12.57c2.77-54.5,0.73-108.5-16.69-160.88c-1.7-5.12-1.02-8.86,2.98-12.56
c15.25-14.13,30.3-28.49,45.51-42.67c1.86-1.73,4.21-2.92,7.2-4.95c12.66,31.79,36.38,51.55,65.92,65.71
c-23.56,4.18-43.99-5.23-64.98-14.12C142.45,319.03,153.45,333.5,168.55,345.65z"/>
</g>
<g>
<path class="st2" d="M378.56,342.15c-11.2,1.29-21.2,6.91-34.38,4.02c17.38-13.12,29.62-28.02,35.34-49.86
c-22.86,11.18-44.29,22.27-69.86,17.87c29.22-14.58,53.47-34,65.19-66.51c3.09,2.11,5.44,3.31,7.29,5.04
c15.49,14.48,30.83,29.13,46.36,43.57c3.94,3.66,4.92,7.36,3.13,12.52c-12.8,37.05-17.33,75.43-17.57,114.4
c-0.11,17.53,0.54,35.07,0.78,52.6c0.02,1.77-0.35,3.55-0.66,6.4c-8.97,0-17.6,0-27.36,0c6.32-39.97,13.54-79.18,12.38-120.61
c-8.84,4.81-16.27,8.85-23.71,12.89c-0.49-0.48-0.97-0.96-1.46-1.44C378.33,363.41,381.6,353.68,378.56,342.15z"/>
</g>
<g>
<path class="st2" d="M207.81,179.57c3.71-5.83,8.78-8.93,15.2-8.75c5.91,0.17,10.65,3.14,13.82,8.68
c-3.37,5.93-8.7,7.74-14.45,7.81C216.53,187.39,211.48,185.04,207.81,179.57z"/>
</g>
<g>
<path class="st2" d="M277.66,179.72c3.23-6.12,7.85-9.04,14-9c6.15,0.04,10.67,3.08,13.58,8.58c-2.43,6.15-7.58,7.55-12.87,7.82
C286.5,187.42,281.29,185.46,277.66,179.72z"/>
</g>
<g>
<path class="st2" d="M194.81,240.77c0,0-0.08,0.08-0.08,0.08C194.72,240.85,194.81,240.77,194.81,240.77z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_scene" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M141.31,362.45c10.55-10.81,21.11-21.61,32.39-33.17c-4.23-4.4-7.78-8.52-11.78-12.13
c-4.39-3.96-5.23-7.87-1.64-12.78c2.36-3.24,4.31-6.78,7.52-11.92c29.68,29.65,58.51,58.45,88.28,88.2
c29.63-29.58,58.38-58.28,88.43-88.27c3.76,6.48,7.17,11.44,9.48,16.88c0.68,1.6-1.26,4.92-2.82,6.75
c-3.78,4.43-8.04,8.45-12.61,13.15c3.87,4.06,7.01,7.46,10.26,10.75c6.02,6.1,12.2,12.04,18.09,18.27
c1.5,1.58,2.14,3.98,2.19,6.78c-11.12-2.35-15.32-13.36-25.7-18.87c-4.53,5.37-9.27,11-14.4,17.08
c4.03,8.46,15.77,12.55,18.84,22.89c-0.64,0.7-1.28,1.4-1.92,2.1c-2.18-1.32-4.7-2.29-6.49-4.01
c-7.5-7.21-14.75-14.68-22.17-21.99c-1.69-1.67-3.67-3.05-6.41-5.3c-5.41,5.88-10.51,11.42-16,17.4
c1.57,1.94,2.93,3.92,4.6,5.61c7.3,7.42,14.75,14.69,22,22.16c1.66,1.71,2.69,4.01,3.13,6.87
c-10.84-2.35-15.01-13.32-25.2-18.68c-4.93,5.38-10.02,10.94-15.43,16.85c4.67,9.02,15.38,13.49,19.26,23.07
c-0.54,0.67-1.09,1.34-1.63,2.01c-2.14-1.31-4.59-2.29-6.35-3.98c-7.49-7.22-14.75-14.69-22.17-21.99
c-1.69-1.66-3.68-3.01-5.89-4.79c-3.8,3-7.23,5.71-11.03,8.71c-3.77-2.97-7.19-5.68-11.01-8.69c-2.19,1.75-4.19,3.08-5.87,4.74
c-7.42,7.3-14.69,14.75-22.16,22c-1.73,1.67-4.02,2.76-6.91,3.23c2.31-10.77,13.12-15.02,18.63-25.24
c-5.42-4.76-11.09-9.74-17.21-15.11c-8.81,4.1-12.9,15.32-22.79,18.83c-0.62-0.47-1.25-0.95-1.87-1.42
c1.25-2.13,2.15-4.6,3.81-6.33c7.21-7.5,14.68-14.75,21.99-22.17c1.67-1.7,3.05-3.67,5.27-6.37
c-5.69-5.59-11.06-10.87-16.79-16.51c-2.48,2-4.47,3.36-6.16,5.02c-7.42,7.3-14.69,14.75-22.16,22c-1.71,1.66-4,2.72-6.87,3.19
c2.16-10.9,13.44-14.89,18.41-25.47c-5.23-4.81-10.76-9.89-16.39-15.06c-9.69,4.24-13.75,16.43-24.15,19.15
C143.03,364.74,142.17,363.6,141.31,362.45z"/>
</g>
<g>
<path class="st2" d="M441,403.48c-16.69-27.59-33.44-55.13-50.04-82.77c-42.46-70.68-84.85-141.39-127.26-212.1
c-1.34-2.23-2.47-4.58-4.3-8.02c13.34-3.15,24.63-8.77,32.97-20.46c1.71,2.53,2.89,3.85,3.6,5.4
c28.28,61.55,56.51,123.12,84.77,184.68c19.15,41.72,38.37,83.41,57.51,125.14c1.18,2.58,1.92,5.36,2.86,8.04L441,403.48z"/>
</g>
<g>
<path class="st2" d="M217.61,82.38c2.39,3.13,3.85,4.73,4.95,6.53c4.59,7.48,8.69,15.3,13.71,22.47
c4.35,6.21,4.12,11.18,0.16,17.73c-47.28,78.28-94.26,156.74-141.31,235.16c-6.51,10.85-13.01,21.71-19.54,32.55
c-1.13,1.88-2.39,3.68-4.72,4.92C119.57,295.76,168.27,189.77,217.61,82.38z"/>
</g>
<g>
<path class="st2" d="M477.25,255.92c-10.87-10.64-21.54-21.09-32.91-32.23c-5.58,5.75-10.68,11.01-16.24,16.75
c1.84,2.26,3.31,4.39,5.1,6.21c7.43,7.56,15,15,22.43,22.56c2.12,2.16,4.52,4.52-0.17,8.58c-7.22-6.76-14.48-13.55-21.88-20.47
c-6.08,5.51-11.66,10.57-17.97,16.3c7.88,8.42,14.65,15.65,21.42,22.88c-0.62,0.85-1.25,1.7-1.87,2.56
c-2.14-1.03-4.53-1.72-6.36-3.13c-13.8-10.59-21.18-25.52-27.46-41.16c-5.78-14.38-8.33-11.03,4.45-23.75
c7.23-7.19,14.4-14.44,21.65-21.61c1.71-1.69,3.62-3.17,5.84-5.08c1.73,1.12,3.41,1.86,4.63,3.06
c13.32,13.21,26.59,26.48,39.81,39.79C479.85,249.34,482.22,251.73,477.25,255.92z"/>
</g>
<g>
<path class="st2" d="M68.55,223.56c-12.92,10.59-22.16,23.11-34.32,32.22c-0.78-0.53-1.57-1.06-2.35-1.59
c0.43-1.85,0.25-4.3,1.39-5.46c14.33-14.51,28.84-28.83,43.34-43.18c0.39-0.38,1.12-0.42,1.97-0.71
c0.75,0.34,1.86,0.54,2.53,1.2c10.88,10.75,21.84,21.43,32.39,32.51c1.47,1.54,1.83,5.55,0.94,7.69
c-4.29,10.36-8.17,21.11-14.15,30.47c-5.16,8.08-12.9,14.53-19.62,21.58c-0.65,0.69-2.18,0.54-5.2,1.2
c3.65-11.71,15.03-15.79,20.22-26.77c-5.23-4.62-10.83-9.57-16.64-14.7c-9.41,4.67-13.78,15.49-23.35,19.4
c-0.67-0.54-1.35-1.07-2.02-1.61c1.11-1.99,1.87-4.32,3.4-5.91c7.07-7.35,14.38-14.47,21.55-21.72c1.84-1.86,3.48-3.92,6.4-7.23
C79.61,235.25,74.35,229.69,68.55,223.56z"/>
</g>
<g>
<path class="st2" d="M256.05,428.1c7.93,7.53,16.37,15.55,24.7,23.47c-8.21,8.27-16.4,16.51-24.37,24.54
c-8.23-7.98-16.67-16.16-25.11-24.34C239.8,443.62,248.21,435.58,256.05,428.1z"/>
</g>
<g>
<path class="st2" d="M254.88,73.27c6.48-5.93,12.68-11.6,18.52-16.94C275.4,65.47,265.2,75.93,254.88,73.27z"/>
</g>
<g>
<path class="st2" d="M238.87,49.47c0.54-7.99,6.12-13.62,15.88-13.57c-4.81,4.98-9.61,9.96-14.42,14.93
C239.84,50.38,239.35,49.92,238.87,49.47z"/>
</g>
<g>
<polygon class="st2" points="441.11,403.38 441.22,403.67 441,403.48 "/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_item" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M86.57,379.95c0-48.58,0-96.33,0-143.79c5.64-2.82,112.01-3.19,119.52-0.33c0.25,2.68,0.79,5.83,0.8,8.98
c0.07,26.94,0.01,53.88,0.08,80.83c0.01,3.17,0.51,6.33,0.85,10.3c32.36,0,63.92,0,97.01,0c0-33.87,0-66.95,0-99.19
c6.41-3.36,112.58-3.86,119.48-1.35c2.55,5.28,2.8,137.43-0.09,144.56C312.19,379.95,199.8,379.95,86.57,379.95z"/>
</g>
<g>
<path class="st2" d="M351.95,96.52c0,37.52,0,74.24,0,111.87c-15.41,0-30.07,0-45.61,0c-0.81-5.04-1.56-9.72-2.59-16.15
c-31.78-0.12-63.35-0.24-95.41,0.16c-1.01,5.85-1.81,10.52-2.76,16c-15.49,0-30.54,0-46.27,0c-0.48-3.17-1.18-5.7-1.19-8.24
c-0.08-31.43-0.09-62.85-0.03-94.28c0.02-8.73,1.64-10.33,10.48-10.33c58.36-0.05,116.72-0.03,175.09,0.01
C346.04,95.56,348.42,96.09,351.95,96.52z"/>
</g>
<g>
<path class="st2" d="M132.51,208.42c-9.52,0-18.03,0-27.47,0c0-37.52,0-74.16,0-111.86c9.22,0,17.87,0,27.47,0
C132.51,133.9,132.51,170.54,132.51,208.42z"/>
</g>
<g>
<path class="st2" d="M378.57,96.39c10.31,0,18.82,0,29.12,0c0.27,37.43,0.14,74.07,0.08,111.82c-10.01,0-18.66,0-29.13,0
C378.39,170.99,378.51,134.35,378.57,96.39z"/>
</g>
<g>
<path class="st2" d="M107.03,407.31c99.7,0,198.42,0,297.14,0c0.31,0.74,0.62,1.47,0.93,2.21c-3.8,2.18-7.48,4.61-11.44,6.42
c-1.72,0.78-4.02,0.36-6.06,0.36c-87.72,0.01-175.44-0.01-263.17,0.06C117.35,416.37,111.13,415.25,107.03,407.31z"/>
</g>
<g>
<path class="st2" d="M280.03,311.38c-16.62,0-31.68,0-47.61,0c0-31.35,0-61.94,0-93.7c15.6-1.68,30.82-0.85,47.53-0.45
C280.76,248.97,280.56,279.53,280.03,311.38z M267.36,293.14c0.39-3.77,0.85-6.35,0.89-8.94c0.12-7.13-0.2-14.28,0.21-21.39
c0.17-2.85,1.14-6.13,2.88-8.31c8.15-10.27,8.56-19.5,0.67-27.25c-8.45-8.3-21.51-8.87-30.61-1.33
c-8.41,6.98-10.24,17.21-3.09,25.35c4.73,5.38,5.6,10.91,5.4,17.36c-0.17,5.7-0.14,11.42,0.05,17.12
c0.08,2.32,0.82,4.63,1.34,7.39C252.64,293.14,259.56,293.14,267.36,293.14z"/>
</g>
<g>
<path class="st2" d="M459.64,208.46c-9.05,0-17.17,0-26.05,0c-0.44-3.46-1.09-6.2-1.09-8.93c-0.07-31.16-0.05-62.33-0.04-93.49
c0-1.22,0.07-2.44,0.15-3.66c0.3-4.41,2.7-6.57,7.1-6.7c4.5-0.13,6.66,2.09,7.24,6.46c4.34,32.91,8.76,65.81,13.07,98.73
C460.3,202.98,459.83,205.2,459.64,208.46z"/>
</g>
<g>
<path class="st2" d="M77.56,97.23c0,36.74,0,73.41,0,111.08c-8.48,0-16.35,0-25.02,0c-0.25-2.71-0.9-5.08-0.6-7.34
c4.21-32.52,8.49-65.04,12.9-97.53C65.84,96.02,68.83,94.5,77.56,97.23z"/>
</g>
<g>
<path class="st2" d="M451.71,362.72c0-42.84,0-84.74,0-127.72c3.45-0.21,6.42-0.39,10.08-0.61c0.46,3.5,1.09,6.04,1.1,8.58
c0.06,34.46-0.08,68.92,0.12,103.38C463.06,354.24,458.99,358.62,451.71,362.72z"/>
</g>
<g>
<path class="st2" d="M50.26,234.87c2.86,0,5.32,0,7.56,0c2.47,5.02,3.24,118.46,0.9,126.79c-5.37-3.13-9.67-6.58-9.66-13.41
c0.02-35.65-0.01-71.31,0.05-106.96C49.12,239.34,49.79,237.4,50.26,234.87z"/>
</g>
<g>
<path class="st2" d="M51.56,390.71c7.99,7.72,15.99,15.44,25.01,24.15c-9.12,2.16-16.82,2.02-24.49,0.42
c-1.03-0.21-2.41-2.03-2.45-3.14c-0.23-6.78-0.11-13.57-0.11-20.36C50.2,391.43,50.88,391.07,51.56,390.71z"/>
</g>
<g>
<path class="st2" d="M436.46,413.79c8.05-7.65,16.1-15.3,24.15-22.95c0.61,0.34,1.23,0.69,1.84,1.03
c0,6.76,0.19,13.52-0.17,20.26c-0.07,1.29-2.24,3.46-3.53,3.53c-7.16,0.35-14.35,0.17-21.53,0.17
C436.96,415.15,436.71,414.47,436.46,413.79z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_fight" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M98.54,121.71c7.19,0.33,14.38,0.67,22.81,1.06c1.18-7.93,2.28-15.34,3.38-22.75
c0.65-0.23,1.3-0.46,1.95-0.69c70.17,84.04,140.34,168.07,211.57,253.38c-9.84,8.24-18.85,15.78-28.82,24.13
C238.18,291.6,167.84,207.47,97.5,123.34C97.85,122.8,98.2,122.26,98.54,121.71z"/>
</g>
<g>
<path class="st2" d="M74.25,462.04c-10.75-7.58-20.15-14.21-30.69-21.64C87.39,378.65,130.68,317.64,175,255.19
c8.95,10.7,16.69,19.95,24.95,29.82C158.02,344.06,116.54,402.48,74.25,462.04z"/>
</g>
<g>
<path class="st2" d="M425.22,103.01c0.37,2.17,1.08,4.12,0.96,6.02c-1.52,23.89-10.41,44.55-26.71,62.21
c-17.85,19.34-40.04,31.93-63.81,42.21c-1.98,0.86-4.11,1.36-7.64,2.49c1.24-4.12,1.91-6.97,2.94-9.69
c6.52-17.26,11.93-34.75,11.33-53.5c-0.09-2.84-0.01-5.86-0.93-8.47c-2.37-6.7,0.06-11.13,5.24-15.36
c8.52-6.96,16.52-14.54,24.94-21.63c1.91-1.61,4.59-3.05,6.99-3.2c14.23-0.85,28.48-1.32,42.72-1.86
C422.24,102.2,423.23,102.61,425.22,103.01z"/>
</g>
<g>
<path class="st2" d="M291.85,453.14c-4.87-5.91-8.93-10.84-14.08-17.09c41.71-34.89,82.71-69.18,124.58-104.2
c4.79,5.78,8.96,10.8,14.01,16.89C374.53,383.82,333.55,418.17,291.85,453.14z"/>
</g>
<g>
<path class="st2" d="M273.79,115.61c10.76,7.57,20.25,14.24,30.73,21.61c-17.52,24.77-34.23,48.41-51.86,73.34
c-8.76-10.27-16.69-19.55-25.21-29.54C242.84,159.29,257.83,138.14,273.79,115.61z"/>
</g>
<g>
<path class="st2" d="M310.02,250.99c3.13-1.7,6.08-3.97,9.41-5.02c21.89-6.92,42.92-15.68,62.36-28.02
c29.04-18.43,51.93-42.06,63.17-75.38c4.67-13.85,6.52-28.16,6.18-42.77c-0.05-2.01-0.01-4.02-0.01-6.78
c3.9-2.17,7.86-4.37,12.69-7.05c1.31,3.33,2.56,5.61,3.12,8.05c3.1,13.52,1.31,26.78-2.57,39.85
c-16.18,54.48-81.45,113.08-140.32,120.1c-4.27,0.51-8.65,0.07-12.98,0.07C310.71,253.03,310.37,252.01,310.02,250.99z"/>
</g>
<g>
<path class="st2" d="M389.79,472.78c-11.28-13.51-21.9-26.23-33.01-39.54c8.13-9.93,17.68-16.81,28.3-24.44
c11.08,13.21,21.71,25.89,33.02,39.37C409.83,457.64,400.05,464.37,389.79,472.78z"/>
</g>
<g>
<path class="st2" d="M321.15,118.13c-11.98-8.39-23.18-16.22-35.16-24.61c4.46-12.23,8.63-23.66,13.37-36.67
c17.45,12.36,33.25,23.54,50.46,35.73C339.82,101.49,330.87,109.47,321.15,118.13z"/>
</g>
<g>
<path class="st2" d="M98.58,95.77c-7.12-0.81-13.28-1.35-19.35-2.36c-1.23-0.2-2.8-2.02-3.15-3.37
c-2.23-8.67-4.18-17.41-6.14-26.14c-0.15-0.68,0.35-1.51,0.74-2.98c1.89,0.47,3.64,0.68,5.2,1.33
c6.2,2.59,12.29,5.47,18.53,7.94c4.9,1.94,7.04,5.25,6.33,10.43C100.13,85.01,99.49,89.39,98.58,95.77z"/>
</g>
<g>
<path class="st2" d="M263.6,72.75c-4.58-8.72-9.17-17.44-14.34-27.29c9.64-1.5,17.2,0.6,26.32,3.04
c-3.26,8.72-6.26,16.73-9.26,24.75C265.41,73.08,264.5,72.92,263.6,72.75z"/>
</g>
<g>
<path class="st2" d="M328.1,39.22c10.42,7.7,21.69,12.69,29.96,23.17C349.73,64.21,326.41,46.59,328.1,39.22z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_compendium" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M172.73,49.37c21.98,0,43.98,0,66.87,0c0,137.52,0,274.28,0,412.73c-22.56,0.64-44.71,0.55-66.23,0.05
C170.22,455.66,169.78,57.56,172.73,49.37z M200.52,429.88c3.18-7.29,2.79-312.57-0.29-318.12c-6.66,0-13.58,0-20.13,0
c-3.18,7.31-2.79,312.56,0.29,318.12C187.06,429.88,193.98,429.88,200.52,429.88z M210.72,299.22
c-3.15,7.38-2.74,125.16,0.33,130.65c6.67,0,13.59,0,21.35,0c0-43.84,0-86.81,0-130.65
C224.64,299.22,217.72,299.22,210.72,299.22z"/>
</g>
<g>
<path class="st2" d="M145.38,142.76c0,85.62,0,170.31,0,256.67c-17.42,1.03-34.25,0.66-51.8,0.12
c-0.49-3.88-1.14-6.62-1.14-9.36c-0.05-79.17-0.06-158.34-0.03-237.52c0-9.54,1.47-10.94,11.07-11
c11.02-0.07,22.04-0.07,33.06,0.03C139.11,141.74,141.67,142.3,145.38,142.76z"/>
</g>
<g>
<path class="st2" d="M363.52,456.03c-12.7,2.35-23.74,4.39-35.68,6.6c-1.26-4.11-2.57-7.24-3.16-10.5
c-10.85-60.07-21.6-120.15-32.38-180.23c-7.75-43.2-15.53-86.4-23.26-129.6c-0.49-2.72-0.59-5.51-1-9.55
c12.13-2.2,23.57-4.27,36.31-6.58C324.11,236.33,343.65,345.24,363.52,456.03z"/>
</g>
<g>
<path class="st2" d="M30.77,95.93c12.29,0,23.52,0,35.63,0c0.49,3.12,1.29,5.83,1.29,8.53c0.07,53.47,0.07,106.95,0.02,160.42
c0,2.37-0.57,4.75-0.98,8c-11.97,0-23.53,0-35.96,0C30.77,213.88,30.77,155.54,30.77,95.93z"/>
</g>
<g>
<path class="st2" d="M367.58,238.23c7-3.03,12.81-5.54,20.08-8.69c31.66,74.22,62.88,147.39,94.52,221.55
c-7.17,3.14-12.98,5.68-20.06,8.77C430.48,385.69,399.26,312.48,367.58,238.23z"/>
</g>
<g>
<path class="st2" d="M65.98,461.62c-11.43,0-22.81,0-35.96,0c-0.23-38.48-0.1-76.1-0.08-114.56c13.02,0,24.42,0,35.56,0
C68.27,352.44,68.8,453.4,65.98,461.62z"/>
</g>
<g>
<path class="st2" d="M145.31,461.62c-17.64,0-34.34,0-51.98,0c0-12.22,0-23.59,0-34.65c5.83-2.99,44.82-3.3,51.98-0.36
C145.31,437.66,145.31,449.07,145.31,461.62z"/>
</g>
<g>
<path class="st2" d="M66.94,299.04c0,7.68,0,14,0,20c-5.68,3.23-28.48,3.6-36.48,0.32c0-5.15-0.23-10.92,0.17-16.64
c0.09-1.3,2.32-3.48,3.61-3.52C44.72,298.91,55.21,299.04,66.94,299.04z"/>
</g>
<g>
<path class="st2" d="M344.77,183.51c1.37-6.24,13.25-11.41,18.86-8.56C361.93,179.91,351.56,184.78,344.77,183.51z"/>
</g>
<g>
<path class="st2" d="M376.69,203.79c-1.47,1.58-2.66,3.99-4.46,4.57c-4.85,1.58-9.26,6.71-16.33,2.77
c5.69-6.11,12.27-7.7,18.8-9.41C375.37,202.41,376.03,203.1,376.69,203.79z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_settings" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M167.35,468.66c-13.39-1.77-50.61-24-55.69-33.14c1.08-1.73,2.27-3.8,3.62-5.75
c9.08-13.11,15.46-27.19,17.17-43.32c2.08-19.66-8.6-38.21-26.93-45.65c-18.45-7.49-36.8-5.28-55.13,0.52
c-2.27,0.72-4.61,1.24-7.95,2.13c-8.74-20.07-13.97-40.42-16.04-62.21c3.72-1,6.27-1.51,8.71-2.36
c10.15-3.55,20.93-5.98,30.28-11.03c32.02-17.29,37.2-51.45,11.57-77.58c-7.69-7.84-18.02-13.11-27.21-19.46
c-1.8-1.24-3.88-2.08-6.88-3.65c7.46-20.81,19.04-38.63,32.65-56.07c2.6,1.58,4.49,2.63,6.28,3.83
c12.84,8.66,26.44,15.16,42.16,16.87c27.62,3.01,49.81-16.05,50.75-43.89c0.44-12.98-0.7-25.69-5.26-37.95
c-0.57-1.52-0.94-3.13-1.27-4.72c-0.16-0.77-0.03-1.6-0.03-3.56c19.48-9.06,40.19-13.46,62.14-15.74
c1.02,3.75,1.82,6.21,2.34,8.72c3.47,16.64,9.06,32.26,21.51,44.52c15.73,15.49,38.24,17.59,56.71,5.52
c12.09-7.9,21.07-18.51,27.72-31.22c1.77-3.4,3.56-6.79,5.82-11.11c21.09,7.8,39.67,18.42,56.8,32.93
c-1.64,2.8-2.68,4.95-4.05,6.86C388.21,94.64,382,108.15,380,123.56c-3.04,23.55,11.24,44.26,34.61,49.71
c15.81,3.69,31.2,1.62,46.42-3.22c2.48-0.79,5-1.42,8.46-2.39c8.98,19.98,13.9,40.42,16.18,62.37c-3.8,0.94-6.46,1.76-9.18,2.25
c-16.65,3.01-31.7,9.36-43.86,21.42c-17.55,17.41-17.87,44.76-1.08,62.94c9.09,9.85,19.19,18.29,31.47,23.91
c1.97,0.9,3.73,2.29,6.35,3.94c-7.98,20.35-18.77,38.4-32.84,55.12c-3.06-1.75-5.24-2.79-7.18-4.15
c-11.9-8.34-24.87-13.72-39.36-15.81c-25.9-3.73-48.07,12.39-52.41,38.17c-2.51,14.96-0.26,29.24,4.49,43.36
c0.89,2.64,1.57,5.34,2.63,8.96c-20.39,9.22-41.13,13.92-63.52,15.93c-1.27-5.66-2.36-10.56-3.47-15.47
c-2.68-11.93-7.48-22.97-15.18-32.45c-19.22-23.66-48.23-25.35-70.63-3.31c-8,7.87-13.67,18.12-20.35,27.33
C170.02,464.25,168.74,466.5,167.35,468.66z M255.86,400.9c76.17,1.14,145.09-60.6,145.17-144.58
c0.07-81.43-64.18-146.3-147.02-145.43c-80.82,0.84-143.17,67.24-143.11,145.2C110.95,336.29,175.57,400.89,255.86,400.9z"/>
</g>
<g>
<path class="st2" d="M255.9,375.07c-66.32-0.01-119.05-52.79-119.18-119.01c-0.12-60.41,46.51-119.03,119.17-119.37
c66.88-0.31,119,51.98,119.5,119.66C375.87,322.28,322.28,375.08,255.9,375.07z M256.32,367.82
c61.81,0.01,112.28-50.05,111.82-111.65c-0.45-60.76-47.78-111.81-111.76-112.13c-63.11-0.31-112.37,51.07-112.41,112.06
C143.95,318.19,193.87,367.82,256.32,367.82z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_journal" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M448.42,92.12c-17.01,7.17-36.38,3.32-52.81,13.34c13.35,7.59,25.04,14.25,36.73,20.9
c-0.07,0.7-0.15,1.39-0.22,2.09c-10.32,2.08-20.63,4.16-30.95,6.23c-0.13,0.63-0.27,1.25-0.4,1.88
c14.07,8.7,28.14,17.4,42.66,26.38c-0.79,3.42-1.29,6.39-2.17,9.24c-9.51,30.75-25.84,57.54-47.17,81.49
c-28.41,31.88-43.98,69.29-47.66,111.76c-0.21,2.39-0.8,4.75-1.37,8.08c-3.69,0.38-7.21,1.06-10.74,1.07
c-52.87,0.07-105.74-0.15-158.6,0.15c-23.87,0.13-41.44,11.18-51.15,33.28c-13.04,29.65,8.96,66.89,45.53,62.06
c6.73-0.89,13.59-0.76,20.39-1.1c0.18,0.69,0.36,1.39,0.54,2.08c-1.95,1.11-3.78,2.8-5.87,3.23
c-13.93,2.87-27.83,6.21-41.92,7.89c-9.63,1.15-19.71,0.93-29.3-0.54c-25.73-3.96-39.5-20.96-46.09-44.94
c-7.68-27.98-4.86-55.9,1.11-83.65c2.48-11.54,6.41-22.77,9.52-34.19c1.48-5.44,4.92-7.99,10.38-8.84
c14.32-2.22,28.6-4.7,42.88-7.15c2.31-0.4,4.55-1.17,8.35-2.18c-12.43-12.92-23.92-24.85-35.68-37.07
c10.82-18.72,21.31-36.6,31.53-54.63c10.13-17.88,18.72-36.44,25.46-57.28c-4.1-0.52-6.79-1.1-9.48-1.17
c-19.98-0.48-39.99-0.43-59.95-1.38c-24.37-1.15-41.44-13.86-51.3-35.78c-9.41-20.93-7.08-40.88,7.01-59.34
c19.06-24.97,49.5-32.54,79.33-22.79c21.47,7.01,43.03,8.54,65.03,9.07c24.68,0.59,49.38,1.73,74.03,1.02
c37.08-1.07,74.08-3.17,111.05-7.28c35.35-3.93,63.98,16.8,71.28,52.84C448.69,88.4,448.42,90.05,448.42,92.12z M159.2,70.78
c0-1.99,0.18-2.66-0.04-3.16c-0.48-1.12-1.19-2.13-1.74-3.22c-6.25-12.36-16.75-18.76-29.81-22.21
c-18.28-4.83-36.2-6.22-53.53,3.12c-21.82,11.76-31.94,33.41-26.21,55.84c5.97,23.41,24.48,37.29,49.57,37.18
c17.77-0.08,24.02-8.04,17.19-24.49c-5.04-12.13-12.63-23.2-19.09-34.74c-1.22-2.18-2.46-4.34-4.73-8.33
C114.8,70.78,137.01,70.78,159.2,70.78z M125.86,137.58c1.23,0.84,1.72,1.47,2.22,1.47c10.98,0.11,21.98,0.38,32.94-0.05
c1.75-0.07,4.42-3.12,4.9-5.2c3.31-14.42,3.93-28.99,1.39-43.67c-1-5.82-3.9-8.4-9.91-8.3c-12.83,0.22-25.67,0.01-38.51,0.11
c-2.02,0.02-4.04,0.76-6.94,1.34C121.1,101.11,132.77,117.32,125.86,137.58z"/>
</g>
<g>
<path class="st2" d="M437.3,403.69c-12.05,6.13-24.1,12.27-36.16,18.4c0.06,0.71,0.11,1.41,0.17,2.12
c24.23,2.92,48.45,5.83,72.88,8.77c0.85,2.39,1.74,4.21,2.15,6.14c4.1,19.37-9.24,40.07-28.6,44.05
c-5.16,1.06-10.51,1.63-15.78,1.64c-68.14,0.11-136.27,0.08-204.41,0.06c-2.4,0-4.79-0.23-9.27-0.46
c10.87-12.42,17.06-25.54,17.43-40.56c0.37-14.77-2.14-29.17-10.26-43.31c3.8-0.56,6.28-1.23,8.77-1.24
c60.59-0.06,121.18-0.1,181.76,0.05c7,0.02,13.99,1.22,20.99,1.88C437.07,402.06,437.18,402.88,437.3,403.69z"/>
</g>
<g>
<path class="st2" d="M208.78,442.37c-2.84,0.3-5.59,0.73-8.35,0.86c-11.77,0.56-23.55,0.9-35.32,1.59
c-11.74,0.69-20.7-11.09-17.7-23.56c2.84-11.78,14.12-20.41,27.04-20.71C193.39,400.09,213.19,416.86,208.78,442.37z"/>
</g>
</g>
</g>
</g>
<g id="icon_x5F_sidebar_x5F_music" class="st0">
<g class="st1">
<g>
<g>
<path class="st2" d="M261.65,225.6c0.7,2.64,1.55,5.26,2.07,7.94c1.62,8.25,2.65,8.79,11.01,8.46c15-0.58,29.14,2.2,41.74,11.16
c14.6,10.37,19.64,25.5,21.71,42.14c2.78,22.32-10.19,36.76-25.52,49.9c-0.44,0.37-1.09,0.54-1.67,0.69
c-0.37,0.09-0.8-0.03-1.59-0.08c-3.15-4.92-2.8-9.59,0.96-14.33c6.14-7.74,11.54-15.89,12.05-26.24
c1.24-25.02-14.28-44.09-39.26-47.94c-4.59-0.71-9.31-0.53-15-0.81c0.44,4.72,0.51,7.73,1.03,10.66
c8.8,49.42,17.66,98.83,26.47,148.26c1.07,6.03,2.01,12.08,2.81,18.15c1.93,14.59-2.85,26.51-14.6,35.46
c-18.51,14.1-39.18,15.5-60.44,8.72c-16.02-5.1-25.76-22.74-22.74-38.34c3.49-18.02,17.24-29.36,35.42-29.2
c17.96,0.16,31.41,11.98,34.49,30.27c0.42,2.52,1.01,5.02,1.49,7.33c10.2,0.4,17.08-7.88,15.5-18.5
c-3.27-22-6.51-44.01-10.45-65.89c-5.72-31.73-12.04-63.35-18.15-95.01c-0.4-2.07-1.27-4.05-2.29-7.23
c-7.24,4.84-12.49,9.93-15.47,17.08c-5.54,13.32-3.63,26.35,1.74,39.25c1.25,3.01,1.98,6.23,2.95,9.35
c-0.69,0.48-1.39,0.96-2.08,1.44c-1.98-1.63-4.28-2.98-5.89-4.92c-14.99-18.11-14.14-48.78,1.75-66.18
c2.06-2.26,4.06-4.69,6.52-6.45c5.79-4.17,9.56-8.69,8.28-16.73c-0.43-2.71,3.11-6.04,4.83-9.09
C260.1,225.14,260.88,225.37,261.65,225.6z"/>
</g>
<g>
<path class="st2" d="M242.98,129.77c-0.54-2.18-1.24-3.66-1.24-5.15c0.06-27.65,5.24-53.97,20.63-77.55
c0.78-1.19,1.62-2.36,2.52-3.47c15.38-18.96,34.82-17.62,45.72,4.2c15.14,30.31,13.51,60.55-6.91,87.73
c-13.67,18.2-29.81,34.59-45.42,51.26c-18.14,19.38-36.83,38.27-50.39,61.34c-4.74,8.07-9.5,16.33-12.73,25.07
c-8.46,22.81-4.26,43.77,11.57,62.22c9.81,11.44,22.06,19.31,36.6,23.44c5.39,1.53,7.9,4.61,6.35,11.29
c-2.86,0-5.84,0.44-8.66-0.07c-31-5.57-50.06-25.12-60.87-53.46c-11.63-30.51-8.06-59.85,11.23-86
c15.34-20.81,32.18-40.57,49.3-59.97c15.92-18.03,33.27-34.79,49.64-52.44c11.16-12.03,12.87-27,10.85-42.48
c-1.06-8.1-5.98-13.73-14.13-16.01c-7.39-2.07-12.75,1.54-17.1,6.79c-2.57,3.1-5.27,6.57-6.35,10.32
c-3.64,12.7-7.02,25.51-9.61,38.46C252.62,122.04,249,126,242.98,129.77z"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 28 KiB

+80
View File
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 256px; width: 256px;"
version="1.1"
id="svg6"
sodipodi:docname="icon_sidebar_tables.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1956"
inkscape:window-height="1125"
id="namedview8"
showgrid="false"
inkscape:zoom="0.71777344"
inkscape:cx="403.50636"
inkscape:cy="-55.697677"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg6" />
<g
id="g838"
transform="matrix(0.52656879,-0.75618342,0.76711498,0.53418097,-33.85852,326.4134)"
style="fill:#ffffff;stroke:none">
<g
class=""
id="g4-5"
style="fill:#ffffff;stroke:none"
transform="matrix(0.76010883,0,0,0.77788021,-69.057255,5.6807692)">
<path
d="m 375.483,251.243 -109.98,51.138 0.213,183.381 211.294,-219.416 -86.993,-21.81 z m -12.736,108.626 -5.947,14.699 -48.604,-8.955 5.007,-12.832 a 141.306,141.306 0 0 0 13.51,-11.358 167.184,167.184 0 0 0 16.566,-17.517 170.478,170.478 0 0 0 12.606,-17.958 115.607,115.607 0 0 0 9.514,-17.97 l 14.068,2.51 q -9.37,22.334 -30.361,44.43 -13.296,13.64 -20.645,18.636 z M 121.603,244.334 36.893,266.097 246.474,486 V 302.38 L 136.528,251.243 Z m 19.147,50.852 a 28.72,28.72 0 0 1 24.273,6.802 53.052,53.052 0 0 1 11.226,14.188 l -13.081,2.676 a 28.542,28.542 0 0 0 -5.388,-7.374 q -5.185,-4.876 -11.262,-3.853 l -0.487,0.095 a 6.458,6.458 0 0 0 -5.162,4.448 c -0.856,2.378 -0.238,5.554 1.796,9.371 q 4.08,7.6 10.81,9.027 a 23.785,23.785 0 0 0 8.563,-0.203 l 1.867,-0.344 5.791,10.822 q -6.398,1.427 -8.23,3.282 -3.21,3.14 0.429,9.93 a 17.042,17.042 0 0 0 6.089,6.696 10.406,10.406 0 0 0 7.385,1.534 l 0.416,-0.083 q 4.757,-0.964 5.079,-4.757 c 0.261,-2.57 -0.655,-5.744 -2.748,-9.514 l 12.38,-2.545 a 49.247,49.247 0 0 1 4.103,11.226 19.956,19.956 0 0 1 -0.642,9.383 11.702,11.702 0 0 1 -3.96,5.411 19.575,19.575 0 0 1 -8.027,3.235 l -1.19,0.214 a 27.971,27.971 0 0 1 -17.494,-2.7 32.193,32.193 0 0 1 -14.128,-14.092 q -3.627,-6.79 -2.604,-12.19 a 8.396,8.396 0 0 1 2.521,-4.947 h -0.071 q -1.844,0.31 -7.04,-2.497 a 32.11,32.11 0 0 1 -12.916,-13.593 q -5.245,-9.764 -3.282,-18.398 1.962,-8.634 13.676,-11 z M 27.19,248.865 135.97,132.556 a 7.135,7.135 0 0 1 1.427,0 h 0.154 q 3.14,0.345 2.842,3.71 a 19.36,19.36 0 0 1 -3.294,8.1 39.376,39.376 0 0 1 -9.728,10.405 q -3.912,2.938 -15.044,9.514 -12.796,7.505 -19.55,14.77 a 92.535,92.535 0 0 0 -11.513,14.486 l 32.907,3.758 8.182,-12.963 -20.967,-2.378 a 36.415,36.415 0 0 1 4.757,-3.83 q 2.379,-1.605 8.444,-5.125 l 6.422,-3.747 a 92.975,92.975 0 0 0 12.903,-8.776 61.472,61.472 0 0 0 12.51,-14.414 q 6.84,-10.846 6.494,-17.957 c -0.19,-3.949 -2.105,-6.434 -5.684,-7.505 l 79.798,-85.161 -102.097,179.576 -5.708,10.06 z m 367.238,-71.974 q -3.817,-5.458 -3.758,-8.515 c 0,-2.033 1.19,-3.199 3.568,-3.448 h 0.57 a 11.892,11.892 0 0 1 6.91,2.247 29.85,29.85 0 0 1 7.837,8.051 q 3.687,5.28 3.71,8.397 c 0,2.093 -1.188,3.258 -3.496,3.567 h -0.594 a 11.75,11.75 0 0 1 -6.957,-2.378 29.79,29.79 0 0 1 -7.79,-7.885 z m -109.41,-141.52 83.948,89.634 h -1.189 c -0.38,0 -0.975,0 -1.463,0.107 q -7.825,0.892 -8.324,6.862 -0.5,5.97 5.03,13.747 a 53.778,53.778 0 0 0 6.375,7.374 37.901,37.901 0 0 0 10.144,6.897 q -2.117,2.89 -0.702,7.98 a 37.283,37.283 0 0 0 5.613,11.096 55.122,55.122 0 0 0 15.223,14.806 q 8.098,5.268 16.066,4.935 0.81,0 1.618,-0.13 8.776,-0.988 9.228,-7.873 a 16.114,16.114 0 0 0 -0.463,-4.853 l 58.689,62.686 -91.572,-22.941 -6.1,-10.703 z m 98.22,104.927 2.45,2.617 c 0.451,0.57 0.903,1.189 1.355,1.784 1.808,2.592 2.723,4.757 2.723,6.529 0,1.771 -1.034,2.782 -3.127,3.02 h -0.512 a 10.346,10.346 0 0 1 -6.077,-1.95 22.596,22.596 0 0 1 -6.184,-6.137 c -1.974,-2.83 -2.937,-5.102 -2.878,-6.814 0.06,-1.713 1.118,-2.7 3.187,-2.937 h 0.524 a 10.263,10.263 0 0 1 6.005,1.879 19.147,19.147 0 0 1 2.533,2.01 z M 255.987,26 137.456,231.026 l 118.532,55.05 118.604,-55.05 z m -1.19,208.463 q -17.529,0 -24.58,-12.273 -7.053,-12.273 -7.053,-34.988 0,-22.714 7.052,-35.047 7.052,-12.332 24.582,-12.344 17.53,0 24.582,12.332 7.052,12.333 7.052,35.047 0,22.715 -7.052,34.988 -7.053,12.273 -24.582,12.285 z m 10.538,-71.807 q 2.497,7.968 2.497,24.546 0,15.817 -2.497,24.201 -2.498,8.384 -10.537,8.325 -8.04,0 -10.632,-8.325 -2.593,-8.324 -2.593,-24.2 0,-16.579 2.593,-24.547 2.593,-7.968 10.632,-7.968 8.015,-0.012 10.513,7.956 z"
fill="#ffffff"
fill-opacity="1"
transform="matrix(0.69282032,-0.4,0.4,0.69282032,-23.762003,181.038)"
id="path2-65"
style="fill:#ffffff;stroke:none" />
</g>
<g
class=""
id="g4-4"
style="fill:#ffffff;stroke:none"
transform="matrix(0.74275157,0.16528633,-0.16151022,0.76011713,216.37438,-18.305353)">
<path
d="m 375.483,251.243 -109.98,51.138 0.213,183.381 211.294,-219.416 -86.993,-21.81 z m -12.736,108.626 -5.947,14.699 -48.604,-8.955 5.007,-12.832 a 141.306,141.306 0 0 0 13.51,-11.358 167.184,167.184 0 0 0 16.566,-17.517 170.478,170.478 0 0 0 12.606,-17.958 115.607,115.607 0 0 0 9.514,-17.97 l 14.068,2.51 q -9.37,22.334 -30.361,44.43 -13.296,13.64 -20.645,18.636 z M 121.603,244.334 36.893,266.097 246.474,486 V 302.38 L 136.528,251.243 Z m 19.147,50.852 a 28.72,28.72 0 0 1 24.273,6.802 53.052,53.052 0 0 1 11.226,14.188 l -13.081,2.676 a 28.542,28.542 0 0 0 -5.388,-7.374 q -5.185,-4.876 -11.262,-3.853 l -0.487,0.095 a 6.458,6.458 0 0 0 -5.162,4.448 c -0.856,2.378 -0.238,5.554 1.796,9.371 q 4.08,7.6 10.81,9.027 a 23.785,23.785 0 0 0 8.563,-0.203 l 1.867,-0.344 5.791,10.822 q -6.398,1.427 -8.23,3.282 -3.21,3.14 0.429,9.93 a 17.042,17.042 0 0 0 6.089,6.696 10.406,10.406 0 0 0 7.385,1.534 l 0.416,-0.083 q 4.757,-0.964 5.079,-4.757 c 0.261,-2.57 -0.655,-5.744 -2.748,-9.514 l 12.38,-2.545 a 49.247,49.247 0 0 1 4.103,11.226 19.956,19.956 0 0 1 -0.642,9.383 11.702,11.702 0 0 1 -3.96,5.411 19.575,19.575 0 0 1 -8.027,3.235 l -1.19,0.214 a 27.971,27.971 0 0 1 -17.494,-2.7 32.193,32.193 0 0 1 -14.128,-14.092 q -3.627,-6.79 -2.604,-12.19 a 8.396,8.396 0 0 1 2.521,-4.947 h -0.071 q -1.844,0.31 -7.04,-2.497 a 32.11,32.11 0 0 1 -12.916,-13.593 q -5.245,-9.764 -3.282,-18.398 1.962,-8.634 13.676,-11 z M 27.19,248.865 135.97,132.556 a 7.135,7.135 0 0 1 1.427,0 h 0.154 q 3.14,0.345 2.842,3.71 a 19.36,19.36 0 0 1 -3.294,8.1 39.376,39.376 0 0 1 -9.728,10.405 q -3.912,2.938 -15.044,9.514 -12.796,7.505 -19.55,14.77 a 92.535,92.535 0 0 0 -11.513,14.486 l 32.907,3.758 8.182,-12.963 -20.967,-2.378 a 36.415,36.415 0 0 1 4.757,-3.83 q 2.379,-1.605 8.444,-5.125 l 6.422,-3.747 a 92.975,92.975 0 0 0 12.903,-8.776 61.472,61.472 0 0 0 12.51,-14.414 q 6.84,-10.846 6.494,-17.957 c -0.19,-3.949 -2.105,-6.434 -5.684,-7.505 l 79.798,-85.161 -102.097,179.576 -5.708,10.06 z m 367.238,-71.974 q -3.817,-5.458 -3.758,-8.515 c 0,-2.033 1.19,-3.199 3.568,-3.448 h 0.57 a 11.892,11.892 0 0 1 6.91,2.247 29.85,29.85 0 0 1 7.837,8.051 q 3.687,5.28 3.71,8.397 c 0,2.093 -1.188,3.258 -3.496,3.567 h -0.594 a 11.75,11.75 0 0 1 -6.957,-2.378 29.79,29.79 0 0 1 -7.79,-7.885 z m -109.41,-141.52 83.948,89.634 h -1.189 c -0.38,0 -0.975,0 -1.463,0.107 q -7.825,0.892 -8.324,6.862 -0.5,5.97 5.03,13.747 a 53.778,53.778 0 0 0 6.375,7.374 37.901,37.901 0 0 0 10.144,6.897 q -2.117,2.89 -0.702,7.98 a 37.283,37.283 0 0 0 5.613,11.096 55.122,55.122 0 0 0 15.223,14.806 q 8.098,5.268 16.066,4.935 0.81,0 1.618,-0.13 8.776,-0.988 9.228,-7.873 a 16.114,16.114 0 0 0 -0.463,-4.853 l 58.689,62.686 -91.572,-22.941 -6.1,-10.703 z m 98.22,104.927 2.45,2.617 c 0.451,0.57 0.903,1.189 1.355,1.784 1.808,2.592 2.723,4.757 2.723,6.529 0,1.771 -1.034,2.782 -3.127,3.02 h -0.512 a 10.346,10.346 0 0 1 -6.077,-1.95 22.596,22.596 0 0 1 -6.184,-6.137 c -1.974,-2.83 -2.937,-5.102 -2.878,-6.814 0.06,-1.713 1.118,-2.7 3.187,-2.937 h 0.524 a 10.263,10.263 0 0 1 6.005,1.879 19.147,19.147 0 0 1 2.533,2.01 z M 255.987,26 137.456,231.026 l 118.532,55.05 118.604,-55.05 z m -1.19,208.463 q -17.529,0 -24.58,-12.273 -7.053,-12.273 -7.053,-34.988 0,-22.714 7.052,-35.047 7.052,-12.332 24.582,-12.344 17.53,0 24.582,12.332 7.052,12.333 7.052,35.047 0,22.715 -7.052,34.988 -7.053,12.273 -24.582,12.285 z m 10.538,-71.807 q 2.497,7.968 2.497,24.546 0,15.817 -2.497,24.201 -2.498,8.384 -10.537,8.325 -8.04,0 -10.632,-8.325 -2.593,-8.324 -2.593,-24.2 0,-16.579 2.593,-24.547 2.593,-7.968 10.632,-7.968 8.015,-0.012 10.513,7.956 z"
fill="#ffffff"
fill-opacity="1"
transform="matrix(0.69282032,-0.4,0.4,0.69282032,-23.762003,181.038)"
id="path2-6"
style="fill:#ffffff;stroke:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

+33
View File
@@ -1,5 +1,38 @@
# 13.0
## 14.0.1 - Les imprécisions de Tétragor
- correction de l'indicateur de remplissage des conteneurs
- correction de l'ouverture des objets utilisant la liste des compétences
- correction de la description aléatoires
## 14.0.0 - Les rangements de Tétragor
- Amélioration de la gestion de l'équipement
- gestion des deniers
- gestion de herbes & plantes
- gestion des ingrédients
- gestion des potions
- indicateur de remplissage des conteneurs
- tri par nom / type / encombrement / quantité
- Le but des recettes alchimiques est affiché et éditable
## 13.0.48 - Les vagabondages d'Illisys
- Gestion des tâches à plusieurs
- Les tâches du monde peuvent être configurées pour être effectuées à plusieurs
- Une tâche à plusieurs ajoutée à un personnage permet au personnage de contribuer à la tâche commune
- suppression du type de TMR "Inconnu" des feuilles de création de signes draconiques (ce type sert uniquement pour le cas où une case saisie à la main est incorrecte)
- les jets de dés /rdd utilisent le mode de visibilité sélectionné
- Voies de Draconic
- Ne pas proposer les voies de Draconic à -11 pour lire un signe draconic ou lancer un sort
- Trier les voies par ordre décroissant pour le sorts à voies multiples
- Les rencontres et les maîtrises dans les TMR peuvent être vaincues sans
draconic si les voies sont négatives
- correction d'updates non affichés
- Améliorations des titres des fenêtres de jets
## 13.0.47 - Les goûts et les couleurs d'Illisys
- Correction des couleurs des tooltips d'aide foundry
+133 -1
View File
@@ -1153,6 +1153,35 @@ body {
display: flex;
min-width: max-content;
}
.system-foundryvtt-reve-de-dragon .conteneur-sature {
color: #c00 !important;
font-weight: bold;
}
.system-foundryvtt-reve-de-dragon .conteneur-capacity-bar {
width: 5rem;
height: 0.4rem;
background: rgba(0, 0, 0, 0.1);
border-radius: 0.2rem;
overflow: hidden;
margin: 0 0.3rem;
}
.system-foundryvtt-reve-de-dragon .conteneur-capacity-fill {
height: 100%;
background: #4a90d9;
border-radius: 0.2rem;
transition: width 0.3s;
}
.system-foundryvtt-reve-de-dragon .conteneur-parent-badge {
font-size: 0.7rem;
color: #666;
margin-left: 0.3rem;
}
.system-foundryvtt-reve-de-dragon .conteneur-parent-badge::before {
content: "(";
}
.system-foundryvtt-reve-de-dragon .conteneur-parent-badge::after {
content: ")";
}
.system-foundryvtt-reve-de-dragon .blessure-control {
flex-grow: 1;
flex-direction: row;
@@ -1218,6 +1247,96 @@ body {
vertical-align: baseline;
padding: 0.1rem;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table {
width: 100%;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th,
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td {
padding: 0.2rem 0.3rem !important;
vertical-align: middle !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th {
color: var(--color-text-light-heading, #f0f0f0) !important;
font-weight: bold !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:first-child,
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:first-child {
width: 36px !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:nth-child(2),
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:nth-child(2) {
width: auto !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:nth-child(3),
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:nth-child(3) {
width: 3rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:nth-child(4),
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:nth-child(4) {
width: 6rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:nth-child(5),
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:nth-child(5) {
width: 5rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table th:nth-child(7),
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table td:nth-child(7) {
width: 2.5rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table select {
max-width: 12rem !important;
min-width: 8rem !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-herbes table img {
width: 30px !important;
height: 30px !important;
object-fit: cover !important;
border: none !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table {
width: 100%;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td {
padding: 0.2rem 0.3rem !important;
vertical-align: middle !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:first-child {
width: 36px !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:nth-child(2) {
width: auto !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:nth-child(3) {
width: 3rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:nth-child(4) {
width: 6rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:nth-child(5) {
width: auto !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table td:nth-child(6) {
width: 2.5rem !important;
text-align: center !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table select {
max-width: 12rem !important;
min-width: 8rem !important;
}
.system-foundryvtt-reve-de-dragon .dialog-gerer-ingredients table img {
width: 30px !important;
height: 30px !important;
object-fit: cover !important;
border: none !important;
}
.system-foundryvtt-reve-de-dragon .dice-img {
border-width: 0;
max-width: 1.5rem;
@@ -1953,6 +2072,14 @@ body {
flex-basis: 2rem;
text-align: center;
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .at-archetype {
border-left: 3px solid var(--color-archetype-atteint, #b8860b);
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .archetype-check {
color: var(--color-archetype-atteint, #b8860b);
font-size: 0.75rem;
margin-left: 0.15rem;
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .carac-value,
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .competence-xp-sort {
flex-grow: 0;
@@ -2398,6 +2525,8 @@ body {
[data-tab="items"],
[data-tab="journal"],
[data-tab="cards"],
[data-tab="tables"],
[data-tab="placeables"],
[data-tab="macros"],
[data-tab="tables"],
[data-tab="playlists"],
@@ -2426,6 +2555,9 @@ body {
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="scenes"] {
background-image: url("../assets/ui/icon_sidebar_scene.svg");
}
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="placeables"] {
background-image: url("../assets/ui/icon_sidebar_placeables.svg");
}
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="actors"] {
background-image: url("../assets/ui/icon_sidebar_actor.svg");
}
@@ -2442,7 +2574,7 @@ body {
background-image: url("../assets/ui/icon_sidebar_macros.svg");
}
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="tables"] {
background-image: url("../assets/ui/d100.svg");
background-image: url("../assets/ui/icon_sidebar_tables.svg");
}
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="playlists"] {
background-image: url("../assets/ui/icon_sidebar_music.svg");
+135 -1
View File
@@ -415,6 +415,35 @@
display: flex;
min-width: max-content;
}
.conteneur-sature {
color: #c00 !important;
font-weight: bold;
}
.conteneur-capacity-bar {
width: 5rem;
height: 0.4rem;
background: rgba(0, 0, 0, 0.1);
border-radius: 0.2rem;
overflow: hidden;
margin: 0 0.3rem;
}
.conteneur-capacity-fill {
height: 100%;
background: #4a90d9;
border-radius: 0.2rem;
transition: width 0.3s;
}
.conteneur-parent-badge {
font-size: 0.7rem;
color: #666;
margin-left: 0.3rem;
&::before {
content: "(";
}
&::after {
content: ")";
}
}
.blessure-control {
flex-grow: 1;
@@ -483,6 +512,98 @@
padding: 0.1rem;
}
.dialog-gerer-herbes table {
width: 100%;
}
.dialog-gerer-herbes table th,
.dialog-gerer-herbes table td {
padding: 0.2rem 0.3rem !important;
vertical-align: middle !important;
}
.dialog-gerer-herbes table th {
color: var(--color-text-light-heading, #f0f0f0) !important;
font-weight: bold !important;
}
.dialog-gerer-herbes table th:first-child,
.dialog-gerer-herbes table td:first-child {
width: 36px !important;
text-align: center !important;
}
.dialog-gerer-herbes table th:nth-child(2),
.dialog-gerer-herbes table td:nth-child(2) {
width: auto !important;
}
.dialog-gerer-herbes table th:nth-child(3),
.dialog-gerer-herbes table td:nth-child(3) {
width: 3rem !important;
text-align: center !important;
}
.dialog-gerer-herbes table th:nth-child(4),
.dialog-gerer-herbes table td:nth-child(4) {
width: 6rem !important;
text-align: center !important;
}
.dialog-gerer-herbes table th:nth-child(5),
.dialog-gerer-herbes table td:nth-child(5) {
width: 5rem !important;
text-align: center !important;
}
.dialog-gerer-herbes table th:nth-child(7),
.dialog-gerer-herbes table td:nth-child(7) {
width: 2.5rem !important;
text-align: center !important;
}
.dialog-gerer-herbes table select {
max-width: 12rem !important;
min-width: 8rem !important;
}
.dialog-gerer-herbes table img {
width: 30px !important;
height: 30px !important;
object-fit: cover !important;
border: none !important;
}
.dialog-gerer-ingredients table {
width: 100%;
}
.dialog-gerer-ingredients table td {
padding: 0.2rem 0.3rem !important;
vertical-align: middle !important;
}
.dialog-gerer-ingredients table td:first-child {
width: 36px !important;
text-align: center !important;
}
.dialog-gerer-ingredients table td:nth-child(2) {
width: auto !important;
}
.dialog-gerer-ingredients table td:nth-child(3) {
width: 3rem !important;
text-align: center !important;
}
.dialog-gerer-ingredients table td:nth-child(4) {
width: 6rem !important;
text-align: center !important;
}
.dialog-gerer-ingredients table td:nth-child(5) {
width: auto !important;
}
.dialog-gerer-ingredients table td:nth-child(6) {
width: 2.5rem !important;
text-align: center !important;
}
.dialog-gerer-ingredients table select {
max-width: 12rem !important;
min-width: 8rem !important;
}
.dialog-gerer-ingredients table img {
width: 30px !important;
height: 30px !important;
object-fit: cover !important;
border: none !important;
}
.dice-img {
border-width: 0;
max-width: 1.5rem;
@@ -1287,6 +1408,14 @@
flex-basis: 2rem;
text-align: center;
}
.window-app.sheet .window-content .at-archetype {
border-left: 3px solid var(--color-archetype-atteint, #b8860b);
}
.window-app.sheet .window-content .archetype-check {
color: var(--color-archetype-atteint, #b8860b);
font-size: 0.75rem;
margin-left: 0.15rem;
}
.window-app.sheet .window-content .carac-value,
.window-app.sheet .window-content .competence-xp-sort {
flex-grow: 0;
@@ -1784,6 +1913,8 @@
[data-tab="items"],
[data-tab="journal"],
[data-tab="cards"],
[data-tab="tables"],
[data-tab="placeables"],
[data-tab="macros"],
[data-tab="tables"],
[data-tab="playlists"],
@@ -1813,6 +1944,9 @@
button[data-tab="scenes"] {
background-image: url("../assets/ui/icon_sidebar_scene.svg");
}
button[data-tab="placeables"] {
background-image: url("../assets/ui/icon_sidebar_placeables.svg");
}
button[data-tab="actors"] {
background-image: url("../assets/ui/icon_sidebar_actor.svg");
}
@@ -1829,7 +1963,7 @@
background-image: url("../assets/ui/icon_sidebar_macros.svg");
}
button[data-tab="tables"] {
background-image: url("../assets/ui/d100.svg");
background-image: url("../assets/ui/icon_sidebar_tables.svg");
}
button[data-tab="playlists"] {
background-image: url("../assets/ui/icon_sidebar_music.svg");
+38 -2
View File
@@ -31,7 +31,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
static get defaultOptions() {
return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, {
template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs",
width: 550,
width: 640,
showCompNiveauBase: false,
vueArchetype: false,
}, { inplace: false })
@@ -70,6 +70,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
fatigue: RdDUtility.calculFatigueHtml(formData.system.sante.fatigue.value, formData.system.sante.endurance.max)
})
this.amendTacheCommunes(formData)
formData.competences.forEach(item => {
item.system.isHidden = this.options.recherche
@@ -100,20 +101,38 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
cacheTMR: this.actor.isTMRCache()
}
formData.livresLus = formData.livres.filter(l => l.system.estCopieLue)
formData.livres = formData.livres.filter(l => !l.system.estCopieLue)
formData.race = actor.itemTypes[ITEM_TYPES.race].find(it => true)
formData.subacteurs = {
vehicules: this.actor.listeVehicules(),
montures: this.actor.listeMontures(),
suivants: this.actor.listeSuivants()
}
if (this.actor.getBestDraconic().system.niveau > -11 && !this.actor.isHautRevant()) {
if (this.actor.getDraconics().find(it => it.system.niveau > -11) && !this.actor.isHautRevant()) {
ui.notifications.error(`${this.actor.name} a des compétences draconiques, mais pas le don de Haut-Rêve!
<br>Ajoutez-lui la tête "Don de Haut-Rêve" pour lui permettre d'utiliser ses compétences et d'accéder aux terres médianes du rêve`);
}
}
else {
console.error("Ouverture actor-sheet avec un acteur non personnage")
}
return formData;
}
amendTacheCommunes(formData) {
formData.taches
.forEach(tache => {
if (tache.isTacheCommune()) {
const tacheCommune = tache.getTacheOuCommune()
tache.system = foundry.utils.duplicate(tacheCommune.system)
tache.system.tacheCommuneId = tache.system.tacheCommuneId
}
return tache
})
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
@@ -196,6 +215,23 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
this.html.find('.action-recettecuisine').click(async event => await this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event)))
this.html.find('.description-aleatoire').click(async event => new AppPersonnageAleatoire(this.actor).render(true))
this.html.find('.gerer-herbes').click(async event => {
const { DialogGererHerbes } = await import("./dialog-gerer-herbes.js")
DialogGererHerbes.create(this.actor)
})
this.html.find('.gerer-ingredients').click(async event => {
const { DialogGererIngredients } = await import("./dialog-gerer-ingredients.js")
DialogGererIngredients.create(this.actor)
})
this.html.find('.gerer-deniers').click(async event => {
const { DialogGererDeniers } = await import("./dialog-gerer-deniers.js")
DialogGererDeniers.create(this.actor)
})
this.html.find('.gerer-potions').click(async event => {
const { DialogGererPotions } = await import("./dialog-gerer-potions.js")
DialogGererPotions.create(this.actor)
})
if (game.user.isGM) {
// experience log
this.html.find('.experiencelog-delete').click(async event => {
+38 -49
View File
@@ -41,7 +41,7 @@ import { RdDItemCompetence } from "./item-competence.js";
import { RdDItemSigneDraconique } from "./item/signedraconique.js";
import { RdDRencontre } from "./item/rencontre.js";
import { DialogSelect } from "./dialog-select.js";
import { CATEGORIES_COMPETENCES, PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js";
import { CATEGORIES_COMPETENCES, PAS_DE_DRACONIC, SANS_DRACONIC } from "./item/base-items.js";
import { RdDRollResult } from "./rdd-roll-result.js";
import { RdDInitiative } from "./initiative.mjs";
@@ -165,10 +165,9 @@ export class RdDActor extends RdDBaseActorSang {
? this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == CATEGORIES_COMPETENCES.draconic.key)
: []
}
getBestDraconic() { return foundry.utils.duplicate([...this.getDraconics(), PAS_DE_DRACONIC].sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
getConjurationNaturelle() {
return new RdDItemCompetence(POSSESSION_SANS_DRACONIC)
return new RdDItemCompetence(SANS_DRACONIC)
}
isForceInsuffisante(forceRequise) {
@@ -694,7 +693,7 @@ export class RdDActor extends RdDBaseActorSang {
const rencontre = await game.system.rdd.rencontresTMR.getReveDeDragon(force);
let rollData = {
actor: this,
competence: this.getDraconicOuPossession().find(it => true),
competence: this.getBestDraconic(),
canClose: false,
rencontre: rencontre,
tmr: true,
@@ -1265,6 +1264,7 @@ export class RdDActor extends RdDBaseActorSang {
if (tache) {
await this.rollTache(tache.id);
}
await this.creerCopieLue(item)
}
async fabriquerDecoctionHerbe(item) {
@@ -1570,9 +1570,10 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async ajoutExperience(rollData, hideChatMessage = 'show') {
const rollMode = rollData.current?.rollmode?.key ?? game.settings.get("core", "rollMode")
if (!rollData.rolled.isPart ||
rollData.finalLevel >= 0 ||
game.settings.get("core", "rollMode") == 'selfroll' ||
rollMode == 'selfroll' ||
!Misc.hasConnectedGM()) {
return
}
@@ -1795,36 +1796,6 @@ export class RdDActor extends RdDBaseActorSang {
}
}
/**
* Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue
* @param {*} caracName
* @param {*} compName
* @param {*} diff
* @param {*} options
* @returns
*/
async doRollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
const carac = this.getCaracByName(caracName);
if (!carac) {
ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`)
return;
}
const competence = this.getCompetence(compName);
let rollData = {
alias: this.getAlias(),
caracValue: Number(carac.value),
selectedCarac: carac,
competence: competence,
diffLibre: diff,
show: { title: options?.title ?? '' }
};
RollDataAjustements.calcul(rollData, this);
await RdDResolutionTable.rollData(rollData);
this.ajoutExperience(rollData);
await RdDRollResult.displayRollData(rollData, this)
return rollData.rolled;
}
/* -------------------------------------------- */
async creerTacheDepuisLivre(item, options = { renderSheet: true }) {
const nomTache = "Lire " + item.name;
@@ -1868,12 +1839,12 @@ export class RdDActor extends RdDBaseActorSang {
return undefined;
}
async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
async rollCaracCompetence(caracName, compName, diff, options = { title: undefined, verb: undefined }) {
if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
const rollData = {
ids: { actorId: this.id },
type: { allowed: [ROLL_TYPE_COMP], current: ROLL_TYPE_COMP },
type: { allowed: [ROLL_TYPE_COMP], current: ROLL_TYPE_COMP, label: options.verb },
selected: {
carac: { key: caracName },
comp: { key: compName, forced: options.forced },
@@ -1909,6 +1880,7 @@ export class RdDActor extends RdDBaseActorSang {
RdDEmpoignade.checkEmpoignadeEnCours(this)
const tache = this.getTache(id)
if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
options.title = options.title ?? 'Jet de Tâche'
const rollData = {
ids: { actorId: this.id },
selected: { tache: { key: tache.id, forced: options.forced } },
@@ -1941,22 +1913,34 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async _tacheResult(rollData, options) {
// Mise à jour de la tache
rollData.appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue");
rollData.tache = foundry.utils.duplicate(rollData.tache);
rollData.tache.system.points_de_tache_courant += rollData.rolled.ptTache;
rollData.appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue")
const tacheCommuneId = rollData.tache.system.tacheCommuneId;
const tache = tacheCommuneId
? game.items.get(tacheCommuneId)
: this.items.get(rollData.tache.id)
const tacheUpdates = {
system: {
points_de_tache_courant: tache.system.points_de_tache_courant + rollData.rolled.ptTache,
tentatives: tache.system.tentatives + 1
}
}
if (rollData.rolled.isETotal) {
rollData.tache.system.difficulte--;
tacheUpdates.system['difficulte'] = tache.system.difficulte - 1
}
if (rollData.rolled.isSuccess) {
rollData.tache.system.nb_jet_succes++;
tacheUpdates.system['nb_jet_succes'] = tache.system.nb_jet_succes + 1;
} else {
rollData.tache.system.nb_jet_echec++;
tacheUpdates.system['nb_jet_echec'] = tache.tache.system.nb_jet_echec + 1
}
rollData.tache.system.tentatives = rollData.tache.system.nb_jet_succes + rollData.tache.system.nb_jet_echec;
await this.updateEmbeddedDocuments('Item', [rollData.tache]);
await tache.update(tacheUpdates)
await this.santeIncDec("fatigue", rollData.tache.system.fatigue);
if (rollData.tache.system.tacheCommuneId != "") {
rollData.tache.render()
}
await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-tache.hbs');
if (options?.callbacks) {
await Promise.all(callbacks.map(callback => callback(rollData)))
@@ -2054,7 +2038,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async rollLireSigneDraconique(coord) {
if (!this.isHautRevant()) {
ui.notifications.info("Seul un haut rêvant peut lire un signe draconique!");
ui.notifications.info("Seul un haut rêvant peut lire un signe draconique!")
return
}
let signes = this._getSignesDraconiques(coord)
@@ -2064,6 +2048,7 @@ export class RdDActor extends RdDBaseActorSang {
}
let draconicList = this.getDraconics()
.filter(it => it.system.niveau > -11)
.map(draconic => {
let draconicLecture = foundry.utils.duplicate(draconic)
draconicLecture.system.defaut_carac = "intellect"
@@ -2438,7 +2423,9 @@ export class RdDActor extends RdDBaseActorSang {
const tacheId = (await this.getTacheBlessure(blesse, blessure))?.id
return await this.rollTache(tacheId, {
callbacks: [async r => await blesse.callbackPremiersSoins(blessureId, r, this.id)],
title: 'Premiers soins', forced: true
verb: "soigne",
title: 'Premiers soins',
forced: true
});
}
else if (!blessure.system.soinscomplets.done) {
@@ -2446,7 +2433,9 @@ export class RdDActor extends RdDBaseActorSang {
return await this.rollCaracCompetence(CARACS.DEXTERITE, "Chirurgie", diff, {
callbacks: [async r => await blesse.onRollSoinsComplets(blessureId, r, this.id)],
onRollDone: RollDialog.onRollDoneClose,
title: "Soins complets", forced: true
verb: "applique des soins complets à",
title: "Soins complets",
forced: true
})
}
}
+1 -1
View File
@@ -14,7 +14,7 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(RdDBaseActorSheet.defaultOptions, {
width: 550
width: 640
});
}
+11 -8
View File
@@ -22,7 +22,7 @@ import { DialogValidationEncaissement } from "../dialog-validation-encaissement.
import { RdDCombat } from "../rdd-combat.js";
import { RdDEmpoignade } from "../rdd-empoignade.js";
import { RdDPossession } from "../rdd-possession.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, CATEGORIES_COMPETENCES_CREATURES } from "../item/base-items.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, CATEGORIES_COMPETENCES_CREATURES, SANS_DRACONIC } from "../item/base-items.js";
import { RollDataAjustements } from "../rolldata-ajustements-v1.js";
import { MappingCreatureArme } from "../item/mapping-creature-arme.mjs";
import RollDialog from "../roll/roll-dialog.mjs";
@@ -102,17 +102,18 @@ export class RdDBaseActorReve extends RdDBaseActor {
}
getDraconics() { return [] }
getDraconicOuPossession() {
getDraconicOuNaturel(options = {possession: false}) {
return [
...this.getDraconics(),
...this.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.isCompetencePossession()),
this.getConjurationNaturelle()
options.possession ? this.getConjurationNaturelle() : SANS_DRACONIC
].sort(Misc.descending(it => it.system.niveau));
}
getConjurations() {
return this.getDraconicOuPossession()
.map(it => this.toActionConjuration(it))
getBestDraconic(options = {possession: false}) {
return this.getDraconicOuNaturel(options)
.find(it => true)
}
getConjurationNaturelle() {
@@ -347,7 +348,8 @@ export class RdDBaseActorReve extends RdDBaseActor {
});
}
/**
* Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue
* Méthode pour faire un jet prédéterminé sans ouvrir la fenêtre de dialogue
*
* @param {*} caracName code ou label de la caractéristique. On peut utiliser 'intel' pour Intellect.
* @param {*} compName nom de compétence ou nom abrégé.
* @param {*} diff difficulté (0 si undefined)
@@ -367,12 +369,13 @@ export class RdDBaseActorReve extends RdDBaseActor {
selectedCarac: carac,
competence: competence,
diffLibre: diff ?? 0,
current: { rollmode: { key: game.settings.get("core", "rollMode") } },
show: { title: options?.title ?? '' }
}
RollDataAjustements.calcul(rollData, this);
await RdDResolutionTable.rollData(rollData);
this.ajoutExperience(rollData);
await RdDResolutionTable.displayRollData(rollData, this)
await RdDRollResult.displayRollData(rollData, this)
return rollData.rolled;
}
+1 -1
View File
@@ -17,12 +17,12 @@ import { CARACS } from "../rdd-carac.js";
*/
export class RdDBaseActorSang extends RdDBaseActorReve {
async _preUpdate(changed, options, user) {
const updatedEndurance = changed?.system?.sante?.endurance
if (updatedEndurance && options.diff) {
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
}
return super._preUpdate(changed, options, user)
}
prepareActorData() {
+67 -2
View File
@@ -23,7 +23,9 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
classes: ["rdd", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],
vueDetaillee: false
scrollY: [".sheet-body"],
vueDetaillee: false,
triEquipement: 'name'
}, { inplace: false })
}
@@ -45,7 +47,7 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
effects: this.actor.effects
}
RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes);
RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes, this.options.triEquipement);
formData.calc = {
fortune: Monnaie.toSolsDeniers(this.actor.getFortune()),
prixTotalEquipement: this.actor.computePrixTotalEquipement(),
@@ -104,6 +106,16 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
this.html.find('.recherche').prop("disabled", false)
this.html.find('.item-list .item').dblclick(async event => {
const item = this.getItem(event)
if (item) item.sheet.render(true)
})
this.html.find('.tri-equipement').change(event => {
this.options.triEquipement = event.currentTarget.value;
this.render(true);
})
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
@@ -111,6 +123,46 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
this.html.find('.item-delete').click(async event => await RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor));
this.html.find('.item-quantite-plus').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), 1));
this.html.find('.item-quantite-moins').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), -1));
this.html.find('.item-quantite').change(async event => {
const input = event.currentTarget;
const item = this.actor.items.get(input.dataset.itemId);
if (item) {
const newQty = Math.max(0, parseInt(input.value) || 0);
await item.update({ 'system.quantite': newQty });
if (newQty === 0) this.render(true);
}
})
this.html.find('.item-quantite').on('contextmenu', async event => {
event.preventDefault()
const item = this.getItem(event)
if (!item?.isInventaire()) return
new Dialog({
title: `Quantité — ${item.name}`,
content: `<p>Réduire la quantité de :</p>
<select class="qty-amount" style="width:100%">
<option value="1">1</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="all">Tout jeter</option>
</select>`,
buttons: {
reduce: {
icon: '<i class="fas fa-minus"></i>',
label: 'Retirer',
callback: html => {
const amount = html.find('.qty-amount').val()
if (amount === 'all') {
item.delete()
this.render(true)
} else {
item.update({ 'system.quantite': Math.max(0, item.system.quantite - parseInt(amount)) })
}
}
}
}
}).render(true)
})
this.html.find('.creer-un-objet').click(async event => await this.selectObjetTypeToCreate())
this.html.find('.nettoyer-conteneurs').click(async event => await this.actor.nettoyerConteneurs())
@@ -180,15 +232,28 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
/* -------------------------------------------- */
async _onDropItem(event, dragData) {
const destItemId = this.html.find(event.target)?.closest('.item').attr('data-item-id')
const previousItemIds = new Set(this.actor.items.keys())
const dropParams = await RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur)
if (dropParams) {
const callSuper = await this.actor.processDropItem(dropParams)
if (callSuper) {
await super._onDropItem(event, dragData)
}
// For external drops onto a container row, place the new item inside
if (destItemId && dropParams.sourceActorId !== this.actor.id) {
const container = this.actor.items.get(destItemId)
if (container?.isConteneur()) {
const dropped = [...this.actor.items].find(i => !previousItemIds.has(i.id))
if (dropped && !this.actor.findConteneur(dropped)) {
await this.actor.ajouterDansConteneur(dropped, container, () => {})
}
}
}
}
}
/* -------------------------------------------- */
async selectObjetTypeToCreate() {
let types = this.getTypesInventaire().sort(Misc.ascending(type => Misc.typeName('Item', type)));
+18 -5
View File
@@ -147,8 +147,6 @@ export class RdDBaseActor extends Actor {
return this.name
}
isPersonnageJoueur() { return false }
getCarac() {
return foundry.utils.duplicate(this.system.carac)
}
@@ -246,7 +244,7 @@ export class RdDBaseActor extends Actor {
else {
this.renderAfterDelay(this.refreshDelayCounter)
}
}, 30)
}, 50)
}
/* -------------------------------------------- */
@@ -267,6 +265,7 @@ export class RdDBaseActor extends Actor {
return game.users.players.find(player => player.active && player.character?.id == this.id);
}
isPersonnageJoueur() { return false }
isCreatureOuEntite() { return this.isCreature() || this.isEntite() }
isCreature() { return false }
isEntite() { return false }
@@ -653,6 +652,7 @@ export class RdDBaseActor extends Actor {
else {
const wasSurenc = this.isSurenc()
this.encTotal = this.items.filter(it => RdDItem.getItemTypesInventaire().includes(it.type))
.filter(it => it.type !== ITEM_TYPES.conteneur)
.map(it => it.getEncTotal()).reduce(Misc.sum(), 0)
const isSurenc = this.isSurenc()
if (isSurenc != wasSurenc) {
@@ -712,8 +712,8 @@ export class RdDBaseActor extends Actor {
}
}
}
await this.computeEncTotal()
}
await this.computeEncTotal()
return result;
}
@@ -899,13 +899,26 @@ export class RdDBaseActor extends Actor {
actionImpossible(action) {
ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`)
}
async doRollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
}
ajoutExperience(rollData) { }
isAlcoolise() { return false }
async jetEthylisme() { this.actionImpossible("jet d'éthylisme") }
async rollAppelChance() { this.actionImpossible("appel à la chance") }
async jetDeMoral() { this.actionImpossible("jet de moral") }
async creerCopieLue(item) {
if (item.type !== ITEM_TYPES.livre) return
const existante = this.items.find(i => i.type === 'livre' && i.system.estCopieLue && i.name === item.name)
if (existante) return
const copie = item.toObject()
copie.system.estCopieLue = true
copie.system.lu = true
copie.system.quantite = 0
delete copie._id
await this.createEmbeddedDocuments('Item', [copie], { renderSheet: false })
}
async resetItemUse() { }
async incDecItemUse(itemId, shouldIncrease = true) { }
getItemUse(itemId) { return 0; }
@@ -102,12 +102,8 @@ export class AppPersonnageAleatoire extends FormApplication {
constructor(actor) {
super({})
this.actor = actor
this.current = AppPersonnageAleatoire.getActorValues()
this.checked = Object.fromEntries(CONTROLS.map(it => [it.name, [0, '', undefined].includes(it.getter(this.current))]))
}
static getActorValues() {
return Object.fromEntries(CONTROLS.map(it => [it.name, it.getter(this.actor)]));
this.current = Object.fromEntries(CONTROLS.map(it => [it.name, it.getter(this.actor)]));
this.checked = Object.fromEntries(CONTROLS.map(it => [it.name, [0, '', undefined].includes(this.current[it.name])]))
}
async getData(options) {
@@ -141,7 +137,7 @@ export class AppPersonnageAleatoire extends FormApplication {
async onApply() {
const updates = Object.fromEntries(
CONTROLS.filter(control => game.user.isGM || control.name != 'name')
.map(control => [control.path, control.getter(this.current)])
.map(control => [control.path, this.current[control.name]])
)
await this.actor.update(updates)
await this.close()
+3 -3
View File
@@ -90,9 +90,9 @@ export class DialogCreateSigneDraconique extends Dialog {
this.html.find("[name='signe.system.difficulte']").val(newSigne.system.difficulte);
this.html.find("[name='signe.system.duree']").val(newSigne.system.duree);
this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR);
this.dialogData.tmrs.forEach(t => {
this.html.find(`[data-tmr-name='${t.name}']`).prop("checked", t.selected);
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR)
this.dialogData.tmrs.forEach(it => {
this.html.find(`[data-tmr-name='${it.name}']`).prop("checked", it.selected);
})
this.setEphemere(newSigne.system.ephemere);
}
+112
View File
@@ -0,0 +1,112 @@
import { ITEM_TYPES } from "./constants.js"
import { RdDSheetUtility } from "./rdd-sheet-utility.js"
import { Monnaie } from "./item-monnaie.js"
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
export class DialogGererDeniers extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
tag: "form",
classes: ["dialog-gerer-deniers"],
form: {
submitOnChange: false,
closeOnSubmit: false
},
position: {
width: 700,
height: "auto"
},
window: {
title: "Gérer ses deniers",
icon: "fa-solid fa-coins"
}
}
static PARTS = {
form: { template: "systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-deniers.hbs" }
}
static async create(actor) {
const dialog = new DialogGererDeniers({ actor })
dialog.render(true)
}
constructor(options) {
super(options)
this.actor = options.actor
}
async _prepareContext() {
const monnaies = this.actor.itemTypes[ITEM_TYPES.monnaie] || []
const conteneurs = this.actor.itemTypes[ITEM_TYPES.conteneur] || []
const fortune = Monnaie.toSolsDeniers(this.actor.getFortune())
const monnaieData = monnaies.map(piece => ({
id: piece.id,
name: piece.name,
img: piece.img,
quantite: piece.system.quantite,
cout: piece.system.cout,
conteneurId: this.actor.findConteneur(piece)?.id || ""
}))
const conteneurOptions = [
{ id: "", name: "— Aucun —" },
...conteneurs.map(c => ({ id: c.id, name: c.name }))
]
return { monnaies: monnaieData, conteneurs: conteneurOptions, fortune }
}
async _onRender(context, options) {
this.element.querySelectorAll(".denier-moins").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const piece = this.actor.items.get(id)
if (!piece) return
const q = Number(piece.system.quantite)
if (q <= 0) return
await piece.update({ "system.quantite": Math.max(0, q - 1) })
this.render(true)
})
})
this.element.querySelectorAll(".denier-plus").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const piece = this.actor.items.get(id)
if (!piece) return
await piece.update({ "system.quantite": Number(piece.system.quantite) + 1 })
this.render(true)
})
})
this.element.querySelectorAll(".denier-edit").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const piece = this.actor.items.get(id)
if (piece) piece.sheet.render(true)
})
})
this.element.querySelectorAll(".denier-conteneur").forEach(el => {
el.addEventListener("change", async event => {
const id = RdDSheetUtility.getItemId(event)
const newConteneurId = String(event.currentTarget.value)
const piece = this.actor.items.get(id)
if (!piece) return
const currentConteneur = this.actor.findConteneur(piece)
const newConteneur = newConteneurId ? this.actor.items.get(newConteneurId) : null
if (currentConteneur) {
await this.actor.enleverDeConteneur(piece, currentConteneur, () => {})
}
if (newConteneur) {
await this.actor.ajouterDansConteneur(piece, newConteneur, () => {})
}
})
})
}
}
+122
View File
@@ -0,0 +1,122 @@
import { ITEM_TYPES } from "./constants.js"
import { RdDSheetUtility } from "./rdd-sheet-utility.js"
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
export class DialogGererHerbes extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
tag: "form",
classes: ["dialog-gerer-herbes"],
form: {
submitOnChange: false,
closeOnSubmit: false
},
position: {
width: 650,
height: "auto"
},
window: {
title: "Gérer ses herbes",
icon: "fa-solid fa-leaf"
}
}
static PARTS = {
form: { template: "systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-herbes.hbs" }
}
static async create(actor) {
const dialog = new DialogGererHerbes({ actor })
dialog.render(true)
}
constructor(options) {
super(options)
this.actor = options.actor
}
async _prepareContext() {
const herbes = this.actor.itemTypes[ITEM_TYPES.herbe] || []
const conteneurs = this.actor.itemTypes[ITEM_TYPES.conteneur] || []
const herbeData = herbes.map(herbe => ({
id: herbe.id,
name: herbe.name,
img: herbe.img,
quantite: herbe.system.quantite,
categorie: herbe.system.categorie,
niveau: herbe.system.niveau,
isHerbeAPotion: herbe.isHerbeAPotion(),
conteneurId: this.actor.findConteneur(herbe)?.id || ""
}))
const conteneurOptions = [
{ id: "", name: "— Aucun —" },
...conteneurs.map(c => ({ id: c.id, name: c.name }))
]
return { herbes: herbeData, conteneurs: conteneurOptions }
}
async _onRender(context, options) {
this.element.querySelectorAll(".herbe-moins").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const herbe = this.actor.items.get(id)
if (!herbe) return
const q = Number(herbe.system.quantite)
if (q <= 0) return
await herbe.update({ "system.quantite": Math.max(0, q - 1) })
this.render(true)
})
})
this.element.querySelectorAll(".herbe-plus").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const herbe = this.actor.items.get(id)
if (!herbe) return
await herbe.update({ "system.quantite": Number(herbe.system.quantite) + 1 })
this.render(true)
})
})
this.element.querySelectorAll(".herbe-edit").forEach(el => {
el.addEventListener("click", async event => {
const herbeId = RdDSheetUtility.getItemId(event)
const herbe = this.actor.items.get(herbeId)
if (herbe) herbe.sheet.render(true)
})
})
this.element.querySelectorAll(".herbe-decoction").forEach(el => {
el.addEventListener("click", async event => {
const herbeId = RdDSheetUtility.getItemId(event)
const herbe = this.actor.items.get(herbeId)
if (herbe) this.actor.fabriquerDecoctionHerbe(herbe)
})
})
this.element.querySelectorAll(".herbe-conteneur").forEach(el => {
el.addEventListener("change", async event => {
const herbeId = RdDSheetUtility.getItemId(event)
const newConteneurId = String(event.currentTarget.value)
const herbe = this.actor.items.get(herbeId)
if (!herbe) return
const currentConteneur = this.actor.findConteneur(herbe)
const newConteneur = newConteneurId ? this.actor.items.get(newConteneurId) : null
if (currentConteneur) {
await this.actor.enleverDeConteneur(herbe, currentConteneur, () => {})
}
if (newConteneur) {
await this.actor.ajouterDansConteneur(herbe, newConteneur, () => {})
}
})
})
}
}
+110
View File
@@ -0,0 +1,110 @@
import { ITEM_TYPES } from "./constants.js"
import { RdDSheetUtility } from "./rdd-sheet-utility.js"
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
export class DialogGererIngredients extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
tag: "form",
classes: ["dialog-gerer-ingredients"],
form: {
submitOnChange: false,
closeOnSubmit: false
},
position: {
width: 650,
height: "auto"
},
window: {
title: "Gérer ses ingrédients",
icon: "fa-solid fa-flask"
}
}
static PARTS = {
form: { template: "systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-ingredients.hbs" }
}
static async create(actor) {
const dialog = new DialogGererIngredients({ actor })
dialog.render(true)
}
constructor(options) {
super(options)
this.actor = options.actor
}
async _prepareContext() {
const ingredients = this.actor.itemTypes[ITEM_TYPES.ingredient] || []
const conteneurs = this.actor.itemTypes[ITEM_TYPES.conteneur] || []
const ingredientData = ingredients.map(ing => ({
id: ing.id,
name: ing.name,
img: ing.img,
quantite: ing.system.quantite,
categorie: ing.system.categorie,
conteneurId: this.actor.findConteneur(ing)?.id || ""
}))
const conteneurOptions = [
{ id: "", name: "— Aucun —" },
...conteneurs.map(c => ({ id: c.id, name: c.name }))
]
return { ingredients: ingredientData, conteneurs: conteneurOptions }
}
async _onRender(context, options) {
this.element.querySelectorAll(".ingredient-moins").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const ing = this.actor.items.get(id)
if (!ing) return
const q = Number(ing.system.quantite)
if (q <= 0) return
await ing.update({ "system.quantite": Math.max(0, q - 1) })
this.render(true)
})
})
this.element.querySelectorAll(".ingredient-plus").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const ing = this.actor.items.get(id)
if (!ing) return
await ing.update({ "system.quantite": Number(ing.system.quantite) + 1 })
this.render(true)
})
})
this.element.querySelectorAll(".ingredient-edit").forEach(el => {
el.addEventListener("click", async event => {
const ingId = RdDSheetUtility.getItemId(event)
const ing = this.actor.items.get(ingId)
if (ing) ing.sheet.render(true)
})
})
this.element.querySelectorAll(".ingredient-conteneur").forEach(el => {
el.addEventListener("change", async event => {
const ingId = RdDSheetUtility.getItemId(event)
const newConteneurId = String(event.currentTarget.value)
const ing = this.actor.items.get(ingId)
if (!ing) return
const currentConteneur = this.actor.findConteneur(ing)
const newConteneur = newConteneurId ? this.actor.items.get(newConteneurId) : null
if (currentConteneur) {
await this.actor.enleverDeConteneur(ing, currentConteneur, () => {})
}
if (newConteneur) {
await this.actor.ajouterDansConteneur(ing, newConteneur, () => {})
}
})
})
}
}
+121
View File
@@ -0,0 +1,121 @@
import { ITEM_TYPES } from "./constants.js"
import { RdDSheetUtility } from "./rdd-sheet-utility.js"
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
export class DialogGererPotions extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
tag: "form",
classes: ["dialog-gerer-potions"],
form: {
submitOnChange: false,
closeOnSubmit: false
},
position: {
width: 700,
height: "auto"
},
window: {
title: "Gérer ses potions",
icon: "fa-solid fa-flask"
}
}
static PARTS = {
form: { template: "systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-potions.hbs" }
}
static async create(actor) {
const dialog = new DialogGererPotions({ actor })
dialog.render(true)
}
constructor(options) {
super(options)
this.actor = options.actor
}
async _prepareContext() {
const potions = this.actor.itemTypes[ITEM_TYPES.potion] || []
const conteneurs = this.actor.itemTypes[ITEM_TYPES.conteneur] || []
const potionData = potions.map(p => ({
id: p.id,
name: p.name,
img: p.img,
quantite: p.system.quantite,
categorie: p.system.categorie,
conteneurId: this.actor.findConteneur(p)?.id || ""
}))
const conteneurOptions = [
{ id: "", name: "— Aucun —" },
...conteneurs.map(c => ({ id: c.id, name: c.name }))
]
return { potions: potionData, conteneurs: conteneurOptions }
}
async _onRender(context, options) {
this.element.querySelectorAll(".potion-moins").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const potion = this.actor.items.get(id)
if (!potion) return
const q = Number(potion.system.quantite)
if (q <= 0) return
await potion.update({ "system.quantite": Math.max(0, q - 1) })
this.render(true)
})
})
this.element.querySelectorAll(".potion-plus").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const potion = this.actor.items.get(id)
if (!potion) return
await potion.update({ "system.quantite": Number(potion.system.quantite) + 1 })
this.render(true)
})
})
this.element.querySelectorAll(".potion-consommer").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const potion = this.actor.items.get(id)
if (potion) {
await this.actor.consommerPotion(potion)
this.render(true)
}
})
})
this.element.querySelectorAll(".potion-edit").forEach(el => {
el.addEventListener("click", async event => {
const id = RdDSheetUtility.getItemId(event)
const potion = this.actor.items.get(id)
if (potion) potion.sheet.render(true)
})
})
this.element.querySelectorAll(".potion-conteneur").forEach(el => {
el.addEventListener("change", async event => {
const id = RdDSheetUtility.getItemId(event)
const newConteneurId = String(event.currentTarget.value)
const potion = this.actor.items.get(id)
if (!potion) return
const currentConteneur = this.actor.findConteneur(potion)
const newConteneur = newConteneurId ? this.actor.items.get(newConteneurId) : null
if (currentConteneur) {
await this.actor.enleverDeConteneur(potion, currentConteneur, () => {})
}
if (newConteneur) {
await this.actor.ajouterDansConteneur(potion, newConteneur, () => {})
}
})
})
}
}
+7 -15
View File
@@ -2,7 +2,7 @@ import { ChatUtility } from "./chat-utility.js";
import { Grammar } from "./grammar.js";
import { RdDInitiative } from "./initiative.mjs";
import { RdDItem } from "./item.js";
import { CATEGORIES_COMPETENCES, SANS_COMPETENCE } from "./item/base-items.js";
import { BASE_SANS_COMPETENCE, CATEGORIES_COMPETENCES } from "./item/base-items.js";
import { Misc } from "./misc.js";
const competenceTroncs = [["Esquive", "Dague", "Corps à corps"],
@@ -47,6 +47,10 @@ export class RdDItemCompetence extends RdDItem {
static get defaultIcon() { return "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp" }
static async onReady(){
RdDItemCompetence.SANS_COMPETENCE = await Item.create(BASE_SANS_COMPETENCE, { temporary: true })
}
isNiveauBase() {
return this.system.niveau == this.system.base && this.system.xp == 0
}
@@ -128,18 +132,6 @@ export class RdDItemCompetence extends RdDItem {
});
}
/* -------------------------------------------- */
static isCompetenceArme(competence) {
if (competence.isCompetence() && !competence.isCorpsACorps() && !competence.isEsquive()) {
switch (competence.system.categorie) {
case 'melee':
case 'tir':
case 'lancer':
return true;
}
}
return false;
}
/* -------------------------------------------- */
static isArmeUneMain(competence) {
@@ -238,6 +230,7 @@ export class RdDItemCompetence extends RdDItem {
if (xpManquant > 0 && stressTransforme > 0 && item.system.niveau < item.system.niveau_archetype) {
item.system.stressXpMax = Math.min(xpManquant, stressTransforme);
}
item.system.isArchetypeAtteint = item.system.niveau >= item.system.niveau_archetype;
}
/* -------------------------------------------- */
@@ -248,7 +241,7 @@ export class RdDItemCompetence extends RdDItem {
/* -------------------------------------------- */
static findCompetence(list, idOrName, options = {}) {
if (idOrName == undefined || idOrName == "") {
return RdDItemCompetence.sansCompetence();
return RdDItemCompetence.SANS_COMPETENCE
}
options = foundry.utils.mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false, inplace: false });
return RdDItemCompetence.findFirstItem(list, idOrName, options);
@@ -260,7 +253,6 @@ export class RdDItemCompetence extends RdDItem {
return Misc.findAllLike(name, list, options);
}
static sansCompetence() { return SANS_COMPETENCE }
static findFirstItem(list, idOrName, options) {
return list.find(it => it.id == idOrName && options.preFilter(it))
+1 -2
View File
@@ -14,7 +14,6 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
import { ItemAction } from "./item/item-actions.js";
import { SANS_COMPETENCE } from "./item/base-items.js";
import { Apprecier } from "./moral/apprecier.mjs";
import { CARACS } from "./rdd-carac.js";
@@ -105,7 +104,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item),
isComestible: this.item.getUtilisationCuisine(),
options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable),
competences: [new RdDItemCompetence(SANS_COMPETENCE), ...competences],
competences: [await RdDItemCompetence.SANS_COMPETENCE, ...competences],
categories: RdDItem.getCategories(this.item.type),
isAppreciable: Apprecier.isAppreciable(this.item)
}
+15 -10
View File
@@ -70,20 +70,25 @@ export class RdDItemSort extends RdDItem {
static diffReve(sort) { return RdDItemSort.toVar((sort.system.difficulte.match(/\-?(\d)+/) ? 'R' : 'R ') + sort.system.difficulte) }
static coutReve(sort) { return RdDItemSort.toVar((Number.isInteger(sort.system.ptreve) || sort.system.ptreve.match(/(\d)+\+?/) ? 'r' : 'r ') + sort.system.ptreve) }
static getDraconicsSort(competencesDraconic, sort) {
// se baser sur la voie du sort?
switch (Grammar.toLowerCaseNoAccent(sort.name)) {
case "lecture d'aura":
case "detection d'aura":
return competencesDraconic
case "annulation de magie":
return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it))
function getVoies() {
switch (Grammar.toLowerCaseNoAccent(sort.name)) {
case "lecture d'aura":
case "detection d'aura":
return competencesDraconic
case "annulation de magie":
return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it))
default:
return sort.system.draconic.split('/').map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie))
}
}
const voies = sort.system.draconic.split('/')
return voies.map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie))
return getVoies()
.filter(it => it.system.niveau > -11)
.sort(Misc.descending(it => it.system.niveau))
}
static getBestDraconicSort(competencesDraconic, sort) {
return RdDItemSort.getDraconicsSort(competencesDraconic, sort).sort(Misc.descending(it => it.system.niveau)).find(it => true)
return RdDItemSort.getDraconicsSort(competencesDraconic, sort).find(it => true)
}
static getOrdreCode(code) {
+4 -1
View File
@@ -79,6 +79,7 @@ export const defaultItemImg = {
sort: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp",
sortreserve: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp",
souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp",
tache: "systems/foundryvtt-reve-de-dragon/assets/actions/tache.svg",
tarot: "systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp",
tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp",
monnaie: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
@@ -239,7 +240,9 @@ export class RdDItem extends Item {
}
isCompetenceArme() {
return this.isCompetence() && ['melee', 'tir', 'lancer'].includes(this.system.categorie)
return this.isCompetence()
&& ['melee', 'tir', 'lancer'].includes(this.system.categorie)
&& !this.isEsquive()
}
isCompetencePossession() { return ITEM_TYPES.competencecreature == this.type && this.system.categorie == CATEGORIES_COMPETENCES_CREATURES.possession.key }
+2 -2
View File
@@ -23,7 +23,7 @@ export const CATEGORIES_COMPETENCES_CREATURES = {
possession: { key: 'possession', base: 0, label: "Possession" },
}
export const POSSESSION_SANS_DRACONIC = {
export const SANS_DRACONIC = {
name: 'Sans draconic',
type: ITEM_TYPES.competence,
img: RDD_CONFIG.icons.possession,
@@ -34,7 +34,7 @@ export const PAS_DE_DRACONIC = { name: 'Pas de draconic', type: 'competence', sy
export const BASE_CORPS_A_CORPS = { name: 'Corps à Corps', type: 'competence', system: { niveau: -6, defaut_carac: "melee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }
export const BASE_ESQUIVE = { name: 'Esquive', type: 'competence', system: { niveau: -6, defaut_carac: "derobee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp' }
export const SANS_COMPETENCE = {
export const BASE_SANS_COMPETENCE = {
name: "Sans compétence",
type: ITEM_TYPES.competence,
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp",
+15 -2
View File
@@ -92,6 +92,12 @@ const _LIRE = {
actorFilter: actor => actor.isPersonnage(),
action: (item, actor) => actor.actionLire(item)
}
const _MARQUER_LU = {
code: 'item-marquer-lu', label: 'Marquer comme lu',
icon: it => it.system.lu ? 'fa-solid fa-book-open' : 'fa-regular fa-book',
actorFilter: actor => actor.isPersonnage(),
action: async (item, actor) => { await actor.creerCopieLue(item) }
}
const _REFOULER = {
code: 'item-refouler', label: 'Refouler', icon: 'fa-solid fa-burst',
@@ -107,15 +113,22 @@ const _SORT_RESERVE = {
action: (item, actor) => actor.addSortReserve(item)
}
const _VIDER = {
code: 'item-vider', label: 'Vider le conteneur', icon: 'fa-solid fa-box-open',
filter: it => it.isConteneur() && (it.system.contenu?.length > 0),
actorFilter: actor => actor.isOwner,
action: (item, actor) => item.update({ 'system.contenu': [] })
}
export const COMMON_ACTIONS = [_EQUIPER]
export const DEFAULT_ACTIONS = [_ACHETER, _SPLIT, _SPACEHOLDER, _VENDRE, _MONTRER, _EDIT, _DELETE]
export const ITEM_ACTIONS = {
faune: [_CUISINER, _MANGER_CRU],
ingredient: [_CUISINER, _MANGER_CRU],
conteneur: [_OUVRIR],
conteneur: [_VIDER, _OUVRIR],
herbe: [_DECOCTION, _CUISINER, _MANGER_CRU],
livre: [_LIRE],
livre: [_LIRE, _MARQUER_LU],
nourritureboisson: [_MANGER, _BOIRE],
ombre: [_REFOULER],
plante: [_CUISINER, _MANGER_CRU],
+6 -4
View File
@@ -3,6 +3,8 @@ import { RdDItem } from "../item.js";
import { Misc } from "../misc.js";
import { LIST_CARAC_PERSONNAGE, RdDCarac } from "../rdd-carac.js";
const _warn = msg => ui.notifications?.warn(msg)
export class RdDItemRace extends RdDItem {
static get ITEM_TYPE() { return ITEM_TYPES.race }
@@ -15,14 +17,14 @@ export class RdDItemRace extends RdDItem {
const race = RdDItemRace.getRace(actor)
if (code == LIST_CARAC_PERSONNAGE.force.code) {
if (!race.isForceValid(actor, value)) {
ui.notifications.warn(race.system.carac.force.limitmessage)
_warn(race.system.carac.force.limitmessage)
return false
}
}
if (code == LIST_CARAC_PERSONNAGE.taille.code) {
const carac = RdDCarac.carac(code)
if (race.isMax(actor, code, value - 1)) {
ui.notifications.warn(`${value} est supérieure au maximum de ${carac.label}`)
_warn(`${value} est supérieure au maximum de ${carac.label}`)
return false
}
}
@@ -73,13 +75,13 @@ export class RdDItemRace extends RdDItem {
getValidTaille(taille) {
const min = Math.max(this.system.carac.taille.min, 0)
if (min > taille) {
ui.notifications.warn("La Taille est inférieur au minimum racial")
_warn("La Taille est inférieur au minimum racial")
return min
}
const raceMax = this.system.carac.taille.max == undefined ? 15 + this.system.carac.taille.value : this.system.carac.taille.max
const max = raceMax < 0 ? taille + 1 : raceMax
if (max < taille) {
ui.notifications.warn("La Taille est supérieure au maximum racial")
_warn("La Taille est supérieure au maximum racial")
return max
}
return taille
+3 -3
View File
@@ -24,9 +24,9 @@ export class RdDSigneDraconiqueItemSheet extends RdDItemSheetV1 {
/* -------------------------------------------- */
async getData() {
const formData = await super.getData();
this.tmrs = TMRUtility.buildSelectionTypesTMR(this.item.system.typesTMR);
formData.tmrs = this.tmrs;
return formData;
this.tmrs = TMRUtility.buildSelectionTypesTMR(this.item.system.typesTMR)
formData.tmrs = this.tmrs
return formData
}
/* -------------------------------------------- */
+33
View File
@@ -0,0 +1,33 @@
import { ITEM_TYPES } from "../constants.js";
// import { RdDItemTache } from "tache.js";
import { RdDItemSheetV1 } from "../item-sheet.js";
export class RdDTacheItemSheet extends RdDItemSheetV1 {
static get ITEM_TYPE() { return ITEM_TYPES.tache };
async getData() {
const formData = await super.getData()
if (this.item.system.tacheCommuneId) {
formData.tacheCommune = game.items.get(this.item.system.tacheCommuneId);
formData.system = formData.tacheCommune.system
formData.disabled = this.item.actor != undefined
}
return formData
}
activateListeners(html) {
super.activateListeners(html);
this.html.find('input[name="is-tache-partagee"]').click((event) => this.checktacheCommune(event.currentTarget.checked))
}
async checktacheCommune(checked) {
if (!this.item.parent) {
const tacheCommuneId = checked ? this.item.id : ""
this.item.update({ 'system.tacheCommuneId': tacheCommuneId })
}
}
}
+17
View File
@@ -0,0 +1,17 @@
import { RdDItem } from "../item.js";
export class RdDItemTache extends RdDItem {
static get defaultIcon() {
return "systems/foundryvtt-reve-de-dragon/assets/actions/tache.svg"
}
isTacheCommune() {
return this.system.tacheCommuneId != ""
}
getTacheOuCommune() {
if (this.isTacheCommune()) {
return game.items.get(this.system.tacheCommuneId)
}
return this
}
}
+1 -1
View File
@@ -231,7 +231,7 @@ export class Misc {
*/
static documentIfResponsible(document) {
if (Misc.isFirstConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isFirstOwnerPlayer(document))) {
if (document.isOwner) {
if (document?.isOwner) {
return document
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
import { ChatUtility } from "../chat-utility.js"
import { ITEM_TYPES } from "../constants.js"
import { SANS_COMPETENCE } from "../item/base-items.js"
import { RdDItemCompetence } from "../item-competence.js"
import { Misc } from "../misc.js"
import { CARACS } from "../rdd-carac.js"
import { RdDUtility } from "../rdd-utility.js"
@@ -126,7 +126,7 @@ export class Apprecier {
}
getCompetenceAppreciation() {
return [SANS_COMPETENCE.name, ""].includes(this.appreciation.competence) ? SANS_COMPETENCE : this.actor.getCompetence(this.appreciation.competence)
return [RdDItemCompetence.SANS_COMPETENCE.name, ""].includes(this.appreciation.competence) ? RdDItemCompetence.SANS_COMPETENCE : this.actor.getCompetence(this.appreciation.competence)
}
rollAppreciation(rollCallbacks = []) {
+2 -2
View File
@@ -59,8 +59,8 @@ export class RdDCombatManager extends Combat {
static getCombatant(actorId, tokenId) {
return game.combat?.combatants.find(it => it.actor.id == actorId &&
it.token.id == tokenId
return game.combat?.combatants.find(it => it.actorId == actorId &&
it.tokenId == tokenId
)
}
+4 -4
View File
@@ -340,11 +340,11 @@ export class RdDCommands {
const caracName = params[0];
let competence = length > 1 ? actors[0].getCompetence(Misc.join(params.slice(1, length), ' ')) : { name: undefined };
if (competence) {
for (let actor of actors) {
await actor.doRollCaracCompetence(caracName, competence.name, diff);
}
await Promise.all(
actors.map(it => it.doRollCaracCompetence(caracName, competence.name, diff))
)
}
return;
return
}
else {
ui.notifications.warn("Sélectionnez au moins un personnage pour lancer les dés")
+5
View File
@@ -60,6 +60,7 @@ import { RdDItemRace } from "./item/race.js"
import { RdDItemSigneDraconique } from "./item/signedraconique.js"
import { RdDItemSort } from "./item-sort.js"
import { RdDItemSouffle } from "./item/souffle.js"
import { RdDItemTache } from "./item/tache.js"
import { RdDItemTete } from "./item/tete.js"
import { RdDRencontre } from "./item/rencontre.js"
@@ -76,6 +77,7 @@ import { RdDPotionItemSheet } from "./item/sheet-potion.js"
import { RdDRencontreItemSheet } from "./item/sheet-rencontre.js"
import { RdDServiceItemSheet } from "./item/sheet-service.js"
import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js"
import { RdDTacheItemSheet } from "./item/sheet-tache.js"
import { AppAstrologie } from "./sommeil/app-astrologie.js"
import { AutoAdjustDarkness } from "./time/auto-adjust-darkness.js"
@@ -134,6 +136,7 @@ export class SystemReveDeDragon {
service: RdDItemService,
signedraconique: RdDItemSigneDraconique,
souffle: RdDItemSouffle,
tache: RdDItemTache,
tarot: items.RdDModelTarot,
tete: RdDItemTete,
}
@@ -285,6 +288,7 @@ export class SystemReveDeDragon {
RdDItemSheetV1.register(RdDRencontreItemSheet)
RdDItemSheetV1.register(RdDServiceItemSheet)
RdDItemSheetV1.register(RdDSigneDraconiqueItemSheet)
RdDItemSheetV1.register(RdDTacheItemSheet)
RdDJournalSheet.register()
// préparation des différents modules
@@ -401,6 +405,7 @@ export class SystemReveDeDragon {
RdDDice.onReady()
RollDialog.onReady()
ChatRollResult.onReady()
RdDItemCompetence.onReady()
/* -------------------------------------------- */
/* Affiche/Init le calendrier */
+1 -1
View File
@@ -95,7 +95,7 @@ export class RdDPossession {
}
static selectCompetenceDraconicOuPossession(rollData, rollingActor) {
rollData.competence = rollingActor.getDraconicOuPossession().find(it => true);
rollData.competence = rollingActor.getBestDraconic({possession: true})
if (rollingActor.isCreatureOuEntite()) {
rollData.carac = rollingActor.system.carac
rollData.competence.system.defaut_carac = CARACS.REVE
+2 -2
View File
@@ -98,7 +98,7 @@ export class RdDResolutionTable {
/* -------------------------------------------- */
static async rollData(rollData) {
rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData);
return rollData;
return rollData
}
/* -------------------------------------------- */
@@ -107,7 +107,7 @@ export class RdDResolutionTable {
this._updateChancesWithBonus(chances, rollData.bonus, finalLevel);
this._updateChancesFactor(chances, rollData.diviseurSignificative);
chances.showDice = rollData.showDice;
chances.rollMode = rollData.rollMode;
chances.rollMode = rollData.current?.rollmode?.key ?? game.settings.get("core", "rollMode")
let rolled = await this.rollChances(chances, rollData.diviseurSignificative, rollData.forceDiceResult);
rolled.caracValue = caracValue;
+1 -1
View File
@@ -6,7 +6,7 @@ export class RdDRollResult {
static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.hbs') {
return await ChatMessage.create(ChatUtility.adaptVisibility(
{ content: await RdDRollResult.buildRollDataHtml(rollData, template) },
{ actor: actor, rollMode: rollData.current?.rollmode?.key }
{ actor: actor, rollMode: rollData.current?.rollmode?.key ?? game.settings.get("core", "rollMode") }
))
}
+2 -2
View File
@@ -682,7 +682,7 @@ export class RdDTMRDialog extends Dialog {
if (this.isCaseHumide(tmr)) {
let rollData = {
actor: this.actor,
competence: foundry.utils.duplicate(this.actor.getBestDraconic()),
competence: this.actor.getBestDraconic(),
tmr: tmr,
canClose: false,
diffLibre: -7,
@@ -807,7 +807,7 @@ export class RdDTMRDialog extends Dialog {
async _conquerir(tmr, options) {
let rollData = {
actor: this.actor,
competence: foundry.utils.duplicate(this.actor.getBestDraconic()),
competence: this.actor.getBestDraconic(),
tmr: tmr,
canClose: options.canClose ?? false,
diffLibre: options.difficulte ?? -7,
+47 -8
View File
@@ -145,6 +145,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/resonances.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/taches.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/livres.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/jeux.hbs',
@@ -174,6 +175,10 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire-item.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/tooltip-bonmoments.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-herbes.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-ingredients.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-deniers.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/dialog-gerer-potions.hbs',
//Items
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs',
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs',
@@ -191,6 +196,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-bonmoment.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-carac.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-moral.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs',
// partial enums
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.hbs',
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.hbs',
@@ -413,6 +419,7 @@ export class RdDUtility {
let objet = inventaires.find(objet => (id == objet._id));
if (objet) {
objet.estContenu = true;
objet.parentConteneurName = conteneur.name;
objetVersConteneur[id] = conteneur._id;
conteneur.subItems.push(objet);
}
@@ -473,6 +480,8 @@ export class RdDUtility {
item: item,
vide: isConteneur && item.system.contenu.length == 0,
ouvert: isConteneur && RdDUtility.getAfficheContenu(item._id),
sature: isConteneur && item.system.encTotal > item.system.capacite,
fillPercent: isConteneur ? Math.min(100, (item.system.encTotal / (item.system.capacite || 1)) * 100) : 0,
options: options
};
optionsArbre.ouvert = inventaire.ouvert
@@ -483,7 +492,7 @@ export class RdDUtility {
return ligneObjet;
}
static filterItemsPerTypeForSheet(formData, itemTypes) {
static filterItemsPerTypeForSheet(formData, itemTypes, triEquipement = 'name') {
Object.values(ITEM_TYPES).forEach(t => {
formData[RdDItem.itemTypePluriel(t)] = Misc.arrayOrEmpty(itemTypes[t])
itemTypes[t].forEach(item => item.actions = item.itemActions())
@@ -493,7 +502,7 @@ export class RdDUtility {
formData.competences = formData.competences.concat(formData.competencecreatures)
formData.monnaies = formData.monnaies.sort(Monnaie.triValeurEntiere())
formData.inventaires = RdDUtility.prepareInventaire(itemTypes)
formData.inventaires = RdDUtility.prepareInventaire(itemTypes, triEquipement)
}
static buildInventaireConteneur(actorId, itemId, options) {
@@ -501,7 +510,7 @@ export class RdDUtility {
const item = actor?.items.get(itemId)
if (item?.type == ITEM_TYPES.conteneur) {
const formData = {}
RdDUtility.filterItemsPerTypeForSheet(formData, actor.itemTypes);
RdDUtility.filterItemsPerTypeForSheet(formData, actor.itemTypes, options?.triEquipement);
RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.inventaires);
item.subItems = formData.conteneurs.find(it => it._id == itemId)?.subItems;
@@ -510,11 +519,25 @@ export class RdDUtility {
return ''
}
static prepareInventaire(itemTypes) {
return RdDItem.getItemTypesInventaire('all')
static prepareInventaire(itemTypes, triEquipement = 'name') {
let items = RdDItem.getItemTypesInventaire('all')
.map(t => Misc.arrayOrEmpty(itemTypes[t]))
.reduce((a, b) => a.concat(b), [])
.sort(Misc.ascending(it => it.name))
.reduce((a, b) => a.concat(b), []);
items = items.filter(it => !(it.type === ITEM_TYPES.livre && it.system.estCopieLue));
switch (triEquipement) {
case 'type':
items.sort(Misc.ascending(it => Misc.typeName('Item', it.type)));
break;
case 'enc':
items.sort(Misc.ascending(it => it.system.encombrement ?? 0));
break;
case 'quantite':
items.sort(Misc.descending(it => it.system.quantite ?? 0));
break;
default:
items.sort(Misc.ascending(it => it.name));
}
return items;
}
/* -------------------------------------------- */
@@ -524,7 +547,23 @@ export class RdDUtility {
const profondeur = optionsArbre.profondeur;
optionsArbre.profondeur++;
const lignesContenu = conteneur.subItems.sort(Misc.ascending(it => it.name))
const sortBy = options.triEquipement || 'name';
let sorted = [...conteneur.subItems];
sorted = sorted.filter(it => !(it.type === ITEM_TYPES.livre && it.system.estCopieLue));
switch (sortBy) {
case 'type':
sorted.sort(Misc.ascending(it => Misc.typeName('Item', it.type)));
break;
case 'enc':
sorted.sort(Misc.ascending(it => it.system.encombrement ?? 0));
break;
case 'quantite':
sorted.sort(Misc.descending(it => it.system.quantite ?? 0));
break;
default:
sorted.sort(Misc.ascending(it => it.name));
}
const lignesContenu = sorted
.map(contenu => this.buildLigneInventaire(contenu, options, optionsArbre));
return `<ul class='item-list alterne-list ${display} list-item-margin${Math.min(profondeur, 6)}'>`
+6 -5
View File
@@ -90,7 +90,7 @@ const ROLL_PARTS = [
new RollPartCuisine(),
new RollPartOeuvre(),
new RollPartJeu(),
new RollPartDiff(),
new RollPartConditions(),
new RollPartEtat(),
@@ -379,7 +379,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
this.hooks = []
this.rollData = rollData
this.rollOptions = {
this.rollOptions = foundry.utils.mergeObject(rollOptions, {
callbacks: [
async r => await r.active.actor.ajoutExperience(r),
async r => await r.active.actor.appliquerAppelMoral(r),
@@ -387,7 +387,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
],
onRollDone: rollOptions.onRollDone ?? RollDialog.onRollDoneDoNothing,
onClose: rollOptions.onClose ?? RollDialog.onCloseDoNothing
}
})
this.chatRollResult = new ChatRollResult()
this.rollParts = RollDialog.getAllowedParts(rollData)
@@ -429,9 +429,10 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
.filter(it => it.section == ROLLDIALOG_SECTION.ACTION)
.filter(it => it.isActive(rollData))
.map(it => it.title(rollData))
.filter(it => it != undefined)
.reduce(Misc.joining(' '));
if (this.rollOptions.title) {
return `${this.rollOptions.title} ${title}`
return `${this.rollOptions.title}: ${title}`
}
return title
}
@@ -479,7 +480,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
.map(m => m.toTypeData(rollData))
RollBasicParts.loadSurprises(rollData, this.getSelectedType().code)
rollData.type.label = this.getSelectedType()?.title(rollData)
this.getActiveParts().forEach(p => p.applyExternalImpacts(this.getActiveParts(), rollData))
this.setSpecialComp(this.getActiveParts());
this.getActiveParts().forEach(p => p.prepareContext(rollData))
+2 -1
View File
@@ -8,7 +8,8 @@ export class RollPartAction extends RollPart {
get section() { return ROLLDIALOG_SECTION.ACTION }
title(rollData) {
return rollData.type.label
const current = this.getCurrent(rollData)
return current.verb
}
prepareContext(rollData) {
+3 -3
View File
@@ -7,7 +7,7 @@ import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_COMP = "comp"
const SANS_COMPETENCE = { key: '', label: "Sans compétence", value: 0 }
const SELECT_SANS_COMPETENCE = { key: '', label: "Sans compétence", value: 0 }
export class RollPartComp extends RollPartSelect {
@@ -34,7 +34,7 @@ export class RollPartComp extends RollPartSelect {
refs.all = all.filter(comp => Grammar.includesLowerCaseNoAccent(comp.label, selectedComp))
}
else {
refs.all = all.filter(comp => comp == SANS_COMPETENCE)
refs.all = all.filter(comp => comp == SELECT_SANS_COMPETENCE)
}
}
}
@@ -63,7 +63,7 @@ export class RollPartComp extends RollPartSelect {
.sort(Misc.ascending(it => Grammar.toLowerCaseNoAccentNoSpace(it.label)))
/* TODO: filter competences */
const listCompetences = [
SANS_COMPETENCE,
SELECT_SANS_COMPETENCE,
...competences
]
return listCompetences
+1 -1
View File
@@ -30,7 +30,7 @@ export class RollPartPossession extends RollPartSelect {
choices(refs) { return refs.all }
$getActorConjurations(rollData) {
const competences = rollData.active.actor.getDraconicOuPossession()
const competences = rollData.active.actor.getBestDraconic({possession: true})
return competences.map(RollPartPossession.extractPossession)
}
+13 -7
View File
@@ -22,8 +22,8 @@ export class RollPartTache extends RollPartSelect {
refs.forced = selected.forced
refs.all = rollData.active.actor.itemTypes[ITEM_TYPES.tache]
.filter(tache => !selected.forced || tache.id == selected.key)
.filter(tache => tache.system.points_de_tache_courant < tache.system.points_de_tache)
.map(tache => RollPartTache.$extractTache(tache, rollData.active.actor))
.filter(extract => !extract.finished)
refs.taches = refs.all
if (refs.taches.length > 0) {
@@ -34,12 +34,15 @@ export class RollPartTache extends RollPartSelect {
choices(refs) { return refs.taches }
static $extractTache(tache, actor) {
const tacheOuCommune = tache.getTacheOuCommune()
return {
key: tache.id,
label: tache.name,
value: tache.system.difficulte,
tache: tache,
comp: actor.getCompetence(tache.system.competence)
tacheCommune: tache.system.tacheCommune,
value: tacheOuCommune.system.difficulte,
tache: tacheOuCommune,
comp: actor.getCompetence(tacheOuCommune.system.competence),
finished: tacheOuCommune.system.points_de_tache_courant >= tacheOuCommune.system.points_de_tache
}
}
@@ -81,9 +84,12 @@ export class RollPartTache extends RollPartSelect {
}
onCreateUpdateItem(rollDialog, item, options, id) {
if (item.type == ITEM_TYPES.tache && item.parent?.id == rollDialog.rollData.active.actor.id) {
this.loadRefs(rollDialog.rollData)
rollDialog.render()
if (item.type == ITEM_TYPES.tache) {
if (item.parent?.id == rollDialog.rollData.active.actor.id || item.isTacheCommune()) {
// TODO: filtrer davantage
this.loadRefs(rollDialog.rollData)
rollDialog.render()
}
}
}
+2
View File
@@ -7,6 +7,8 @@ export class RollTypeAttaque extends RollType {
title(rollData) { return `attaque` }
isOpposed(rollData) { return rollData.opponent != undefined }
onSelect(rollData) {
this.setDiffType(rollData, DIFF.ATTAQUE)
}
+3
View File
@@ -6,6 +6,9 @@ export class RollTypeComp extends RollType {
get name() { return `Jet de caractéristique / compétence` }
title(rollData) {
if (rollData.type.label) {
return rollData.type.label
}
if (rollData.type.appreciation) {
return "fait un jet d'appéciation"
}
+2
View File
@@ -7,6 +7,8 @@ export class RollTypeDefense extends RollType {
title(rollData) { return `se défend${rollData.opponent ? ' de' : ''}` }
isOpposed(rollData) { return this.getOpponent(rollData) != undefined }
getOpponent(rollData) {
return rollData.attacker
}
+3
View File
@@ -13,6 +13,9 @@ export class RollTypeJeu extends RollType {
&& RollConstants.findCompetence(rollData, 'Jeu')
}
isOpposed(rollData) { return rollData.opponent != undefined }
title(rollData) {
if (rollData.opponent) {
return `joue contre`
+2
View File
@@ -14,6 +14,8 @@ export class RollTypePossession extends RollType {
return RdDPossessionV2.actionTitle(rollData.type.possession.action)
}
isOpposed(rollData) { return rollData.opponent != undefined }
onSelect(rollData) {
this.setDiffType(rollData, this.isAttaque(rollData) ? DIFF.ATTAQUE : DIFF.DEFENSE)
}
+3 -4
View File
@@ -11,7 +11,7 @@ export class RollTypeTache extends RollType {
title(rollData) {
const current = rollData.current[PART_TACHE]
const tache = current?.tache
return tache ? `travaille à sa tâche: ${tache.name}` : `n'a pas de tâches à travailler`
return tache ? "travaille à la tâche" : "n'a pas de tâches en cours"
}
onSelect(rollData) {
@@ -22,15 +22,14 @@ export class RollTypeTache extends RollType {
static async $onRollTache(rollData) {
const actor = rollData.active.actor
const tache = rollData.current[PART_TACHE].tache
const tache = rollData.current[PART_TACHE].tache.getTacheOuCommune()
rollData.current[PART_TACHE].tache = await tache.update({
await tache.update({
'system.points_de_tache_courant': tache.system.points_de_tache_courant + rollData.rolled.ptTache,
'system.nb_jet_succes': tache.system.nb_jet_succes + (rollData.rolled.isSuccess ? 1 : 0),
'system.nb_jet_echec': tache.system.nb_jet_echec + (rollData.rolled.isSuccess ? 0 : 1),
'system.difficulte': tache.system.difficulte - (rollData.rolled.isETotal ? 1 : 0),
}, { render: true })
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
await actor.santeIncDec("fatigue", tache.system.fatigue)
}
+3 -2
View File
@@ -19,9 +19,10 @@ export class RollType {
visible(rollData) { return true }
title(rollData) { return this.code }
isSelected(rollData) { return rollData.type.current == this.code }
isOpposed(rollData) { return false }
setRollDataType(rollData) {
rollData.type.opposed = rollData.opponent != undefined
rollData.type.opposed = this.isOpposed(rollData)
}
onSelect(rollData) {
+3 -1
View File
@@ -309,7 +309,9 @@ export class TMRUtility {
static buildSelectionTypesTMR(typesTMR) {
typesTMR = typesTMR ?? [];
return Object.values(TMRType).map(value => Misc.upperFirst(value.name))
return Object.values(TMRType)
.filter(it => it.type != TMR_INCONNU)
.map(it => Misc.upperFirst(it.name))
.sort()
.map(name => { return { name: name, selected: typesTMR.includes(name) } });
}
@@ -17,7 +17,7 @@ system:
tout personnage ayant au moins z&eacute;ro en Botanique.</p>
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir un prisme de cristal alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -13,7 +13,7 @@ system:
tonifiante.</p>
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -11,7 +11,7 @@ system:
<p>Une livre de coquilles donne 4 &eacute;cailles de poudre de nacre.</p>
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -7,7 +7,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: null
descriptionmj: ''
but: Amplifier le pouvoir de guérison des herbes de soin.
utilisation: null
utilisation: ''
enchantement: >-
<p>Une surpotion de soin peut &ecirc;tre enchant&eacute;e comme une simple
potion, les points de r&ecirc;ve conf&eacute;r&eacute;s &eacute;tant
@@ -11,7 +11,7 @@ system:
(INTELLECT/Botanique &agrave; -2).</p>
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -8,7 +8,7 @@ system:
description: ''
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
@@ -13,7 +13,7 @@ system:
succ&eacute;dan&eacute;.</p>
descriptionmj: ''
but: Obtenir trois doses du remède alchimique.
utilisation: null
utilisation: ''
enchantement: ''
sureffet: ''
manipulation: >-
+4 -1
View File
@@ -804,6 +804,8 @@
},
"livre": {
"templates": ["description", "inventaire"],
"lu": false,
"estCopieLue": false,
"competence": "",
"auteur": "",
"difficulte": 0,
@@ -947,7 +949,8 @@
"nb_jet_echec": 0,
"nb_jet_succes": 0,
"cacher_points_de_tache": false,
"itemId": ""
"itemId": "",
"tacheCommuneId": ""
},
"sort": {
"templates": ["description"],
+4
View File
@@ -123,7 +123,11 @@
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/jeux.hbs"}}
<div class="flexrow" style="gap:0.5rem;flex-wrap:wrap">
<a class="chat-card-button creer-une-oeuvre">Créer une oeuvre</a>
</div>
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/livres.hbs"}}
</div>
{{/if}}
{{#if options.isObserver}}{{!-- hautreve Tab --}}
+2 -1
View File
@@ -1,5 +1,5 @@
{{#unless system.isHidden}}
<li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up{{/if}}" data-item-id="{{_id}}">
<li class="item flexrow list-item {{#if system.isLevelUp}}xp-level-up{{/if}} {{#if system.isArchetypeAtteint}}at-archetype{{/if}}" data-item-id="{{_id}}">
<a class="list-item-label roll-competence flexrow" name="{{name}}" data-tooltip="Niveau {{plusMoins system.niveau}} en {{name}}">
<img class="sheet-competence-img" src="{{img}}"/>
<span>{{name}}</span>
@@ -44,6 +44,7 @@
compname="{{name}}" value="{{plusMoins system.niveau_archetype}}"
data-tooltip="Niveau d'archétype {{plusMoins system.niveau_archetype}}"
{{#if (not @root.options.vueArchetype)}}disabled{{/if}} />
{{#if system.isArchetypeAtteint}}<i class="fa-solid fa-check archetype-check"></i>{{/if}}
</div>
{{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=this options=@root.options}}
{{/if}}
+38
View File
@@ -0,0 +1,38 @@
<div>
<span class="item-name"><h4>Fortune totale: {{fortune.sols}} sols {{fortune.deniers}} deniers</h4></span>
<ul class="item-list alterne-list">
<li class="competence-header flexrow" style="padding:0 3px">
<span class="equipement-nom" style="padding-left:calc(24px + 0.2rem)">Nom</span>
<span class="equipement-detail">Valeur</span>
<span class="equipement-detail">Quantité</span>
<span class="equipement-detail" style="flex:2">Conteneur</span>
<span class="item-actions-controls item-controls">Actions</span>
</li>
{{#each monnaies as |piece|}}
<li class="item flexrow list-item" data-item-id="{{piece.id}}">
<span class="equipement-nom">
<img class="sheet-competence-img" src="{{piece.img}}" data-tooltip="{{piece.name}}"/>
<span>{{piece.name}}</span>
</span>
<span class="equipement-detail">{{piece.cout}} Sols</span>
<span class="equipement-detail" style="gap:0.125rem">
<a class="denier-moins"><i class="fa-solid fa-square-minus"></i></a>
<span>{{piece.quantite}}</span>
<a class="denier-plus"><i class="fa-solid fa-square-plus"></i></a>
</span>
<span class="equipement-detail" style="flex:2">
<select class="denier-conteneur">
{{#select piece.conteneurId}}
{{#each ../conteneurs as |c|}}
<option value="{{c.id}}">{{c.name}}</option>
{{/each}}
{{/select}}
</select>
</span>
<span class="item-controls">
<a class="denier-edit" data-tooltip="Éditer"><i class="fa-solid fa-edit"></i></a>
</span>
</li>
{{/each}}
</ul>
</div>
+42
View File
@@ -0,0 +1,42 @@
<div>
<ul class="item-list alterne-list">
<li class="competence-header flexrow" style="padding:0 3px">
<span class="equipement-nom" style="padding-left:calc(24px + 0.2rem)">Nom</span>
<span class="equipement-detail">Catégorie</span>
<span class="equipement-detail">Niveau</span>
<span class="equipement-detail">Quantité</span>
<span class="equipement-detail" style="flex:2">Conteneur</span>
<span class="item-actions-controls item-controls">Actions</span>
</li>
{{#each herbes as |herbe|}}
<li class="item flexrow list-item" data-item-id="{{herbe.id}}">
<span class="equipement-nom">
<img class="sheet-competence-img" src="{{herbe.img}}" data-tooltip="{{herbe.name}}"/>
<span>{{herbe.name}}</span>
</span>
<span class="equipement-detail">{{herbe.categorie}}</span>
<span class="equipement-detail">{{herbe.niveau}}</span>
<span class="equipement-detail" style="gap:0.125rem">
<a class="herbe-moins"><i class="fa-solid fa-square-minus"></i></a>
<span>{{herbe.quantite}}</span>
<a class="herbe-plus"><i class="fa-solid fa-square-plus"></i></a>
</span>
<span class="equipement-detail" style="flex:2">
<select class="herbe-conteneur">
{{#select herbe.conteneurId}}
{{#each ../conteneurs as |c|}}
<option value="{{c.id}}">{{c.name}}</option>
{{/each}}
{{/select}}
</select>
</span>
<span class="item-controls">
{{#if herbe.isHerbeAPotion}}
<a class="herbe-decoction" data-tooltip="Décoction"><i class="fa-solid fa-flask-vial"></i></a>
{{/if}}
<a class="herbe-edit" data-tooltip="Éditer"><i class="fa-solid fa-edit"></i></a>
</span>
</li>
{{/each}}
</ul>
</div>
@@ -0,0 +1,37 @@
<div>
<ul class="item-list alterne-list">
<li class="competence-header flexrow" style="padding:0 3px">
<span class="equipement-nom" style="padding-left:calc(24px + 0.2rem)">Nom</span>
<span class="equipement-detail">Catégorie</span>
<span class="equipement-detail">Quantité</span>
<span class="equipement-detail" style="flex:2">Conteneur</span>
<span class="item-actions-controls item-controls">Actions</span>
</li>
{{#each ingredients as |ing|}}
<li class="item flexrow list-item" data-item-id="{{ing.id}}">
<span class="equipement-nom">
<img class="sheet-competence-img" src="{{ing.img}}" data-tooltip="{{ing.name}}"/>
<span>{{ing.name}}</span>
</span>
<span class="equipement-detail">{{ing.categorie}}</span>
<span class="equipement-detail" style="gap:0.125rem">
<a class="ingredient-moins"><i class="fa-solid fa-square-minus"></i></a>
<span>{{ing.quantite}}</span>
<a class="ingredient-plus"><i class="fa-solid fa-square-plus"></i></a>
</span>
<span class="equipement-detail" style="flex:2">
<select class="ingredient-conteneur">
{{#select ing.conteneurId}}
{{#each ../conteneurs as |c|}}
<option value="{{c.id}}">{{c.name}}</option>
{{/each}}
{{/select}}
</select>
</span>
<span class="item-controls">
<a class="ingredient-edit" data-tooltip="Éditer"><i class="fa-solid fa-edit"></i></a>
</span>
</li>
{{/each}}
</ul>
</div>
+38
View File
@@ -0,0 +1,38 @@
<div>
<ul class="item-list alterne-list">
<li class="competence-header flexrow" style="padding:0 3px">
<span class="equipement-nom" style="padding-left:calc(24px + 0.2rem)">Nom</span>
<span class="equipement-detail">Catégorie</span>
<span class="equipement-detail">Quantité</span>
<span class="equipement-detail" style="flex:2">Conteneur</span>
<span class="item-actions-controls item-controls">Actions</span>
</li>
{{#each potions as |p|}}
<li class="item flexrow list-item" data-item-id="{{p.id}}">
<span class="equipement-nom">
<img class="sheet-competence-img" src="{{p.img}}" data-tooltip="{{p.name}}"/>
<span>{{p.name}}</span>
</span>
<span class="equipement-detail">{{p.categorie}}</span>
<span class="equipement-detail" style="gap:0.125rem">
<a class="potion-moins"><i class="fa-solid fa-square-minus"></i></a>
<span>{{p.quantite}}</span>
<a class="potion-plus"><i class="fa-solid fa-square-plus"></i></a>
</span>
<span class="equipement-detail" style="flex:2">
<select class="potion-conteneur">
{{#select p.conteneurId}}
{{#each ../conteneurs as |c|}}
<option value="{{c.id}}">{{c.name}}</option>
{{/each}}
{{/select}}
</select>
</span>
<span class="item-controls">
<a class="potion-consommer" data-tooltip="Consommer"><i class="fa-solid fa-vial"></i></a>
<a class="potion-edit" data-tooltip="Éditer"><i class="fa-solid fa-edit"></i></a>
</span>
</li>
{{/each}}
</ul>
</div>
+18 -4
View File
@@ -13,23 +13,37 @@
</a>
{{else}}
<img class="sheet-competence-img" src="{{item.img}}"/>
<span>{{item.name}}{{#if item.system.magique}} <i class="fa-solid fa-sparkles" data-tooltip="Enchantement"></i>{{/if}}</span>
<a class="item-edit">{{item.name}}{{#if item.system.magique}} <i class="fa-solid fa-sparkles" data-tooltip="Enchantement"></i>{{/if}}</a>
{{#if (eq item.type 'arme')}}
{{>"systems/foundryvtt-reve-de-dragon/templates/item/icon-arme-broken.hbs" item}}
{{/if}}
</span>
{{/if}}
{{#if item.parentConteneurName}}
<span class="conteneur-parent-badge">{{item.parentConteneurName}}</span>
{{/if}}
</span>
<span class="equipement-detail">
{{#if (gt item.system.quantite 1)}}
<a class="item-quantite-moins" data-tooltip="Diminuer la quantité de {{item.name}}"><i class="fa-solid fa-square-minus"></i></a>
{{/if}}
{{item.system.quantite}}
<input class="item-quantite number-x2" type="number" data-dtype="Number"
value="{{item.system.quantite}}" data-item-id="{{item._id}}" />
{{#if @root.options.isGM}}
<a class="item-quantite-plus" data-tooltip="Augmenter la quantité de {{item.name}}"><i class="fa-solid fa-square-plus"></i></a>
{{/if}}
</span>
<span class="equipement-detail">{{numberFormat item.system.encTotal decimals=2}}</span>
<span class="equipement-detail {{#if sature}}conteneur-sature{{/if}}">
{{#if (eq item.type 'conteneur')}}
{{numberFormat item.system.encTotal decimals=2}} / {{item.system.capacite}}
{{else}}
{{numberFormat item.system.encTotal decimals=2}}
{{/if}}
{{#if (eq item.type 'conteneur')}}
<div class="conteneur-capacity-bar">
<div class="conteneur-capacity-fill" style="width: {{fillPercent}}%"></div>
</div>
{{/if}}
</span>
{{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=item options=options}}
</li>
{{/if}}
+9 -29
View File
@@ -1,29 +1,9 @@
{{#if @root.options.isObserver}}
<span class="item-name"><h4>Argent et Monnaies (fortune: {{calc.fortune.sols}} sols {{calc.fortune.deniers}} deniers)</h4></span>
<ul class="item-list alterne-list">
{{#each monnaies as |piece id|}}
<li class="item flexrow list-item" data-item-id="{{piece._id}}">
<img class="sheet-competence-img" src="{{piece.img}}" data-tooltip="{{piece.name}}"/>
<span class="equipement-nom {{#unless (gt piece.system.cout 0)}}field-error{{/unless}}">
{{piece.name}} ({{piece.system.cout}} Sols)
</span>
<span class="equipement-detail">
{{#if @root.options.isOwner}}
<span class="item-controls">
<a class="item-quantite-moins"><i class="fa-solid fa-square-minus"></i></a>
</span>
<span class="equipement-detail">{{piece.system.quantite}}</span>
<span class="item-controls">
<a class="item-quantite-plus"><i class="fa-solid fa-square-plus"></i></a>
</span>
{{else}}
{{piece.system.quantite}}
{{/if}}
</span>
{{#if @root.options.isOwner}}
{{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=signe options=@root.options}}
{{/if}}
</li>
{{/each}}
</ul>
{{/if}}
<span class="item-name">
<h4>Argent et Monnaies (fortune: {{calc.fortune.sols}} sols {{calc.fortune.deniers}} deniers)</h4>
{{#if @root.options.isOwner}}
<a class="gerer-deniers chat-card-button" data-tooltip="Gérer ses deniers">Gérer ses deniers</a>
{{#if herbes.length}}<a class="gerer-herbes chat-card-button">Gérer ses herbes</a>{{/if}}
{{#if ingredients.length}}<a class="gerer-ingredients chat-card-button">Gérer ses ingrédients</a>{{/if}}
{{#if potions.length}}<a class="gerer-potions chat-card-button">Gérer ses potions</a>{{/if}}
{{/if}}
</span>
+8 -1
View File
@@ -1,4 +1,3 @@
<h4>Equipement</h4>
<span class="item-name">
{{#if options.isOwner}}
<a class="chat-card-button creer-un-objet" data-tooltip="Créer un nouvel objet">Nouvel objet</a>
@@ -8,6 +7,14 @@
{{/if}}
<span class="embed-inline">
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche" size="8" data-dtype="String" placeholder="" data-tooltip="Rechercher dans l'équipement"/>
<select class="tri-equipement" data-tooltip="Trier par">
{{#select options.triEquipement}}
<option value="name">Nom</option>
<option value="type">Type</option>
<option value="enc">Enc.</option>
<option value="quantite">Quantité</option>
{{/select}}
</select>
</span>
{{#if calc.surEncombrementMessage}}<b>{{calc.surEncombrementMessage}}</b> &hyphen;{{/if}}
Encombrement: {{numberFormat calc.encTotal decimals=2}} (max: {{system.attributs.encombrement.value}})
+10
View File
@@ -0,0 +1,10 @@
<h3>Livres lus</h3>
<ul class="item-list alterne-list">
{{#each livresLus as |livre id|}}
<li class="item flexrow list-item" data-item-id="{{livre._id}}">
<img class="sheet-competence-img" src="{{livre.img}}" />
<span class="list-item-label">{{livre.name}}</span>
{{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=livre options=@root.options}}
</li>
{{/each}}
</ul>
+1 -1
View File
@@ -1,4 +1,4 @@
<h3>Oeuvres diverses</h3><a class="chat-card-button creer-une-oeuvre">Créer une oeuvre</a>
<h3>Oeuvres diverses</h3>
<ul class="item-list alterne-list">
{{#each (trier chants) as |chant id|}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs" oeuvre=chant typeOeuvre="Chant" classOeuvre="action-chant list-item-label"}}
@@ -8,35 +8,35 @@
{{/if}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/sexe-aleatoire.hbs"
label="Sexe" fieldname="sexe" type="text"
value=current.system.sexe checked=checked.sexe
value=current.sexe checked=checked.sexe
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Age" fieldname="age" type="entier" min=10 max=100
value=current.system.age checked=checked.age
value=current.age checked=checked.age
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Taille" fieldname="taille" type="text"
value=current.system.taille checked=checked.taille
value=current.taille checked=checked.taille
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Poids" fieldname="poids" type="text"
value=current.system.poids checked=checked.poids
value=current.poids checked=checked.poids
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Main directrice" fieldname="main" type="text"
value=current.system.main checked=checked.main
value=current.main checked=checked.main
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Heure de naissance" fieldname="heure" type="heure"
value=current.system.heure checked=checked.heure
value=current.heure checked=checked.heure
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Cheveux" fieldname="cheveux" type="text"
value=current.system.cheveux checked=checked.cheveux
value=current.cheveux checked=checked.cheveux
}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs"
label="Yeux" fieldname="yeux" type="text"
value=current.system.yeux checked=checked.yeux
value=current.yeux checked=checked.yeux
}}
</div>
<hr>
+6 -1
View File
@@ -4,10 +4,15 @@
{{#unless (eq tache.system.competence 'Chirurgie')}}
<li class="item flexrow list-item" data-item-id="{{tache._id}}" data-tooltip="Tâche: {{tache.name}}" >
<img class="sheet-competence-img" src="{{tache.img}}"/>
<span class="list-item-label"><a class="action-tache">{{tache.name}}
<span class="list-item-label"><a class="action-tache">
{{> 'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs' tache}}
{{tache.name}}
({{tache.system.points_de_tache_courant}}{{#if
(or @root.options.isGM (not tache.system.cacher_points_de_tache))
}}/{{tache.system.points_de_tache}}{{/if}})</a></span>
{{#if tache.system.tacheCommuneId}}
{{/if}}
{{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=tache options=@root.options}}
</li>
{{/unless}}
+5 -1
View File
@@ -1,5 +1,9 @@
{{#each @root.competences as |competence key|}}
{{#if (or (not ../categorie) (eq competence.system.categorie ../categorie))}}
<option value="{{competence.name}}">{{competence.name}}</option>
{{#if competence.id}}
<option value="{{competence.name}}">{{competence.name}}</option>
{{else}}
<option value="">{{competence.name}}</option>
{{/if}}
{{/if}}
{{/each}}
+1 -1
View File
@@ -4,7 +4,7 @@
<section class="sheet-body">
<div class="form-group">
<label class="item-label" for="system.but">But</label>
<inputname="system.but" value="{{system.but}}" class="attribute-value" type="text" data-dtype="String"/>
<input name="system.but" value="{{system.but}}" class="attribute-value" type="text" data-dtype="String"/>
</div>
<div class="flexcol">
<span><label class="item-label">Manipulation : </label></span>
+4
View File
@@ -0,0 +1,4 @@
{{#if system.tacheCommuneId}}
<i class="fa-solid fa-people-group"
data-tooltip="Tâche commune partagée entre plusieurs personnages"></i>
{{/if}}
+42 -14
View File
@@ -2,49 +2,72 @@
{{>"systems/foundryvtt-reve-de-dragon/templates/item/partial-header.hbs"}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{#if options.isOwned}}
{{#if system.tacheCommuneId}}
<div class="form-group">
<label>
{{> 'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs' this}}
Tâche à plusieurs
</label>
</div>
{{/if}}
{{else}}
<div class="form-group" data-tooltip="Une tâche à plusieurs ajoutée à des personnages sera partagée entre tous ces personnages">
<label>
{{> 'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs' this}}
Tâche à plusieurs
</label>
<input name="is-tache-partagee" class="attribute-value" type="checkbox" {{#if system.tacheCommuneId}}checked{{/if}}/>
</div>
{{/if}}
<div class="form-group">
<label for="system.carac">Caractéristique</label>
<select name="system.carac" data-dtype="String">
{{#select system.carac}}
{{#each caracList as |carac key|}}
<option value="{{key}}">{{carac.label}}</option>
{{/each}}
{{/select}}
<select name="system.carac" data-dtype="String" {{#if disabled}}disabled{{/if}} >
{{#select system.carac}}
{{#each caracList as |carac key|}}
<option value="{{key}}">{{carac.label}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="system.competence">Compétence</label>
<select name="system.competence" data-dtype="String">
{{#select system.competence}}
<option value="">Sans compétence</option>
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}}
{{/select}}
</select>
</div>
<select name="system.competence" data-dtype="String" {{#if disabled}}disabled{{/if}}>
{{#select system.competence}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}}
{{/select}}
</select>
</div>
<div class="form-group">
<label for="system.difficulte">Difficulté</label>
<input name="system.difficulte" value="{{system.difficulte}}" min="-10" max="10"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/>
</div>
<div class="form-group">
<label for="system.periodicite">Périodicité</label>
<input name="system.periodicite" value="{{system.periodicite}}"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="text" data-dtype="String"/>
</div>
<div class="form-group">
<label for="system.fatigue">Fatigue</label>
<input name="system.fatigue" value="{{system.fatigue}}" min="0" max="10"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/>
</div>
{{#if options.isGM}}
<div class="form-group">
<label for="system.cacher_points_de_tache">Cacher les Points de Tâches nécessaires au joueur</label>
<input name="system.cacher_points_de_tache"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="checkbox" {{checked system.cacher_points_de_tache}}/>
</div>
<div class="form-group">
<label for="system.points_de_tache">Points de tâches nécessaires (MJ)</label>
<input name="system.points_de_tache" value="{{system.points_de_tache}}" min="1"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/>
</div>
{{else}}
@@ -53,7 +76,9 @@
<label for="system.points_de_tache">Points de tâches nécessaires inconnus</label>
{{else}}
<label for="system.points_de_tache">Points de tâches nécessaires</label>
<input class="attribute-value" type="text" name="system.points_de_tache" value="{{system.points_de_tache}}" data-dtype="Number"/>
<input class="attribute-value" name="system.points_de_tache" value="{{system.points_de_tache}}"
{{#if disabled}}disabled{{/if}}
type="number" data-dtype="Number"/>
{{/if}}
</div>
{{/if}}
@@ -61,16 +86,19 @@
<div class="form-group">
<label for="system.points_de_tache_courant">Points de tâches obtenus</label>
<input name="system.points_de_tache_courant" value="{{system.points_de_tache_courant}}" min="-4" max="{{system.points_de_tache}}"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/>
</div>
<div class="form-group">
<label for="system.nb_jet_succes">Nombre de Succès</label>
<input name="system.nb_jet_succes" value="{{system.nb_jet_succes}}" min="0"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number" {{#if options.isGM}}{{else}}disabled{{/if}}/>
</div>
<div class="form-group">
<label for="system.nb_jet_echec">Nombre d'Echecs</label>
<input name="system.nb_jet_echec" value="{{system.nb_jet_echec}}" min="0"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number" {{#if options.isGM}}{{else}}disabled{{/if}}/>
</div>
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="form-group">
<label for="roll-text">Compétence</label>
<select name="roll-text" class="roll-text" data-dtype="String">
{{#select ''}}<option value="">Sans compétence</option>
{{#select ''}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}}
{{/select}}
</select>
+1
View File
@@ -16,6 +16,7 @@
</subline>
{{#if refs.taches.length}}
<subline>
{{> 'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs' current.tache}}
Points de tâche: {{current.tache.system.points_de_tache_courant}} /
{{#if current.tache.system.cacher_points_de_tache}}
(inconnus)