Compare commits
	
		
			50 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | 
| @@ -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 |  | ||||||
| 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 | 
| 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 | 
| 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: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 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: 4.9 KiB After Width: | Height: | Size: 4.9 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 | 
							
								
								
									
										77
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,51 @@ | |||||||
| # 12.0 | # 13.0 | ||||||
|  |  | ||||||
| ## 12.0.44 - Les errements d'Astrobazzarh, encore | ## 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.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 | - 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 | - Renommage du Bouton pour révéler/masquer le demi-rêve | ||||||
| @@ -19,22 +64,18 @@ | |||||||
| - Correction des jets `@roll[vue/-2]` qui tentaient de chercher une compétence -2 (à cause des armes à 1/2 mains) | - 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 | ## 12.0.41 - La loupe d'Astrobazzarh | ||||||
|  |  | ||||||
| - On peut de nouveau effectuer des tirages cachés | - On peut de nouveau effectuer des tirages cachés | ||||||
| - Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence | - Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence | ||||||
|  |  | ||||||
| ## 12.0.40 - Les mains d'Astrobazzarh | ## 12.0.40 - Les mains d'Astrobazzarh | ||||||
|  |  | ||||||
| - correction des attaques particulières en combat | - 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) | - 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 | ## 12.0.39 - Les mains d'Astrobazzarh | ||||||
|  |  | ||||||
| - les armes à 1 ou 2 mains fonctionnent dans les liens de jets de dés | - 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 | - commande `/jet` pour poster une demande de jet de dés | ||||||
|  |  | ||||||
| ## 12.0.38 - Les prévisions d'Astrobazzarh | ## 12.0.38 - Les prévisions d'Astrobazzarh | ||||||
|  |  | ||||||
| - Correction de modifications de personnages qui ne s'affichaient pas: | - Correction de modifications de personnages qui ne s'affichaient pas: | ||||||
|   - changements d'endurance/vie/fatigue, transformé, ... |   - changements d'endurance/vie/fatigue, transformé, ... | ||||||
| - Migration des compétences "Ecriture" en "Écriture" dans les tâches, livres, oeuvres et méditations | - Migration des compétences "Ecriture" en "Écriture" dans les tâches, livres, oeuvres et méditations | ||||||
| @@ -44,14 +85,12 @@ | |||||||
|   - utilisation de l'extension hbs pour tous les fichiers handlebars |   - utilisation de l'extension hbs pour tous les fichiers handlebars | ||||||
|  |  | ||||||
| ## 12.0.37 - Les enchantements d'Astrobazzarh | ## 12.0.37 - Les enchantements d'Astrobazzarh | ||||||
|  |  | ||||||
| - les potions ont un état, seules les potions liquides sont enchantables | - les potions ont un état, seules les potions liquides sont enchantables | ||||||
| - les lancements de sorts du jour sont conservés jusqu'à chateau dormant | - 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 | - 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 | - on peut enchanter des gemmes exactement comme des potions | ||||||
|  |  | ||||||
| ## 12.0.36 - L'alchimie d'Astrobazzarh | ## 12.0.36 - L'alchimie d'Astrobazzarh | ||||||
|  |  | ||||||
| - Nouveautés | - Nouveautés | ||||||
|   - ajout d'un bouton pour enchanter les potions |   - ajout d'un bouton pour enchanter les potions | ||||||
|   - standardisation des boutons d'actions sur les items |   - standardisation des boutons d'actions sur les items | ||||||
| @@ -66,16 +105,14 @@ | |||||||
|   - Corrections de descriptions pour proposer les jet de dés |   - Corrections de descriptions pour proposer les jet de dés | ||||||
|  |  | ||||||
| ## 12.0.35 - La Solution d'Astrobazzarh | ## 12.0.35 - La Solution d'Astrobazzarh | ||||||
|  |  | ||||||
| - Fix problème d'initialisation des feuilles d'items | - Fix problème d'initialisation des feuilles d'items | ||||||
|  |  | ||||||
| ## 12.0.34 - la tête d'Astrobazzarh | ## 12.0.34 - la tête d'Astrobazzarh | ||||||
|  |  | ||||||
| - support de liens "jets de dés" | - support de liens "jets de dés" | ||||||
|   - on peut ajouter des liens "jet de dés" dans les journaux, descriptions, notes, maladresses, ... |   - 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: |   - 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]`  |     - 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 formule foundry `@roll[2d6]` pour lancer 2d6 | ||||||
|     - une manipulation alchimique `@roll[couleur vert-bleu]` |     - une manipulation alchimique `@roll[couleur vert-bleu]` | ||||||
|   - les liens "jet avec caractéristiques" s'appliquent: |   - les liens "jet avec caractéristiques" s'appliquent: | ||||||
|     - à tous les tokens sélectionnés |     - à tous les tokens sélectionnés | ||||||
| @@ -85,26 +122,21 @@ | |||||||
| - gestion des blocs secrets dans les descriptions | - gestion des blocs secrets dans les descriptions | ||||||
|  |  | ||||||
| ## 12.0.33 - la vieillesse d'Astrobazzarh | ## 12.0.33 - la vieillesse d'Astrobazzarh | ||||||
|  |  | ||||||
| - retour de l'expérience pour les joueurs | - retour de l'expérience pour les joueurs | ||||||
| - suppression du message "Pas de caractéristique" sur les jets d'odorat-goût | - suppression du message "Pas de caractéristique" sur les jets d'odorat-goût | ||||||
|  |  | ||||||
| ## 12.0.32 - les rêveries d'Astrobazzarh | ## 12.0.32 - les rêveries d'Astrobazzarh | ||||||
|  |  | ||||||
| - Ajout des Items Race pour gérer les ajustements liés aux races | - Ajout des Items Race pour gérer les ajustements liés aux races | ||||||
|  |  | ||||||
| ## 12.0.31 - le mausolée d'Astrobazzarh | ## 12.0.31 - le mausolée d'Astrobazzarh | ||||||
|  |  | ||||||
| - Correction: les automatisation de combat jouer-MJ fonctionnentde nouveau | - Correction: les automatisation de combat jouer-MJ fonctionnentde nouveau | ||||||
|  |  | ||||||
| ## 12.0.30 - le cauchemar d'Astrobazzarh | ## 12.0.30 - le cauchemar d'Astrobazzarh | ||||||
|  |  | ||||||
| - calcul automatique du niveau des entités selon leur rêve | - calcul automatique du niveau des entités selon leur rêve | ||||||
| - la description des créatures venimeuses contient un lien vers leur venin | - 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) | - Correction: les messages de combats ne marchaient plus (Changement combiné Foundry + rêve de Dragon) | ||||||
|  |  | ||||||
| ## 12.0.29 - L'indexation d'Astrobazzarh | ## 12.0.29 - L'indexation d'Astrobazzarh | ||||||
|  |  | ||||||
| - les liens dans la descriptions des sorts pointent vers les sorts du compendium | - 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 | - la description du chrasme contient le lien vers son venin plutôt qu'un tableau | ||||||
|  |  | ||||||
| @@ -145,7 +177,7 @@ | |||||||
|   - 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 | ||||||
| @@ -256,7 +288,7 @@ | |||||||
|  |  | ||||||
| ## 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 | ||||||
| @@ -264,7 +296,7 @@ | |||||||
|     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 | ||||||
|  |  | ||||||
| @@ -359,7 +391,7 @@ | |||||||
|  |  | ||||||
| ## 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 | ||||||
| @@ -479,7 +511,7 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi | |||||||
|   - 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 | ||||||
| @@ -586,4 +618,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 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2473
									
								
								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; | ||||||
							
								
								
									
										50
									
								
								less/colors.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,50 @@ | |||||||
|  | :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: rgba(10, 10, 10, 0.9); | ||||||
|  |     --rdd-input-background:rgba(0, 0, 0, 0.05); | ||||||
|  |     --rdd-color-border-input: rgba(0, 0, 0, 0.2); | ||||||
|  |     --rdd-bg-input: rgba(255, 255, 255, 0.1); | ||||||
|  |     --color-controls:rgba(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:rgba(255, 128, 0, 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, rgba(33, 55, 74, 0.988) 5%, rgba(21, 40, 51, 0.671) 100%); | ||||||
|  |     --background-custom-button-hover: linear-gradient(to bottom, rgb(128, 0, 0) 5%, rgb(62, 1, 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); | ||||||
|  |     --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); | ||||||
|  |   } | ||||||
							
								
								
									
										84
									
								
								less/fonts.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,84 @@ | |||||||
|  | /* ==================== (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 */ | ||||||
|  | .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 */ | ||||||
|  | } | ||||||
							
								
								
									
										2100
									
								
								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(); | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										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; | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -279,30 +279,34 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async dormirChateauDormant() { |   async dormirChateauDormant() { | ||||||
|     if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) { |     if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) { | ||||||
|       const message = { |       await this.$dormirChateauDormant(); | ||||||
|         whisper: ChatUtility.getOwners(this), |  | ||||||
|         content: "" |  | ||||||
|       }; |  | ||||||
|  |  | ||||||
|       await this._recuperationSante(message) |  | ||||||
|       await this._recupereMoralChateauDormant(message) |  | ||||||
|       await this._recupereChance() |  | ||||||
|       await this.transformerStress() |  | ||||||
|       await this.retourSeuilDeReve(message) |  | ||||||
|       await this.setBonusPotionSoin(0) |  | ||||||
|       await this.retourSust(message) |  | ||||||
|       await this.$perteReveEnchantementsChateauDormants() |  | ||||||
|       await this.$suppressionLancementsSort() |  | ||||||
|       await RdDCoeur.applyCoeurChateauDormant(this, message) |  | ||||||
|       if (message.content != "") { |  | ||||||
|         message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`; |  | ||||||
|         ChatMessage.create(message); |  | ||||||
|       } |  | ||||||
|       await this.resetInfoSommeil(); |  | ||||||
|       setTimeout(() => this.sheet.render(), 20) |       setTimeout(() => this.sheet.render(), 20) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   async $dormirChateauDormant() { | ||||||
|  |     const message = { | ||||||
|  |       whisper: ChatUtility.getOwners(this), | ||||||
|  |       content: "" | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     await this._recuperationSante(message); | ||||||
|  |     await this._recupereMoralChateauDormant(message); | ||||||
|  |     await this._recupereChance(); | ||||||
|  |     await this.transformerStress(); | ||||||
|  |     await this.retourSeuilDeReve(message); | ||||||
|  |     await this.setBonusPotionSoin(0); | ||||||
|  |     await this.retourSust(message); | ||||||
|  |     await this.$perteReveEnchantementsChateauDormants(); | ||||||
|  |     await this.$suppressionLancementsSort(); | ||||||
|  |     await RdDCoeur.applyCoeurChateauDormant(this, message); | ||||||
|  |     if (message.content != "") { | ||||||
|  |       message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`; | ||||||
|  |       ChatMessage.create(message); | ||||||
|  |     } | ||||||
|  |     await this.resetInfoSommeil(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   async resetInfoSommeil() { |   async resetInfoSommeil() { | ||||||
|     await this.update({ |     await this.update({ | ||||||
|       'system.sommeil': { |       'system.sommeil': { | ||||||
| @@ -457,11 +461,9 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       ChatMessage.create(message); |       ChatMessage.create(message); | ||||||
|     } |     } | ||||||
|     if (options.chateauDormant) { |     if (options.chateauDormant) { | ||||||
|       await this.dormirChateauDormant(); |       await this.$dormirChateauDormant(); | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|       setTimeout(() => this.sheet.render(), 20) |  | ||||||
|     } |     } | ||||||
|  |     setTimeout(() => this.sheet.render(), 20) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async reveilReveDeDragon(message, heures) { |   async reveilReveDeDragon(message, heures) { | ||||||
| @@ -482,7 +484,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|         await this.$recupererFatigue(message); |         await this.$recupererFatigue(message); | ||||||
|         await this.$jetRecuperationReve(dormi, message); |         await this.$jetRecuperationReve(dormi, message); | ||||||
|         if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) { |         if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) { | ||||||
|           dormi.etat = await this.$jetRecuperationReve(dormi, message); |           await this.$jetRecuperationReve(dormi, message); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -541,7 +543,6 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       max = Math.floor(max / 2); |       max = Math.floor(max / 2); | ||||||
|     } |     } | ||||||
|     const manquant = max - this.system.sante.endurance.value; |     const manquant = max - this.system.sante.endurance.value; | ||||||
|  |  | ||||||
|     if (manquant > 0) { |     if (manquant > 0) { | ||||||
|       await this.santeIncDec("endurance", manquant); |       await this.santeIncDec("endurance", manquant); | ||||||
|       message.content += `Vous récuperez ${manquant} points d'endurance. `; |       message.content += `Vous récuperez ${manquant} points d'endurance. `; | ||||||
| @@ -558,7 +559,6 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       } |       } | ||||||
|       fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue)) |       fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue)) | ||||||
|       await this.update({ 'system.sante.fatigue.value': fatigue }); |       await this.update({ 'system.sante.fatigue.value': fatigue }); | ||||||
|       await new Promise(resolve => setTimeout(resolve, 200));  |  | ||||||
|       if (fatigue == 0) { |       if (fatigue == 0) { | ||||||
|         message.content += "Vous êtes complêtement reposé. "; |         message.content += "Vous êtes complêtement reposé. "; | ||||||
|       } |       } | ||||||
| @@ -668,19 +668,23 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     if (!RdDItemRace.checkRacialMax(this, caracName, to)) { |     if (!RdDItemRace.checkRacialMax(this, caracName, to)) { | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|  |     let updates = {}; | ||||||
|     if (caracName == LIST_CARAC_PERSONNAGE.reve.code) { |     if (caracName == LIST_CARAC_PERSONNAGE.reve.code) { | ||||||
|       if (to > Misc.toInt(this.system.reve.seuil.value)) { |       if (to > Misc.toInt(this.system.reve.seuil.value)) { | ||||||
|         this.setPointsDeSeuil(to); |         updates[`system.reve.seuil.value`] = to; // SFA : Direct and packed changes | ||||||
|       } |         //this.setPointsDeSeuil(to); | ||||||
|  |       }  | ||||||
|     } |     } | ||||||
|     if (caracName == LIST_CARAC_PERSONNAGE.chance.code) { |     if (caracName == LIST_CARAC_PERSONNAGE.chance.code) { | ||||||
|       if (to > Misc.toInt(this.system.compteurs.chance.value)) { |       if (to > Misc.toInt(this.system.compteurs.chance.value)) { | ||||||
|         this.setPointsDeChance(to); |         updates[`system.compteurs.chance.value`] = to; // SFA : Direct and packed changes | ||||||
|  |         //this.setPointsDeChance(to); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     let selectedCarac = this.findCaracByName(caracName); |     let selectedCarac = this.findCaracByName(caracName); | ||||||
|     const from = selectedCarac.value |     const from = selectedCarac.value | ||||||
|     await this.update({ [`system.carac.${caracName}.value`]: to }); |     updates[`system.carac.${caracName}.value`] = to; | ||||||
|  |     await this.update(updates); | ||||||
|     await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName); |     await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -784,7 +788,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories()); |       const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories()); | ||||||
|       this.notifyCompetencesTronc(competence, toNiveau); |       this.notifyCompetencesTronc(competence, toNiveau); | ||||||
|       const fromNiveau = competence.system.niveau; |       const fromNiveau = competence.system.niveau; | ||||||
|       await competence.update({ 'system.niveau': toNiveau }, { render: false }) |       await competence.update({ 'system.niveau': toNiveau }, { render: true }) | ||||||
|       await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true); |       await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -1048,20 +1052,10 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async deleteRencontreTMRAtPosition() { |  | ||||||
|     const rencontreIds = this.itemTypes[ITEM_TYPES.rencontre].filter(this.filterRencontreTMRDemiReve()).map(it => it.id) |  | ||||||
|     if (rencontreIds.length > 0) { |  | ||||||
|       await this.deleteEmbeddedDocuments('Item', rencontreIds) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   getRencontreTMREnAttente() { |   getRencontreTMREnAttente() { | ||||||
|     return this.itemTypes[ITEM_TYPES.rencontre].find(this.filterRencontreTMRDemiReve()) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   filterRencontreTMRDemiReve() { |  | ||||||
|     const position = this.getDemiReve() |     const position = this.getDemiReve() | ||||||
|     return it => it.system.coord == position |     return this.itemTypes[ITEM_TYPES.rencontre].find(it => it.system.coord == position) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1771,7 +1765,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     if (reveActuel == 0) { // 0 points de reve |     if (reveActuel == 0) { // 0 points de reve | ||||||
|       ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" }); |       ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" }); | ||||||
|     } |     } | ||||||
|     if (!rollData.isSortReserve) { |     if (!rollData.isSortReserve || !rolled.isSuccess) { | ||||||
|       this.tmrApp?.close(); |       this.tmrApp?.close(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -1801,10 +1795,8 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     }; |     }; | ||||||
|     RollDataAjustements.calcul(rollData, this); |     RollDataAjustements.calcul(rollData, this); | ||||||
|     await RdDResolutionTable.rollData(rollData); |     await RdDResolutionTable.rollData(rollData); | ||||||
|     await RdDRollResult.displayRollData(rollData, this) |  | ||||||
|  |  | ||||||
|     this.gererExperience(rollData); |     this.gererExperience(rollData); | ||||||
|  |     await RdDRollResult.displayRollData(rollData, this) | ||||||
|     return rollData.rolled; |     return rollData.rolled; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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() { | ||||||
|   | |||||||
| @@ -14,11 +14,12 @@ 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 }], | ||||||
|   | |||||||
| @@ -734,7 +734,7 @@ 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.hbs', 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))); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -44,13 +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))); |  | ||||||
|     this.html.find('.service-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 }); | ||||||
| @@ -64,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() |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
|  | import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js"; | ||||||
| import { Misc } from "../misc.js"; | import { Misc } from "../misc.js"; | ||||||
|  | import { RdDUtility } from "../rdd-utility.js"; | ||||||
| import { RdDBaseActor } from "./base-actor.js"; | import { RdDBaseActor } from "./base-actor.js"; | ||||||
|  |  | ||||||
| export class RdDCommerce extends RdDBaseActor { | export class RdDCommerce extends RdDBaseActor { | ||||||
| @@ -37,4 +39,27 @@ export class RdDCommerce extends RdDBaseActor { | |||||||
|     const pourcentage = this.system.pourcentage ?? 100; |     const pourcentage = this.system.pourcentage ?? 100; | ||||||
|     return Misc.keepDecimals(Math.ceil(item.system.cout * pourcentage) / 100, 2); |     return Misc.keepDecimals(Math.ceil(item.system.cout * pourcentage) / 100, 2); | ||||||
|   } |   } | ||||||
|  |   async vente(item) { | ||||||
|  |     const acheteur = RdDUtility.getSelectedActor(); | ||||||
|  |     if (!acheteur) { | ||||||
|  |       ui.notifications.warn(`Pas d'acheteur sélectionné`); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     const disponible = this.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, | ||||||
|  |       acheteur, | ||||||
|  |       quantiteIllimite: disponible == undefined, | ||||||
|  |       nbLots: disponible ?? 1, | ||||||
|  |       tailleLot: 1, | ||||||
|  |       prixLot: item.calculerPrixCommercant() | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |    | ||||||
| } | } | ||||||
| @@ -7,7 +7,7 @@ import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping. | |||||||
|  |  | ||||||
| export class RdDActorExportSheet extends RdDActorSheet { | export class RdDActorExportSheet extends RdDActorSheet { | ||||||
|   static init() { |   static init() { | ||||||
|     loadTemplates([ |     foundry.applications.handlebars.loadTemplates([ | ||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs", | ||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs", | ||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs", | ||||||
| @@ -21,7 +21,7 @@ export class RdDActorExportSheet extends RdDActorSheet { | |||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs", | ||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs", | ||||||
|     ]) |     ]) | ||||||
|     Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" }) |     foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import { Misc } from "../../misc.js" | |||||||
| import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js" | import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js" | ||||||
| import { Mapping } from "./mapping.js" | import { Mapping } from "./mapping.js" | ||||||
|  |  | ||||||
| const IMG_SCRIPTARIUM = '<img class="context-menu-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/scriptarium.svg">' | const IMG_SCRIPTARIUM = '<img class="context-menu-img" src="systems/foundryvtt-reve-de-dragon/assets/ui/scriptarium.svg">' | ||||||
|  |  | ||||||
| export class ExportScriptarium { | export class ExportScriptarium { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ const RANDOM_VALUES = { | |||||||
|  |  | ||||||
| export class AppPersonnageAleatoire extends FormApplication { | export class AppPersonnageAleatoire extends FormApplication { | ||||||
|   static preloadHandlebars() { |   static preloadHandlebars() { | ||||||
|     loadTemplates([ |     foundry.applications.handlebars.loadTemplates([ | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs', | ||||||
|     ]) |     ]) | ||||||
|   } |   } | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								module/applications/sheets/_module.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,5 @@ | |||||||
|  | export { default as RdDItemBaseSheet} from "./common-item-sheet.mjs" | ||||||
|  | export { default as RdDMonnaieSheet } from "./monnaie-sheet.mjs" | ||||||
|  | export { default as RdDMunitionSheet } from "./munition-sheet.mjs" | ||||||
|  | export { default as RdDTarotSheet } from "./tarot-sheet.mjs" | ||||||
|  |  | ||||||
							
								
								
									
										111
									
								
								module/applications/sheets/common-item-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,111 @@ | |||||||
|  | const { HandlebarsApplicationMixin } = foundry.applications.api | ||||||
|  | import { SYSTEM_RDD } from "../../constants.js" | ||||||
|  | import { Misc } from "../../misc.js" | ||||||
|  | import { RdDSheetUtility } from "../../rdd-sheet-utility.js"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | export default class RdDItemBaseSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) { | ||||||
|  |  | ||||||
|  |   static preloadHandlebars(...templatesList) { | ||||||
|  |     const handlebars = ["systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/header.hbs"] | ||||||
|  |     templatesList.forEach(templates => | ||||||
|  |       templates.forEach(t => | ||||||
|  |         t.handlebars().forEach(h => handlebars.push(h)) | ||||||
|  |       ) | ||||||
|  |     ) | ||||||
|  |     loadTemplates(Misc.distinct(handlebars)) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static register(sheetClass) { | ||||||
|  |     const itemType = sheetClass.ITEM_TYPE | ||||||
|  |     Items.registerSheet(SYSTEM_RDD, sheetClass, { | ||||||
|  |       label: Misc.typeName('Item', itemType), | ||||||
|  |       types: [itemType], | ||||||
|  |       makeDefault: true | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static registerAll(...sheetClasses) { | ||||||
|  |     const handlebars = ["systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/header.hbs"] | ||||||
|  |     sheetClasses.forEach(sheetClass => { | ||||||
|  |       sheetClass.TEMPLATES.forEach(t => | ||||||
|  |         t.handlebars().forEach(h => handlebars.push(h)) | ||||||
|  |       ) | ||||||
|  |       const itemType = sheetClass.ITEM_TYPE | ||||||
|  |       foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, { | ||||||
|  |         label: Misc.typeName('Item', itemType), | ||||||
|  |         types: [itemType], | ||||||
|  |         makeDefault: true | ||||||
|  |       }) | ||||||
|  |     }) | ||||||
|  |     foundry.applications.handlebars.loadTemplates(Misc.distinct(handlebars)) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static get ITEM_TYPE() { return undefined } | ||||||
|  |  | ||||||
|  |   constructor(options = {}) { | ||||||
|  |     super(options) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static get TEMPLATES() { return [] } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static DEFAULT_OPTIONS = { | ||||||
|  |     classes: ["fvtt-rdd", "item"], | ||||||
|  |     position: { | ||||||
|  |       width: 448, | ||||||
|  |       height: "auto", | ||||||
|  |     }, | ||||||
|  |     form: { | ||||||
|  |       submitOnChange: true, | ||||||
|  |     }, | ||||||
|  |     window: { | ||||||
|  |       resizable: true, | ||||||
|  |     }, | ||||||
|  |     actions: { | ||||||
|  |       editImage: RdDItemBaseSheet.#onEditImage, | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     return { | ||||||
|  |       item: this.document, | ||||||
|  |       options: RdDSheetUtility.getOptions(this.document, this.isEditable), | ||||||
|  |       fields: this.document.schema.fields, | ||||||
|  |       systemFields: this.document.system.schema.fields, | ||||||
|  |       system: this.document.system, | ||||||
|  |       source: this.document.toObject(), | ||||||
|  |       isEditable: this.isEditable, | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // #region Actions | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Handle changing a Document's image. | ||||||
|  |    * | ||||||
|  |    * @this RdDItemBaseSheet | ||||||
|  |    * @param {PointerEvent} event   The originating click event | ||||||
|  |    * @param {HTMLElement} target   The capturing HTML element which defined a [data-action] | ||||||
|  |    * @returns {Promise} | ||||||
|  |    * @private | ||||||
|  |    */ | ||||||
|  |   static async #onEditImage(event, target) { | ||||||
|  |     const attr = target.dataset.edit | ||||||
|  |     const current = foundry.utils.getProperty(this.document, attr) | ||||||
|  |     const { img } = this.document.constructor.getDefaultArtwork?.(this.document.toObject()) ?? {} | ||||||
|  |     const fp = new FilePicker({ | ||||||
|  |       current, | ||||||
|  |       type: "image", | ||||||
|  |       redirectToRoot: img ? [img] : [], | ||||||
|  |       callback: (path) => { | ||||||
|  |         this.document.update({ [attr]: path }) | ||||||
|  |       }, | ||||||
|  |       top: this.position.top + 40, | ||||||
|  |       left: this.position.left + 10, | ||||||
|  |     }) | ||||||
|  |     return fp.browse() | ||||||
|  |   } | ||||||
|  |   // #endregion | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								module/applications/sheets/monnaie-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,35 @@ | |||||||
|  | import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs"; | ||||||
|  | import { ITEM_TYPES } from "../../constants.js"; | ||||||
|  | import RdDItemBaseSheet from "./common-item-sheet.mjs"; | ||||||
|  |  | ||||||
|  | export default class RdDMonnaieSheet extends RdDItemBaseSheet { | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static get ITEM_TYPE() { return ITEM_TYPES.monnaie } | ||||||
|  |   static get TEMPLATES() { return [TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE] } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static DEFAULT_OPTIONS = Object.assign({}, | ||||||
|  |     RdDItemBaseSheet.DEFAULT_OPTIONS, | ||||||
|  |     { | ||||||
|  |       classes: ["fvtt-rdd", "item", "monnaie"], | ||||||
|  |       position: { width: 448 }, | ||||||
|  |       window: { contentClasses: ["monnaie-content"] } | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static PARTS = { | ||||||
|  |     main: { | ||||||
|  |       template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/monnaie.hbs", | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     return Object.assign( | ||||||
|  |       await super._prepareContext(), | ||||||
|  |       await TEMPLATE_DESCRIPTION.prepareContext(this.document), | ||||||
|  |       await TEMPLATE_INVENTAIRE.prepareContext(this.document) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								module/applications/sheets/munition-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,34 @@ | |||||||
|  | import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs"; | ||||||
|  | import { ITEM_TYPES } from "../../constants.js"; | ||||||
|  | import RdDItemBaseSheet from "./common-item-sheet.mjs"; | ||||||
|  |  | ||||||
|  | export default class RdDMunitionSheet extends RdDItemBaseSheet { | ||||||
|  |   /** @override */ | ||||||
|  |   static get ITEM_TYPE() { return ITEM_TYPES.munition } | ||||||
|  |   static get TEMPLATES() { return [TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE] } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static DEFAULT_OPTIONS = Object.assign({}, | ||||||
|  |     RdDItemBaseSheet.DEFAULT_OPTIONS, | ||||||
|  |     { | ||||||
|  |       classes: ["fvtt-rdd", "item", "munition"], | ||||||
|  |       position: { width: 448 }, | ||||||
|  |       window: { contentClasses: ["munition-content"] } | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static PARTS = { | ||||||
|  |     main: { | ||||||
|  |       template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/munition.hbs", | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     return Object.assign( | ||||||
|  |       await super._prepareContext(), | ||||||
|  |       await TEMPLATE_DESCRIPTION.prepareContext(this.document), | ||||||
|  |       await TEMPLATE_INVENTAIRE.prepareContext(this.document) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								module/applications/sheets/tarot-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | |||||||
|  | import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs"; | ||||||
|  | import { ITEM_TYPES } from "../../constants.js"; | ||||||
|  | import RdDItemBaseSheet from "./common-item-sheet.mjs"; | ||||||
|  |  | ||||||
|  | export default class RdDTarotSheet extends RdDItemBaseSheet { | ||||||
|  |   /** @override */ | ||||||
|  |   static get ITEM_TYPE() { return ITEM_TYPES.tarot } | ||||||
|  |   static get TEMPLATES() { return [TEMPLATE_DESCRIPTION] } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static DEFAULT_OPTIONS = Object.assign({}, | ||||||
|  |     RdDItemBaseSheet.DEFAULT_OPTIONS, | ||||||
|  |     { | ||||||
|  |       classes: ["fvtt-rdd", "item", "tarot"], | ||||||
|  |       position: { width: 448 }, | ||||||
|  |       window: { contentClasses: ["tarot-content"] } | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static PARTS = { | ||||||
|  |     main: { | ||||||
|  |       template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/tarot.hbs", | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     return Object.assign( | ||||||
|  |       await super._prepareContext(), | ||||||
|  |       await TEMPLATE_DESCRIPTION.prepareContext(this.document) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -13,7 +13,7 @@ const TEXT_ROLL_MANAGERS = [ | |||||||
|  |  | ||||||
| export class RdDTextEditor { | export class RdDTextEditor { | ||||||
|   static registerChatCallbacks(html) { |   static registerChatCallbacks(html) { | ||||||
|     html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event)) |     $(html).on("click", '.roll-text', async event => await RdDTextEditor.rollText(event)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static async enrichHTML(text, object, options = {showlink:true}) { |   static async enrichHTML(text, object, options = {showlink:true}) { | ||||||
| @@ -30,7 +30,7 @@ export class RdDTextEditor { | |||||||
|       context.text = await manager.onReplaceRoll(context); |       context.text = await manager.onReplaceRoll(context); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return await TextEditor.enrichHTML(context.text, { |     return await foundry.applications.ux.TextEditor.implementation.enrichHTML(context.text, { | ||||||
|       relativeTo: object, |       relativeTo: object, | ||||||
|       secrets: object?.isOwner, |       secrets: object?.isOwner, | ||||||
|       async: true |       async: true | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ import { RdDUtility } from "../../rdd-utility.js"; | |||||||
| import { RdDAlchimie } from "../../rdd-alchimie.js"; | import { RdDAlchimie } from "../../rdd-alchimie.js"; | ||||||
| import { TextRollManager } from "./text-roll-formatter.js"; | import { TextRollManager } from "./text-roll-formatter.js"; | ||||||
|  |  | ||||||
| const REGEX_ALCHIMIE_TERMES = "(?<termes>(\\w|-)+)" | const REGEX_ALCHIMIE_TERMES = "(?<termes>([-A-Za-zÀ-ÖØ-öø-ÿ ])+)" | ||||||
| const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))" | const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))" | ||||||
| const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu') | const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu') | ||||||
| const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu') | const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu') | ||||||
|   | |||||||
| @@ -5,12 +5,12 @@ import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; | |||||||
|  |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Class providing helper methods to get the list of users, and  |  * Class providing helper methods to get the list of users, and | ||||||
|  */ |  */ | ||||||
| export class ChatUtility { | export class ChatUtility { | ||||||
|  |  | ||||||
|   static async init() { |   static async init() { | ||||||
|     Hooks.on("renderChatMessage", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg)) |     Hooks.on("renderChatMessageHTML", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg)) | ||||||
|     Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id)) |     Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -190,8 +190,8 @@ export class ChatUtility { | |||||||
|     if (rddTimestamp) { |     if (rddTimestamp) { | ||||||
|       const timestamp = new RdDTimestamp(rddTimestamp); |       const timestamp = new RdDTimestamp(rddTimestamp); | ||||||
|       const timestampData = timestamp.toCalendrier(); |       const timestampData = timestamp.toCalendrier(); | ||||||
|       const dateHeure = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData); |       const dateHeure = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData); | ||||||
|       html.find('header.message-header .message-sender').after(dateHeure) |       $(html).find('header.message-header .message-sender').after(dateHeure) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,13 +5,13 @@ const INFO_COEUR = 'info-coeur'; | |||||||
|  |  | ||||||
| export class RdDCoeur { | export class RdDCoeur { | ||||||
|   static registerChatCallbacks(html) { |   static registerChatCallbacks(html) { | ||||||
|     html.on("click", 'a.accepter-tendre-moment', event => { |     $(html).on("click", 'a.accepter-tendre-moment', event => { | ||||||
|       RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event)) |       RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event)) | ||||||
|     }) |     }) | ||||||
|     html.on("click", 'a.refuser-tendre-moment', event => { |     $(html).on("click", 'a.refuser-tendre-moment', event => { | ||||||
|       RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event)) |       RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event)) | ||||||
|     }) |     }) | ||||||
|     html.on("click", 'a.perdre-point-coeur-douceur', event => { |     $(html).on("click", 'a.perdre-point-coeur-douceur', event => { | ||||||
|       RdDCoeur.perdreEnDouceur( |       RdDCoeur.perdreEnDouceur( | ||||||
|         RdDCoeur.extractInfoCoeur(event), |         RdDCoeur.extractInfoCoeur(event), | ||||||
|         event.currentTarget.attributes['data-actor-id'].value) |         event.currentTarget.attributes['data-actor-id'].value) | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								module/common/_module.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | import { CommonDescription } from "./description.mjs"; | ||||||
|  | import { CommonInventaire } from "./inventaire.mjs"; | ||||||
|  |  | ||||||
|  | export const TEMPLATE_DESCRIPTION = new CommonDescription() | ||||||
|  | export const TEMPLATE_INVENTAIRE = new CommonInventaire() | ||||||
|  |  | ||||||
|  | export const ALL_COMMON_TEMPLATES = [TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE] | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								module/common/common-template.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,10 @@ | |||||||
|  | /** | ||||||
|  |  * class describing common methods implemented by template parts, | ||||||
|  |  * used for sheet/models/documents | ||||||
|  |  */ | ||||||
|  | export default class CommonTemplate { | ||||||
|  |   fields() { } | ||||||
|  |   handlebars() { return [] } | ||||||
|  |   actions() { return {} } | ||||||
|  |   async prepareContext(item) { } | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								module/common/description.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,32 @@ | |||||||
|  | import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js" | ||||||
|  | import CommonTemplate from "./common-template.mjs" | ||||||
|  | import { HTMLSTRING } from "./field-types.mjs" | ||||||
|  |  | ||||||
|  | const fields = foundry.data.fields | ||||||
|  |  | ||||||
|  | export class CommonDescription extends CommonTemplate { | ||||||
|  |   fields() { | ||||||
|  |     return { | ||||||
|  |       description: new fields.HTMLField({ ...HTMLSTRING }), | ||||||
|  |       descriptionmj: new fields.HTMLField({ gmOnly: true, ...HTMLSTRING }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   handlebars() { | ||||||
|  |     return [ | ||||||
|  |       "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-description.hbs", | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  |   actions() { | ||||||
|  |     return {} | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async prepareContext(item) { | ||||||
|  |     const enriched = { | ||||||
|  |       description: await RdDTextEditor.enrichHTML(item.system.description, item), | ||||||
|  |       descriptionmj: await RdDTextEditor.enrichHTML(item.system.descriptionmj, item), | ||||||
|  |     } | ||||||
|  |     return { enriched } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								module/common/field-types.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | |||||||
|  | export const INTEGER = { required: true, nullable: false, min: 0, integer: true } | ||||||
|  | export const DECIMAL = { required: true, nullable: false, min: 0, integer: false } /* TODO: validation de nombre décimales?*/ | ||||||
|  | export const INTEGER_SIGNED = { required: true, nullable: false, integer: true } | ||||||
|  | export const DECIMAL_SIGNED = { required: true, nullable: false, integer: false } | ||||||
|  | export const STRING = { required: true, nullable: false, blank: true, trim: true } | ||||||
|  | export const HTMLSTRING = { initial: "", required: true, nullable: false, blank: true, textSearch: true } | ||||||
|  |  | ||||||
|  | export const MODEL_ARRAY = { initial: [], required: true, nullable: false } | ||||||
|  |  | ||||||
							
								
								
									
										36
									
								
								module/common/inventaire.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,36 @@ | |||||||
|  | import CommonTemplate from "./common-template.mjs" | ||||||
|  | import { RARETES } from "../item/raretes.js" | ||||||
|  | import { DECIMAL, INTEGER, INTEGER_SIGNED, MODEL_ARRAY, STRING } from "./field-types.mjs" | ||||||
|  |  | ||||||
|  | const fields = foundry.data.fields | ||||||
|  |  | ||||||
|  | export class CommonInventaire extends CommonTemplate { | ||||||
|  |   fields() { | ||||||
|  |     return { | ||||||
|  |       encombrement: new fields.NumberField({ label: "Encombrement", initial: 0, ...INTEGER }), | ||||||
|  |       quantite: new fields.NumberField({ label: "Quantité", initial: 1, ...INTEGER }), | ||||||
|  |       qualite: new fields.NumberField({ label: "Qualité", initial: 0, ...INTEGER_SIGNED }), | ||||||
|  |       cout: new fields.NumberField({ label: "Coût", initial: 0.0, ...DECIMAL }), | ||||||
|  |       environnement: new fields.ArrayField( | ||||||
|  |         new fields.SchemaField({ | ||||||
|  |           milieu: new fields.StringField({ label: "Milieu", initial: "", ...STRING }), | ||||||
|  |           rarete: new fields.StringField({ | ||||||
|  |             label: "Rareté", initial: RARETES[0].code, ...STRING, | ||||||
|  |             validate: (value, options) => RARETES.find(it => it.code == value) | ||||||
|  |           }), | ||||||
|  |           frequence: new fields.NumberField({ label: "Fréquence", initial: RARETES[0].frequence, ...INTEGER }), | ||||||
|  |         }), | ||||||
|  |         { label: "Environnement", ...MODEL_ARRAY }), | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   handlebars() { | ||||||
|  |     return [ | ||||||
|  |       "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-inventaire.hbs" | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async prepareContext(item) { | ||||||
|  |     return {} | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								module/documents/_module.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | |||||||
|  | export { default as RdDModelMonnaie } from "./monnaie.mjs" | ||||||
|  | export { default as RdDModelMunition } from "./munition.mjs" | ||||||
|  | export { default as RdDModelTarot } from "./tarot.mjs" | ||||||
							
								
								
									
										11
									
								
								module/documents/monnaie.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,11 @@ | |||||||
|  | import { RdDItem } from "../item.js"; | ||||||
|  |  | ||||||
|  | export default class RdDItemMonnaie extends RdDItem { | ||||||
|  |  | ||||||
|  |   constructor(data, context) { | ||||||
|  |     if (!data.img) { | ||||||
|  |       data.img = 'systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp' | ||||||
|  |     } | ||||||
|  |     super(data, context); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								module/documents/munition.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | import { RdDItem } from "../item.js"; | ||||||
|  |  | ||||||
|  | export default class RdDItemMunition extends RdDItem { | ||||||
|  |   static get defaultIcon() { | ||||||
|  |     return 'systems/foundryvtt-reve-de-dragon/icons/objets/fleche.webp' | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								module/documents/tarot.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | import { RdDItem } from "../item.js"; | ||||||
|  |  | ||||||
|  | export default class RdDItemTarot extends RdDItem { | ||||||
|  |   static get defaultIcon() { | ||||||
|  |     return 'systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp' | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -120,7 +120,7 @@ export class RdDItemArme extends Item { | |||||||
|  |  | ||||||
|   static defenseArmeParade(armeAttaque, armeParade) { |   static defenseArmeParade(armeAttaque, armeParade) { | ||||||
|     const defCategory = RdDItemArme.getCategorieParade(armeParade) |     const defCategory = RdDItemArme.getCategorieParade(armeParade) | ||||||
|     if (defCategory == 'bouclier') { |     if (defCategory == 'boucliers') { | ||||||
|       return 'norm' |       return 'norm' | ||||||
|     } |     } | ||||||
|     if (armeAttaque?.system?.competence?.toLowerCase().match(/(fléau)/)) { |     if (armeAttaque?.system?.competence?.toLowerCase().match(/(fléau)/)) { | ||||||
|   | |||||||
| @@ -14,12 +14,11 @@ import { RdDItem } from "./item.js"; | |||||||
| import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js"; | import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js"; | ||||||
| import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; | import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; | ||||||
| import { ItemAction } from "./item/item-actions.js"; | import { ItemAction } from "./item/item-actions.js"; | ||||||
| import { RdDItemGemme } from "./item/gemme.js"; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Extend the basic ItemSheet for RdD specific items |  * Extend the basic ItemSheet for RdD specific items | ||||||
|  */ |  */ | ||||||
| export class RdDItemSheet extends ItemSheet { | export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet { | ||||||
|  |  | ||||||
|   static get ITEM_TYPE() { |   static get ITEM_TYPE() { | ||||||
|     return undefined |     return undefined | ||||||
| @@ -32,7 +31,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   static register(sheetClass) { |   static register(sheetClass) { | ||||||
|     Items.registerSheet(SYSTEM_RDD, sheetClass, { |     foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, { | ||||||
|       label: Misc.typeName('Item', sheetClass.ITEM_TYPE), |       label: Misc.typeName('Item', sheetClass.ITEM_TYPE), | ||||||
|       types: [sheetClass.ITEM_TYPE], |       types: [sheetClass.ITEM_TYPE], | ||||||
|       makeDefault: true |       makeDefault: true | ||||||
| @@ -43,7 +42,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(super.defaultOptions, { |     return foundry.utils.mergeObject(super.defaultOptions, { | ||||||
|       classes: [SYSTEM_RDD, "sheet", "item"], |       classes: [SYSTEM_RDD, "sheet", "item"], | ||||||
|       template: RdDItemSheet.defaultTemplate(RdDItemSheet.ITEM_TYPE), |       template: RdDItemSheetV1.defaultTemplate(RdDItemSheetV1.ITEM_TYPE), | ||||||
|       width: 550, |       width: 550, | ||||||
|       height: 550 |       height: 550 | ||||||
|     }, { inplace: false }); |     }, { inplace: false }); | ||||||
| @@ -51,7 +50,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   get template() { |   get template() { | ||||||
|     return RdDItemSheet.defaultTemplate(this.item.type); |     return RdDItemSheetV1.defaultTemplate(this.item.type); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   get title() { |   get title() { | ||||||
| @@ -101,7 +100,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|       description: await RdDTextEditor.enrichHTML(this.item.system.description, this.item), |       description: await RdDTextEditor.enrichHTML(this.item.system.description, this.item), | ||||||
|       descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item), |       descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item), | ||||||
|       isComestible: this.item.getUtilisationCuisine(), |       isComestible: this.item.getUtilisationCuisine(), | ||||||
|       options: RdDSheetUtility.mergeDocumentRights(this.options, this.item, this.isEditable), |       options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable), | ||||||
|       competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage), |       competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage), | ||||||
|       categories: RdDItem.getCategories(this.item.type), |       categories: RdDItem.getCategories(this.item.type), | ||||||
|     } |     } | ||||||
| @@ -264,7 +263,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|   _updateObject(event, formData) { |   _updateObject(event, formData) { | ||||||
|     switch (this.item.type) { |     switch (this.item.type) { | ||||||
|       case ITEM_TYPES.sort: |       case ITEM_TYPES.sort: | ||||||
|         formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheet._listCaseTmr( |         formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheetV1._listCaseTmr( | ||||||
|           formData.caseTmrCoord, |           formData.caseTmrCoord, | ||||||
|           formData.caseTmrBonus, |           formData.caseTmrBonus, | ||||||
|           formData.caseTmrAdd |           formData.caseTmrAdd | ||||||
| @@ -314,7 +313,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|  |  | ||||||
|   async _onDrop(event) { |   async _onDrop(event) { | ||||||
|     // Try to extract the dragData |     // Try to extract the dragData | ||||||
|     let dragData = RdDItemSheet.$extractDragData(event); |     let dragData = RdDItemSheetV1.$extractDragData(event); | ||||||
|     if (!dragData) return false; |     if (!dragData) return false; | ||||||
|     const allowed = Hooks.call("dropActorSheetData", this.actor, this, dragData); |     const allowed = Hooks.call("dropActorSheetData", this.actor, this, dragData); | ||||||
|     if (allowed === false) return false; |     if (allowed === false) return false; | ||||||
|   | |||||||