Compare commits
	
		
			90 Commits
		
	
	
		
			5ac9c682d9
			...
			13.0.3
		
	
	| 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 | |||
| 069fef4720 | |||
| e32a7d7540 | |||
| 0773493851 | |||
| da982678b7 | |||
| c1066d70f6 | |||
| 5085ba5b54 | |||
| f37483a61d | |||
| 5357e53a5f | |||
| 764dde6296 | |||
| 681fbc3177 | |||
| 70e3e63001 | |||
| 7ed9a4a12b | |||
| acfab362a0 | |||
| 3d49a3de11 | |||
| 24518642a7 | |||
| d917f80e88 | |||
| b29027c61a | |||
| 6083dd41fa | |||
| 8969d5e0ed | |||
| 7d135a214f | |||
| 9d66a479c4 | |||
| 800b4a2f32 | |||
| 9fc21e6d97 | |||
| ce7f5381ca | |||
| 48acdaaca6 | |||
| 425c6af672 | |||
| 4281f76dfb | |||
| 8ebd6ec771 | |||
| 14391daa0b | |||
| ac29e1410e | |||
| 442ffe9b3a | |||
| d922e4fdd5 | |||
| a8dc07b4db | |||
| 40a47ee8a2 | |||
| c5633a9fc5 | |||
| 7e8da49912 | |||
| b524716ede | |||
| 72a9752820 | |||
| 8e578c6566 | |||
| a4b474970c | 
| @@ -1,6 +1,6 @@ | ||||
| name: Release Creation | ||||
|  | ||||
| on:  | ||||
| on: | ||||
|   release: | ||||
|     types: [published] | ||||
|  | ||||
| @@ -9,9 +9,11 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner." | ||||
|      | ||||
|  | ||||
|     #- uses: actions/checkout@v3 | ||||
|     - uses: RouxAntoine/checkout@v3.5.4 | ||||
|       with: | ||||
|         ref: 'v13' | ||||
|  | ||||
|     # get part of the tag after the `v` | ||||
|     - name: Extract tag version number | ||||
| @@ -29,7 +31,7 @@ jobs: | ||||
|         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 | ||||
|         download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/rddsystem.zip | ||||
|      | ||||
|  | ||||
|     - name: Set up Node.js | ||||
|       uses: actions/setup-node@v2 | ||||
|       with: | ||||
| @@ -37,7 +39,7 @@ jobs: | ||||
|  | ||||
|     - name: Install dependencies | ||||
|       run: npm install | ||||
|        | ||||
|  | ||||
|     - name: Build the compendiums | ||||
|       run: node ./tools/packCompendiumsToDist.mjs | ||||
|  | ||||
| @@ -46,29 +48,29 @@ jobs: | ||||
|          apt update -y | ||||
|          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 | ||||
|       uses: actions/setup-go@v3 | ||||
|       with: | ||||
|         go-version: '>=1.20.1' | ||||
|      | ||||
|     - name: Use Go Action   | ||||
|  | ||||
|     - name: Use Go Action | ||||
|       id: use-go-action | ||||
|       uses: https://gitea.com/actions/release-action@main | ||||
|       with: | ||||
|         files: |- | ||||
|           ./rddsystem.zip   | ||||
|           ./rddsystem.zip | ||||
|           system.json | ||||
|         api_key: '${{secrets.ALLOW_PUSH_RELEASE}}' | ||||
|  | ||||
|     - name: Publish to Foundry server   | ||||
|     - name: Publish to Foundry server | ||||
|       uses: djlechuck/foundryvtt-publish-package-action@v1 | ||||
|       with: | ||||
|         token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }} | ||||
|         id: 'foundryvtt-reve-de-dragon' | ||||
|         version: ${{github.event.release.tag_name}} | ||||
|         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' | ||||
|         compatibility-minimum: '12' | ||||
|         compatibility-verified: '12' | ||||
|         notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md' | ||||
|         compatibility-minimum: '13' | ||||
|         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 | 
							
								
								
									
										123
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						| @@ -1,10 +1,118 @@ | ||||
| # 13.0 | ||||
|  | ||||
| ## 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 | ||||
| - Renommage du Bouton pour révéler/masquer le demi-rêve | ||||
|  | ||||
| ## 12.0.44 - Les errements d'Astrobazzarh, suite | ||||
|  | ||||
| - on peut de nouveau dormir et se réveiller reposé | ||||
| - les possessions utilisent maintenant correctement le rêve actuel | ||||
| - les sorts variables ne causent plus de soucis de voie pour le lancement de sorts | ||||
| - les acteurs ayant un sort avec un coût de rêve entier ne sont plus considérés | ||||
|   comme pouvant avoir un rêve variable | ||||
|  | ||||
| ## 12.0.42 - Les errements d'Astrobazzarh | ||||
|  | ||||
| - Correction de différentes automatisations de combat incorrectes | ||||
| - Correction des jets `@roll[vue/-2]` qui tentaient de chercher une compétence -2 (à cause des armes à 1/2 mains) | ||||
|  | ||||
| ## 12.0.41 - La loupe d'Astrobazzarh | ||||
| - On peut de nouveau effectuer des tirages cachés | ||||
| - Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence | ||||
|  | ||||
| ## 12.0.40 - Les mains d'Astrobazzarh | ||||
| - correction des attaques particulières en combat | ||||
| - correction de message sur les min/max liés aux modificateurs de races (s'applique uniquement sur la taille) | ||||
|  | ||||
| ## 12.0.39 - Les mains d'Astrobazzarh | ||||
| - les armes à 1 ou 2 mains fonctionnent dans les liens de jets de dés | ||||
| - commande `/jet` pour poster une demande de jet de dés | ||||
|  | ||||
| ## 12.0.38 - Les prévisions d'Astrobazzarh | ||||
| - Correction de modifications de personnages qui ne s'affichaient pas: | ||||
|   - changements d'endurance/vie/fatigue, transformé, ... | ||||
| - Migration des compétences "Ecriture" en "Écriture" dans les tâches, livres, oeuvres et méditations | ||||
| - Correction des jets de compétences de créatures | ||||
| - Premières préparations techniques pour le passage à Founry v13 | ||||
|   - liste des impacts d'un jet de dés (expérience, points de tâche, ...) | ||||
|   - utilisation de l'extension hbs pour tous les fichiers handlebars | ||||
|  | ||||
| ## 12.0.37 - Les enchantements d'Astrobazzarh | ||||
| - les potions ont un état, seules les potions liquides sont enchantables | ||||
| - les lancements de sorts du jour sont conservés jusqu'à chateau dormant | ||||
| - lorsqu'un joueur souhaite enchanter une potion, les sorts d'enchantements/purification/permanence doivent avoir été lancés auparavant | ||||
| - on peut enchanter des gemmes exactement comme des potions | ||||
|  | ||||
| ## 12.0.36 - L'alchimie d'Astrobazzarh | ||||
| - Nouveautés | ||||
|   - ajout d'un bouton pour enchanter les potions | ||||
|   - standardisation des boutons d'actions sur les items | ||||
|   - utilisations d'icones pour les actions de l'inventaire | ||||
| - Corrections: | ||||
|   - la commande /tmra sans paramètres fonctionne | ||||
|   - les jets d'encaissement depuis le tchat fonctionnent | ||||
|   - affichage de la vie/endurance en cas de blessures et remise à neuf | ||||
|   - les queues durant 12 heures ajoutées début Vaisseau ne durent plus 24 heures | ||||
| - Compendiums | ||||
|   - Corrections des remedes enchantables | ||||
|   - Corrections de descriptions pour proposer les jet de dés | ||||
|  | ||||
| ## 12.0.35 - La Solution d'Astrobazzarh | ||||
| - Fix problème d'initialisation des feuilles d'items | ||||
|  | ||||
| ## 12.0.34 - la tête d'Astrobazzarh | ||||
| - support de liens "jets de dés" | ||||
|   - on peut ajouter des liens "jet de dés" dans les journaux, descriptions, notes, maladresses, ... | ||||
|   - avec la syntaxe `@roll[...]` on peut ajouter le lien vers: | ||||
|     - un jet de caractéristique/compétence `@roll[carac/competence/difficulte]` / `@roll[carac/difficulte]` / `@roll[carac/competence]`  | ||||
|     - une formule foundry `@roll[2d6]` pour lancer 2d6  | ||||
|     - un jet de caractéristique/compétence `@roll[carac/competence/difficulte]` / `@roll[carac/difficulte]` / `@roll[carac/competence]` | ||||
|     - une formule foundry `@roll[2d6]` pour lancer 2d6 | ||||
|     - une manipulation alchimique `@roll[couleur vert-bleu]` | ||||
|   - les liens "jet avec caractéristiques" s'appliquent: | ||||
|     - à tous les tokens sélectionnés | ||||
| @@ -69,7 +177,7 @@ | ||||
|   - 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) | ||||
|   - on peut maintenant saisir et supprimer les bonus de cases de manière intuitive | ||||
|    | ||||
|  | ||||
| ## 12.0.23 - La bibliothèque d'Astrobazzarh | ||||
| - corrections mineures | ||||
|   - meilleure gestion de la parade des armes naturelles | ||||
| @@ -180,7 +288,7 @@ | ||||
|  | ||||
| ## 12.0.6 - Le bazar d'Astrobazzarh | ||||
| - 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 | ||||
|     propre contenu, ce qui empêche d'ouvrir la feuille d'acteur. | ||||
|   - un objet non-conteneur pouvait dans certains cas avoir un pseudo contenu | ||||
| @@ -188,7 +296,7 @@ | ||||
|     conteneur (et donc non affiché) | ||||
|   - vider les conteneurs supprime correctement toutes les informations liées | ||||
|     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é | ||||
| - Fix: restaurer la compatibilité Foundry 11 | ||||
|  | ||||
| @@ -283,7 +391,7 @@ | ||||
|  | ||||
| ## 11.2.9 - La barbe d'Akarlikarlikar | ||||
| - 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) | ||||
| - 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 | ||||
| @@ -403,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é | ||||
|   - 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 | ||||
|   - 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 | ||||
|   - le type de dégâts pour les attaques est toujours affiché | ||||
|   - le moral est indiqué avant l'icone d'appel au moral | ||||
| @@ -510,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é | ||||
|  | ||||
| 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; | ||||
|   } | ||||
| } | ||||
| @@ -44,13 +44,13 @@ export class ChatVente { | ||||
|     vente.nbLots = Math.max(0, vente.nbLots - quantite) | ||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||
|  | ||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); | ||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||
|     chatMessage.update({ content: html }); | ||||
|     chatMessage.render(true); | ||||
|   } | ||||
|  | ||||
|   static async displayAchatVente(vente) { | ||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); | ||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||
|     const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html)) | ||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||
|     await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, { | ||||
|   | ||||
| @@ -29,7 +29,7 @@ export class DialogItemAchat extends Dialog { | ||||
|     } | ||||
|  | ||||
|     DialogItemAchat.changeNombreLots(venteData, 1) | ||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData) | ||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.hbs`, venteData) | ||||
|     new DialogItemAchat(html, venteData).render(true) | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -20,7 +20,7 @@ export class DialogItemVente extends Dialog { | ||||
|       quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent, | ||||
|       isOwned:  item.parent, | ||||
|     } | ||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.html`, venteData); | ||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.hbs`, venteData); | ||||
|     return new DialogItemVente(venteData, html).render(true); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -12,13 +12,13 @@ import { RdDSheetUtility } from "./rdd-sheet-utility.js"; | ||||
| import { STATUSES } from "./settings/status-effects.js"; | ||||
| import { MAINS_DIRECTRICES } from "./actor.js"; | ||||
| import { RdDBaseActorReveSheet } from "./actor/base-actor-reve-sheet.js"; | ||||
| import { ITEM_TYPES, RdDItem } from "./item.js"; | ||||
| import { ITEM_TYPES } from "./constants.js"; | ||||
| import { RdDItem } from "./item.js"; | ||||
| import { RdDItemBlessure } from "./item/blessure.js"; | ||||
| import { RdDEmpoignade } from "./rdd-empoignade.js"; | ||||
| import { RdDBaseActorSangSheet } from "./actor/base-actor-sang-sheet.js"; | ||||
| import { RdDCoeur } from "./coeur/rdd-coeur.js"; | ||||
| import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js"; | ||||
| import { RdDItemRace } from "./item/race.js"; | ||||
| import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; | ||||
|  | ||||
| /* -------------------------------------------- */ | ||||
| @@ -30,7 +30,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.html", | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs", | ||||
|       width: 550, | ||||
|       showCompNiveauBase: false, | ||||
|       vueArchetype: false, | ||||
| @@ -126,80 +126,73 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|     }) | ||||
|  | ||||
|     this.html.find('.show-hide-competences').click(async event => { | ||||
|       this.options.showCompNiveauBase = !this.options.showCompNiveauBase; | ||||
|       this.render(true); | ||||
|       this.options.showCompNiveauBase = !this.options.showCompNiveauBase | ||||
|       this.render(true) | ||||
|     }); | ||||
|  | ||||
|     this.html.find('.button-tmr-visu').click(async event => this.actor.displayTMR("visu")) | ||||
|     this.html.find('.button-tmr-visu').click(async event => await this.actor.displayTMR("visu")) | ||||
|  | ||||
|     // Everything below here is only needed if the sheet is editable | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     this.html.find('.sheet-possession-attack').click(async event => { | ||||
|       const poss = RdDSheetUtility.getItem(event, this.actor) | ||||
|       this.actor.conjurerPossession(poss) | ||||
|       await this.actor.conjurerPossession(poss) | ||||
|     }) | ||||
|  | ||||
|     this.html.find('.subacteur-coeur-toggle a').click(async event => { | ||||
|       const subActorIdactorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||
|       const coeurNombre = $(event.currentTarget).data('numero-coeur') | ||||
|       RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) | ||||
|       await RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) | ||||
|     }) | ||||
|     this.html.find('.subacteur-tendre-moment').click(async event => { | ||||
|       const subActorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||
|       RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) | ||||
|       await RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) | ||||
|     }) | ||||
|     this.html.find('.subacteur-delete').click(async event => { | ||||
|       const li = RdDSheetUtility.getEventElement(event); | ||||
|       const subActorId = li.data("subactor-id"); | ||||
|       this.deleteSubActeur(subActorId, li); | ||||
|     }) | ||||
|     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => { | ||||
|       this.actor.updateCompteurValue("stress", parseInt(event.target.value)); | ||||
|     }); | ||||
|     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => { | ||||
|       this.actor.updateCompteurValue("experience", parseInt(event.target.value)); | ||||
|     }); | ||||
|     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => | ||||
|       await this.actor.updateCompteurValue("stress", parseInt(event.target.value)) | ||||
|     ); | ||||
|     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => | ||||
|       await this.actor.updateCompteurValue("experience", parseInt(event.target.value)) | ||||
|     ); | ||||
|  | ||||
|     this.html.find('.creer-tache').click(async event => this.createEmptyTache()); | ||||
|     this.html.find('.creer-une-oeuvre').click(async event => this.selectTypeOeuvreToCreate()); | ||||
|     this.html.find('.creer-tache-blessure-legere').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); | ||||
|     this.html.find('.creer-tache-blessure-grave').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); | ||||
|     this.html.find('.creer-tache-blessure-critique').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); | ||||
|     this.html.find('.creer-tache').click(async event => await this.createEmptyTache()); | ||||
|     this.html.find('.creer-une-oeuvre').click(async event => await this.selectTypeOeuvreToCreate()); | ||||
|     this.html.find('.creer-tache-blessure-legere').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); | ||||
|     this.html.find('.creer-tache-blessure-grave').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); | ||||
|     this.html.find('.creer-tache-blessure-critique').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); | ||||
|  | ||||
|     this.html.find('.blessure-premierssoins-done').change(async event => { | ||||
|       const blessure = this.getBlessure(event); | ||||
|       await blessure?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); | ||||
|       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); | ||||
|     }); | ||||
|     this.html.find('.blessure-soinscomplets-done').change(async event => { | ||||
|       const blessure = this.getBlessure(event); | ||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) | ||||
|       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) | ||||
|     }); | ||||
|     this.html.find('.blessure-premierssoins-bonus').change(async event => { | ||||
|       const blessure = this.getBlessure(event); | ||||
|       await blessure?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) | ||||
|       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) | ||||
|     }); | ||||
|     this.html.find('.blessure-soinscomplets-bonus').change(async event => { | ||||
|       const blessure = this.getBlessure(event); | ||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) | ||||
|       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) | ||||
|     }); | ||||
|  | ||||
|     // Equip Inventory Item | ||||
|     this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle')) | ||||
|     this.html.find('.roll-chance-actuelle').click(async event => await this.actor.rollCarac('chance-actuelle')) | ||||
|     this.html.find('.button-appel-chance').click(async event => await this.actor.rollAppelChance()) | ||||
|  | ||||
|     this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance()) | ||||
|     this.html.find('[name="jet-astrologie"]').click(async event => await this.actor.astrologieNombresAstraux()) | ||||
|     this.html.find('.action-tache').click(async event => await this.actor.rollTache(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.meditation-label a').click(async event => await this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) | ||||
|  | ||||
|     this.html.find('[name="jet-astrologie"]').click(async event => this.actor.astrologieNombresAstraux()) | ||||
|     this.html.find('.tache-label a').click(async event => this.actor.rollTache(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.meditation-label a').click(async event => this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) | ||||
|  | ||||
|     this.html.find('.chant-label a').click(async event => this.actor.rollChant(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.danse-label a').click(async event => this.actor.rollDanse(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.musique-label a').click(async event => this.actor.rollMusique(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.oeuvre-label a').click(async event => this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.jeu-label a').click(async event => this.actor.rollJeu(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.recettecuisine-label a').click(async event => this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-chant').click(async event => await this.actor.rollChant(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-danse').click(async event => await this.actor.rollDanse(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-musique').click(async event => await this.actor.rollMusique(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-oeuvre').click(async event => await this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-jeu').click(async event => await this.actor.rollJeu(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.action-recettecuisine').click(async event => await this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) | ||||
|  | ||||
|     this.html.find('.description-aleatoire').click(async event => new AppPersonnageAleatoire(this.actor).render(true)) | ||||
|     if (game.user.isGM) { | ||||
| @@ -215,17 +208,16 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|         await this.actor.deleteExperienceLog(0, key + 1); | ||||
|       }); | ||||
|       // Boutons spéciaux MJs | ||||
|       this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) | ||||
|       this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) | ||||
|       this.html.find('.sortreserve-add').click(async event => this.actor.addSortReserve(RdDSheetUtility.getItemId(event))) | ||||
|       this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) | ||||
|       this.html.find('.forcer-tmr-aleatoire').click(async event => await this.actor.reinsertionAleatoire("Action MJ")) | ||||
|       this.html.find('.don-de-haut-reve').click(async event => await this.actor.addDonDeHautReve()) | ||||
|       this.html.find('.afficher-tmr').click(async event => await this.actor.changeTMRVisible()) | ||||
|     } | ||||
|  | ||||
|     // Points de reve actuel | ||||
|     this.html.find('.roll-reve-actuel').click(async event => this.actor.rollCarac('reve-actuel', {resistance:true})) | ||||
|     this.html.find('.empoignade-label a').click(async event => RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) | ||||
|     this.html.find('.roll-reve-actuel').click(async event => await this.actor.rollCarac('reve-actuel', { resistance: true })) | ||||
|     this.html.find('.action-empoignade').click(async event => await RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) | ||||
|  | ||||
|     this.html.find('.roll-arme').click(async event => this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) | ||||
|     this.html.find('.roll-arme').click(async event => await this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) | ||||
|  | ||||
|     // Initiative pour l'arme | ||||
|     this.html.find('.roll-init-arme').click(async event => { | ||||
| @@ -238,30 +230,34 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|     }) | ||||
|     // Display TMR | ||||
|  | ||||
|     this.html.find('.button-tmr').click(async event => this.actor.displayTMR("normal")) | ||||
|     this.html.find('.button-tmr-rapide').click(async event => this.actor.displayTMR("rapide")) | ||||
|     this.html.find('.button-tmr').click(async event => await this.actor.displayTMR("normal")) | ||||
|     this.html.find('.button-tmr-rapide').click(async event => await this.actor.displayTMR("rapide")) | ||||
|  | ||||
|     this.html.find('.button-repos').click(async event => await this.actor.repos()) | ||||
|  | ||||
|     this.html.find('.carac-xp-augmenter').click(async event => this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) | ||||
|     this.html.find('.competence-xp-augmenter').click(async event => this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.competence-stress-augmenter').click(async event => this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.carac-xp-augmenter').click(async event => await this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) | ||||
|     this.html.find('.competence-xp-augmenter').click(async event => await this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) | ||||
|     this.html.find('.competence-stress-augmenter').click(async event =>{ | ||||
|       await this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event)) | ||||
|       this.render(true) | ||||
|     }  | ||||
|   ) | ||||
|  | ||||
|     if (this.options.vueDetaillee) { | ||||
|       // On carac change | ||||
|       this.html.find('input.carac-xp').change(async event => { | ||||
|         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", ""); | ||||
|         this.actor.updateCaracXP(caracName, parseInt(event.target.value)); | ||||
|       }); | ||||
|         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", "") | ||||
|         await this.actor.updateCaracXP(caracName, parseInt(event.target.value)) | ||||
|       }) | ||||
|       // On competence xp change | ||||
|       this.html.find('input.competence-xp').change(async event => { | ||||
|         let compName = event.currentTarget.attributes.compname.value; | ||||
|         this.actor.updateCompetenceXP(compName, parseInt(event.target.value)); | ||||
|       }); | ||||
|         let compName = event.currentTarget.attributes.compname.value | ||||
|         await this.actor.updateCompetenceXP(compName, parseInt(event.target.value)) | ||||
|       }) | ||||
|       this.html.find('input.competence-xp-sort').change(async event => { | ||||
|         let compName = event.currentTarget.attributes.compname.value; | ||||
|         this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); | ||||
|       }); | ||||
|         let compName = event.currentTarget.attributes.compname.value | ||||
|         await this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)) | ||||
|       }) | ||||
|  | ||||
|       this.html.find('.toggle-archetype').click(async event => { | ||||
|         this.options.vueArchetype = !this.options.vueArchetype; | ||||
| @@ -270,27 +266,27 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|       // On competence archetype change | ||||
|       this.html.find('.competence-archetype').change(async event => { | ||||
|         let compName = event.currentTarget.attributes.compname.value; | ||||
|         this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); | ||||
|         await this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); | ||||
|       }); | ||||
|       this.html.find('.nouvelle-incarnation').click(async event => this.actor.nouvelleIncarnation()) | ||||
|       this.html.find('.nouvelle-incarnation').click(async event => await this.actor.nouvelleIncarnation()) | ||||
|     } | ||||
|  | ||||
|     // On pts de reve change | ||||
|     this.html.find('.pointsreve-value').change(async event => this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) | ||||
|     this.html.find('.seuil-reve-value').change(async event => this.actor.setPointsDeSeuil(event.currentTarget.value)) | ||||
|     this.html.find('.pointsreve-value').change(async event => await this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) | ||||
|     this.html.find('.seuil-reve-value').change(async event => await this.actor.setPointsDeSeuil(event.currentTarget.value)) | ||||
|  | ||||
|     this.html.find('.stress-test').click(async event => this.actor.transformerStress()) | ||||
|     this.html.find('.moral-malheureux').click(async event => this.actor.jetDeMoral('malheureuse')) | ||||
|     this.html.find('.moral-neutre').click(async event => this.actor.jetDeMoral('neutre')) | ||||
|     this.html.find('.moral-heureux').click(async event => this.actor.jetDeMoral('heureuse')) | ||||
|     this.html.find('.button-ethylisme').click(async event => this.actor.jetEthylisme()) | ||||
|     this.html.find('.stress-test').click(async event => await this.actor.transformerStress()) | ||||
|     this.html.find('.moral-malheureux').click(async event => await this.actor.jetDeMoral('malheureuse')) | ||||
|     this.html.find('.moral-neutre').click(async event => await this.actor.jetDeMoral('neutre')) | ||||
|     this.html.find('.moral-heureux').click(async event => await this.actor.jetDeMoral('heureuse')) | ||||
|     this.html.find('.button-ethylisme').click(async event => await this.actor.jetEthylisme()) | ||||
|  | ||||
|     this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1)) | ||||
|     this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1)) | ||||
|     this.html.find('.chance-actuelle-plus').click(async event => this.actor.chanceActuelleIncDec(1)) | ||||
|     this.html.find('.chance-actuelle-moins').click(async event => this.actor.chanceActuelleIncDec(-1)) | ||||
|     this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1)) | ||||
|     this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1)) | ||||
|     this.html.find('.ptreve-actuel-plus').click(async event => await this.actor.reveActuelIncDec(1)) | ||||
|     this.html.find('.ptreve-actuel-moins').click(async event => await this.actor.reveActuelIncDec(-1)) | ||||
|     this.html.find('.chance-actuelle-plus').click(async event => await this.actor.chanceActuelleIncDec(1)) | ||||
|     this.html.find('.chance-actuelle-moins').click(async event => await this.actor.chanceActuelleIncDec(-1)) | ||||
|     this.html.find('.fatigue-plus').click(async event => await this.actor.santeIncDec("fatigue", 1)) | ||||
|     this.html.find('.fatigue-moins').click(async event => await this.actor.santeIncDec("fatigue", -1)) | ||||
|   } | ||||
|  | ||||
|   getBlessure(event) { | ||||
| @@ -327,7 +323,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | ||||
|   /* -------------------------------------------- */ | ||||
|   async selectTypeOeuvreToCreate() { | ||||
|     let types = RdDItem.getTypesOeuvres(); | ||||
|     let content = `<span class="competence-label">Selectionnez le type d'oeuvre</span><select class="item-type">`; | ||||
|     let content = `<span class="generic-label">Selectionnez le type d'oeuvre</span><select class="item-type">`; | ||||
|     for (let typeName of types) { | ||||
|       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` | ||||
|     } | ||||
|   | ||||
							
								
								
									
										564
									
								
								module/actor.js
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,6 @@ | ||||
| import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"; | ||||
| import { Grammar } from "../grammar.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | ||||
| import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | ||||
|  | ||||
| @@ -26,16 +26,17 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | ||||
|     // Everything below here is only needed if the sheet is editable | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     this.html.find('.button-encaissement').click(async event => this.actor.encaisser()) | ||||
|     this.html.find('.button-encaissement').click(async event => await this.actor.encaisser()) | ||||
|     this.html.find('.roll-carac').click(async event => { | ||||
|       this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value))}) | ||||
|     this.html.find('.roll-competence').click(async event => this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); | ||||
|     this.html.find('.endurance-plus').click(async event => this.actor.santeIncDec("endurance", 1)); | ||||
|     this.html.find('.endurance-moins').click(async event => this.actor.santeIncDec("endurance", -1)); | ||||
|       await this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value)) | ||||
|     }) | ||||
|     this.html.find('.roll-competence').click(async event => await this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); | ||||
|     this.html.find('.endurance-plus').click(async event => await this.actor.santeIncDec("endurance", 1)); | ||||
|     this.html.find('.endurance-moins').click(async event => await this.actor.santeIncDec("endurance", -1)); | ||||
|  | ||||
|     if (game.user.isGM) { | ||||
|       this.html.find('.button-remise-a-neuf').click(async event => this.actor.remiseANeuf()) | ||||
|       this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); | ||||
|       this.html.find('.button-remise-a-neuf').click(async event => await this.actor.remiseANeuf()) | ||||
|       this.html.find('.delete-active-effect').click(async event => await this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); | ||||
|       this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects()); | ||||
|     } | ||||
|     this.html.find('.competence-add').click(async event => | ||||
| @@ -55,14 +56,13 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | ||||
|     if (this.options.vueDetaillee) { | ||||
|       // On carac change | ||||
|       this.html.find('.carac-value').change(async event => { | ||||
|         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", ""); | ||||
|         this.actor.updateCarac(caracName, parseInt(event.target.value)); | ||||
|         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "") | ||||
|         await this.actor.updateCarac(caracName, parseInt(event.target.value)) | ||||
|       }); | ||||
|       // On competence change | ||||
|       this.html.find('.competence-value').change(async event => { | ||||
|         let compName = event.currentTarget.attributes.compname.value; | ||||
|         //console.log("Competence changed :", compName); | ||||
|         this.actor.updateCompetence(compName, parseInt(event.target.value)); | ||||
|         let compName = event.currentTarget.attributes.compname.value | ||||
|         await this.actor.updateCompetence(compName, parseInt(event.target.value)) | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import { RdDRoll } from "../rdd-roll.js"; | ||||
| import { RdDUtility } from "../rdd-utility.js"; | ||||
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | ||||
| import { RdDBaseActor } from "./base-actor.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { RdDItemCompetence } from "../item-competence.js"; | ||||
| import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; | ||||
| import { RdDItemArme } from "../item-arme.js"; | ||||
| @@ -15,6 +15,7 @@ import { StatusEffects } from "../settings/status-effects.js"; | ||||
| import { Targets } from "../targets.js"; | ||||
| import { RdDConfirm } from "../rdd-confirm.js"; | ||||
| import { RdDCarac } from "../rdd-carac.js"; | ||||
| import { RdDRollResult } from "../rdd-roll-result.js"; | ||||
|  | ||||
| import { ChatUtility } from "../chat-utility.js"; | ||||
| import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js"; | ||||
| @@ -268,30 +269,17 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   async openRollDialog({ name, label, template, rollData, callbackAction }) { | ||||
|   async openRollDialog({ name, label, template, rollData, callbacks }) { | ||||
|     const dialog = await RdDRoll.create(this, rollData, | ||||
|       { html: template, close: async html => await this._onCloseRollDialog(html) }, | ||||
|       { | ||||
|         name: name, | ||||
|         label: label, | ||||
|         callbacks: [ | ||||
|           this.createCallbackExperience(), | ||||
|           this.createCallbackAppelAuMoral(), | ||||
|           { action: callbackAction } | ||||
|         ] | ||||
|       }); | ||||
|     dialog.render(true); | ||||
|       { name: name, label: label, callbacks: [this.createCallbackExperience(), this.createCallbackAppelAuMoral()].concat(callbacks) }) | ||||
|     dialog.render(true) | ||||
|     return dialog | ||||
|   } | ||||
|  | ||||
|   createEmptyCallback() { | ||||
|     return { | ||||
|       condition: r => false, | ||||
|       action: r => { } | ||||
|     }; | ||||
|   } | ||||
|   createCallbackExperience() { return this.createEmptyCallback(); } | ||||
|   createCallbackAppelAuMoral() { return this.createEmptyCallback(); } | ||||
|   createCallbackExperience() { return { action: r => { } } } | ||||
|   createCallbackAppelAuMoral() { return { action: r => { } } } | ||||
|  | ||||
|   async _onCloseRollDialog(html) { } | ||||
|  | ||||
|   async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { | ||||
| @@ -299,8 +287,8 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|     const competence = this.getCompetence(compName); | ||||
|     await this.openRollDialog({ | ||||
|       name: 'jet-competence', | ||||
|       label: competence? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`, | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', | ||||
|       label: competence ? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`, | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||
|       rollData: { | ||||
|         alias: this.getAlias(), | ||||
|         carac: this.system.carac, | ||||
| @@ -310,7 +298,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|         competence: competence, | ||||
|         show: { title: options?.title ?? '' } | ||||
|       }, | ||||
|       callbackAction: r => this.$onRollCompetence(r, options) | ||||
|       callbacks: [async r => this.$onRollCompetence(r, options)] | ||||
|     }); | ||||
|   } | ||||
|   /** | ||||
| @@ -353,16 +341,14 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|     const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined) | ||||
|  | ||||
|     await this.openRollDialog({ | ||||
|       name: `jet-${this.id}`, | ||||
|       label: `Jet de ${this.getAlias()}`, | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.html', | ||||
|       rollData: { | ||||
|         alias: this.getAlias(), | ||||
|         carac: carac, | ||||
|         selectedCarac: carac[selectedCaracName], | ||||
|         selectedCaracName: selectedCaracName, | ||||
|         competences: this.itemTypes['competence'] | ||||
|       }, | ||||
|       callbackAction: r => this.$onRollCaracResult(r) | ||||
|       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||
|     }) | ||||
|   } | ||||
|   /* -------------------------------------------- */ | ||||
| @@ -373,32 +359,38 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|     foundry.utils.mergeObject(options, { resistance: false, diff: 0 }, { overwrite: false }) | ||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||
|     let selectedCarac = this.getCaracByName(caracName) | ||||
|     console.log("selectedCarac", selectedCarac) | ||||
|     const title = 'Jet ' + Grammar.apostrophe('de', selectedCarac.label); | ||||
|     const jetResistance = options.resistance ? caracName : undefined; | ||||
|     await this.openRollDialog({ | ||||
|       name: 'jet-' + caracName, | ||||
|       label: 'Jet ' + Grammar.apostrophe('de', selectedCarac.label), | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', | ||||
|       label: title, | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.hbs', | ||||
|       rollData: { | ||||
|         alias: this.getAlias(), | ||||
|         selectedCarac: selectedCarac, | ||||
|         competences: this.itemTypes['competence'], | ||||
|         diffLibre: options.diff ?? 0, | ||||
|         jetResistance: options.resistance ? caracName : undefined | ||||
|         jetResistance: jetResistance | ||||
|       }, | ||||
|       callbackAction: r => this.$onRollCaracResult(r) | ||||
|       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   async $onRollCaracResult(rollData) { | ||||
|     // Final chat message | ||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-general.html'); | ||||
|     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-general.hbs'); | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) { | ||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||
|     const competence = this.getCompetence(idOrName); | ||||
|     let rollData = { carac: this.system.carac, competence: competence, arme: options.arme } | ||||
|     let rollData = { | ||||
|       carac: this.system.carac, | ||||
|       competence: competence, | ||||
|       arme: options.arme | ||||
|     } | ||||
|     if (competence.type == ITEM_TYPES.competencecreature) { | ||||
|       const token = RdDUtility.getSelectedToken(this) | ||||
|       const arme = RdDItemCompetenceCreature.armeCreature(competence) | ||||
| @@ -416,18 +408,18 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|       // Transformer la competence de créature | ||||
|       RdDItemCompetenceCreature.setRollDataCreature(rollData) | ||||
|     } | ||||
|  | ||||
|     const dialogLabel = 'Jet ' + Grammar.apostrophe('de', competence.name); | ||||
|     await this.openRollDialog({ | ||||
|       name: 'jet-competence', | ||||
|       label: 'Jet ' + Grammar.apostrophe('de', competence.name), | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', | ||||
|       label: dialogLabel, | ||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||
|       rollData: rollData, | ||||
|       callbackAction: r => this.$onRollCompetence(r, options) | ||||
|       callbacks: [{ action: r => this.$onRollCompetence(r, options) }] | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   async $onRollCompetence(rollData, options) { | ||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html') | ||||
|     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-competence.hbs') | ||||
|     if (options?.onRollAutomate) { | ||||
|       options.onRollAutomate(rollData); | ||||
|     } | ||||
| @@ -527,7 +519,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|     await ChatUtility.createChatWithRollMode( | ||||
|       { | ||||
|         roll: encaissement.roll, | ||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) | ||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||
|       }, | ||||
|       this | ||||
|     ) | ||||
| @@ -537,7 +529,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|       encaissement.isGM = true | ||||
|       ChatMessage.create({ | ||||
|         whisper: ChatUtility.getGMs(), | ||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) | ||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| @@ -562,10 +554,8 @@ export class RdDBaseActorReve extends RdDBaseActor { | ||||
|       await entite.setEntiteReveAccordee(this); | ||||
|     } | ||||
|  | ||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.html'); | ||||
|     if (rolled.isPart) { | ||||
|       await this.appliquerAjoutExperience(rollData, true); | ||||
|     } | ||||
|     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.hbs'); | ||||
|     await this.appliquerAjoutExperience(rollData, true); | ||||
|     return rolled.isSuccess; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -17,20 +17,20 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet { | ||||
|     // Everything below here is only needed if the sheet is editable | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     this.html.find('.creer-blessure-legere').click(async event => RdDItemBlessure.createBlessure(this.actor, 2)); | ||||
|     this.html.find('.creer-blessure-grave').click(async event => RdDItemBlessure.createBlessure(this.actor, 4)); | ||||
|     this.html.find('.creer-blessure-critique').click(async event => RdDItemBlessure.createBlessure(this.actor, 6)); | ||||
|     this.html.find('.creer-blessure-legere').click(async event => await RdDItemBlessure.createBlessure(this.actor, 2)); | ||||
|     this.html.find('.creer-blessure-grave').click(async event => await RdDItemBlessure.createBlessure(this.actor, 4)); | ||||
|     this.html.find('.creer-blessure-critique').click(async event => await RdDItemBlessure.createBlessure(this.actor, 6)); | ||||
|  | ||||
|     this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 0)); | ||||
|     this.html.find('.subir-blessure-legere').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2)); | ||||
|     this.html.find('.subir-blessure-grave').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 4)); | ||||
|     this.html.find('.subir-blessure-critique').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 6)); | ||||
|     this.html.find('.subir-blessure-contusion').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 0)); | ||||
|     this.html.find('.subir-blessure-legere').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 2)); | ||||
|     this.html.find('.subir-blessure-grave').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 4)); | ||||
|     this.html.find('.subir-blessure-critique').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 6)); | ||||
|  | ||||
|     this.html.find('.jet-vie').click(async event => this.actor.jetDeVie()) | ||||
|     this.html.find('.jet-vie').click(async event => await this.actor.jetDeVie()) | ||||
|     this.html.find('.jet-endurance').click(async event => await this.jetEndurance()) | ||||
|  | ||||
|     this.html.find('.vie-plus').click(async event => this.actor.santeIncDec("vie", 1)) | ||||
|     this.html.find('.vie-moins').click(async event => this.actor.santeIncDec("vie", -1)) | ||||
|     this.html.find('.vie-plus').click(async event => await this.actor.santeIncDec("vie", 1)) | ||||
|     this.html.find('.vie-moins').click(async event => await this.actor.santeIncDec("vie", -1)) | ||||
|   } | ||||
|  | ||||
|   async jetEndurance() { | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import { RdDUtility } from "../rdd-utility.js"; | ||||
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"; | ||||
| import { STATUSES } from "../settings/status-effects.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { RdDBaseActorReve } from "./base-actor-reve.js"; | ||||
| import { RdDDice } from "../rdd-dice.js"; | ||||
| import { RdDItemBlessure } from "../item/blessure.js"; | ||||
| @@ -39,7 +39,12 @@ export class RdDBaseActorSang extends RdDBaseActorReve { | ||||
|     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 } | ||||
|  | ||||
|   malusFatigue() { | ||||
|   | ||||
| @@ -3,20 +3,23 @@ import { Misc } from "../misc.js"; | ||||
| import { DialogSplitItem } from "../dialog-split-item.js"; | ||||
| import { RdDSheetUtility } from "../rdd-sheet-utility.js"; | ||||
| import { Monnaie } from "../item-monnaie.js"; | ||||
| import { RdDItem, ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { RdDItem } from "../item.js"; | ||||
| import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; | ||||
| import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"; | ||||
| import { ItemAction } from "../item/item-actions.js"; | ||||
|  | ||||
| /* -------------------------------------------- */ | ||||
| /** | ||||
|  * Extend the basic ActorSheet with some very simple modifications | ||||
|  * @extends {ActorSheet} | ||||
|  */ | ||||
| export class RdDBaseActorSheet extends ActorSheet { | ||||
| export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet { | ||||
|   static _warnedAppV1 = true | ||||
|  | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(ActorSheet.defaultOptions, { | ||||
|     return foundry.utils.mergeObject(foundry.appv1.sheets.ActorSheet.defaultOptions, { | ||||
|       classes: ["rdd", "sheet", "actor"], | ||||
|       tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }], | ||||
|       dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }], | ||||
| @@ -26,7 +29,7 @@ export class RdDBaseActorSheet extends ActorSheet { | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   async getData() { | ||||
|     Monnaie.validerMonnaies(this.actor.itemTypes['monnaie']); | ||||
|     Monnaie.validerMonnaies(this.actor) | ||||
|  | ||||
|     this.actor.computeEtatGeneral(); | ||||
|     let formData = { | ||||
| @@ -42,7 +45,7 @@ export class RdDBaseActorSheet extends ActorSheet { | ||||
|       effects: this.actor.effects | ||||
|     } | ||||
|  | ||||
|     RdDBaseActorSheet.filterItemsPerTypeForSheet(formData, this.actor.itemTypes); | ||||
|     RdDUtility.filterItemsPerTypeForSheet(formData, this.actor.itemTypes); | ||||
|     formData.calc = { | ||||
|       fortune: Monnaie.toSolsDeniers(this.actor.getFortune()), | ||||
|       prixTotalEquipement: this.actor.computePrixTotalEquipement(), | ||||
| @@ -54,6 +57,7 @@ export class RdDBaseActorSheet extends ActorSheet { | ||||
|     formData.conteneurs = RdDUtility.conteneursRacine(formData.conteneurs); | ||||
|     formData.competences.filter(it => it.type == ITEM_TYPES.competencecreature) | ||||
|       .forEach(it => it.isdommages = RdDItemCompetenceCreature.isDommages(it)) | ||||
|  | ||||
|     return formData; | ||||
|   } | ||||
|  | ||||
| @@ -77,109 +81,51 @@ export class RdDBaseActorSheet extends ActorSheet { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   static filterItemsPerTypeForSheet(formData, itemTypes) { | ||||
|     formData.blessures = Misc.arrayOrEmpty(itemTypes['blessure']); | ||||
|     formData.recettescuisine = Misc.arrayOrEmpty(itemTypes['recettecuisine']); | ||||
|     formData.recettesAlchimiques = Misc.arrayOrEmpty(itemTypes['recettealchimique']); | ||||
|     formData.maladies = Misc.arrayOrEmpty(itemTypes['maladie']); | ||||
|     formData.poisons = Misc.arrayOrEmpty(itemTypes['poison']); | ||||
|     formData.possessions = Misc.arrayOrEmpty(itemTypes['possession']); | ||||
|     formData.maladiesPoisons = formData.maladies.concat(formData.poisons); | ||||
|     formData.competences = (itemTypes['competence'] ?? []).concat(itemTypes['competencecreature'] ?? []); | ||||
|     formData.sortsReserve = Misc.arrayOrEmpty(itemTypes['sortreserve']); | ||||
|  | ||||
|     formData.sorts = Misc.arrayOrEmpty(itemTypes['sort']); | ||||
|     formData.rencontres = Misc.arrayOrEmpty(itemTypes['rencontre']); | ||||
|     formData.casestmr = Misc.arrayOrEmpty(itemTypes['casetmr']); | ||||
|     formData.signesdraconiques = Misc.arrayOrEmpty(itemTypes['signedraconique']); | ||||
|     formData.queues = Misc.arrayOrEmpty(itemTypes['queue']); | ||||
|     formData.souffles = Misc.arrayOrEmpty(itemTypes['souffle']); | ||||
|     formData.ombres = Misc.arrayOrEmpty(itemTypes['ombre']); | ||||
|     formData.tetes = Misc.arrayOrEmpty(itemTypes['tete']); | ||||
|     formData.taches = Misc.arrayOrEmpty(itemTypes['tache']); | ||||
|     formData.meditations = Misc.arrayOrEmpty(itemTypes['meditation']); | ||||
|     formData.chants = Misc.arrayOrEmpty(itemTypes['chant']); | ||||
|     formData.danses = Misc.arrayOrEmpty(itemTypes['danse']); | ||||
|     formData.musiques = Misc.arrayOrEmpty(itemTypes['musique']); | ||||
|     formData.oeuvres = Misc.arrayOrEmpty(itemTypes['oeuvre']); | ||||
|     formData.jeux = Misc.arrayOrEmpty(itemTypes['jeu']); | ||||
|  | ||||
|     formData.services = Misc.arrayOrEmpty(itemTypes['service']); | ||||
|     formData.conteneurs = Misc.arrayOrEmpty(itemTypes['conteneur']); | ||||
|     formData.materiel = Misc.arrayOrEmpty(itemTypes['objet']); | ||||
|     formData.armes = Misc.arrayOrEmpty(itemTypes['arme']); | ||||
|     formData.armures = Misc.arrayOrEmpty(itemTypes['armure']); | ||||
|     formData.munitions = Misc.arrayOrEmpty(itemTypes['munition']); | ||||
|     formData.livres = Misc.arrayOrEmpty(itemTypes['livre']); | ||||
|     formData.potions = Misc.arrayOrEmpty(itemTypes['potion']); | ||||
|     formData.plantes = Misc.arrayOrEmpty(itemTypes['plante']); | ||||
|     formData.ingredients = Misc.arrayOrEmpty(itemTypes['ingredient']); | ||||
|     formData.faunes = Misc.arrayOrEmpty(itemTypes['faune']); | ||||
|     formData.herbes = Misc.arrayOrEmpty(itemTypes['herbe']); | ||||
|     formData.nourritureboissons = Misc.arrayOrEmpty(itemTypes['nourritureboisson']); | ||||
|     formData.gemmes = Misc.arrayOrEmpty(itemTypes['gemme']); | ||||
|     formData.monnaies = Misc.arrayOrEmpty(itemTypes['monnaie']).sort(Monnaie.triValeurEntiere()); | ||||
|     formData.objets = Misc.arrayOrEmpty(itemTypes['objet']) | ||||
|  | ||||
|     formData.inventaires = RdDItem.getItemTypesInventaire('all') | ||||
|       .map(t => Misc.arrayOrEmpty(itemTypes[t])) | ||||
|       .reduce((a, b) => a.concat(b), []) | ||||
|       .sort(Misc.ascending(it => it.name)); | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */  /** @override */ | ||||
|   activateListeners(html) { | ||||
|     super.activateListeners(html); | ||||
|     this.html = html; | ||||
|  | ||||
|     this.html.find('.actionItem').click(async event => await ItemAction.onActionItem(event, this.actor, this.options)) | ||||
|     this.html.find('.item-edit').click(async event => await this.itemActionEdit(event)) | ||||
|     this.html.find('.conteneur-name a').click(async event => { | ||||
|       RdDUtility.toggleAfficheContenu(this.getItemId(event)); | ||||
|       this.render(true); | ||||
|     }); | ||||
|     this.html.find('.actor-montrer').click(async event => this.actor.postActorToChat()); | ||||
|     this.html.find('.item-edit').click(async event => this.getItem(event)?.sheet.render(true)) | ||||
|     this.html.find('.item-montrer').click(async event => this.getItem(event)?.postItemToChat()); | ||||
|       RdDUtility.toggleAfficheContenu(this.getItemId(event)) | ||||
|       this.render(true) | ||||
|     }) | ||||
|  | ||||
|     this.html.find('.actor-montrer').click(async event => await this.actor.postActorToChat()); | ||||
|  | ||||
|     this.html.find('.recherche') | ||||
|       .each((index, field) => { | ||||
|         this._rechercheSelectArea(field); | ||||
|       }) | ||||
|       .keyup(async event => this._rechercherKeyup(event)) | ||||
|       .change(async event => this._rechercherKeyup(event)); | ||||
|     this.html.find('.recherche').prop("disabled", false); | ||||
|       .change(async event => this._rechercherKeyup(event)) | ||||
|  | ||||
|     this.html.find('.recherche').prop("disabled", false) | ||||
|  | ||||
|     // Everything below here is only needed if the sheet is editable | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     this.html.find('.item-action').click(async event => { | ||||
|       const item = RdDSheetUtility.getItem(event, this.actor); | ||||
|       item?.actionPrincipale(this.actor, async () => this.render()) | ||||
|     }); | ||||
|     this.html.find('.item-equip-armure').click(async event => await this.actor.equiperObjet(this.getItem(event))) | ||||
|     this.html.find('.item-delete').click(async event => await RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor)); | ||||
|     this.html.find('.item-quantite-plus').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); | ||||
|     this.html.find('.item-quantite-moins').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); | ||||
|  | ||||
|  | ||||
|     this.html.find('.item-split').click(async event => { | ||||
|       const item = this.getItem(event); | ||||
|       RdDSheetUtility.splitItem(item, this.actor); | ||||
|     }); | ||||
|     this.html.find('.item-quantite-plus').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); | ||||
|     this.html.find('.item-quantite-moins').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); | ||||
|     this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this, this.getItem(event))); | ||||
|     this.html.find('.item-vendre').click(async event => this.vendre(this.getItem(event))); | ||||
|  | ||||
|     this.html.find('.creer-un-objet').click(async event => { | ||||
|       this.selectObjetTypeToCreate(); | ||||
|     }); | ||||
|     this.html.find('.nettoyer-conteneurs').click(async event => { | ||||
|       this.actor.nettoyerConteneurs(); | ||||
|     }); | ||||
|     this.html.find('.creer-un-objet').click(async event => await this.selectObjetTypeToCreate()) | ||||
|     this.html.find('.nettoyer-conteneurs').click(async event => await this.actor.nettoyerConteneurs()) | ||||
|  | ||||
|     this.html.find('.vue-detaillee').click(async event => { | ||||
|       this.options.vueDetaillee = !this.options.vueDetaillee; | ||||
|       this.render(true); | ||||
|       this.options.vueDetaillee = !this.options.vueDetaillee | ||||
|       this.render(true) | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   itemActionEdit(event) { | ||||
|     const item = this.getItem(event); | ||||
|     return item?.sheet.render(true); | ||||
|   } | ||||
|  | ||||
|   _rechercherKeyup(event) { | ||||
|     const currentTarget = event.currentTarget; | ||||
|     const nouvelleRecherche = this._optionRecherche(currentTarget); | ||||
| @@ -246,7 +192,7 @@ export class RdDBaseActorSheet extends ActorSheet { | ||||
|   /* -------------------------------------------- */ | ||||
|   async selectObjetTypeToCreate() { | ||||
|     let types = this.getTypesInventaire().sort(Misc.ascending(type => Misc.typeName('Item', type))); | ||||
|     let content = `<span class="competence-label">Selectionnez le type d'équipement</span><select class="item-type">`; | ||||
|     let content = `<span class="generic-label">Selectionnez le type d'équipement</span><select class="item-type">`; | ||||
|     for (let typeName of types) { | ||||
|       content += `<option value="${typeName}">${Misc.typeName('Item', typeName)}</option>` | ||||
|     } | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import { ChatUtility } from "../chat-utility.js"; | ||||
| import { SYSTEM_SOCKET_ID } from "../constants.js"; | ||||
| import { Grammar } from "../grammar.js"; | ||||
| import { Monnaie } from "../item-monnaie.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { Misc } from "../misc.js"; | ||||
| import { RdDAudio } from "../rdd-audio.js"; | ||||
| import { RdDConfirm } from "../rdd-confirm.js"; | ||||
| @@ -244,16 +244,19 @@ export class RdDBaseActor extends Actor { | ||||
|   async onUpdateActor(update, options, actorId) { } | ||||
|   async onDeleteItem(item, options, id) { | ||||
|     if (item.isInventaire()) { | ||||
|       this._removeItemFromConteneur(item) | ||||
|       await this._removeItemFromConteneur(item) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   _removeItemFromConteneur(item) { | ||||
|     this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) | ||||
|       .forEach(conteneur => { | ||||
|         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id); | ||||
|         conteneur.update({ 'system.contenu': nouveauContenu }); | ||||
|       }); | ||||
|   async _removeItemFromConteneur(item) { | ||||
|     const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) | ||||
|       .map(conteneur => { | ||||
|         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id) | ||||
|         return { _id: conteneur.id, 'system.contenu': nouveauContenu } | ||||
|       }) | ||||
|     if (updates.length > 0) { | ||||
|       await this.updateEmbeddedDocuments('Item', updates) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   async onTimeChanging(oldTimestamp, newTimestamp) { | ||||
| @@ -414,7 +417,7 @@ export class RdDBaseActor extends Actor { | ||||
|       user: achat.userId, | ||||
|       speaker: { alias: (acheteur ?? vendeur).getAlias() }, | ||||
|       whisper: ChatUtility.getOwners(this), | ||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem) | ||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.hbs', chatAchatItem) | ||||
|     }); | ||||
|  | ||||
|     if (!achat.vente.quantiteIllimite) { | ||||
| @@ -731,31 +734,26 @@ export class RdDBaseActor extends Actor { | ||||
|       name: this.getAlias(), | ||||
|       system: { description: this.system.description } | ||||
|     } | ||||
|     renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.html', chatData) | ||||
|     foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData) | ||||
|       .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride))); | ||||
|   } | ||||
|  | ||||
|   actionImpossible(action) { | ||||
|     ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`) | ||||
|  | ||||
|   } | ||||
|  | ||||
|   async jetEthylisme() { this.actionImpossible("jet d'éthylisme") } | ||||
|   async rollAppelChance() { this.actionImpossible("appel à la chance") } | ||||
|   async jetDeMoral() { this.actionImpossible("jet de moral") } | ||||
|  | ||||
|   async actionPrincipale(item, onActionItem = async () => { }) { | ||||
|     switch (item.type) { | ||||
|       case ITEM_TYPES.conteneur: return await item.sheet.render(true); | ||||
|     } | ||||
|     return undefined | ||||
|   } | ||||
|   async resetItemUse() { } | ||||
|   async incDecItemUse(itemId, inc = 1) { } | ||||
|   async incDecItemUse(itemId, shouldIncrease = true) { } | ||||
|   getItemUse(itemId) { return 0; } | ||||
|  | ||||
|   async finDeRound(options = { terminer: false }) { } | ||||
|   isActorCombat() { return false } | ||||
|   getCaracInit(competence) { return 0 } | ||||
|  | ||||
|   listActionsCombat() { return [] } | ||||
|   listActionsPossessions() { | ||||
|     return this.itemTypes[ITEM_TYPES.possession] | ||||
|   | ||||
| @@ -1,6 +1,4 @@ | ||||
| import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js"; | ||||
| import { RdDItem } from "../item.js"; | ||||
| import { RdDUtility } from "../rdd-utility.js"; | ||||
| import { RdDBaseActorSheet } from "./base-actor-sheet.js"; | ||||
|  | ||||
| /** | ||||
| @@ -12,7 +10,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(super.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html", | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.hbs", | ||||
|       width: 600, height: 720, | ||||
|       tabs: [] | ||||
|     }, { inplace: false }) | ||||
| @@ -44,12 +42,8 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | ||||
|   activateListeners(html) { | ||||
|     super.activateListeners(html); | ||||
|  | ||||
|     this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event))); | ||||
|  | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     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 => { | ||||
|       const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val())); | ||||
|       await this.getItem(event)?.update({ "system.quantite": newQuantite }); | ||||
| @@ -63,28 +57,4 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | ||||
|   getTypesInventaire() { | ||||
|     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 { RdDUtility } from "../rdd-utility.js"; | ||||
| import { RdDBaseActor } from "./base-actor.js"; | ||||
|  | ||||
| export class RdDCommerce extends RdDBaseActor { | ||||
| @@ -37,4 +39,27 @@ export class RdDCommerce extends RdDBaseActor { | ||||
|     const pourcentage = this.system.pourcentage ?? 100; | ||||
|     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() | ||||
|     }); | ||||
|   } | ||||
|    | ||||
| } | ||||
| @@ -10,7 +10,7 @@ export class RdDCreatureSheet extends RdDBaseActorSangSheet { | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(RdDBaseActorSangSheet.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.html", | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.hbs", | ||||
|       width: 640, height: 720 | ||||
|     }, { inplace: false }) | ||||
|   } | ||||
| @@ -26,15 +26,15 @@ export class RdDCreatureSheet extends RdDBaseActorSangSheet { | ||||
|     // On competence change | ||||
|     this.html.find('.creature-carac').change(async event => { | ||||
|       let compName = event.currentTarget.attributes.compname.value; | ||||
|       this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||
|       await this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||
|     }); | ||||
|     this.html.find('.creature-niveau').change(async event => { | ||||
|       let compName = event.currentTarget.attributes.compname.value; | ||||
|       this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value)); | ||||
|       await this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value)); | ||||
|     }); | ||||
|     this.html.find('.creature-dommages').change(async event => { | ||||
|       let compName = event.currentTarget.attributes.compname.value; | ||||
|       this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||
|       await this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { Grammar } from "../grammar.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { LIST_CARAC_AUTRES } from "../rdd-carac.js"; | ||||
| import { RdDBaseActorSang } from "./base-actor-sang.js"; | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet { | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.html", | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.hbs", | ||||
|       width: 640, height: 720, | ||||
|     }, { inplace: false }) | ||||
|   } | ||||
| @@ -33,15 +33,15 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet { | ||||
|     // On competence change | ||||
|     this.html.find('.creature-carac').change(async event => { | ||||
|       let compName = event.currentTarget.attributes.compname.value; | ||||
|       this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||
|       await this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||
|     }); | ||||
|     this.html.find('.creature-dommages').change(async event => { | ||||
|       let compName = event.currentTarget.attributes.compname.value; | ||||
|       this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||
|       await this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||
|     }) | ||||
|  | ||||
|     this.html.find('.resonance-add').click(async event => | ||||
|       DialogSelect.select({ | ||||
|       await DialogSelect.select({ | ||||
|         label: "Choisir un acteur à accorder", | ||||
|         list: game.actors.filter(it => it.isPersonnage() && it.prototypeToken.actorLink) | ||||
|       }, | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
| import { Misc } from "../misc.js"; | ||||
| import { RdDCarac } from "../rdd-carac.js"; | ||||
| import { RdDEncaisser } from "../rdd-roll-encaisser.js"; | ||||
|   | ||||
| @@ -6,8 +6,8 @@ import { ExportScriptarium } from "./export-scriptarium.js"; | ||||
| import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.js"; | ||||
|  | ||||
| export class RdDActorExportSheet extends RdDActorSheet { | ||||
|   static async init() { | ||||
|     await loadTemplates([ | ||||
|   static init() { | ||||
|     foundry.applications.handlebars.loadTemplates([ | ||||
|       "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/blessures.hbs", | ||||
| @@ -21,8 +21,9 @@ 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/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() { | ||||
|     return foundry.utils.mergeObject(RdDActorSheet.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/actor-encart-sheet.hbs", | ||||
| @@ -103,13 +104,12 @@ export class RdDActorExportSheet extends RdDActorSheet { | ||||
|     this.html.find('.click-blessure-add').click(async event => | ||||
|       await this.actor.ajouterBlessure({ | ||||
|         gravite: this.html.find(event.currentTarget).data('gravite') | ||||
|         // event.currentTarget.attributes['data-gravite'].value | ||||
|       }) | ||||
|     ) | ||||
|     this.html.find('.button-export').click(async event => { | ||||
|     this.html.find('.button-export').click(async event => await | ||||
|       ExportScriptarium.INSTANCE.exportActors([this.actor], | ||||
|         `${this.actor.uuid}-${this.actor.name}` | ||||
|       ) | ||||
|     }) | ||||
|     ) | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| import { ACTOR_TYPES } from "../../item.js" | ||||
| import { ACTOR_TYPES } from "../../constants.js" | ||||
| import { Misc } from "../../misc.js" | ||||
| import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.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 { | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import { Grammar } from "../../grammar.js" | ||||
| import { RdDItemArme } from "../../item-arme.js" | ||||
| import { RdDItemCompetence } from "../../item-competence.js" | ||||
| import { RdDItemSort } from "../../item-sort.js" | ||||
| import { ITEM_TYPES } from "../../item.js" | ||||
| import { ITEM_TYPES } from "../../constants.js" | ||||
| import { Misc } from "../../misc.js" | ||||
| import { RdDTimestamp } from "../../time/rdd-timestamp.js" | ||||
| import { RdDBonus } from "../../rdd-bonus.js" | ||||
|   | ||||
| @@ -26,7 +26,7 @@ const RANDOM_VALUES = { | ||||
|  | ||||
| export class AppPersonnageAleatoire extends FormApplication { | ||||
|   static preloadHandlebars() { | ||||
|     loadTemplates([ | ||||
|     foundry.applications.handlebars.loadTemplates([ | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs', | ||||
|     ]) | ||||
|   } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ export class RdDActorVehiculeSheet extends RdDBaseActorSheet { | ||||
|   /** @override */ | ||||
|   static get defaultOptions() { | ||||
|     return foundry.utils.mergeObject(RdDBaseActorSheet.defaultOptions, { | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.html", | ||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.hbs", | ||||
|       width: 640, height: 720, | ||||
|     }, { inplace: false }) | ||||
|   } | ||||
| @@ -32,18 +32,10 @@ export class RdDActorVehiculeSheet extends RdDBaseActorSheet { | ||||
|     super.activateListeners(html); | ||||
|     if (!this.options.editable) return; | ||||
|  | ||||
|     this.html.find('.resistance-moins').click(async event => { | ||||
|       this.actor.vehicleIncDec("resistance", -1); | ||||
|     }); | ||||
|     this.html.find('.resistance-plus').click(async event => { | ||||
|       this.actor.vehicleIncDec("resistance", 1); | ||||
|     }); | ||||
|     this.html.find('.structure-moins').click(async event => { | ||||
|       this.actor.vehicleIncDec("structure", -1); | ||||
|     }); | ||||
|     this.html.find('.structure-plus').click(async event => { | ||||
|       this.actor.vehicleIncDec("structure", 1); | ||||
|     }); | ||||
|     this.html.find('.resistance-moins').click(async event => await this.actor.vehicleIncDec("resistance", -1)) | ||||
|     this.html.find('.resistance-plus').click(async event => await this.actor.vehicleIncDec("resistance", 1)) | ||||
|     this.html.find('.structure-moins').click(async event => await this.actor.vehicleIncDec("structure", -1)) | ||||
|     this.html.find('.structure-plus').click(async event => await this.actor.vehicleIncDec("structure", 1)) | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
							
								
								
									
										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) | ||||
|     ) | ||||
|   } | ||||
| } | ||||
| @@ -6,7 +6,7 @@ import { Grammar } from "../grammar.js"; | ||||
| import { Misc } from "../misc.js"; | ||||
| import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js"; | ||||
| import { RdDItemTete } from "../item/tete.js"; | ||||
| import { ITEM_TYPES } from "../item.js"; | ||||
| import { ITEM_TYPES } from "../constants.js"; | ||||
|  | ||||
| const WHITESPACES = "\\s+" | ||||
| const NUMERIC = "[\\+\\-]?\\d+" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import "./xregexp-all.js"; | ||||
| import { SystemCompendiums } from "../settings/system-compendiums.js"; | ||||
| import { ACTOR_TYPES } from "../item.js"; | ||||
| import { ACTOR_TYPES } from "../constants.js"; | ||||
| import { TextRollAlchimie } from "./textroll/text-roll-alchimie.js"; | ||||
| import { TextRollCaracCompetence } from "./textroll/text-roll-carac-competence.js"; | ||||
| import { TextRollFormula } from "./textroll/text-roll-formula.js"; | ||||
| @@ -13,7 +13,7 @@ const TEXT_ROLL_MANAGERS = [ | ||||
|  | ||||
| export class RdDTextEditor { | ||||
|   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}) { | ||||
| @@ -30,7 +30,7 @@ export class RdDTextEditor { | ||||
|       context.text = await manager.onReplaceRoll(context); | ||||
|     } | ||||
|  | ||||
|     return await TextEditor.enrichHTML(context.text, { | ||||
|     return await foundry.applications.ux.TextEditor.implementation.enrichHTML(context.text, { | ||||
|       relativeTo: object, | ||||
|       secrets: object?.isOwner, | ||||
|       async: true | ||||
|   | ||||