Compare commits
	
		
			177 Commits
		
	
	
		
			12.0.27
			...
			5d8da860c4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5d8da860c4 | |||
| 607eedc6d2 | |||
| de2c636064 | |||
| 1ff32697f4 | |||
| 652c435833 | |||
| 74c1f33427 | |||
| 0c6caffde3 | |||
| dc63041682 | |||
| f572b1c4e1 | |||
| 1d63cd54fe | |||
| 15e6127e02 | |||
| afd8c2ac80 | |||
| 18de904849 | |||
| cb48c960c2 | |||
| bd082248d9 | |||
| df9df90ccb | |||
| 0456221cf7 | |||
| 583b4ff003 | |||
| b4ac906802 | |||
| 395c7a4cc3 | |||
| 27bc07f64a | |||
| 2f3ec7bab0 | |||
| 8d39a0526f | |||
| f83548b91e | |||
| 90d17a3477 | |||
| fb15f3eb38 | |||
| 4df0eab574 | |||
| c8d589f0d2 | |||
| d7470836a5 | |||
| 817fa8e62a | |||
| 0fe4f64343 | |||
| d6b5b0a550 | |||
| c9d87851bd | |||
| 5b48fda3d0 | |||
| abae85157b | |||
| da2dca1769 | |||
| 6e405ea753 | |||
| a96f4bf641 | |||
| a0f42204d5 | |||
| c25320755a | |||
| aa5f159a91 | |||
| bb80391a47 | |||
| 1abb757b6b | |||
| 84c44d1f6d | |||
| ccb939207d | |||
| cd38a197cc | |||
| 6b053b189b | |||
| cc4cbbc771 | |||
| 0850789ed7 | |||
| 7a6ccac7fa | |||
| ed64d823ac | |||
| 3162264afa | |||
| e53eda5b42 | |||
| 47a7564a1c | |||
| f7a6fee51d | |||
| 0b3f08ef29 | |||
| 8df9c8ddf5 | |||
| 4cbe652a91 | |||
| 3eb1179c40 | |||
| cf185844af | |||
| 250b936fae | |||
| cd8268f569 | |||
| c04e0cec78 | |||
| 1d5fe1af71 | |||
| e96a627c37 | |||
| 06c3d2f80a | |||
| d07f5a41e7 | |||
| 856d038dc9 | |||
| 791593ad38 | |||
| 42179dab1d | |||
| 83631cd366 | |||
| 01cf47ad55 | |||
| d492b37a45 | |||
| ecdcdb69d5 | |||
| 8479fdda8a | |||
| 83e57fbbc7 | |||
| 2d256b1217 | |||
| 526d38d32e | |||
| 2ff3dfef89 | |||
| f1b6c01cd7 | |||
| 675fe5838e | |||
| bafdec9924 | |||
| 069fef4720 | |||
| e32a7d7540 | |||
| 0773493851 | |||
| da982678b7 | |||
| c1066d70f6 | |||
| 5085ba5b54 | |||
| f37483a61d | |||
| 5357e53a5f | |||
| 764dde6296 | |||
| 681fbc3177 | |||
| 70e3e63001 | |||
| 7ed9a4a12b | |||
| acfab362a0 | |||
| 3d49a3de11 | |||
| 24518642a7 | |||
| d917f80e88 | |||
| b29027c61a | |||
| 6083dd41fa | |||
| 8969d5e0ed | |||
| 7d135a214f | |||
| 9d66a479c4 | |||
| 800b4a2f32 | |||
| 9fc21e6d97 | |||
| ce7f5381ca | |||
| 48acdaaca6 | |||
| 425c6af672 | |||
| 4281f76dfb | |||
| 8ebd6ec771 | |||
| 14391daa0b | |||
| ac29e1410e | |||
| 442ffe9b3a | |||
| d922e4fdd5 | |||
| a8dc07b4db | |||
| 40a47ee8a2 | |||
| c5633a9fc5 | |||
| 7e8da49912 | |||
| b524716ede | |||
| 72a9752820 | |||
| 8e578c6566 | |||
| 5ac9c682d9 | |||
| 6de19eb357 | |||
| 90d096a6df | |||
| c733644f3a | |||
| de9d3bbb48 | |||
| efdffd171c | |||
| 8406c8434a | |||
| a4b474970c | |||
| 135e5e46a0 | |||
| 969bc3b573 | |||
| a9eb101c9d | |||
| d53da1f011 | |||
| ab0f7e563f | |||
| 57c41a0218 | |||
| 1b75decb18 | |||
| 551438f514 | |||
| 792558ac84 | |||
| 06aff9a3c0 | |||
| 7e736a00d7 | |||
| b87f406093 | |||
| 785bd4b9ce | |||
| daca86b1df | |||
| aa52e26e1a | |||
| f956da1fc0 | |||
| 10971e9e7b | |||
| a3e6b95ef3 | |||
| d0a5a3617c | |||
| 755df936fb | |||
| 2fa0ce5f15 | |||
| b4eed49e9a | |||
| af4404aab1 | |||
| 85804bc838 | |||
| ad4baecdf2 | |||
| 8dc5616d7c | |||
| db6b025e8f | |||
| 7f53757f26 | |||
| 879d2d10e5 | |||
| 016e4463bd | |||
| 1dfab01c4b | |||
| a9cb211dba | |||
| 4dce510c91 | |||
| 14abfa8e7d | |||
| 1f564e0d89 | |||
| ab61d5991d | |||
| e3a858a9ef | |||
| 4cacf46ed8 | |||
| 5a5b5cdbb3 | |||
| f90dddfbf8 | |||
| d04da56c22 | |||
| a87a4d371e | |||
| c577fa5f29 | |||
| 30303330d7 | |||
| ded92ddf2d | |||
| 2d2b75e33f | |||
| a9b7dff83a | |||
| 75d6f78b40 | 
| @@ -1,6 +1,6 @@ | |||||||
| name: Release Creation | name: Release Creation | ||||||
|  |  | ||||||
| on:  | on: | ||||||
|   release: |   release: | ||||||
|     types: [published] |     types: [published] | ||||||
|  |  | ||||||
| @@ -9,9 +9,11 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|     - run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner." |     - run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner." | ||||||
|      |  | ||||||
|     #- uses: actions/checkout@v3 |     #- uses: actions/checkout@v3 | ||||||
|     - uses: RouxAntoine/checkout@v3.5.4 |     - uses: RouxAntoine/checkout@v3.5.4 | ||||||
|  |       with: | ||||||
|  |         ref: 'v13' | ||||||
|  |  | ||||||
|     # get part of the tag after the `v` |     # get part of the tag after the `v` | ||||||
|     - name: Extract tag version number |     - name: Extract tag version number | ||||||
| @@ -29,7 +31,7 @@ jobs: | |||||||
|         url: https://www.uberwald.me/gitea/${{gitea.repository}} |         url: https://www.uberwald.me/gitea/${{gitea.repository}} | ||||||
|         manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json |         manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json | ||||||
|         download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/rddsystem.zip |         download: https://www.uberwald.me/gitea/${{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: | ||||||
| @@ -37,7 +39,7 @@ jobs: | |||||||
|  |  | ||||||
|     - name: Install dependencies |     - name: Install dependencies | ||||||
|       run: npm install |       run: npm install | ||||||
|        |  | ||||||
|     - name: Build the compendiums |     - name: Build the compendiums | ||||||
|       run: node ./tools/packCompendiumsToDist.mjs |       run: node ./tools/packCompendiumsToDist.mjs | ||||||
|  |  | ||||||
| @@ -46,29 +48,29 @@ jobs: | |||||||
|          apt update -y |          apt update -y | ||||||
|          apt install -y zip |          apt install -y zip | ||||||
|  |  | ||||||
|     - run: zip -r ./rddsystem.zip system.json template.json README.md LICENSE.txt assets/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/  |     - run: zip -r ./rddsystem.zip system.json template.json README.md LICENSE.txt assets/ css/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/ | ||||||
|      |  | ||||||
|     - name: setup go |     - name: setup go | ||||||
|       uses: actions/setup-go@v3 |       uses: actions/setup-go@v3 | ||||||
|       with: |       with: | ||||||
|         go-version: '>=1.20.1' |         go-version: '>=1.20.1' | ||||||
|      |  | ||||||
|     - name: Use Go Action   |     - name: Use Go Action | ||||||
|       id: use-go-action |       id: use-go-action | ||||||
|       uses: https://gitea.com/actions/release-action@main |       uses: https://gitea.com/actions/release-action@main | ||||||
|       with: |       with: | ||||||
|         files: |- |         files: |- | ||||||
|           ./rddsystem.zip   |           ./rddsystem.zip | ||||||
|           system.json |           system.json | ||||||
|         api_key: '${{secrets.ALLOW_PUSH_RELEASE}}' |         api_key: '${{secrets.ALLOW_PUSH_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 | ||||||
|       with: |       with: | ||||||
|         token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }} |         token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }} | ||||||
|         id: 'foundryvtt-reve-de-dragon' |         id: 'foundryvtt-reve-de-dragon' | ||||||
|         version: ${{github.event.release.tag_name}} |         version: ${{github.event.release.tag_name}} | ||||||
|         manifest: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json' |         manifest: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json' | ||||||
|         notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md' |         notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md' | ||||||
|         compatibility-minimum: '12' |         compatibility-minimum: '13' | ||||||
|         compatibility-verified: '12' |         compatibility-verified: '13' | ||||||
| @@ -1,14 +0,0 @@ | |||||||
| Pour que le bug soit traité, merci de préciser quelques détails. |  | ||||||
|  |  | ||||||
| ### Environment |  | ||||||
|  |  | ||||||
| > Indiquez quelques éléments de votre installation |  | ||||||
|  |  | ||||||
| * Foundry VTT Version: (Example 0.5.4) |  | ||||||
| * OS: [Windows, MacOS, Linux (which distro)] |  | ||||||
| * Modules ?: Liste des modules utilisés |  | ||||||
|  |  | ||||||
| ### Description du problème |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /label ~Bug ~Nonrepro |  | ||||||
| @@ -1,14 +0,0 @@ | |||||||
|  |  | ||||||
| ### Résumé de la fonctionnalité |  | ||||||
|  |  | ||||||
| > Décrivez de manière simple et concise la fonction que vous voulez voir ajoutée. |  | ||||||
|  |  | ||||||
| ### Expérience Utilisateur |  | ||||||
|  |  | ||||||
| > Indiquez ce que l'utilisateur aura comme bénéfice avec cette fonction. |  | ||||||
|  |  | ||||||
| ### Priority/Importance |  | ||||||
|  |  | ||||||
| > Selon vous, quelle est l'importance de cette fonctionnalité. |  | ||||||
|  |  | ||||||
| /label ~Feature |  | ||||||
| @@ -12,8 +12,8 @@ Pseudo : LeRatierBretonnien | |||||||
|  |  | ||||||
| Mainteneur/Développeur : LeRatierBretonnien | Mainteneur/Développeur : LeRatierBretonnien | ||||||
| Développeur : VincentVk | Développeur : VincentVk | ||||||
| Tests, Compendiums, Données: Fred, Fab, Grendel | Tests, Compendiums, Données: Fred, Fab, Grendel, LeRatierBretonnien, VincentVk | ||||||
| Styles/CSS : Mandar | Styles/CSS : Mandar, VincentVk | ||||||
|  |  | ||||||
| # Mentions Légales | # Mentions Légales | ||||||
|  |  | ||||||
| @@ -23,6 +23,6 @@ La carte des Terres Médianes du Rêve est une illustration de **Jidus**, utilis | |||||||
| Les silhouettes des créatures, humanoïdes et entités sont des illustrations de **Roland Barthélémy**, et sont utilisés dans le cadre de ce projet avec son aimable autorisation. | Les silhouettes des créatures, humanoïdes et entités sont des illustrations de **Roland Barthélémy**, et sont utilisés dans le cadre de ce projet avec son aimable autorisation. | ||||||
| Merci à eux !! | Merci à eux !! | ||||||
|  |  | ||||||
| Toute la propriété intellectuelle leur appartient, ce système est une adpatation destinée à fonctionner sous FoundryVTT. | Toute la propriété intellectuelle leur appartient, ce système est une adaptation destinée à fonctionner sous FoundryVTT. | ||||||
|  |  | ||||||
| L'ensemble du code est sous licence Creative Commons. | L'ensemble du code est sous licence Creative Commons. | ||||||
							
								
								
									
										1
									
								
								assets/actions/attaque.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="m214.02 19.115-.02.06a433.415 433.415 0 0 1 106.393 58.446L368.02 158.4C292.254 72.063 181.72 20.678 64.66 20.604c-14.96-.01-30.027.834-45.14 2.535v18.8c108.174-12.774 213.91 21.292 293.527 88.554l42.314 97.416C290.887 132.486 182.425 73.885 66.395 73.21a349.119 349.119 0 0 0-46.879 2.906v18.85c98.998-13.552 196.12 18.532 267.11 82.264l30.708 87.82c-53.922-85.58-148.482-138.656-249.986-139.69a297.451 297.451 0 0 0-47.83 3.398v18.914c93.33-15.18 185.38 18.05 247.677 83.27l20.694 83.917C246.555 230.42 160.67 176.716 67.7 175.423a248.202 248.202 0 0 0-48.182 4.06v19.036c89.513-17.794 178.655 19.16 230.357 89.468l4.62 73.348c-28.973-83.013-107.888-136.692-193.257-135.87a201.938 201.938 0 0 0-41.72 4.78v19.188c77.22-18.904 155.333 13.983 197.095 77.14l5.873 57.49c23.33-6.283 47.534-13.218 68.727-20.873 19.194-6.93 35.884-14.525 46.596-22.038 5.354-3.756 9.142-7.478 11.174-10.574 2.033-3.096 2.47-5.184 2.098-7.59l-1.252-8.123 137.074-39.556C446.897 159.92 363.67 69.964 260.654 19.114H214.02zm278.86 273.922-40.196 11.6c1.63 18.66-4.666 36.567-16.397 52.043-14.18 18.707-35.934 34.627-62.363 48.257-45.23 23.33-104.45 39.877-164.397 47.97l4.38 16.35c68.63-7.66 143.34-22.038 198.17-48.538 30.517-14.75 54.633-33.123 68.722-55.33 12.74-20.084 17.775-43.384 12.08-72.353zm-58.513 16.885-65.027 18.765c-.736 4.345-2.345 8.51-4.733 12.147-3.925 5.98-9.462 10.986-16.068 15.62-13.213 9.266-30.996 17.098-50.978 24.316-31.927 11.53-68.41 20.998-99.558 29.134l6.644 24.79c59.027-7.79 117.64-24.153 160.71-46.366 24.828-12.805 44.388-27.573 56.037-42.94 8.804-11.614 13.283-23.135 12.972-35.466zm-261.754 77.43-33.033 8.85 8.197 30.59c10.812 3.95 18.623 14.38 18.623 26.485 0 6.87-2.52 13.2-6.673 18.114l4.716 17.6 33.034-8.85-24.864-92.788zM138.22 443.79c-1.49 0-2.88.33-4.12.91l-75.6 20.255a30.49 30.49 0 0 1 4.625 16.14c0 .67-.03 1.33-.072 1.987l75.96-20.352c4.96-.386 8.698-4.37 8.698-9.453 0-5.35-4.138-9.488-9.49-9.488zM32.327 468.985c-6.798 0-12.11 5.312-12.11 12.11 0 6.798 5.312 12.11 12.11 12.11 6.798 0 12.111-5.312 12.111-12.11 0-6.798-5.313-12.11-12.11-12.11z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 2.2 KiB | 
							
								
								
									
										1
									
								
								assets/actions/comp.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M119.1 25v.1c-25 3.2-47.1 32-47.1 68.8 0 20.4 7.1 38.4 17.5 50.9L99.7 157 84 159.9c-13.7 2.6-23.8 9.9-32.2 21.5-8.5 11.5-14.9 27.5-19.4 45.8-8.2 33.6-9.9 74.7-10.1 110.5h44l11.9 158.4h96.3L185 337.7h41.9c0-36.2-.3-77.8-7.8-111.7-4-18.5-10.2-34.4-18.7-45.9-8.6-11.4-19.2-18.7-34.5-21l-16-2.5L160 144c10-12.5 16.7-30.2 16.7-50.1 0-39.2-24.8-68.8-52.4-68.8-2.9 0-4.7-.1-5.2-.1zM440 33c-17.2 0-31 13.77-31 31s13.8 31 31 31 31-13.77 31-31-13.8-31-31-31zM311 55v48H208v18h103v158h-55v18h55v110H208v18h103v32h80.8c-.5-2.9-.8-5.9-.8-9 0-3.1.3-6.1.8-9H329V297h62.8c-.5-2.9-.8-5.9-.8-9 0-3.1.3-6.1.8-9H329V73h62.8c-.5-2.92-.8-5.93-.8-9 0-3.07.3-6.08.8-9H311zm129 202c-17.2 0-31 13.8-31 31s13.8 31 31 31 31-13.8 31-31-13.8-31-31-31zm0 160c-17.2 0-31 13.8-31 31s13.8 31 31 31 31-13.8 31-31-13.8-31-31-31z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 996 B | 
							
								
								
									
										1
									
								
								assets/actions/defense.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M80 32c-64 256 48 416 176 464 128-48 240-208 176-464-112 32-240 32-352 0zm99.3 52.9c14.7 27.9 40.1 26.4 65 26.4l53.9 1.5 7.8 25 77.1 10.3 3.5 49.9c-27.9 7.4-83.7 5.9-83.8 17.7-.2 20.6 36.3 16.2 78.1 5.9L356.7 276l-61.4 4.4c3.8 46.4-1.2 77.6-35.6 110.7l-21.9-55.3c-12.6 22.6-30 38.8-57.3 41.4 10.6-26 19.1-46.7 9.7-76.3-13.5 13.3-35.1 18.7-64.8 16.7 31.6-49 48.3-101.9 62.1-151.9l-23.2-20.6c-6.6-23.5-1.3-44.1 15-60.2z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 621 B | 
							
								
								
									
										1
									
								
								assets/actions/defense1.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M261.563 64.28A191.758 191.758 0 0 0 64.25 256a191.758 191.758 0 1 0 383.5 0A191.758 191.758 0 0 0 261.562 64.28zm-4.625 9.126 8.937 5.156v10.313l-8.938 5.156-8.906-5.155V78.562l8.907-5.156zm3.53 29.25A153.407 153.407 0 0 1 409.407 256a153.407 153.407 0 0 1-306.812 0A153.407 153.407 0 0 1 260.47 102.656zm-11.53 20.03a133.607 133.607 0 0 0-65.157 20.908V368.22a133.607 133.607 0 0 0 65.157 21.092V122.688zm17.687.314v266.125a133.607 133.607 0 0 0 63.438-22.03V145a133.607 133.607 0 0 0-63.438-22zm-100.5 34.344A133.607 133.607 0 0 0 122.405 256a133.607 133.607 0 0 0 43.72 98.78V157.345zm-60.72 1.625 8.907 5.155v10.28l-8.906 5.157-8.937-5.156v-10.28l8.936-5.157zm300.5 0 8.94 5.155v10.28l-8.94 5.157-8.905-5.156v-10.28l8.906-5.157zm-58.155.093V353.03A133.607 133.607 0 0 0 389.594 256a133.607 133.607 0 0 0-41.844-96.938zm57.813 173.125 8.937 5.156v10.312l-8.938 5.156-8.906-5.156v-10.312l8.906-5.156zm-299.813.718 8.938 5.156v10.313l-8.938 5.156-8.938-5.155v-10.313l8.938-5.156zm149.906 85.188 8.938 5.156v10.313l-8.938 5.156-8.906-5.158v-10.31l8.906-5.156z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										66
									
								
								assets/actions/jeu.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,66 @@ | |||||||
|  | <?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 310.12469 310.12469" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg6" | ||||||
|  |    sodipodi:docname="jeu.svg" | ||||||
|  |    width="310.12469" | ||||||
|  |    height="310.12469" | ||||||
|  |    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="2532" | ||||||
|  |      inkscape:window-height="1492" | ||||||
|  |      id="namedview8" | ||||||
|  |      showgrid="false" | ||||||
|  |      fit-margin-top="0" | ||||||
|  |      fit-margin-left="0" | ||||||
|  |      fit-margin-right="0" | ||||||
|  |      fit-margin-bottom="0" | ||||||
|  |      inkscape:zoom="1.4355469" | ||||||
|  |      inkscape:cx="155.06205" | ||||||
|  |      inkscape:cy="142.25079" | ||||||
|  |      inkscape:window-x="0" | ||||||
|  |      inkscape:window-y="0" | ||||||
|  |      inkscape:window-maximized="0" | ||||||
|  |      inkscape:current-layer="svg6" /> | ||||||
|  |   <g | ||||||
|  |      class="" | ||||||
|  |      transform="translate(-100.93795,-121.74921)" | ||||||
|  |      id="g4"> | ||||||
|  |     <path | ||||||
|  |        d="m 477.518,181.966 a 25,25 0 0 1 -34.91,23 l -62.29,150.26 h -248.92 l -62.24,-150.19 a 25,25 0 1 1 9.73,-7.29 l 87,71.2 20.92,-126.4 a 25,25 0 1 1 14.7,-1.85 l 54.31,117 54.42,-117.3 a 25,25 0 1 1 14.58,2.08 l 20.93,126.42 87.26,-71.3 a 25,25 0 1 1 44.51,-15.63 z m -71.66,241.25 h -300 v 60 h 300 z m -27.75,-52 h -244.22 v 36 h 244.22 z" | ||||||
|  |        fill="#ffffff" | ||||||
|  |        fill-opacity="1" | ||||||
|  |        transform="matrix(0.7,0,0,0.7,76.8,76.8)" | ||||||
|  |        id="path2" /> | ||||||
|  |   </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										63
									
								
								assets/actions/meditation.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,63 @@ | |||||||
|  | <?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" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg8" | ||||||
|  |    sodipodi:docname="meditation1.svg" | ||||||
|  |    width="512" | ||||||
|  |    height="512" | ||||||
|  |    inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"> | ||||||
|  |   <metadata | ||||||
|  |      id="metadata14"> | ||||||
|  |     <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="defs12" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      pagecolor="#ffffff" | ||||||
|  |      bordercolor="#666666" | ||||||
|  |      borderopacity="1" | ||||||
|  |      objecttolerance="10" | ||||||
|  |      gridtolerance="10" | ||||||
|  |      guidetolerance="10" | ||||||
|  |      inkscape:pageopacity="1" | ||||||
|  |      inkscape:pageshadow="2" | ||||||
|  |      inkscape:window-width="3840" | ||||||
|  |      inkscape:window-height="2054" | ||||||
|  |      id="namedview10" | ||||||
|  |      showgrid="true" | ||||||
|  |      fit-margin-top="0" | ||||||
|  |      fit-margin-left="0" | ||||||
|  |      fit-margin-right="0" | ||||||
|  |      fit-margin-bottom="0" | ||||||
|  |      inkscape:zoom="1.4355469" | ||||||
|  |      inkscape:cx="254.56378" | ||||||
|  |      inkscape:cy="255.99978" | ||||||
|  |      inkscape:window-x="-11" | ||||||
|  |      inkscape:window-y="-11" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg8"> | ||||||
|  |     <inkscape:grid | ||||||
|  |        type="xygrid" | ||||||
|  |        id="grid856" /> | ||||||
|  |   </sodipodi:namedview> | ||||||
|  |   <path | ||||||
|  |      id="polygon2" | ||||||
|  |      style="fill:#ffffff;fill-opacity:1;stroke:none" | ||||||
|  |      d="M 256,0 0,256 256,512 512,256 Z m 5.11719,62.361328 c 8.239,0 15.89463,4.297288 21.83203,12.054688 5.2108,6.811 8.83798,16.231192 9.64648,26.841794 -8.4868,-3.970403 -17.26742,-6.37191 -26.14062,-7.13281 v 12.81836 c 8.5484,0.9429 17.03537,3.85822 25.48437,8.64062 -1.442,8.41469 -4.67333,15.84043 -8.99023,21.48243 -5.9367,7.7574 -13.59443,12.05468 -21.83203,12.05468 -8.2376,0 -15.8726,-4.29728 -21.8086,-12.05468 -4.452,-5.8184 -7.76497,-13.52864 -9.14257,-22.26953 7.8043,-4.21541 15.53348,-6.75681 23.20898,-7.72071 V 94.191406 c -7.938,0.763 -15.87192,2.852576 -23.66992,6.300784 0.9261,-10.297007 4.51857,-19.430374 9.60547,-26.076174 5.936,-7.7581 13.57099,-12.052735 21.80859,-12.052735 z M 228.50391,144.4375 c 0.14,0.1883 0.27391,0.38286 0.41601,0.56836 7.8876,10.3082 19.34232,17.19336 32.19922,17.19336 12.8569,0 24.31162,-6.88586 32.19922,-17.19336 0.1421,-0.1862 0.27797,-0.37936 0.41797,-0.56836 7.2765,3.3453 12.81763,7.79108 15.76953,12.86328 h 0.0449 l 29.11524,45.10547 35.48046,-15.37891 c 20.5632,-11.2833 43.10446,16.80074 21.43946,29.18164 l -66.12891,30.84571 -25.74609,-33.90821 c -11.6662,23.2505 -11.80448,46.48779 6.66992,69.73829 37.3275,-3.0275 65.31156,3.90026 69.47656,19.44726 3.4104,12.7316 -9.91357,28.42679 -33.35937,42.45899 l -66.10743,-21.9629 33.66602,-11.17773 -4.11328,-12.4043 -50.29102,16.69141 -50.26757,-16.69141 -4.11133,12.4043 126.1289,41.89063 15.53321,37.60351 -64.44532,-20.10351 0.0234,-0.22071 c -0.2989,-0.0168 -0.5782,-0.0463 -0.875,-0.0645 l -0.30664,-0.0879 h -1.09375 c -43.1116,-2.7132 -70.90445,-9.13273 -109.87695,-29.64063 -19.6938,-13.027 -30.49667,-27.09126 -27.38867,-38.69726 h -0.0215 c 3.4755,-12.9682 23.51598,-19.95189 51.73438,-20.14649 5.3179,-0.0364 10.93654,0.18537 16.77734,0.63477 19.418,-23.6082 20.76969,-47.21649 7.67969,-70.80859 l -26.6211,35.04296 -66.1289,-30.84375 c -21.665,-12.3816 0.87304,-40.46424 21.43554,-29.18164 l 35.46094,15.37891 29.13672,-45.10547 0.26172,0.0664 c 2.9421,-5.1016 8.50701,-9.56969 15.81641,-12.92969 z m -44.58008,217.70117 c 12.7582,5.6602 24.87218,9.90172 37.20898,13.10352 l -48.91406,15.24609 z" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 3.8 KiB | 
							
								
								
									
										1
									
								
								assets/actions/oeuvre.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(2,-1)" style=""><path d="m375.2 23.61-12.7 12.7 24.5 24.5c.5-1.2 1-2.3 1.5-3.5 2.4-6.6 4.1-12.4 4.9-15.5zm33.3 30.5c-.9 3-1.9 5.9-3.3 9.6-4 10.8-9.1 23.4-20.2 30.4-4 2.4-8.1 2.6-11.2 2.3-3.1-.3-5.6-1.1-7.5-1.6-1.7-.4-2.6-.6-3.2-.7-.6.9-1.2 2.2-1.6 4.5-.8 3.19-1 7.49-.8 11.59.1 6 .7 10.5 1.2 13.1l26.8 26.8c2.6.4 7.1 1 13 1.2 7.5.1 14.3-1.8 16-2.7-.1-.8-.2-1.4-.6-2.9-.5-2-1.3-4.5-1.7-7.6-.3-3.1 0-7.3 2.3-11.2 7-11.1 19.6-16.2 30.5-20.3 3.6-1.4 6.6-2.2 9.6-3.1l-16.4-32.89zm-67.2 3.4-12.7 12.7 17.4 17.5c1.3-2.9 3-5.6 5.6-7.9 2.5-2.2 5.6-3.3 8.3-3.7zm128.9 60.99c-3.2.8-9.1 2.4-15.7 5-1.1.4-2.2.8-3.4 1.3l24.6 24.6 12.7-12.7zm-120.7 17.9L217.4 262.3l9.8 9.8 129-129zm86.3 15.5c-.4 2.8-1.5 6-3.8 8.5s-4.8 4.3-7.5 5.6l17.3 17.3 12.7-12.7zm-66.9 3.9L240 284.9l9.7 9.6 125.9-132zm-226.3 94.5c-30.4 0-60.87 11.6-84.13 34.9-46.53 46.5-46.53 121.7 0 168.3C105 500 180.2 500 226.8 453.5c35.8-35.9 43.9-88.5 24.7-132.2L156.8 416l14.9 14.9-12.8 12.7-90.46-90.5 12.73-12.7 14.75 14.7 94.78-94.7c-15.3-6.8-31.7-10.1-48.1-10.1zm60.6 23.2-94.5 94.4 11.3 11.3 94.5-94.4zm24 24L132.7 392l11.2 11.2 94.6-94.4z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										65
									
								
								assets/actions/sort.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,65 @@ | |||||||
|  | <?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" | ||||||
|  |    width="66.69709mm" | ||||||
|  |    height="66.69709mm" | ||||||
|  |    viewBox="0 0 378.10574 378.10571" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg3" | ||||||
|  |    sodipodi:docname="sort.svg" | ||||||
|  |    inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"> | ||||||
|  |   <metadata | ||||||
|  |      id="metadata9"> | ||||||
|  |     <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="defs7" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      pagecolor="#ffffff" | ||||||
|  |      bordercolor="#666666" | ||||||
|  |      borderopacity="1" | ||||||
|  |      objecttolerance="10" | ||||||
|  |      gridtolerance="10" | ||||||
|  |      guidetolerance="10" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pageshadow="2" | ||||||
|  |      inkscape:window-width="3840" | ||||||
|  |      inkscape:window-height="2054" | ||||||
|  |      id="namedview5" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="3.887601" | ||||||
|  |      inkscape:cx="72.254869" | ||||||
|  |      inkscape:cy="97.300114" | ||||||
|  |      inkscape:window-x="-11" | ||||||
|  |      inkscape:window-y="-11" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg3" | ||||||
|  |      inkscape:document-rotation="0" | ||||||
|  |      inkscape:snap-text-baseline="true" | ||||||
|  |      fit-margin-top="0" | ||||||
|  |      fit-margin-left="0" | ||||||
|  |      fit-margin-right="0" | ||||||
|  |      fit-margin-bottom="0" /> | ||||||
|  |   <path | ||||||
|  |      id="Sélection #2" | ||||||
|  |      fill="none" | ||||||
|  |      stroke="black" | ||||||
|  |      stroke-width="1" | ||||||
|  |      d="M 189.05286,0 378.10571,189.05286 189.05285,378.10571 0,189.05286 Z m 98.94184,241.93328 c -0.88,-10.41 -2.89,-10.17 -9.87,-16.75 l -5.39,-5.72 c -2.61,-2.12 -6.9,-3.02 -8.72,-5.91 -1.19,-1.9 -0.91,-4.46 -1.28,-6.62 -3.40308,-4.90559 -2.01923,-20.20245 -2.01923,-26.63889 3.88586,-9.60746 4.36923,-1.69111 7.45923,-14.36111 0.62,-2.55 2.32,-6.14 1.21,-8.69 -1.07,-2.43 -3.44,-2.03 -6.71,-5.17 -5.66937,-7.30653 -11.39498,-14.88252 -18.68,-20.92 -23.49144,-15.67176 -34.12005,-20.68725 -60,-20.32 -8.54383,0.23148 -13.2432,0.66798 -20,2.68 -19.05,6.09 -27.58,11.85 -41.76999,25.79 -8.08,7.96 -7.17,10.3 -10.91,14.41 -3.1,3.4 -6.12,3.44 -6.73,7.27 -0.64,1.83 -0.09,3.98 0,5.78 1.91418,8.65633 2.50026,3.00305 7.73101,9.8295 1.38405,9.6854 0.3222,25.26042 -0.70608,33.05113 -2.53556,2.89228 -2.29493,5.91937 -3.63493,7.97937 -1.62,2.49 -4.35,2.16 -7.77,5.03 -5.170004,4.32 -4.470004,8.06 -13.210004,13.28 1.78,5.5 4.63,5.91 10,6 z M 195.6316,118.20709 c 11.22808,5.82176 1.31866,21.02928 -11.27386,31.1911 13.0336,5.31132 -0.79998,6.64062 23.09132,6.48796 l 32.86359,-0.54563 13.5005,1.22254 7.27084,3.68304 c -4.13,5.49 -2.71929,1.23718 -2.08929,8.68718 h -4 c -0.28,-1.68 -0.54282,-4.85331 -1.87282,-6.17331 -3.32127,-0.17387 -9.61514,-0.5831 -13.55025,0.47743 -0.17052,3.22972 -0.29693,4.01588 -0.57693,5.69588 l -3.40923,-0.34102 c -0.28,-1.68 0.27564,-3.83025 -1.05436,-5.15025 -3.7305,-0.17387 -10.29718,-0.7195 -13.48204,0.40923 -1.33,1.32 -0.77437,3.40204 -1.05437,5.08204 h -3 c -0.28,-1.68 0.071,-3.08 -0.91796,-5.08204 -2.83922,-1.53335 -14.39204,-0.93796 -18.08204,-0.91796 -1.96,0.01 -5.02,-0.11 -6.68,1.02 -0.19823,6.27508 -0.4088,8.38327 1.52129,9.86916 l 20.15871,0.0399 v 37.07089 h -19.09 c 0.0887,-5.45486 2.17,-22.09 0,-25.77 -2.24,-3.53 -10.37,-4.58 -13.31,-1.63 -0.59765,14.41964 -0.37159,20.85123 -0.92619,27.34486 -16.5374,0 -13.4074,0.42 -16.5374,0 l -0.13641,-21.94486 c -0.0284,-4.56991 -0.5617,-9.93269 1.12488,-14.46674 3.57532,-2.18241 14.40143,0.2341 20.38143,-0.7259 1.06669,-3.31458 1.12908,-6.5781 0.80651,-10.05451 -2.74793,-0.83105 -4.76282,-0.70285 -7.31282,-0.75285 h -11 c -7.39,0.05 -9.43418,2.79797 -7.61418,10.68797 l -6.48228,0.24114 c 0.72,-2.06 1.97646,-7.02474 0.81646,-9.16474 -1.7,-3.14 -11.93127,-2.75719 -14.21127,-0.43719 -2.03,2.07 -1.8049,7.64421 -1.24493,10.08421 l -7.37013,0.12387 c -0.24405,12.94493 0.23633,18.13752 0.10633,29.28752 -0.09,7.42 0.28,6.88722 -7.99999,7.17722 v -28 c 0,-2.48 0.22,-6.59 -1.17,-8.69 -1.62,-2.42 -4.26,-2.22 -6.83,-2.31 2.73,-7.8 6.25917,-8.9 -1.27083,-9 10.53404,-8.39725 16.12632,-16.70355 22.85717,-22.49183 5.05278,-4.9362 12.06169,-10.2231 15.11169,-11.61765 14.97984,-6.56268 20.63207,-10.69702 43.93886,-10.61671 z m -73.26379,44.49619 c -0.79548,4.04536 -1.9331,12.40663 2.6469,12.48663 10.50353,0.43469 11.50999,-8.2279 8.90999,-11.7879 -1.43,-1.96 -9.22689,-0.64873 -11.55689,-0.69873 z m 19.62689,11.59316 9.01278,-0.14468 0.91722,5.78152 c 0.10638,11.6222 0,0 0.0146,31.52202 -8.59422,-0.32911 -7.4946,-0.52202 -9.9446,-0.52202 z m 80.95177,-0.77164 8.14469,0.22835 -0.0965,36.18013 h -8 z m 19.38582,0.5305 7.6014,-0.33759 0.061,36.21557 h -8 z m -129.12528,49.01235 11.33333,-0.31493 45.72718,-0.54563 59.09028,-0.81845 33.54662,-0.27282 c 7.10809,1.39089 4.61048,5.28283 13.46463,11.36941 -49.05198,-0.38776 -122.72138,-0.48241 -173.42548,-0.8649 z" | ||||||
|  |      style="fill:#d6d2d0;fill-opacity:1;stroke:none" | ||||||
|  |      sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccsccccccccccccccccccccccccccccccccccc" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 5.2 KiB | 
							
								
								
									
										1
									
								
								assets/actions/surprise-demi.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,-28)" style=""><path d="M355.102 21.097c-33.682.164-64.173 18.585-74.615 50.5 21.357-.79 23.203 53.922 23.203 53.922l41.619 6.262c-13.41 12.963-50.025 5.967-50.025 5.967-17.14 19.182-33.124 40.966-47.758 57.578-15.952 18.127-35.2 38.103-57.018 60.086-6.79 6.823 41.594-9.821 34.342-2.604-24.567 12.751-42.297 16.097-61.764 32.069-31.312 25.674-62.853 60.71-81.146 79.431-7.711 7.91-44.362 37.674 20.469 34.74 2.404 7.52-1.621 9.456-7.493 15.293-4.327 4.303-18.082.283-22.263 2.828-22.172 35.055-17.246 37.975-27.43 58.047-4.252 11.635 41.68-14.404 64.305-34.18 13.974-7.58 25.147-21.652 35.002-17.202 43.11 18.984 129.826 35.53 141.328 27.619 18.368-12.646-10.321-46.343 3.832-97.912 23.47 5.817 43.825 13.657 66.767 11.459-1.581 49.307 3.56 55.306-3.888 104.777l59.129 21.127 1.91-13.809-33.815-22.478c14.568-50.659 16.809-72.578 15.227-121.719-.16-5.372-45.168-24.325-74.492-33.133l18.593-30.412c30.393-44.788 124.141-62.055 127.932-88.258-13.02-19.676 3.022-27.384-25.092-21.912-6.295 1.318-13.771 24.346-18.023 27.213-7.843 5.276-40.655 24.477-51.951 18.377-1.9-1.026 7.246-33.441 6.85-44.78-.116-3.205-1.19-6.625-2.866-10.001.185-.64 15.24-52.482 54.809-94.016-43.978 25.134-65.332 79.925-65.354 79.98-2.207-2.134-4.476-3.983-6.639-5.423-1.916-14.7-4.819-73.02 68.598-78.776-21.427-21.177-47.704-30.78-72.283-30.66z" fill="#fff" fill-opacity="1" transform="translate(76.8, 76.8) scale(0.7, 0.7) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										1
									
								
								assets/actions/surprise-totale.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,-28)" style=""><path d="M332.031 66.13c-28.807-.01-55.439 14.149-67.88 40.65 20.79 1.744 16 55.07 16 55.07-11.814 16.687-24.73 33.186-36.589 50.146 0 0-99.046 132.283-178.378 168.025-28.049 22.593-33.305 36.532-44.137 52.649-4.877 9.54 9.257 14.324 11.701 13.2 22.726-10.461 25.176-20.866 47.07-35.675 12.805-5.026 23.839-15.9 31.854-11.049 34.962 20.86 107.556 44.28 118.271 38.706 17.857-9.263-5.78-43.585 16.174-89.057 31.97-3.352 58.916-.885 88.332-12.094 3.483 50.279 10.106 54.59 6.766 107.092l71.2 1.045.698-14.61-41.814-11.105c11.528-56.054 11.816-78.996 4.672-127.996-.956-6.622-53.746-8.275-81.012-3.79 24.449-24.202 40.274-45.24 47.506-68.44l.027.189c7.637 15.923 30.083 33.958 35.336 37.125 27.704 11.048 38.214 7.982 62.955 3.887 4.907-.784 27.47 24.537 44.807 9.597 2.642-20.238 16.522-20.369-4.938-32.71-4.847-2.73-27.063 7.462-31.418 6.898-20.21-2.481-30.954-5.211-58.45-12.703-10.23-13.187-32.676-56.136-55.43-59.744 6.535-14.15 28.226-53.108 73.664-66.237-20.943-26.54-49.925-39.057-76.987-39.068zm82.405 46.722c-46.658 19.516-58.266 50.4-58.266 50.4l9.916 7.644s9.646-4.765 48.35-58.044zm23.04 160.005-4.658 11.418c5.233-.083 10.425.47 15.328 1.608-12.774 30.856-23.938 59.635-28.181 93.094l-.908 7.558 4.863-5.889c20.805-25.671 32.303-55.25 44.95-85.78 4.203 2.656 8.24 5.885 12.071 9.35l4.78-11.374-20.518-8.526-31.767 66.579 24.062-69.713-20.021-8.325z" fill="#fff" fill-opacity="1" transform="translate(76.8, 76.8) scale(0.7, 0.7) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										1
									
								
								assets/actions/tache.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M56.813 18.438c-.47-.005-.938.014-1.407.03-.625.023-1.252.066-1.875.126-7.468.72-14.682 4.148-22.31 11.125-9.985 9.128-12.863 17.66-11.407 27.718 1.455 10.056 8.353 22.236 21.125 34.906 2.895 2.872 6.126 5.737 9.593 8.625 1.27 1.055 2.565 2.13 3.907 3.186a200.62 200.62 0 0 0 3.438 2.656c.232.175.454.358.688.532C74.71 119.38 95.558 131.28 120.25 142.22c159.723 161.31 288.815 297.553 374.594 352.124-51.11-85.624-187.432-214.62-350-375.531-10.23-23.802-21.115-43.71-32.094-59.282 35.46-10.19 82.517-2.294 125.75 40.94 40.243 40.242 52.642 90.776 41.375 128.343 4.89 4.914 9.883 9.913 14.688 14.75 19.07-46.1 4.573-108.895-42.844-156.313-35.694-35.693-75.48-50.324-111.032-50.22-1.147.005-2.3.03-3.438.064-21.844.65-41.957 6.898-58.344 17.187a102.302 102.302 0 0 0-8.312 5.814c1.33 3.094 2.758 5.884 4.406 8.218 1.92 2.72 4.004 4.936 6.906 6.688 2.202-1.717 4.498-3.375 6.938-4.906a88.727 88.727 0 0 1 3.25-1.97c8.196 10.088 15.465 24.624 25.47 47.25-23.907-10.568-38.822-18.04-49.033-27 .024-.03.04-.063.064-.093-.433-.33-.867-.655-1.28-1-.013-.008-.022-.02-.033-.03-11.215-10.375-16.532-22.934-22.31-44.5 5.988 1.605 11.256 3.19 16 4.844a137.13 137.13 0 0 1 26.81-15.875c-9.5-7.738-18.552-11.93-26.686-12.97-1.443-.185-2.87-.3-4.282-.313zM493.28 64.374c-77.985 0-125.587 28.886-146.124 69.406-20.536 40.52-13.994 90.39 9.688 131.407 11.385 19.72 17.807 40.687 19.187 61.22a4329.64 4329.64 0 0 1 18.47 19.187c2.31-29.955-5.072-61.35-21.47-89.75-21.13-36.602-26.155-80.112-9.186-113.594 16.97-33.481 55.94-59.188 129.437-59.188V64.376zM37.907 114.938c-2.894 23.925 6.18 50.21 29.532 73.562l13.218-13.188c-15.97-15.97-23.188-31.833-24.437-46.593-6.646-4.51-12.754-9.102-18.314-13.782zM124.062 277c-24.466-.028-45.04 4.92-61.343 13.656-24.842 13.31-39.363 35.865-40.75 60.47-2.78 49.207 44.38 102.65 140.405 118.28 101.63 16.544 170.303-9.184 205.406-54.062 1.01-1.29 1.988-2.59 2.94-3.906-4.552-4.232-9.148-8.52-13.783-12.875-1.233 1.79-2.52 3.55-3.875 5.28-29.97 38.315-90.355 62.97-187.687 47.126-90.394-14.715-126.796-62.527-124.75-98.783 1.023-18.127 10.982-34.37 30.938-45.062 19.955-10.692 50.267-15.364 90.5-7.47 34.077 6.69 62.938 3.47 85.437-6.936-4.72-4.65-9.49-9.33-14.28-14.064-17.545 6.452-39.89 8.088-67.564 2.656-14.895-2.923-28.778-4.297-41.594-4.312z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 2.4 KiB | 
| Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB | 
| Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB | 
| Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB | 
| Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 163 KiB | 
| Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB | 
| Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB | 
| Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB | 
| Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB | 
| Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB | 
							
								
								
									
										1
									
								
								assets/ui/d100.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <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> | ||||||
| After Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB | 
| Before Width: | Height: | Size: 716 KiB After Width: | Height: | Size: 716 KiB | 
| Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB | 
| Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB | 
| Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB | 
| Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB | 
| Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB | 
| Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB | 
| Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
							
								
								
									
										1
									
								
								assets/ui/icon_sidebar_cards.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,-28)" style=""><path d="M119.436 36c-16.126 0-29.2 17.237-29.2 38.5v363c0 21.263 13.074 38.5 29.2 38.5h275.298c16.126 0 29.198-17.237 29.198-38.5v-363c0-21.263-13.072-38.5-29.198-38.5zm26.369 10.951 11.002 32.856 34.648.312-27.848 20.617 10.41 33.05-28.212-20.114-28.215 20.113L128 100.736 100.152 80.12l34.649-.312zM363.979 161.84c7.127 9.459 12.739 20.689 16.832 32.04 3.8 10.544 6.197 21.211 6.668 31.02-.163 19.015-3.915 23.274-14.557 36.934l-6.703-11.48c-10.85-13.106-30.779-48.4-47.383-43.672-6.521 6.11-8.996 13.37-10.313 20.802 2.898 8.8 4.477 18.43 4.477 28.516 0 15.293-3.615 29.54-9.996 41.416 22.643 4.537 57.927 19.332 57.973 39.223-.27 3.783-1.835 7.68-4.362 10.42-10.743 12.528-36.958 4.125-45.2 10.072.796 6.947 4.112 14.118 4.355 20.174.136 4.36-1.768 10.58-6.508 13.996-5.67 4.087-12.968 4.551-18.52 3.045C279.94 392.226 272 379.649 256 377c-13.544 3.491-22.412 13.87-34.742 17.346-5.552 1.506-12.85 1.042-18.52-3.045-4.74-3.417-6.644-9.636-6.508-13.996-.058-7.142 4.107-13.794 4.356-20.174-15.741-7.788-33.816 1.97-45.201-10.072-2.527-2.74-4.093-6.637-4.362-10.42 6.146-27.341 35.374-34.684 57.973-39.223C202.615 285.54 199 271.293 199 256c0-11.489 2.047-22.385 5.764-32.135-2.357-7.923-3.441-15.988-9.438-22.441-8.758-.925-14.079 6.897-17.842 12.63-11.683 19.5-18.718 30.606-32.88 46.192-16.604-23.4-19.314-49.29-13.157-70.988 6.065-20.331 19.17-38.798 37.926-47.924 21.216-9.766 39.872-10.03 58.885.203 5.163-13.053 10.4-25.65 18.035-36.209 9.625-13.31 23.8-25.631 43.707-25.295 38.8.656 73.993 51.156 73.979 81.807zm-72.22-63.893c-35.759 2.409-44.771 44.746-55.189 71.29l-9.447-7.087c-18.428-12.31-31.076-13.732-49.875-4.63-12.924 6.288-23.701 20.62-28.553 36.882-3.38 11.329-3.765 23.225-.949 33.645 9.45-13.549 15.806-30.08 28.317-39.178 7.486-7.975 26.27-8.498 35.45 3.897 4.838 7.02 7.437 14.54 9.5 22.234h72.165c.592-1.944 1.067-3.762 2.017-6.033 2.956-7.064 7.765-16.266 18.395-19.504 18.09-3.862 32.494 7.106 43.498 18.514 4.517 4.717 8.492 9.696 12.098 14.517-.69-6.798-2.477-14.651-5.31-22.508-13.127-36.707-37.889-51.031-70.386-32.011 2.556-16.423 16.87-35.72 46.25-26.962-9.094-17.135-30.355-42.471-47.98-43.066zM220.644 233c-2.31 6.965-3.643 14.753-3.643 23 0 15.85 4.892 30.032 12.26 39.855C236.628 305.68 245.988 311 256 311s19.372-5.32 26.74-15.145C290.108 286.032 295 271.85 295 256c0-8.247-1.334-16.035-3.643-23zM232 280h48s-8 14-24 14-24-14-24-14zm-11.14 33.566c-13.86 3.34-50.369 8.9-51.842 21.42 9.621 1.947 20.446.838 28.998 2.235 5.993 1.018 12.82 3.323 17.285 9.517 3.375 4.683 3.577 10.103 3.037 14.21-.543 5.89-3.317 10.557-3.975 16.32 15.955-2.59 28.264-17.532 41.637-18.268 16-.702 29.313 17.402 41.637 18.268-.893-5.59-3.262-11.158-3.975-16.32-.54-4.107-.338-9.527 3.037-14.21 4.465-6.194 11.292-8.5 17.285-9.517 9.742-2.229 19.975.396 28.998-2.235-5.77-13.125-39.813-19.454-51.841-21.42C281.665 323.01 269.45 329 256 329c-13.452 0-25.665-5.991-35.14-15.434zm117.122 64.649 28.213 20.113 28.215-20.113L384 411.264l27.848 20.617-34.649.312-11.004 32.856-11.002-32.856-34.648-.312 27.848-20.617z" fill="#fff" fill-opacity="1" transform="translate(76.8, 76.8) scale(0.7, 0.7) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg> | ||||||
| After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										1
									
								
								assets/ui/icon_sidebar_chat.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,-28)" style=""><path d="M211.313 21.094c-51.776 0-98.754 12.252-133.5 32.718C43.066 74.28 19.874 103.78 19.874 137.69c0 33.54 22.692 62.81 56.813 83.25L48.156 327.094l96.97-79.844c20.65 4.58 42.924 7.063 66.186 7.063 51.776 0 98.786-12.252 133.532-32.72 34.746-20.466 57.937-49.997 57.937-83.905s-23.19-63.41-57.936-83.875c-34.746-20.467-81.756-32.72-133.53-32.72zm0 18.687c48.8 0 92.866 11.77 124.03 30.126 31.165 18.357 48.75 42.447 48.75 67.78 0 25.338-17.585 49.457-48.75 67.814-31.164 18.357-75.23 30.125-124.03 30.125S118.445 223.857 87.28 205.5c-31.163-18.357-48.718-42.476-48.718-67.813 0-25.336 17.555-49.424 48.72-67.78C118.445 51.55 162.51 39.78 211.31 39.78zM96.53 89.938v18.688h93.126V89.937H96.53zm111.814 0v18.688h28.094V89.937h-28.094zm46.78 0v18.688h71.97V89.937h-71.97zM96.532 129.844v18.72h29.657v-18.72H96.53zm48.345 0v18.72h65.938v-18.72h-65.938zm84.656 0v18.72h38.095v-18.72H229.53zm56.782 0v18.72h40.782v-18.72h-40.78zM96.532 166.78v18.69h70.874v-18.69H96.53zm89.562 0v18.69h57.03v-18.69h-57.03zm75.72 0-.002 18.69h65.282v-18.69h-65.28zm92.342 90.25c-74.88 0-135.594 41.762-135.594 93.283 0 51.52 60.716 93.28 135.594 93.28 18.23 0 35.623-2.48 51.5-6.968l68.53 51.156-24.873-71.03c24.947-16.918 40.437-40.432 40.437-66.438 0-51.518-60.714-93.28-135.594-93.28zm-70.344 42.345h32.907v18.688H283.81v-18.688zm51.594 0h90.344v18.688h-90.344v-18.688zm-78.97 41.75h78.314v18.688h-78.313v-18.688zm97.002 0h20.968v18.688h-20.97l.002-18.688zm39.656 0h51v18.688h-51v-18.688zm-109.28 39h79.06v18.688h-79.062v-18.688zm97.748 0h44.188v18.688h-44.188v-18.688z" fill="#fff" fill-opacity="1" transform="translate(76.8, 76.8) scale(0.7, 0.7) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.8 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB | 
							
								
								
									
										54
									
								
								assets/ui/icon_sidebar_macros.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,54 @@ | |||||||
|  | <?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 640 640" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg4" | ||||||
|  |    sodipodi:docname="icon_sidebar_macros.svg" | ||||||
|  |    inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"> | ||||||
|  |   <metadata | ||||||
|  |      id="metadata10"> | ||||||
|  |     <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="defs8" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      pagecolor="#ffffff" | ||||||
|  |      bordercolor="#666666" | ||||||
|  |      borderopacity="1" | ||||||
|  |      objecttolerance="10" | ||||||
|  |      gridtolerance="10" | ||||||
|  |      guidetolerance="10" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pageshadow="2" | ||||||
|  |      inkscape:window-width="2666" | ||||||
|  |      inkscape:window-height="1514" | ||||||
|  |      id="namedview6" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="1.6241359" | ||||||
|  |      inkscape:cx="170.14667" | ||||||
|  |      inkscape:cy="292.89075" | ||||||
|  |      inkscape:window-x="0" | ||||||
|  |      inkscape:window-y="0" | ||||||
|  |      inkscape:window-maximized="0" | ||||||
|  |      inkscape:current-layer="svg4" | ||||||
|  |      units="in" /> | ||||||
|  |   <path | ||||||
|  |      d="m 378.25,116.16 c -13.6,-3.92 -27.76,4 -31.68,17.6 l -102.4,358.4 c -3.92,13.6 4,27.76 17.6,31.68 13.6,3.92 27.76,-4 31.68,-17.6 l 102.4,-358.4 c 3.92,-13.6 -4,-27.76 -17.6,-31.68 z m 51.68,108.88 c -10,10 -10,26.24 0,36.24 l 58.72,58.72 -58.72,58.72 c -10,10 -10,26.24 0,36.24 10,10 26.24,10 36.24,0 l 76.8,-76.8 c 10,-10 10,-26.24 0,-36.24 l -76.8,-76.8 c -10,-10 -26.24,-10 -36.24,0 z m -219.76,0 c -10,-10 -26.24,-10 -36.24,0 l -76.8,76.8 c -10,10 -10,26.24 0,36.24 l 76.8,76.8 c 10,10 26.24,10 36.24,0 10,-10 10,-26.24 0,-36.24 L 151.45,320 210.09,261.28 c 10,-10 10,-26.24 0,-36.24 z" | ||||||
|  |      id="path2" | ||||||
|  |      style="fill:#ffffff;stroke-width:0.8" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.1 KiB | 
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB | 
| Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB | 
| Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB | 
| Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB | 
| Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B | 
| Before Width: | Height: | Size: 162 B After Width: | Height: | Size: 162 B | 
| Before Width: | Height: | Size: 634 KiB After Width: | Height: | Size: 634 KiB | 
| Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB | 
| Before Width: | Height: | Size: 637 KiB After Width: | Height: | Size: 637 KiB | 
							
								
								
									
										306
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						| @@ -1,5 +1,221 @@ | |||||||
|  | # 13.0 | ||||||
|  |  | ||||||
|  | ## 13.0.9 - Le combat d'Illysis | ||||||
|  | - Fix | ||||||
|  |   - La montée en TMR fonctionne | ||||||
|  | - Nouvelle fenêtre de jets de dés | ||||||
|  |   - avancement du mode attaque | ||||||
|  |     - choix de tactique | ||||||
|  |     - choix des dommages, affichage | ||||||
|  |     - affichage de la surprise du défenseur | ||||||
|  |  | ||||||
|  | ## 13.0.8 - Le renouveau d'Illysis | ||||||
|  |  | ||||||
|  | - Fix Foundry V13 | ||||||
|  |   - Les états sont de nouveau affichés en ligne dans la feuille de personnage | ||||||
|  |   - les icones spécifiques Rêve de Dragon de la barre de droite sont de nouveau utilisées | ||||||
|  |  | ||||||
|  | - Nouvelle fenêtre de jets de dés | ||||||
|  |   - uniquement pour les oeuvres (chant, danse, musique, cuisine,...) | ||||||
|  |   - à activer dans les options avancées | ||||||
|  |  | ||||||
|  | ## 13.0.7 - Sous le signe d'Illysis | ||||||
|  |  | ||||||
|  | - Fix Foundry V13 | ||||||
|  |   - les tooltips des ajustements sont correctement visible | ||||||
|  |   - correction des affichages des signes d'heures dans la fenêtre d'astrologie | ||||||
|  |  | ||||||
|  | - en cas d'appel au moral lorsqu'une double significative est requise, | ||||||
|  |   le moral est perdu si la réussite est insuffisante | ||||||
|  | - transformation du niveau des musiques/danses/chants/recettes de cuisine en valeur numérique | ||||||
|  | - les effets draconiques sur une case inconnue (A0) ne causent plus de problèmes dans les TMRs | ||||||
|  |  | ||||||
|  | ## 13.0.6 - Le bandage d'Illysis | ||||||
|  |  | ||||||
|  | - Les soins sont de nouveau disponibles depuis les tokens | ||||||
|  | - Correction des boutons de la feuille simplifiée | ||||||
|  | - On peut de nouveau acheter dans les commerces | ||||||
|  |  | ||||||
|  | ## 13.0.5 | ||||||
|  |  | ||||||
|  | - Export CSV/Scriptarium à nouveau disponible dans les menus d'acteurs | ||||||
|  |  | ||||||
|  | ## 13.0.4 - Le long discours d'Illysis | ||||||
|  |  | ||||||
|  | - On peut de nouveau modifier les descriptions | ||||||
|  | - ne pas proposer l'export csv par défaut | ||||||
|  | - Correction de la macro "Jet quelconque" | ||||||
|  | - Correction de la ligne 'rêve actuel' ajoutée dans les caracs | ||||||
|  | - Corrections d'affichage | ||||||
|  |   - boutons de l'horloge | ||||||
|  |   - boutons de déplacement des TMR | ||||||
|  |   - modification des messages de tchat | ||||||
|  |  | ||||||
|  | ## 13.0.3 - La dernière auberge d'Illysis | ||||||
|  |  | ||||||
|  | - On peut de nouveau acheter aux commerces | ||||||
|  | - La description des Grizzal a des espaces | ||||||
|  | - Corrections v13 | ||||||
|  |   - Affichage des images et noms d'objets en ligne | ||||||
|  |   - affichage des compétences de créature sur une ligne | ||||||
|  |   - Affichage des informations d'acteur sur une ligne dans l'astrologie | ||||||
|  |   - Affichage des résultat de recherche | ||||||
|  |  | ||||||
|  | ## 13.0.0 - Le début de l'errance d'Illysis | ||||||
|  |  | ||||||
|  | - Migration vers la version 13 de Foundry | ||||||
|  |  | ||||||
| # 12.0 | # 12.0 | ||||||
|  |  | ||||||
|  | ## 12.0.50 - Le sommeil d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Le don de double rêve n'interrompt plus le sommeil toutes les heures | ||||||
|  | - la perte de fatigue à la descente des TMR est visible immédiatement | ||||||
|  |  | ||||||
|  | ## 12.0.49 - La deuxième lame d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Corrections | ||||||
|  |   - les défenses particulières sont correctement affichées | ||||||
|  |   - les vieux boucliers (sans catégorie de parade car créés il y a longtemps) peuvent parer... | ||||||
|  |   - Les attaques à distance n'ont pas de difficulté libre | ||||||
|  |  | ||||||
|  | ## 12.0.48 - La chèvre d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - le Bandersnatch a une protection de 10 | ||||||
|  | - la consistance chèvre est maintenant possible dans les recettes | ||||||
|  |   alchimiques (et toutes les consistances avec accents) | ||||||
|  | - un échec au lancement d'un sort pour le mettre en réserve brise | ||||||
|  |   la concentration du haut-rêvant | ||||||
|  | - Correction: les réussites particulières fonctionnent avec les caractéristiques dérivées | ||||||
|  |  | ||||||
|  | ## 12.0.47 | ||||||
|  |  | ||||||
|  | - Correction sur les mise à jour en cascade - | ||||||
|  | - Correction sur le force rendering après un changement de competence | ||||||
|  |  | ||||||
|  | ## 12.0.46 - Le double demi d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - correction des raffraîchissement lors du sommeil qui empêchait de dormir | ||||||
|  |   plusieurs heures | ||||||
|  | - Si la fatigue n'est pas utilisée, les rounds dans les TMR font perdre de l'endurance (au lieu d'en gagner) | ||||||
|  | - les TMRs se ferment correctement quand la fatigue maximale est dépassée | ||||||
|  | - le message de lancement de sort en réserve donne la description du sort | ||||||
|  | - suppression de double-messages lors de la fermeture des TMR | ||||||
|  |  | ||||||
|  | ## 12.0.45 - Les errements d'Astrobazzarh, encore | ||||||
|  |  | ||||||
|  | - La difficulté des méditations n'augmente plus en cas de réussite et d'échec normal | ||||||
|  | - Renommage du Bouton pour révéler/masquer le demi-rêve | ||||||
|  |  | ||||||
|  | ## 12.0.44 - Les errements d'Astrobazzarh, suite | ||||||
|  |  | ||||||
|  | - on peut de nouveau dormir et se réveiller reposé | ||||||
|  | - les possessions utilisent maintenant correctement le rêve actuel | ||||||
|  | - les sorts variables ne causent plus de soucis de voie pour le lancement de sorts | ||||||
|  | - les acteurs ayant un sort avec un coût de rêve entier ne sont plus considérés | ||||||
|  |   comme pouvant avoir un rêve variable | ||||||
|  |  | ||||||
|  | ## 12.0.42 - Les errements d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Correction de différentes automatisations de combat incorrectes | ||||||
|  | - Correction des jets `@roll[vue/-2]` qui tentaient de chercher une compétence -2 (à cause des armes à 1/2 mains) | ||||||
|  |  | ||||||
|  | ## 12.0.41 - La loupe d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - On peut de nouveau effectuer des tirages cachés | ||||||
|  | - Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence | ||||||
|  |  | ||||||
|  | ## 12.0.40 - Les mains d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - correction des attaques particulières en combat | ||||||
|  | - correction de message sur les min/max liés aux modificateurs de races (s'applique uniquement sur la taille) | ||||||
|  |  | ||||||
|  | ## 12.0.39 - Les mains d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - les armes à 1 ou 2 mains fonctionnent dans les liens de jets de dés | ||||||
|  | - commande `/jet` pour poster une demande de jet de dés | ||||||
|  |  | ||||||
|  | ## 12.0.38 - Les prévisions d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Correction de modifications de personnages qui ne s'affichaient pas: | ||||||
|  |   - changements d'endurance/vie/fatigue, transformé, ... | ||||||
|  | - Migration des compétences "Ecriture" en "Écriture" dans les tâches, livres, oeuvres et méditations | ||||||
|  | - Correction des jets de compétences de créatures | ||||||
|  | - Premières préparations techniques pour le passage à Founry v13 | ||||||
|  |   - liste des impacts d'un jet de dés (expérience, points de tâche, ...) | ||||||
|  |   - utilisation de l'extension hbs pour tous les fichiers handlebars | ||||||
|  |  | ||||||
|  | ## 12.0.37 - Les enchantements d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - les potions ont un état, seules les potions liquides sont enchantables | ||||||
|  | - les lancements de sorts du jour sont conservés jusqu'à chateau dormant | ||||||
|  | - lorsqu'un joueur souhaite enchanter une potion, les sorts d'enchantements/purification/permanence doivent avoir été lancés auparavant | ||||||
|  | - on peut enchanter des gemmes exactement comme des potions | ||||||
|  |  | ||||||
|  | ## 12.0.36 - L'alchimie d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Nouveautés | ||||||
|  |   - ajout d'un bouton pour enchanter les potions | ||||||
|  |   - standardisation des boutons d'actions sur les items | ||||||
|  |   - utilisations d'icones pour les actions de l'inventaire | ||||||
|  | - Corrections: | ||||||
|  |   - la commande /tmra sans paramètres fonctionne | ||||||
|  |   - les jets d'encaissement depuis le tchat fonctionnent | ||||||
|  |   - affichage de la vie/endurance en cas de blessures et remise à neuf | ||||||
|  |   - les queues durant 12 heures ajoutées début Vaisseau ne durent plus 24 heures | ||||||
|  | - Compendiums | ||||||
|  |   - Corrections des remedes enchantables | ||||||
|  |   - Corrections de descriptions pour proposer les jet de dés | ||||||
|  |  | ||||||
|  | ## 12.0.35 - La Solution d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Fix problème d'initialisation des feuilles d'items | ||||||
|  |  | ||||||
|  | ## 12.0.34 - la tête d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - support de liens "jets de dés" | ||||||
|  |   - on peut ajouter des liens "jet de dés" dans les journaux, descriptions, notes, maladresses, ... | ||||||
|  |   - avec la syntaxe `@roll[...]` on peut ajouter le lien vers: | ||||||
|  |     - un jet de caractéristique/compétence `@roll[carac/competence/difficulte]` / `@roll[carac/difficulte]` / `@roll[carac/competence]` | ||||||
|  |     - une formule foundry `@roll[2d6]` pour lancer 2d6 | ||||||
|  |     - une manipulation alchimique `@roll[couleur vert-bleu]` | ||||||
|  |   - les liens "jet avec caractéristiques" s'appliquent: | ||||||
|  |     - à tous les tokens sélectionnés | ||||||
|  |     - sinon, à l'acteur propriétaire (dans le cas d'un Item) ou à l'acteur courant | ||||||
|  |     - sinon, au personnage du joueur | ||||||
|  |   - on peut poster les liens dans le tchat pour proposer un jet aux joueurs | ||||||
|  | - gestion des blocs secrets dans les descriptions | ||||||
|  |  | ||||||
|  | ## 12.0.33 - la vieillesse d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - retour de l'expérience pour les joueurs | ||||||
|  | - suppression du message "Pas de caractéristique" sur les jets d'odorat-goût | ||||||
|  |  | ||||||
|  | ## 12.0.32 - les rêveries d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Ajout des Items Race pour gérer les ajustements liés aux races | ||||||
|  |  | ||||||
|  | ## 12.0.31 - le mausolée d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - Correction: les automatisation de combat jouer-MJ fonctionnentde nouveau | ||||||
|  |  | ||||||
|  | ## 12.0.30 - le cauchemar d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - calcul automatique du niveau des entités selon leur rêve | ||||||
|  | - la description des créatures venimeuses contient un lien vers leur venin | ||||||
|  | - Correction: les messages de combats ne marchaient plus (Changement combiné Foundry + rêve de Dragon) | ||||||
|  |  | ||||||
|  | ## 12.0.29 - L'indexation d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - les liens dans la descriptions des sorts pointent vers les sorts du compendium | ||||||
|  | - la description du chrasme contient le lien vers son venin plutôt qu'un tableau | ||||||
|  |  | ||||||
|  | ## 12.0.28 - Les réserves d'Astrobazzarh | ||||||
|  |  | ||||||
|  | - possibilité de mettre en réserve depuis un sort connu | ||||||
|  |  | ||||||
| ## 12.0.27 - Les vêtements d'Astrobazzarh | ## 12.0.27 - Les vêtements d'Astrobazzarh | ||||||
|  |  | ||||||
| - Ajout de la liste des armures dans l'onglet caractéristiques | - Ajout de la liste des armures dans l'onglet caractéristiques | ||||||
| - Ajout d'une option pour choisir une carte des TMR alternatives | - Ajout d'une option pour choisir une carte des TMR alternatives | ||||||
| - Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage | - Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage | ||||||
| @@ -20,12 +236,14 @@ | |||||||
|   - les modèles de personnages non joueurs sont non-liés par défaut |   - les modèles de personnages non joueurs sont non-liés par défaut | ||||||
|  |  | ||||||
| ## 12.0.26 - Astrobazzarh le Haut-rêvant | ## 12.0.26 - Astrobazzarh le Haut-rêvant | ||||||
|  |  | ||||||
| - bouton pour le don de haut-rêve en un clic | - bouton pour le don de haut-rêve en un clic | ||||||
| - les compétences de draconic ne sont plus précédées de "Voie de" | - les compétences de draconic ne sont plus précédées de "Voie de" | ||||||
|   - migration des compétences & compendiums |   - migration des compétences & compendiums | ||||||
| - Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable | - Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable | ||||||
|  |  | ||||||
| ## 12.0.24 - Les ajustements d'Astrobazzarh | ## 12.0.24 - Les ajustements d'Astrobazzarh | ||||||
|  |  | ||||||
| - amélioration | - amélioration | ||||||
|   - meilleure gestion des noms des voies de draconic |   - meilleure gestion des noms des voies de draconic | ||||||
|   - affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût |   - affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût | ||||||
| @@ -33,8 +251,9 @@ | |||||||
|   - les tas dans les conteneurs peuvent être désempilés sans rendre le conteneur inutilisable |   - les tas dans les conteneurs peuvent être désempilés sans rendre le conteneur inutilisable | ||||||
|   - les conteneurs ne peuvent plus être empilés (pour éviter que le contenu de Schroedinger quand on les sépare) |   - les conteneurs ne peuvent plus être empilés (pour éviter que le contenu de Schroedinger quand on les sépare) | ||||||
|   - on peut maintenant saisir et supprimer les bonus de cases de manière intuitive |   - on peut maintenant saisir et supprimer les bonus de cases de manière intuitive | ||||||
|    |  | ||||||
| ## 12.0.23 - La bibliothèque d'Astrobazzarh | ## 12.0.23 - La bibliothèque d'Astrobazzarh | ||||||
|  |  | ||||||
| - corrections mineures | - corrections mineures | ||||||
|   - meilleure gestion de la parade des armes naturelles |   - meilleure gestion de la parade des armes naturelles | ||||||
|   - cas de "User lacks permission to update" pour les blessures et les StatusEffects |   - cas de "User lacks permission to update" pour les blessures et les StatusEffects | ||||||
| @@ -50,19 +269,23 @@ | |||||||
|   - dans les compendiums, les compétences Écriture et Épée ont une majuscule accentuée. Les Épée dans le compendium d'équipements référence le nom de compétence accentué. |   - dans les compendiums, les compétences Écriture et Épée ont une majuscule accentuée. Les Épée dans le compendium d'équipements référence le nom de compétence accentué. | ||||||
|  |  | ||||||
| ## 12.0.21 - La nomination d'Astrobazzarh | ## 12.0.21 - La nomination d'Astrobazzarh | ||||||
|  |  | ||||||
| - Les noms pour les messages dans le tchat sont maintenant ceux des tokens plutôt que ceux des acteurs | - Les noms pour les messages dans le tchat sont maintenant ceux des tokens plutôt que ceux des acteurs | ||||||
| - Fix: le choix des effets dans les options s'affiche correctement | - Fix: le choix des effets dans les options s'affiche correctement | ||||||
|  |  | ||||||
| ## 12.0.20 - Le tableau d'Astrobazzarh | ## 12.0.20 - Le tableau d'Astrobazzarh | ||||||
|  |  | ||||||
| - Ecran d'accueil officiel Scriptarium | - Ecran d'accueil officiel Scriptarium | ||||||
|  |  | ||||||
| ## 12.0.19 - La témérité d'Astrobazzarh | ## 12.0.19 - La témérité d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix | - Fix | ||||||
|   - les défenses des créatures sont correctement filtrées |   - les défenses des créatures sont correctement filtrées | ||||||
|   - le lancer d'initiative pour tous les personnages/PNJs fonctionne correctement |   - le lancer d'initiative pour tous les personnages/PNJs fonctionne correctement | ||||||
|   - les lieux et commerces n'ont pas d'initiative |   - les lieux et commerces n'ont pas d'initiative | ||||||
|  |  | ||||||
| ## 12.0.18 - A la barbe d'Astrobazzarh | ## 12.0.18 - A la barbe d'Astrobazzarh | ||||||
|  |  | ||||||
| - Améliorations sur la feuille de PNJ simplifiée | - Améliorations sur la feuille de PNJ simplifiée | ||||||
|   - Ajout du portrait |   - Ajout du portrait | ||||||
|   - Ajout du corps à corps |   - Ajout du corps à corps | ||||||
| @@ -79,11 +302,13 @@ | |||||||
| - Ajout d'un indicateur pour les armes de parade nécessitant une significative | - Ajout d'un indicateur pour les armes de parade nécessitant une significative | ||||||
|  |  | ||||||
| ## 12.0.16 - Le secret d'Astrobazzarh | ## 12.0.16 - Le secret d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix: les jets envoyés messages uniquement au MJ ne sont plus envoyés à tous les autres joueurs (et dupliqués) | - Fix: les jets envoyés messages uniquement au MJ ne sont plus envoyés à tous les autres joueurs (et dupliqués) | ||||||
| - Les noms affichés dans les automatisations de combat sont maintenant ceux des tokens plutôt que ceux des acteurs | - Les noms affichés dans les automatisations de combat sont maintenant ceux des tokens plutôt que ceux des acteurs | ||||||
| - Ajout d'une option pour la localisation des blessures | - Ajout d'une option pour la localisation des blessures | ||||||
|  |  | ||||||
| ## 12.0.15 - Le messager d'Astrobazzarh | ## 12.0.15 - Le messager d'Astrobazzarh | ||||||
|  |  | ||||||
| - Correction des faces de dés personalisés dice-so-nice | - Correction des faces de dés personalisés dice-so-nice | ||||||
| - Les messages de maladies ne sont plus publics | - Les messages de maladies ne sont plus publics | ||||||
| - Les messages privés dans les TMR sont aussi envoyés au GM | - Les messages privés dans les TMR sont aussi envoyés au GM | ||||||
| @@ -91,6 +316,7 @@ | |||||||
| - Amélioration du rendu des tables de compendiums (commande /table) | - Amélioration du rendu des tables de compendiums (commande /table) | ||||||
|  |  | ||||||
| ## 12.0.14 - Les légions d'Astrobazzarh | ## 12.0.14 - Les légions d'Astrobazzarh | ||||||
|  |  | ||||||
| - Feuille de PNJ: | - Feuille de PNJ: | ||||||
|   - boutons standard (encaissement, ...) |   - boutons standard (encaissement, ...) | ||||||
|   - boutons pour ajuster les compteurs |   - boutons pour ajuster les compteurs | ||||||
| @@ -99,15 +325,18 @@ | |||||||
|   - gestion des armes |   - gestion des armes | ||||||
|  |  | ||||||
| ## 12.0.13 - La Chance d'Astrobazzarh | ## 12.0.13 - La Chance d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix: jets de caractéristiques | - Fix: jets de caractéristiques | ||||||
|  |  | ||||||
| ## 12.0.12 - L'étalage d'Astrobazzarh | ## 12.0.12 - L'étalage d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix: On peut de nouveau vendre des items sans propriétaire, depuis les compendiums ou depuis l'onglet des Objets | - Fix: On peut de nouveau vendre des items sans propriétaire, depuis les compendiums ou depuis l'onglet des Objets | ||||||
| - Début de Feuille PNJ au format des encarts Scriptarium | - Début de Feuille PNJ au format des encarts Scriptarium | ||||||
|   - support des jets de caractéristiques |   - support des jets de caractéristiques | ||||||
|   - support des jets de compétences |   - support des jets de compétences | ||||||
|  |  | ||||||
| ## 12.0.11 - Le scriptorium d'Astrobazzarh | ## 12.0.11 - Le scriptorium d'Astrobazzarh | ||||||
|  |  | ||||||
| - ajout d'un bouton pour générer les éléments de description d'un personnage | - ajout d'un bouton pour générer les éléments de description d'un personnage | ||||||
| - ajout du logo en background dans la liste des systèmes Foundry | - ajout du logo en background dans la liste des systèmes Foundry | ||||||
| - ajout d'un champ pour le métier | - ajout d'un champ pour le métier | ||||||
| @@ -115,13 +344,13 @@ | |||||||
|   - encodage de l'export en windows-1252 |   - encodage de l'export en windows-1252 | ||||||
|   - export de l'esquive avec armure et sans armure |   - export de l'esquive avec armure et sans armure | ||||||
|  |  | ||||||
| ## 12.0.10 - Le scriptorium d'Astrobazzarh | ## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh | ||||||
| - corrections de l'export scriptarium |  | ||||||
|  |  | ||||||
| ## 12.0.9 - Le scriptorium d'Astrobazzarh | - corrections de l'export scriptarium | ||||||
| - ajout d'une fonction avancée pour exporter les personnages dans un format csv | - ajout d'une fonction avancée pour un exporter "scriptarium" des personnages | ||||||
|  |  | ||||||
| ## 12.0.8 - La quincaillerie d'Astrobazzarh | ## 12.0.8 - La quincaillerie d'Astrobazzarh | ||||||
|  |  | ||||||
| - le propriétaire est indiqué dans les feuilles d'équipements/compétences/... | - le propriétaire est indiqué dans les feuilles d'équipements/compétences/... | ||||||
| - Ecaille d'efficacité | - Ecaille d'efficacité | ||||||
|   - l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat |   - l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat | ||||||
| @@ -131,6 +360,7 @@ | |||||||
|   - le tooltip de l'initiative affiche correctement l'initiative |   - le tooltip de l'initiative affiche correctement l'initiative | ||||||
|  |  | ||||||
| ## 12.0.7 - La propriété d'Astrobazzarh | ## 12.0.7 - La propriété d'Astrobazzarh | ||||||
|  |  | ||||||
| - correction des opérations faites à la création d'un Item: | - correction des opérations faites à la création d'un Item: | ||||||
|   - la durée des queues/rencontres/souffles |   - la durée des queues/rencontres/souffles | ||||||
|   - les effets draconiques d'un souffle/queue |   - les effets draconiques d'un souffle/queue | ||||||
| @@ -145,8 +375,9 @@ | |||||||
| - la commande /voyage affiche maintenant les compétences liées au terrain | - la commande /voyage affiche maintenant les compétences liées au terrain | ||||||
|  |  | ||||||
| ## 12.0.6 - Le bazar d'Astrobazzarh | ## 12.0.6 - Le bazar d'Astrobazzarh | ||||||
|  |  | ||||||
| - Corrections de l'inventaire en bazar: | - Corrections de l'inventaire en bazar: | ||||||
|   - un problème pouvait survenir en déplaçant les objets  |   - un problème pouvait survenir en déplaçant les objets | ||||||
|     l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son |     l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son | ||||||
|     propre contenu, ce qui empêche d'ouvrir la feuille d'acteur. |     propre contenu, ce qui empêche d'ouvrir la feuille d'acteur. | ||||||
|   - un objet non-conteneur pouvait dans certains cas avoir un pseudo contenu |   - un objet non-conteneur pouvait dans certains cas avoir un pseudo contenu | ||||||
| @@ -154,27 +385,31 @@ | |||||||
|     conteneur (et donc non affiché) |     conteneur (et donc non affiché) | ||||||
|   - vider les conteneurs supprime correctement toutes les informations liées |   - vider les conteneurs supprime correctement toutes les informations liées | ||||||
|     aux conteneurs/contenus |     aux conteneurs/contenus | ||||||
| - Les messages pour les tirages dans le compendium utilisent le "roll mode"  | - Les messages pour les tirages dans le compendium utilisent le "roll mode" | ||||||
|   courant pour leur visibilité |   courant pour leur visibilité | ||||||
| - Fix: restaurer la compatibilité Foundry 11 | - Fix: restaurer la compatibilité Foundry 11 | ||||||
|  |  | ||||||
| ## 12.0.5 - Les mauvais jours d'Astrobazzarh | ## 12.0.5 - Les mauvais jours d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix: on peut de nouveau ouvrir l'édition de calendrier | - Fix: on peut de nouveau ouvrir l'édition de calendrier | ||||||
| - Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort | - Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort | ||||||
| - Fix: Failed to execute 'getComputedStyle' on 'Window' | - Fix: Failed to execute 'getComputedStyle' on 'Window' | ||||||
|  |  | ||||||
| ## 12.0.4 - La plaie d'Astrobazzarh | ## 12.0.4 - La plaie d'Astrobazzarh | ||||||
|  |  | ||||||
| - **Support V12** | - **Support V12** | ||||||
|   - Fix: les boutons d'encaissement dans le tchat fonctionnent de nouveau |   - Fix: les boutons d'encaissement dans le tchat fonctionnent de nouveau | ||||||
|   - Fix warnings sur "Die" et AudioHelper |   - Fix warnings sur "Die" et AudioHelper | ||||||
|  |  | ||||||
| ## 12.0.3 - L'hémorragie d'Astrobazzarh | ## 12.0.3 - L'hémorragie d'Astrobazzarh | ||||||
|  |  | ||||||
| - **Support V12** | - **Support V12** | ||||||
|   - On peut de nouveau ouvrir un acteur blessé après redémarrage du monde |   - On peut de nouveau ouvrir un acteur blessé après redémarrage du monde | ||||||
|   - On peut de nouveau ouvrir les Items avec une rareté par environnement |   - On peut de nouveau ouvrir les Items avec une rareté par environnement | ||||||
|   - Le choix de ne plus afficher les demandes de suppression est bien pris en compte |   - Le choix de ne plus afficher les demandes de suppression est bien pris en compte | ||||||
|  |  | ||||||
| ## 12.0.2 - Les pluies d'Astrobazzarh | ## 12.0.2 - Les pluies d'Astrobazzarh | ||||||
|  |  | ||||||
| - **Support V12** | - **Support V12** | ||||||
|   - correction des actions techniques déleguées au MJ qui bloquaient les fenêtre de lancer de dés des joueurs (et plein d'autres) |   - correction des actions techniques déleguées au MJ qui bloquaient les fenêtre de lancer de dés des joueurs (et plein d'autres) | ||||||
|   - la fenêtre de calendrier s'ouvre correctement |   - la fenêtre de calendrier s'ouvre correctement | ||||||
| @@ -189,13 +424,16 @@ | |||||||
|   - correction d'erreurs intempestives 'User ... lacks permission to update ...' |   - correction d'erreurs intempestives 'User ... lacks permission to update ...' | ||||||
|  |  | ||||||
| # 11.2 | # 11.2 | ||||||
|  |  | ||||||
| ## 11.2.21 - Le questionnement d'Akarlikarlikar | ## 11.2.21 - Le questionnement d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Une confirmation spécifique est demandée pour monter dans les terres médianes en cas de rencontre en attente | - Une confirmation spécifique est demandée pour monter dans les terres médianes en cas de rencontre en attente | ||||||
| - L'expérience en caractéristique sur les jets de chance et rêve actuels est mise dans la caractéristique correspondante | - L'expérience en caractéristique sur les jets de chance et rêve actuels est mise dans la caractéristique correspondante | ||||||
| - Les effets s'appliquent correctement sur les créatures | - Les effets s'appliquent correctement sur les créatures | ||||||
| - La date et l'heure (draconiques) sont affichées dans les messages du tchat | - La date et l'heure (draconiques) sont affichées dans les messages du tchat | ||||||
|  |  | ||||||
| ## 11.2.20 - Le soulagement d'Akarlikarlikar | ## 11.2.20 - Le soulagement d'Akarlikarlikar | ||||||
|  |  | ||||||
| - L'option "ajout de la difficulté d'attaque à l'encaissement" est affichée comme un modificateur d'encaissement | - L'option "ajout de la difficulté d'attaque à l'encaissement" est affichée comme un modificateur d'encaissement | ||||||
| - Les options d'encaissement alternatives fonctionnent avec la validation de l'encaissement par le gardien | - Les options d'encaissement alternatives fonctionnent avec la validation de l'encaissement par le gardien | ||||||
| - La fenêtre d'astrologie du gardien affiche toutes les heures lues par un personnage | - La fenêtre d'astrologie du gardien affiche toutes les heures lues par un personnage | ||||||
| @@ -205,12 +443,15 @@ | |||||||
| - Les messages de récupération de rêve en cas de Rêve de Dragon sont clarifiés | - Les messages de récupération de rêve en cas de Rêve de Dragon sont clarifiés | ||||||
|  |  | ||||||
| ## 11.2.19 - Les hémorroïdes d'Akarlikarlikar | ## 11.2.19 - Les hémorroïdes d'Akarlikarlikar | ||||||
|  |  | ||||||
| - La validation des jets d'encaissement par le Gardien fonctionne de nouveau | - La validation des jets d'encaissement par le Gardien fonctionne de nouveau | ||||||
|  |  | ||||||
| ## 11.2.18 - Le bourrichon d'Akarlikarlikar | ## 11.2.18 - Le bourrichon d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Les différentes listes de la feuille de personnage ont maintenant le bouton pour envoyer dans le tchat | - Les différentes listes de la feuille de personnage ont maintenant le bouton pour envoyer dans le tchat | ||||||
|  |  | ||||||
| ## 11.2.17 - Le cache-oeil d'Akarlikarlikar | ## 11.2.17 - Le cache-oeil d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Le titre des fenêtre d'objet affiche de nouveau le type traduit | - Le titre des fenêtre d'objet affiche de nouveau le type traduit | ||||||
| - Les tooltips des boutons edit/delete sont maintenant en Français | - Les tooltips des boutons edit/delete sont maintenant en Français | ||||||
| - La case à cocher "Cacher les points de tâches" fonctionne de nouveau | - La case à cocher "Cacher les points de tâches" fonctionne de nouveau | ||||||
| @@ -219,37 +460,45 @@ | |||||||
| - La fenêtre des TMRs ne devrait plus afficher une zone noire au lieu de la carte. | - La fenêtre des TMRs ne devrait plus afficher une zone noire au lieu de la carte. | ||||||
|  |  | ||||||
| ## 11.2.16 - Le Tri d'Akarlikarlikar | ## 11.2.16 - Le Tri d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Tri alphabétique des items dans la fenêtre de création | - Tri alphabétique des items dans la fenêtre de création | ||||||
| - Mise à jour comptage de monde | - Mise à jour comptage de monde | ||||||
|  |  | ||||||
| ## 11.2.15 - La Table d'Akarlikarlikar | ## 11.2.15 - La Table d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Tirage automatique de la foce d'une rencontre (via la commande /tmrr) | - Tirage automatique de la foce d'une rencontre (via la commande /tmrr) | ||||||
| - Ajout de boutons pour ajouter des blessures "complètes" (ie avec perte d'endurance/vie) | - Ajout de boutons pour ajouter des blessures "complètes" (ie avec perte d'endurance/vie) | ||||||
|  |  | ||||||
| ## 11.2.14 - Les petits pas d'Akarlikarlikar | ## 11.2.14 - Les petits pas d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Correction sur la gestion de la surprise | - Correction sur la gestion de la surprise | ||||||
| - Ordre des messages sur les cases humides | - Ordre des messages sur les cases humides | ||||||
|  |  | ||||||
| ## 11.2.13 - Les cent pas d'Akarlikarlikar | ## 11.2.13 - Les cent pas d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Ajout de la commande /voyage pour gérer la fatigue de marche des voyageurs | - Ajout de la commande /voyage pour gérer la fatigue de marche des voyageurs | ||||||
|  |  | ||||||
| ## 11.2.12 - Le somnifère  d'Akarlikarlikar | ## 11.2.12 - Le somnifère  d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Fix: les potions enchantées n'empêchent plus de finir correctement Château Dormant | - Fix: les potions enchantées n'empêchent plus de finir correctement Château Dormant | ||||||
|  |  | ||||||
| ## 11.2.11 - Le miroir d'Akarlikarlikar | ## 11.2.11 - Le miroir d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Changement des images de compétence de créatures morsure/pinces pour être dans le thème | - Changement des images de compétence de créatures morsure/pinces pour être dans le thème | ||||||
| - Suppression de la bordure autour des portraits d'acteurs, remplacés par un légèr éclaircissement du fond | - Suppression de la bordure autour des portraits d'acteurs, remplacés par un légèr éclaircissement du fond | ||||||
| - Fix: le refoulement ajoute correctement un souffle et revient à 0 en cas d'échec | - Fix: le refoulement ajoute correctement un souffle et revient à 0 en cas d'échec | ||||||
|  |  | ||||||
| ## 11.2.10 - Les expériences d'Akarlikarlikar | ## 11.2.10 - Les expériences d'Akarlikarlikar | ||||||
|  |  | ||||||
| - En cas d'expérience des caractéristiques dérivées, | - En cas d'expérience des caractéristiques dérivées, | ||||||
|   - si plusieurs caractéristiques pourraient recevoir l'expérience, une fenêtre demande au joueur |   - si plusieurs caractéristiques pourraient recevoir l'expérience, une fenêtre demande au joueur | ||||||
|   - si une seule caractéristique peut recevoir de l'expérience, c'est attribué automatiquement |   - si une seule caractéristique peut recevoir de l'expérience, c'est attribué automatiquement | ||||||
| - Si la force est au maximum pour la taille personnage, on ne peut plus gagner d'expérience | - Si la force est au maximum pour la taille personnage, on ne peut plus gagner d'expérience | ||||||
|  |  | ||||||
| ## 11.2.9 - La barbe d'Akarlikarlikar | ## 11.2.9 - La barbe d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Amélioration des textes de tooltips | - Amélioration des textes de tooltips | ||||||
| - Les tooltips sont plus dans le thème de couleur du système Rêve de Dragon  | - Les tooltips sont plus dans le thème de couleur du système Rêve de Dragon | ||||||
| - Ajouts d'icones pour les attaque/initiative/soins dans les raccourcis sur les tokens (HUD) | - Ajouts d'icones pour les attaque/initiative/soins dans les raccourcis sur les tokens (HUD) | ||||||
| - Ajout d'une icône et transformation en bouton du lien pour accéder à l'astrologie et aux chiffres astraux | - Ajout d'une icône et transformation en bouton du lien pour accéder à l'astrologie et aux chiffres astraux | ||||||
| - Suppression de message de log inutile sur chaque point de coeur | - Suppression de message de log inutile sur chaque point de coeur | ||||||
| @@ -259,19 +508,23 @@ | |||||||
| - Changement de l'icône d'état d'empoignade pour suivre les couleurs des autres icônes d'état | - Changement de l'icône d'état d'empoignade pour suivre les couleurs des autres icônes d'état | ||||||
|  |  | ||||||
| ## 11.2.8 - L'éclairage d'Akarlikarlikar | ## 11.2.8 - L'éclairage d'Akarlikarlikar | ||||||
|  |  | ||||||
| - l'ajustement de la lumière jour/nuit s'étale sur moins de temps (vaisseau et Lyre) | - l'ajustement de la lumière jour/nuit s'étale sur moins de temps (vaisseau et Lyre) | ||||||
| - les nouveaux tooltips ne masquent plus l'information d'expérience | - les nouveaux tooltips ne masquent plus l'information d'expérience | ||||||
| - les jets de dés pour maîtriser les rencontres fonctionnent de nouveau | - les jets de dés pour maîtriser les rencontres fonctionnent de nouveau | ||||||
|  |  | ||||||
| ## 11.2.7 - Les explications d'Akarlikarlikar | ## 11.2.7 - Les explications d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Ajout de tooltips sur la plupart des boutons, liens clickables, objets, tâches, ... | - Ajout de tooltips sur la plupart des boutons, liens clickables, objets, tâches, ... | ||||||
| - Fix: on peut de nouveau regarder l'inventaire avec les droits limités/observateur | - Fix: on peut de nouveau regarder l'inventaire avec les droits limités/observateur | ||||||
|  |  | ||||||
| ## 11.2.6 - Les réveils difficiles d'Akarlikarlikar | ## 11.2.6 - Les réveils difficiles d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Les changements de points de Cœur sont temporaires jusqu'à fin Château Dormant | - Les changements de points de Cœur sont temporaires jusqu'à fin Château Dormant | ||||||
| - Fix: tous les petits fixes (feuille qui s'ouvre plus, compagnons animaux, potions qui bloquent Château Dormant, ...) | - Fix: tous les petits fixes (feuille qui s'ouvre plus, compagnons animaux, potions qui bloquent Château Dormant, ...) | ||||||
|  |  | ||||||
| ## 11.2.2 - Les tendres moments d'Akarlikarlikar | ## 11.2.2 - Les tendres moments d'Akarlikarlikar | ||||||
|  |  | ||||||
| - On peut maintenant avoir des points de Cœur pour des suivants/compagnons | - On peut maintenant avoir des points de Cœur pour des suivants/compagnons | ||||||
|   - diminuer les points de coeurs fait perdre du moral |   - diminuer les points de coeurs fait perdre du moral | ||||||
|   - on peut proposer un tendre moment |   - on peut proposer un tendre moment | ||||||
| @@ -290,11 +543,14 @@ | |||||||
|     ne bloquent plus les jets de dés |     ne bloquent plus les jets de dés | ||||||
|  |  | ||||||
| ## v11.2.1 - La technique d'Akarlikarlikar | ## v11.2.1 - La technique d'Akarlikarlikar | ||||||
|  |  | ||||||
| - On peut créer des armes pour Corps à corps et Esquive. Barreaux de chaise, armes improvisées, techniques d'art martiaux, pas de côté pour faire trébucher l'adversaire... A vous de voir comment imaginer de nouvelles "armes". | - On peut créer des armes pour Corps à corps et Esquive. Barreaux de chaise, armes improvisées, techniques d'art martiaux, pas de côté pour faire trébucher l'adversaire... A vous de voir comment imaginer de nouvelles "armes". | ||||||
| - Les armes avec une résistance de 0 ne peuvent pas être utilisées, une image et un rappel indiquent qu'elles sont cassées | - Les armes avec une résistance de 0 ne peuvent pas être utilisées, une image et un rappel indiquent qu'elles sont cassées | ||||||
|  |  | ||||||
| Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | ||||||
|  |  | ||||||
| ## v11.2.0 - Les Terres médianes d'Akarlikarlikar | ## v11.2.0 - Les Terres médianes d'Akarlikarlikar | ||||||
|  |  | ||||||
| - Les TMRs sont redimensionables | - Les TMRs sont redimensionables | ||||||
| - Nouveaux graphismes plus lisibles dans les TMRs | - Nouveaux graphismes plus lisibles dans les TMRs | ||||||
| - Nouveau code couleur des icônes dans les TMR: | - Nouveau code couleur des icônes dans les TMR: | ||||||
| @@ -308,12 +564,15 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
| - Fix: Les jets d'encaissement forcés par le gardien à un résultat inférieur à 11 ne peuvent plus donner un deuxième d10 négatif | - Fix: Les jets d'encaissement forcés par le gardien à un résultat inférieur à 11 ne peuvent plus donner un deuxième d10 négatif | ||||||
|  |  | ||||||
| # v11.1 | # v11.1 | ||||||
|  |  | ||||||
| ## v11.1.6 - Les dissections de Werther de Zloth | ## v11.1.6 - Les dissections de Werther de Zloth | ||||||
|  |  | ||||||
| - Fix: on peut de nouveau donner des compétences aux créatures | - Fix: on peut de nouveau donner des compétences aux créatures | ||||||
| - Fix: le délai de guérison d'une blessure rétrogradée est correctement appliqué | - Fix: le délai de guérison d'une blessure rétrogradée est correctement appliqué | ||||||
| - Fix: l'encaissement à valider par le MJ fonctionne de nouveau | - Fix: l'encaissement à valider par le MJ fonctionne de nouveau | ||||||
|  |  | ||||||
| ## v11.1.5 - Werther de Zloth l'Onirique | ## v11.1.5 - Werther de Zloth l'Onirique | ||||||
|  |  | ||||||
| - Fixes: | - Fixes: | ||||||
|   - la demande de défense ne marchait plus |   - la demande de défense ne marchait plus | ||||||
|   - la tête réserve extensible crée bien une case de réserve extensible (à modifier) |   - la tête réserve extensible crée bien une case de réserve extensible (à modifier) | ||||||
| @@ -328,6 +587,7 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
|   - pas de jets de vie pour les morts |   - pas de jets de vie pour les morts | ||||||
|  |  | ||||||
| ## v11.1.4 - Werther de Zloth l'Onirique | ## v11.1.4 - Werther de Zloth l'Onirique | ||||||
|  |  | ||||||
| - Ajout du facteur de significative à côté du pourcentage dans le résultat des jets de dés pour rappeler que le pourcentage n'est pas diviasé | - Ajout du facteur de significative à côté du pourcentage dans le résultat des jets de dés pour rappeler que le pourcentage n'est pas diviasé | ||||||
| - Fix: dans les TMRs, les tooltips affichent bien les informations de tous les effets sur la case | - Fix: dans les TMRs, les tooltips affichent bien les informations de tous les effets sur la case | ||||||
| - Fix: la fatigue et l'éthylisme sont de nouveau pris en compte dans le calcul de l'éthylisme | - Fix: la fatigue et l'éthylisme sont de nouveau pris en compte dans le calcul de l'éthylisme | ||||||
| @@ -337,15 +597,18 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
| - Esthétique: ne pas afficher "+0" pour les ajustements de jets/encaissement | - Esthétique: ne pas afficher "+0" pour les ajustements de jets/encaissement | ||||||
|  |  | ||||||
| ## v11.1.2 - Les vertèbres de Werther de Zloth | ## v11.1.2 - Les vertèbres de Werther de Zloth | ||||||
|  |  | ||||||
| - Fix: les jets d'encaissement fonctionnent de nouveau normalement | - Fix: les jets d'encaissement fonctionnent de nouveau normalement | ||||||
| - Macro "Mon personnage" permettant au joueur d'accéder à sa feuille de personnage depuis la barre de macros | - Macro "Mon personnage" permettant au joueur d'accéder à sa feuille de personnage depuis la barre de macros | ||||||
|  |  | ||||||
| ## v11.1.1 - Les fumebols de Werther de Zloth | ## v11.1.1 - Les fumebols de Werther de Zloth | ||||||
|  |  | ||||||
| - Fix: on peut de nouveau afficher les vues détaillées | - Fix: on peut de nouveau afficher les vues détaillées | ||||||
| - Fix: on peut ouvrir les sacs et contenants portés par les véhicules et créatures | - Fix: on peut ouvrir les sacs et contenants portés par les véhicules et créatures | ||||||
| - Fix: cuisiner du gibier prend maintenant bien les proportaions en compte | - Fix: cuisiner du gibier prend maintenant bien les proportaions en compte | ||||||
|  |  | ||||||
| ## v11.1.0 - Les choix de Werther de Zloth | ## v11.1.0 - Les choix de Werther de Zloth | ||||||
|  |  | ||||||
| - Les options suivantes peuvent être désactivées: | - Les options suivantes peuvent être désactivées: | ||||||
|   - La transformation de stress à Château Dormant |   - La transformation de stress à Château Dormant | ||||||
|   - La récuperation de chance à Château Dormant |   - La récuperation de chance à Château Dormant | ||||||
| @@ -363,24 +626,28 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
|   - en cas de charge, les particulières sont toujours en force (p125) |   - en cas de charge, les particulières sont toujours en force (p125) | ||||||
|  |  | ||||||
| # v11.0 | # v11.0 | ||||||
|  |  | ||||||
| ## v11.0.28 - les fractures de Khrachtchoum | ## v11.0.28 - les fractures de Khrachtchoum | ||||||
|  |  | ||||||
| - La gravité de la blessure est affichée dans le résumé de l'encaissement | - La gravité de la blessure est affichée dans le résumé de l'encaissement | ||||||
| - Lors du changement d'acteur pendant le round | - Lors du changement d'acteur pendant le round | ||||||
|   - le message annonçant le joueur dont c'est le tour ne contient plus d'informations de santé |   - le message annonçant le joueur dont c'est le tour ne contient plus d'informations de santé | ||||||
|   - un message avec les informations de santé est envoyé au Gardienn et au propriétaire du token.acteur |   - un message avec les informations de santé est envoyé au Gardienn et au propriétaire du token.acteur | ||||||
|   - le jet de vie est bien fait par le token si besoin |   - le jet de vie est bien fait par le token si besoin | ||||||
|   - seul les propriétaires peuvent faire les jets de vie  |   - seul les propriétaires peuvent faire les jets de vie | ||||||
| - Amélioration de la fenêtre de jets | - Amélioration de la fenêtre de jets | ||||||
|   - le type de dégâts pour les attaques est toujours affiché |   - le type de dégâts pour les attaques est toujours affiché | ||||||
|   - le moral est indiqué avant l'icone d'appel au moral |   - le moral est indiqué avant l'icone d'appel au moral | ||||||
|  |  | ||||||
| ## v11.0.27 - Khrachtchoum le méticuleux | ## v11.0.27 - Khrachtchoum le méticuleux | ||||||
|  |  | ||||||
| - le tooltip dans les TMR reste visible si on ne bouge pas la souris | - le tooltip dans les TMR reste visible si on ne bouge pas la souris | ||||||
| - le surencombrement n'affecte QUE les actions physiques | - le surencombrement n'affecte QUE les actions physiques | ||||||
| - on peut de nouveau fabriquer une potion depuis la fenêtre d'édition de l'herbe | - on peut de nouveau fabriquer une potion depuis la fenêtre d'édition de l'herbe | ||||||
| - si les TMR sont minimisées alors qu'une action est requise, elles sont bien réaffichées lorsque l'action est faite | - si les TMR sont minimisées alors qu'une action est requise, elles sont bien réaffichées lorsque l'action est faite | ||||||
|  |  | ||||||
| ## v11.0.26 - le crépuscule de Khrachtchoum | ## v11.0.26 - le crépuscule de Khrachtchoum | ||||||
|  |  | ||||||
| - gestion correcte des TMRs | - gestion correcte des TMRs | ||||||
|   - les TMRs ne sont jamais minimisées (par le système) quand le haut-rêvant est en demi-rêve |   - les TMRs ne sont jamais minimisées (par le système) quand le haut-rêvant est en demi-rêve | ||||||
|   - lorsqu'une fenêtre liée aux demi-rêve est affichée, cliquer sur les TMRs n'a pas d'effet |   - lorsqu'une fenêtre liée aux demi-rêve est affichée, cliquer sur les TMRs n'a pas d'effet | ||||||
| @@ -399,45 +666,57 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
| - les jets de compétences d'attaque des créatures fonctionnent de nouveau | - les jets de compétences d'attaque des créatures fonctionnent de nouveau | ||||||
|  |  | ||||||
| ## v11.0.25 - la vision du rêve de Khrachtchoum | ## v11.0.25 - la vision du rêve de Khrachtchoum | ||||||
|  |  | ||||||
| - Les TMRs restent affichées tant que le Haut-rêvant est en demi-rêve | - Les TMRs restent affichées tant que le Haut-rêvant est en demi-rêve | ||||||
|  |  | ||||||
| ## v11.0.24 - les couleurs de Khrachtchoum | ## v11.0.24 - les couleurs de Khrachtchoum | ||||||
|  |  | ||||||
| - nouvelle carte des TMRs | - nouvelle carte des TMRs | ||||||
|  |  | ||||||
| ## v11.0.23 - la lumière de Khrachtchoum | ## v11.0.23 - la lumière de Khrachtchoum | ||||||
|  |  | ||||||
| - ajustement automatique de la luminosité selon l'heure pour les scènes: | - ajustement automatique de la luminosité selon l'heure pour les scènes: | ||||||
|    - avec une vision des tokens (sinon: ce n'est pas une scène de carte pour tokens) |   - avec une vision des tokens (sinon: ce n'est pas une scène de carte pour tokens) | ||||||
|    - avec illumination globale (correspondant à une illumination extérieure) |   - avec illumination globale (correspondant à une illumination extérieure) | ||||||
|    - quand lampe "allumée" dans la fenêtre du calendrier |   - quand lampe "allumée" dans la fenêtre du calendrier | ||||||
|  |  | ||||||
| ## v11.0.22 - les automatismes de Khrachtchoum le Problémeux | ## v11.0.22 - les automatismes de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - Macro pour attaquer avec les compétences de créatures | - Macro pour attaquer avec les compétences de créatures | ||||||
|  |  | ||||||
| ## v11.0.20 | ## v11.0.20 | ||||||
|  |  | ||||||
| - Macro pour attaquer avec les armes des personnages | - Macro pour attaquer avec les armes des personnages | ||||||
|  |  | ||||||
| ## v11.0.17 | ## v11.0.17 | ||||||
|  |  | ||||||
| - Fix: les actions de commerce ne s'appliquait pas bien aux personnages des tokens non liés | - Fix: les actions de commerce ne s'appliquait pas bien aux personnages des tokens non liés | ||||||
|  |  | ||||||
| ## v11.0.15 - L'apprentissage de Khrachtchoum | ## v11.0.15 - L'apprentissage de Khrachtchoum | ||||||
|  |  | ||||||
| - Fix: l'expérience ne s'appliquait plus sur certaines réussites particulières (régression depuis la 11.0.7) | - Fix: l'expérience ne s'appliquait plus sur certaines réussites particulières (régression depuis la 11.0.7) | ||||||
|  |  | ||||||
| ## v11.0.14 - Les pincettes de Khrachtchoum le Problémeux | ## v11.0.14 - Les pincettes de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - Correction du calcul de la place restante lors de l'ajout dans un conteneur | - Correction du calcul de la place restante lors de l'ajout dans un conteneur | ||||||
|  |  | ||||||
| ## v11.0.13 - La multiplication de l'eau de Khrachtchoum le Problémeux | ## v11.0.13 - La multiplication de l'eau de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - Correction de la vente depuis un commerce ayant des quantités illimitées | - Correction de la vente depuis un commerce ayant des quantités illimitées | ||||||
|  |  | ||||||
| ## v11.0.12 - Les poids de la mesure de Khrachtchoum le Problémeux | ## v11.0.12 - Les poids de la mesure de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - Correction des malus de surencombrement | - Correction des malus de surencombrement | ||||||
| - Le malus armure est correctement affiché dans l'onglet des caractéristiques | - Le malus armure est correctement affiché dans l'onglet des caractéristiques | ||||||
| - Correction d'orthographe et amélioration des messages des oeuvres d'art | - Correction d'orthographe et amélioration des messages des oeuvres d'art | ||||||
|  |  | ||||||
| ## v11.0.11 - Les bleus de Khrachtchoum le Problémeux | ## v11.0.11 - Les bleus de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - si le gardien configure le sommeil, les joueurs sont notifiés que chateau dormant vient de passer | - si le gardien configure le sommeil, les joueurs sont notifiés que chateau dormant vient de passer | ||||||
| - possibilité de créer des armes et des compétences de créatures non-mortelles. | - possibilité de créer des armes et des compétences de créatures non-mortelles. | ||||||
|  |  | ||||||
| ## v11.0.10 - Les Songes de Khrachtchoum le Problémeux | ## v11.0.10 - Les Songes de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - on peut de nouveau se déplacer dans les TMRs d'un clic sur la case à atteindre | - on peut de nouveau se déplacer dans les TMRs d'un clic sur la case à atteindre | ||||||
| - Lire un livre depuis l'inventaire permet de nouveau de faire un jet de la tâche | - Lire un livre depuis l'inventaire permet de nouveau de faire un jet de la tâche | ||||||
|   créée au lieu de créer toujours une nouvelle tâche |   créée au lieu de créer toujours une nouvelle tâche | ||||||
| @@ -448,12 +727,14 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
|   les heures dormies sont déduites des heures restant à dormir |   les heures dormies sont déduites des heures restant à dormir | ||||||
|  |  | ||||||
| ## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux | ## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux | ||||||
|  |  | ||||||
| - mode de saisie de l'archétype en vue détaillée | - mode de saisie de l'archétype en vue détaillée | ||||||
| - création  une nouvelle incarnation depuis l'archétype | - création  une nouvelle incarnation depuis l'archétype | ||||||
| - réorganisation de la fenêtre de sélection des règles optionnelles | - réorganisation de la fenêtre de sélection des règles optionnelles | ||||||
| - correction de l'affichage du type dans les fenêtres d'objets | - correction de l'affichage du type dans les fenêtres d'objets | ||||||
|  |  | ||||||
| ## v11.0.8 - la poigne de Sémolosse | ## v11.0.8 - la poigne de Sémolosse | ||||||
|  |  | ||||||
| - lien vers le changelog | - lien vers le changelog | ||||||
| - organisation des compendiums du système | - organisation des compendiums du système | ||||||
| - correction de l'empoignade | - correction de l'empoignade | ||||||
| @@ -476,4 +757,3 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
| - correction des achats par le MJ sans acteur sélectionné | - correction des achats par le MJ sans acteur sélectionné | ||||||
|  |  | ||||||
| Cf branche v10 pour l'historique des versions 10 | Cf branche v10 pour l'historique des versions 10 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2734
									
								
								css/foundryvtt-reve-de-dragon.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										37
									
								
								gulpfile.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,37 @@ | |||||||
|  | const gulp = require('gulp'); | ||||||
|  | const less = require('gulp-less'); | ||||||
|  |  | ||||||
|  | function onError(err) { | ||||||
|  |   util.log(util.colors.red.bold('[ERROR LESS]:'),util.colors.bgRed(err.message)); | ||||||
|  |   this.emit('end'); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  | /*  Compile LESS | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  | function compileLESS() { | ||||||
|  |   return gulp.src("less/foundryvtt-reve-de-dragon.less") | ||||||
|  |       .pipe(less()).on('error',console.log.bind(console)) | ||||||
|  |       .pipe(gulp.dest("./css")) | ||||||
|  | } | ||||||
|  | const css = gulp.series(compileLESS); | ||||||
|  |  | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  | /*  Watch Updates | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  | const SIMPLE_LESS = ["less/*.less", "less/item/*.less"]; | ||||||
|  |  | ||||||
|  | function watchUpdates() { | ||||||
|  |   gulp.watch(SIMPLE_LESS, css); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  | /*  Export Tasks | ||||||
|  | /* ----------------------------------------- */ | ||||||
|  |  | ||||||
|  | exports.default = gulp.series( | ||||||
|  |     gulp.parallel(css), | ||||||
|  |     watchUpdates | ||||||
|  | ); | ||||||
|  | exports.css = css; | ||||||
|  | exports.watchUpdates = watchUpdates; | ||||||
							
								
								
									
										
											BIN
										
									
								
								icons/humanoides/humain.webp
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
| @@ -40,6 +40,7 @@ | |||||||
|       "possession": "Possession", |       "possession": "Possession", | ||||||
|       "potion": "Potion", |       "potion": "Potion", | ||||||
|       "queue": "Queue de Dragon", |       "queue": "Queue de Dragon", | ||||||
|  |       "race": "Race", | ||||||
|       "recettealchimique": "Recette alchimique", |       "recettealchimique": "Recette alchimique", | ||||||
|       "recettecuisine": "Recette de cuisine", |       "recettecuisine": "Recette de cuisine", | ||||||
|       "rencontre": "Rencontre TMR", |       "rencontre": "Rencontre TMR", | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								less/colors.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,58 @@ | |||||||
|  | :root { | ||||||
|  |  | ||||||
|  |   /* =================== 2. DEBUGGING HIGHLIGHTERS ============ */ | ||||||
|  |     // --debug-background-color-red: #ff000054; | ||||||
|  |     // --debug-background-color-blue: #1d00ff54; | ||||||
|  |     // --debug-background-color-green: #54ff0054; | ||||||
|  |  | ||||||
|  |     // --debug-box-shadow-red: inset 0 0 2px red; | ||||||
|  |     // --debug-box-shadow-blue: inset 0 0 2px blue; | ||||||
|  |     // --debug-box-shadow-green: inset 0 0 2px green; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   /* =================== 3. some constants ============ */ | ||||||
|  |     --fieldset-background: url(/ui/parchment.jpg); | ||||||
|  |     --rdd-color-text-primary: hsla(0, 0%, 4%, 0.9); | ||||||
|  |     --rdd-input-background:hsla(0, 0%, 0%, 0.1); | ||||||
|  |     --rdd-color-border-input: hsla(0, 0%, 0%, 0.2); | ||||||
|  |     --rdd-bg-input: hsla(0, 0%, 100%, 0.1); | ||||||
|  |     --color-controls:hsla(0, 0%, 0%, 0.9); | ||||||
|  |     --color-controls-light:hsla(0, 0%, 20%, 0.8); | ||||||
|  |     --color-controls-hover:hsla(60, 100%, 75%, 0.7); | ||||||
|  |     --color-control-border-hover:hsla(30, 100%, 50%, 0.8); | ||||||
|  |     --color-gold: rgba(191, 149, 63, 0.8); | ||||||
|  |     --gradient-gold: linear-gradient(30deg, rgba(191, 149, 63, 0.3), rgba(252, 246, 186, 0.3), rgba(179, 135, 40, 0.3), rgba(251, 245, 183, 0.3), rgba(170, 119, 28, 0.3)); | ||||||
|  |     --gradient-silver: linear-gradient(30deg, rgba(61, 55, 93, 0.3), rgba(178, 179, 196, 0.3), rgba(59, 62, 63, 0.6), rgba(206, 204, 199, 0.3), rgba(61, 46, 49, 0.3)); | ||||||
|  |     --gradient-green: linear-gradient(30deg, rgba(7, 76, 0, 0.3), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.1), rgba(66, 163, 65, 0.2), rgba(184, 226, 163, 0.3)); | ||||||
|  |     --gradient-red: linear-gradient(150deg, rgba(255, 0, 0, 0.3), rgba(255, 200, 128, 0.05),rgba(255, 200, 128, 0.1), rgba(255,10,0,0.3)); | ||||||
|  |     --gradient-violet: linear-gradient(150deg, rgba(100, 45, 124, 0.6), rgba(216, 157, 192, 0.3), rgba(177, 157, 216, 0.5), rgba(107, 62, 121, 0.3), rgba(100, 45, 124, 0.6)); | ||||||
|  |     --gradient-purple-black: linear-gradient(150deg,  rgba(0, 0, 0, 0.7), rgba(100, 45, 124, 0.4), rgba(82, 17, 131, 0.3),rgba(100, 45, 124, 0.4), rgba(0, 0, 0, 0.7)); | ||||||
|  |     --gradient-silver-light: linear-gradient(30deg, rgba(61, 55, 93, 0.2), rgba(178, 179, 196, 0.1), rgba(59, 62, 63, 0.2), rgba(206, 204, 199, 0.1), rgba(61, 46, 49, 0.2)); | ||||||
|  |     --gradient-daylight: conic-gradient( | ||||||
|  |       from 0deg, | ||||||
|  |       hsla(50, 100%, 80%, 0.7), | ||||||
|  |       hsla(30, 30%, 40%, 0.1) 25%, | ||||||
|  |       hsla(250, 50%, 40%, 0.1) 25%, | ||||||
|  |       hsla(250, 30%, 30%, 0.7) 50%, | ||||||
|  |       hsla(250, 50%, 40%, 0.1) 75%, | ||||||
|  |       hsla(30, 30%, 40%, 0.1) 75%, | ||||||
|  |       hsla(50, 100%, 80%, 0.7) | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     --background-custom-button: linear-gradient(to bottom, hsla(208, 38%, 21%, 0.988) 5%, hsla(202, 42%, 14%, 0.671) 100%); | ||||||
|  |     --background-custom-button-hover: linear-gradient(to bottom, hsla(0, 100%, 25%, 1) 5%, hsla(0, 97%, 12%, 1) 100%); | ||||||
|  |     --background-control-selected: linear-gradient(to bottom, hsla(0, 100%, 25%, 0.5) 5%, hsla(0, 100%, 12%, 0.5) 100%); | ||||||
|  |     --background-tooltip: hsla(60, 12%, 85%, 0.95); | ||||||
|  |     --background-tooltip-alt: hsla(60, 12%, 74%, 0.95); | ||||||
|  |     --color-tooltip:hsla(282, 47%, 33%, 0.9); | ||||||
|  |     --color-tooltip-faint:hsla(282, 47%, 66%, 0.5); | ||||||
|  |     --background-error:hsla(16, 100%, 50%, 0.8); | ||||||
|  |     --color-profile-border: hsla(0, 0%, 80%, 0.05); | ||||||
|  |  | ||||||
|  |     --color-background-chat-message: hsla(60, 12%, 85%, 0.9); | ||||||
|  |     --color-background-chat-whisper: repeating-linear-gradient(120deg, | ||||||
|  |       hsla(60, 12%, 85%, 0.75), | ||||||
|  |       hsla(60, 12%, 85%, 0.75) 1rem,  | ||||||
|  |       hsla(60, 12%, 85%, 0.8) 1rem,  | ||||||
|  |       hsla(60, 12%, 85%, 0.75) 1.5rem); | ||||||
|  |   } | ||||||
							
								
								
									
										85
									
								
								less/fonts.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,85 @@ | |||||||
|  | /* ==================== (A) Fonts ==================== */ | ||||||
|  | @font-face { | ||||||
|  |   font-family: "GoudyAcc"; | ||||||
|  |   src: url('../fonts/goudyacc.ttf') format("truetype"); | ||||||
|  | } | ||||||
|  | @font-face { | ||||||
|  |   font-family: "MedievalSharp"; | ||||||
|  |   src: url('../fonts/MedievalSharp.ttf') format("truetype"); | ||||||
|  | } | ||||||
|  | @font-face { | ||||||
|  |   font-family: "GrenzeGotisch"; | ||||||
|  |   src: url('../fonts/GrenzeGotisch-Regular.ttf') format("truetype"); | ||||||
|  | } | ||||||
|  | @font-face { | ||||||
|  |   font-family: "Fondamento"; | ||||||
|  |   src: url('../fonts/Fondamento.ttf') format("truetype"); | ||||||
|  | } | ||||||
|  | @font-face { | ||||||
|  |   font-family: "CaslonAntique"; | ||||||
|  |   src: url('../fonts/CaslonAntique.ttf') format("truetype"); | ||||||
|  | } | ||||||
|  | @font-face { | ||||||
|  |   font-family: 'HeuresDraconiques'; | ||||||
|  |   src: | ||||||
|  |       url('../fonts/heuresdraconiques2.woff') format('woff'), | ||||||
|  |       url('../fonts/heuresdraconiques2.woff2') format('woff2'), | ||||||
|  |       url('../fonts/heuresdraconiques2.ttf') format('truetype'); | ||||||
|  |   font-weight: normal; | ||||||
|  |   font-style: normal; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | :root { | ||||||
|  |   /* =================== 1. ACTOR SHEET FONT STYLES =========== */ | ||||||
|  |     --window-header-title-font-family: CaslonAntique; | ||||||
|  |     --window-header-title-font-size: 1.6rem; | ||||||
|  |     --window-header-title-font-weight: normal; | ||||||
|  |     --window-header-title-color: #f5f5f5; | ||||||
|  |  | ||||||
|  |     --major-button-font-family: CaslonAntique; | ||||||
|  |     --major-button-font-size: 1.4rem; | ||||||
|  |     --major-button-font-weight: normal; | ||||||
|  |     --major-button-color: #dadada; | ||||||
|  |  | ||||||
|  |     --tab-header-font-family: CaslonAntique; | ||||||
|  |     --tab-header-font-size: 1.2rem; | ||||||
|  |     --tab-header-font-weight: 700; | ||||||
|  |     --tab-header-color: #403f3e; | ||||||
|  |     --tab-header-color-active: #4a0404; | ||||||
|  |  | ||||||
|  |     --actor-input-font-family: CaslonAntique; | ||||||
|  |     --actor-input-font-size: 1.2rem; | ||||||
|  |     --actor-input-font-weight: 500; | ||||||
|  |     --actor-input-color: black; | ||||||
|  |  | ||||||
|  |     --actor-label-font-family: CaslonAntique; | ||||||
|  |     --actor-label-font-size: 1.2rem; | ||||||
|  |     --actor-label-font-weight: 700; | ||||||
|  |     --actor-label-color: #464331c4; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Global styles & Font */ | ||||||
|  | .application, | ||||||
|  | .window-app { | ||||||
|  |   font-family: CaslonAntique; | ||||||
|  |   text-align: justify; | ||||||
|  |   font-size: 1rem; | ||||||
|  |   letter-spacing: 1px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Fonts */ | ||||||
|  | .sheet header.sheet-header h1 input, | ||||||
|  | .window-app .window-header, | ||||||
|  | #actors .directory-list, | ||||||
|  | #navigation #scene-list .scene.nav-item { | ||||||
|  |   font-family: "GoudyAcc" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For title, sidebar character and scene */ | ||||||
|  | .sheet nav.sheet-tabs, | ||||||
|  | .window-app input, | ||||||
|  | .sheet header.sheet-header .header-compteurs, | ||||||
|  | .sheet header.sheet-header .flex-group-center.flex-fatigue, | ||||||
|  | select,  .item-checkbox, #sidebar, #players, #navigation #nav-toggle { | ||||||
|  |   font-family: "CaslonAntique"; /* For sheet parts; For nav and title */ | ||||||
|  | } | ||||||
							
								
								
									
										2126
									
								
								less/foundryvtt-reve-de-dragon.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										7
									
								
								less/item/monnaie.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | // Styles pour la feuille d'objet Monnaie | ||||||
|  | .monnaie-content { | ||||||
|  |  | ||||||
|  |   .item-sheet-common(); | ||||||
|  |   .item-sheet-header(); | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								less/item/munition.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | // Styles pour la feuille d'objet Monnaie | ||||||
|  | .munition-content { | ||||||
|  |  | ||||||
|  |   .item-sheet-common(); | ||||||
|  |   .item-sheet-header(); | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								less/item/tarot.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | // Styles pour la feuille d'objet Monnaie | ||||||
|  | .tarot-content { | ||||||
|  |  | ||||||
|  |   .item-sheet-common(); | ||||||
|  |   .item-sheet-header(); | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										229
									
								
								less/roll-dialog.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,229 @@ | |||||||
|  | .roll-dialog { | ||||||
|  |   font-family: CaslonAntique; | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-areas: | ||||||
|  |     "header header     header     header     header     header     header" | ||||||
|  |     "action action     action     action     action     action     action" | ||||||
|  |     "mode   separation separation separation separation separation separation" | ||||||
|  |     "mode   carac      carac      carac      comp       comp       resume" | ||||||
|  |     "mode   choix      choix      choix      choix      choix      modifiers" | ||||||
|  |     "mode   resolution resolution resolution resolution resolution modifiers" | ||||||
|  |     "mode   chances    chances    chances    chances    chances    buttons" | ||||||
|  |     "footer footer     footer     footer     footer     footer     footer"; | ||||||
|  |   grid-template-columns: 2rem 1rem 1fr 1fr 2fr 2fr 3fr; | ||||||
|  |   gap: 0.2rem; | ||||||
|  |  | ||||||
|  |   roll-header { grid-area: header; } | ||||||
|  |   roll-line  { grid-area: separation; } | ||||||
|  |   roll-action { grid-area: action; } | ||||||
|  |   roll-carac { grid-area: carac; } | ||||||
|  |   roll-comp { grid-area: comp; } | ||||||
|  |    | ||||||
|  |   roll-choix { grid-area: choix; } | ||||||
|  |    | ||||||
|  |   roll-table { grid-area: resolution; } | ||||||
|  |   roll-conditions { grid-area: modifiers; } | ||||||
|  |   roll-chances { grid-area: chances; } | ||||||
|  |   roll-resume { grid-area: resume; } | ||||||
|  |   roll-buttons  { grid-area: buttons; } | ||||||
|  |    | ||||||
|  |   roll-mode { | ||||||
|  |     grid-area: mode; | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |   } | ||||||
|  |   roll-conditions roll-section[name="rollmode"], | ||||||
|  |   roll-mode { | ||||||
|  |     button[data-checked="true"] { | ||||||
|  |       background-color: var(--color-text-selection-bg); | ||||||
|  |       color: var(--color-controls); | ||||||
|  |       i { filter: invert(0.8); } | ||||||
|  |       img { filter: invert(0.2); } | ||||||
|  |     } | ||||||
|  |     button { | ||||||
|  |       height: 1.8rem; | ||||||
|  |       width: 1.8rem; | ||||||
|  |       gap: 0.5rem; | ||||||
|  |       padding: 0.2rem; | ||||||
|  |       background-color: var(--button-background-color); | ||||||
|  |       color: var(--color-controls); | ||||||
|  |       i { filter: invert(0.2); } | ||||||
|  |       img { filter: invert(0.8); } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   :is(roll-carac, roll-comp) { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     align-items: baseline; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   roll-section, | ||||||
|  |   roll-section div { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     align-items: anchor-center; | ||||||
|  |     margin: 0 0.2rem; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   roll-resume { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     img.button-effect-img { | ||||||
|  |       filter: invert(0.8); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-choix roll-section { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-areas: | ||||||
|  |       "selection selection" | ||||||
|  |       "img roll-part"; | ||||||
|  |     grid-template-columns: 3.2rem 1fr; | ||||||
|  |     gap: 0.2rem; | ||||||
|  |     align-items: start; | ||||||
|  |  | ||||||
|  |      | ||||||
|  |     subline { | ||||||
|  |       grid-area: selection; | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: row; | ||||||
|  |       margin: 0.1rem 0; | ||||||
|  |     } | ||||||
|  |    | ||||||
|  |     roll-part-img { | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: column; | ||||||
|  |       grid-area: img; | ||||||
|  |       img{ | ||||||
|  |         border: 0; | ||||||
|  |         padding: 1px; | ||||||
|  |         max-height: 3rem; | ||||||
|  |         max-width: 3rem; | ||||||
|  |         object-fit: contain; | ||||||
|  |         height: 100%; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     roll-part-detail { | ||||||
|  |       grid-area: roll-part; | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: column; | ||||||
|  |       align-items: normal; | ||||||
|  |        | ||||||
|  |       subline { | ||||||
|  |         display: flex; | ||||||
|  |         flex-direction: row; | ||||||
|  |         margin: 0.1rem 0; | ||||||
|  |         div.poesie-extrait{ | ||||||
|  |           display: flex; | ||||||
|  |           flex-direction: column; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-section selected-numeric-value { | ||||||
|  |     display: flow; | ||||||
|  |     width: 2.5rem; | ||||||
|  |     text-align: right; | ||||||
|  |     margin: 0 0.2rem 0 0.5rem; | ||||||
|  |     padding: 0 0.2rem; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-action { | ||||||
|  |     flex-basis: content; | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     align-items: center; | ||||||
|  |     border-bottom: 0.2rem solid; | ||||||
|  |     font-size: 1.2rem; | ||||||
|  |     font-weight: bold; | ||||||
|  |      | ||||||
|  |     roll-section { | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: row; | ||||||
|  |       align-items: center; | ||||||
|  |  | ||||||
|  |       img.action-img { | ||||||
|  |         float: left; | ||||||
|  |       } | ||||||
|  |       img { | ||||||
|  |         max-width: 3rem; | ||||||
|  |         max-height: 3rem; | ||||||
|  |         margin: 0 1rem; | ||||||
|  |         padding: 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-conditions { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |   } | ||||||
|  |   :is(roll-action, roll-carac, roll-comp) roll-section { | ||||||
|  |     flex-basis: content; | ||||||
|  |   }   | ||||||
|  |  | ||||||
|  |   :is(roll-choix, roll-conditions, roll-carac, roll-comp) { | ||||||
|  |     select { | ||||||
|  |       max-height: 1.6rem; | ||||||
|  |       margin: 0 0.2rem; | ||||||
|  |       padding: 0 0.2rem; | ||||||
|  |     } | ||||||
|  |     input[type="number"] { | ||||||
|  |       max-height: 1.6rem; | ||||||
|  |       max-width: 2.5rem; | ||||||
|  |       margin: 0 0.2rem; | ||||||
|  |       padding: 0 0.2rem; | ||||||
|  |     } | ||||||
|  |     img { | ||||||
|  |           max-width: 1.8rem; | ||||||
|  |           max-height: 1.8rem; | ||||||
|  |           margin: 0 0.2rem; | ||||||
|  |           padding: 0; | ||||||
|  |     } | ||||||
|  |     img.button-effect-img { | ||||||
|  |           max-width: 1rem; | ||||||
|  |           max-height: 1rem; | ||||||
|  |           margin: 0 0.1rem; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-carac select[name="select-carac"] { | ||||||
|  |     max-width: 6rem; | ||||||
|  |  | ||||||
|  |   }     | ||||||
|  |   roll-comp select[name="select-comp"] { | ||||||
|  |     min-width: 8rem; | ||||||
|  |     max-width: 11rem; | ||||||
|  |     margin-left: 1rem; | ||||||
|  |   }      | ||||||
|  |  | ||||||
|  |   roll-conditions roll-section[name="coeur"] select[name="coeur"]  { | ||||||
|  |     max-width: 4rem; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-conditions roll-section[name="tricher"] img { | ||||||
|  |     /* image de d100 */ | ||||||
|  |     max-width: 2.5rem; | ||||||
|  |     max-height: 2.5rem; | ||||||
|  |     gap: 0; | ||||||
|  |     margin: 0; | ||||||
|  |     padding: 0; | ||||||
|  |     filter: invert(0.8); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-buttons {  | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row-reverse; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   roll-table { | ||||||
|  |     table tr :is(th, td) { | ||||||
|  |         padding: 0.1rem; | ||||||
|  |         width: 1.5rem; | ||||||
|  |         text-align: center; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										108
									
								
								less/sheets.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,108 @@ | |||||||
|  | .item-sheet-common() { | ||||||
|  |   padding: 0px; | ||||||
|  |  | ||||||
|  |   // Styles pour la section de description, si le partiel utilise une structure standard | ||||||
|  |   .editor, | ||||||
|  |   .editor-content { | ||||||
|  |     height: auto; // Ajuster selon le besoin | ||||||
|  |     min-height: 100px; // Hauteur minimale pour la description | ||||||
|  |     background: var(--rdd-bg-input-alt); // Une couleur de fond alternative | ||||||
|  |     padding: 5px; | ||||||
|  |     border-radius: 3px; | ||||||
|  |     color: var(--rdd-color-text-primary); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .window-content { | ||||||
|  |     font-family: CaslonAntique; | ||||||
|  |     text-align: justify; | ||||||
|  |     font-size: 1rem; | ||||||
|  |     letter-spacing: 1px; | ||||||
|  |     padding: 0% 0 0 0; | ||||||
|  |  | ||||||
|  |     font-size: calc(var(--font-size-standard) * 1); | ||||||
|  |     color: var(--color-dark-1); | ||||||
|  |     background-size: 100% 100%; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   fieldset { | ||||||
|  |     background: var(--fieldset-background); | ||||||
|  |     color: var(--rdd-color-text-primary); | ||||||
|  |     margin-bottom: 4px; | ||||||
|  |     border-radius: 6px; | ||||||
|  |     border-color: var(--rdd-color-text-primary); | ||||||
|  |     border-width: 2px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .form-group { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     flex-wrap: wrap; | ||||||
|  |     justify-content: flex-start; | ||||||
|  |     align-items: center; | ||||||
|  |     padding: 2px 0; | ||||||
|  |     border-bottom: 1px solid var(--rdd-color-shadow-primary); | ||||||
|  |     font-size: 0.9rem; | ||||||
|  |  | ||||||
|  |     label { | ||||||
|  |       font-weight: normal; | ||||||
|  |       flex: 2; | ||||||
|  |       padding-left: 5px; | ||||||
|  |       margin: 0; | ||||||
|  |       color: var( | ||||||
|  |         --rdd-color-text-primary | ||||||
|  |       ); // Assurez-vous que cette variable existe dans colors.less | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .attribute-value, | ||||||
|  |     input[type="text"], | ||||||
|  |     input[type="number"], | ||||||
|  |     select { | ||||||
|  |       flex: 3; | ||||||
|  |       background: var(--rdd-input-background); | ||||||
|  |       border: 1px solid var(--rdd-color-border-input); // Assurez-vous que cette variable existe | ||||||
|  |       color: var( | ||||||
|  |         --rdd-color-text-input | ||||||
|  |       ); // Assurez-vous que cette variable existe | ||||||
|  |       padding: 2px 2px; // Augmentation du padding vertical | ||||||
|  |       border-radius: 3px; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     input[type="checkbox"] { | ||||||
|  |       flex: 0 0 20px; // Taille fixe pour les cases à cocher | ||||||
|  |       margin-left: 5px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .item-sheet-header() { | ||||||
|  |   background: #011d33 url(../assets/ui/bg_header.webp) no-repeat left top; | ||||||
|  |   color: rgba(255, 255, 255, 1); | ||||||
|  |   .sheet-header-row { | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: row; | ||||||
|  |     align-items: center; | ||||||
|  |     h1, | ||||||
|  |     input { | ||||||
|  |       font-family: CaslonAntique; | ||||||
|  |       font-size: 2.5rem; | ||||||
|  |       font-weight: normal; | ||||||
|  |       color: var(--window-header-title-color); | ||||||
|  |       margin: 4px; | ||||||
|  |       height: 3rem; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   :is( | ||||||
|  |     input[type="text"], | ||||||
|  |     input[type="number"], | ||||||
|  |     input[type="password"], | ||||||
|  |     input[type="datetime-local"], | ||||||
|  |     input[type="date"], | ||||||
|  |     input[type="time"] | ||||||
|  |   ) { | ||||||
|  |     color: rgba(255, 255, 255, 0.75); | ||||||
|  |     background: rgba(255, 255, 255, 0.1); | ||||||
|  |     border: 0 none; | ||||||
|  |     margin-bottom: 0.2rem; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -44,13 +44,13 @@ export class ChatVente { | |||||||
|     vente.nbLots = Math.max(0, vente.nbLots - quantite) |     vente.nbLots = Math.max(0, vente.nbLots - quantite) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) |     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||||
|  |  | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||||
|     chatMessage.update({ content: html }); |     chatMessage.update({ content: html }); | ||||||
|     chatMessage.render(true); |     chatMessage.render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static async displayAchatVente(vente) { |   static async displayAchatVente(vente) { | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||||
|     const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html)) |     const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html)) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) |     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, { |     await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, { | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ export class DialogItemAchat extends Dialog { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     DialogItemAchat.changeNombreLots(venteData, 1) |     DialogItemAchat.changeNombreLots(venteData, 1) | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData) |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.hbs`, venteData) | ||||||
|     new DialogItemAchat(html, venteData).render(true) |     new DialogItemAchat(html, venteData).render(true) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ export class DialogItemVente extends Dialog { | |||||||
|       quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent, |       quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent, | ||||||
|       isOwned:  item.parent, |       isOwned:  item.parent, | ||||||
|     } |     } | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.html`, venteData); |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.hbs`, venteData); | ||||||
|     return new DialogItemVente(venteData, html).render(true); |     return new DialogItemVente(venteData, html).render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| import { RdDUtility } from "./rdd-utility.js"; | import { RdDUtility } from "./rdd-utility.js"; | ||||||
| import { HtmlUtility } from "./html-utility.js"; | import { HtmlUtility } from "./html-utility.js"; | ||||||
| import { RdDItemArme } from "./item-arme.js"; |  | ||||||
| import { RdDItemCompetence } from "./item-competence.js"; |  | ||||||
| import { RdDBonus } from "./rdd-bonus.js"; | import { RdDBonus } from "./rdd-bonus.js"; | ||||||
| import { Misc } from "./misc.js"; | import { Misc } from "./misc.js"; | ||||||
| import { RdDCombatManager } from "./rdd-combat.js"; | import { RdDCombatManager } from "./rdd-combat.js"; | ||||||
| @@ -9,15 +7,18 @@ import { RdDCarac } from "./rdd-carac.js"; | |||||||
| import { DialogSplitItem } from "./dialog-split-item.js"; | import { DialogSplitItem } from "./dialog-split-item.js"; | ||||||
| import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; | import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; | ||||||
| import { RdDSheetUtility } from "./rdd-sheet-utility.js"; | import { RdDSheetUtility } from "./rdd-sheet-utility.js"; | ||||||
| import { STATUSES } from "./settings/status-effects.js"; |  | ||||||
| import { MAINS_DIRECTRICES } from "./actor.js"; | import { MAINS_DIRECTRICES } from "./actor.js"; | ||||||
| import { RdDBaseActorReveSheet } from "./actor/base-actor-reve-sheet.js"; | import { RdDBaseActorReveSheet } from "./actor/base-actor-reve-sheet.js"; | ||||||
|  | import { ITEM_TYPES } from "./constants.js"; | ||||||
| import { RdDItem } from "./item.js"; | import { RdDItem } from "./item.js"; | ||||||
|  | import { RdDItemArme } from "./item/arme.js"; | ||||||
|  | import { RdDItemCompetence } from "./item-competence.js"; | ||||||
| import { RdDItemBlessure } from "./item/blessure.js"; | import { RdDItemBlessure } from "./item/blessure.js"; | ||||||
| import { RdDEmpoignade } from "./rdd-empoignade.js"; | import { RdDEmpoignade } from "./rdd-empoignade.js"; | ||||||
| import { RdDBaseActorSangSheet } from "./actor/base-actor-sang-sheet.js"; | import { RdDBaseActorSangSheet } from "./actor/base-actor-sang-sheet.js"; | ||||||
| import { RdDCoeur } from "./coeur/rdd-coeur.js"; | import { RdDCoeur } from "./coeur/rdd-coeur.js"; | ||||||
| import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js"; | import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js"; | ||||||
|  | import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| /** | /** | ||||||
| @@ -28,11 +29,11 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   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.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs", | ||||||
|       width: 550, |       width: 550, | ||||||
|       showCompNiveauBase: false, |       showCompNiveauBase: false, | ||||||
|       vueArchetype: false, |       vueArchetype: false, | ||||||
|     }, { inplace: false }); |     }, { inplace: false }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -43,12 +44,12 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|       cssClass: this.isEditable ? "editable" : "locked", |       cssClass: this.isEditable ? "editable" : "locked", | ||||||
|       limited: this.actor.limited, |       limited: this.actor.limited, | ||||||
|       owner: this.actor.isOwner, |       owner: this.actor.isOwner, | ||||||
|       biographie: await TextEditor.enrichHTML(this.actor.system.biographie, { async: true }), |       biographie: await RdDTextEditor.enrichHTML(this.actor.system.biographie, this.actor), | ||||||
|       notes: await TextEditor.enrichHTML(this.actor.system.notes, { async: true }), |       notes: await RdDTextEditor.enrichHTML(this.actor.system.notes, this.actor), | ||||||
|     }); |     }); | ||||||
|     foundry.utils.mergeObject(formData.calc, { |     foundry.utils.mergeObject(formData.calc, { | ||||||
|       surenc: this.actor.computeMalusSurEncombrement(), |       surenc: this.actor.computeMalusSurEncombrement(), | ||||||
|       surprise: RdDBonus.find(this.actor.getSurprise(false)).descr, |       surprise: RdDBonus.find(this.actor.getSurprise(false)).label, | ||||||
|       resumeBlessures: this.actor.computeResumeBlessure(this.actor.system.blessures), |       resumeBlessures: this.actor.computeResumeBlessure(this.actor.system.blessures), | ||||||
|       caracTotal: RdDCarac.computeTotal(this.actor.system.carac, this.actor.system.beaute), |       caracTotal: RdDCarac.computeTotal(this.actor.system.carac, this.actor.system.beaute), | ||||||
|       surEncombrementMessage: this.actor.isSurenc() ? "Sur-Encombrement!" : "", |       surEncombrementMessage: this.actor.isSurenc() ? "Sur-Encombrement!" : "", | ||||||
| @@ -76,14 +77,10 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|       }); |       }); | ||||||
|  |  | ||||||
|       // toujours avoir une liste d'armes (pour mettre esquive et corps à corps) |       // toujours avoir une liste d'armes (pour mettre esquive et corps à corps) | ||||||
|       const actor = this.actor; |       const actor = this.actor | ||||||
|       formData.combat = foundry.utils.duplicate(formData.armes); |  | ||||||
|       RdDItemArme.computeNiveauArmes(formData.combat, formData.competences); |  | ||||||
|       formData.combat.push(RdDItemArme.corpsACorps(actor)); |  | ||||||
|       formData.combat.push(RdDItemArme.empoignade(actor)); |  | ||||||
|  |  | ||||||
|       formData.esquives = this.actor.getCompetencesEsquive() |       formData.esquives = this.actor.getCompetencesEsquive() | ||||||
|       formData.combat = RdDCombatManager.listActionsArmes(formData.combat, formData.competences, formData.system.carac); |       formData.combat = actor.listActionsAttaque() | ||||||
|       formData.empoignades = this.actor.getEmpoignades(); |       formData.empoignades = this.actor.getEmpoignades(); | ||||||
|  |  | ||||||
|       this.armesList = formData.combat; |       this.armesList = formData.combat; | ||||||
| @@ -93,10 +90,11 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|       formData.difficultesLibres = CONFIG.RDD.difficultesLibres; |       formData.difficultesLibres = CONFIG.RDD.difficultesLibres; | ||||||
|  |  | ||||||
|       formData.hautreve = { |       formData.hautreve = { | ||||||
|         isDemiReve: this.actor.getEffect(STATUSES.StatusDemiReve), |         isDemiReve: this.actor.isDemiReve(), | ||||||
|         cacheTMR: this.actor.isTMRCache() |         cacheTMR: this.actor.isTMRCache() | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       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(), | ||||||
| @@ -123,80 +121,73 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.show-hide-competences').click(async event => { |     this.html.find('.show-hide-competences').click(async event => { | ||||||
|       this.options.showCompNiveauBase = !this.options.showCompNiveauBase; |       this.options.showCompNiveauBase = !this.options.showCompNiveauBase | ||||||
|       this.render(true); |       this.render(true) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     this.html.find('.button-tmr-visu').click(async event => this.actor.displayTMR("visu")) |     this.html.find('.button-tmr-visu').click(async event => await this.actor.displayTMR("visu")) | ||||||
|  |  | ||||||
|     // 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; | ||||||
|  |  | ||||||
|     this.html.find('.sheet-possession-attack').click(async event => { |     this.html.find('.sheet-possession-attack').click(async event => { | ||||||
|       const poss = RdDSheetUtility.getItem(event, this.actor) |       const poss = RdDSheetUtility.getItem(event, this.actor) | ||||||
|       this.actor.conjurerPossession(poss) |       await this.actor.conjurerPossession(poss) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.subacteur-coeur-toggle a').click(async event => { |     this.html.find('.subacteur-coeur-toggle a').click(async event => { | ||||||
|       const subActorIdactorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') |       const subActorIdactorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||||
|       const coeurNombre = $(event.currentTarget).data('numero-coeur') |       const coeurNombre = $(event.currentTarget).data('numero-coeur') | ||||||
|       RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) |       await RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) | ||||||
|     }) |     }) | ||||||
|     this.html.find('.subacteur-tendre-moment').click(async event => { |     this.html.find('.subacteur-tendre-moment').click(async event => { | ||||||
|       const subActorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') |       const subActorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||||
|       RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) |       await RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) | ||||||
|     }) |     }) | ||||||
|     this.html.find('.subacteur-delete').click(async event => { |     this.html.find('.subacteur-delete').click(async event => { | ||||||
|       const li = RdDSheetUtility.getEventElement(event); |       const li = RdDSheetUtility.getEventElement(event); | ||||||
|       const subActorId = li.data("subactor-id"); |       const subActorId = li.data("subactor-id"); | ||||||
|       this.deleteSubActeur(subActorId, li); |       this.deleteSubActeur(subActorId, li); | ||||||
|     }) |     }) | ||||||
|     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => { |     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => | ||||||
|       this.actor.updateCompteurValue("stress", parseInt(event.target.value)); |       await this.actor.updateCompteurValue("stress", parseInt(event.target.value)) | ||||||
|     }); |     ); | ||||||
|     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => { |     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => | ||||||
|       this.actor.updateCompteurValue("experience", parseInt(event.target.value)); |       await this.actor.updateCompteurValue("experience", parseInt(event.target.value)) | ||||||
|     }); |     ); | ||||||
|  |  | ||||||
|     this.html.find('.creer-tache').click(async event => this.createEmptyTache()); |     this.html.find('.creer-tache').click(async event => await this.createEmptyTache()); | ||||||
|     this.html.find('.creer-une-oeuvre').click(async event => this.selectTypeOeuvreToCreate()); |     this.html.find('.creer-une-oeuvre').click(async event => await this.selectTypeOeuvreToCreate()); | ||||||
|     this.html.find('.creer-tache-blessure-legere').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); |     this.html.find('.creer-tache-blessure-legere').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); | ||||||
|     this.html.find('.creer-tache-blessure-grave').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); |     this.html.find('.creer-tache-blessure-grave').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); | ||||||
|     this.html.find('.creer-tache-blessure-critique').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); |     this.html.find('.creer-tache-blessure-critique').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.blessure-premierssoins-done').change(async event => { |     this.html.find('.blessure-premierssoins-done').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); | ||||||
|       await blessure?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-soinscomplets-done').change(async event => { |     this.html.find('.blessure-soinscomplets-done').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) | ||||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-premierssoins-bonus').change(async event => { |     this.html.find('.blessure-premierssoins-bonus').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) | ||||||
|       await blessure?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-soinscomplets-bonus').change(async event => { |     this.html.find('.blessure-soinscomplets-bonus').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) | ||||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     // Equip Inventory Item |     this.html.find('.roll-chance-actuelle').click(async event => await this.actor.rollCarac('chance-actuelle')) | ||||||
|     this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event))) |     this.html.find('.button-appel-chance').click(async event => await this.actor.rollAppelChance()) | ||||||
|     this.html.find('.chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle')) |  | ||||||
|  |  | ||||||
|     this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance()) |     this.html.find('[name="jet-astrologie"]').click(async event => await this.actor.astrologieNombresAstraux()) | ||||||
|  |     this.html.find('.action-tache').click(async event => await this.actor.rollTache(RdDSheetUtility.getItemId(event))) | ||||||
|  |     this.html.find('.meditation-label a').click(async event => await this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) | ||||||
|  |  | ||||||
|     this.html.find('[name="jet-astrologie"]').click(async event => this.actor.astrologieNombresAstraux()) |     this.html.find('.action-chant').click(async event => await this.actor.rollChant(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.tache-label a').click(async event => this.actor.rollTache(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-danse').click(async event => await this.actor.rollDanse(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.meditation-label a').click(async event => this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-musique').click(async event => await this.actor.rollMusique(RdDSheetUtility.getItemId(event))) | ||||||
|  |     this.html.find('.action-oeuvre').click(async event => await this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.chant-label a').click(async event => this.actor.rollChant(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-jeu').click(async event => await this.actor.rollJeu(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.danse-label a').click(async event => this.actor.rollDanse(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-recettecuisine').click(async event => await this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.musique-label a').click(async event => this.actor.rollMusique(RdDSheetUtility.getItemId(event))) |  | ||||||
|     this.html.find('.oeuvre-label a').click(async event => this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) |  | ||||||
|     this.html.find('.jeu-label a').click(async event => this.actor.rollJeu(RdDSheetUtility.getItemId(event))) |  | ||||||
|     this.html.find('.recettecuisine-label a').click(async event => 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)) | ||||||
|     if (game.user.isGM) { |     if (game.user.isGM) { | ||||||
| @@ -212,53 +203,60 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|         await this.actor.deleteExperienceLog(0, key + 1); |         await this.actor.deleteExperienceLog(0, key + 1); | ||||||
|       }); |       }); | ||||||
|       // Boutons spéciaux MJs |       // Boutons spéciaux MJs | ||||||
|       this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) |       this.html.find('.forcer-tmr-aleatoire').click(async event => await this.actor.reinsertionAleatoire("Action MJ")) | ||||||
|       this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) |       this.html.find('.don-de-haut-reve').click(async event => await this.actor.addDonDeHautReve()) | ||||||
|       this.html.find('.nouveau-sort-reserve').click(async event => this.actor.addSortReserve()) |       this.html.find('.afficher-tmr').click(async event => await this.actor.changeTMRVisible()) | ||||||
|       this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Points de reve actuel |     // Points de reve actuel | ||||||
|     this.html.find('.roll-reve-actuel').click(async event => this.actor.rollCarac('reve-actuel', true)) |     this.html.find('.roll-reve-actuel').click(async event => await this.actor.rollCarac('reve-actuel', { resistance: true })) | ||||||
|     this.html.find('.empoignade-label a').click(async event => RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) |     this.html.find('.action-empoignade').click(async event => await RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) | ||||||
|  |  | ||||||
|     this.html.find('.roll-arme').click(async event => this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) |     this.html.find('.roll-arme').click(async event => { | ||||||
|  |       const action = this._getActionCombat(event); | ||||||
|  |       await this.actor.rollArme(action.arme, action.main) | ||||||
|  |  | ||||||
|  |     }) | ||||||
|  |  | ||||||
|     // Initiative pour l'arme |     // Initiative pour l'arme | ||||||
|     this.html.find('.roll-init-arme').click(async event => { |     this.html.find('.roll-init-arme').click(async event => { | ||||||
|       let combatant = game.combat.combatants.find(c => c.actor.id == this.actor.id) |       let combatant = game.combat.combatants.find(c => c.actor.id == this.actor.id) | ||||||
|       if (combatant) { |       if (combatant) { | ||||||
|         RdDCombatManager.rollInitiativeAction(combatant._id, this._getEventArmeCombat(event)); |         RdDCombatManager.rollInitiativeAction(combatant._id, this._getActionCombat(event)); | ||||||
|       } else { |       } else { | ||||||
|         ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); |         ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     // Display TMR |     // Display TMR | ||||||
|  |  | ||||||
|     this.html.find('.button-tmr').click(async event => this.actor.displayTMR("normal")) |     this.html.find('.button-tmr').click(async event => await this.actor.displayTMR("normal")) | ||||||
|     this.html.find('.button-tmr-rapide').click(async event => this.actor.displayTMR("rapide")) |     this.html.find('.button-tmr-rapide').click(async event => await this.actor.displayTMR("rapide")) | ||||||
|  |  | ||||||
|     this.html.find('.button-repos').click(async event => await this.actor.repos()) |     this.html.find('.button-repos').click(async event => await this.actor.repos()) | ||||||
|  |  | ||||||
|     this.html.find('.carac-xp-augmenter').click(async event => this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) |     this.html.find('.carac-xp-augmenter').click(async event => await this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) | ||||||
|     this.html.find('.competence-xp-augmenter').click(async event => this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) |     this.html.find('.competence-xp-augmenter').click(async event => await this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.competence-stress-augmenter').click(async event => this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event))) |     this.html.find('.competence-stress-augmenter').click(async event => { | ||||||
|  |       await this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event)) | ||||||
|  |       this.render(true) | ||||||
|  |     } | ||||||
|  |     ) | ||||||
|  |  | ||||||
|     if (this.options.vueDetaillee) { |     if (this.options.vueDetaillee) { | ||||||
|       // On carac change |       // On carac change | ||||||
|       this.html.find('input.carac-xp').change(async event => { |       this.html.find('input.carac-xp').change(async event => { | ||||||
|         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", ""); |         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", "") | ||||||
|         this.actor.updateCaracXP(caracName, parseInt(event.target.value)); |         await this.actor.updateCaracXP(caracName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|       // On competence xp change |       // On competence xp change | ||||||
|       this.html.find('input.competence-xp').change(async event => { |       this.html.find('input.competence-xp').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value | ||||||
|         this.actor.updateCompetenceXP(compName, parseInt(event.target.value)); |         await this.actor.updateCompetenceXP(compName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|       this.html.find('input.competence-xp-sort').change(async event => { |       this.html.find('input.competence-xp-sort').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value | ||||||
|         this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); |         await this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|  |  | ||||||
|       this.html.find('.toggle-archetype').click(async event => { |       this.html.find('.toggle-archetype').click(async event => { | ||||||
|         this.options.vueArchetype = !this.options.vueArchetype; |         this.options.vueArchetype = !this.options.vueArchetype; | ||||||
| @@ -267,25 +265,27 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|       // On competence archetype change |       // On competence archetype change | ||||||
|       this.html.find('.competence-archetype').change(async event => { |       this.html.find('.competence-archetype').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value; | ||||||
|         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 => this.actor.nouvelleIncarnation()) |       this.html.find('.nouvelle-incarnation').click(async event => await this.actor.nouvelleIncarnation()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // On pts de reve change |     // On pts de reve change | ||||||
|     this.html.find('.pointsreve-value').change(async event => this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) |     this.html.find('.pointsreve-value').change(async event => await this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) | ||||||
|     this.html.find('.seuil-reve-value').change(async event => this.actor.setPointsDeSeuil(event.currentTarget.value)) |     this.html.find('.seuil-reve-value').change(async event => await this.actor.setPointsDeSeuil(event.currentTarget.value)) | ||||||
|  |  | ||||||
|     this.html.find('.stress-test').click(async event => this.actor.transformerStress()) |     this.html.find('.stress-test').click(async event => await this.actor.transformerStress()) | ||||||
|     this.html.find('.moral-malheureux').click(async event => this.actor.jetDeMoral('malheureuse')) |     this.html.find('.moral-malheureux').click(async event => await this.actor.jetDeMoral('malheureuse')) | ||||||
|     this.html.find('.moral-neutre').click(async event => this.actor.jetDeMoral('neutre')) |     this.html.find('.moral-neutre').click(async event => await this.actor.jetDeMoral('neutre')) | ||||||
|     this.html.find('.moral-heureux').click(async event => this.actor.jetDeMoral('heureuse')) |     this.html.find('.moral-heureux').click(async event => await this.actor.jetDeMoral('heureuse')) | ||||||
|     this.html.find('.button-ethylisme').click(async event => this.actor.jetEthylisme()) |     this.html.find('.button-ethylisme').click(async event => await this.actor.jetEthylisme()) | ||||||
|  |  | ||||||
|     this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1)) |     this.html.find('.ptreve-actuel-plus').click(async event => await this.actor.reveActuelIncDec(1)) | ||||||
|     this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1)) |     this.html.find('.ptreve-actuel-moins').click(async event => await this.actor.reveActuelIncDec(-1)) | ||||||
|     this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1)) |     this.html.find('.chance-actuelle-plus').click(async event => await this.actor.chanceActuelleIncDec(1)) | ||||||
|     this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1)) |     this.html.find('.chance-actuelle-moins').click(async event => await this.actor.chanceActuelleIncDec(-1)) | ||||||
|  |     this.html.find('.fatigue-plus').click(async event => await this.actor.santeIncDec("fatigue", 1)) | ||||||
|  |     this.html.find('.fatigue-moins').click(async event => await this.actor.santeIncDec("fatigue", -1)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getBlessure(event) { |   getBlessure(event) { | ||||||
| @@ -322,7 +322,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async selectTypeOeuvreToCreate() { |   async selectTypeOeuvreToCreate() { | ||||||
|     let types = RdDItem.getTypesOeuvres(); |     let types = RdDItem.getTypesOeuvres(); | ||||||
|     let content = `<span class="competence-label">Selectionnez le type d'oeuvre</span><select class="item-type">`; |     let content = `<span class="generic-label">Selectionnez le type d'oeuvre</span><select class="item-type">`; | ||||||
|     for (let typeName of types) { |     for (let typeName of types) { | ||||||
|       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` |       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` | ||||||
|     } |     } | ||||||
| @@ -346,13 +346,17 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|     await this.actor.createItem('tache', 'Nouvelle tache'); |     await this.actor.createItem('tache', 'Nouvelle tache'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _getEventArmeCombat(event) { |   _getActionCombat(event) { | ||||||
|     const li = this.html.find(event.currentTarget)?.parents(".item"); |     const li = this.html.find(event.currentTarget)?.parents(".item"); | ||||||
|     let armeName = li.data("arme-name"); |     let armeName = li.data("arme-name"); | ||||||
|     let compName = li.data('competence-name'); |     let compName = li.data('competence-name'); | ||||||
|     const arme = this.armesList.find(a => a.name == armeName && a.system.competence == compName); |     const arme = this.armesList.find(a => a.arme.name == armeName && a.comp.name == compName); | ||||||
|     if (!arme) { |     if (!arme) { | ||||||
|       return { name: armeName, system: { competence: compName } }; |       return { | ||||||
|  |         name: armeName, | ||||||
|  |         arme: { name: armeName }, | ||||||
|  |         comp: { name: compName } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     return arme; |     return arme; | ||||||
|   } |   } | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								module/actor-token.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,40 @@ | |||||||
|  | /** | ||||||
|  |  * class providing the actor and token, and choosing the name and image from the token if available. | ||||||
|  |  */ | ||||||
|  | export class ActorToken { | ||||||
|  |  | ||||||
|  |   static fromActorId(actorId, onError = () => undefined) { | ||||||
|  |     actorId = actorId ?? (canvas.tokens.controlled.length > 0 | ||||||
|  |       ? canvas.tokens.controlled[0].actor.id | ||||||
|  |       : undefined) | ||||||
|  |     const actor = actorId ? game.actors.get(actorId) : undefined | ||||||
|  |     if (actor) { | ||||||
|  |       return this.fromActor(actor) | ||||||
|  |     } | ||||||
|  |     return onError() | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static fromActor(actor) { | ||||||
|  |     const token = actor.isToken ? actor.token : actor.prototypeToken | ||||||
|  |     return ActorToken.fromToken(token) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static fromTokenId(tokenId, sceneId = undefined) { | ||||||
|  |     const tokensList = sceneId ? game.scenes.get(sceneId).tokens : canvas.tokens.placeables | ||||||
|  |     const token = tokensList.get(tokenId) | ||||||
|  |     return ActorToken.fromToken(token) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static fromToken(token) { | ||||||
|  |     return new ActorToken(token) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   constructor(token) { | ||||||
|  |     this.name = token.name ?? token.actor.name | ||||||
|  |     this.img = token.texture.src ?? token.actor.img | ||||||
|  |     this.actor = token.actor | ||||||
|  |     this.id = token.actor?.id | ||||||
|  |     this.token = token | ||||||
|  |     this.tokenId = token?.id | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										1162
									
								
								module/actor.js
									
									
									
									
									
								
							
							
						
						| @@ -1,5 +1,6 @@ | |||||||
|  | import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"; | ||||||
| import { Grammar } from "../grammar.js"; | import { Grammar } from "../grammar.js"; | ||||||
| import { ITEM_TYPES } from "../item.js"; | import { ITEM_TYPES } from "../constants.js"; | ||||||
| import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | ||||||
| import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | ||||||
|  |  | ||||||
| @@ -25,16 +26,17 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | |||||||
|     // 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; | ||||||
|  |  | ||||||
|     this.html.find('.button-encaissement').click(async event => this.actor.encaisser()) |     this.html.find('.button-encaissement').click(async event => await this.actor.encaisser()) | ||||||
|     this.html.find('.roll-carac').click(async event => { |     this.html.find('.roll-carac').click(async event => { | ||||||
|       this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value))}); |       await this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value)) | ||||||
|     this.html.find('.roll-competence').click(async event => this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); |     }) | ||||||
|     this.html.find('.endurance-plus').click(async event => this.actor.santeIncDec("endurance", 1)); |     this.html.find('.roll-competence').click(async event => await this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); | ||||||
|     this.html.find('.endurance-moins').click(async event => this.actor.santeIncDec("endurance", -1)); |     this.html.find('.endurance-plus').click(async event => await this.actor.santeIncDec("endurance", 1)); | ||||||
|  |     this.html.find('.endurance-moins').click(async event => await this.actor.santeIncDec("endurance", -1)); | ||||||
|  |  | ||||||
|     if (game.user.isGM) { |     if (game.user.isGM) { | ||||||
|       this.html.find('.button-remise-a-neuf').click(async event => this.actor.remiseANeuf()) |       this.html.find('.button-remise-a-neuf').click(async event => await this.actor.remiseANeuf()) | ||||||
|       this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); |       this.html.find('.delete-active-effect').click(async event => await this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); | ||||||
|       this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects()); |       this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects()); | ||||||
|     } |     } | ||||||
|     this.html.find('.competence-add').click(async event => |     this.html.find('.competence-add').click(async event => | ||||||
| @@ -47,7 +49,22 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | |||||||
|         } |         } | ||||||
|       }], { renderSheet: true }) |       }], { renderSheet: true }) | ||||||
|     ) |     ) | ||||||
|  |     this.html.find('.roll-text').click(async event => await RdDTextEditor.rollText(event, this.actor)) | ||||||
|  |     this.html.find('.chat-roll-text').click(async event => await RdDTextEditor.chatRollText(event)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     if (this.options.vueDetaillee) { | ||||||
|  |       // On carac change | ||||||
|  |       this.html.find('.carac-value').change(async event => { | ||||||
|  |         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "") | ||||||
|  |         await this.actor.updateCarac(caracName, parseInt(event.target.value)) | ||||||
|  |       }); | ||||||
|  |       // On competence change | ||||||
|  |       this.html.find('.competence-value').change(async event => { | ||||||
|  |         let compName = event.currentTarget.attributes.compname.value | ||||||
|  |         await this.actor.updateCompetence(compName, parseInt(event.target.value)) | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,14 +7,16 @@ import { RdDRoll } from "../rdd-roll.js"; | |||||||
| import { RdDUtility } from "../rdd-utility.js"; | import { RdDUtility } from "../rdd-utility.js"; | ||||||
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | ||||||
| import { RdDBaseActor } from "./base-actor.js"; | import { RdDBaseActor } from "./base-actor.js"; | ||||||
| import { ITEM_TYPES } from "../item.js"; | import { ITEM_TYPES } from "../constants.js"; | ||||||
| import { RdDItemCompetence } from "../item-competence.js"; | import { StatusEffects, STATUSES } from "../settings/status-effects.js"; | ||||||
| import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; |  | ||||||
| import { RdDItemArme } from "../item-arme.js"; |  | ||||||
| import { StatusEffects } from "../settings/status-effects.js"; |  | ||||||
| import { Targets } from "../targets.js"; | import { Targets } from "../targets.js"; | ||||||
| import { RdDConfirm } from "../rdd-confirm.js"; | import { RdDConfirm } from "../rdd-confirm.js"; | ||||||
| import { RdDCarac } from "../rdd-carac.js"; | import { RdDCarac } from "../rdd-carac.js"; | ||||||
|  | import { RdDRollResult } from "../rdd-roll-result.js"; | ||||||
|  |  | ||||||
|  | import { RdDItemCompetence } from "../item-competence.js"; | ||||||
|  | import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; | ||||||
|  | import { RdDItemArme } from "../item/arme.js"; | ||||||
|  |  | ||||||
| import { ChatUtility } from "../chat-utility.js"; | import { ChatUtility } from "../chat-utility.js"; | ||||||
| import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js"; | import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js"; | ||||||
| @@ -22,6 +24,7 @@ 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, POSSESSION_SANS_DRACONIC } from "../item/base-items.js"; | import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, POSSESSION_SANS_DRACONIC } from "../item/base-items.js"; | ||||||
|  | import { RollDataAjustements } from "../rolldata-ajustements.js"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Classe de base pour les acteurs disposant de rêve (donc, pas des objets) |  * Classe de base pour les acteurs disposant de rêve (donc, pas des objets) | ||||||
| @@ -37,6 +40,15 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max) |     this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   getCarac() { | ||||||
|  |     return foundry.utils.mergeObject(this.system.carac, | ||||||
|  |       { | ||||||
|  |         'reve-actuel': this.getCaracReveActuel(), | ||||||
|  |         'chance-actuelle': this.getCaracChanceActuelle() | ||||||
|  |       }, | ||||||
|  |       { inplace: false }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|   getCaracChanceActuelle() { |   getCaracChanceActuelle() { | ||||||
|     return { |     return { | ||||||
|       label: 'Chance actuelle', |       label: 'Chance actuelle', | ||||||
| @@ -53,7 +65,6 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   getTaille() { return Misc.toInt(this.system.carac.taille?.value) } |   getTaille() { return Misc.toInt(this.system.carac.taille?.value) } | ||||||
|   getConstitution() { return this.getReve() } |   getConstitution() { return this.getReve() } | ||||||
|   getForce() { return this.getReve() } |   getForce() { return this.getReve() } | ||||||
| @@ -69,6 +80,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|   getBonusDegat() { return RdDCarac.getCaracDerivee(this.getEncombrementMax()).plusdom } |   getBonusDegat() { return RdDCarac.getCaracDerivee(this.getEncombrementMax()).plusdom } | ||||||
|  |  | ||||||
|   getMoralTotal() { return 0 } |   getMoralTotal() { return 0 } | ||||||
|  |   listeAmoureux() {return []} | ||||||
|   getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) } |   getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) } | ||||||
|   getSConst() { return 0 } |   getSConst() { return 0 } | ||||||
|  |  | ||||||
| @@ -98,10 +110,11 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     } |     } | ||||||
|     return this.system.carac[competence.system.defaut_carac].value; |     return this.system.carac[competence.system.defaut_carac].value; | ||||||
|   } |   } | ||||||
|   listActionsCombat() { |  | ||||||
|  |   listActions({ isAttaque = false, isEquipe = false }) { | ||||||
|     return this.itemTypes[ITEM_TYPES.competencecreature] |     return this.itemTypes[ITEM_TYPES.competencecreature] | ||||||
|       .filter(it => RdDItemCompetenceCreature.isAttaque(it)) |       .filter(it => RdDItemCompetenceCreature.isAttaque(it)) | ||||||
|       .map(it => RdDItemCompetenceCreature.armeCreature(it)) |       .map(it => RdDItemCompetenceCreature.attaqueCreature(it)) | ||||||
|       .filter(it => it != undefined); |       .filter(it => it != undefined); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -154,11 +167,16 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     if (idOrName instanceof Item) { |     if (idOrName instanceof Item) { | ||||||
|       return idOrName.isCompetence() ? idOrName : undefined |       return idOrName.isCompetence() ? idOrName : undefined | ||||||
|     } |     } | ||||||
|     return RdDItemCompetence.findCompetence(this.items, idOrName, options) |     return RdDItemCompetence.findCompetence( | ||||||
|  |       this.items.filter(it => [ITEM_TYPES.competence, ITEM_TYPES.competencecreature].includes(it.type)), | ||||||
|  |       idOrName, options) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getCompetences(name, options = { onMessage: message => { } }) { |   getCompetences(name = undefined, options = { onMessage: message => { } }) { | ||||||
|     return RdDItemCompetence.findCompetences(this.items, name, options) |     if (name == undefined) { | ||||||
|  |       return this.itemTypes[ITEM_TYPES.competence] | ||||||
|  |     } | ||||||
|  |     return RdDItemCompetence.findCompetences(this.itemTypes[ITEM_TYPES.competence], name, options) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getCompetenceCorpsACorps(options = { onMessage: message => { } }) { |   getCompetenceCorpsACorps(options = { onMessage: message => { } }) { | ||||||
| @@ -208,27 +226,24 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     return this.getEmbeddedCollection("ActiveEffect").filter(filter); |     return this.getEmbeddedCollection("ActiveEffect").filter(filter); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getEffect(effectId) { |   getEffectByStatus(statusId) { | ||||||
|     return this.getEmbeddedCollection("ActiveEffect").find(it => it.statuses?.has(effectId)); |     return this.getEffects().find(it => it.statuses.has(statusId)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async setEffect(effectId, status) { |   async setEffect(statusId, status) { | ||||||
|     if (this.isEffectAllowed(effectId)) { |     if (this.isEffectAllowed(statusId)) { | ||||||
|       const effect = this.getEffect(effectId); |       const effect = this.getEffectByStatus(statusId); | ||||||
|       if (!status && effect) { |       if (!status && effect) { | ||||||
|         await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id]); |         await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id]); | ||||||
|       } |       } | ||||||
|       if (status && !effect) { |       if (status && !effect) { | ||||||
|         await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.prepareActiveEffect(effectId)]); |         await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.prepareActiveEffect(statusId)]); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async removeEffect(id) { |   async removeEffect(id) { | ||||||
|     const effect = this.getEmbeddedCollection("ActiveEffect").find(it => it.id == id); |     this.removeEffects(it => it.id == id) | ||||||
|     if (effect) { |  | ||||||
|       await this.deleteEmbeddedDocuments('ActiveEffect', [id]); |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async removeEffects(filter = e => true) { |   async removeEffects(filter = e => true) { | ||||||
| @@ -239,17 +254,16 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|  |   isDemiReve() { | ||||||
|  |     return this.getEffectByStatus(STATUSES.StatusDemiReve) != undefined | ||||||
|  |   } | ||||||
|  |  | ||||||
|   getSurprise(isCombat = undefined) { |   getSurprise(isCombat = undefined) { | ||||||
|     let niveauSurprise = this.getEffects() |     return StatusEffects.typeSurprise( | ||||||
|       .map(effect => StatusEffects.valeurSurprise(effect, isCombat)) |       this.getEffects() | ||||||
|       .reduce(Misc.sum(), 0); |         .map(it => StatusEffects.niveauSurprise(it, isCombat)) | ||||||
|     if (niveauSurprise > 1) { |         .reduce(Misc.sum(), 0) | ||||||
|       return 'totale'; |     ) | ||||||
|     } |  | ||||||
|     if (niveauSurprise == 1) { |  | ||||||
|       return 'demi'; |  | ||||||
|     } |  | ||||||
|     return ''; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -259,32 +273,82 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async openRollDialog({ name, label, template, rollData, callbackAction }) { |   async openRollDialog({ name, label, template, rollData, callbacks }) { | ||||||
|     const dialog = await RdDRoll.create(this, rollData, |     const dialog = await RdDRoll.create(this, rollData, | ||||||
|       { html: template, close: async html => await this._onCloseRollDialog(html) }, |       { html: template, close: async html => await this._onCloseRollDialog(html) }, | ||||||
|       { |       { name: name, label: label, callbacks: [this.createCallbackExperience(), this.createCallbackAppelAuMoral()].concat(callbacks) }) | ||||||
|         name: name, |     dialog.render(true) | ||||||
|         label: label, |  | ||||||
|         callbacks: [ |  | ||||||
|           this.createCallbackExperience(), |  | ||||||
|           this.createCallbackAppelAuMoral(), |  | ||||||
|           { action: callbackAction } |  | ||||||
|         ] |  | ||||||
|       }); |  | ||||||
|     dialog.render(true); |  | ||||||
|     return dialog |     return dialog | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   createEmptyCallback() { |  | ||||||
|     return { |   /* -------------------------------------------- */ | ||||||
|       condition: r => false, |   createCallbackExperience() { | ||||||
|       action: r => { } |     return { action: r => this.appliquerAjoutExperience(r) } | ||||||
|     }; |  | ||||||
|   } |   } | ||||||
|   createCallbackExperience() { return this.createEmptyCallback(); } |  | ||||||
|   createCallbackAppelAuMoral() { return this.createEmptyCallback(); } |   /* -------------------------------------------- */ | ||||||
|  |   createCallbackAppelAuMoral() { | ||||||
|  |     /* Si l'appel au moral est utilisé, on l'affiche dans le chat et on diminue éventuellement le moral */ | ||||||
|  |     return { action: r => this.appliquerAppelMoral(r) } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async appliquerAjoutExperience(rollData, hideChatMessage = 'show') { } | ||||||
|  |   async appliquerAppelMoral(rollData) { } | ||||||
|  |  | ||||||
|   async _onCloseRollDialog(html) { } |   async _onCloseRollDialog(html) { } | ||||||
|  |  | ||||||
|  |   async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { | ||||||
|  |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|  |     const competence = this.getCompetence(compName); | ||||||
|  |     await this.openRollDialog({ | ||||||
|  |       name: 'jet-competence', | ||||||
|  |       label: competence ? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`, | ||||||
|  |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|  |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|  |         carac: this.system.carac, | ||||||
|  |         selectedCarac: this.getCaracByName(caracName), | ||||||
|  |         selectedCaracName: caracName, | ||||||
|  |         diffLibre: diff, | ||||||
|  |         competence: competence, | ||||||
|  |         show: { title: options?.title ?? '' } | ||||||
|  |       }, | ||||||
|  |       callbacks: [async r => this.$onRollCompetence(r, options)] | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |   /** | ||||||
|  |    * Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue | ||||||
|  |    * @param {*} caracName code ou label de la caractéristique. On peut utiliser 'intel' pour Intellect. | ||||||
|  |    * @param {*} compName nom de compétence ou nom abrégé. | ||||||
|  |    * @param {*} diff difficulté (0 si undefined) | ||||||
|  |    * @param {*} options | ||||||
|  |    * @returns le jet effectué | ||||||
|  |    */ | ||||||
|  |   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 ?? 0, | ||||||
|  |       show: { title: options?.title ?? '' } | ||||||
|  |     } | ||||||
|  |     RollDataAjustements.calcul(rollData, this); | ||||||
|  |     await RdDResolutionTable.rollData(rollData); | ||||||
|  |     this.gererExperience(rollData); | ||||||
|  |     await RdDResolutionTable.displayRollData(rollData, this) | ||||||
|  |     return rollData.rolled; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   gererExperience(rollData) { } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async roll() { |   async roll() { | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
| @@ -293,61 +357,59 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined) |     const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined) | ||||||
|  |  | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: `jet-${this.id}`, |       name: 'jet-quelconque', | ||||||
|       label: `Jet de ${this.getAlias()}`, |       label: 'Jet', | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|         carac: carac, |         carac: carac, | ||||||
|         selectedCarac: carac[selectedCaracName], |         selectedCarac: carac[selectedCaracName], | ||||||
|         selectedCaracName: selectedCaracName, |         selectedCaracName: selectedCaracName, | ||||||
|         competences: this.itemTypes['competence'] |         competences: this.itemTypes['competence'] | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this.$onRollCaracResult(r) |       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||||
|     }); |     }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getCarac() { |  | ||||||
|     // TODO: le niveau d'une entité de cauchemar devrait être exclu... |  | ||||||
|     return foundry.utils.mergeObject(this.system.carac, |  | ||||||
|       { |  | ||||||
|         'reve-actuel': this.getCaracReveActuel(), |  | ||||||
|         'chance-actuelle': this.getCaracChanceActuelle() |  | ||||||
|       }, |  | ||||||
|       { inplace: false }) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollCarac(caracName, jetResistance = undefined) { |   async rollCarac(caracName, options = {}) { | ||||||
|     if (Grammar.equalsInsensitive(caracName, 'taille')) { |     if (Grammar.equalsInsensitive(caracName, 'taille')) { | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|  |     foundry.utils.mergeObject(options, { resistance: false, diff: 0 }, { overwrite: false }) | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|     let selectedCarac = this.getCaracByName(caracName) |     let selectedCarac = this.getCaracByName(caracName) | ||||||
|     console.log("selectedCarac", selectedCarac) |     const title = 'Jet ' + Grammar.apostrophe('de', selectedCarac.label); | ||||||
|  |     const jetResistance = options.resistance ? caracName : undefined; | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-' + caracName, |       name: 'jet-' + caracName, | ||||||
|       label: 'Jet ' + Grammar.apostrophe('de', selectedCarac.label), |       label: title, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|         selectedCarac: selectedCarac, |         selectedCarac: selectedCarac, | ||||||
|         competences: this.itemTypes['competence'], |         competences: this.itemTypes['competence'], | ||||||
|         jetResistance: jetResistance ? caracName : undefined |         diffLibre: options.diff ?? 0, | ||||||
|  |         jetResistance: jetResistance | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this.$onRollCaracResult(r) |       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async $onRollCaracResult(rollData) { |   async $onRollCaracResult(rollData) { | ||||||
|     // Final chat message |     // Final chat message | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-general.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-general.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) { |   async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) { | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|     const competence = this.getCompetence(idOrName); |     const competence = this.getCompetence(idOrName); | ||||||
|     let rollData = { carac: this.system.carac, competence: competence, arme: options.arme } |     let rollData = { | ||||||
|  |       carac: this.system.carac, | ||||||
|  |       competence: competence, | ||||||
|  |       arme: options.arme | ||||||
|  |     } | ||||||
|     if (competence.type == ITEM_TYPES.competencecreature) { |     if (competence.type == ITEM_TYPES.competencecreature) { | ||||||
|       const token = RdDUtility.getSelectedToken(this) |       const token = RdDUtility.getSelectedToken(this) | ||||||
|       const arme = RdDItemCompetenceCreature.armeCreature(competence) |       const arme = RdDItemCompetenceCreature.armeCreature(competence) | ||||||
| @@ -365,18 +427,18 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       // Transformer la competence de créature |       // Transformer la competence de créature | ||||||
|       RdDItemCompetenceCreature.setRollDataCreature(rollData) |       RdDItemCompetenceCreature.setRollDataCreature(rollData) | ||||||
|     } |     } | ||||||
|  |     const dialogLabel = 'Jet ' + Grammar.apostrophe('de', competence.name); | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-competence', |       name: 'jet-competence', | ||||||
|       label: 'Jet ' + Grammar.apostrophe('de', competence.name), |       label: dialogLabel, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|       rollData: rollData, |       rollData: rollData, | ||||||
|       callbackAction: r => this.$onRollCompetence(r, options) |       callbacks: [{ action: r => this.$onRollCompetence(r, options) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async $onRollCompetence(rollData, options) { |   async $onRollCompetence(rollData, options) { | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html') |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-competence.hbs') | ||||||
|     if (options?.onRollAutomate) { |     if (options?.onRollAutomate) { | ||||||
|       options.onRollAutomate(rollData); |       options.onRollAutomate(rollData); | ||||||
|     } |     } | ||||||
| @@ -387,9 +449,9 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|    * @param {*} categorieArme catégorie d'attaque à utiliser: competence (== melee), lancer, tir; naturelle, possession |    * @param {*} categorieArme catégorie d'attaque à utiliser: competence (== melee), lancer, tir; naturelle, possession | ||||||
|    * @returns  |    * @returns  | ||||||
|    */ |    */ | ||||||
|   rollArme(arme, categorieArme, token) { |   rollArme(arme, categorieArme = 'competence', token = undefined) { | ||||||
|     token = token ?? RdDUtility.getSelectedToken(this) |     token = token ?? RdDUtility.getSelectedToken(this) | ||||||
|     const compToUse = this.$getCompetenceArme(arme, categorieArme) |     const compToUse = RdDItemArme.getCompetenceArme(arme, categorieArme) | ||||||
|     if (!RdDItemArme.isUtilisable(arme)) { |     if (!RdDItemArme.isUtilisable(arme)) { | ||||||
|       ui.notifications.warn(`Arme inutilisable: ${arme.name} a une résistance de 0 ou moins`) |       ui.notifications.warn(`Arme inutilisable: ${arme.name} a une résistance de 0 ou moins`) | ||||||
|       return |       return | ||||||
| @@ -423,10 +485,6 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   $getCompetenceArme(arme, competenceName) { |  | ||||||
|     return RdDItemArme.getCompetenceArme(arme, competenceName) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   verifierForceMin(item) { } |   verifierForceMin(item) { } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -476,7 +534,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     await ChatUtility.createChatWithRollMode( |     await ChatUtility.createChatWithRollMode( | ||||||
|       { |       { | ||||||
|         roll: encaissement.roll, |         roll: encaissement.roll, | ||||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) |         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||||
|       }, |       }, | ||||||
|       this |       this | ||||||
|     ) |     ) | ||||||
| @@ -486,7 +544,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       encaissement.isGM = true |       encaissement.isGM = true | ||||||
|       ChatMessage.create({ |       ChatMessage.create({ | ||||||
|         whisper: ChatUtility.getGMs(), |         whisper: ChatUtility.getGMs(), | ||||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) |         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -499,7 +557,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       || entite.isEntiteAccordee(this)) { |       || entite.isEntiteAccordee(this)) { | ||||||
|       return true; |       return true; | ||||||
|     } |     } | ||||||
|     const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value)); |     const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau())); | ||||||
|     const rollData = { |     const rollData = { | ||||||
|       alias: this.getAlias(), |       alias: this.getAlias(), | ||||||
|       rolled: rolled, |       rolled: rolled, | ||||||
| @@ -511,10 +569,8 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       await entite.setEntiteReveAccordee(this); |       await entite.setEntiteReveAccordee(this); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.hbs'); | ||||||
|     if (rolled.isPart) { |     await this.appliquerAjoutExperience(rollData, true); | ||||||
|       await this.appliquerAjoutExperience(rollData, true); |  | ||||||
|     } |  | ||||||
|     return rolled.isSuccess; |     return rolled.isSuccess; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,20 +17,20 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet { | |||||||
|     // 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; | ||||||
|  |  | ||||||
|     this.html.find('.creer-blessure-legere').click(async event => RdDItemBlessure.createBlessure(this.actor, 2)); |     this.html.find('.creer-blessure-legere').click(async event => await RdDItemBlessure.createBlessure(this.actor, 2)); | ||||||
|     this.html.find('.creer-blessure-grave').click(async event => RdDItemBlessure.createBlessure(this.actor, 4)); |     this.html.find('.creer-blessure-grave').click(async event => await RdDItemBlessure.createBlessure(this.actor, 4)); | ||||||
|     this.html.find('.creer-blessure-critique').click(async event => RdDItemBlessure.createBlessure(this.actor, 6)); |     this.html.find('.creer-blessure-critique').click(async event => await RdDItemBlessure.createBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 0)); |     this.html.find('.subir-blessure-contusion').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 0)); | ||||||
|     this.html.find('.subir-blessure-legere').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2)); |     this.html.find('.subir-blessure-legere').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 2)); | ||||||
|     this.html.find('.subir-blessure-grave').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 4)); |     this.html.find('.subir-blessure-grave').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 4)); | ||||||
|     this.html.find('.subir-blessure-critique').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 6)); |     this.html.find('.subir-blessure-critique').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.jet-vie').click(async event => this.actor.jetDeVie()) |     this.html.find('.jet-vie').click(async event => await this.actor.jetDeVie()) | ||||||
|     this.html.find('.jet-endurance').click(async event => await this.jetEndurance()) |     this.html.find('.jet-endurance').click(async event => await this.jetEndurance()) | ||||||
|  |  | ||||||
|     this.html.find('.vie-plus').click(async event => this.actor.santeIncDec("vie", 1)) |     this.html.find('.vie-plus').click(async event => await this.actor.santeIncDec("vie", 1)) | ||||||
|     this.html.find('.vie-moins').click(async event => this.actor.santeIncDec("vie", -1)) |     this.html.find('.vie-moins').click(async event => await this.actor.santeIncDec("vie", -1)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async jetEndurance() { |   async jetEndurance() { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import { RdDUtility } from "../rdd-utility.js"; | import { RdDUtility } from "../rdd-utility.js"; | ||||||
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | ||||||
| import { STATUSES } from "../settings/status-effects.js"; | import { STATUSES } from "../settings/status-effects.js"; | ||||||
| import { ITEM_TYPES } from "../item.js"; | import { ITEM_TYPES } from "../constants.js"; | ||||||
| import { RdDBaseActorReve } from "./base-actor-reve.js"; | import { RdDBaseActorReve } from "./base-actor-reve.js"; | ||||||
| import { RdDDice } from "../rdd-dice.js"; | import { RdDDice } from "../rdd-dice.js"; | ||||||
| import { RdDItemBlessure } from "../item/blessure.js"; | import { RdDItemBlessure } from "../item/blessure.js"; | ||||||
| @@ -39,7 +39,12 @@ export class RdDBaseActorSang extends RdDBaseActorReve { | |||||||
|     return 0; |     return 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getFatigueRestante() { return this.getFatigueMax() - this.getFatigueActuelle() } |   isCumulFatigueCauseSommeil(cumulFatigue){ | ||||||
|  |     return ReglesOptionnelles.isUsing("appliquer-fatigue") | ||||||
|  |     ? (this.getFatigueRestante() <= cumulFatigue) | ||||||
|  |     : (this.getEnduranceActuelle() <= cumulFatigue) | ||||||
|  |   } | ||||||
|  |   getFatigueRestante() {return this.getFatigueMax() - this.getFatigueActuelle() } | ||||||
|   getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value } |   getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value } | ||||||
|  |  | ||||||
|   malusFatigue() { |   malusFatigue() { | ||||||
| @@ -287,7 +292,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   isSonne() { |   isSonne() { | ||||||
|     return this.getEffect(STATUSES.StatusStunned) |     return this.getEffectByStatus(STATUSES.StatusStunned) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   isEffectAllowed(effectId) { return true } |   isEffectAllowed(effectId) { return true } | ||||||
|   | |||||||
| @@ -3,19 +3,23 @@ import { Misc } from "../misc.js"; | |||||||
| import { DialogSplitItem } from "../dialog-split-item.js"; | import { DialogSplitItem } from "../dialog-split-item.js"; | ||||||
| import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | ||||||
| import { Monnaie } from "../item-monnaie.js"; | import { Monnaie } from "../item-monnaie.js"; | ||||||
| import { RdDItem, ITEM_TYPES } from "../item.js"; | import { ITEM_TYPES } from "../constants.js"; | ||||||
|  | import { RdDItem } from "../item.js"; | ||||||
| import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; | import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; | ||||||
|  | import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"; | ||||||
|  | import { ItemAction } from "../item/item-actions.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| /** | /** | ||||||
|  * Extend the basic ActorSheet with some very simple modifications |  * Extend the basic ActorSheet with some very simple modifications | ||||||
|  * @extends {ActorSheet} |  * @extends {ActorSheet} | ||||||
|  */ |  */ | ||||||
| export class RdDBaseActorSheet extends ActorSheet { | export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet { | ||||||
|  |   static _warnedAppV1 = true | ||||||
|  |  | ||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(ActorSheet.defaultOptions, { |     return foundry.utils.mergeObject(foundry.appv1.sheets.ActorSheet.defaultOptions, { | ||||||
|       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 }], | ||||||
| @@ -25,7 +29,7 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async getData() { |   async getData() { | ||||||
|     Monnaie.validerMonnaies(this.actor.itemTypes['monnaie']); |     Monnaie.validerMonnaies(this.actor) | ||||||
|  |  | ||||||
|     this.actor.computeEtatGeneral(); |     this.actor.computeEtatGeneral(); | ||||||
|     let formData = { |     let formData = { | ||||||
| @@ -35,13 +39,13 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|       img: this.actor.img, |       img: this.actor.img, | ||||||
|       name: this.actor.name, |       name: this.actor.name, | ||||||
|       system: this.actor.system, |       system: this.actor.system, | ||||||
|       description: await TextEditor.enrichHTML(this.actor.system.description, { async: true }), |       description: await RdDTextEditor.enrichHTML(this.actor.system.description, this.actor), | ||||||
|       notesmj: await TextEditor.enrichHTML(this.actor.system.notesmj, { async: true }), |       notesmj: await RdDTextEditor.enrichHTML(this.actor.system.notesmj, this.actor), | ||||||
|       options: RdDSheetUtility.mergeDocumentRights(this.options, this.actor, this.isEditable), |       options: RdDSheetUtility.mergeDocumentRights(this.options, this.actor, this.isEditable), | ||||||
|       effects: this.actor.effects |       effects: this.actor.effects | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     RdDBaseActorSheet.filterItemsPerTypeForSheet(formData, this.actor.itemTypes); |     RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes); | ||||||
|     formData.calc = { |     formData.calc = { | ||||||
|       fortune: Monnaie.toSolsDeniers(this.actor.getFortune()), |       fortune: Monnaie.toSolsDeniers(this.actor.getFortune()), | ||||||
|       prixTotalEquipement: this.actor.computePrixTotalEquipement(), |       prixTotalEquipement: this.actor.computePrixTotalEquipement(), | ||||||
| @@ -53,6 +57,7 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|     formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); |     formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); | ||||||
|     formData.competences.filter(it => it.type == ITEM_TYPES.competencecreature) |     formData.competences.filter(it => it.type == ITEM_TYPES.competencecreature) | ||||||
|       .forEach(it => it.isdommages = RdDItemCompetenceCreature.isDommages(it)) |       .forEach(it => it.isdommages = RdDItemCompetenceCreature.isDommages(it)) | ||||||
|  |  | ||||||
|     return formData; |     return formData; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -76,122 +81,49 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |  | ||||||
|   static filterItemsPerTypeForSheet(formData, itemTypes) { |  | ||||||
|     formData.blessures = Misc.arrayOrEmpty(itemTypes['blessure']); |  | ||||||
|     formData.recettescuisine = Misc.arrayOrEmpty(itemTypes['recettecuisine']); |  | ||||||
|     formData.recettesAlchimiques = Misc.arrayOrEmpty(itemTypes['recettealchimique']); |  | ||||||
|     formData.maladies = Misc.arrayOrEmpty(itemTypes['maladie']); |  | ||||||
|     formData.poisons = Misc.arrayOrEmpty(itemTypes['poison']); |  | ||||||
|     formData.possessions = Misc.arrayOrEmpty(itemTypes['possession']); |  | ||||||
|     formData.maladiesPoisons = formData.maladies.concat(formData.poisons); |  | ||||||
|     formData.competences = (itemTypes['competence'] ?? []).concat(itemTypes['competencecreature'] ?? []); |  | ||||||
|     formData.sortsReserve = Misc.arrayOrEmpty(itemTypes['sortreserve']); |  | ||||||
|  |  | ||||||
|     formData.sorts = Misc.arrayOrEmpty(itemTypes['sort']); |  | ||||||
|     formData.rencontres = Misc.arrayOrEmpty(itemTypes['rencontre']); |  | ||||||
|     formData.casestmr = Misc.arrayOrEmpty(itemTypes['casetmr']); |  | ||||||
|     formData.signesdraconiques = Misc.arrayOrEmpty(itemTypes['signedraconique']); |  | ||||||
|     formData.queues = Misc.arrayOrEmpty(itemTypes['queue']); |  | ||||||
|     formData.souffles = Misc.arrayOrEmpty(itemTypes['souffle']); |  | ||||||
|     formData.ombres = Misc.arrayOrEmpty(itemTypes['ombre']); |  | ||||||
|     formData.tetes = Misc.arrayOrEmpty(itemTypes['tete']); |  | ||||||
|     formData.taches = Misc.arrayOrEmpty(itemTypes['tache']); |  | ||||||
|     formData.meditations = Misc.arrayOrEmpty(itemTypes['meditation']); |  | ||||||
|     formData.chants = Misc.arrayOrEmpty(itemTypes['chant']); |  | ||||||
|     formData.danses = Misc.arrayOrEmpty(itemTypes['danse']); |  | ||||||
|     formData.musiques = Misc.arrayOrEmpty(itemTypes['musique']); |  | ||||||
|     formData.oeuvres = Misc.arrayOrEmpty(itemTypes['oeuvre']); |  | ||||||
|     formData.jeux = Misc.arrayOrEmpty(itemTypes['jeu']); |  | ||||||
|  |  | ||||||
|     formData.services = Misc.arrayOrEmpty(itemTypes['service']); |  | ||||||
|     formData.conteneurs = Misc.arrayOrEmpty(itemTypes['conteneur']); |  | ||||||
|     formData.materiel = Misc.arrayOrEmpty(itemTypes['objet']); |  | ||||||
|     formData.armes = Misc.arrayOrEmpty(itemTypes['arme']); |  | ||||||
|     formData.armures = Misc.arrayOrEmpty(itemTypes['armure']); |  | ||||||
|     formData.munitions = Misc.arrayOrEmpty(itemTypes['munition']); |  | ||||||
|     formData.livres = Misc.arrayOrEmpty(itemTypes['livre']); |  | ||||||
|     formData.potions = Misc.arrayOrEmpty(itemTypes['potion']); |  | ||||||
|     formData.plantes = Misc.arrayOrEmpty(itemTypes['plante']); |  | ||||||
|     formData.ingredients = Misc.arrayOrEmpty(itemTypes['ingredient']); |  | ||||||
|     formData.faunes = Misc.arrayOrEmpty(itemTypes['faune']); |  | ||||||
|     formData.herbes = Misc.arrayOrEmpty(itemTypes['herbe']); |  | ||||||
|     formData.nourritureboissons = Misc.arrayOrEmpty(itemTypes['nourritureboisson']); |  | ||||||
|     formData.gemmes = Misc.arrayOrEmpty(itemTypes['gemme']); |  | ||||||
|     formData.monnaies = Misc.arrayOrEmpty(itemTypes['monnaie']).sort(Monnaie.triValeurEntiere()); |  | ||||||
|     formData.objets = Misc.arrayOrEmpty(itemTypes['objet']) |  | ||||||
|  |  | ||||||
|     formData.inventaires = RdDItem.getItemTypesInventaire('all') |  | ||||||
|       .map(t => Misc.arrayOrEmpty(itemTypes[t])) |  | ||||||
|       .reduce((a, b) => a.concat(b), []) |  | ||||||
|       .sort(Misc.ascending(it => it.name)); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */  /** @override */ |   /* -------------------------------------------- */  /** @override */ | ||||||
|   activateListeners(html) { |   activateListeners(html) { | ||||||
|     super.activateListeners(html); |     super.activateListeners(html); | ||||||
|     this.html = html; |     this.html = html; | ||||||
|  |  | ||||||
|  |     this.html.find('.actionItem').click(async event => await ItemAction.onActionItem(event, this.actor, this.options)) | ||||||
|  |     this.html.find('.item-edit').click(async event => await this.itemActionEdit(event)) | ||||||
|     this.html.find('.conteneur-name a').click(async event => { |     this.html.find('.conteneur-name a').click(async event => { | ||||||
|       RdDUtility.toggleAfficheContenu(this.getItemId(event)); |       RdDUtility.toggleAfficheContenu(this.getItemId(event)) | ||||||
|       this.render(true); |       this.render(true) | ||||||
|     }); |     }) | ||||||
|     this.html.find('.actor-montrer').click(async event => this.actor.postActorToChat()); |  | ||||||
|     this.html.find('.item-edit').click(async event => this.getItem(event)?.sheet.render(true)) |     this.html.find('.actor-montrer').click(async event => await this.actor.postActorToChat()); | ||||||
|     this.html.find('.item-montrer').click(async event => this.getItem(event)?.postItemToChat()); |  | ||||||
|  |  | ||||||
|     this.html.find('.recherche') |     this.html.find('.recherche') | ||||||
|       .each((index, field) => { |       .each((index, field) => { | ||||||
|         this._rechercheSelectArea(field); |         this._rechercheSelectArea(field); | ||||||
|       }) |       }) | ||||||
|       .keyup(async event => this._rechercherKeyup(event)) |       .keyup(async event => this._rechercherKeyup(event)) | ||||||
|       .change(async event => this._rechercherKeyup(event)); |       .change(async event => this._rechercherKeyup(event)) | ||||||
|     this.html.find('.recherche').prop("disabled", false); |  | ||||||
|  |     this.html.find('.recherche').prop("disabled", false) | ||||||
|  |  | ||||||
|     // 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; | ||||||
|  |  | ||||||
|     this.html.find('.item-action').click(async event => { |     this.html.find('.item-equip-armure').click(async event => await this.actor.equiperObjet(this.getItem(event))) | ||||||
|       const item = RdDSheetUtility.getItem(event, this.actor); |     this.html.find('.item-delete').click(async event => await RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor)); | ||||||
|       item?.actionPrincipale(this.actor, async () => this.render()) |     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('.creer-un-objet').click(async event => await this.selectObjetTypeToCreate()) | ||||||
|     this.html.find('.item-split').click(async event => { |     this.html.find('.nettoyer-conteneurs').click(async event => await this.actor.nettoyerConteneurs()) | ||||||
|       const item = this.getItem(event); |  | ||||||
|       RdDSheetUtility.splitItem(item, this.actor); |  | ||||||
|     }); |  | ||||||
|     this.html.find('.item-quantite-plus').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); |  | ||||||
|     this.html.find('.item-quantite-moins').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); |  | ||||||
|     this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this, this.getItem(event))); |  | ||||||
|     this.html.find('.item-vendre').click(async event => this.vendre(this.getItem(event))); |  | ||||||
|  |  | ||||||
|     this.html.find('.creer-un-objet').click(async event => { |  | ||||||
|       this.selectObjetTypeToCreate(); |  | ||||||
|     }); |  | ||||||
|     this.html.find('.nettoyer-conteneurs').click(async event => { |  | ||||||
|       this.actor.nettoyerConteneurs(); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     this.html.find('.vue-detaillee').click(async event => { |     this.html.find('.vue-detaillee').click(async event => { | ||||||
|       this.options.vueDetaillee = !this.options.vueDetaillee; |       this.options.vueDetaillee = !this.options.vueDetaillee | ||||||
|       this.render(true); |       this.render(true) | ||||||
|     }); |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|     if (this.options.vueDetaillee) { |   itemActionEdit(event) { | ||||||
|       // On carac change |     const item = this.getItem(event); | ||||||
|       this.html.find('.carac-value').change(async event => { |     return item?.sheet.render(true); | ||||||
|         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", ""); |  | ||||||
|         this.actor.updateCarac(caracName, parseInt(event.target.value)); |  | ||||||
|       }); |  | ||||||
|       // On competence change |  | ||||||
|       this.html.find('.competence-value').change(async event => { |  | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |  | ||||||
|         //console.log("Competence changed :", compName); |  | ||||||
|         this.actor.updateCompetence(compName, parseInt(event.target.value)); |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _rechercherKeyup(event) { |   _rechercherKeyup(event) { | ||||||
| @@ -260,7 +192,7 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   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))); | ||||||
|     let content = `<span class="competence-label">Selectionnez le type d'équipement</span><select class="item-type">`; |     let content = `<span class="generic-label">Selectionnez le type d'équipement</span><select class="item-type">`; | ||||||
|     for (let typeName of types) { |     for (let typeName of types) { | ||||||
|       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` |       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import { ChatUtility } from "../chat-utility.js"; | |||||||
| import { SYSTEM_SOCKET_ID } from "../constants.js"; | import { SYSTEM_SOCKET_ID } from "../constants.js"; | ||||||
| import { Grammar } from "../grammar.js"; | import { Grammar } from "../grammar.js"; | ||||||
| import { Monnaie } from "../item-monnaie.js"; | import { Monnaie } from "../item-monnaie.js"; | ||||||
| import { ITEM_TYPES } from "../item.js"; | import { ITEM_TYPES } from "../constants.js"; | ||||||
| import { Misc } from "../misc.js"; | import { Misc } from "../misc.js"; | ||||||
| import { RdDAudio } from "../rdd-audio.js"; | import { RdDAudio } from "../rdd-audio.js"; | ||||||
| import { RdDConfirm } from "../rdd-confirm.js"; | import { RdDConfirm } from "../rdd-confirm.js"; | ||||||
| @@ -21,12 +21,13 @@ export class RdDBaseActor extends Actor { | |||||||
|  |  | ||||||
|   static $findCaracByName(carac, name) { |   static $findCaracByName(carac, name) { | ||||||
|     const caracList = Object.entries(carac); |     const caracList = Object.entries(carac); | ||||||
|     let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' }); |     let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique', onMessage: m => { } }); | ||||||
|     if (!entry || entry.length == 0) { |     if (!entry || entry.length == 0) { | ||||||
|       entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' }); |       entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' }); | ||||||
|     } |     } | ||||||
|     return entry && entry.length > 0 ? carac[entry[0]] : undefined; |     return entry && entry.length > 0 ? carac[entry[0]] : undefined; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static getDefaultValue(actorType, path) { |   static getDefaultValue(actorType, path) { | ||||||
|     if (path.includes('.')) { |     if (path.includes('.')) { | ||||||
|       path = path.split('.') |       path = path.split('.') | ||||||
| @@ -81,7 +82,6 @@ export class RdDBaseActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   static getRealActor(actorId, tokenId) { |   static getRealActor(actorId, tokenId) { | ||||||
|     if (tokenId) { |     if (tokenId) { | ||||||
|       let token = canvas.tokens.get(tokenId) |       let token = canvas.tokens.get(tokenId) | ||||||
| @@ -161,8 +161,11 @@ export class RdDBaseActor extends Actor { | |||||||
|     return RdDBaseActor.$findCaracByName(carac, name); |     return RdDBaseActor.$findCaracByName(carac, name); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   mapCarac(caracCode) { return caracCode } | ||||||
|  |  | ||||||
|   getCaracByName(name) { |   getCaracByName(name) { | ||||||
|     switch (Grammar.toLowerCaseNoAccent(name)) { |     name = this.mapCarac(Grammar.toLowerCaseNoAccent(name)) | ||||||
|  |     switch (name) { | ||||||
|       case 'reve-actuel': case 'reve actuel': |       case 'reve-actuel': case 'reve actuel': | ||||||
|         return this.getCaracReveActuel(); |         return this.getCaracReveActuel(); | ||||||
|       case 'chance-actuelle': case 'chance-actuelle': |       case 'chance-actuelle': case 'chance-actuelle': | ||||||
| @@ -211,6 +214,7 @@ export class RdDBaseActor extends Actor { | |||||||
|   isCreatureEntite() { return this.isCreature() || this.isEntite() } |   isCreatureEntite() { return this.isCreature() || this.isEntite() } | ||||||
|   isCreature() { return false } |   isCreature() { return false } | ||||||
|   isEntite(typeentite = []) { return false } |   isEntite(typeentite = []) { return false } | ||||||
|  |   isHautRevant() { return false } | ||||||
|   isVehicule() { return false } |   isVehicule() { return false } | ||||||
|   isPersonnage() { return false } |   isPersonnage() { return false } | ||||||
|   getItem(id, type = undefined) { |   getItem(id, type = undefined) { | ||||||
| @@ -242,16 +246,19 @@ export class RdDBaseActor extends Actor { | |||||||
|   async onUpdateActor(update, options, actorId) { } |   async onUpdateActor(update, options, actorId) { } | ||||||
|   async onDeleteItem(item, options, id) { |   async onDeleteItem(item, options, id) { | ||||||
|     if (item.isInventaire()) { |     if (item.isInventaire()) { | ||||||
|       this._removeItemFromConteneur(item) |       await this._removeItemFromConteneur(item) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _removeItemFromConteneur(item) { |   async _removeItemFromConteneur(item) { | ||||||
|     this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) |     const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) | ||||||
|       .forEach(conteneur => { |       .map(conteneur => { | ||||||
|         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id); |         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id) | ||||||
|         conteneur.update({ 'system.contenu': nouveauContenu }); |         return { _id: conteneur.id, 'system.contenu': nouveauContenu } | ||||||
|       }); |       }) | ||||||
|  |     if (updates.length > 0) { | ||||||
|  |       await this.updateEmbeddedDocuments('Item', updates) | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async onTimeChanging(oldTimestamp, newTimestamp) { |   async onTimeChanging(oldTimestamp, newTimestamp) { | ||||||
| @@ -412,7 +419,7 @@ export class RdDBaseActor extends Actor { | |||||||
|       user: achat.userId, |       user: achat.userId, | ||||||
|       speaker: { alias: (acheteur ?? vendeur).getAlias() }, |       speaker: { alias: (acheteur ?? vendeur).getAlias() }, | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem) |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.hbs', chatAchatItem) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     if (!achat.vente.quantiteIllimite) { |     if (!achat.vente.quantiteIllimite) { | ||||||
| @@ -729,43 +736,42 @@ export class RdDBaseActor extends Actor { | |||||||
|       name: this.getAlias(), |       name: this.getAlias(), | ||||||
|       system: { description: this.system.description } |       system: { description: this.system.description } | ||||||
|     } |     } | ||||||
|     renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.html', chatData) |     foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData) | ||||||
|       .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride))); |       .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride))); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   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}`) | ||||||
|  |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   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 actionPrincipale(item, onActionItem = async () => { }) { |  | ||||||
|     switch (item.type) { |  | ||||||
|       case ITEM_TYPES.conteneur: return await item.sheet.render(true); |  | ||||||
|     } |  | ||||||
|     return undefined |  | ||||||
|   } |  | ||||||
|   async resetItemUse() { } |   async resetItemUse() { } | ||||||
|   async incDecItemUse(itemId, inc = 1) { } |   async incDecItemUse(itemId, shouldIncrease = true) { } | ||||||
|   getItemUse(itemId) { return 0; } |   getItemUse(itemId) { return 0; } | ||||||
|  |  | ||||||
|   async finDeRound(options = { terminer: false }) { } |   async finDeRound(options = { terminer: false }) { } | ||||||
|   isActorCombat() { return false } |   isActorCombat() { return false } | ||||||
|   getCaracInit(competence) { return 0 } |   getCaracInit(competence) { return 0 } | ||||||
|   listActionsCombat() { return [] } |  | ||||||
|  |   listAttaques() { | ||||||
|  |     return this.listActions({ isAttaque: true, isEquipe:false }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   listActions({ isAttaque = false, isEquipe=false }) { return [] } | ||||||
|  |  | ||||||
|   listActionsPossessions() { |   listActionsPossessions() { | ||||||
|     return this.itemTypes[ITEM_TYPES.possession] |     return this.itemTypes[ITEM_TYPES.possession] | ||||||
|       .map(p => { |       .map(p => { | ||||||
|         return { |         return { | ||||||
|           name: p.name, |           name: p.name, | ||||||
|           action: 'possession', |           action: 'possession', | ||||||
|           system: { |           possessionid: p.system.possessionid, | ||||||
|             competence: p.name, |  | ||||||
|             possessionid: p.system.possessionid, |  | ||||||
|           } |  | ||||||
|         } |         } | ||||||
|       }) |       }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -1,6 +1,4 @@ | |||||||
| import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js"; |  | ||||||
| import { RdDItem } from "../item.js"; | import { RdDItem } from "../item.js"; | ||||||
| import { RdDUtility } from "../rdd-utility.js"; |  | ||||||
| import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -12,7 +10,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(super.defaultOptions, { |     return foundry.utils.mergeObject(super.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.hbs", | ||||||
|       width: 600, height: 720, |       width: 600, height: 720, | ||||||
|       tabs: [] |       tabs: [] | ||||||
|     }, { inplace: false }) |     }, { inplace: false }) | ||||||
| @@ -44,12 +42,8 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | |||||||
|   activateListeners(html) { |   activateListeners(html) { | ||||||
|     super.activateListeners(html); |     super.activateListeners(html); | ||||||
|  |  | ||||||
|     this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event))); |  | ||||||
|  |  | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('a.item-quantite-moins').click(async event => await this.getItem(event)?.quantiteIncDec(-1, { supprimerSiZero: false })); |  | ||||||
|     this.html.find('a.item-quantite-plus').click(async event => await this.getItem(event)?.quantiteIncDec(1)); |  | ||||||
|     this.html.find('input.item-quantite').change(async event => { |     this.html.find('input.item-quantite').change(async event => { | ||||||
|       const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val())); |       const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val())); | ||||||
|       await this.getItem(event)?.update({ "system.quantite": newQuantite }); |       await this.getItem(event)?.update({ "system.quantite": newQuantite }); | ||||||
| @@ -63,28 +57,4 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | |||||||
|   getTypesInventaire() { |   getTypesInventaire() { | ||||||
|     return RdDItem.getItemTypesInventaire('all'); |     return RdDItem.getItemTypesInventaire('all'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   async vente(item) { |  | ||||||
|     const acheteur = RdDUtility.getSelectedActor(); |  | ||||||
|     if (!acheteur) { |  | ||||||
|       ui.notifications.warn(`Pas d'acheteur sélectionné`); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|     const disponible = this.actor.getQuantiteDisponible(item) |  | ||||||
|     if (disponible == 0) { |  | ||||||
|       ui.notifications.warn(`${this.getAlias()} n'a plus de ${item.name} en vente`); |  | ||||||
|       return; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     await DialogItemAchat.onAcheter({ |  | ||||||
|       item, |  | ||||||
|       vendeur: this.actor, |  | ||||||
|       acheteur, |  | ||||||
|       quantiteIllimite: disponible == undefined, |  | ||||||
|       nbLots: disponible ?? 1, |  | ||||||
|       tailleLot: 1, |  | ||||||
|       prixLot: item.calculerPrixCommercant() |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||