Compare commits

...
24 Commits
Author SHA1 Message Date
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
VincentVk e42e12f56f Publish version 1.1.1
Release Creation / build (release) Successful in 1m1s
2026-06-29 23:11:01 +02:00
VincentVk 32f99e35ef Using nodejs 24 for release actions
Release Creation / build (release) Failing after 1m19s
2026-06-29 01:00:17 +02:00
VincentVk ae42bc4aa4 Using nodejs 24 for release actions 2026-06-29 00:56:07 +02:00
VincentVk 089c0c2243 Correction des couleurs des tooltips d'aide foundry
Release Creation / build (release) Failing after 1m1s
2026-06-28 23:49:56 +02:00
VincentVk e34449631c Optimisation fenêtre de jets
La fenêtre de jet pour les attaques à distance prenait
trop de hauteur sur petit écran.

La difficulté était mal visualisée par les joueurs (et confondue
avec les conditions)

Le d100 de la zone "tricher" était un peu trop gros

Les ajustements sont organisés plus logiquement: difficulté,
conditions, ajustements à cocher
2026-06-20 18:38:48 +02:00
VincentVk f8a20b90ff Génération aléatoire d'archétype 2026-06-20 18:38:48 +02:00
VincentVk 749eb5ee13 upgrade publish action 2026-06-20 18:38:47 +02:00
VincentVk 17cb8a2e06 13.0.45
Release Creation / build (release) Successful in 1m23s
2026-06-16 23:02:39 +02:00
VincentVk 933256da66 Nouvelle correction du manifest
Release Creation / build (release) Has been cancelled
Le manifest versionné, téléchargé dans le système, pointe maintenant
sur le manifest latest.

Le lien manifest foundry est celui du manifest de la version.
2026-06-16 22:59:36 +02:00
VincentVk a58b171fb4 13.0.44 - Le dépôt d'Illisys
Release Creation / build (release) Successful in 1m5s
- le manifest pointe maintenant toujours vers la dernière version
- changement des liens dans le system.json
2026-06-15 21:26:03 +02:00
VincentVk 2eac969261 Update system.json
even if not necessary, it was referencing previous repository
2026-06-14 22:41:04 +02:00
fabres e6612fe024 Make default release as latest 2026-06-14 21:57:55 +02:00
fabres 18b9e4c7a8 Updte gitignore 2026-06-14 21:55:48 +02:00
94 changed files with 1790 additions and 750 deletions
+5 -4
View File
@@ -32,13 +32,13 @@ jobs:
env: env:
version: ${{steps.get_version.outputs.version-without-v}} version: ${{steps.get_version.outputs.version-without-v}}
url: https://gitea.scriptarium.org/${{gitea.repository}} url: https://gitea.scriptarium.org/${{gitea.repository}}
manifest: https://gitea.scriptarium.org/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json manifest: "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/releases/download/latest/system.json"
download: https://gitea.scriptarium.org/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/rddsystem.zip download: https://gitea.scriptarium.org/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/rddsystem.zip
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: "18" # Use the node version your project requires node-version: "24" # Use the node version your project requires
- name: Install dependencies - name: Install dependencies
run: npm install run: npm install
@@ -64,12 +64,13 @@ jobs:
api_key: "${{secrets.RDD_PUBLISH_RELEASE}}" api_key: "${{secrets.RDD_PUBLISH_RELEASE}}"
- name: Publish to Foundry server - name: Publish to Foundry server
uses: djlechuck/foundryvtt-publish-package-action@v1 uses: djlechuck/foundryvtt-publish-package-action@v1.1.1
with: with:
token: ${{ secrets.RDD_PUBLISH_RELEASE_FOUNDRY }} token: ${{ secrets.RDD_PUBLISH_RELEASE_FOUNDRY }}
id: "foundryvtt-reve-de-dragon" id: "foundryvtt-reve-de-dragon"
version: ${{github.event.release.tag_name}} version: ${{github.event.release.tag_name}}
manifest: "https://gitea.scriptarium.org/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json" manifest: https://gitea.scriptarium.org/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json
notes: "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md" notes: "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md"
compatibility-minimum: "13" compatibility-minimum: "13"
compatibility-verified: "13" compatibility-verified: "13"
node-version: "24"
+1
View File
@@ -12,3 +12,4 @@ todo.md
/packs/*/CURRENT /packs/*/CURRENT
/packs/*/LOG /packs/*/LOG
/packs/*/LOCK /packs/*/LOCK
.github/
+87 -1
View File
@@ -1 +1,87 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(201, 201, 201, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite>0<feOffset dx="230" dy="300" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(-100,0)" style=""><path d="m375.483 251.243-109.98 51.138.213 183.381L477.01 266.346l-86.993-21.81zm-12.736 108.626-5.947 14.699-48.604-8.955 5.007-12.832a141.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.97l14.068 2.51q-9.37 22.334-30.361 44.43-13.296 13.64-20.645 18.636zM121.603 244.334l-84.71 21.763L246.474 486V302.38l-109.946-51.137zm19.147 50.852a28.72 28.72 0 0 1 24.273 6.802 53.052 53.052 0 0 1 11.226 14.188l-13.081 2.676a28.542 28.542 0 0 0-5.388-7.374q-5.185-4.876-11.262-3.853l-.487.095a6.458 6.458 0 0 0-5.162 4.448c-.856 2.378-.238 5.554 1.796 9.371q4.08 7.6 10.81 9.027a23.785 23.785 0 0 0 8.563-.203l1.867-.344 5.791 10.822q-6.398 1.427-8.23 3.282-3.21 3.14.429 9.93a17.042 17.042 0 0 0 6.089 6.696 10.406 10.406 0 0 0 7.385 1.534l.416-.083q4.757-.964 5.079-4.757c.261-2.57-.655-5.744-2.748-9.514l12.38-2.545a49.247 49.247 0 0 1 4.103 11.226 19.956 19.956 0 0 1-.642 9.383 11.702 11.702 0 0 1-3.96 5.411 19.575 19.575 0 0 1-8.027 3.235l-1.19.214a27.971 27.971 0 0 1-17.494-2.7 32.193 32.193 0 0 1-14.128-14.092q-3.627-6.79-2.604-12.19a8.396 8.396 0 0 1 2.521-4.947h-.071q-1.844.31-7.04-2.497a32.11 32.11 0 0 1-12.916-13.593q-5.245-9.764-3.282-18.398 1.962-8.634 13.676-11zM27.19 248.865l108.78-116.309a7.135 7.135 0 0 1 1.427 0h.154q3.14.345 2.842 3.71a19.36 19.36 0 0 1-3.294 8.1 39.376 39.376 0 0 1-9.728 10.405q-3.912 2.938-15.044 9.514-12.796 7.505-19.55 14.77a92.535 92.535 0 0 0-11.513 14.486l32.907 3.758 8.182-12.963-20.967-2.378a36.415 36.415 0 0 1 4.757-3.83q2.379-1.605 8.444-5.125l6.422-3.747a92.975 92.975 0 0 0 12.903-8.776 61.472 61.472 0 0 0 12.51-14.414q6.84-10.846 6.494-17.957c-.19-3.949-2.105-6.434-5.684-7.505l79.798-85.161-102.097 179.576-5.708 10.06zm367.238-71.974q-3.817-5.458-3.758-8.515c0-2.033 1.19-3.199 3.568-3.448h.57a11.892 11.892 0 0 1 6.91 2.247 29.85 29.85 0 0 1 7.837 8.051q3.687 5.28 3.71 8.397c0 2.093-1.188 3.258-3.496 3.567h-.594a11.75 11.75 0 0 1-6.957-2.378 29.79 29.79 0 0 1-7.79-7.885zm-109.41-141.52 83.948 89.634h-1.189c-.38 0-.975 0-1.463.107q-7.825.892-8.324 6.862-.5 5.97 5.03 13.747a53.778 53.778 0 0 0 6.375 7.374 37.901 37.901 0 0 0 10.144 6.897q-2.117 2.89-.702 7.98a37.283 37.283 0 0 0 5.613 11.096 55.122 55.122 0 0 0 15.223 14.806q8.098 5.268 16.066 4.935.81 0 1.618-.13 8.776-.988 9.228-7.873a16.114 16.114 0 0 0-.463-4.853l58.689 62.686-91.572-22.941-6.1-10.703zm98.22 104.927 2.45 2.617c.451.57.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.02h-.512a10.346 10.346 0 0 1-6.077-1.95 22.596 22.596 0 0 1-6.184-6.137c-1.974-2.83-2.937-5.102-2.878-6.814.06-1.713 1.118-2.7 3.187-2.937h.524a10.263 10.263 0 0 1 6.005 1.879 19.147 19.147 0 0 1 2.533 2.01zM255.987 26 137.456 231.026l118.532 55.05 118.604-55.05zm-1.19 208.463q-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.285zm10.538-71.807q2.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.547t10.632-7.968q8.015-.012 10.513 7.956z" fill="#fff" fill-opacity="1" filter="url(#shadow-1)" transform="translate(128, 128) scale(0.5, 0.5) rotate(-30, 256, 256) skewX(0) skewY(0)"></path></g></svg> <?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 649.20972 359.75745"
version="1.1"
id="svg6"
sodipodi:docname="_d100.svg"
width="649.20972"
height="359.75745"
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" />
<dc:title></dc:title>
</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="2202"
inkscape:window-height="1379"
id="namedview8"
showgrid="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="1.4355469"
inkscape:cx="366.48667"
inkscape:cy="102.06012"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg6">
<inkscape:grid
type="xygrid"
id="grid837"
originx="110.48667"
originy="-153.93988" />
</sodipodi:namedview>
<g
class=""
id="g4"
style="fill:#ffffff"
transform="translate(-94.621782,-91.536548)">
<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"
style="fill:#ffffff" />
</g>
<g
class=""
id="g4-4"
style="fill:#ffffff"
transform="rotate(12.267903,709.7839,1245.6727)">
<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" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

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

+47
View File
@@ -1,5 +1,52 @@
# 13.0 # 13.0
## 13.0.49 - La pharmacopée d'Illisys
- 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
## 13.0.46 - L'archétype d'Illisys
- ajout d'une génération d'archétype aléatoire
- respecte les niveaux d'archétype déjà alloués
- l'archétype alloué est supérieur au niveau actuel (si c'est possible)
- les compétences supérieures à 0 ont plus de chances d'avoir les niveaux d'archétype élevés
- si tous les niveaux d'archétype supérieurs à une compétences sont déjà alloué,
l'archétype est au niveau actuel de la compétence
- Amélioration de l'affichage de la fenêtre de jets:
- La difficultée est déplacée dans la colonne des ajustements
- les ajustements sont mieux alignés
- les ajustements sont mieux ordonnés
- Les indications d'ajustements de tir prennent moins de place
- l'icône d100 est redessinée pour être mieux centrée
## 13.0.45 - L'endépôté d'Illisys
- nouvelle correction du manifest
## 13.0.44 - Le dépôt d'Illisys
- le manifest pointe maintenant toujours vers la dernière version
- changement des liens dans le system.json
## 13.0.43 - L'urgence d'Illisys ## 13.0.43 - L'urgence d'Illisys
- correction urgente des jets - correction urgente des jets
+147 -5
View File
@@ -514,6 +514,13 @@ body {
align-items: anchor-center; align-items: anchor-center;
margin: 0 0.2rem; margin: 0 0.2rem;
} }
.system-foundryvtt-reve-de-dragon .roll-dialog roll-section label,
.system-foundryvtt-reve-de-dragon .roll-dialog roll-section div label {
text-align: left;
min-width: 55%;
display: flex;
flex-direction: row;
}
.system-foundryvtt-reve-de-dragon .roll-dialog roll-resume { .system-foundryvtt-reve-de-dragon .roll-dialog roll-resume {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -670,10 +677,14 @@ body {
padding: 0; padding: 0;
filter: invert(0.8); filter: invert(0.8);
} }
.system-foundryvtt-reve-de-dragon .roll-dialog roll-conditions roll-section[name="tricher"] img { .system-foundryvtt-reve-de-dragon .roll-dialog roll-conditions roll-section[name="tricher"] label {
display: flex;
flex-direction: row;
}
.system-foundryvtt-reve-de-dragon .roll-dialog roll-conditions roll-section[name="tricher"] label img {
/* image de d100 */ /* image de d100 */
max-width: 2.5rem; max-width: 2rem;
max-height: 2.5rem; max-height: 2rem;
} }
.system-foundryvtt-reve-de-dragon .roll-dialog roll-buttons { .system-foundryvtt-reve-de-dragon .roll-dialog roll-buttons {
display: flex; display: flex;
@@ -1142,6 +1153,35 @@ body {
display: flex; display: flex;
min-width: max-content; 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 { .system-foundryvtt-reve-de-dragon .blessure-control {
flex-grow: 1; flex-grow: 1;
flex-direction: row; flex-direction: row;
@@ -1207,6 +1247,96 @@ body {
vertical-align: baseline; vertical-align: baseline;
padding: 0.1rem; 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 { .system-foundryvtt-reve-de-dragon .dice-img {
border-width: 0; border-width: 0;
max-width: 1.5rem; max-width: 1.5rem;
@@ -2387,6 +2517,8 @@ body {
[data-tab="items"], [data-tab="items"],
[data-tab="journal"], [data-tab="journal"],
[data-tab="cards"], [data-tab="cards"],
[data-tab="tables"],
[data-tab="placeables"],
[data-tab="macros"], [data-tab="macros"],
[data-tab="tables"], [data-tab="tables"],
[data-tab="playlists"], [data-tab="playlists"],
@@ -2415,6 +2547,9 @@ body {
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="scenes"] { .system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="scenes"] {
background-image: url("../assets/ui/icon_sidebar_scene.svg"); 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"] { .system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="actors"] {
background-image: url("../assets/ui/icon_sidebar_actor.svg"); background-image: url("../assets/ui/icon_sidebar_actor.svg");
} }
@@ -2431,7 +2566,7 @@ body {
background-image: url("../assets/ui/icon_sidebar_macros.svg"); background-image: url("../assets/ui/icon_sidebar_macros.svg");
} }
.system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="tables"] { .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"] { .system-foundryvtt-reve-de-dragon #sidebar-tabs menu button[data-tab="playlists"] {
background-image: url("../assets/ui/icon_sidebar_music.svg"); background-image: url("../assets/ui/icon_sidebar_music.svg");
@@ -2824,12 +2959,19 @@ body {
padding: 0.3rem; padding: 0.3rem;
font-family: "CaslonAntique"; font-family: "CaslonAntique";
} }
.system-foundryvtt-reve-de-dragon aside#tooltip h4 {
color: var(--rdd-color-text-primary);
}
.system-foundryvtt-reve-de-dragon aside#tooltip span.reference { .system-foundryvtt-reve-de-dragon aside#tooltip span.reference {
color: var(--color-tooltip); color: var(--color-tooltip);
border: 1px solid var(--color-tooltip-faint); border: 1px solid var(--color-tooltip-faint);
} }
.system-foundryvtt-reve-de-dragon aside#tooltip .toolclip p.faint { .system-foundryvtt-reve-de-dragon aside#tooltip .toolclip p.faint {
color: var(--color-tooltip-faint); color: var(--color-tooltip);
}
.system-foundryvtt-reve-de-dragon aside#tooltip .toolclip span.reference {
color: var(--color-tooltip);
background-color: var(--color-controls-hover);
} }
.system-foundryvtt-reve-de-dragon .chat-card-info { .system-foundryvtt-reve-de-dragon .chat-card-info {
font-size: 1.1rem; font-size: 1.1rem;
+145 -9
View File
@@ -415,6 +415,35 @@
display: flex; display: flex;
min-width: max-content; 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 { .blessure-control {
flex-grow: 1; flex-grow: 1;
@@ -483,6 +512,98 @@
padding: 0.1rem; 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 { .dice-img {
border-width: 0; border-width: 0;
max-width: 1.5rem; max-width: 1.5rem;
@@ -1784,6 +1905,8 @@
[data-tab="items"], [data-tab="items"],
[data-tab="journal"], [data-tab="journal"],
[data-tab="cards"], [data-tab="cards"],
[data-tab="tables"],
[data-tab="placeables"],
[data-tab="macros"], [data-tab="macros"],
[data-tab="tables"], [data-tab="tables"],
[data-tab="playlists"], [data-tab="playlists"],
@@ -1813,6 +1936,9 @@
button[data-tab="scenes"] { button[data-tab="scenes"] {
background-image: url("../assets/ui/icon_sidebar_scene.svg"); 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"] { button[data-tab="actors"] {
background-image: url("../assets/ui/icon_sidebar_actor.svg"); background-image: url("../assets/ui/icon_sidebar_actor.svg");
} }
@@ -1829,7 +1955,7 @@
background-image: url("../assets/ui/icon_sidebar_macros.svg"); background-image: url("../assets/ui/icon_sidebar_macros.svg");
} }
button[data-tab="tables"] { button[data-tab="tables"] {
background-image: url("../assets/ui/d100.svg"); background-image: url("../assets/ui/icon_sidebar_tables.svg");
} }
button[data-tab="playlists"] { button[data-tab="playlists"] {
background-image: url("../assets/ui/icon_sidebar_music.svg"); background-image: url("../assets/ui/icon_sidebar_music.svg");
@@ -2267,15 +2393,25 @@
border-radius: 0.2rem; border-radius: 0.2rem;
padding: 0.3rem; padding: 0.3rem;
font-family: "CaslonAntique"; font-family: "CaslonAntique";
}
h4{
color: var(--rdd-color-text-primary);
}
aside#tooltip span.reference { span.reference {
color: var(--color-tooltip); color: var(--color-tooltip);
border: 1px solid var(--color-tooltip-faint); border: 1px solid var(--color-tooltip-faint);
} }
aside#tooltip .toolclip p.faint { .toolclip{
color: var(--color-tooltip-faint); p.faint {
color: var(--color-tooltip);
}
span.reference{
color: var(--color-tooltip);
background-color: var(--color-controls-hover);
}
}
} }
.chat-card-info { .chat-card-info {
+20 -5
View File
@@ -32,6 +32,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
roll-conditions roll-section[name="rollmode"], roll-conditions roll-section[name="rollmode"],
roll-type { roll-type {
button[data-checked="true"] { button[data-checked="true"] {
@@ -64,6 +65,13 @@
flex-direction: row; flex-direction: row;
align-items: anchor-center; align-items: anchor-center;
margin: 0 0.2rem; margin: 0 0.2rem;
label {
text-align:left;
min-width: 55%;
display: flex;
flex-direction: row;
}
} }
roll-resume { roll-resume {
@@ -241,11 +249,18 @@
padding: 0; padding: 0;
filter: invert(0.8); filter: invert(0.8);
} }
roll-conditions roll-section[name="tricher"] img { roll-conditions roll-section[name="tricher"] {
/* image de d100 */ label {
max-width: 2.5rem; display: flex;
max-height: 2.5rem; flex-direction: row;
}
img {
/* image de d100 */
max-width: 2rem;
max-height: 2rem;
}
}
}
roll-buttons { roll-buttons {
display: flex; display: flex;
+39 -2
View File
@@ -31,7 +31,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, {
template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs", template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs",
width: 550, width: 640,
showCompNiveauBase: false, showCompNiveauBase: false,
vueArchetype: false, vueArchetype: false,
}, { inplace: 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) fatigue: RdDUtility.calculFatigueHtml(formData.system.sante.fatigue.value, formData.system.sante.endurance.max)
}) })
this.amendTacheCommunes(formData)
formData.competences.forEach(item => { formData.competences.forEach(item => {
item.system.isHidden = this.options.recherche item.system.isHidden = this.options.recherche
@@ -100,20 +101,38 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
cacheTMR: this.actor.isTMRCache() 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.race = actor.itemTypes[ITEM_TYPES.race].find(it => true)
formData.subacteurs = { formData.subacteurs = {
vehicules: this.actor.listeVehicules(), vehicules: this.actor.listeVehicules(),
montures: this.actor.listeMontures(), montures: this.actor.listeMontures(),
suivants: this.actor.listeSuivants() 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! 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`); <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; 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 */ /** @override */
activateListeners(html) { 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('.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('.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) { if (game.user.isGM) {
// experience log // experience log
this.html.find('.experiencelog-delete').click(async event => { this.html.find('.experiencelog-delete').click(async event => {
@@ -275,6 +311,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
await this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); await this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value));
}); });
this.html.find('.nouvelle-incarnation').click(async event => await this.actor.nouvelleIncarnation()) this.html.find('.nouvelle-incarnation').click(async event => await this.actor.nouvelleIncarnation())
this.html.find('.repartition-archetype-aleatoire').click(async event => await this.actor.repartitionArchetypeAleatoire())
} }
// On pts de reve change // On pts de reve change
+98 -64
View File
@@ -41,7 +41,7 @@ import { RdDItemCompetence } from "./item-competence.js";
import { RdDItemSigneDraconique } from "./item/signedraconique.js"; import { RdDItemSigneDraconique } from "./item/signedraconique.js";
import { RdDRencontre } from "./item/rencontre.js"; import { RdDRencontre } from "./item/rencontre.js";
import { DialogSelect } from "./dialog-select.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 { RdDRollResult } from "./rdd-roll-result.js";
import { RdDInitiative } from "./initiative.mjs"; 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) ? 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() { getConjurationNaturelle() {
return new RdDItemCompetence(POSSESSION_SANS_DRACONIC) return new RdDItemCompetence(SANS_DRACONIC)
} }
isForceInsuffisante(forceRequise) { isForceInsuffisante(forceRequise) {
@@ -694,7 +693,7 @@ export class RdDActor extends RdDBaseActorSang {
const rencontre = await game.system.rdd.rencontresTMR.getReveDeDragon(force); const rencontre = await game.system.rdd.rencontresTMR.getReveDeDragon(force);
let rollData = { let rollData = {
actor: this, actor: this,
competence: this.getDraconicOuPossession().find(it => true), competence: this.getBestDraconic(),
canClose: false, canClose: false,
rencontre: rencontre, rencontre: rencontre,
tmr: true, tmr: true,
@@ -1265,6 +1264,7 @@ export class RdDActor extends RdDBaseActorSang {
if (tache) { if (tache) {
await this.rollTache(tache.id); await this.rollTache(tache.id);
} }
await this.creerCopieLue(item)
} }
async fabriquerDecoctionHerbe(item) { async fabriquerDecoctionHerbe(item) {
@@ -1570,9 +1570,10 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */ /* -------------------------------------------- */
async ajoutExperience(rollData, hideChatMessage = 'show') { async ajoutExperience(rollData, hideChatMessage = 'show') {
const rollMode = rollData.current?.rollmode?.key ?? game.settings.get("core", "rollMode")
if (!rollData.rolled.isPart || if (!rollData.rolled.isPart ||
rollData.finalLevel >= 0 || rollData.finalLevel >= 0 ||
game.settings.get("core", "rollMode") == 'selfroll' || rollMode == 'selfroll' ||
!Misc.hasConnectedGM()) { !Misc.hasConnectedGM()) {
return 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 }) { async creerTacheDepuisLivre(item, options = { renderSheet: true }) {
const nomTache = "Lire " + item.name; const nomTache = "Lire " + item.name;
@@ -1868,12 +1839,12 @@ export class RdDActor extends RdDBaseActorSang {
return undefined; 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)) { if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
const rollData = { const rollData = {
ids: { actorId: this.id }, 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: { selected: {
carac: { key: caracName }, carac: { key: caracName },
comp: { key: compName, forced: options.forced }, comp: { key: compName, forced: options.forced },
@@ -1909,6 +1880,7 @@ export class RdDActor extends RdDBaseActorSang {
RdDEmpoignade.checkEmpoignadeEnCours(this) RdDEmpoignade.checkEmpoignadeEnCours(this)
const tache = this.getTache(id) const tache = this.getTache(id)
if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) { if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
options.title = options.title ?? 'Jet de Tâche'
const rollData = { const rollData = {
ids: { actorId: this.id }, ids: { actorId: this.id },
selected: { tache: { key: tache.id, forced: options.forced } }, selected: { tache: { key: tache.id, forced: options.forced } },
@@ -1941,22 +1913,34 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */ /* -------------------------------------------- */
async _tacheResult(rollData, options) { async _tacheResult(rollData, options) {
// Mise à jour de la tache // Mise à jour de la tache
rollData.appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue"); rollData.appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue")
rollData.tache = foundry.utils.duplicate(rollData.tache);
rollData.tache.system.points_de_tache_courant += rollData.rolled.ptTache; 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) { if (rollData.rolled.isETotal) {
rollData.tache.system.difficulte--; tacheUpdates.system['difficulte'] = tache.system.difficulte - 1
} }
if (rollData.rolled.isSuccess) { if (rollData.rolled.isSuccess) {
rollData.tache.system.nb_jet_succes++; tacheUpdates.system['nb_jet_succes'] = tache.system.nb_jet_succes + 1;
} else { } 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); 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'); await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-tache.hbs');
if (options?.callbacks) { if (options?.callbacks) {
await Promise.all(callbacks.map(callback => callback(rollData))) await Promise.all(callbacks.map(callback => callback(rollData)))
@@ -2054,7 +2038,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollLireSigneDraconique(coord) { async rollLireSigneDraconique(coord) {
if (!this.isHautRevant()) { 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 return
} }
let signes = this._getSignesDraconiques(coord) let signes = this._getSignesDraconiques(coord)
@@ -2064,6 +2048,7 @@ export class RdDActor extends RdDBaseActorSang {
} }
let draconicList = this.getDraconics() let draconicList = this.getDraconics()
.filter(it => it.system.niveau > -11)
.map(draconic => { .map(draconic => {
let draconicLecture = foundry.utils.duplicate(draconic) let draconicLecture = foundry.utils.duplicate(draconic)
draconicLecture.system.defaut_carac = "intellect" draconicLecture.system.defaut_carac = "intellect"
@@ -2438,7 +2423,9 @@ export class RdDActor extends RdDBaseActorSang {
const tacheId = (await this.getTacheBlessure(blesse, blessure))?.id const tacheId = (await this.getTacheBlessure(blesse, blessure))?.id
return await this.rollTache(tacheId, { return await this.rollTache(tacheId, {
callbacks: [async r => await blesse.callbackPremiersSoins(blessureId, r, this.id)], 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) { else if (!blessure.system.soinscomplets.done) {
@@ -2446,7 +2433,9 @@ export class RdDActor extends RdDBaseActorSang {
return await this.rollCaracCompetence(CARACS.DEXTERITE, "Chirurgie", diff, { return await this.rollCaracCompetence(CARACS.DEXTERITE, "Chirurgie", diff, {
callbacks: [async r => await blesse.onRollSoinsComplets(blessureId, r, this.id)], callbacks: [async r => await blesse.onRollSoinsComplets(blessureId, r, this.id)],
onRollDone: RollDialog.onRollDoneClose, onRollDone: RollDialog.onRollDoneClose,
title: "Soins complets", forced: true verb: "applique des soins complets à",
title: "Soins complets",
forced: true
}) })
} }
} }
@@ -2975,19 +2964,19 @@ export class RdDActor extends RdDBaseActorSang {
} }
async nouvelleIncarnation() { async nouvelleIncarnation() {
let incarnation = this.toObject(); let incarnation = this.toObject()
incarnation.items = Array.from(this.items.filter(it => it.type == ITEM_TYPES.competence), incarnation.items = Array.from(this.itemTypes[ITEM_TYPES.competence],
it => { it => {
it = it.toObject(); it = it.toObject()
it.id = undefined; it.id = undefined
it.system.niveau = it.system.base; it.system.niveau = it.system.base
it.system.niveau_archetype = Math.max(it.system.niveau + (it.system.xp > 0 ? 1 : 0), it.system.niveau_archetype); it.system.niveau_archetype = Math.max(it.system.niveau + (it.system.xp > 0 ? 1 : 0), it.system.niveau_archetype)
it.system.xp = 0; it.system.xp = 0
it.system.xp_sort = 0; it.system.xp_sort = 0
it.system.default_diffLibre = 0; it.system.default_diffLibre = 0
return it; return it
}); })
incarnation.name = 'Réincarnation de ' + incarnation.name incarnation.name = 'Réincarnation de ' + incarnation.name
incarnation.system = { incarnation.system = {
@@ -3002,12 +2991,57 @@ export class RdDActor extends RdDBaseActorSang {
'reve.reve.value': this.system.carac.reve.value, 'reve.reve.value': this.system.carac.reve.value,
subacteurs: { suivants: [], montures: [], vehicules: [] }, subacteurs: { suivants: [], montures: [], vehicules: [] },
} }
incarnation = await RdDBaseActor.create(incarnation); incarnation = await RdDBaseActor.create(incarnation)
await incarnation.deleteEmbeddedDocuments('ActiveEffect', incarnation.getEmbeddedCollection("ActiveEffect").map(it => it.id)); await incarnation.deleteEmbeddedDocuments('ActiveEffect', incarnation.getEmbeddedCollection("ActiveEffect").map(it => it.id))
await incarnation.remiseANeuf(); await incarnation.remiseANeuf()
incarnation.sheet.render(true); incarnation.sheet.render(true)
} }
async repartitionArchetypeAleatoire() {
const nivArchetypeDisponibles = RdDItemCompetence.computeResumeArchetype(this.itemTypes[ITEM_TYPES.competence])
.filter(it => it.reste > 0)
function proba(nivDispo, niveauActuel) {
return niveauActuel > 0 ? (nivDispo.reste + 3) : nivDispo.reste
}
async function takeNiveauArchetypeRandom(niveauMin) {
const potential = nivArchetypeDisponibles.filter(it => it.niveau >= niveauMin)
const totalChances = potential.map(it => proba(it, niveauMin)).reduce(Misc.sum(), 0)
if (totalChances > 0) {
let random = await Misc.random(totalChances)
for (const selected of potential) {
if (selected.reste > 0) {
const chances = proba(selected, niveauMin)
if (random <= chances) {
selected.nombre++
selected.reste--
return selected.niveau
}
random -= chances
}
}
}
return Math.max(0, niveauMin)
}
const compsByNiveau = Misc.classify(
this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.niveau_archetype <= 0),
it => Math.max(0, it.system.niveau))
const niveaux = Object.keys(compsByNiveau).sort(Misc.descending())
const updates = []
for (let i = 0; i < niveaux.length; i++) {
const competencesDuNiveau = Misc.shuffled(compsByNiveau[niveaux[i]])
for (let j = 0; j < competencesDuNiveau.length; j++) {
const competence = competencesDuNiveau[j]
const nivArchetype = await takeNiveauArchetypeRandom(competence.system.niveau)
updates.push({ _id: competence.id, 'system.niveau_archetype': nivArchetype })
}
}
await this.updateEmbeddedDocuments('Item', updates)
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async _rollArtV2(oeuvreId) { async _rollArtV2(oeuvreId) {
+1 -1
View File
@@ -14,7 +14,7 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return foundry.utils.mergeObject(RdDBaseActorSheet.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 { RdDCombat } from "../rdd-combat.js";
import { RdDEmpoignade } from "../rdd-empoignade.js"; import { RdDEmpoignade } from "../rdd-empoignade.js";
import { RdDPossession } from "../rdd-possession.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 { RollDataAjustements } from "../rolldata-ajustements-v1.js";
import { MappingCreatureArme } from "../item/mapping-creature-arme.mjs"; import { MappingCreatureArme } from "../item/mapping-creature-arme.mjs";
import RollDialog from "../roll/roll-dialog.mjs"; import RollDialog from "../roll/roll-dialog.mjs";
@@ -102,17 +102,18 @@ export class RdDBaseActorReve extends RdDBaseActor {
} }
getDraconics() { return [] } getDraconics() { return [] }
getDraconicOuPossession() {
getDraconicOuNaturel(options = {possession: false}) {
return [ return [
...this.getDraconics(), ...this.getDraconics(),
...this.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.isCompetencePossession()), ...this.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.isCompetencePossession()),
this.getConjurationNaturelle() options.possession ? this.getConjurationNaturelle() : SANS_DRACONIC
].sort(Misc.descending(it => it.system.niveau)); ].sort(Misc.descending(it => it.system.niveau));
} }
getConjurations() { getBestDraconic(options = {possession: false}) {
return this.getDraconicOuPossession() return this.getDraconicOuNaturel(options)
.map(it => this.toActionConjuration(it)) .find(it => true)
} }
getConjurationNaturelle() { 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 {*} 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 {*} compName nom de compétence ou nom abrégé.
* @param {*} diff difficulté (0 si undefined) * @param {*} diff difficulté (0 si undefined)
@@ -367,12 +369,13 @@ export class RdDBaseActorReve extends RdDBaseActor {
selectedCarac: carac, selectedCarac: carac,
competence: competence, competence: competence,
diffLibre: diff ?? 0, diffLibre: diff ?? 0,
current: { rollmode: { key: game.settings.get("core", "rollMode") } },
show: { title: options?.title ?? '' } show: { title: options?.title ?? '' }
} }
RollDataAjustements.calcul(rollData, this); RollDataAjustements.calcul(rollData, this);
await RdDResolutionTable.rollData(rollData); await RdDResolutionTable.rollData(rollData);
this.ajoutExperience(rollData); this.ajoutExperience(rollData);
await RdDResolutionTable.displayRollData(rollData, this) await RdDRollResult.displayRollData(rollData, this)
return rollData.rolled; return rollData.rolled;
} }
+1 -1
View File
@@ -17,12 +17,12 @@ import { CARACS } from "../rdd-carac.js";
*/ */
export class RdDBaseActorSang extends RdDBaseActorReve { export class RdDBaseActorSang extends RdDBaseActorReve {
async _preUpdate(changed, options, user) { async _preUpdate(changed, options, user) {
const updatedEndurance = changed?.system?.sante?.endurance const updatedEndurance = changed?.system?.sante?.endurance
if (updatedEndurance && options.diff) { if (updatedEndurance && options.diff) {
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0) await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
} }
return super._preUpdate(changed, options, user)
} }
prepareActorData() { prepareActorData() {
+67 -2
View File
@@ -23,7 +23,9 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
classes: ["rdd", "sheet", "actor"], classes: ["rdd", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }], tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],
vueDetaillee: false scrollY: [".sheet-body"],
vueDetaillee: false,
triEquipement: 'name'
}, { inplace: false }) }, { inplace: false })
} }
@@ -45,7 +47,7 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
effects: this.actor.effects effects: this.actor.effects
} }
RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes); RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes, this.options.triEquipement);
formData.calc = { formData.calc = {
fortune: Monnaie.toSolsDeniers(this.actor.getFortune()), fortune: Monnaie.toSolsDeniers(this.actor.getFortune()),
prixTotalEquipement: this.actor.computePrixTotalEquipement(), 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('.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 // Everything below here is only needed if the sheet is editable
if (!this.options.editable) return; 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-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-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-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('.creer-un-objet').click(async event => await this.selectObjetTypeToCreate())
this.html.find('.nettoyer-conteneurs').click(async event => await this.actor.nettoyerConteneurs()) 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) { async _onDropItem(event, dragData) {
const destItemId = this.html.find(event.target)?.closest('.item').attr('data-item-id') 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) const dropParams = await RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur)
if (dropParams) { if (dropParams) {
const callSuper = await this.actor.processDropItem(dropParams) const callSuper = await this.actor.processDropItem(dropParams)
if (callSuper) { if (callSuper) {
await super._onDropItem(event, dragData) 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() { async selectObjetTypeToCreate() {
let types = this.getTypesInventaire().sort(Misc.ascending(type => Misc.typeName('Item', type))); let types = this.getTypesInventaire().sort(Misc.ascending(type => Misc.typeName('Item', type)));
+17 -5
View File
@@ -147,8 +147,6 @@ export class RdDBaseActor extends Actor {
return this.name return this.name
} }
isPersonnageJoueur() { return false }
getCarac() { getCarac() {
return foundry.utils.duplicate(this.system.carac) return foundry.utils.duplicate(this.system.carac)
} }
@@ -246,7 +244,7 @@ export class RdDBaseActor extends Actor {
else { else {
this.renderAfterDelay(this.refreshDelayCounter) 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); return game.users.players.find(player => player.active && player.character?.id == this.id);
} }
isPersonnageJoueur() { return false }
isCreatureOuEntite() { return this.isCreature() || this.isEntite() } isCreatureOuEntite() { return this.isCreature() || this.isEntite() }
isCreature() { return false } isCreature() { return false }
isEntite() { return false } isEntite() { return false }
@@ -712,8 +711,8 @@ export class RdDBaseActor extends Actor {
} }
} }
} }
await this.computeEncTotal()
} }
await this.computeEncTotal()
return result; return result;
} }
@@ -899,13 +898,26 @@ export class RdDBaseActor extends Actor {
actionImpossible(action) { actionImpossible(action) {
ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`) ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`)
} }
async doRollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
}
ajoutExperience(rollData) { } ajoutExperience(rollData) { }
isAlcoolise() { return false } isAlcoolise() { return false }
async jetEthylisme() { this.actionImpossible("jet d'éthylisme") } async jetEthylisme() { this.actionImpossible("jet d'éthylisme") }
async rollAppelChance() { this.actionImpossible("appel à la chance") } async rollAppelChance() { this.actionImpossible("appel à la chance") }
async jetDeMoral() { this.actionImpossible("jet de moral") } 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 resetItemUse() { }
async incDecItemUse(itemId, shouldIncrease = true) { } async incDecItemUse(itemId, shouldIncrease = true) { }
getItemUse(itemId) { return 0; } getItemUse(itemId) { return 0; }
+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.difficulte']").val(newSigne.system.difficulte);
this.html.find("[name='signe.system.duree']").val(newSigne.system.duree); this.html.find("[name='signe.system.duree']").val(newSigne.system.duree);
this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere); this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR); this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR)
this.dialogData.tmrs.forEach(t => { this.dialogData.tmrs.forEach(it => {
this.html.find(`[data-tmr-name='${t.name}']`).prop("checked", t.selected); this.html.find(`[data-tmr-name='${it.name}']`).prop("checked", it.selected);
}) })
this.setEphemere(newSigne.system.ephemere); 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, () => {})
}
})
})
}
}
+1 -1
View File
@@ -105,7 +105,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item), descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item),
isComestible: this.item.getUtilisationCuisine(), isComestible: this.item.getUtilisationCuisine(),
options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable), options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable),
competences: [new RdDItemCompetence(SANS_COMPETENCE), ...competences], competences: [SANS_COMPETENCE, ...competences],
categories: RdDItem.getCategories(this.item.type), categories: RdDItem.getCategories(this.item.type),
isAppreciable: Apprecier.isAppreciable(this.item) 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 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 coutReve(sort) { return RdDItemSort.toVar((Number.isInteger(sort.system.ptreve) || sort.system.ptreve.match(/(\d)+\+?/) ? 'r' : 'r ') + sort.system.ptreve) }
static getDraconicsSort(competencesDraconic, sort) { static getDraconicsSort(competencesDraconic, sort) {
// se baser sur la voie du sort?
switch (Grammar.toLowerCaseNoAccent(sort.name)) { function getVoies() {
case "lecture d'aura": switch (Grammar.toLowerCaseNoAccent(sort.name)) {
case "detection d'aura": case "lecture d'aura":
return competencesDraconic case "detection d'aura":
case "annulation de magie": return competencesDraconic
return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it)) 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 getVoies()
return voies.map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie)) .filter(it => it.system.niveau > -11)
.sort(Misc.descending(it => it.system.niveau))
} }
static getBestDraconicSort(competencesDraconic, sort) { 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) { static getOrdreCode(code) {
+1
View File
@@ -79,6 +79,7 @@ export const defaultItemImg = {
sort: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp", sort: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp",
sortreserve: "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", 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", tarot: "systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp",
tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp", tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp",
monnaie: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp", monnaie: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
+1 -1
View File
@@ -23,7 +23,7 @@ export const CATEGORIES_COMPETENCES_CREATURES = {
possession: { key: 'possession', base: 0, label: "Possession" }, possession: { key: 'possession', base: 0, label: "Possession" },
} }
export const POSSESSION_SANS_DRACONIC = { export const SANS_DRACONIC = {
name: 'Sans draconic', name: 'Sans draconic',
type: ITEM_TYPES.competence, type: ITEM_TYPES.competence,
img: RDD_CONFIG.icons.possession, img: RDD_CONFIG.icons.possession,
+15 -2
View File
@@ -92,6 +92,12 @@ const _LIRE = {
actorFilter: actor => actor.isPersonnage(), actorFilter: actor => actor.isPersonnage(),
action: (item, actor) => actor.actionLire(item) 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 = { const _REFOULER = {
code: 'item-refouler', label: 'Refouler', icon: 'fa-solid fa-burst', code: 'item-refouler', label: 'Refouler', icon: 'fa-solid fa-burst',
@@ -107,15 +113,22 @@ const _SORT_RESERVE = {
action: (item, actor) => actor.addSortReserve(item) 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 COMMON_ACTIONS = [_EQUIPER]
export const DEFAULT_ACTIONS = [_ACHETER, _SPLIT, _SPACEHOLDER, _VENDRE, _MONTRER, _EDIT, _DELETE] export const DEFAULT_ACTIONS = [_ACHETER, _SPLIT, _SPACEHOLDER, _VENDRE, _MONTRER, _EDIT, _DELETE]
export const ITEM_ACTIONS = { export const ITEM_ACTIONS = {
faune: [_CUISINER, _MANGER_CRU], faune: [_CUISINER, _MANGER_CRU],
ingredient: [_CUISINER, _MANGER_CRU], ingredient: [_CUISINER, _MANGER_CRU],
conteneur: [_OUVRIR], conteneur: [_VIDER, _OUVRIR],
herbe: [_DECOCTION, _CUISINER, _MANGER_CRU], herbe: [_DECOCTION, _CUISINER, _MANGER_CRU],
livre: [_LIRE], livre: [_LIRE, _MARQUER_LU],
nourritureboisson: [_MANGER, _BOIRE], nourritureboisson: [_MANGER, _BOIRE],
ombre: [_REFOULER], ombre: [_REFOULER],
plante: [_CUISINER, _MANGER_CRU], plante: [_CUISINER, _MANGER_CRU],
+6 -4
View File
@@ -3,6 +3,8 @@ import { RdDItem } from "../item.js";
import { Misc } from "../misc.js"; import { Misc } from "../misc.js";
import { LIST_CARAC_PERSONNAGE, RdDCarac } from "../rdd-carac.js"; import { LIST_CARAC_PERSONNAGE, RdDCarac } from "../rdd-carac.js";
const _warn = msg => ui.notifications?.warn(msg)
export class RdDItemRace extends RdDItem { export class RdDItemRace extends RdDItem {
static get ITEM_TYPE() { return ITEM_TYPES.race } static get ITEM_TYPE() { return ITEM_TYPES.race }
@@ -15,14 +17,14 @@ export class RdDItemRace extends RdDItem {
const race = RdDItemRace.getRace(actor) const race = RdDItemRace.getRace(actor)
if (code == LIST_CARAC_PERSONNAGE.force.code) { if (code == LIST_CARAC_PERSONNAGE.force.code) {
if (!race.isForceValid(actor, value)) { if (!race.isForceValid(actor, value)) {
ui.notifications.warn(race.system.carac.force.limitmessage) _warn(race.system.carac.force.limitmessage)
return false return false
} }
} }
if (code == LIST_CARAC_PERSONNAGE.taille.code) { if (code == LIST_CARAC_PERSONNAGE.taille.code) {
const carac = RdDCarac.carac(code) const carac = RdDCarac.carac(code)
if (race.isMax(actor, code, value - 1)) { 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 return false
} }
} }
@@ -73,13 +75,13 @@ export class RdDItemRace extends RdDItem {
getValidTaille(taille) { getValidTaille(taille) {
const min = Math.max(this.system.carac.taille.min, 0) const min = Math.max(this.system.carac.taille.min, 0)
if (min > taille) { 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 return min
} }
const raceMax = this.system.carac.taille.max == undefined ? 15 + this.system.carac.taille.value : this.system.carac.taille.max 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 const max = raceMax < 0 ? taille + 1 : raceMax
if (max < taille) { 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 max
} }
return taille return taille
+3 -3
View File
@@ -24,9 +24,9 @@ export class RdDSigneDraconiqueItemSheet extends RdDItemSheetV1 {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const formData = await super.getData(); const formData = await super.getData();
this.tmrs = TMRUtility.buildSelectionTypesTMR(this.item.system.typesTMR); this.tmrs = TMRUtility.buildSelectionTypesTMR(this.item.system.typesTMR)
formData.tmrs = this.tmrs; formData.tmrs = this.tmrs
return formData; 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
}
}
+17 -3
View File
@@ -24,8 +24,7 @@ export class Misc {
return text.charAt(0).toLowerCase() + text.slice(1); return text.charAt(0).toLowerCase() + text.slice(1);
} }
static stripHtml(html) static stripHtml(html) {
{
const tmp = document.createElement("DIV") const tmp = document.createElement("DIV")
tmp.innerHTML = html tmp.innerHTML = html
return tmp.textContent || tmp.innerText || "" return tmp.textContent || tmp.innerText || ""
@@ -232,7 +231,7 @@ export class Misc {
*/ */
static documentIfResponsible(document) { static documentIfResponsible(document) {
if (Misc.isFirstConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isFirstOwnerPlayer(document))) { if (Misc.isFirstConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isFirstOwnerPlayer(document))) {
if (document.isOwner) { if (document?.isOwner) {
return document return document
} }
} }
@@ -329,4 +328,19 @@ export class Misc {
'-o-transform': rotation '-o-transform': rotation
}; };
} }
static async random(count) {
const roll = new Roll(`1d${count}`)
await roll.evaluate()
return roll.total
}
static shuffled(source) {
const result = source.slice(0)
for (let i = result.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[result[i], result[j]] = [result[j], result[i]];
}
return result
}
} }
+2 -2
View File
@@ -59,8 +59,8 @@ export class RdDCombatManager extends Combat {
static getCombatant(actorId, tokenId) { static getCombatant(actorId, tokenId) {
return game.combat?.combatants.find(it => it.actor.id == actorId && return game.combat?.combatants.find(it => it.actorId == actorId &&
it.token.id == tokenId it.tokenId == tokenId
) )
} }
+4 -4
View File
@@ -340,11 +340,11 @@ export class RdDCommands {
const caracName = params[0]; const caracName = params[0];
let competence = length > 1 ? actors[0].getCompetence(Misc.join(params.slice(1, length), ' ')) : { name: undefined }; let competence = length > 1 ? actors[0].getCompetence(Misc.join(params.slice(1, length), ' ')) : { name: undefined };
if (competence) { if (competence) {
for (let actor of actors) { await Promise.all(
await actor.doRollCaracCompetence(caracName, competence.name, diff); actors.map(it => it.doRollCaracCompetence(caracName, competence.name, diff))
} )
} }
return; return
} }
else { else {
ui.notifications.warn("Sélectionnez au moins un personnage pour lancer les dés") ui.notifications.warn("Sélectionnez au moins un personnage pour lancer les dés")
+4
View File
@@ -60,6 +60,7 @@ import { RdDItemRace } from "./item/race.js"
import { RdDItemSigneDraconique } from "./item/signedraconique.js" import { RdDItemSigneDraconique } from "./item/signedraconique.js"
import { RdDItemSort } from "./item-sort.js" import { RdDItemSort } from "./item-sort.js"
import { RdDItemSouffle } from "./item/souffle.js" import { RdDItemSouffle } from "./item/souffle.js"
import { RdDItemTache } from "./item/tache.js"
import { RdDItemTete } from "./item/tete.js" import { RdDItemTete } from "./item/tete.js"
import { RdDRencontre } from "./item/rencontre.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 { RdDRencontreItemSheet } from "./item/sheet-rencontre.js"
import { RdDServiceItemSheet } from "./item/sheet-service.js" import { RdDServiceItemSheet } from "./item/sheet-service.js"
import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js" import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js"
import { RdDTacheItemSheet } from "./item/sheet-tache.js"
import { AppAstrologie } from "./sommeil/app-astrologie.js" import { AppAstrologie } from "./sommeil/app-astrologie.js"
import { AutoAdjustDarkness } from "./time/auto-adjust-darkness.js" import { AutoAdjustDarkness } from "./time/auto-adjust-darkness.js"
@@ -134,6 +136,7 @@ export class SystemReveDeDragon {
service: RdDItemService, service: RdDItemService,
signedraconique: RdDItemSigneDraconique, signedraconique: RdDItemSigneDraconique,
souffle: RdDItemSouffle, souffle: RdDItemSouffle,
tache: RdDItemTache,
tarot: items.RdDModelTarot, tarot: items.RdDModelTarot,
tete: RdDItemTete, tete: RdDItemTete,
} }
@@ -285,6 +288,7 @@ export class SystemReveDeDragon {
RdDItemSheetV1.register(RdDRencontreItemSheet) RdDItemSheetV1.register(RdDRencontreItemSheet)
RdDItemSheetV1.register(RdDServiceItemSheet) RdDItemSheetV1.register(RdDServiceItemSheet)
RdDItemSheetV1.register(RdDSigneDraconiqueItemSheet) RdDItemSheetV1.register(RdDSigneDraconiqueItemSheet)
RdDItemSheetV1.register(RdDTacheItemSheet)
RdDJournalSheet.register() RdDJournalSheet.register()
// préparation des différents modules // préparation des différents modules
+1 -1
View File
@@ -95,7 +95,7 @@ export class RdDPossession {
} }
static selectCompetenceDraconicOuPossession(rollData, rollingActor) { static selectCompetenceDraconicOuPossession(rollData, rollingActor) {
rollData.competence = rollingActor.getDraconicOuPossession().find(it => true); rollData.competence = rollingActor.getBestDraconic({possession: true})
if (rollingActor.isCreatureOuEntite()) { if (rollingActor.isCreatureOuEntite()) {
rollData.carac = rollingActor.system.carac rollData.carac = rollingActor.system.carac
rollData.competence.system.defaut_carac = CARACS.REVE rollData.competence.system.defaut_carac = CARACS.REVE
+2 -2
View File
@@ -98,7 +98,7 @@ export class RdDResolutionTable {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async rollData(rollData) { static async rollData(rollData) {
rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, 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._updateChancesWithBonus(chances, rollData.bonus, finalLevel);
this._updateChancesFactor(chances, rollData.diviseurSignificative); this._updateChancesFactor(chances, rollData.diviseurSignificative);
chances.showDice = rollData.showDice; 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); let rolled = await this.rollChances(chances, rollData.diviseurSignificative, rollData.forceDiceResult);
rolled.caracValue = caracValue; 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') { static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.hbs') {
return await ChatMessage.create(ChatUtility.adaptVisibility( return await ChatMessage.create(ChatUtility.adaptVisibility(
{ content: await RdDRollResult.buildRollDataHtml(rollData, template) }, { 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)) { if (this.isCaseHumide(tmr)) {
let rollData = { let rollData = {
actor: this.actor, actor: this.actor,
competence: foundry.utils.duplicate(this.actor.getBestDraconic()), competence: this.actor.getBestDraconic(),
tmr: tmr, tmr: tmr,
canClose: false, canClose: false,
diffLibre: -7, diffLibre: -7,
@@ -807,7 +807,7 @@ export class RdDTMRDialog extends Dialog {
async _conquerir(tmr, options) { async _conquerir(tmr, options) {
let rollData = { let rollData = {
actor: this.actor, actor: this.actor,
competence: foundry.utils.duplicate(this.actor.getBestDraconic()), competence: this.actor.getBestDraconic(),
tmr: tmr, tmr: tmr,
canClose: options.canClose ?? false, canClose: options.canClose ?? false,
diffLibre: options.difficulte ?? -7, 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/possessions.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/resonances.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/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/oeuvres.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/jeux.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.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire-item.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/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 //Items
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs', 'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs',
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.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-bonmoment.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-carac.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/enum-appreciation-moral.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/tache-commune-flag.hbs',
// partial enums // partial enums
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.hbs', 'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.hbs',
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.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)); let objet = inventaires.find(objet => (id == objet._id));
if (objet) { if (objet) {
objet.estContenu = true; objet.estContenu = true;
objet.parentConteneurName = conteneur.name;
objetVersConteneur[id] = conteneur._id; objetVersConteneur[id] = conteneur._id;
conteneur.subItems.push(objet); conteneur.subItems.push(objet);
} }
@@ -473,6 +480,8 @@ export class RdDUtility {
item: item, item: item,
vide: isConteneur && item.system.contenu.length == 0, vide: isConteneur && item.system.contenu.length == 0,
ouvert: isConteneur && RdDUtility.getAfficheContenu(item._id), 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 options: options
}; };
optionsArbre.ouvert = inventaire.ouvert optionsArbre.ouvert = inventaire.ouvert
@@ -483,7 +492,7 @@ export class RdDUtility {
return ligneObjet; return ligneObjet;
} }
static filterItemsPerTypeForSheet(formData, itemTypes) { static filterItemsPerTypeForSheet(formData, itemTypes, triEquipement = 'name') {
Object.values(ITEM_TYPES).forEach(t => { Object.values(ITEM_TYPES).forEach(t => {
formData[RdDItem.itemTypePluriel(t)] = Misc.arrayOrEmpty(itemTypes[t]) formData[RdDItem.itemTypePluriel(t)] = Misc.arrayOrEmpty(itemTypes[t])
itemTypes[t].forEach(item => item.actions = item.itemActions()) itemTypes[t].forEach(item => item.actions = item.itemActions())
@@ -493,7 +502,7 @@ export class RdDUtility {
formData.competences = formData.competences.concat(formData.competencecreatures) formData.competences = formData.competences.concat(formData.competencecreatures)
formData.monnaies = formData.monnaies.sort(Monnaie.triValeurEntiere()) formData.monnaies = formData.monnaies.sort(Monnaie.triValeurEntiere())
formData.inventaires = RdDUtility.prepareInventaire(itemTypes) formData.inventaires = RdDUtility.prepareInventaire(itemTypes, triEquipement)
} }
static buildInventaireConteneur(actorId, itemId, options) { static buildInventaireConteneur(actorId, itemId, options) {
@@ -501,7 +510,7 @@ export class RdDUtility {
const item = actor?.items.get(itemId) const item = actor?.items.get(itemId)
if (item?.type == ITEM_TYPES.conteneur) { if (item?.type == ITEM_TYPES.conteneur) {
const formData = {} const formData = {}
RdDUtility.filterItemsPerTypeForSheet(formData, actor.itemTypes); RdDUtility.filterItemsPerTypeForSheet(formData, actor.itemTypes, options?.triEquipement);
RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.inventaires); RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.inventaires);
item.subItems = formData.conteneurs.find(it => it._id == itemId)?.subItems; item.subItems = formData.conteneurs.find(it => it._id == itemId)?.subItems;
@@ -510,11 +519,25 @@ export class RdDUtility {
return '' return ''
} }
static prepareInventaire(itemTypes) { static prepareInventaire(itemTypes, triEquipement = 'name') {
return RdDItem.getItemTypesInventaire('all') let items = RdDItem.getItemTypesInventaire('all')
.map(t => Misc.arrayOrEmpty(itemTypes[t])) .map(t => Misc.arrayOrEmpty(itemTypes[t]))
.reduce((a, b) => a.concat(b), []) .reduce((a, b) => a.concat(b), []);
.sort(Misc.ascending(it => it.name)) 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; const profondeur = optionsArbre.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)); .map(contenu => this.buildLigneInventaire(contenu, options, optionsArbre));
return `<ul class='item-list alterne-list ${display} list-item-margin${Math.min(profondeur, 6)}'>` return `<ul class='item-list alterne-list ${display} list-item-margin${Math.min(profondeur, 6)}'>`
+4 -4
View File
@@ -27,10 +27,10 @@ export const DIFF = {
} }
export const DIFFS = { export const DIFFS = {
[DIFF.LIBRE]: { key: DIFF.LIBRE, label: "Difficulté libre", libre: true, visible: true, max: 0 }, [DIFF.LIBRE]: { key: DIFF.LIBRE, label: "Diff. libre", libre: true, visible: true, max: 0 },
[DIFF.ATTAQUE]: { key: DIFF.ATTAQUE, label: "Difficulté d'attaque", libre: true, visible: true, max: 0 }, [DIFF.ATTAQUE]: { key: DIFF.ATTAQUE, label: "Diff. attaque", libre: true, visible: true, max: 0 },
[DIFF.IMPOSEE]: { key: DIFF.IMPOSEE, label: "Difficulté imposée", libre: false, visible: true, max: 20 }, [DIFF.IMPOSEE]: { key: DIFF.IMPOSEE, label: "Diff. imposée", libre: false, visible: true, max: 20 },
[DIFF.DEFENSE]: { key: DIFF.DEFENSE, label: "Difficulté défense", libre: false, visible: true, max: 0 }, [DIFF.DEFENSE]: { key: DIFF.DEFENSE, label: "Diff. défense", libre: false, visible: true, max: 0 },
[DIFF.DEFAUT]: { key: DIFF.DEFAUT, label: "Difficulté", libre: true, visible: true, max: 5 }, [DIFF.DEFAUT]: { key: DIFF.DEFAUT, label: "Difficulté", libre: true, visible: true, max: 5 },
[DIFF.AUCUN]: { key: DIFF.AUCUN, label: "", libre: false, visible: false, max: 0 }, [DIFF.AUCUN]: { key: DIFF.AUCUN, label: "", libre: false, visible: false, max: 0 },
} }
+11 -11
View File
@@ -80,7 +80,6 @@ const ROLL_PARTS = [
new RollPartCarac(), new RollPartCarac(),
new RollPartComp(), new RollPartComp(),
new RollPartDiff(),
new RollPartApprecier(), new RollPartApprecier(),
new RollPartAttaque(), new RollPartAttaque(),
new RollPartPossession(), new RollPartPossession(),
@@ -92,17 +91,17 @@ const ROLL_PARTS = [
new RollPartOeuvre(), new RollPartOeuvre(),
new RollPartJeu(), new RollPartJeu(),
new RollPartSign(), new RollPartDiff(),
new RollPartEcailles(),
new RollPartEtat(),
new RollPartConditions(), new RollPartConditions(),
new RollPartEtat(),
new RollPartSign(),
new RollPartEncTotal(),
new RollPartSurEnc(),
new RollPartEthylisme(), new RollPartEthylisme(),
new RollPartEcailles(),
new RollPartMalusArmure(), new RollPartMalusArmure(),
new RollPartEmpoignadeTaille(), new RollPartEmpoignadeTaille(),
new RollPartEmpoignade(), new RollPartEmpoignade(),
new RollPartEncTotal(),
new RollPartSurEnc(),
new RollPartAppelMoral(), new RollPartAppelMoral(),
new RollPartMoral(), new RollPartMoral(),
new RollPartCoeur(), new RollPartCoeur(),
@@ -380,7 +379,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
this.hooks = [] this.hooks = []
this.rollData = rollData this.rollData = rollData
this.rollOptions = { this.rollOptions = foundry.utils.mergeObject(rollOptions, {
callbacks: [ callbacks: [
async r => await r.active.actor.ajoutExperience(r), async r => await r.active.actor.ajoutExperience(r),
async r => await r.active.actor.appliquerAppelMoral(r), async r => await r.active.actor.appliquerAppelMoral(r),
@@ -388,7 +387,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
], ],
onRollDone: rollOptions.onRollDone ?? RollDialog.onRollDoneDoNothing, onRollDone: rollOptions.onRollDone ?? RollDialog.onRollDoneDoNothing,
onClose: rollOptions.onClose ?? RollDialog.onCloseDoNothing onClose: rollOptions.onClose ?? RollDialog.onCloseDoNothing
} })
this.chatRollResult = new ChatRollResult() this.chatRollResult = new ChatRollResult()
this.rollParts = RollDialog.getAllowedParts(rollData) this.rollParts = RollDialog.getAllowedParts(rollData)
@@ -430,9 +429,10 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
.filter(it => it.section == ROLLDIALOG_SECTION.ACTION) .filter(it => it.section == ROLLDIALOG_SECTION.ACTION)
.filter(it => it.isActive(rollData)) .filter(it => it.isActive(rollData))
.map(it => it.title(rollData)) .map(it => it.title(rollData))
.filter(it => it != undefined)
.reduce(Misc.joining(' ')); .reduce(Misc.joining(' '));
if (this.rollOptions.title) { if (this.rollOptions.title) {
return `${this.rollOptions.title} ${title}` return `${this.rollOptions.title}: ${title}`
} }
return title return title
} }
@@ -480,7 +480,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
.map(m => m.toTypeData(rollData)) .map(m => m.toTypeData(rollData))
RollBasicParts.loadSurprises(rollData, this.getSelectedType().code) RollBasicParts.loadSurprises(rollData, this.getSelectedType().code)
rollData.type.label = this.getSelectedType()?.title(rollData) rollData.type.label = this.getSelectedType()?.title(rollData)
this.getActiveParts().forEach(p => p.applyExternalImpacts(this.getActiveParts(), rollData)) this.getActiveParts().forEach(p => p.applyExternalImpacts(this.getActiveParts(), rollData))
this.setSpecialComp(this.getActiveParts()); this.setSpecialComp(this.getActiveParts());
this.getActiveParts().forEach(p => p.prepareContext(rollData)) 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 } get section() { return ROLLDIALOG_SECTION.ACTION }
title(rollData) { title(rollData) {
return rollData.type.label const current = this.getCurrent(rollData)
return current.verb
} }
prepareContext(rollData) { prepareContext(rollData) {
+1 -1
View File
@@ -14,7 +14,7 @@ const EXCLUDED_ROLL_TYPES = [
export class RollPartDiff extends RollPart { export class RollPartDiff extends RollPart {
get code() { return PART_DIFF } get code() { return PART_DIFF }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CONDITIONS }
restore(rollData) { restore(rollData) {
const current = this.getCurrent(rollData) const current = this.getCurrent(rollData)
+1 -1
View File
@@ -30,7 +30,7 @@ export class RollPartPossession extends RollPartSelect {
choices(refs) { return refs.all } choices(refs) { return refs.all }
$getActorConjurations(rollData) { $getActorConjurations(rollData) {
const competences = rollData.active.actor.getDraconicOuPossession() const competences = rollData.active.actor.getBestDraconic({possession: true})
return competences.map(RollPartPossession.extractPossession) return competences.map(RollPartPossession.extractPossession)
} }
+13 -7
View File
@@ -22,8 +22,8 @@ export class RollPartTache extends RollPartSelect {
refs.forced = selected.forced refs.forced = selected.forced
refs.all = rollData.active.actor.itemTypes[ITEM_TYPES.tache] refs.all = rollData.active.actor.itemTypes[ITEM_TYPES.tache]
.filter(tache => !selected.forced || tache.id == selected.key) .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)) .map(tache => RollPartTache.$extractTache(tache, rollData.active.actor))
.filter(extract => !extract.finished)
refs.taches = refs.all refs.taches = refs.all
if (refs.taches.length > 0) { if (refs.taches.length > 0) {
@@ -34,12 +34,15 @@ export class RollPartTache extends RollPartSelect {
choices(refs) { return refs.taches } choices(refs) { return refs.taches }
static $extractTache(tache, actor) { static $extractTache(tache, actor) {
const tacheOuCommune = tache.getTacheOuCommune()
return { return {
key: tache.id, key: tache.id,
label: tache.name, label: tache.name,
value: tache.system.difficulte, tacheCommune: tache.system.tacheCommune,
tache: tache, value: tacheOuCommune.system.difficulte,
comp: actor.getCompetence(tache.system.competence) 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) { onCreateUpdateItem(rollDialog, item, options, id) {
if (item.type == ITEM_TYPES.tache && item.parent?.id == rollDialog.rollData.active.actor.id) { if (item.type == ITEM_TYPES.tache) {
this.loadRefs(rollDialog.rollData) if (item.parent?.id == rollDialog.rollData.active.actor.id || item.isTacheCommune()) {
rollDialog.render() // 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` } title(rollData) { return `attaque` }
isOpposed(rollData) { return rollData.opponent != undefined }
onSelect(rollData) { onSelect(rollData) {
this.setDiffType(rollData, DIFF.ATTAQUE) 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` } get name() { return `Jet de caractéristique / compétence` }
title(rollData) { title(rollData) {
if (rollData.type.label) {
return rollData.type.label
}
if (rollData.type.appreciation) { if (rollData.type.appreciation) {
return "fait un jet d'appéciation" 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' : ''}` } title(rollData) { return `se défend${rollData.opponent ? ' de' : ''}` }
isOpposed(rollData) { return this.getOpponent(rollData) != undefined }
getOpponent(rollData) { getOpponent(rollData) {
return rollData.attacker return rollData.attacker
} }
+3
View File
@@ -13,6 +13,9 @@ export class RollTypeJeu extends RollType {
&& RollConstants.findCompetence(rollData, 'Jeu') && RollConstants.findCompetence(rollData, 'Jeu')
} }
isOpposed(rollData) { return rollData.opponent != undefined }
title(rollData) { title(rollData) {
if (rollData.opponent) { if (rollData.opponent) {
return `joue contre` return `joue contre`
+2
View File
@@ -14,6 +14,8 @@ export class RollTypePossession extends RollType {
return RdDPossessionV2.actionTitle(rollData.type.possession.action) return RdDPossessionV2.actionTitle(rollData.type.possession.action)
} }
isOpposed(rollData) { return rollData.opponent != undefined }
onSelect(rollData) { onSelect(rollData) {
this.setDiffType(rollData, this.isAttaque(rollData) ? DIFF.ATTAQUE : DIFF.DEFENSE) 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) { title(rollData) {
const current = rollData.current[PART_TACHE] const current = rollData.current[PART_TACHE]
const tache = current?.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) { onSelect(rollData) {
@@ -22,15 +22,14 @@ export class RollTypeTache extends RollType {
static async $onRollTache(rollData) { static async $onRollTache(rollData) {
const actor = rollData.active.actor 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.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_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.nb_jet_echec': tache.system.nb_jet_echec + (rollData.rolled.isSuccess ? 0 : 1),
'system.difficulte': tache.system.difficulte - (rollData.rolled.isETotal ? 1 : 0), 'system.difficulte': tache.system.difficulte - (rollData.rolled.isETotal ? 1 : 0),
}, { render: true }) }, { render: true })
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
await actor.santeIncDec("fatigue", tache.system.fatigue) await actor.santeIncDec("fatigue", tache.system.fatigue)
} }
+3 -2
View File
@@ -19,9 +19,10 @@ export class RollType {
visible(rollData) { return true } visible(rollData) { return true }
title(rollData) { return this.code } title(rollData) { return this.code }
isSelected(rollData) { return rollData.type.current == this.code } isSelected(rollData) { return rollData.type.current == this.code }
isOpposed(rollData) { return false }
setRollDataType(rollData) { setRollDataType(rollData) {
rollData.type.opposed = rollData.opponent != undefined rollData.type.opposed = this.isOpposed(rollData)
} }
onSelect(rollData) { onSelect(rollData) {
+3 -1
View File
@@ -309,7 +309,9 @@ export class TMRUtility {
static buildSelectionTypesTMR(typesTMR) { static buildSelectionTypesTMR(typesTMR) {
typesTMR = 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() .sort()
.map(name => { return { name: name, selected: typesTMR.includes(name) } }); .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> tout personnage ayant au moins z&eacute;ro en Botanique.</p>
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir un prisme de cristal alchimique. but: Obtenir un prisme de cristal alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -13,7 +13,7 @@ system:
tonifiante.</p> tonifiante.</p>
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -11,7 +11,7 @@ system:
<p>Une livre de coquilles donne 4 &eacute;cailles de poudre de nacre.</p> <p>Une livre de coquilles donne 4 &eacute;cailles de poudre de nacre.</p>
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -7,7 +7,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: null description: null
descriptionmj: '' descriptionmj: ''
but: Amplifier le pouvoir de guérison des herbes de soin. but: Amplifier le pouvoir de guérison des herbes de soin.
utilisation: null utilisation: ''
enchantement: >- enchantement: >-
<p>Une surpotion de soin peut &ecirc;tre enchant&eacute;e comme une simple <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 potion, les points de r&ecirc;ve conf&eacute;r&eacute;s &eacute;tant
@@ -11,7 +11,7 @@ system:
(INTELLECT/Botanique &agrave; -2).</p> (INTELLECT/Botanique &agrave; -2).</p>
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -8,7 +8,7 @@ system:
description: '' description: ''
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
@@ -13,7 +13,7 @@ system:
succ&eacute;dan&eacute;.</p> succ&eacute;dan&eacute;.</p>
descriptionmj: '' descriptionmj: ''
but: Obtenir trois doses du remède alchimique. but: Obtenir trois doses du remède alchimique.
utilisation: null utilisation: ''
enchantement: '' enchantement: ''
sureffet: '' sureffet: ''
manipulation: >- manipulation: >-
+4 -4
View File
@@ -1,10 +1,10 @@
{ {
"id": "foundryvtt-reve-de-dragon", "id": "foundryvtt-reve-de-dragon",
"title": "Rêve de Dragon", "title": "Rêve de Dragon",
"version": "13.0.36", "version": "13.0.43",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/13.0.36/rddsystem.zip", "download": "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/releases/download/13.0.43/rddsystem.zip",
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/13.0.36/system.json", "manifest": "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/releases/download/latest/system.json",
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", "changelog": "https://gitea.scriptarium.org/Scriptarium/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md",
"compatibility": { "compatibility": {
"minimum": "13", "minimum": "13",
"verified": "14" "verified": "14"
+4 -1
View File
@@ -804,6 +804,8 @@
}, },
"livre": { "livre": {
"templates": ["description", "inventaire"], "templates": ["description", "inventaire"],
"lu": false,
"estCopieLue": false,
"competence": "", "competence": "",
"auteur": "", "auteur": "",
"difficulte": 0, "difficulte": 0,
@@ -947,7 +949,8 @@
"nb_jet_echec": 0, "nb_jet_echec": 0,
"nb_jet_succes": 0, "nb_jet_succes": 0,
"cacher_points_de_tache": false, "cacher_points_de_tache": false,
"itemId": "" "itemId": "",
"tacheCommuneId": ""
}, },
"sort": { "sort": {
"templates": ["description"], "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/chirurgie.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/jeux.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/alchimie.hbs"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/livres.hbs"}}
</div> </div>
{{/if}} {{/if}}
{{#if options.isObserver}}{{!-- hautreve Tab --}} {{#if options.isObserver}}{{!-- hautreve Tab --}}
+9 -10
View File
@@ -1,21 +1,20 @@
<div> <div>
<ul class="item-list"> <ul class="item-list">
<li><a class="repartition-archetype-aleatoire chat-card-button flexrow" data-tooltip="Répartition aléatoire des niveaux d'archétype restants">
<i class="fa-solid fa-circle-user-clock"></i><i class="fa-solid fa-shuffle"></i></a>
{{#if @root.options.isGM}} {{#if @root.options.isGM}}
<li> <a class="nouvelle-incarnation chat-card-button flexrow" data-tooltip="Création d'une nouvelle incarnation de l'archétype">
<a class="nouvelle-incarnation chat-card-button" data-tooltip="Création d'une nouvelle incarnation de l'archétype"> <i class="fa-regular fa-skull"></i><i class="fa-solid fa-person-circle-plus"></i></a>
<i class="fa-solid fa-person-circle-plus"></i> Nouvelle incarnation</a>
</li> </li>
{{/if}} {{/if}}
<li><hr></li>
<li>Niveaux d'archétype</li> <li>Niveaux d'archétype</li>
{{#if calc.comptageArchetype}} {{#if calc.comptageArchetype}}
{{#each calc.comptageArchetype as |archetype|}} {{#each calc.comptageArchetype as |archetype|}}
<li class="item flexrow">
<li class="item flexrow"> <label class="generic-label">
<label class="generic-label"> Niveaux {{plusMoins archetype.niveau}} : {{archetype.nombre}} / {{archetype.nombreMax}}
Niveaux {{plusMoins archetype.niveau}} : {{archetype.nombre}} / {{archetype.nombreMax}} </label>
</label> </li>
</li>
{{/each}} {{/each}}
{{/if}} {{/if}}
</ul> </ul>
+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> </a>
{{else}} {{else}}
<img class="sheet-competence-img" src="{{item.img}}"/> <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')}} {{#if (eq item.type 'arme')}}
{{>"systems/foundryvtt-reve-de-dragon/templates/item/icon-arme-broken.hbs" item}} {{>"systems/foundryvtt-reve-de-dragon/templates/item/icon-arme-broken.hbs" item}}
{{/if}} {{/if}}
</span> {{/if}}
{{#if item.parentConteneurName}}
<span class="conteneur-parent-badge">{{item.parentConteneurName}}</span>
{{/if}} {{/if}}
</span> </span>
<span class="equipement-detail"> <span class="equipement-detail">
{{#if (gt item.system.quantite 1)}} {{#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> <a class="item-quantite-moins" data-tooltip="Diminuer la quantité de {{item.name}}"><i class="fa-solid fa-square-minus"></i></a>
{{/if}} {{/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}} {{#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> <a class="item-quantite-plus" data-tooltip="Augmenter la quantité de {{item.name}}"><i class="fa-solid fa-square-plus"></i></a>
{{/if}} {{/if}}
</span> </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}} {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=item options=options}}
</li> </li>
{{/if}} {{/if}}
+9 -29
View File
@@ -1,29 +1,9 @@
{{#if @root.options.isObserver}} <span class="item-name">
<span class="item-name"><h4>Argent et Monnaies (fortune: {{calc.fortune.sols}} sols {{calc.fortune.deniers}} deniers)</h4></span> <h4>Argent et Monnaies (fortune: {{calc.fortune.sols}} sols {{calc.fortune.deniers}} deniers)</h4>
<ul class="item-list alterne-list"> {{#if @root.options.isOwner}}
{{#each monnaies as |piece id|}} <a class="gerer-deniers chat-card-button" data-tooltip="Gérer ses deniers">Gérer ses deniers</a>
<li class="item flexrow list-item" data-item-id="{{piece._id}}"> {{#if herbes.length}}<a class="gerer-herbes chat-card-button">Gérer ses herbes</a>{{/if}}
<img class="sheet-competence-img" src="{{piece.img}}" data-tooltip="{{piece.name}}"/> {{#if ingredients.length}}<a class="gerer-ingredients chat-card-button">Gérer ses ingrédients</a>{{/if}}
<span class="equipement-nom {{#unless (gt piece.system.cout 0)}}field-error{{/unless}}"> {{#if potions.length}}<a class="gerer-potions chat-card-button">Gérer ses potions</a>{{/if}}
{{piece.name}} ({{piece.system.cout}} Sols) {{/if}}
</span> </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}}
+8 -1
View File
@@ -1,4 +1,3 @@
<h4>Equipement</h4>
<span class="item-name"> <span class="item-name">
{{#if options.isOwner}} {{#if options.isOwner}}
<a class="chat-card-button creer-un-objet" data-tooltip="Créer un nouvel objet">Nouvel objet</a> <a class="chat-card-button creer-un-objet" data-tooltip="Créer un nouvel objet">Nouvel objet</a>
@@ -8,6 +7,14 @@
{{/if}} {{/if}}
<span class="embed-inline"> <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"/> <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> </span>
{{#if calc.surEncombrementMessage}}<b>{{calc.surEncombrementMessage}}</b> &hyphen;{{/if}} {{#if calc.surEncombrementMessage}}<b>{{calc.surEncombrementMessage}}</b> &hyphen;{{/if}}
Encombrement: {{numberFormat calc.encTotal decimals=2}} (max: {{system.attributs.encombrement.value}}) 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"> <ul class="item-list alterne-list">
{{#each (trier chants) as |chant id|}} {{#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"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs" oeuvre=chant typeOeuvre="Chant" classOeuvre="action-chant list-item-label"}}
+6 -1
View File
@@ -4,10 +4,15 @@
{{#unless (eq tache.system.competence 'Chirurgie')}} {{#unless (eq tache.system.competence 'Chirurgie')}}
<li class="item flexrow list-item" data-item-id="{{tache._id}}" data-tooltip="Tâche: {{tache.name}}" > <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}}"/> <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 ({{tache.system.points_de_tache_courant}}{{#if
(or @root.options.isGM (not tache.system.cacher_points_de_tache)) (or @root.options.isGM (not tache.system.cacher_points_de_tache))
}}/{{tache.system.points_de_tache}}{{/if}})</a></span> }}/{{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}} {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=tache options=@root.options}}
</li> </li>
{{/unless}} {{/unless}}
+5 -1
View File
@@ -1,5 +1,9 @@
{{#each @root.competences as |competence key|}} {{#each @root.competences as |competence key|}}
{{#if (or (not ../categorie) (eq competence.system.categorie ../categorie))}} {{#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}} {{/if}}
{{/each}} {{/each}}
+1 -1
View File
@@ -4,7 +4,7 @@
<section class="sheet-body"> <section class="sheet-body">
<div class="form-group"> <div class="form-group">
<label class="item-label" for="system.but">But</label> <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>
<div class="flexcol"> <div class="flexcol">
<span><label class="item-label">Manipulation : </label></span> <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"}} {{>"systems/foundryvtt-reve-de-dragon/templates/item/partial-header.hbs"}}
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="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"> <div class="form-group">
<label for="system.carac">Caractéristique</label> <label for="system.carac">Caractéristique</label>
<select name="system.carac" data-dtype="String"> <select name="system.carac" data-dtype="String" {{#if disabled}}disabled{{/if}} >
{{#select system.carac}} {{#select system.carac}}
{{#each caracList as |carac key|}} {{#each caracList as |carac key|}}
<option value="{{key}}">{{carac.label}}</option> <option value="{{key}}">{{carac.label}}</option>
{{/each}} {{/each}}
{{/select}} {{/select}}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.competence">Compétence</label> <label for="system.competence">Compétence</label>
<select name="system.competence" data-dtype="String"> <select name="system.competence" data-dtype="String" {{#if disabled}}disabled{{/if}}>
{{#select system.competence}} {{#select system.competence}}
<option value="">Sans compétence</option> {{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}} {{/select}}
{{/select}} </select>
</select> </div>
</div>
<div class="form-group"> <div class="form-group">
<label for="system.difficulte">Difficulté</label> <label for="system.difficulte">Difficulté</label>
<input name="system.difficulte" value="{{system.difficulte}}" min="-10" max="10" <input name="system.difficulte" value="{{system.difficulte}}" min="-10" max="10"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/> class="attribute-value" type="number" data-dtype="Number"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.periodicite">Périodicité</label> <label for="system.periodicite">Périodicité</label>
<input name="system.periodicite" value="{{system.periodicite}}" <input name="system.periodicite" value="{{system.periodicite}}"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="text" data-dtype="String"/> class="attribute-value" type="text" data-dtype="String"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.fatigue">Fatigue</label> <label for="system.fatigue">Fatigue</label>
<input name="system.fatigue" value="{{system.fatigue}}" min="0" max="10" <input name="system.fatigue" value="{{system.fatigue}}" min="0" max="10"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="number" data-dtype="Number"/> class="attribute-value" type="number" data-dtype="Number"/>
</div> </div>
{{#if options.isGM}} {{#if options.isGM}}
<div class="form-group"> <div class="form-group">
<label for="system.cacher_points_de_tache">Cacher les Points de Tâches nécessaires au joueur</label> <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" <input name="system.cacher_points_de_tache"
{{#if disabled}}disabled{{/if}}
class="attribute-value" type="checkbox" {{checked system.cacher_points_de_tache}}/> class="attribute-value" type="checkbox" {{checked system.cacher_points_de_tache}}/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.points_de_tache">Points de tâches nécessaires (MJ)</label> <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" <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"/> class="attribute-value" type="number" data-dtype="Number"/>
</div> </div>
{{else}} {{else}}
@@ -53,7 +76,9 @@
<label for="system.points_de_tache">Points de tâches nécessaires inconnus</label> <label for="system.points_de_tache">Points de tâches nécessaires inconnus</label>
{{else}} {{else}}
<label for="system.points_de_tache">Points de tâches nécessaires</label> <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}} {{/if}}
</div> </div>
{{/if}} {{/if}}
@@ -61,16 +86,19 @@
<div class="form-group"> <div class="form-group">
<label for="system.points_de_tache_courant">Points de tâches obtenus</label> <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}}" <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"/> class="attribute-value" type="number" data-dtype="Number"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.nb_jet_succes">Nombre de Succès</label> <label for="system.nb_jet_succes">Nombre de Succès</label>
<input name="system.nb_jet_succes" value="{{system.nb_jet_succes}}" min="0" <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}}/> class="attribute-value" type="number" data-dtype="Number" {{#if options.isGM}}{{else}}disabled{{/if}}/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="system.nb_jet_echec">Nombre d'Echecs</label> <label for="system.nb_jet_echec">Nombre d'Echecs</label>
<input name="system.nb_jet_echec" value="{{system.nb_jet_echec}}" min="0" <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}}/> class="attribute-value" type="number" data-dtype="Number" {{#if options.isGM}}{{else}}disabled{{/if}}/>
</div> </div>
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="form-group"> <div class="form-group">
<label for="roll-text">Compétence</label> <label for="roll-text">Compétence</label>
<select name="roll-text" class="roll-text" data-dtype="String"> <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"}} {{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs"}}
{{/select}} {{/select}}
</select> </select>
+3 -3
View File
@@ -1,6 +1,6 @@
<label for="{{code}}" data-tooltip="Moral: {{plusMoins refs.moral}}" {{#if (lte refs.moral 0)}}style="font-size: 0.9rem;"{{/if}}>
{{#if current.icon}}{{{current.icon}}}{{/if}}{{refs.label}}
</label>
<input name="{{code}}" type="checkbox" <input name="{{code}}" type="checkbox"
{{#if current.checked}}checked{{/if}} {{#if current.checked}}checked{{/if}}
{{#if rollData.type.retry}}disabled{{/if}}/> {{#if rollData.type.retry}}disabled{{/if}}/>
<label for="{{code}}" data-tooltip="Moral: {{plusMoins refs.moral}}">
{{#if current.icon}}{{{current.icon}}}{{/if}}{{refs.label}}
</label>
+9 -12
View File
@@ -67,21 +67,18 @@
</subline> </subline>
{{/if}} {{/if}}
{{#if current.distance}} {{#if current.distance}}
<subline><hr></subline> <subline data-tooltip="Difficultée à valider par le gardien">
<subline>
<span> <span>
<strong>Attaque à distance</strong> {{current.main}} difficulté proposée de <strong>{{plusMoins current.distance.total}}</strong> à valider par le Gardien <strong>Attaque à distance</strong> {{current.main}}
{{#unless current.distance.isVisible}}<i class="fa-solid fa-eye-slash"></i> Avec les murs et la lumière, la cible n'est pas visible;{{/unless}}
Taille {{current.distance.taille.msg}}: {{plusMoins current.distance.taille.diff}};
Portée {{#if (lt current.distance.distance 0)}}indéterminée{{else}}{{numberFormat current.distance.distance decimals=1}} mètres{{/if}} {{current.distance.portee.msg}}: {{plusMoins current.distance.portee.diff}};
<span data-tooltip="0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag">
Mouvement {{current.distance.activite.msg}}: {{plusMoins current.distance.activite.diff}};
</span>
<br><strong>Difficulté proposée de {{plusMoins current.distance.total}}</strong>
</span> </span>
</subline> </subline>
<subline></subline>
<subline>
<ul>
{{#unless current.distance.isVisible}}<li>Avec les murs et la lumière, la cible n'est pas visible.</li>{{/unless}}
<li>Taille {{current.distance.taille.msg}}: {{plusMoins current.distance.taille.diff}}</li>
<li>Portée {{current.distance.portee.msg}}: {{plusMoins current.distance.portee.diff}} (distance {{#if (lt current.distance.distance 0)}}indéterminée{{else}}indicative de {{numberFormat current.distance.distance decimals=1}} mètres{{/if}}). </li>
<li>Mouvement {{current.distance.activite.msg}}: {{plusMoins current.distance.activite.diff}} (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)</li>
</ul>
</subline>
{{/if}} {{/if}}
</roll-part-detail> </roll-part-detail>
{{/if}} {{/if}}
+7 -3
View File
@@ -1,5 +1,9 @@
<input name="{{code}}" type="checkbox" <label for="{{code}}">
{{#if current.icon}}{{{current.icon}}}{{/if}}
{{either current.label refs.label}}
</label>
<span>
<input name="{{code}}" type="checkbox"
{{#if current.checked}}checked{{/if}} {{#if current.checked}}checked{{/if}}
{{#if rollData.type.retry}}disabled{{/if}}/> {{#if rollData.type.retry}}disabled{{/if}}/>
{{#if current.icon}}{{{current.icon}}}{{/if}} {{plusMoins current.value}}</span>
<label for="{{code}}">{{either current.label refs.label}} : {{plusMoins current.value}}</label>
+7 -9
View File
@@ -1,9 +1,7 @@
<subline> <label for="{{code}}">{{current.label}}&nbsp;</label>
<label for="{{code}}">{{current.label}}&nbsp;</label> <input type="number"
<input type="number" name="{{name}}"
name="{{name}}" value="{{current.value}}"
value="{{current.value}}" pattern="^(-|+)?\d+$"
pattern="^(-|+)?\d+$" min="{{current.min}}" max="{{current.max}}" step="1"
min="{{current.min}}" max="{{current.max}}" step="1" {{#if (or rollData.type.retry current.disabled)}}disabled{{/if}}>
{{#if (or rollData.type.retry current.disabled)}}disabled{{/if}}>
</subline>
+4 -4
View File
@@ -1,11 +1,11 @@
<input name="{{code}}" type="checkbox"
{{#if current.checked}}checked{{/if}}
{{#if rollData.type.retry}}disabled{{/if}}/>
<label for="{{code}}"> <label for="{{code}}">
{{#if current.icon}}{{{current.icon}}}{{/if}} {{#if current.icon}}{{{current.icon}}}{{/if}}
{{current.label}} {{current.label}}
Enc. total
</label> </label>
<label for="malusenc">Enc. total</label> <input name="{{code}}" type="checkbox"
{{#if current.checked}}checked{{/if}}
{{#if rollData.type.retry}}disabled{{/if}}/>
<input type="number" <input type="number"
name='malusenc' name='malusenc'
value="{{current.value}}" value="{{current.value}}"
+1
View File
@@ -16,6 +16,7 @@
</subline> </subline>
{{#if refs.taches.length}} {{#if refs.taches.length}}
<subline> <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}} / Points de tâche: {{current.tache.system.points_de_tache_courant}} /
{{#if current.tache.system.cacher_points_de_tache}} {{#if current.tache.system.cacher_points_de_tache}}
(inconnus) (inconnus)
+4 -2
View File
@@ -1,5 +1,7 @@
<label for="{{name}}">Forcer </label> <label for="{{name}}">
<img src="systems/foundryvtt-reve-de-dragon/assets/ui/d100.svg" data-tooltip="Forcer le résultat du jet de dé"/> <img src="systems/foundryvtt-reve-de-dragon/assets/ui/d100.svg" data-tooltip="Forcer le résultat du jet de dé"/>
Forcer
</label>
<input type="number" <input type="number"
name="{{name}}" name="{{name}}"
value="{{current.resultat}}" value="{{current.resultat}}"