Compare commits
	
		
			21 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b09b095897 | |||
| d81965155c | |||
| 9fa8a2e6f3 | |||
| da7f87fd45 | |||
| 6aba92900c | |||
| 4939e5564e | |||
| 40be65a94e | |||
| 633638a9ab | |||
| 88a3464eed | |||
| 921e470498 | |||
| 0009876a6d | |||
| 54785f0c3a | |||
| df76c4bd78 | |||
| 5f3c678195 | |||
| 89bbe63340 | |||
| 149990e352 | |||
| 3e355784c7 | |||
| b92055d5dd | |||
| 220f8142f5 | |||
| a8bb00ad0b | |||
| 78e30b5503 | 
@@ -12,8 +12,6 @@ jobs:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    #- uses: actions/checkout@v3
 | 
					    #- uses: actions/checkout@v3
 | 
				
			||||||
    - uses: RouxAntoine/checkout@v3.5.4
 | 
					    - uses: RouxAntoine/checkout@v3.5.4
 | 
				
			||||||
      with:
 | 
					 | 
				
			||||||
        ref: 'v13'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # get part of the tag after the `v`
 | 
					    # get part of the tag after the `v`
 | 
				
			||||||
    - name: Extract tag version number
 | 
					    - name: Extract tag version number
 | 
				
			||||||
@@ -48,7 +46,7 @@ jobs:
 | 
				
			|||||||
         apt update -y
 | 
					         apt update -y
 | 
				
			||||||
         apt install -y zip
 | 
					         apt install -y zip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - run: zip -r ./rddsystem.zip system.json template.json README.md LICENSE.txt assets/ css/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/
 | 
					    - run: zip -r ./rddsystem.zip system.json template.json README.md LICENSE.txt assets/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/ 
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    - name: setup go
 | 
					    - name: setup go
 | 
				
			||||||
      uses: actions/setup-go@v3
 | 
					      uses: actions/setup-go@v3
 | 
				
			||||||
@@ -71,6 +69,6 @@ jobs:
 | 
				
			|||||||
        id: 'foundryvtt-reve-de-dragon'
 | 
					        id: 'foundryvtt-reve-de-dragon'
 | 
				
			||||||
        version: ${{github.event.release.tag_name}}
 | 
					        version: ${{github.event.release.tag_name}}
 | 
				
			||||||
        manifest: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json'
 | 
					        manifest: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json'
 | 
				
			||||||
        notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v13/changelog.md'
 | 
					        notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md'
 | 
				
			||||||
        compatibility-minimum: '13'
 | 
					        compatibility-minimum: '12'
 | 
				
			||||||
        compatibility-verified: '13'
 | 
					        compatibility-verified: '12'
 | 
				
			||||||
							
								
								
									
										0
									
								
								.gitlab/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.gitlab/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								.gitlab/issue_templates/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.gitlab/issue_templates/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										14
									
								
								.gitlab/issue_templates/Bug.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.gitlab/issue_templates/Bug.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					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
 | 
				
			||||||
							
								
								
									
										14
									
								
								.gitlab/issue_templates/Feature.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.gitlab/issue_templates/Feature.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					### 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
 | 
				
			||||||
							
								
								
									
										156
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								changelog.md
									
									
									
									
									
								
							@@ -1,91 +1,5 @@
 | 
				
			|||||||
# 13.0
 | 
					 | 
				
			||||||
## 13.0.7 - Sous le signe d'Illysis
 | 
					 | 
				
			||||||
- Fix Foundry V13
 | 
					 | 
				
			||||||
  - les tooltips des ajustements sont correctement visible
 | 
					 | 
				
			||||||
  - correction des affichages des signes d'heures dans la fenêtre d'astrologie
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- en cas d'appel au moral lorsqu'une double significative est requise,
 | 
					 | 
				
			||||||
  le moral est perdu si la réussite est insuffisante
 | 
					 | 
				
			||||||
- transformation du niveau des musiques/danses/chants/recettes de cuisine en valeur numérique
 | 
					 | 
				
			||||||
- les effets draconiques sur une case inconnue (A0) ne causent plus de problèmes dans les TMRs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 13.0.6 - Le bandage d'Illysis
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les soins sont de nouveau disponibles depuis les tokens
 | 
					 | 
				
			||||||
- Correction des boutons de la feuille simplifiée
 | 
					 | 
				
			||||||
- On peut de nouveau acheter dans les commerces
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 13.0.5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Export CSV/Scriptarium à nouveau disponible dans les menus d'acteurs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 13.0.4 - Le long discours d'Illysis
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- On peut de nouveau modifier les descriptions
 | 
					 | 
				
			||||||
- ne pas proposer l'export csv par défaut
 | 
					 | 
				
			||||||
- Correction de la macro "Jet quelconque"
 | 
					 | 
				
			||||||
- Correction de la ligne 'rêve actuel' ajoutée dans les caracs
 | 
					 | 
				
			||||||
- Corrections d'affichage
 | 
					 | 
				
			||||||
  - boutons de l'horloge
 | 
					 | 
				
			||||||
  - boutons de déplacement des TMR
 | 
					 | 
				
			||||||
  - modification des messages de tchat
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 13.0.3 - La dernière auberge d'Illysis
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- On peut de nouveau acheter aux commerces
 | 
					 | 
				
			||||||
- La description des Grizzal a des espaces
 | 
					 | 
				
			||||||
- Corrections v13
 | 
					 | 
				
			||||||
  - Affichage des images et noms d'objets en ligne
 | 
					 | 
				
			||||||
  - affichage des compétences de créature sur une ligne
 | 
					 | 
				
			||||||
  - Affichage des informations d'acteur sur une ligne dans l'astrologie
 | 
					 | 
				
			||||||
  - Affichage des résultat de recherche
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 13.0.0 - Le début de l'errance d'Illysis
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Migration vers la version 13 de Foundry
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 12.0
 | 
					# 12.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.50 - Le sommeil d'Astrobazzarh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Le don de double rêve n'interrompt plus le sommeil toutes les heures
 | 
					 | 
				
			||||||
- la perte de fatigue à la descente des TMR est visible immédiatement
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.49 - La deuxième lame d'Astrobazzarh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Corrections
 | 
					 | 
				
			||||||
  - les défenses particulières sont correctement affichées
 | 
					 | 
				
			||||||
  - les vieux boucliers (sans catégorie de parade car créés il y a longtemps) peuvent parer...
 | 
					 | 
				
			||||||
  - Les attaques à distance n'ont pas de difficulté libre
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.48 - La chèvre d'Astrobazzarh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- le Bandersnatch a une protection de 10
 | 
					 | 
				
			||||||
- la consistance chèvre est maintenant possible dans les recettes
 | 
					 | 
				
			||||||
  alchimiques (et toutes les consistances avec accents)
 | 
					 | 
				
			||||||
- un échec au lancement d'un sort pour le mettre en réserve brise
 | 
					 | 
				
			||||||
  la concentration du haut-rêvant
 | 
					 | 
				
			||||||
- Correction: les réussites particulières fonctionnent avec les caractéristiques dérivées
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.47
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction sur les mise à jour en cascade -
 | 
					 | 
				
			||||||
- Correction sur le force rendering après un changement de competence
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.46 - Le double demi d'Astrobazzarh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- correction des raffraîchissement lors du sommeil qui empêchait de dormir
 | 
					 | 
				
			||||||
  plusieurs heures
 | 
					 | 
				
			||||||
- Si la fatigue n'est pas utilisée, les rounds dans les TMR font perdre de l'endurance (au lieu d'en gagner)
 | 
					 | 
				
			||||||
- les TMRs se ferment correctement quand la fatigue maximale est dépassée
 | 
					 | 
				
			||||||
- le message de lancement de sort en réserve donne la description du sort
 | 
					 | 
				
			||||||
- suppression de double-messages lors de la fermeture des TMR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.45 - Les errements d'Astrobazzarh, encore
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- La difficulté des méditations n'augmente plus en cas de réussite et d'échec normal
 | 
					 | 
				
			||||||
- Renommage du Bouton pour révéler/masquer le demi-rêve
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 12.0.44 - Les errements d'Astrobazzarh, suite
 | 
					## 12.0.44 - Les errements d'Astrobazzarh, suite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- on peut de nouveau dormir et se réveiller reposé
 | 
					- on peut de nouveau dormir et se réveiller reposé
 | 
				
			||||||
@@ -190,11 +104,9 @@
 | 
				
			|||||||
- la description du chrasme contient le lien vers son venin plutôt qu'un tableau
 | 
					- la description du chrasme contient le lien vers son venin plutôt qu'un tableau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.28 - Les réserves d'Astrobazzarh
 | 
					## 12.0.28 - Les réserves d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- possibilité de mettre en réserve depuis un sort connu
 | 
					- possibilité de mettre en réserve depuis un sort connu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.27 - Les vêtements d'Astrobazzarh
 | 
					## 12.0.27 - Les vêtements d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Ajout de la liste des armures dans l'onglet caractéristiques
 | 
					- Ajout de la liste des armures dans l'onglet caractéristiques
 | 
				
			||||||
- Ajout d'une option pour choisir une carte des TMR alternatives
 | 
					- Ajout d'une option pour choisir une carte des TMR alternatives
 | 
				
			||||||
- Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage
 | 
					- Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage
 | 
				
			||||||
@@ -215,14 +127,12 @@
 | 
				
			|||||||
  - les modèles de personnages non joueurs sont non-liés par défaut
 | 
					  - les modèles de personnages non joueurs sont non-liés par défaut
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.26 - Astrobazzarh le Haut-rêvant
 | 
					## 12.0.26 - Astrobazzarh le Haut-rêvant
 | 
				
			||||||
 | 
					 | 
				
			||||||
- bouton pour le don de haut-rêve en un clic
 | 
					- bouton pour le don de haut-rêve en un clic
 | 
				
			||||||
- les compétences de draconic ne sont plus précédées de "Voie de"
 | 
					- les compétences de draconic ne sont plus précédées de "Voie de"
 | 
				
			||||||
  - migration des compétences & compendiums
 | 
					  - migration des compétences & compendiums
 | 
				
			||||||
- Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable
 | 
					- Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.24 - Les ajustements d'Astrobazzarh
 | 
					## 12.0.24 - Les ajustements d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- amélioration
 | 
					- amélioration
 | 
				
			||||||
  - meilleure gestion des noms des voies de draconic
 | 
					  - meilleure gestion des noms des voies de draconic
 | 
				
			||||||
  - affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût
 | 
					  - affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût
 | 
				
			||||||
@@ -232,7 +142,6 @@
 | 
				
			|||||||
  - on peut maintenant saisir et supprimer les bonus de cases de manière intuitive
 | 
					  - on peut maintenant saisir et supprimer les bonus de cases de manière intuitive
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
## 12.0.23 - La bibliothèque d'Astrobazzarh
 | 
					## 12.0.23 - La bibliothèque d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- corrections mineures
 | 
					- corrections mineures
 | 
				
			||||||
  - meilleure gestion de la parade des armes naturelles
 | 
					  - meilleure gestion de la parade des armes naturelles
 | 
				
			||||||
  - cas de "User lacks permission to update" pour les blessures et les StatusEffects
 | 
					  - cas de "User lacks permission to update" pour les blessures et les StatusEffects
 | 
				
			||||||
@@ -248,23 +157,19 @@
 | 
				
			|||||||
  - dans les compendiums, les compétences Écriture et Épée ont une majuscule accentuée. Les Épée dans le compendium d'équipements référence le nom de compétence accentué.
 | 
					  - dans les compendiums, les compétences Écriture et Épée ont une majuscule accentuée. Les Épée dans le compendium d'équipements référence le nom de compétence accentué.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.21 - La nomination d'Astrobazzarh
 | 
					## 12.0.21 - La nomination d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les noms pour les messages dans le tchat sont maintenant ceux des tokens plutôt que ceux des acteurs
 | 
					- Les noms pour les messages dans le tchat sont maintenant ceux des tokens plutôt que ceux des acteurs
 | 
				
			||||||
- Fix: le choix des effets dans les options s'affiche correctement
 | 
					- Fix: le choix des effets dans les options s'affiche correctement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.20 - Le tableau d'Astrobazzarh
 | 
					## 12.0.20 - Le tableau d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Ecran d'accueil officiel Scriptarium
 | 
					- Ecran d'accueil officiel Scriptarium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.19 - La témérité d'Astrobazzarh
 | 
					## 12.0.19 - La témérité d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix
 | 
					- Fix
 | 
				
			||||||
  - les défenses des créatures sont correctement filtrées
 | 
					  - les défenses des créatures sont correctement filtrées
 | 
				
			||||||
  - le lancer d'initiative pour tous les personnages/PNJs fonctionne correctement
 | 
					  - le lancer d'initiative pour tous les personnages/PNJs fonctionne correctement
 | 
				
			||||||
  - les lieux et commerces n'ont pas d'initiative
 | 
					  - les lieux et commerces n'ont pas d'initiative
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.18 - A la barbe d'Astrobazzarh
 | 
					## 12.0.18 - A la barbe d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Améliorations sur la feuille de PNJ simplifiée
 | 
					- Améliorations sur la feuille de PNJ simplifiée
 | 
				
			||||||
  - Ajout du portrait
 | 
					  - Ajout du portrait
 | 
				
			||||||
  - Ajout du corps à corps
 | 
					  - Ajout du corps à corps
 | 
				
			||||||
@@ -281,13 +186,11 @@
 | 
				
			|||||||
- Ajout d'un indicateur pour les armes de parade nécessitant une significative
 | 
					- Ajout d'un indicateur pour les armes de parade nécessitant une significative
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.16 - Le secret d'Astrobazzarh
 | 
					## 12.0.16 - Le secret d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: les jets envoyés messages uniquement au MJ ne sont plus envoyés à tous les autres joueurs (et dupliqués)
 | 
					- Fix: les jets envoyés messages uniquement au MJ ne sont plus envoyés à tous les autres joueurs (et dupliqués)
 | 
				
			||||||
- Les noms affichés dans les automatisations de combat sont maintenant ceux des tokens plutôt que ceux des acteurs
 | 
					- Les noms affichés dans les automatisations de combat sont maintenant ceux des tokens plutôt que ceux des acteurs
 | 
				
			||||||
- Ajout d'une option pour la localisation des blessures
 | 
					- Ajout d'une option pour la localisation des blessures
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.15 - Le messager d'Astrobazzarh
 | 
					## 12.0.15 - Le messager d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction des faces de dés personalisés dice-so-nice
 | 
					- Correction des faces de dés personalisés dice-so-nice
 | 
				
			||||||
- Les messages de maladies ne sont plus publics
 | 
					- Les messages de maladies ne sont plus publics
 | 
				
			||||||
- Les messages privés dans les TMR sont aussi envoyés au GM
 | 
					- Les messages privés dans les TMR sont aussi envoyés au GM
 | 
				
			||||||
@@ -295,7 +198,6 @@
 | 
				
			|||||||
- Amélioration du rendu des tables de compendiums (commande /table)
 | 
					- Amélioration du rendu des tables de compendiums (commande /table)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.14 - Les légions d'Astrobazzarh
 | 
					## 12.0.14 - Les légions d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Feuille de PNJ:
 | 
					- Feuille de PNJ:
 | 
				
			||||||
  - boutons standard (encaissement, ...)
 | 
					  - boutons standard (encaissement, ...)
 | 
				
			||||||
  - boutons pour ajuster les compteurs
 | 
					  - boutons pour ajuster les compteurs
 | 
				
			||||||
@@ -304,18 +206,15 @@
 | 
				
			|||||||
  - gestion des armes
 | 
					  - gestion des armes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.13 - La Chance d'Astrobazzarh
 | 
					## 12.0.13 - La Chance d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: jets de caractéristiques
 | 
					- Fix: jets de caractéristiques
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.12 - L'étalage d'Astrobazzarh
 | 
					## 12.0.12 - L'étalage d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: On peut de nouveau vendre des items sans propriétaire, depuis les compendiums ou depuis l'onglet des Objets
 | 
					- Fix: On peut de nouveau vendre des items sans propriétaire, depuis les compendiums ou depuis l'onglet des Objets
 | 
				
			||||||
- Début de Feuille PNJ au format des encarts Scriptarium
 | 
					- Début de Feuille PNJ au format des encarts Scriptarium
 | 
				
			||||||
  - support des jets de caractéristiques
 | 
					  - support des jets de caractéristiques
 | 
				
			||||||
  - support des jets de compétences
 | 
					  - support des jets de compétences
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.11 - Le scriptorium d'Astrobazzarh
 | 
					## 12.0.11 - Le scriptorium d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- ajout d'un bouton pour générer les éléments de description d'un personnage
 | 
					- ajout d'un bouton pour générer les éléments de description d'un personnage
 | 
				
			||||||
- ajout du logo en background dans la liste des systèmes Foundry
 | 
					- ajout du logo en background dans la liste des systèmes Foundry
 | 
				
			||||||
- ajout d'un champ pour le métier
 | 
					- ajout d'un champ pour le métier
 | 
				
			||||||
@@ -324,12 +223,10 @@
 | 
				
			|||||||
  - export de l'esquive avec armure et sans armure
 | 
					  - export de l'esquive avec armure et sans armure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh
 | 
					## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- corrections de l'export scriptarium
 | 
					- corrections de l'export scriptarium
 | 
				
			||||||
- ajout d'une fonction avancée pour un exporter "scriptarium" des personnages
 | 
					- ajout d'une fonction avancée pour un exporter "scriptarium" des personnages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.8 - La quincaillerie d'Astrobazzarh
 | 
					## 12.0.8 - La quincaillerie d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...
 | 
					- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...
 | 
				
			||||||
- Ecaille d'efficacité
 | 
					- Ecaille d'efficacité
 | 
				
			||||||
  - l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat
 | 
					  - l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat
 | 
				
			||||||
@@ -339,7 +236,6 @@
 | 
				
			|||||||
  - le tooltip de l'initiative affiche correctement l'initiative
 | 
					  - le tooltip de l'initiative affiche correctement l'initiative
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.7 - La propriété d'Astrobazzarh
 | 
					## 12.0.7 - La propriété d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- correction des opérations faites à la création d'un Item:
 | 
					- correction des opérations faites à la création d'un Item:
 | 
				
			||||||
  - la durée des queues/rencontres/souffles
 | 
					  - la durée des queues/rencontres/souffles
 | 
				
			||||||
  - les effets draconiques d'un souffle/queue
 | 
					  - les effets draconiques d'un souffle/queue
 | 
				
			||||||
@@ -354,7 +250,6 @@
 | 
				
			|||||||
- la commande /voyage affiche maintenant les compétences liées au terrain
 | 
					- la commande /voyage affiche maintenant les compétences liées au terrain
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.6 - Le bazar d'Astrobazzarh
 | 
					## 12.0.6 - Le bazar d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Corrections de l'inventaire en bazar:
 | 
					- Corrections de l'inventaire en bazar:
 | 
				
			||||||
  - un problème pouvait survenir en déplaçant les objets 
 | 
					  - un problème pouvait survenir en déplaçant les objets 
 | 
				
			||||||
    l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son
 | 
					    l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son
 | 
				
			||||||
@@ -369,26 +264,22 @@
 | 
				
			|||||||
- Fix: restaurer la compatibilité Foundry 11
 | 
					- Fix: restaurer la compatibilité Foundry 11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.5 - Les mauvais jours d'Astrobazzarh
 | 
					## 12.0.5 - Les mauvais jours d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: on peut de nouveau ouvrir l'édition de calendrier
 | 
					- Fix: on peut de nouveau ouvrir l'édition de calendrier
 | 
				
			||||||
- Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort
 | 
					- Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort
 | 
				
			||||||
- Fix: Failed to execute 'getComputedStyle' on 'Window'
 | 
					- Fix: Failed to execute 'getComputedStyle' on 'Window'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.4 - La plaie d'Astrobazzarh
 | 
					## 12.0.4 - La plaie d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- **Support V12**
 | 
					- **Support V12**
 | 
				
			||||||
  - Fix: les boutons d'encaissement dans le tchat fonctionnent de nouveau
 | 
					  - Fix: les boutons d'encaissement dans le tchat fonctionnent de nouveau
 | 
				
			||||||
  - Fix warnings sur "Die" et AudioHelper
 | 
					  - Fix warnings sur "Die" et AudioHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.3 - L'hémorragie d'Astrobazzarh
 | 
					## 12.0.3 - L'hémorragie d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- **Support V12**
 | 
					- **Support V12**
 | 
				
			||||||
  - On peut de nouveau ouvrir un acteur blessé après redémarrage du monde
 | 
					  - On peut de nouveau ouvrir un acteur blessé après redémarrage du monde
 | 
				
			||||||
  - On peut de nouveau ouvrir les Items avec une rareté par environnement
 | 
					  - On peut de nouveau ouvrir les Items avec une rareté par environnement
 | 
				
			||||||
  - Le choix de ne plus afficher les demandes de suppression est bien pris en compte
 | 
					  - Le choix de ne plus afficher les demandes de suppression est bien pris en compte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.0.2 - Les pluies d'Astrobazzarh
 | 
					## 12.0.2 - Les pluies d'Astrobazzarh
 | 
				
			||||||
 | 
					 | 
				
			||||||
- **Support V12**
 | 
					- **Support V12**
 | 
				
			||||||
  - correction des actions techniques déleguées au MJ qui bloquaient les fenêtre de lancer de dés des joueurs (et plein d'autres)
 | 
					  - correction des actions techniques déleguées au MJ qui bloquaient les fenêtre de lancer de dés des joueurs (et plein d'autres)
 | 
				
			||||||
  - la fenêtre de calendrier s'ouvre correctement
 | 
					  - la fenêtre de calendrier s'ouvre correctement
 | 
				
			||||||
@@ -403,16 +294,13 @@
 | 
				
			|||||||
  - correction d'erreurs intempestives 'User ... lacks permission to update ...'
 | 
					  - correction d'erreurs intempestives 'User ... lacks permission to update ...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 11.2
 | 
					# 11.2
 | 
				
			||||||
 | 
					 | 
				
			||||||
## 11.2.21 - Le questionnement d'Akarlikarlikar
 | 
					## 11.2.21 - Le questionnement d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Une confirmation spécifique est demandée pour monter dans les terres médianes en cas de rencontre en attente
 | 
					- Une confirmation spécifique est demandée pour monter dans les terres médianes en cas de rencontre en attente
 | 
				
			||||||
- L'expérience en caractéristique sur les jets de chance et rêve actuels est mise dans la caractéristique correspondante
 | 
					- L'expérience en caractéristique sur les jets de chance et rêve actuels est mise dans la caractéristique correspondante
 | 
				
			||||||
- Les effets s'appliquent correctement sur les créatures
 | 
					- Les effets s'appliquent correctement sur les créatures
 | 
				
			||||||
- La date et l'heure (draconiques) sont affichées dans les messages du tchat
 | 
					- La date et l'heure (draconiques) sont affichées dans les messages du tchat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.20 - Le soulagement d'Akarlikarlikar
 | 
					## 11.2.20 - Le soulagement d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- L'option "ajout de la difficulté d'attaque à l'encaissement" est affichée comme un modificateur d'encaissement
 | 
					- L'option "ajout de la difficulté d'attaque à l'encaissement" est affichée comme un modificateur d'encaissement
 | 
				
			||||||
- Les options d'encaissement alternatives fonctionnent avec la validation de l'encaissement par le gardien
 | 
					- Les options d'encaissement alternatives fonctionnent avec la validation de l'encaissement par le gardien
 | 
				
			||||||
- La fenêtre d'astrologie du gardien affiche toutes les heures lues par un personnage
 | 
					- La fenêtre d'astrologie du gardien affiche toutes les heures lues par un personnage
 | 
				
			||||||
@@ -422,15 +310,12 @@
 | 
				
			|||||||
- Les messages de récupération de rêve en cas de Rêve de Dragon sont clarifiés
 | 
					- Les messages de récupération de rêve en cas de Rêve de Dragon sont clarifiés
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.19 - Les hémorroïdes d'Akarlikarlikar
 | 
					## 11.2.19 - Les hémorroïdes d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- La validation des jets d'encaissement par le Gardien fonctionne de nouveau
 | 
					- La validation des jets d'encaissement par le Gardien fonctionne de nouveau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.18 - Le bourrichon d'Akarlikarlikar
 | 
					## 11.2.18 - Le bourrichon d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les différentes listes de la feuille de personnage ont maintenant le bouton pour envoyer dans le tchat
 | 
					- Les différentes listes de la feuille de personnage ont maintenant le bouton pour envoyer dans le tchat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.17 - Le cache-oeil d'Akarlikarlikar
 | 
					## 11.2.17 - Le cache-oeil d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Le titre des fenêtre d'objet affiche de nouveau le type traduit
 | 
					- Le titre des fenêtre d'objet affiche de nouveau le type traduit
 | 
				
			||||||
- Les tooltips des boutons edit/delete sont maintenant en Français
 | 
					- Les tooltips des boutons edit/delete sont maintenant en Français
 | 
				
			||||||
- La case à cocher "Cacher les points de tâches" fonctionne de nouveau
 | 
					- La case à cocher "Cacher les points de tâches" fonctionne de nouveau
 | 
				
			||||||
@@ -439,43 +324,35 @@
 | 
				
			|||||||
- La fenêtre des TMRs ne devrait plus afficher une zone noire au lieu de la carte.
 | 
					- La fenêtre des TMRs ne devrait plus afficher une zone noire au lieu de la carte.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.16 - Le Tri d'Akarlikarlikar
 | 
					## 11.2.16 - Le Tri d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Tri alphabétique des items dans la fenêtre de création
 | 
					- Tri alphabétique des items dans la fenêtre de création
 | 
				
			||||||
- Mise à jour comptage de monde
 | 
					- Mise à jour comptage de monde
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.15 - La Table d'Akarlikarlikar
 | 
					## 11.2.15 - La Table d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Tirage automatique de la foce d'une rencontre (via la commande /tmrr)
 | 
					- Tirage automatique de la foce d'une rencontre (via la commande /tmrr)
 | 
				
			||||||
- Ajout de boutons pour ajouter des blessures "complètes" (ie avec perte d'endurance/vie)
 | 
					- Ajout de boutons pour ajouter des blessures "complètes" (ie avec perte d'endurance/vie)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.14 - Les petits pas d'Akarlikarlikar
 | 
					## 11.2.14 - Les petits pas d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction sur la gestion de la surprise
 | 
					- Correction sur la gestion de la surprise
 | 
				
			||||||
- Ordre des messages sur les cases humides
 | 
					- Ordre des messages sur les cases humides
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.13 - Les cent pas d'Akarlikarlikar
 | 
					## 11.2.13 - Les cent pas d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Ajout de la commande /voyage pour gérer la fatigue de marche des voyageurs
 | 
					- Ajout de la commande /voyage pour gérer la fatigue de marche des voyageurs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.12 - Le somnifère  d'Akarlikarlikar
 | 
					## 11.2.12 - Le somnifère  d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: les potions enchantées n'empêchent plus de finir correctement Château Dormant
 | 
					- Fix: les potions enchantées n'empêchent plus de finir correctement Château Dormant
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.11 - Le miroir d'Akarlikarlikar
 | 
					## 11.2.11 - Le miroir d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Changement des images de compétence de créatures morsure/pinces pour être dans le thème
 | 
					- Changement des images de compétence de créatures morsure/pinces pour être dans le thème
 | 
				
			||||||
- Suppression de la bordure autour des portraits d'acteurs, remplacés par un légèr éclaircissement du fond
 | 
					- Suppression de la bordure autour des portraits d'acteurs, remplacés par un légèr éclaircissement du fond
 | 
				
			||||||
- Fix: le refoulement ajoute correctement un souffle et revient à 0 en cas d'échec
 | 
					- Fix: le refoulement ajoute correctement un souffle et revient à 0 en cas d'échec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.10 - Les expériences d'Akarlikarlikar
 | 
					## 11.2.10 - Les expériences d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- En cas d'expérience des caractéristiques dérivées,
 | 
					- En cas d'expérience des caractéristiques dérivées,
 | 
				
			||||||
  - si plusieurs caractéristiques pourraient recevoir l'expérience, une fenêtre demande au joueur
 | 
					  - si plusieurs caractéristiques pourraient recevoir l'expérience, une fenêtre demande au joueur
 | 
				
			||||||
  - si une seule caractéristique peut recevoir de l'expérience, c'est attribué automatiquement
 | 
					  - si une seule caractéristique peut recevoir de l'expérience, c'est attribué automatiquement
 | 
				
			||||||
- Si la force est au maximum pour la taille personnage, on ne peut plus gagner d'expérience
 | 
					- Si la force est au maximum pour la taille personnage, on ne peut plus gagner d'expérience
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.9 - La barbe d'Akarlikarlikar
 | 
					## 11.2.9 - La barbe d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Amélioration des textes de tooltips
 | 
					- Amélioration des textes de tooltips
 | 
				
			||||||
- Les tooltips sont plus dans le thème de couleur du système Rêve de Dragon 
 | 
					- Les tooltips sont plus dans le thème de couleur du système Rêve de Dragon 
 | 
				
			||||||
- Ajouts d'icones pour les attaque/initiative/soins dans les raccourcis sur les tokens (HUD)
 | 
					- Ajouts d'icones pour les attaque/initiative/soins dans les raccourcis sur les tokens (HUD)
 | 
				
			||||||
@@ -487,23 +364,19 @@
 | 
				
			|||||||
- Changement de l'icône d'état d'empoignade pour suivre les couleurs des autres icônes d'état
 | 
					- Changement de l'icône d'état d'empoignade pour suivre les couleurs des autres icônes d'état
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.8 - L'éclairage d'Akarlikarlikar
 | 
					## 11.2.8 - L'éclairage d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- l'ajustement de la lumière jour/nuit s'étale sur moins de temps (vaisseau et Lyre)
 | 
					- l'ajustement de la lumière jour/nuit s'étale sur moins de temps (vaisseau et Lyre)
 | 
				
			||||||
- les nouveaux tooltips ne masquent plus l'information d'expérience
 | 
					- les nouveaux tooltips ne masquent plus l'information d'expérience
 | 
				
			||||||
- les jets de dés pour maîtriser les rencontres fonctionnent de nouveau
 | 
					- les jets de dés pour maîtriser les rencontres fonctionnent de nouveau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.7 - Les explications d'Akarlikarlikar
 | 
					## 11.2.7 - Les explications d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Ajout de tooltips sur la plupart des boutons, liens clickables, objets, tâches, ...
 | 
					- Ajout de tooltips sur la plupart des boutons, liens clickables, objets, tâches, ...
 | 
				
			||||||
- Fix: on peut de nouveau regarder l'inventaire avec les droits limités/observateur
 | 
					- Fix: on peut de nouveau regarder l'inventaire avec les droits limités/observateur
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.6 - Les réveils difficiles d'Akarlikarlikar
 | 
					## 11.2.6 - Les réveils difficiles d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les changements de points de Cœur sont temporaires jusqu'à fin Château Dormant
 | 
					- Les changements de points de Cœur sont temporaires jusqu'à fin Château Dormant
 | 
				
			||||||
- Fix: tous les petits fixes (feuille qui s'ouvre plus, compagnons animaux, potions qui bloquent Château Dormant, ...)
 | 
					- Fix: tous les petits fixes (feuille qui s'ouvre plus, compagnons animaux, potions qui bloquent Château Dormant, ...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 11.2.2 - Les tendres moments d'Akarlikarlikar
 | 
					## 11.2.2 - Les tendres moments d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- On peut maintenant avoir des points de Cœur pour des suivants/compagnons
 | 
					- On peut maintenant avoir des points de Cœur pour des suivants/compagnons
 | 
				
			||||||
  - diminuer les points de coeurs fait perdre du moral
 | 
					  - diminuer les points de coeurs fait perdre du moral
 | 
				
			||||||
  - on peut proposer un tendre moment
 | 
					  - on peut proposer un tendre moment
 | 
				
			||||||
@@ -522,14 +395,11 @@
 | 
				
			|||||||
    ne bloquent plus les jets de dés
 | 
					    ne bloquent plus les jets de dés
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.2.1 - La technique d'Akarlikarlikar
 | 
					## v11.2.1 - La technique d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- On peut créer des armes pour Corps à corps et Esquive. Barreaux de chaise, armes improvisées, techniques d'art martiaux, pas de côté pour faire trébucher l'adversaire... A vous de voir comment imaginer de nouvelles "armes".
 | 
					- On peut créer des armes pour Corps à corps et Esquive. Barreaux de chaise, armes improvisées, techniques d'art martiaux, pas de côté pour faire trébucher l'adversaire... A vous de voir comment imaginer de nouvelles "armes".
 | 
				
			||||||
- Les armes avec une résistance de 0 ne peuvent pas être utilisées, une image et un rappel indiquent qu'elles sont cassées
 | 
					- Les armes avec une résistance de 0 ne peuvent pas être utilisées, une image et un rappel indiquent qu'elles sont cassées
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
					Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			||||||
 | 
					 | 
				
			||||||
## v11.2.0 - Les Terres médianes d'Akarlikarlikar
 | 
					## v11.2.0 - Les Terres médianes d'Akarlikarlikar
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les TMRs sont redimensionables
 | 
					- Les TMRs sont redimensionables
 | 
				
			||||||
- Nouveaux graphismes plus lisibles dans les TMRs
 | 
					- Nouveaux graphismes plus lisibles dans les TMRs
 | 
				
			||||||
- Nouveau code couleur des icônes dans les TMR:
 | 
					- Nouveau code couleur des icônes dans les TMR:
 | 
				
			||||||
@@ -543,15 +413,12 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
- Fix: Les jets d'encaissement forcés par le gardien à un résultat inférieur à 11 ne peuvent plus donner un deuxième d10 négatif
 | 
					- Fix: Les jets d'encaissement forcés par le gardien à un résultat inférieur à 11 ne peuvent plus donner un deuxième d10 négatif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# v11.1
 | 
					# v11.1
 | 
				
			||||||
 | 
					 | 
				
			||||||
## v11.1.6 - Les dissections de Werther de Zloth
 | 
					## v11.1.6 - Les dissections de Werther de Zloth
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: on peut de nouveau donner des compétences aux créatures
 | 
					- Fix: on peut de nouveau donner des compétences aux créatures
 | 
				
			||||||
- Fix: le délai de guérison d'une blessure rétrogradée est correctement appliqué
 | 
					- Fix: le délai de guérison d'une blessure rétrogradée est correctement appliqué
 | 
				
			||||||
- Fix: l'encaissement à valider par le MJ fonctionne de nouveau
 | 
					- Fix: l'encaissement à valider par le MJ fonctionne de nouveau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.1.5 - Werther de Zloth l'Onirique
 | 
					## v11.1.5 - Werther de Zloth l'Onirique
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fixes:
 | 
					- Fixes:
 | 
				
			||||||
  - la demande de défense ne marchait plus
 | 
					  - la demande de défense ne marchait plus
 | 
				
			||||||
  - la tête réserve extensible crée bien une case de réserve extensible (à modifier)
 | 
					  - la tête réserve extensible crée bien une case de réserve extensible (à modifier)
 | 
				
			||||||
@@ -566,7 +433,6 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
  - pas de jets de vie pour les morts
 | 
					  - pas de jets de vie pour les morts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.1.4 - Werther de Zloth l'Onirique
 | 
					## v11.1.4 - Werther de Zloth l'Onirique
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Ajout du facteur de significative à côté du pourcentage dans le résultat des jets de dés pour rappeler que le pourcentage n'est pas diviasé
 | 
					- Ajout du facteur de significative à côté du pourcentage dans le résultat des jets de dés pour rappeler que le pourcentage n'est pas diviasé
 | 
				
			||||||
- Fix: dans les TMRs, les tooltips affichent bien les informations de tous les effets sur la case
 | 
					- Fix: dans les TMRs, les tooltips affichent bien les informations de tous les effets sur la case
 | 
				
			||||||
- Fix: la fatigue et l'éthylisme sont de nouveau pris en compte dans le calcul de l'éthylisme
 | 
					- Fix: la fatigue et l'éthylisme sont de nouveau pris en compte dans le calcul de l'éthylisme
 | 
				
			||||||
@@ -576,18 +442,15 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
- Esthétique: ne pas afficher "+0" pour les ajustements de jets/encaissement
 | 
					- Esthétique: ne pas afficher "+0" pour les ajustements de jets/encaissement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.1.2 - Les vertèbres de Werther de Zloth
 | 
					## v11.1.2 - Les vertèbres de Werther de Zloth
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: les jets d'encaissement fonctionnent de nouveau normalement
 | 
					- Fix: les jets d'encaissement fonctionnent de nouveau normalement
 | 
				
			||||||
- Macro "Mon personnage" permettant au joueur d'accéder à sa feuille de personnage depuis la barre de macros
 | 
					- Macro "Mon personnage" permettant au joueur d'accéder à sa feuille de personnage depuis la barre de macros
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.1.1 - Les fumebols de Werther de Zloth
 | 
					## v11.1.1 - Les fumebols de Werther de Zloth
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: on peut de nouveau afficher les vues détaillées
 | 
					- Fix: on peut de nouveau afficher les vues détaillées
 | 
				
			||||||
- Fix: on peut ouvrir les sacs et contenants portés par les véhicules et créatures
 | 
					- Fix: on peut ouvrir les sacs et contenants portés par les véhicules et créatures
 | 
				
			||||||
- Fix: cuisiner du gibier prend maintenant bien les proportaions en compte
 | 
					- Fix: cuisiner du gibier prend maintenant bien les proportaions en compte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.1.0 - Les choix de Werther de Zloth
 | 
					## v11.1.0 - Les choix de Werther de Zloth
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les options suivantes peuvent être désactivées:
 | 
					- Les options suivantes peuvent être désactivées:
 | 
				
			||||||
  - La transformation de stress à Château Dormant
 | 
					  - La transformation de stress à Château Dormant
 | 
				
			||||||
  - La récuperation de chance à Château Dormant
 | 
					  - La récuperation de chance à Château Dormant
 | 
				
			||||||
@@ -605,9 +468,7 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
  - en cas de charge, les particulières sont toujours en force (p125)
 | 
					  - en cas de charge, les particulières sont toujours en force (p125)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# v11.0
 | 
					# v11.0
 | 
				
			||||||
 | 
					 | 
				
			||||||
## v11.0.28 - les fractures de Khrachtchoum
 | 
					## v11.0.28 - les fractures de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- La gravité de la blessure est affichée dans le résumé de l'encaissement
 | 
					- La gravité de la blessure est affichée dans le résumé de l'encaissement
 | 
				
			||||||
- Lors du changement d'acteur pendant le round
 | 
					- Lors du changement d'acteur pendant le round
 | 
				
			||||||
  - le message annonçant le joueur dont c'est le tour ne contient plus d'informations de santé
 | 
					  - le message annonçant le joueur dont c'est le tour ne contient plus d'informations de santé
 | 
				
			||||||
@@ -619,14 +480,12 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
  - le moral est indiqué avant l'icone d'appel au moral
 | 
					  - le moral est indiqué avant l'icone d'appel au moral
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.27 - Khrachtchoum le méticuleux
 | 
					## v11.0.27 - Khrachtchoum le méticuleux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- le tooltip dans les TMR reste visible si on ne bouge pas la souris
 | 
					- le tooltip dans les TMR reste visible si on ne bouge pas la souris
 | 
				
			||||||
- le surencombrement n'affecte QUE les actions physiques
 | 
					- le surencombrement n'affecte QUE les actions physiques
 | 
				
			||||||
- on peut de nouveau fabriquer une potion depuis la fenêtre d'édition de l'herbe
 | 
					- on peut de nouveau fabriquer une potion depuis la fenêtre d'édition de l'herbe
 | 
				
			||||||
- si les TMR sont minimisées alors qu'une action est requise, elles sont bien réaffichées lorsque l'action est faite
 | 
					- si les TMR sont minimisées alors qu'une action est requise, elles sont bien réaffichées lorsque l'action est faite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.26 - le crépuscule de Khrachtchoum
 | 
					## v11.0.26 - le crépuscule de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- gestion correcte des TMRs
 | 
					- gestion correcte des TMRs
 | 
				
			||||||
  - les TMRs ne sont jamais minimisées (par le système) quand le haut-rêvant est en demi-rêve
 | 
					  - les TMRs ne sont jamais minimisées (par le système) quand le haut-rêvant est en demi-rêve
 | 
				
			||||||
  - lorsqu'une fenêtre liée aux demi-rêve est affichée, cliquer sur les TMRs n'a pas d'effet
 | 
					  - lorsqu'une fenêtre liée aux demi-rêve est affichée, cliquer sur les TMRs n'a pas d'effet
 | 
				
			||||||
@@ -645,57 +504,45 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
- les jets de compétences d'attaque des créatures fonctionnent de nouveau
 | 
					- les jets de compétences d'attaque des créatures fonctionnent de nouveau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.25 - la vision du rêve de Khrachtchoum
 | 
					## v11.0.25 - la vision du rêve de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Les TMRs restent affichées tant que le Haut-rêvant est en demi-rêve
 | 
					- Les TMRs restent affichées tant que le Haut-rêvant est en demi-rêve
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.24 - les couleurs de Khrachtchoum
 | 
					## v11.0.24 - les couleurs de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- nouvelle carte des TMRs
 | 
					- nouvelle carte des TMRs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.23 - la lumière de Khrachtchoum
 | 
					## v11.0.23 - la lumière de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- ajustement automatique de la luminosité selon l'heure pour les scènes:
 | 
					- ajustement automatique de la luminosité selon l'heure pour les scènes:
 | 
				
			||||||
   - avec une vision des tokens (sinon: ce n'est pas une scène de carte pour tokens)
 | 
					   - avec une vision des tokens (sinon: ce n'est pas une scène de carte pour tokens)
 | 
				
			||||||
   - avec illumination globale (correspondant à une illumination extérieure)
 | 
					   - avec illumination globale (correspondant à une illumination extérieure)
 | 
				
			||||||
   - quand lampe "allumée" dans la fenêtre du calendrier
 | 
					   - quand lampe "allumée" dans la fenêtre du calendrier
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.22 - les automatismes de Khrachtchoum le Problémeux
 | 
					## v11.0.22 - les automatismes de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Macro pour attaquer avec les compétences de créatures
 | 
					- Macro pour attaquer avec les compétences de créatures
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.20
 | 
					## v11.0.20
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Macro pour attaquer avec les armes des personnages
 | 
					- Macro pour attaquer avec les armes des personnages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.17
 | 
					## v11.0.17
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: les actions de commerce ne s'appliquait pas bien aux personnages des tokens non liés
 | 
					- Fix: les actions de commerce ne s'appliquait pas bien aux personnages des tokens non liés
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.15 - L'apprentissage de Khrachtchoum
 | 
					## v11.0.15 - L'apprentissage de Khrachtchoum
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix: l'expérience ne s'appliquait plus sur certaines réussites particulières (régression depuis la 11.0.7)
 | 
					- Fix: l'expérience ne s'appliquait plus sur certaines réussites particulières (régression depuis la 11.0.7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.14 - Les pincettes de Khrachtchoum le Problémeux
 | 
					## v11.0.14 - Les pincettes de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction du calcul de la place restante lors de l'ajout dans un conteneur
 | 
					- Correction du calcul de la place restante lors de l'ajout dans un conteneur
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.13 - La multiplication de l'eau de Khrachtchoum le Problémeux
 | 
					## v11.0.13 - La multiplication de l'eau de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction de la vente depuis un commerce ayant des quantités illimitées
 | 
					- Correction de la vente depuis un commerce ayant des quantités illimitées
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.12 - Les poids de la mesure de Khrachtchoum le Problémeux
 | 
					## v11.0.12 - Les poids de la mesure de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- Correction des malus de surencombrement
 | 
					- Correction des malus de surencombrement
 | 
				
			||||||
- Le malus armure est correctement affiché dans l'onglet des caractéristiques
 | 
					- Le malus armure est correctement affiché dans l'onglet des caractéristiques
 | 
				
			||||||
- Correction d'orthographe et amélioration des messages des oeuvres d'art
 | 
					- Correction d'orthographe et amélioration des messages des oeuvres d'art
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.11 - Les bleus de Khrachtchoum le Problémeux
 | 
					## v11.0.11 - Les bleus de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- si le gardien configure le sommeil, les joueurs sont notifiés que chateau dormant vient de passer
 | 
					- si le gardien configure le sommeil, les joueurs sont notifiés que chateau dormant vient de passer
 | 
				
			||||||
- possibilité de créer des armes et des compétences de créatures non-mortelles.
 | 
					- possibilité de créer des armes et des compétences de créatures non-mortelles.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.10 - Les Songes de Khrachtchoum le Problémeux
 | 
					## v11.0.10 - Les Songes de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- on peut de nouveau se déplacer dans les TMRs d'un clic sur la case à atteindre
 | 
					- on peut de nouveau se déplacer dans les TMRs d'un clic sur la case à atteindre
 | 
				
			||||||
- Lire un livre depuis l'inventaire permet de nouveau de faire un jet de la tâche
 | 
					- Lire un livre depuis l'inventaire permet de nouveau de faire un jet de la tâche
 | 
				
			||||||
  créée au lieu de créer toujours une nouvelle tâche
 | 
					  créée au lieu de créer toujours une nouvelle tâche
 | 
				
			||||||
@@ -706,14 +553,12 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
  les heures dormies sont déduites des heures restant à dormir
 | 
					  les heures dormies sont déduites des heures restant à dormir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux
 | 
					## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux
 | 
				
			||||||
 | 
					 | 
				
			||||||
- mode de saisie de l'archétype en vue détaillée
 | 
					- mode de saisie de l'archétype en vue détaillée
 | 
				
			||||||
- création  une nouvelle incarnation depuis l'archétype
 | 
					- création  une nouvelle incarnation depuis l'archétype
 | 
				
			||||||
- réorganisation de la fenêtre de sélection des règles optionnelles
 | 
					- réorganisation de la fenêtre de sélection des règles optionnelles
 | 
				
			||||||
- correction de l'affichage du type dans les fenêtres d'objets
 | 
					- correction de l'affichage du type dans les fenêtres d'objets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v11.0.8 - la poigne de Sémolosse
 | 
					## v11.0.8 - la poigne de Sémolosse
 | 
				
			||||||
 | 
					 | 
				
			||||||
- lien vers le changelog
 | 
					- lien vers le changelog
 | 
				
			||||||
- organisation des compendiums du système
 | 
					- organisation des compendiums du système
 | 
				
			||||||
- correction de l'empoignade
 | 
					- correction de l'empoignade
 | 
				
			||||||
@@ -736,3 +581,4 @@ Vu qu'elles ne peuvent pas être utilisées, permet de savoir pourquoi
 | 
				
			|||||||
- correction des achats par le MJ sans acteur sélectionné
 | 
					- correction des achats par le MJ sans acteur sélectionné
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Cf branche v10 pour l'historique des versions 10
 | 
					Cf branche v10 pour l'historique des versions 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										37
									
								
								gulpfile.js
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								gulpfile.js
									
									
									
									
									
								
							@@ -1,37 +0,0 @@
 | 
				
			|||||||
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;
 | 
					 | 
				
			||||||
@@ -1,50 +0,0 @@
 | 
				
			|||||||
: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);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
@@ -1,84 +0,0 @@
 | 
				
			|||||||
/* ==================== (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 */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,7 +0,0 @@
 | 
				
			|||||||
// Styles pour la feuille d'objet Monnaie
 | 
					 | 
				
			||||||
.monnaie-content {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .item-sheet-common();
 | 
					 | 
				
			||||||
  .item-sheet-header();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
// Styles pour la feuille d'objet Monnaie
 | 
					 | 
				
			||||||
.munition-content {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .item-sheet-common();
 | 
					 | 
				
			||||||
  .item-sheet-header();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
// Styles pour la feuille d'objet Monnaie
 | 
					 | 
				
			||||||
.tarot-content {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .item-sheet-common();
 | 
					 | 
				
			||||||
  .item-sheet-header();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										108
									
								
								less/sheets.less
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								less/sheets.less
									
									
									
									
									
								
							@@ -1,108 +0,0 @@
 | 
				
			|||||||
.item-sheet-common() {
 | 
					 | 
				
			||||||
  padding: 0px;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Styles pour la section de description, si le partiel utilise une structure standard
 | 
					 | 
				
			||||||
  .editor,
 | 
					 | 
				
			||||||
  .editor-content {
 | 
					 | 
				
			||||||
    height: auto; // Ajuster selon le besoin
 | 
					 | 
				
			||||||
    min-height: 100px; // Hauteur minimale pour la description
 | 
					 | 
				
			||||||
    background: var(--rdd-bg-input-alt); // Une couleur de fond alternative
 | 
					 | 
				
			||||||
    padding: 5px;
 | 
					 | 
				
			||||||
    border-radius: 3px;
 | 
					 | 
				
			||||||
    color: var(--rdd-color-text-primary);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .window-content {
 | 
					 | 
				
			||||||
    font-family: CaslonAntique;
 | 
					 | 
				
			||||||
    text-align: justify;
 | 
					 | 
				
			||||||
    font-size: 1rem;
 | 
					 | 
				
			||||||
    letter-spacing: 1px;
 | 
					 | 
				
			||||||
    padding: 0% 0 0 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    font-size: calc(var(--font-size-standard) * 1);
 | 
					 | 
				
			||||||
    color: var(--color-dark-1);
 | 
					 | 
				
			||||||
    background-size: 100% 100%;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  fieldset {
 | 
					 | 
				
			||||||
    background: var(--fieldset-background);
 | 
					 | 
				
			||||||
    color: var(--rdd-color-text-primary);
 | 
					 | 
				
			||||||
    margin-bottom: 4px;
 | 
					 | 
				
			||||||
    border-radius: 6px;
 | 
					 | 
				
			||||||
    border-color: var(--rdd-color-text-primary);
 | 
					 | 
				
			||||||
    border-width: 2px;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  .form-group {
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    flex-direction: row;
 | 
					 | 
				
			||||||
    flex-wrap: wrap;
 | 
					 | 
				
			||||||
    justify-content: flex-start;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
    padding: 2px 0;
 | 
					 | 
				
			||||||
    border-bottom: 1px solid var(--rdd-color-shadow-primary);
 | 
					 | 
				
			||||||
    font-size: 0.9rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    label {
 | 
					 | 
				
			||||||
      font-weight: normal;
 | 
					 | 
				
			||||||
      flex: 2;
 | 
					 | 
				
			||||||
      padding-left: 5px;
 | 
					 | 
				
			||||||
      margin: 0;
 | 
					 | 
				
			||||||
      color: var(
 | 
					 | 
				
			||||||
        --rdd-color-text-primary
 | 
					 | 
				
			||||||
      ); // Assurez-vous que cette variable existe dans colors.less
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    .attribute-value,
 | 
					 | 
				
			||||||
    input[type="text"],
 | 
					 | 
				
			||||||
    input[type="number"],
 | 
					 | 
				
			||||||
    select {
 | 
					 | 
				
			||||||
      flex: 3;
 | 
					 | 
				
			||||||
      background: var(--rdd-input-background);
 | 
					 | 
				
			||||||
      border: 1px solid var(--rdd-color-border-input); // Assurez-vous que cette variable existe
 | 
					 | 
				
			||||||
      color: var(
 | 
					 | 
				
			||||||
        --rdd-color-text-input
 | 
					 | 
				
			||||||
      ); // Assurez-vous que cette variable existe
 | 
					 | 
				
			||||||
      padding: 2px 2px; // Augmentation du padding vertical
 | 
					 | 
				
			||||||
      border-radius: 3px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    input[type="checkbox"] {
 | 
					 | 
				
			||||||
      flex: 0 0 20px; // Taille fixe pour les cases à cocher
 | 
					 | 
				
			||||||
      margin-left: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.item-sheet-header() {
 | 
					 | 
				
			||||||
  background: #011d33 url(../assets/ui/bg_header.webp) no-repeat left top;
 | 
					 | 
				
			||||||
  color: rgba(255, 255, 255, 1);
 | 
					 | 
				
			||||||
  .sheet-header-row {
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    flex-direction: row;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
    h1,
 | 
					 | 
				
			||||||
    input {
 | 
					 | 
				
			||||||
      font-family: CaslonAntique;
 | 
					 | 
				
			||||||
      font-size: 2.5rem;
 | 
					 | 
				
			||||||
      font-weight: normal;
 | 
					 | 
				
			||||||
      color: var(--window-header-title-color);
 | 
					 | 
				
			||||||
      margin: 4px;
 | 
					 | 
				
			||||||
      height: 3rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  :is(
 | 
					 | 
				
			||||||
    input[type="text"],
 | 
					 | 
				
			||||||
    input[type="number"],
 | 
					 | 
				
			||||||
    input[type="password"],
 | 
					 | 
				
			||||||
    input[type="datetime-local"],
 | 
					 | 
				
			||||||
    input[type="date"],
 | 
					 | 
				
			||||||
    input[type="time"]
 | 
					 | 
				
			||||||
  ) {
 | 
					 | 
				
			||||||
    color: rgba(255, 255, 255, 0.75);
 | 
					 | 
				
			||||||
    background: rgba(255, 255, 255, 0.1);
 | 
					 | 
				
			||||||
    border: 0 none;
 | 
					 | 
				
			||||||
    margin-bottom: 0.2rem;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -279,32 +279,28 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async dormirChateauDormant() {
 | 
					  async dormirChateauDormant() {
 | 
				
			||||||
    if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) {
 | 
					    if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !this.system.sommeil || this.system.sommeil.nouveaujour) {
 | 
				
			||||||
      await this.$dormirChateauDormant();
 | 
					 | 
				
			||||||
      setTimeout(() => this.sheet.render(), 20)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async $dormirChateauDormant() {
 | 
					 | 
				
			||||||
      const message = {
 | 
					      const message = {
 | 
				
			||||||
        whisper: ChatUtility.getOwners(this),
 | 
					        whisper: ChatUtility.getOwners(this),
 | 
				
			||||||
        content: ""
 | 
					        content: ""
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this._recuperationSante(message);
 | 
					      await this._recuperationSante(message)
 | 
				
			||||||
    await this._recupereMoralChateauDormant(message);
 | 
					      await this._recupereMoralChateauDormant(message)
 | 
				
			||||||
    await this._recupereChance();
 | 
					      await this._recupereChance()
 | 
				
			||||||
    await this.transformerStress();
 | 
					      await this.transformerStress()
 | 
				
			||||||
    await this.retourSeuilDeReve(message);
 | 
					      await this.retourSeuilDeReve(message)
 | 
				
			||||||
    await this.setBonusPotionSoin(0);
 | 
					      await this.setBonusPotionSoin(0)
 | 
				
			||||||
    await this.retourSust(message);
 | 
					      await this.retourSust(message)
 | 
				
			||||||
    await this.$perteReveEnchantementsChateauDormants();
 | 
					      await this.$perteReveEnchantementsChateauDormants()
 | 
				
			||||||
    await this.$suppressionLancementsSort();
 | 
					      await this.$suppressionLancementsSort()
 | 
				
			||||||
    await RdDCoeur.applyCoeurChateauDormant(this, message);
 | 
					      await RdDCoeur.applyCoeurChateauDormant(this, message)
 | 
				
			||||||
      if (message.content != "") {
 | 
					      if (message.content != "") {
 | 
				
			||||||
        message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
 | 
					        message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
 | 
				
			||||||
        ChatMessage.create(message);
 | 
					        ChatMessage.create(message);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      await this.resetInfoSommeil();
 | 
					      await this.resetInfoSommeil();
 | 
				
			||||||
 | 
					      setTimeout(() => this.sheet.render(), 20)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async resetInfoSommeil() {
 | 
					  async resetInfoSommeil() {
 | 
				
			||||||
@@ -461,10 +457,12 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
      ChatMessage.create(message);
 | 
					      ChatMessage.create(message);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (options.chateauDormant) {
 | 
					    if (options.chateauDormant) {
 | 
				
			||||||
      await this.$dormirChateauDormant();
 | 
					      await this.dormirChateauDormant();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
      setTimeout(() => this.sheet.render(), 20)
 | 
					      setTimeout(() => this.sheet.render(), 20)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async reveilReveDeDragon(message, heures) {
 | 
					  async reveilReveDeDragon(message, heures) {
 | 
				
			||||||
    const restant = Math.max(this.system.sommeil?.heures - heures, 0)
 | 
					    const restant = Math.max(this.system.sommeil?.heures - heures, 0)
 | 
				
			||||||
@@ -484,7 +482,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
        await this.$recupererFatigue(message);
 | 
					        await this.$recupererFatigue(message);
 | 
				
			||||||
        await this.$jetRecuperationReve(dormi, message);
 | 
					        await this.$jetRecuperationReve(dormi, message);
 | 
				
			||||||
        if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) {
 | 
					        if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) {
 | 
				
			||||||
          await this.$jetRecuperationReve(dormi, message);
 | 
					          dormi.etat = await this.$jetRecuperationReve(dormi, message);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -543,6 +541,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
      max = Math.floor(max / 2);
 | 
					      max = Math.floor(max / 2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const manquant = max - this.system.sante.endurance.value;
 | 
					    const manquant = max - this.system.sante.endurance.value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (manquant > 0) {
 | 
					    if (manquant > 0) {
 | 
				
			||||||
      await this.santeIncDec("endurance", manquant);
 | 
					      await this.santeIncDec("endurance", manquant);
 | 
				
			||||||
      message.content += `Vous récuperez ${manquant} points d'endurance. `;
 | 
					      message.content += `Vous récuperez ${manquant} points d'endurance. `;
 | 
				
			||||||
@@ -559,6 +558,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue))
 | 
					      fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue))
 | 
				
			||||||
      await this.update({ 'system.sante.fatigue.value': fatigue });
 | 
					      await this.update({ 'system.sante.fatigue.value': fatigue });
 | 
				
			||||||
 | 
					      await new Promise(resolve => setTimeout(resolve, 200)); 
 | 
				
			||||||
      if (fatigue == 0) {
 | 
					      if (fatigue == 0) {
 | 
				
			||||||
        message.content += "Vous êtes complêtement reposé. ";
 | 
					        message.content += "Vous êtes complêtement reposé. ";
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -668,23 +668,19 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
    if (!RdDItemRace.checkRacialMax(this, caracName, to)) {
 | 
					    if (!RdDItemRace.checkRacialMax(this, caracName, to)) {
 | 
				
			||||||
      return
 | 
					      return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    let updates = {};
 | 
					 | 
				
			||||||
    if (caracName == LIST_CARAC_PERSONNAGE.reve.code) {
 | 
					    if (caracName == LIST_CARAC_PERSONNAGE.reve.code) {
 | 
				
			||||||
      if (to > Misc.toInt(this.system.reve.seuil.value)) {
 | 
					      if (to > Misc.toInt(this.system.reve.seuil.value)) {
 | 
				
			||||||
        updates[`system.reve.seuil.value`] = to; // SFA : Direct and packed changes
 | 
					        this.setPointsDeSeuil(to);
 | 
				
			||||||
        //this.setPointsDeSeuil(to);
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (caracName == LIST_CARAC_PERSONNAGE.chance.code) {
 | 
					    if (caracName == LIST_CARAC_PERSONNAGE.chance.code) {
 | 
				
			||||||
      if (to > Misc.toInt(this.system.compteurs.chance.value)) {
 | 
					      if (to > Misc.toInt(this.system.compteurs.chance.value)) {
 | 
				
			||||||
        updates[`system.compteurs.chance.value`] = to; // SFA : Direct and packed changes
 | 
					        this.setPointsDeChance(to);
 | 
				
			||||||
        //this.setPointsDeChance(to);
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    let selectedCarac = this.findCaracByName(caracName);
 | 
					    let selectedCarac = this.findCaracByName(caracName);
 | 
				
			||||||
    const from = selectedCarac.value
 | 
					    const from = selectedCarac.value
 | 
				
			||||||
    updates[`system.carac.${caracName}.value`] = to;
 | 
					    await this.update({ [`system.carac.${caracName}.value`]: to });
 | 
				
			||||||
    await this.update(updates);
 | 
					 | 
				
			||||||
    await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName);
 | 
					    await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -788,7 +784,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
      const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories());
 | 
					      const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories());
 | 
				
			||||||
      this.notifyCompetencesTronc(competence, toNiveau);
 | 
					      this.notifyCompetencesTronc(competence, toNiveau);
 | 
				
			||||||
      const fromNiveau = competence.system.niveau;
 | 
					      const fromNiveau = competence.system.niveau;
 | 
				
			||||||
      await competence.update({ 'system.niveau': toNiveau }, { render: true })
 | 
					      await competence.update({ 'system.niveau': toNiveau }, { render: false })
 | 
				
			||||||
      await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true);
 | 
					      await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -1052,10 +1048,20 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
 | 
					  async deleteRencontreTMRAtPosition() {
 | 
				
			||||||
 | 
					    const rencontreIds = this.itemTypes[ITEM_TYPES.rencontre].filter(this.filterRencontreTMRDemiReve()).map(it => it.id)
 | 
				
			||||||
 | 
					    if (rencontreIds.length > 0) {
 | 
				
			||||||
 | 
					      await this.deleteEmbeddedDocuments('Item', rencontreIds)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getRencontreTMREnAttente() {
 | 
					  getRencontreTMREnAttente() {
 | 
				
			||||||
 | 
					    return this.itemTypes[ITEM_TYPES.rencontre].find(this.filterRencontreTMRDemiReve())
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  filterRencontreTMRDemiReve() {
 | 
				
			||||||
    const position = this.getDemiReve()
 | 
					    const position = this.getDemiReve()
 | 
				
			||||||
    return this.itemTypes[ITEM_TYPES.rencontre].find(it => it.system.coord == position)
 | 
					    return it => it.system.coord == position
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -1583,7 +1589,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
      return
 | 
					      return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (rollData.rolled.isEchec ||
 | 
					    if (rollData.rolled.isEchec ||
 | 
				
			||||||
      (rollData.diviseurSignificative && (rollData.rolled.roll * rollData.diviseurSignificative > rollData.rolled.score))) {
 | 
					      (rollData.ajustements.diviseurSignificative && (rollData.rolled.roll * rollData.ajustements.diviseurSignificative > rollData.score))) {
 | 
				
			||||||
      rollData.perteMoralEchec = rollData.moral <= -3 ? 'dissolution' : 'perte';
 | 
					      rollData.perteMoralEchec = rollData.moral <= -3 ? 'dissolution' : 'perte';
 | 
				
			||||||
      rollData.moral = await this.moralIncDec(-1); /* L'appel au moral a échoué. Le personnage perd un point de moral */
 | 
					      rollData.moral = await this.moralIncDec(-1); /* L'appel au moral a échoué. Le personnage perd un point de moral */
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1765,7 +1771,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
    if (reveActuel == 0) { // 0 points de reve
 | 
					    if (reveActuel == 0) { // 0 points de reve
 | 
				
			||||||
      ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" });
 | 
					      ChatMessage.create({ content: this.name + " est réduit à 0 Points de Rêve, et tombe endormi !" });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (!rollData.isSortReserve || !rolled.isSuccess) {
 | 
					    if (!rollData.isSortReserve) {
 | 
				
			||||||
      this.tmrApp?.close();
 | 
					      this.tmrApp?.close();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -1795,8 +1801,10 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
    RollDataAjustements.calcul(rollData, this);
 | 
					    RollDataAjustements.calcul(rollData, this);
 | 
				
			||||||
    await RdDResolutionTable.rollData(rollData);
 | 
					    await RdDResolutionTable.rollData(rollData);
 | 
				
			||||||
    this.gererExperience(rollData);
 | 
					 | 
				
			||||||
    await RdDRollResult.displayRollData(rollData, this)
 | 
					    await RdDRollResult.displayRollData(rollData, this)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.gererExperience(rollData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return rollData.rolled;
 | 
					    return rollData.rolled;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2111,6 +2119,7 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
        label: "Jet de méditation",
 | 
					        label: "Jet de méditation",
 | 
				
			||||||
        callbacks: [
 | 
					        callbacks: [
 | 
				
			||||||
          this.createCallbackExperience(),
 | 
					          this.createCallbackExperience(),
 | 
				
			||||||
 | 
					          { condition: r => r.rolled.isEPart, action: r => this._meditationEPart(r) },
 | 
				
			||||||
          { action: r => this._meditationResult(r) }
 | 
					          { action: r => this._meditationResult(r) }
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
@@ -2119,16 +2128,21 @@ export class RdDActor extends RdDBaseActorSang {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async _meditationResult(meditationRoll) {
 | 
					  async _meditationResult(meditationRoll) {
 | 
				
			||||||
 | 
					    this.santeIncDec("fatigue", 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (meditationRoll.rolled.isSuccess) {
 | 
					    if (meditationRoll.rolled.isSuccess) {
 | 
				
			||||||
      await this.createEmbeddedDocuments("Item", [RdDItemSigneDraconique.prepareSigneDraconiqueMeditation(meditationRoll.meditation, meditationRoll.rolled)]);
 | 
					      await this.createEmbeddedDocuments("Item", [RdDItemSigneDraconique.prepareSigneDraconiqueMeditation(meditationRoll.meditation, meditationRoll.rolled)]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (meditationRoll.rolled.isEPart){
 | 
					
 | 
				
			||||||
      await this.updateEmbeddedDocuments('Item', [{ _id: meditationRoll.meditation._id, 'system.malus': meditationRoll.meditation.system.malus - 1 }]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    await this.santeIncDec("fatigue", 2);
 | 
					 | 
				
			||||||
    await RdDRollResult.displayRollData(meditationRoll, this.name, 'chat-resultat-meditation.hbs');
 | 
					    await RdDRollResult.displayRollData(meditationRoll, this.name, 'chat-resultat-meditation.hbs');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
 | 
					  _meditationEPart(meditationRoll) {
 | 
				
			||||||
 | 
					    this.updateEmbeddedDocuments('Item', [{ _id: meditationRoll.meditation._id, 'system.malus': meditationRoll.meditation.system.malus - 1 }]);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  _getSignesDraconiques(coord) {
 | 
					  _getSignesDraconiques(coord) {
 | 
				
			||||||
    const type = TMRUtility.getTMRType(coord);
 | 
					    const type = TMRUtility.getTMRType(coord);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -341,9 +341,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
 | 
				
			|||||||
    const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined)
 | 
					    const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.openRollDialog({
 | 
					    await this.openRollDialog({
 | 
				
			||||||
      name: 'jet-quelconque',
 | 
					 | 
				
			||||||
      label: 'Jet',
 | 
					 | 
				
			||||||
      template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.hbs',
 | 
					 | 
				
			||||||
      rollData: {
 | 
					      rollData: {
 | 
				
			||||||
        alias: this.getAlias(),
 | 
					        alias: this.getAlias(),
 | 
				
			||||||
        carac: carac,
 | 
					        carac: carac,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,11 +39,6 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  isCumulFatigueCauseSommeil(cumulFatigue){
 | 
					 | 
				
			||||||
    return ReglesOptionnelles.isUsing("appliquer-fatigue")
 | 
					 | 
				
			||||||
    ? (this.getFatigueRestante() <= cumulFatigue)
 | 
					 | 
				
			||||||
    : (this.getEnduranceActuelle() <= cumulFatigue)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  getFatigueRestante() { return this.getFatigueMax() - this.getFatigueActuelle() }
 | 
					  getFatigueRestante() { return this.getFatigueMax() - this.getFatigueActuelle() }
 | 
				
			||||||
  getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value }
 | 
					  getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,12 +14,11 @@ import { ItemAction } from "../item/item-actions.js";
 | 
				
			|||||||
 * Extend the basic ActorSheet with some very simple modifications
 | 
					 * Extend the basic ActorSheet with some very simple modifications
 | 
				
			||||||
 * @extends {ActorSheet}
 | 
					 * @extends {ActorSheet}
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
 | 
					export class RdDBaseActorSheet extends ActorSheet {
 | 
				
			||||||
  static _warnedAppV1 = true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /** @override */
 | 
					  /** @override */
 | 
				
			||||||
  static get defaultOptions() {
 | 
					  static get defaultOptions() {
 | 
				
			||||||
    return foundry.utils.mergeObject(foundry.appv1.sheets.ActorSheet.defaultOptions, {
 | 
					    return foundry.utils.mergeObject(ActorSheet.defaultOptions, {
 | 
				
			||||||
      classes: ["rdd", "sheet", "actor"],
 | 
					      classes: ["rdd", "sheet", "actor"],
 | 
				
			||||||
      tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
 | 
					      tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
 | 
				
			||||||
      dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],
 | 
					      dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -213,7 +213,6 @@ export class RdDBaseActor extends Actor {
 | 
				
			|||||||
  isCreatureEntite() { return this.isCreature() || this.isEntite() }
 | 
					  isCreatureEntite() { return this.isCreature() || this.isEntite() }
 | 
				
			||||||
  isCreature() { return false }
 | 
					  isCreature() { return false }
 | 
				
			||||||
  isEntite(typeentite = []) { return false }
 | 
					  isEntite(typeentite = []) { return false }
 | 
				
			||||||
  isHautRevant() { return false }
 | 
					 | 
				
			||||||
  isVehicule() { return false }
 | 
					  isVehicule() { return false }
 | 
				
			||||||
  isPersonnage() { return false }
 | 
					  isPersonnage() { return false }
 | 
				
			||||||
  getItem(id, type = undefined) {
 | 
					  getItem(id, type = undefined) {
 | 
				
			||||||
@@ -735,7 +734,7 @@ export class RdDBaseActor extends Actor {
 | 
				
			|||||||
      name: this.getAlias(),
 | 
					      name: this.getAlias(),
 | 
				
			||||||
      system: { description: this.system.description }
 | 
					      system: { description: this.system.description }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData)
 | 
					    renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.hbs', chatData)
 | 
				
			||||||
      .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride)));
 | 
					      .then(html => ChatMessage.create(RdDUtility.chatDataSetup(html, modeOverride)));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
 | 
					import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js";
 | 
				
			||||||
import { RdDItem } from "../item.js";
 | 
					import { RdDItem } from "../item.js";
 | 
				
			||||||
 | 
					import { RdDUtility } from "../rdd-utility.js";
 | 
				
			||||||
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
 | 
					import { RdDBaseActorSheet } from "./base-actor-sheet.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -42,8 +44,13 @@ export class RdDCommerceSheet extends RdDBaseActorSheet {
 | 
				
			|||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    super.activateListeners(html);
 | 
					    super.activateListeners(html);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event)));
 | 
				
			||||||
 | 
					    this.html.find('.service-acheter').click(async event => await this.vente(this.getItem(event)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!this.options.editable) return;
 | 
					    if (!this.options.editable) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.html.find('a.item-quantite-moins').click(async event => await this.getItem(event)?.quantiteIncDec(-1, { supprimerSiZero: false }));
 | 
				
			||||||
 | 
					    this.html.find('a.item-quantite-plus').click(async event => await this.getItem(event)?.quantiteIncDec(1));
 | 
				
			||||||
    this.html.find('input.item-quantite').change(async event => {
 | 
					    this.html.find('input.item-quantite').change(async event => {
 | 
				
			||||||
      const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val()));
 | 
					      const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val()));
 | 
				
			||||||
      await this.getItem(event)?.update({ "system.quantite": newQuantite });
 | 
					      await this.getItem(event)?.update({ "system.quantite": newQuantite });
 | 
				
			||||||
@@ -57,4 +64,28 @@ export class RdDCommerceSheet extends RdDBaseActorSheet {
 | 
				
			|||||||
  getTypesInventaire() {
 | 
					  getTypesInventaire() {
 | 
				
			||||||
    return RdDItem.getItemTypesInventaire('all');
 | 
					    return RdDItem.getItemTypesInventaire('all');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async vente(item) {
 | 
				
			||||||
 | 
					    const acheteur = RdDUtility.getSelectedActor();
 | 
				
			||||||
 | 
					    if (!acheteur) {
 | 
				
			||||||
 | 
					      ui.notifications.warn(`Pas d'acheteur sélectionné`);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const disponible = this.actor.getQuantiteDisponible(item)
 | 
				
			||||||
 | 
					    if (disponible == 0) {
 | 
				
			||||||
 | 
					      ui.notifications.warn(`${this.getAlias()} n'a plus de ${item.name} en vente`);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await DialogItemAchat.onAcheter({
 | 
				
			||||||
 | 
					      item,
 | 
				
			||||||
 | 
					      vendeur: this.actor,
 | 
				
			||||||
 | 
					      acheteur,
 | 
				
			||||||
 | 
					      quantiteIllimite: disponible == undefined,
 | 
				
			||||||
 | 
					      nbLots: disponible ?? 1,
 | 
				
			||||||
 | 
					      tailleLot: 1,
 | 
				
			||||||
 | 
					      prixLot: item.calculerPrixCommercant()
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,4 @@
 | 
				
			|||||||
import { DialogItemAchat } from "../achat-vente/dialog-item-achat.js";
 | 
					 | 
				
			||||||
import { Misc } from "../misc.js";
 | 
					import { Misc } from "../misc.js";
 | 
				
			||||||
import { RdDUtility } from "../rdd-utility.js";
 | 
					 | 
				
			||||||
import { RdDBaseActor } from "./base-actor.js";
 | 
					import { RdDBaseActor } from "./base-actor.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDCommerce extends RdDBaseActor {
 | 
					export class RdDCommerce extends RdDBaseActor {
 | 
				
			||||||
@@ -39,27 +37,4 @@ export class RdDCommerce extends RdDBaseActor {
 | 
				
			|||||||
    const pourcentage = this.system.pourcentage ?? 100;
 | 
					    const pourcentage = this.system.pourcentage ?? 100;
 | 
				
			||||||
    return Misc.keepDecimals(Math.ceil(item.system.cout * pourcentage) / 100, 2);
 | 
					    return Misc.keepDecimals(Math.ceil(item.system.cout * pourcentage) / 100, 2);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  async vente(item) {
 | 
					 | 
				
			||||||
    const acheteur = RdDUtility.getSelectedActor();
 | 
					 | 
				
			||||||
    if (!acheteur) {
 | 
					 | 
				
			||||||
      ui.notifications.warn(`Pas d'acheteur sélectionné`);
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    const disponible = this.getQuantiteDisponible(item)
 | 
					 | 
				
			||||||
    if (disponible == 0) {
 | 
					 | 
				
			||||||
      ui.notifications.warn(`${this.getAlias()} n'a plus de ${item.name} en vente`);
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    await DialogItemAchat.onAcheter({
 | 
					 | 
				
			||||||
      item,
 | 
					 | 
				
			||||||
      vendeur: this,
 | 
					 | 
				
			||||||
      acheteur,
 | 
					 | 
				
			||||||
      quantiteIllimite: disponible == undefined,
 | 
					 | 
				
			||||||
      nbLots: disponible ?? 1,
 | 
					 | 
				
			||||||
      tailleLot: 1,
 | 
					 | 
				
			||||||
      prixLot: item.calculerPrixCommercant()
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -7,7 +7,7 @@ import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class RdDActorExportSheet extends RdDActorSheet {
 | 
					export class RdDActorExportSheet extends RdDActorSheet {
 | 
				
			||||||
  static init() {
 | 
					  static init() {
 | 
				
			||||||
    foundry.applications.handlebars.loadTemplates([
 | 
					    loadTemplates([
 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs",
 | 
					      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs",
 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs",
 | 
					      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs",
 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs",
 | 
					      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs",
 | 
				
			||||||
@@ -21,7 +21,7 @@ export class RdDActorExportSheet extends RdDActorSheet {
 | 
				
			|||||||
      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs",
 | 
					      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs",
 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs",
 | 
					      "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs",
 | 
				
			||||||
    ])
 | 
					    ])
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get defaultOptions() {
 | 
					  static get defaultOptions() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import { Misc } from "../../misc.js"
 | 
				
			|||||||
import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js"
 | 
					import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js"
 | 
				
			||||||
import { Mapping } from "./mapping.js"
 | 
					import { Mapping } from "./mapping.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const IMG_SCRIPTARIUM = '<img class="context-menu-img" src="systems/foundryvtt-reve-de-dragon/assets/ui/scriptarium.svg">'
 | 
					const IMG_SCRIPTARIUM = '<img class="context-menu-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/scriptarium.svg">'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ExportScriptarium {
 | 
					export class ExportScriptarium {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -12,18 +12,14 @@ export class ExportScriptarium {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor() {
 | 
					  constructor() {
 | 
				
			||||||
    //Hooks.on("getActorDirectoryFolderContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
					    Hooks.on("getActorDirectoryFolderContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
				
			||||||
    Hooks.on("getFolderContextOptions", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
					    Hooks.on("getActorDirectoryEntryContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
				
			||||||
    //Hooks.on("getActorDirectoryEntryContext", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
					 | 
				
			||||||
    Hooks.on("getActorContextOptions", (actorDirectory, menus) => { ExportScriptarium.INSTANCE.onActorDirectoryMenu(actorDirectory, menus) })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onActorDirectoryMenu(actorDirectory, menus) {
 | 
					  onActorDirectoryMenu(actorDirectory, menus) {
 | 
				
			||||||
    // DEBUG console.log("ExportScriptarium.onActorDirectoryMenu", actorDirectory, menus)
 | 
					 | 
				
			||||||
    menus.push({
 | 
					    menus.push({
 | 
				
			||||||
      name: 'Export Personnages',
 | 
					      name: 'Export Personnages <i class="fa-regular fa-file-csv"></i>',
 | 
				
			||||||
      icon: '<i class="fa-solid fa-download"></i>', //IMG_SCRIPTARIUM,
 | 
					      icon: IMG_SCRIPTARIUM,
 | 
				
			||||||
      condition: (target) => game.user.isGM &&
 | 
					      condition: (target) => game.user.isGM &&
 | 
				
			||||||
        OptionsAvancees.isUsing(EXPORT_CSV_SCRIPTARIUM) &&
 | 
					        OptionsAvancees.isUsing(EXPORT_CSV_SCRIPTARIUM) &&
 | 
				
			||||||
        this.$getActors(actorDirectory, target).length > 0,
 | 
					        this.$getActors(actorDirectory, target).length > 0,
 | 
				
			||||||
@@ -32,28 +28,22 @@ export class ExportScriptarium {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $getTargetName(actorDirectory, target) {
 | 
					  $getTargetName(actorDirectory, target) {
 | 
				
			||||||
    target = $(target)
 | 
					 | 
				
			||||||
    const li = target.closest(".directory-item")
 | 
					    const li = target.closest(".directory-item")
 | 
				
			||||||
    const folderId = li.data("folderId")
 | 
					    const folderId = li.data("folderId")
 | 
				
			||||||
    const actorId = li.data("entryId")
 | 
					    const actorId = li.data("documentId")
 | 
				
			||||||
    return actorId
 | 
					    return actorId
 | 
				
			||||||
      ? game.actors.get(actorId).name
 | 
					      ? game.actors.get(actorId).name
 | 
				
			||||||
      : actorDirectory.collection.filter(it => it.folder.id == folderId).name
 | 
					      : actorDirectory.folders.find(it => it.id == folderId).name
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $getActors(actorDirectory, target) {
 | 
					  $getActors(actorDirectory, target) {
 | 
				
			||||||
    if (actorDirectory.id != "actors") {
 | 
					 | 
				
			||||||
      return []
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // DEBUG console.log("ExportScriptarium.$getActors", actorDirectory, target)
 | 
					 | 
				
			||||||
    target = $(target)
 | 
					 | 
				
			||||||
    const li = target.closest(".directory-item")
 | 
					    const li = target.closest(".directory-item")
 | 
				
			||||||
    const folderId = li.data("folderId")
 | 
					    const folderId = li.data("folderId")
 | 
				
			||||||
    const actorId = li.data("entryId")
 | 
					    const actorId = li.data("documentId")
 | 
				
			||||||
    const actors = actorId
 | 
					    const actors = actorId
 | 
				
			||||||
      ? [game.actors.get(actorId)]
 | 
					      ? [game.actors.get(actorId)]
 | 
				
			||||||
      : folderId
 | 
					      : folderId
 | 
				
			||||||
        ? actorDirectory.collection.filter(it => it.folder.id == folderId)
 | 
					        ? actorDirectory.folders.find(it => it.id == folderId).contents
 | 
				
			||||||
        : []
 | 
					        : []
 | 
				
			||||||
    return actors.filter(it => it.type == ACTOR_TYPES.personnage)
 | 
					    return actors.filter(it => it.type == ACTOR_TYPES.personnage)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -64,7 +54,7 @@ export class ExportScriptarium {
 | 
				
			|||||||
    const actorLines = actors.map(actor => Misc.join(this.getActorLine(actor), ';'))
 | 
					    const actorLines = actors.map(actor => Misc.join(this.getActorLine(actor), ';'))
 | 
				
			||||||
    const data = Misc.join([header, ...actorLines], eol)
 | 
					    const data = Misc.join([header, ...actorLines], eol)
 | 
				
			||||||
    const filename = `scriptarium-${targetName?.slugify()}.csv`;
 | 
					    const filename = `scriptarium-${targetName?.slugify()}.csv`;
 | 
				
			||||||
    foundry.utils.saveDataToFile(data, "text/csv;charset=windows-1252", `${filename}`);
 | 
					    saveDataToFile(data, "text/csv;charset=windows-1252", `${filename}`);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getHeaderLine() {
 | 
					  getHeaderLine() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ const RANDOM_VALUES = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class AppPersonnageAleatoire extends FormApplication {
 | 
					export class AppPersonnageAleatoire extends FormApplication {
 | 
				
			||||||
  static preloadHandlebars() {
 | 
					  static preloadHandlebars() {
 | 
				
			||||||
    foundry.applications.handlebars.loadTemplates([
 | 
					    loadTemplates([
 | 
				
			||||||
      'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs',
 | 
					      'systems/foundryvtt-reve-de-dragon/templates/actor/random/champ-aleatoire.hbs',
 | 
				
			||||||
    ])
 | 
					    ])
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
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"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,111 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,35 +0,0 @@
 | 
				
			|||||||
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)
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,34 +0,0 @@
 | 
				
			|||||||
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)
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,33 +0,0 @@
 | 
				
			|||||||
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs";
 | 
					 | 
				
			||||||
import { ITEM_TYPES } from "../../constants.js";
 | 
					 | 
				
			||||||
import RdDItemBaseSheet from "./common-item-sheet.mjs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDTarotSheet extends RdDItemBaseSheet {
 | 
					 | 
				
			||||||
  /** @override */
 | 
					 | 
				
			||||||
  static get ITEM_TYPE() { return ITEM_TYPES.tarot }
 | 
					 | 
				
			||||||
  static get TEMPLATES() { return [TEMPLATE_DESCRIPTION] }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /** @override */
 | 
					 | 
				
			||||||
  static DEFAULT_OPTIONS = Object.assign({},
 | 
					 | 
				
			||||||
    RdDItemBaseSheet.DEFAULT_OPTIONS,
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      classes: ["fvtt-rdd", "item", "tarot"],
 | 
					 | 
				
			||||||
      position: { width: 448 },
 | 
					 | 
				
			||||||
      window: { contentClasses: ["tarot-content"] }
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /** @override */
 | 
					 | 
				
			||||||
  static PARTS = {
 | 
					 | 
				
			||||||
    main: {
 | 
					 | 
				
			||||||
      template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/tarot.hbs",
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /** @override */
 | 
					 | 
				
			||||||
  async _prepareContext() {
 | 
					 | 
				
			||||||
    return Object.assign(
 | 
					 | 
				
			||||||
      await super._prepareContext(),
 | 
					 | 
				
			||||||
      await TEMPLATE_DESCRIPTION.prepareContext(this.document)
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -13,7 +13,7 @@ const TEXT_ROLL_MANAGERS = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class RdDTextEditor {
 | 
					export class RdDTextEditor {
 | 
				
			||||||
  static registerChatCallbacks(html) {
 | 
					  static registerChatCallbacks(html) {
 | 
				
			||||||
    $(html).on("click", '.roll-text', async event => await RdDTextEditor.rollText(event))
 | 
					    html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static async enrichHTML(text, object, options = {showlink:true}) {
 | 
					  static async enrichHTML(text, object, options = {showlink:true}) {
 | 
				
			||||||
@@ -30,7 +30,7 @@ export class RdDTextEditor {
 | 
				
			|||||||
      context.text = await manager.onReplaceRoll(context);
 | 
					      context.text = await manager.onReplaceRoll(context);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return await foundry.applications.ux.TextEditor.implementation.enrichHTML(context.text, {
 | 
					    return await TextEditor.enrichHTML(context.text, {
 | 
				
			||||||
      relativeTo: object,
 | 
					      relativeTo: object,
 | 
				
			||||||
      secrets: object?.isOwner,
 | 
					      secrets: object?.isOwner,
 | 
				
			||||||
      async: true
 | 
					      async: true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ import { RdDUtility } from "../../rdd-utility.js";
 | 
				
			|||||||
import { RdDAlchimie } from "../../rdd-alchimie.js";
 | 
					import { RdDAlchimie } from "../../rdd-alchimie.js";
 | 
				
			||||||
import { TextRollManager } from "./text-roll-formatter.js";
 | 
					import { TextRollManager } from "./text-roll-formatter.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const REGEX_ALCHIMIE_TERMES = "(?<termes>([-A-Za-zÀ-ÖØ-öø-ÿ ])+)"
 | 
					const REGEX_ALCHIMIE_TERMES = "(?<termes>(\\w|-)+)"
 | 
				
			||||||
const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))"
 | 
					const REGEX_ALCHIMIE_MANIP = "(?<manip>(couleur|consistance))"
 | 
				
			||||||
const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu')
 | 
					const XREGEXP_ROLL_ALCHIMIE = XRegExp("@roll\\[" + REGEX_ALCHIMIE_MANIP + "\\s+" + REGEX_ALCHIMIE_TERMES + "\\]", 'giu')
 | 
				
			||||||
const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu')
 | 
					const XREGEXP_ROLL_ALCHIMIE_MANIP = XRegExp("@" + REGEX_ALCHIMIE_MANIP + "\\{" + REGEX_ALCHIMIE_TERMES + "\\}", 'giu')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
 | 
				
			|||||||
export class ChatUtility {
 | 
					export class ChatUtility {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static async init() {
 | 
					  static async init() {
 | 
				
			||||||
    Hooks.on("renderChatMessageHTML", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg))
 | 
					    Hooks.on("renderChatMessage", async (app, html, msg) => await ChatUtility.onRenderChatMessage(app, html, msg))
 | 
				
			||||||
    Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id))
 | 
					    Hooks.on("createChatMessage", async (chatMessage, options, id) => await ChatUtility.onCreateChatMessage(chatMessage, options, id))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,8 +190,8 @@ export class ChatUtility {
 | 
				
			|||||||
    if (rddTimestamp) {
 | 
					    if (rddTimestamp) {
 | 
				
			||||||
      const timestamp = new RdDTimestamp(rddTimestamp);
 | 
					      const timestamp = new RdDTimestamp(rddTimestamp);
 | 
				
			||||||
      const timestampData = timestamp.toCalendrier();
 | 
					      const timestampData = timestamp.toCalendrier();
 | 
				
			||||||
      const dateHeure = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData);
 | 
					      const dateHeure = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/common/date-heure.hbs', timestampData);
 | 
				
			||||||
      $(html).find('header.message-header .message-sender').after(dateHeure)
 | 
					      html.find('header.message-header .message-sender').after(dateHeure)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,13 +5,13 @@ const INFO_COEUR = 'info-coeur';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class RdDCoeur {
 | 
					export class RdDCoeur {
 | 
				
			||||||
  static registerChatCallbacks(html) {
 | 
					  static registerChatCallbacks(html) {
 | 
				
			||||||
    $(html).on("click", 'a.accepter-tendre-moment', event => {
 | 
					    html.on("click", 'a.accepter-tendre-moment', event => {
 | 
				
			||||||
      RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event))
 | 
					      RdDCoeur.accepterTendreMoment(RdDCoeur.extractInfoCoeur(event))
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    $(html).on("click", 'a.refuser-tendre-moment', event => {
 | 
					    html.on("click", 'a.refuser-tendre-moment', event => {
 | 
				
			||||||
      RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event))
 | 
					      RdDCoeur.refuserTendreMoment(RdDCoeur.extractInfoCoeur(event))
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    $(html).on("click", 'a.perdre-point-coeur-douceur', event => {
 | 
					    html.on("click", 'a.perdre-point-coeur-douceur', event => {
 | 
				
			||||||
      RdDCoeur.perdreEnDouceur(
 | 
					      RdDCoeur.perdreEnDouceur(
 | 
				
			||||||
        RdDCoeur.extractInfoCoeur(event),
 | 
					        RdDCoeur.extractInfoCoeur(event),
 | 
				
			||||||
        event.currentTarget.attributes['data-actor-id'].value)
 | 
					        event.currentTarget.attributes['data-actor-id'].value)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
import { CommonDescription } from "./description.mjs";
 | 
					 | 
				
			||||||
import { CommonInventaire } from "./inventaire.mjs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const TEMPLATE_DESCRIPTION = new CommonDescription()
 | 
					 | 
				
			||||||
export const TEMPLATE_INVENTAIRE = new CommonInventaire()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const ALL_COMMON_TEMPLATES = [TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * class describing common methods implemented by template parts,
 | 
					 | 
				
			||||||
 * used for sheet/models/documents
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export default class CommonTemplate {
 | 
					 | 
				
			||||||
  fields() { }
 | 
					 | 
				
			||||||
  handlebars() { return [] }
 | 
					 | 
				
			||||||
  actions() { return {} }
 | 
					 | 
				
			||||||
  async prepareContext(item) { }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,32 +0,0 @@
 | 
				
			|||||||
import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"
 | 
					 | 
				
			||||||
import CommonTemplate from "./common-template.mjs"
 | 
					 | 
				
			||||||
import { HTMLSTRING } from "./field-types.mjs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const fields = foundry.data.fields
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export class CommonDescription extends CommonTemplate {
 | 
					 | 
				
			||||||
  fields() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      description: new fields.HTMLField({ ...HTMLSTRING }),
 | 
					 | 
				
			||||||
      descriptionmj: new fields.HTMLField({ gmOnly: true, ...HTMLSTRING })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handlebars() {
 | 
					 | 
				
			||||||
    return [
 | 
					 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-description.hbs",
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  actions() {
 | 
					 | 
				
			||||||
    return {}
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async prepareContext(item) {
 | 
					 | 
				
			||||||
    const enriched = {
 | 
					 | 
				
			||||||
      description: await RdDTextEditor.enrichHTML(item.system.description, item),
 | 
					 | 
				
			||||||
      descriptionmj: await RdDTextEditor.enrichHTML(item.system.descriptionmj, item),
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return { enriched }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
export const INTEGER = { required: true, nullable: false, min: 0, integer: true }
 | 
					 | 
				
			||||||
export const DECIMAL = { required: true, nullable: false, min: 0, integer: false } /* TODO: validation de nombre décimales?*/
 | 
					 | 
				
			||||||
export const INTEGER_SIGNED = { required: true, nullable: false, integer: true }
 | 
					 | 
				
			||||||
export const DECIMAL_SIGNED = { required: true, nullable: false, integer: false }
 | 
					 | 
				
			||||||
export const STRING = { required: true, nullable: false, blank: true, trim: true }
 | 
					 | 
				
			||||||
export const HTMLSTRING = { initial: "", required: true, nullable: false, blank: true, textSearch: true }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const MODEL_ARRAY = { initial: [], required: true, nullable: false }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,36 +0,0 @@
 | 
				
			|||||||
import CommonTemplate from "./common-template.mjs"
 | 
					 | 
				
			||||||
import { RARETES } from "../item/raretes.js"
 | 
					 | 
				
			||||||
import { DECIMAL, INTEGER, INTEGER_SIGNED, MODEL_ARRAY, STRING } from "./field-types.mjs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const fields = foundry.data.fields
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export class CommonInventaire extends CommonTemplate {
 | 
					 | 
				
			||||||
  fields() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      encombrement: new fields.NumberField({ label: "Encombrement", initial: 0, ...INTEGER }),
 | 
					 | 
				
			||||||
      quantite: new fields.NumberField({ label: "Quantité", initial: 1, ...INTEGER }),
 | 
					 | 
				
			||||||
      qualite: new fields.NumberField({ label: "Qualité", initial: 0, ...INTEGER_SIGNED }),
 | 
					 | 
				
			||||||
      cout: new fields.NumberField({ label: "Coût", initial: 0.0, ...DECIMAL }),
 | 
					 | 
				
			||||||
      environnement: new fields.ArrayField(
 | 
					 | 
				
			||||||
        new fields.SchemaField({
 | 
					 | 
				
			||||||
          milieu: new fields.StringField({ label: "Milieu", initial: "", ...STRING }),
 | 
					 | 
				
			||||||
          rarete: new fields.StringField({
 | 
					 | 
				
			||||||
            label: "Rareté", initial: RARETES[0].code, ...STRING,
 | 
					 | 
				
			||||||
            validate: (value, options) => RARETES.find(it => it.code == value)
 | 
					 | 
				
			||||||
          }),
 | 
					 | 
				
			||||||
          frequence: new fields.NumberField({ label: "Fréquence", initial: RARETES[0].frequence, ...INTEGER }),
 | 
					 | 
				
			||||||
        }),
 | 
					 | 
				
			||||||
        { label: "Environnement", ...MODEL_ARRAY }),
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handlebars() {
 | 
					 | 
				
			||||||
    return [
 | 
					 | 
				
			||||||
      "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-inventaire.hbs"
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async prepareContext(item) {
 | 
					 | 
				
			||||||
    return {}
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export { default as RdDModelMonnaie } from "./monnaie.mjs"
 | 
					 | 
				
			||||||
export { default as RdDModelMunition } from "./munition.mjs"
 | 
					 | 
				
			||||||
export { default as RdDModelTarot } from "./tarot.mjs"
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
import { RdDItem } from "../item.js";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDItemMonnaie extends RdDItem {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  constructor(data, context) {
 | 
					 | 
				
			||||||
    if (!data.img) {
 | 
					 | 
				
			||||||
      data.img = 'systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    super(data, context);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
import { RdDItem } from "../item.js";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDItemMunition extends RdDItem {
 | 
					 | 
				
			||||||
  static get defaultIcon() {
 | 
					 | 
				
			||||||
    return 'systems/foundryvtt-reve-de-dragon/icons/objets/fleche.webp'
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
import { RdDItem } from "../item.js";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDItemTarot extends RdDItem {
 | 
					 | 
				
			||||||
  static get defaultIcon() {
 | 
					 | 
				
			||||||
    return 'systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp'
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -4,7 +4,8 @@ import { Misc } from "../misc.js"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const ACTION_ITEM_ENCHANTER =  {
 | 
					export const ACTION_ITEM_ENCHANTER =  {
 | 
				
			||||||
  code: 'item-enchanter', label: 'Enchanter', icon: it => 'fa-solid fa-sparkles',
 | 
					  code: 'item-enchanter', label: 'Enchanter', icon: it => 'fa-solid fa-sparkles',
 | 
				
			||||||
  filter: it => game.user.isGM || DialogEnchanter.isEnchantable(it) && it.parent?.type != ACTOR_TYPES.commerce,
 | 
					  filter: it => game.user.isGM || DialogEnchanter.isEnchantable(it),
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => DialogEnchanter.enchanter(item)
 | 
					  action: (item, actor) => DialogEnchanter.enchanter(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -120,13 +120,13 @@ export class RdDItemArme extends Item {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static defenseArmeParade(armeAttaque, armeParade) {
 | 
					  static defenseArmeParade(armeAttaque, armeParade) {
 | 
				
			||||||
    const defCategory = RdDItemArme.getCategorieParade(armeParade)
 | 
					    const defCategory = RdDItemArme.getCategorieParade(armeParade)
 | 
				
			||||||
    if (defCategory == 'boucliers') {
 | 
					    if (defCategory == 'bouclier') {
 | 
				
			||||||
      return 'norm'
 | 
					      return 'norm'
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (armeAttaque?.system?.competence?.toLowerCase().match(/(fléau)/)) {
 | 
					    if (armeAttaque.system.competence.toLowerCase().match(/(fléau)/)) {
 | 
				
			||||||
      return ''
 | 
					      return ''
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (armeParade.system?.tir) {
 | 
					    if (armeParade.system.tir) {
 | 
				
			||||||
      return ''
 | 
					      return ''
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const attCategory = RdDItemArme.getCategorieParade(armeAttaque)
 | 
					    const attCategory = RdDItemArme.getCategorieParade(armeAttaque)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,11 +14,12 @@ import { RdDItem } from "./item.js";
 | 
				
			|||||||
import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
 | 
					import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
 | 
				
			||||||
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
 | 
					import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
 | 
				
			||||||
import { ItemAction } from "./item/item-actions.js";
 | 
					import { ItemAction } from "./item/item-actions.js";
 | 
				
			||||||
 | 
					import { RdDItemGemme } from "./item/gemme.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Extend the basic ItemSheet for RdD specific items
 | 
					 * Extend the basic ItemSheet for RdD specific items
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
					export class RdDItemSheet extends ItemSheet {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get ITEM_TYPE() {
 | 
					  static get ITEM_TYPE() {
 | 
				
			||||||
    return undefined
 | 
					    return undefined
 | 
				
			||||||
@@ -31,7 +32,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static register(sheetClass) {
 | 
					  static register(sheetClass) {
 | 
				
			||||||
    foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, sheetClass, {
 | 
					    Items.registerSheet(SYSTEM_RDD, sheetClass, {
 | 
				
			||||||
      label: Misc.typeName('Item', sheetClass.ITEM_TYPE),
 | 
					      label: Misc.typeName('Item', sheetClass.ITEM_TYPE),
 | 
				
			||||||
      types: [sheetClass.ITEM_TYPE],
 | 
					      types: [sheetClass.ITEM_TYPE],
 | 
				
			||||||
      makeDefault: true
 | 
					      makeDefault: true
 | 
				
			||||||
@@ -42,7 +43,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
  static get defaultOptions() {
 | 
					  static get defaultOptions() {
 | 
				
			||||||
    return foundry.utils.mergeObject(super.defaultOptions, {
 | 
					    return foundry.utils.mergeObject(super.defaultOptions, {
 | 
				
			||||||
      classes: [SYSTEM_RDD, "sheet", "item"],
 | 
					      classes: [SYSTEM_RDD, "sheet", "item"],
 | 
				
			||||||
      template: RdDItemSheetV1.defaultTemplate(RdDItemSheetV1.ITEM_TYPE),
 | 
					      template: RdDItemSheet.defaultTemplate(RdDItemSheet.ITEM_TYPE),
 | 
				
			||||||
      width: 550,
 | 
					      width: 550,
 | 
				
			||||||
      height: 550
 | 
					      height: 550
 | 
				
			||||||
    }, { inplace: false });
 | 
					    }, { inplace: false });
 | 
				
			||||||
@@ -50,7 +51,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  get template() {
 | 
					  get template() {
 | 
				
			||||||
    return RdDItemSheetV1.defaultTemplate(this.item.type);
 | 
					    return RdDItemSheet.defaultTemplate(this.item.type);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get title() {
 | 
					  get title() {
 | 
				
			||||||
@@ -100,7 +101,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
      description: await RdDTextEditor.enrichHTML(this.item.system.description, this.item),
 | 
					      description: await RdDTextEditor.enrichHTML(this.item.system.description, this.item),
 | 
				
			||||||
      descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item),
 | 
					      descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item),
 | 
				
			||||||
      isComestible: this.item.getUtilisationCuisine(),
 | 
					      isComestible: this.item.getUtilisationCuisine(),
 | 
				
			||||||
      options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable),
 | 
					      options: RdDSheetUtility.mergeDocumentRights(this.options, this.item, this.isEditable),
 | 
				
			||||||
      competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage),
 | 
					      competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage),
 | 
				
			||||||
      categories: RdDItem.getCategories(this.item.type),
 | 
					      categories: RdDItem.getCategories(this.item.type),
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -263,7 +264,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
  _updateObject(event, formData) {
 | 
					  _updateObject(event, formData) {
 | 
				
			||||||
    switch (this.item.type) {
 | 
					    switch (this.item.type) {
 | 
				
			||||||
      case ITEM_TYPES.sort:
 | 
					      case ITEM_TYPES.sort:
 | 
				
			||||||
        formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheetV1._listCaseTmr(
 | 
					        formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheet._listCaseTmr(
 | 
				
			||||||
          formData.caseTmrCoord,
 | 
					          formData.caseTmrCoord,
 | 
				
			||||||
          formData.caseTmrBonus,
 | 
					          formData.caseTmrBonus,
 | 
				
			||||||
          formData.caseTmrAdd
 | 
					          formData.caseTmrAdd
 | 
				
			||||||
@@ -313,7 +314,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  async _onDrop(event) {
 | 
					  async _onDrop(event) {
 | 
				
			||||||
    // Try to extract the dragData
 | 
					    // Try to extract the dragData
 | 
				
			||||||
    let dragData = RdDItemSheetV1.$extractDragData(event);
 | 
					    let dragData = RdDItemSheet.$extractDragData(event);
 | 
				
			||||||
    if (!dragData) return false;
 | 
					    if (!dragData) return false;
 | 
				
			||||||
    const allowed = Hooks.call("dropActorSheetData", this.actor, this, dragData);
 | 
					    const allowed = Hooks.call("dropActorSheetData", this.actor, this, dragData);
 | 
				
			||||||
    if (allowed === false) return false;
 | 
					    if (allowed === false) return false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,8 +78,6 @@ export const defaultItemImg = {
 | 
				
			|||||||
  souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp",
 | 
					  souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp",
 | 
				
			||||||
  tarot: "systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp",
 | 
					  tarot: "systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp",
 | 
				
			||||||
  tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp",
 | 
					  tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp",
 | 
				
			||||||
  monnaie:"systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
 | 
					 | 
				
			||||||
  munition: "systems/foundryvtt-reve-de-dragon/icons/objets/fleche.webp"
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* -------------------------------------------- */
 | 
					/* -------------------------------------------- */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
import { ACTOR_TYPES } from "../constants.js"
 | 
					 | 
				
			||||||
import { Misc } from "../misc.js"
 | 
					import { Misc } from "../misc.js"
 | 
				
			||||||
import { RdDSheetUtility } from "../rdd-sheet-utility.js"
 | 
					import { RdDSheetUtility } from "../rdd-sheet-utility.js"
 | 
				
			||||||
import { RdDUtility } from "../rdd-utility.js"
 | 
					import { RdDUtility } from "../rdd-utility.js"
 | 
				
			||||||
@@ -15,21 +14,22 @@ const _SPACEHOLDER = { placeholder: true }
 | 
				
			|||||||
const _VENDRE = {
 | 
					const _VENDRE = {
 | 
				
			||||||
  code: 'item-vendre', label: 'Vendre ou donner', icon: it => 'fa-solid fa-comments-dollar',
 | 
					  code: 'item-vendre', label: 'Vendre ou donner', icon: it => 'fa-solid fa-comments-dollar',
 | 
				
			||||||
  filter: it => Misc.toInt(it.system.quantite) > 0,
 | 
					  filter: it => Misc.toInt(it.system.quantite) > 0,
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => item.proposerVente()
 | 
					  action: (item, actor) => item.proposerVente()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _ACHETER = {
 | 
					const _ACHAT_SERVICE = {
 | 
				
			||||||
  code: 'item-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins',
 | 
					  code: 'item-service-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins',
 | 
				
			||||||
  filter: it => Misc.toInt(it.system.quantite) > 0 && it.parent?.type == ACTOR_TYPES.commerce,
 | 
					  //filter: it => Misc.toInt(it.system.quantite) > 0,
 | 
				
			||||||
  action: (item, actor) => actor.vente(item)
 | 
					  //optionsFilter: options => options.editable,
 | 
				
			||||||
 | 
					  //action: (item, actor) => item.proposerVente()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _MONTRER = {
 | 
					const _MONTRER = {
 | 
				
			||||||
  code: 'item-montrer', label: 'Montrer', icon: it => 'fa-solid fa-comment',
 | 
					  code: 'item-montrer', label: 'Montrer', icon: it => 'fa-solid fa-comment',
 | 
				
			||||||
  allowLimited: true,
 | 
					 | 
				
			||||||
  action: (item, actor) => item.postItemToChat()
 | 
					  action: (item, actor) => item.postItemToChat()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _SPLIT = {
 | 
					const _SPLIT = {
 | 
				
			||||||
  code: 'item-split', label: 'Séparer le goupe', icon: it => 'fa-solid fa-unlink',
 | 
					  code: 'item-split', label: 'Séparer le goupe', icon: it => 'fa-solid fa-unlink',
 | 
				
			||||||
  filter: it => Misc.toInt(it.system.quantite) > 1 && it.parent?.type != ACTOR_TYPES.commerce,
 | 
					  filter: it => Misc.toInt(it.system.quantite) > 1,
 | 
				
			||||||
  action: (item, actor) => RdDSheetUtility.splitItem(item, actor)
 | 
					  action: (item, actor) => RdDSheetUtility.splitItem(item, actor)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,7 +39,7 @@ const _EDIT = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
const _DELETE = {
 | 
					const _DELETE = {
 | 
				
			||||||
  code: 'item-delete', label: 'Supprimer', icon: it => 'fa-solid fa-trash',
 | 
					  code: 'item-delete', label: 'Supprimer', icon: it => 'fa-solid fa-trash',
 | 
				
			||||||
  optionsFilter: options => options.isOwner,
 | 
					  optionsFilter: options => options.editable && options.isOwner,
 | 
				
			||||||
  action: (item, actor) => RdDUtility.confirmActorItemDelete(item, actor)
 | 
					  action: (item, actor) => RdDUtility.confirmActorItemDelete(item, actor)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _EQUIPER = {
 | 
					const _EQUIPER = {
 | 
				
			||||||
@@ -51,25 +51,30 @@ const _EQUIPER = {
 | 
				
			|||||||
const _CUISINER = {
 | 
					const _CUISINER = {
 | 
				
			||||||
  code: 'item-cuisiner', label: 'Cuisiner', icon: it => 'fa-solid fa-utensils',
 | 
					  code: 'item-cuisiner', label: 'Cuisiner', icon: it => 'fa-solid fa-utensils',
 | 
				
			||||||
  filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0,
 | 
					  filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0,
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.preparerNourriture(item)
 | 
					  action: (item, actor) => actor.preparerNourriture(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _MANGER_CRU = {
 | 
					const _MANGER_CRU = {
 | 
				
			||||||
  code: 'item-manger-cru', label: 'Manger cru', icon: it => 'fa-solid fa-drumstick-bite',
 | 
					  code: 'item-manger-cru', label: 'Manger cru', icon: it => 'fa-solid fa-drumstick-bite',
 | 
				
			||||||
  filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0,
 | 
					  filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0,
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.mangerNourriture(item)
 | 
					  action: (item, actor) => actor.mangerNourriture(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _MANGER = {
 | 
					const _MANGER = {
 | 
				
			||||||
  code: 'item-manger', label: 'Manger', icon: it => 'fa-solid fa-utensils',
 | 
					  code: 'item-manger', label: 'Manger', icon: it => 'fa-solid fa-utensils',
 | 
				
			||||||
  filter: it => !(it.system.boisson),
 | 
					  filter: it => !(it.system.boisson),
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.mangerNourriture(item)
 | 
					  action: (item, actor) => actor.mangerNourriture(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _BOIRE = {
 | 
					const _BOIRE = {
 | 
				
			||||||
  code: 'item-boire', label: 'Boire', icon: it => 'fa-solid fa-glass-water',
 | 
					  code: 'item-boire', label: 'Boire', icon: it => 'fa-solid fa-glass-water',
 | 
				
			||||||
  filter: it => it.system.boisson,
 | 
					  filter: it => it.system.boisson,
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.mangerNourriture(item)
 | 
					  action: (item, actor) => actor.mangerNourriture(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _DECOCTION = {
 | 
					const _DECOCTION = {
 | 
				
			||||||
  code: 'item-decoction', label: 'Décoction', icon: it => 'fa-solid fa-flask-vial',
 | 
					  code: 'item-decoction', label: 'Décoction', icon: it => 'fa-solid fa-flask-vial',
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.fabriquerDecoctionHerbe(item)
 | 
					  action: (item, actor) => actor.fabriquerDecoctionHerbe(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const _OUVRIR = {
 | 
					const _OUVRIR = {
 | 
				
			||||||
@@ -79,12 +84,14 @@ const _OUVRIR = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const _LIRE = {
 | 
					const _LIRE = {
 | 
				
			||||||
  code: 'item-lire', label: 'Lire', icon: it => 'fa-solid fa-book-open',
 | 
					  code: 'item-lire', label: 'Lire', icon: it => 'fa-solid fa-book-open',
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.actionLire(item)
 | 
					  action: (item, actor) => actor.actionLire(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const _REFOULER = {
 | 
					const _REFOULER = {
 | 
				
			||||||
  code: 'item-refouler', label: 'Refouler', icon: it => 'fa-solid fa-burst',
 | 
					  code: 'item-refouler', label: 'Refouler', icon: it => 'fa-solid fa-burst',
 | 
				
			||||||
  filter: it => it.system.refoulement > 0,
 | 
					  filter: it => it.system.refoulement > 0,
 | 
				
			||||||
 | 
					  optionsFilter: options => options.editable,
 | 
				
			||||||
  action: (item, actor) => actor.actionRefoulement(item)
 | 
					  action: (item, actor) => actor.actionRefoulement(item)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,7 +102,7 @@ const _SORT_RESERVE = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const COMMON_ACTIONS = [_EQUIPER]
 | 
					export const COMMON_ACTIONS = [_EQUIPER]
 | 
				
			||||||
export const DEFAULT_ACTIONS = [_ACHETER, _SPACEHOLDER, _SPLIT, _VENDRE, _MONTRER, _EDIT, _DELETE]
 | 
					export const DEFAULT_ACTIONS = [_SPACEHOLDER, _SPLIT, _VENDRE, _MONTRER, _EDIT, _DELETE]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ITEM_ACTIONS = {
 | 
					export const ITEM_ACTIONS = {
 | 
				
			||||||
  faune: [_CUISINER, _MANGER_CRU],
 | 
					  faune: [_CUISINER, _MANGER_CRU],
 | 
				
			||||||
@@ -107,16 +114,17 @@ export const ITEM_ACTIONS = {
 | 
				
			|||||||
  ombre: [_REFOULER],
 | 
					  ombre: [_REFOULER],
 | 
				
			||||||
  plante: [_CUISINER, _MANGER_CRU],
 | 
					  plante: [_CUISINER, _MANGER_CRU],
 | 
				
			||||||
  queue: [_REFOULER],
 | 
					  queue: [_REFOULER],
 | 
				
			||||||
  sort: [_SORT_RESERVE]
 | 
					  sort: [_SORT_RESERVE],
 | 
				
			||||||
 | 
					  service: [_ACHAT_SERVICE]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ItemAction {
 | 
					export class ItemAction {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static applies(action, item, options) {
 | 
					  static applies(action, item, options) {
 | 
				
			||||||
    return action && item
 | 
					    return action && item
 | 
				
			||||||
      && item.isActionAllowed(action.code)
 | 
					      && item.isActionAllowed(action.code)
 | 
				
			||||||
      && (!action.filter || action.filter(item))
 | 
					      && (!action.filter || action.filter(item))
 | 
				
			||||||
      && (action.allowLimited || options.editable)
 | 
					 | 
				
			||||||
      && (!action.optionsFilter || action.optionsFilter(options))
 | 
					      && (!action.optionsFilter || action.optionsFilter(options))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -128,10 +136,10 @@ export class ItemAction {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static async onActionItem(event, actor, options) {
 | 
					  static async onActionItem(event, actor, options) {
 | 
				
			||||||
    const code = $(event.currentTarget).data('code')
 | 
					 | 
				
			||||||
    const item = RdDSheetUtility.getItem(event, actor)
 | 
					    const item = RdDSheetUtility.getItem(event, actor)
 | 
				
			||||||
 | 
					    const code = $(event.currentTarget).data('code')
 | 
				
			||||||
    const action = item?.itemActions().find(it => it.code == code)
 | 
					    const action = item?.itemActions().find(it => it.code == code)
 | 
				
			||||||
    if (action && ItemAction.applies(action, item, options)) {
 | 
					    if (action && (!action.optionsFilter || action.optionsFilter(options))) {
 | 
				
			||||||
      await action.action(item, actor)
 | 
					      await action.action(item, actor)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,10 +55,6 @@ export class RdDItemRace extends RdDItem {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  isMax(actor, code, value = undefined) {
 | 
					  isMax(actor, code, value = undefined) {
 | 
				
			||||||
    const path = RdDCarac.carac(code)?.path
 | 
					    const path = RdDCarac.carac(code)?.path
 | 
				
			||||||
    if (path == undefined) {
 | 
					 | 
				
			||||||
      // cas des caractéristiques dérivées, pas de max
 | 
					 | 
				
			||||||
      return false
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (value == undefined) {
 | 
					    if (value == undefined) {
 | 
				
			||||||
      value = path ? foundry.utils.getProperty(actor, path) : 0
 | 
					      value = path ? foundry.utils.getProperty(actor, path) : 0
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
import { HtmlUtility } from "../html-utility.js";
 | 
					import { HtmlUtility } from "../html-utility.js";
 | 
				
			||||||
import { RdDItemSheetV1 } from "../item-sheet.js";
 | 
					import { RdDItemSheet } from "../item-sheet.js";
 | 
				
			||||||
import { Misc } from "../misc.js";
 | 
					import { Misc } from "../misc.js";
 | 
				
			||||||
import { RdDRaretes } from "./raretes.js";
 | 
					import { RdDRaretes } from "./raretes.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TYPE_ITEMS_NATURELS = ["faune", "herbe", "plante", "ingredient"];
 | 
					const TYPE_ITEMS_NATURELS = ["faune", "herbe", "plante", "ingredient"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDItemInventaireSheet extends RdDItemSheetV1 {
 | 
					export class RdDItemInventaireSheet extends RdDItemSheet {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get defaultOptions() {
 | 
					  static get defaultOptions() {
 | 
				
			||||||
    return foundry.utils.mergeObject(RdDItemSheetV1.defaultOptions, {
 | 
					    return foundry.utils.mergeObject(RdDItemSheet.defaultOptions, {
 | 
				
			||||||
      tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "informations" }]
 | 
					      tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "informations" }]
 | 
				
			||||||
    }, { inplace: false })
 | 
					    }, { inplace: false })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import { RdDItemSheetV1 } from "../item-sheet.js";
 | 
					import { RdDItemSheet } from "../item-sheet.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDBlessureItemSheet extends RdDItemSheetV1 {
 | 
					export class RdDBlessureItemSheet extends RdDItemSheet {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get ITEM_TYPE() { return "blessure" };
 | 
					  static get ITEM_TYPE() { return "blessure" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ export class RdDFauneItemSheet extends RdDItemInventaireSheet {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!this.options.editable) return;
 | 
					    if (!this.options.editable) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $(html).find("a.linked-actor-delete").click(async event => await this.onDeleteLinkedActor());
 | 
					    html.find("a.linked-actor-delete").click(async event => await this.onDeleteLinkedActor());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async _onDropActor(event, dragData) {
 | 
					  async _onDropActor(event, dragData) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import { RdDRencontre } from "./rencontre.js";
 | 
					import { RdDRencontre } from "./rencontre.js";
 | 
				
			||||||
import { RdDItemSheetV1 } from "../item-sheet.js";
 | 
					import { RdDItemSheet } from "../item-sheet.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDRencontreItemSheet extends RdDItemSheetV1 {
 | 
					export class RdDRencontreItemSheet extends RdDItemSheet {
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  static get ITEM_TYPE() { return "rencontre" };
 | 
					  static get ITEM_TYPE() { return "rencontre" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import { RdDItemSheetV1 } from "../item-sheet.js";
 | 
					import { RdDItemSheet } from "../item-sheet.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDServiceItemSheet extends RdDItemSheetV1 {
 | 
					export class RdDServiceItemSheet extends RdDItemSheet {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get ITEM_TYPE() { return "service" };
 | 
					  static get ITEM_TYPE() { return "service" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import { RdDItemSheetV1 } from "../item-sheet.js";
 | 
					import { RdDItemSheet } from "../item-sheet.js";
 | 
				
			||||||
import { RdDItemSigneDraconique } from "./signedraconique.js";
 | 
					import { RdDItemSigneDraconique } from "./signedraconique.js";
 | 
				
			||||||
import { TMRUtility } from "../tmr-utility.js";
 | 
					import { TMRUtility } from "../tmr-utility.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Item sheet pour signes draconiques
 | 
					 * Item sheet pour signes draconiques
 | 
				
			||||||
 * @extends {RdDItemSheetV1}
 | 
					 * @extends {RdDItemSheet}
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export class RdDSigneDraconiqueItemSheet extends RdDItemSheetV1 {
 | 
					export class RdDSigneDraconiqueItemSheet extends RdDItemSheet {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static get ITEM_TYPE() { return "signedraconique" }
 | 
					  static get ITEM_TYPE() { return "signedraconique" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,9 +36,9 @@ export class RdDSigneDraconiqueItemSheet extends RdDItemSheetV1 {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!this.options.editable) return;
 | 
					    if (!this.options.editable) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $(html).find(".signe-aleatoire").click(async event => await this.setSigneAleatoire());
 | 
					    html.find(".signe-aleatoire").click(async event => await this.setSigneAleatoire());
 | 
				
			||||||
    $(html).find("input.select-tmr").change(async event => await this.onSelectTmr(event));
 | 
					    html.find("input.select-tmr").change(async event => await this.onSelectTmr(event));
 | 
				
			||||||
    $(html).find(".signe-xp-sort").change(async event => await this.onValeurXpSort(event.currentTarget.attributes['data-typereussite']?.value, Number(event.currentTarget.value)));
 | 
					    html.find(".signe-xp-sort").change(async event => await this.onValeurXpSort(event.currentTarget.attributes['data-typereussite']?.value, Number(event.currentTarget.value)));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async setSigneAleatoire() {
 | 
					  async setSigneAleatoire() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,10 +3,10 @@ import { SYSTEM_RDD } from "../constants.js";
 | 
				
			|||||||
import { Misc } from "../misc.js";
 | 
					import { Misc } from "../misc.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class RdDJournalSheet extends foundry.appv1.sheets.JournalTextPageSheet {
 | 
					export class RdDJournalSheet extends JournalTextPageSheet {
 | 
				
			||||||
  static register() {
 | 
					  static register() {
 | 
				
			||||||
    foundry.applications.apps.DocumentSheetConfig.unregisterSheet(JournalEntryPage, "core", foundry.appv1.sheets.JournalTextPageSheet)
 | 
					    DocumentSheetConfig.unregisterSheet(JournalEntryPage, "core", JournalTextPageSheet)
 | 
				
			||||||
    foundry.applications.apps.DocumentSheetConfig.registerSheet(JournalEntryPage,
 | 
					    DocumentSheetConfig.registerSheet(JournalEntryPage,
 | 
				
			||||||
      SYSTEM_RDD,
 | 
					      SYSTEM_RDD,
 | 
				
			||||||
      RdDJournalSheet, {
 | 
					      RdDJournalSheet, {
 | 
				
			||||||
      types: ["text"],
 | 
					      types: ["text"],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
 | 
				
			|||||||
import { RdDRaretes } from "./item/raretes.js";
 | 
					import { RdDRaretes } from "./item/raretes.js";
 | 
				
			||||||
import { VOIES_DRACONIC } from "./item-sort.js";
 | 
					import { VOIES_DRACONIC } from "./item-sort.js";
 | 
				
			||||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
 | 
					import { SystemCompendiums } from "./settings/system-compendiums.js";
 | 
				
			||||||
import { Misc } from "./misc.js";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Migration {
 | 
					class Migration {
 | 
				
			||||||
  get code() { return "sample"; }
 | 
					  get code() { return "sample"; }
 | 
				
			||||||
@@ -633,36 +632,12 @@ class _12_0_38_TachesEcriture extends Migration {
 | 
				
			|||||||
  async migrate() {
 | 
					  async migrate() {
 | 
				
			||||||
    await this.applyItemsUpdates(items => items
 | 
					    await this.applyItemsUpdates(items => items
 | 
				
			||||||
      .filter(it => [ITEM_TYPES.tache, ITEM_TYPES.livre, ITEM_TYPES.oeuvre, ITEM_TYPES.meditation].includes(it.type) )
 | 
					      .filter(it => [ITEM_TYPES.tache, ITEM_TYPES.livre, ITEM_TYPES.oeuvre, ITEM_TYPES.meditation].includes(it.type) )
 | 
				
			||||||
      .filter(it => Grammar.equalsInsensitive(it.system.competence, 'ecriture'))
 | 
					      .filter(it => it.system.competence == 'Ecriture')
 | 
				
			||||||
      .map(it => { return { _id: it.id, 'system.competence': 'Écriture' } })
 | 
					      .map(it => { return { _id: it.id, 'system.competence': 'Écriture' } })
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _13_0_4_FixReveActuel extends Migration {
 | 
					 | 
				
			||||||
  get code() { return "fix-reve-actuel" }
 | 
					 | 
				
			||||||
  get version() { return "13.0.4" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async migrate() {
 | 
					 | 
				
			||||||
    game.actors.forEach(it => it.update({ 'system.carac.-=reve-actuel': null }))
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class _13_0_7_FixNiveauOeuvres extends Migration {
 | 
					 | 
				
			||||||
  get code() { return "fix-niveau-oeuvres" }
 | 
					 | 
				
			||||||
  get version() { return "13.0.7" }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async migrate() {
 | 
					 | 
				
			||||||
    await this.applyItemsUpdates(items => items
 | 
					 | 
				
			||||||
      .filter(it => [ITEM_TYPES.musique, ITEM_TYPES.chant, ITEM_TYPES.danse, ITEM_TYPES.recettecuisine].includes(it.type))
 | 
					 | 
				
			||||||
      .map(it => {
 | 
					 | 
				
			||||||
        const niveau = isNaN(it.system.niveau) ? 0 : parseInt(it.system.niveau)
 | 
					 | 
				
			||||||
        return { _id: it.id, 'system.niveau': niveau }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export class Migrations {
 | 
					export class Migrations {
 | 
				
			||||||
  static getMigrations() {
 | 
					  static getMigrations() {
 | 
				
			||||||
    return [
 | 
					    return [
 | 
				
			||||||
@@ -685,9 +660,7 @@ export class Migrations {
 | 
				
			|||||||
      new _12_0_26_MigrationVoieSorts(),
 | 
					      new _12_0_26_MigrationVoieSorts(),
 | 
				
			||||||
      new _12_0_32_MigrationRaces(),
 | 
					      new _12_0_32_MigrationRaces(),
 | 
				
			||||||
      new _12_0_37_MigrationAlchimieEtat(),
 | 
					      new _12_0_37_MigrationAlchimieEtat(),
 | 
				
			||||||
      new _12_0_38_TachesEcriture(),
 | 
					      new _12_0_38_TachesEcriture()
 | 
				
			||||||
      new _13_0_4_FixReveActuel(),
 | 
					 | 
				
			||||||
      new _13_0_7_FixNiveauOeuvres(),
 | 
					 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -265,7 +265,7 @@ export class Misc {
 | 
				
			|||||||
    const subset = elements.filter(options.preFilter)
 | 
					    const subset = elements.filter(options.preFilter)
 | 
				
			||||||
      .filter(it => Grammar.toLowerCaseNoAccent(options.mapper(it))?.includes(value))
 | 
					      .filter(it => Grammar.toLowerCaseNoAccent(options.mapper(it))?.includes(value))
 | 
				
			||||||
      .sort(Misc.ascending(it => options.mapper(it)))
 | 
					      .sort(Misc.ascending(it => options.mapper(it)))
 | 
				
			||||||
    if (subset.length == 0) {
 | 
					    if (subset.length == 0 && options?.onMessage) {
 | 
				
			||||||
      options.onMessage(`Pas de ${options.description} correspondant à ${value}`);
 | 
					      options.onMessage(`Pas de ${options.description} correspondant à ${value}`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return subset;
 | 
					    return subset;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
export { default as RdDModelMonnaie } from "./monnaie.mjs"
 | 
					 | 
				
			||||||
export { default as RdDModelMunition } from "./munition.mjs"
 | 
					 | 
				
			||||||
export { default as RdDModelTarot } from "./tarot.mjs"
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../common/_module.mjs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDModelMonnaie extends foundry.abstract.TypeDataModel {
 | 
					 | 
				
			||||||
  static defineSchema() {
 | 
					 | 
				
			||||||
    return Object.assign({},
 | 
					 | 
				
			||||||
      TEMPLATE_DESCRIPTION.fields(),
 | 
					 | 
				
			||||||
      TEMPLATE_INVENTAIRE.fields()
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../common/_module.mjs";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDModelMunition extends foundry.abstract.TypeDataModel {
 | 
					 | 
				
			||||||
  static defineSchema() {
 | 
					 | 
				
			||||||
    return Object.assign({},
 | 
					 | 
				
			||||||
      TEMPLATE_DESCRIPTION.fields(),
 | 
					 | 
				
			||||||
      TEMPLATE_INVENTAIRE.fields()
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,18 +0,0 @@
 | 
				
			|||||||
import { TEMPLATE_DESCRIPTION } from "../common/_module.mjs";
 | 
					 | 
				
			||||||
import { DECIMAL, INTEGER, INTEGER_SIGNED, MODEL_ARRAY, STRING } from "../common/field-types.mjs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const fields = foundry.data.fields
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class RdDModelTarot extends foundry.abstract.TypeDataModel {
 | 
					 | 
				
			||||||
  static defineSchema() {
 | 
					 | 
				
			||||||
    let tarotFields = {
 | 
					 | 
				
			||||||
      concept : new fields.StringField({ label: "Concept", initial: "", ...STRING }),
 | 
					 | 
				
			||||||
      aspect : new fields.StringField({ label: "Aspect", initial: "", ...STRING }),
 | 
					 | 
				
			||||||
      frequence : new fields.NumberField({ label: "Fréquence", initial: 1, ...INTEGER })      
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return Object.assign({},
 | 
					 | 
				
			||||||
      TEMPLATE_DESCRIPTION.fields(),
 | 
					 | 
				
			||||||
      tarotFields
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -17,23 +17,23 @@ import { RdDRollResult } from "./rdd-roll-result.js";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* -------------------------------------------- */
 | 
					/* -------------------------------------------- */
 | 
				
			||||||
const premierRoundInit = [
 | 
					const premierRoundInit = [
 | 
				
			||||||
  { pattern: 'hast' },
 | 
					  { pattern: 'hast', init: 5.90 },
 | 
				
			||||||
  { pattern: 'lance' },
 | 
					  { pattern: 'lance', init: 5.85 },
 | 
				
			||||||
  { pattern: 'baton' },
 | 
					  { pattern: 'baton', init: 5.80 },
 | 
				
			||||||
  { pattern: 'doubledragonne' },
 | 
					  { pattern: 'doubledragonne', init: 5.75 },
 | 
				
			||||||
  { pattern: 'esparlongue' },
 | 
					  { pattern: 'esparlongue', init: 5.70 },
 | 
				
			||||||
  { pattern: 'epeedragonne' },
 | 
					  { pattern: 'epeedragonne', init: 5.65 },
 | 
				
			||||||
  { pattern: 'epeebatarde' },
 | 
					  { pattern: 'epeebatarde', init: 5.60 },
 | 
				
			||||||
  { pattern: 'epeecyane' },
 | 
					  { pattern: 'epeecyane', init: 5.55 },
 | 
				
			||||||
  { pattern: 'epeesorde' },
 | 
					  { pattern: 'epeesorde', init: 5.50 },
 | 
				
			||||||
  { pattern: 'grandehache' },
 | 
					  { pattern: 'grandehache', init: 5.45 },
 | 
				
			||||||
  { pattern: 'bataille' },
 | 
					  { pattern: 'bataille', init: 5.40 },
 | 
				
			||||||
  { pattern: 'epeegnome' },
 | 
					  { pattern: 'epeegnome', init: 5.35 },
 | 
				
			||||||
  { pattern: 'masse' },
 | 
					  { pattern: 'masse', init: 5.30 },
 | 
				
			||||||
  { pattern: 'gourdin' },
 | 
					  { pattern: 'gourdin', init: 5.25 },
 | 
				
			||||||
  { pattern: 'fleau' },
 | 
					  { pattern: 'fleau', init: 5.20 },
 | 
				
			||||||
  { pattern: 'dague' },
 | 
					  { pattern: 'dague', init: 5.15 },
 | 
				
			||||||
  { pattern: 'autre' },
 | 
					  { pattern: 'autre', init: 5.10 },
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* -------------------------------------------- */
 | 
					/* -------------------------------------------- */
 | 
				
			||||||
@@ -45,10 +45,6 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
    Hooks.on("updateCombat", (combat, change, options, userId) => { RdDCombat.onUpdateCombat(combat, change, options, userId) });
 | 
					    Hooks.on("updateCombat", (combat, change, options, userId) => { RdDCombat.onUpdateCombat(combat, change, options, userId) });
 | 
				
			||||||
    Hooks.on("preDeleteCombat", (combat, html, id) => { combat.onPreDeleteCombat() })
 | 
					    Hooks.on("preDeleteCombat", (combat, html, id) => { combat.onPreDeleteCombat() })
 | 
				
			||||||
    Hooks.on("deleteCombat", (combat, html, id) => { combat.onDeleteCombat() })
 | 
					    Hooks.on("deleteCombat", (combat, html, id) => { combat.onDeleteCombat() })
 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (let i = 0.0; i < premierRoundInit.length; i++) {
 | 
					 | 
				
			||||||
      premierRoundInit[i].init = 5.99 - i / 100
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -112,7 +108,9 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
  async rollInitiative(ids, messageOptions = {}) {
 | 
					  async rollInitiative(ids, messageOptions = {}) {
 | 
				
			||||||
    console.log(`${game.system.title} | Combat.rollInitiative()`, ids, messageOptions)
 | 
					    console.log(`${game.system.title} | Combat.rollInitiative()`, ids, messageOptions)
 | 
				
			||||||
    ids = typeof ids === "string" ? [ids] : ids
 | 
					    ids = typeof ids === "string" ? [ids] : ids
 | 
				
			||||||
    Promise.all(ids.map(id => this.rollInitRdD(id, undefined, messageOptions)))
 | 
					    ids.forEach(async id =>
 | 
				
			||||||
 | 
					      await this.rollInitRdD(id, undefined, messageOptions)
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    return this
 | 
					    return this
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -253,13 +251,11 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
      let initMissing = game.combat.combatants.find(it => !it.initiative);
 | 
					      let initMissing = game.combat.combatants.find(it => !it.initiative);
 | 
				
			||||||
      if (!initMissing) { // Premier round !
 | 
					      if (!initMissing) { // Premier round !
 | 
				
			||||||
        for (let combatant of game.combat.combatants) {
 | 
					        for (let combatant of game.combat.combatants) {
 | 
				
			||||||
          if (combatant.initiativeData?.arme?.type == "arme") {
 | 
					          let action = combatant.initiativeData?.arme;
 | 
				
			||||||
            // TODO: get init data premier round
 | 
					          //console.log("Parsed !!!", combatant, initDone, game.combat.current, arme);
 | 
				
			||||||
            const initiativeData = combatant.initiativeData;
 | 
					          if (action && action.type == "arme") {
 | 
				
			||||||
            const action = combatant.initiativeData.arme;
 | 
					            for (let initData of premierRoundInit) {
 | 
				
			||||||
            const fromArme = Grammar.toLowerCaseNoAccentNoSpace(action.system.initpremierround)
 | 
					              if (Grammar.toLowerCaseNoAccentNoSpace(action.system.initpremierround).includes(initData.pattern)) {
 | 
				
			||||||
            const initData = premierRoundInit.find(it => fromArme.includes(initData.pattern))
 | 
					 | 
				
			||||||
            if (initData) {
 | 
					 | 
				
			||||||
                let msg = `<h4>L'initiative de ${combatant.actor.getAlias()} a été modifiée !</h4>
 | 
					                let msg = `<h4>L'initiative de ${combatant.actor.getAlias()} a été modifiée !</h4>
 | 
				
			||||||
                      <hr>
 | 
					                      <hr>
 | 
				
			||||||
                      <div>
 | 
					                      <div>
 | 
				
			||||||
@@ -273,6 +269,7 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static incDecInit(combatantId, incDecValue) {
 | 
					  static incDecInit(combatantId, incDecValue) {
 | 
				
			||||||
@@ -300,7 +297,7 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
    ].concat(options);
 | 
					    ].concat(options);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static async rollInitiativeAction(combatantId, action) {
 | 
					  static rollInitiativeAction(combatantId, action) {
 | 
				
			||||||
    const combatant = game.combat.combatants.get(combatantId)
 | 
					    const combatant = game.combat.combatants.get(combatantId)
 | 
				
			||||||
    const actor = RdDCombatManager.getActorCombatant(combatant)
 | 
					    const actor = RdDCombatManager.getActorCombatant(combatant)
 | 
				
			||||||
    if (actor == undefined) { return [] }
 | 
					    if (actor == undefined) { return [] }
 | 
				
			||||||
@@ -311,8 +308,7 @@ export class RdDCombatManager extends Combat {
 | 
				
			|||||||
    const ajustement = RdDCombatManager.calculAjustementInit(actor, action)
 | 
					    const ajustement = RdDCombatManager.calculAjustementInit(actor, action)
 | 
				
			||||||
    const rollFormula = RdDCombatManager.formuleInitiative(init.offset, init.carac, init.niveau, ajustement);
 | 
					    const rollFormula = RdDCombatManager.formuleInitiative(init.offset, init.carac, init.niveau, ajustement);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await game.combat.rollInitRdD(combatantId, rollFormula, init);
 | 
					    game.combat.rollInitRdD(combatantId, rollFormula, init);
 | 
				
			||||||
    combatant.initiativeData
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static getInitData(actor, action) {
 | 
					  static getInitData(actor, action) {
 | 
				
			||||||
@@ -487,7 +483,7 @@ export class RdDCombat {
 | 
				
			|||||||
      '.appel-destinee-attaque',
 | 
					      '.appel-destinee-attaque',
 | 
				
			||||||
      '.echec-total-attaque',
 | 
					      '.echec-total-attaque',
 | 
				
			||||||
    ]) {
 | 
					    ]) {
 | 
				
			||||||
      $(html).on("click", button, event => {
 | 
					      html.on("click", button, event => {
 | 
				
			||||||
        const rddCombat = RdDCombat.rddCombatForAttackerAndDefender(
 | 
					        const rddCombat = RdDCombat.rddCombatForAttackerAndDefender(
 | 
				
			||||||
          event.currentTarget.attributes['data-attackerId']?.value,
 | 
					          event.currentTarget.attributes['data-attackerId']?.value,
 | 
				
			||||||
          event.currentTarget.attributes['data-attackerTokenId']?.value,
 | 
					          event.currentTarget.attributes['data-attackerTokenId']?.value,
 | 
				
			||||||
@@ -498,7 +494,7 @@ export class RdDCombat {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    $(html).on("click", 'a.chat-jet-vie', event => {
 | 
					    html.on("click", 'a.chat-jet-vie', event => {
 | 
				
			||||||
      event.preventDefault();
 | 
					      event.preventDefault();
 | 
				
			||||||
      RdDCombat._callJetDeVie(event);
 | 
					      RdDCombat._callJetDeVie(event);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
@@ -1051,12 +1047,11 @@ export class RdDCombat {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async _onParade(defenderRoll) {
 | 
					  async _onParade(defenderRoll) {
 | 
				
			||||||
    if (RdDCombat.isReussite(defenderRoll)) {
 | 
					 | 
				
			||||||
      await this._onParadeNormale(defenderRoll)
 | 
					 | 
				
			||||||
    if (RdDCombat.isParticuliere(defenderRoll)) {
 | 
					    if (RdDCombat.isParticuliere(defenderRoll)) {
 | 
				
			||||||
        await this._onParadeParticuliere(defenderRoll)
 | 
					      return await this._onParadeParticuliere(defenderRoll)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
      return
 | 
					    if (RdDCombat.isReussite(defenderRoll)) {
 | 
				
			||||||
 | 
					      return await this._onParadeNormale(defenderRoll)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    await this._onParadeEchec(defenderRoll)
 | 
					    await this._onParadeEchec(defenderRoll)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -1140,12 +1135,11 @@ export class RdDCombat {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async _onEsquive(defenderRoll) {
 | 
					  async _onEsquive(defenderRoll) {
 | 
				
			||||||
    if (RdDCombat.isReussite(defenderRoll)) {
 | 
					 | 
				
			||||||
      await this._onEsquiveNormale(defenderRoll)
 | 
					 | 
				
			||||||
    if (RdDCombat.isParticuliere(defenderRoll)) {
 | 
					    if (RdDCombat.isParticuliere(defenderRoll)) {
 | 
				
			||||||
        await this._onEsquiveParticuliere(defenderRoll)
 | 
					      return await this._onEsquiveParticuliere(defenderRoll)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
      return
 | 
					    if (RdDCombat.isReussite(defenderRoll)) {
 | 
				
			||||||
 | 
					      return await this._onEsquiveNormale(defenderRoll)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return await this._onEsquiveEchec(defenderRoll)
 | 
					    return await this._onEsquiveEchec(defenderRoll)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ export class RdDCompendiumOrganiser {
 | 
				
			|||||||
    console.log('onRenderCompendium', compendium, html, compendiumData);
 | 
					    console.log('onRenderCompendium', compendium, html, compendiumData);
 | 
				
			||||||
    const pack = compendium.collection
 | 
					    const pack = compendium.collection
 | 
				
			||||||
    if (pack.metadata.system === SYSTEM_RDD) {
 | 
					    if (pack.metadata.system === SYSTEM_RDD) {
 | 
				
			||||||
      $(html).find('.directory-item').each((i, element) => {
 | 
					      html.find('.directory-item').each((i, element) => {
 | 
				
			||||||
        RdDCompendiumOrganiser.setEntityTypeName(pack, element);
 | 
					        RdDCompendiumOrganiser.setEntityTypeName(pack, element);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ const imgHeures = [1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12].map(heure => {
 | 
				
			|||||||
const imgSigneDragon = imgHeures[4]
 | 
					const imgSigneDragon = imgHeures[4]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** De pour les jets de rencontre */
 | 
					/** De pour les jets de rencontre */
 | 
				
			||||||
export class DeTMR extends foundry.dice.terms.Die {
 | 
					export class DeTMR extends Die {
 | 
				
			||||||
  /** @override */
 | 
					  /** @override */
 | 
				
			||||||
  static DENOMINATION = "t";
 | 
					  static DENOMINATION = "t";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,7 +50,7 @@ export class DeTMR extends foundry.dice.terms.Die {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** DeDraconique pour le D8 sans limite avec 8=>0 */
 | 
					/** DeDraconique pour le D8 sans limite avec 8=>0 */
 | 
				
			||||||
export class DeDraconique extends foundry.dice.terms.Die {
 | 
					export class DeDraconique extends Die {
 | 
				
			||||||
  /** @override */
 | 
					  /** @override */
 | 
				
			||||||
  static DENOMINATION = "r";
 | 
					  static DENOMINATION = "r";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,7 +89,7 @@ export class DeDraconique extends foundry.dice.terms.Die {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** De 12 avec les heures */
 | 
					/** De 12 avec les heures */
 | 
				
			||||||
export class DeHeure extends foundry.dice.terms.Die {
 | 
					export class DeHeure extends Die {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /** @override */
 | 
					  /** @override */
 | 
				
			||||||
  static DENOMINATION = "h";
 | 
					  static DENOMINATION = "h";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,36 +15,36 @@ export class RdDEmpoignade {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static registerChatCallbacks(html) {
 | 
					  static registerChatCallbacks(html) {
 | 
				
			||||||
    $(html).on("click", '.defense-empoignade-cac', event => {
 | 
					    html.on("click", '.defense-empoignade-cac', event => {
 | 
				
			||||||
      const chatMessage = ChatUtility.getChatMessage(event);
 | 
					      const chatMessage = ChatUtility.getChatMessage(event);
 | 
				
			||||||
      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
					      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
				
			||||||
      let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
 | 
					      let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
 | 
				
			||||||
      RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Corps à corps", "melee")
 | 
					      RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Corps à corps", "melee")
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.defense-empoignade-esquive', event => {
 | 
					    html.on("click", '.defense-empoignade-esquive', event => {
 | 
				
			||||||
      const chatMessage = ChatUtility.getChatMessage(event);
 | 
					      const chatMessage = ChatUtility.getChatMessage(event);
 | 
				
			||||||
      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
					      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
				
			||||||
      let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
 | 
					      let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
 | 
				
			||||||
      RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Esquive", "derobee")
 | 
					      RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Esquive", "derobee")
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.empoignade-poursuivre', event => {
 | 
					    html.on("click", '.empoignade-poursuivre', event => {
 | 
				
			||||||
      let attackerId = event.currentTarget.attributes['data-attackerId'].value
 | 
					      let attackerId = event.currentTarget.attributes['data-attackerId'].value
 | 
				
			||||||
      let defenderId = event.currentTarget.attributes['data-defenderId'].value
 | 
					      let defenderId = event.currentTarget.attributes['data-defenderId'].value
 | 
				
			||||||
      RdDEmpoignade.onAttaqueEmpoignadeValidee(game.actors.get(attackerId), game.actors.get(defenderId))
 | 
					      RdDEmpoignade.onAttaqueEmpoignadeValidee(game.actors.get(attackerId), game.actors.get(defenderId))
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.empoignade-entrainer-sol', event => {
 | 
					    html.on("click", '.empoignade-entrainer-sol', event => {
 | 
				
			||||||
      const chatMessage = ChatUtility.getChatMessage(event);
 | 
					      const chatMessage = ChatUtility.getChatMessage(event);
 | 
				
			||||||
      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
					      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
				
			||||||
      RdDEmpoignade.entrainerAuSol(rollData)
 | 
					      RdDEmpoignade.entrainerAuSol(rollData)
 | 
				
			||||||
      ChatUtility.removeChatMessageId(chatMessage.id)
 | 
					      ChatUtility.removeChatMessageId(chatMessage.id)
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.empoignade-projeter-sol', event => {
 | 
					    html.on("click", '.empoignade-projeter-sol', event => {
 | 
				
			||||||
      const chatMessage = ChatUtility.getChatMessage(event);
 | 
					      const chatMessage = ChatUtility.getChatMessage(event);
 | 
				
			||||||
      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
					      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
				
			||||||
      RdDEmpoignade.projeterAuSol(rollData)
 | 
					      RdDEmpoignade.projeterAuSol(rollData)
 | 
				
			||||||
      ChatUtility.removeChatMessageId(chatMessage.id)
 | 
					      ChatUtility.removeChatMessageId(chatMessage.id)
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("change", '.empoignade-perte-endurance', event => {
 | 
					    html.on("change", '.empoignade-perte-endurance', event => {
 | 
				
			||||||
      const chatMessage = ChatUtility.getChatMessage(event);
 | 
					      const chatMessage = ChatUtility.getChatMessage(event);
 | 
				
			||||||
      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
					      const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
 | 
				
			||||||
      if (event.currentTarget.value && event.currentTarget.value != "none") {
 | 
					      if (event.currentTarget.value && event.currentTarget.value != "none") {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@ import { RdDItemSouffle } from "./item/souffle.js"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { RdDRencontre } from "./item/rencontre.js"
 | 
					import { RdDRencontre } from "./item/rencontre.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { RdDItemSheetV1 } from "./item-sheet.js"
 | 
					import { RdDItemSheet } from "./item-sheet.js"
 | 
				
			||||||
import { RdDBlessureItemSheet } from "./item/sheet-blessure.js"
 | 
					import { RdDBlessureItemSheet } from "./item/sheet-blessure.js"
 | 
				
			||||||
import { RdDServiceItemSheet } from "./item/sheet-service.js"
 | 
					import { RdDServiceItemSheet } from "./item/sheet-service.js"
 | 
				
			||||||
import { RdDRencontreItemSheet } from "./item/sheet-rencontre.js"
 | 
					import { RdDRencontreItemSheet } from "./item/sheet-rencontre.js"
 | 
				
			||||||
@@ -80,10 +80,6 @@ import { RdDItemPotion } from "./item/potion.js"
 | 
				
			|||||||
import { RdDItemGemme } from "./item/gemme.js"
 | 
					import { RdDItemGemme } from "./item/gemme.js"
 | 
				
			||||||
import { RdDGemmeItemSheet } from "./item/sheet-gemme.js"
 | 
					import { RdDGemmeItemSheet } from "./item/sheet-gemme.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as models from "./models/_module.mjs"
 | 
					 | 
				
			||||||
import * as items from "./documents/_module.mjs"
 | 
					 | 
				
			||||||
import * as sheets from "./applications/sheets/_module.mjs"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * RdD system
 | 
					 * RdD system
 | 
				
			||||||
 * Author: LeRatierBretonnien
 | 
					 * Author: LeRatierBretonnien
 | 
				
			||||||
@@ -104,9 +100,6 @@ export class SystemReveDeDragon {
 | 
				
			|||||||
    this.RdDHotbar = RdDHotbar
 | 
					    this.RdDHotbar = RdDHotbar
 | 
				
			||||||
    this.RdDStatBlockParser = RdDStatBlockParser
 | 
					    this.RdDStatBlockParser = RdDStatBlockParser
 | 
				
			||||||
    this.itemClasses = {
 | 
					    this.itemClasses = {
 | 
				
			||||||
      monnaie: items.RdDItemMonnaie,
 | 
					 | 
				
			||||||
      munition: items.RdDItemMunition,
 | 
					 | 
				
			||||||
      tarot: items.RdDModelTarot,
 | 
					 | 
				
			||||||
      armure: RdDItemArmure,
 | 
					      armure: RdDItemArmure,
 | 
				
			||||||
      blessure: RdDItemBlessure,
 | 
					      blessure: RdDItemBlessure,
 | 
				
			||||||
      gemme: RdDItemGemme,
 | 
					      gemme: RdDItemGemme,
 | 
				
			||||||
@@ -136,9 +129,6 @@ export class SystemReveDeDragon {
 | 
				
			|||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  onInit() {
 | 
					  onInit() {
 | 
				
			||||||
    game.system.rdd = this
 | 
					    game.system.rdd = this
 | 
				
			||||||
 | 
					 | 
				
			||||||
    globalThis.RdD = game.system
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.AppAstrologie = AppAstrologie
 | 
					    this.AppAstrologie = AppAstrologie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    console.log(`Initializing Reve de Dragon System Settings`)
 | 
					    console.log(`Initializing Reve de Dragon System Settings`)
 | 
				
			||||||
@@ -185,11 +175,6 @@ export class SystemReveDeDragon {
 | 
				
			|||||||
    console.log(`Initializing Reve de Dragon Documents`)
 | 
					    console.log(`Initializing Reve de Dragon Documents`)
 | 
				
			||||||
    CONFIG.Actor.documentClass = RdDBaseActor
 | 
					    CONFIG.Actor.documentClass = RdDBaseActor
 | 
				
			||||||
    CONFIG.Item.documentClass = RdDItem
 | 
					    CONFIG.Item.documentClass = RdDItem
 | 
				
			||||||
    CONFIG.Item.dataModels = {
 | 
					 | 
				
			||||||
      monnaie: models.RdDModelMonnaie,
 | 
					 | 
				
			||||||
      munition: models.RdDModelMunition,
 | 
					 | 
				
			||||||
      tarot: models.RdDModelTarot,
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    CONFIG.RDD = {
 | 
					    CONFIG.RDD = {
 | 
				
			||||||
      resolutionTable: RdDResolutionTable.resolutionTable,
 | 
					      resolutionTable: RdDResolutionTable.resolutionTable,
 | 
				
			||||||
      carac_array: RdDUtility.getCaracArray(),
 | 
					      carac_array: RdDUtility.getCaracArray(),
 | 
				
			||||||
@@ -199,51 +184,45 @@ export class SystemReveDeDragon {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* -------------------------------------------- */
 | 
					    /* -------------------------------------------- */
 | 
				
			||||||
    // Register sheet application classes
 | 
					    // Register sheet application classes
 | 
				
			||||||
    foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
 | 
					    Actors.unregisterSheet("core", ActorSheet)
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDCommerceSheet, { types: ["commerce"], makeDefault: true })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDCommerceSheet, { types: ["commerce"], makeDefault: true })
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorSheet, { types: ["personnage"], makeDefault: true })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDActorSheet, { types: ["personnage"], makeDefault: true })
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDCreatureSheet, { types: ["creature"], makeDefault: true })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDCreatureSheet, { types: ["creature"], makeDefault: true })
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorVehiculeSheet, { types: ["vehicule"], makeDefault: true })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDActorVehiculeSheet, { types: ["vehicule"], makeDefault: true })
 | 
				
			||||||
    foundry.documents.collections.Actors.registerSheet(SYSTEM_RDD, RdDActorEntiteSheet, { types: ["entite"], makeDefault: true })
 | 
					    Actors.registerSheet(SYSTEM_RDD, RdDActorEntiteSheet, { types: ["entite"], makeDefault: true })
 | 
				
			||||||
    foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet)
 | 
					    Items.unregisterSheet("core", ItemSheet)
 | 
				
			||||||
    RdDActorExportSheet.init()
 | 
					    RdDActorExportSheet.init()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, {
 | 
					    Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, {
 | 
				
			||||||
      types: [
 | 
					      types: [
 | 
				
			||||||
        "objet", "arme", "armure", "livre", "nourritureboisson",
 | 
					        "objet", "arme", "armure", "livre", "munition",
 | 
				
			||||||
 | 
					        "monnaie", "nourritureboisson",
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      makeDefault: true
 | 
					      makeDefault: true
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					    Items.registerSheet(SYSTEM_RDD, RdDItemSheet, {
 | 
				
			||||||
    sheets.RdDItemBaseSheet.registerAll(
 | 
					 | 
				
			||||||
      sheets.RdDMonnaieSheet,
 | 
					 | 
				
			||||||
      sheets.RdDMunitionSheet,
 | 
					 | 
				
			||||||
      sheets.RdDTarotSheet
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    foundry.documents.collections.Items.registerSheet(SYSTEM_RDD, RdDItemSheetV1, {
 | 
					 | 
				
			||||||
      types: [
 | 
					      types: [
 | 
				
			||||||
        "competence", "competencecreature",
 | 
					        "competence", "competencecreature",
 | 
				
			||||||
        "recettealchimique", "musique", "chant", "danse", "jeu", "race",
 | 
					        "recettealchimique", "musique", "chant", "danse", "jeu", "race",
 | 
				
			||||||
        "recettecuisine", "oeuvre", "meditation",
 | 
					        "recettecuisine", "oeuvre", "meditation",
 | 
				
			||||||
        "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
 | 
					        "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
 | 
				
			||||||
        "nombreastral", "tache", "maladie", "poison", "possession",
 | 
					        "nombreastral", "tache", "maladie", "poison", "possession",
 | 
				
			||||||
        "extraitpoetique", "empoignade"
 | 
					        "tarot", "extraitpoetique", "empoignade"
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      makeDefault: true
 | 
					      makeDefault: true
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    RdDItemSheetV1.register(RdDBlessureItemSheet)
 | 
					    RdDItemSheet.register(RdDBlessureItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDConteneurItemSheet)
 | 
					    RdDItemSheet.register(RdDConteneurItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDFauneItemSheet)
 | 
					    RdDItemSheet.register(RdDFauneItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDGemmeItemSheet)
 | 
					    RdDItemSheet.register(RdDGemmeItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDHerbeItemSheet)
 | 
					    RdDItemSheet.register(RdDHerbeItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDIngredientItemSheet)
 | 
					    RdDItemSheet.register(RdDIngredientItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDPlanteItemSheet)
 | 
					    RdDItemSheet.register(RdDPlanteItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDPotionItemSheet)
 | 
					    RdDItemSheet.register(RdDPotionItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDRencontreItemSheet)
 | 
					    RdDItemSheet.register(RdDRencontreItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDServiceItemSheet)
 | 
					    RdDItemSheet.register(RdDServiceItemSheet)
 | 
				
			||||||
    RdDItemSheetV1.register(RdDSigneDraconiqueItemSheet)
 | 
					    RdDItemSheet.register(RdDSigneDraconiqueItemSheet)
 | 
				
			||||||
    RdDJournalSheet.register()
 | 
					    RdDJournalSheet.register()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // préparation des différents modules
 | 
					    // préparation des différents modules
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -268,7 +268,7 @@ export class RdDResolutionTable {
 | 
				
			|||||||
    maxCarac = Math.min(maxCarac, minCarac + 20);
 | 
					    maxCarac = Math.min(maxCarac, minCarac + 20);
 | 
				
			||||||
    minLevel = Math.max(minLevel, -10);
 | 
					    minLevel = Math.max(minLevel, -10);
 | 
				
			||||||
    maxLevel = Math.max(Math.min(maxLevel, 30), minLevel + colonnes);
 | 
					    maxLevel = Math.max(Math.min(maxLevel, 30), minLevel + colonnes);
 | 
				
			||||||
    return await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', {
 | 
					    return await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', {
 | 
				
			||||||
      carac: carac,
 | 
					      carac: carac,
 | 
				
			||||||
      difficulte: level,
 | 
					      difficulte: level,
 | 
				
			||||||
      min: minLevel,
 | 
					      min: minLevel,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,6 @@ export class RdDRollResult {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') {
 | 
					  static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') {
 | 
				
			||||||
    rollData.show = rollData.show || {};
 | 
					    rollData.show = rollData.show || {};
 | 
				
			||||||
    return await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData);
 | 
					    return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ export class RdDRoll extends Dialog {
 | 
				
			|||||||
    RdDRoll._ensureCorrectAction(action);
 | 
					    RdDRoll._ensureCorrectAction(action);
 | 
				
			||||||
    RdDRoll._setDefaultOptions(actor, rollData);
 | 
					    RdDRoll._setDefaultOptions(actor, rollData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const html = await foundry.applications.handlebars.renderTemplate(dialogConfig.html, rollData);
 | 
					    const html = await renderTemplate(dialogConfig.html, rollData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let options = { classes: ["rdd-roll-dialog"], width: 650, height: 'fit-content', 'z-index': 99999, close: html => { } };
 | 
					    let options = { classes: ["rdd-roll-dialog"], width: 650, height: 'fit-content', 'z-index': 99999, close: html => { } };
 | 
				
			||||||
    if (dialogConfig.close) {
 | 
					    if (dialogConfig.close) {
 | 
				
			||||||
@@ -40,7 +40,7 @@ export class RdDRoll extends Dialog {
 | 
				
			|||||||
      etat: actor.getEtatGeneral(),
 | 
					      etat: actor.getEtatGeneral(),
 | 
				
			||||||
      moral: actor.getMoralTotal(), /* La valeur du moral pour les jets de volonté */
 | 
					      moral: actor.getMoralTotal(), /* La valeur du moral pour les jets de volonté */
 | 
				
			||||||
      amoureux: actor.listeSuivants(it => it.coeur > 0),
 | 
					      amoureux: actor.listeSuivants(it => it.coeur > 0),
 | 
				
			||||||
      carac: foundry.utils.duplicate(actor.system.carac),
 | 
					      carac: actor.system.carac,
 | 
				
			||||||
      finalLevel: 0,
 | 
					      finalLevel: 0,
 | 
				
			||||||
      diffConditions: 0,
 | 
					      diffConditions: 0,
 | 
				
			||||||
      diffLibre: rollData.competence?.system.default_diffLibre ?? 0,
 | 
					      diffLibre: rollData.competence?.system.default_diffLibre ?? 0,
 | 
				
			||||||
@@ -344,7 +344,7 @@ export class RdDRoll extends Dialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async buildAjustements(rollData) {
 | 
					  async buildAjustements(rollData) {
 | 
				
			||||||
    return await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs`, rollData);
 | 
					    return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs`, rollData);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,11 +3,11 @@ import { RdDItem } from "./item.js";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class RdDSheetUtility {
 | 
					export class RdDSheetUtility {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static getOptions(document, editable) {
 | 
					  static mergeDocumentRights(options, document, editable) {
 | 
				
			||||||
    const userRightLevel = game.user.isGM
 | 
					    const userRightLevel = game.user.isGM
 | 
				
			||||||
      ? CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
 | 
					      ? CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
 | 
				
			||||||
      : document.getUserLevel(game.user);
 | 
					      : document.getUserLevel(game.user);
 | 
				
			||||||
    return {
 | 
					    let newOptions = {
 | 
				
			||||||
      isGM: game.user.isGM,
 | 
					      isGM: game.user.isGM,
 | 
				
			||||||
      isOwned: document.parent ? true : false,
 | 
					      isOwned: document.parent ? true : false,
 | 
				
			||||||
      editable: editable,
 | 
					      editable: editable,
 | 
				
			||||||
@@ -16,15 +16,10 @@ export class RdDSheetUtility {
 | 
				
			|||||||
      isObserver: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER,
 | 
					      isObserver: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER,
 | 
				
			||||||
      isOwner: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
 | 
					      isOwner: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static mergeDocumentRights(options, document, editable) {
 | 
					 | 
				
			||||||
    const newOptions = RdDSheetUtility.getOptions(document, editable);
 | 
					 | 
				
			||||||
    foundry.utils.mergeObject(options, newOptions);
 | 
					    foundry.utils.mergeObject(options, newOptions);
 | 
				
			||||||
    return options;
 | 
					    return options;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  static getItem(event, actor) {
 | 
					  static getItem(event, actor) {
 | 
				
			||||||
    return actor.items.get(RdDSheetUtility.getItemId(event))
 | 
					    return actor.items.get(RdDSheetUtility.getItemId(event))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import { SHOW_DICE, SYSTEM_RDD } from "./constants.js";
 | 
					import { SHOW_DICE, SYSTEM_RDD } from "./constants.js";
 | 
				
			||||||
import { RollDataAjustements } from "./rolldata-ajustements.js";
 | 
					import { RollDataAjustements } from "./rolldata-ajustements.js";
 | 
				
			||||||
import { RdDUtility } from "./rdd-utility.js";
 | 
					import { RdDUtility } from "./rdd-utility.js";
 | 
				
			||||||
import { COORD_TMR_INCONNU, TMRUtility } from "./tmr-utility.js";
 | 
					import { TMRUtility } from "./tmr-utility.js";
 | 
				
			||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
 | 
					import { RdDResolutionTable } from "./rdd-resolution-table.js";
 | 
				
			||||||
import { RdDTMRRencontreDialog } from "./rdd-tmr-rencontre-dialog.js";
 | 
					import { RdDTMRRencontreDialog } from "./rdd-tmr-rencontre-dialog.js";
 | 
				
			||||||
import { ChatUtility } from "./chat-utility.js";
 | 
					import { ChatUtility } from "./chat-utility.js";
 | 
				
			||||||
@@ -15,6 +15,7 @@ import { ReglesOptionnelles } from "./settings/regles-optionnelles.js";
 | 
				
			|||||||
import { RdDDice } from "./rdd-dice.js";
 | 
					import { RdDDice } from "./rdd-dice.js";
 | 
				
			||||||
import { STATUSES } from "./settings/status-effects.js";
 | 
					import { STATUSES } from "./settings/status-effects.js";
 | 
				
			||||||
import { RdDRencontre } from "./item/rencontre.js";
 | 
					import { RdDRencontre } from "./item/rencontre.js";
 | 
				
			||||||
 | 
					import { RdDTimestamp } from "./time/rdd-timestamp.js";
 | 
				
			||||||
import { ITEM_TYPES } from "./constants.js";
 | 
					import { ITEM_TYPES } from "./constants.js";
 | 
				
			||||||
import { Misc } from "./misc.js";
 | 
					import { Misc } from "./misc.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,7 +48,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static async create(actor, tmrData) {
 | 
					  static async create(actor, tmrData) {
 | 
				
			||||||
    await PixiTMR.init()
 | 
					    await PixiTMR.init()
 | 
				
			||||||
    let html = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.hbs', tmrData);
 | 
					    let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.hbs', tmrData);
 | 
				
			||||||
    if (tmrData.mode != 'visu' && !game.user.isGM) {
 | 
					    if (tmrData.mode != 'visu' && !game.user.isGM) {
 | 
				
			||||||
      ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatUtility.getGMs() });
 | 
					      ChatMessage.create({ content: actor.name + " est monté dans les TMR en mode : " + tmrData.mode, whisper: ChatUtility.getGMs() });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -82,7 +83,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    this.subdialog = undefined
 | 
					    this.subdialog = undefined
 | 
				
			||||||
    this.displaySize = undefined
 | 
					    this.displaySize = undefined
 | 
				
			||||||
    if (!this.viewOnly && !game.user.isGM) {
 | 
					    if (!this.viewOnly && !game.user.isGM) {
 | 
				
			||||||
      this.$tellToGM(this.actor.name + " monte dans les terres médianes (" + tmrData.mode + ")");
 | 
					      this._tellToGM(this.actor.name + " monte dans les terres médianes (" + tmrData.mode + ")");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.callbacksOnAnimate = [];
 | 
					    this.callbacksOnAnimate = [];
 | 
				
			||||||
    const displaySize = TMR_DISPLAY_SIZE.clamp(game.settings.get(SYSTEM_RDD, TMR_DISPLAY_SIZE.code) ?? TMR_DISPLAY_SIZE.def);
 | 
					    const displaySize = TMR_DISPLAY_SIZE.clamp(game.settings.get(SYSTEM_RDD, TMR_DISPLAY_SIZE.code) ?? TMR_DISPLAY_SIZE.def);
 | 
				
			||||||
@@ -138,7 +139,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    this.cumulFatigue += this.fatigueParCase;
 | 
					    this.cumulFatigue += this.fatigueParCase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Le reste...
 | 
					    // Le reste...
 | 
				
			||||||
    this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  lancerUnSort() {
 | 
					  lancerUnSort() {
 | 
				
			||||||
@@ -189,7 +190,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  forceTMRContinueAction() {
 | 
					  forceTMRContinueAction() {
 | 
				
			||||||
    ui.notifications.warn('Vous devez finir votre action avant de continuer dans les TMR');
 | 
					    ui.notifications.warn('Vous devez finir votre action avant de continuer dans les TMR');
 | 
				
			||||||
    this.bringSubDialogToTop();
 | 
					    this.bringSubDialogToTop();
 | 
				
			||||||
    return false
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setTMRPendingAction(dialog) {
 | 
					  setTMRPendingAction(dialog) {
 | 
				
			||||||
@@ -296,7 +297,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    const coordOrig = this._getCoordActor();
 | 
					    const coordOrig = this._getCoordActor();
 | 
				
			||||||
    const coordTarget = TMRUtility.deplacement(coordOrig, move);
 | 
					    const coordTarget = TMRUtility.deplacement(coordOrig, move);
 | 
				
			||||||
    await this._deplacerDemiReve(coordTarget, 'normal');
 | 
					    await this._deplacerDemiReve(coordTarget, 'normal');
 | 
				
			||||||
    await this.$checkQuitterTMR();
 | 
					    this.checkQuitterTMR();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  calculCoutMonteeTMR() {
 | 
					  calculCoutMonteeTMR() {
 | 
				
			||||||
@@ -304,7 +305,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $updateValuesDisplay() {
 | 
					  async updateValuesDisplay() {
 | 
				
			||||||
    if (this.viewOnly || !this.rendered) {
 | 
					    if (this.viewOnly || !this.rendered) {
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -335,31 +336,22 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async close() {
 | 
					  async close() {
 | 
				
			||||||
    await this.$forceClose(this.actor.name + " a quitté les terres médianes")
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async $forceClose(message) {
 | 
					 | 
				
			||||||
    if (this.subdialog) {
 | 
					    if (this.subdialog) {
 | 
				
			||||||
      this.forceTMRContinueAction()
 | 
					      return this.forceTMRContinueAction()
 | 
				
			||||||
      return false
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.descenteTMR = true;
 | 
					    this.descenteTMR = true;
 | 
				
			||||||
    if (this.actor.tmrApp) {
 | 
					    if (this.actor.tmrApp) {
 | 
				
			||||||
      this.actor.tmrApp = undefined // Cleanup reference
 | 
					      this.actor.tmrApp = undefined; // Cleanup reference
 | 
				
			||||||
      const appliquerFatigue = ReglesOptionnelles.isUsing("appliquer-fatigue")
 | 
					 | 
				
			||||||
      await this.actor.santeIncDec(
 | 
					 | 
				
			||||||
        appliquerFatigue ? "fatigue" : "endurance",
 | 
					 | 
				
			||||||
        (appliquerFatigue ? 1 : -1) * this.cumulFatigue)
 | 
					 | 
				
			||||||
      if (!this.viewOnly) {
 | 
					      if (!this.viewOnly) {
 | 
				
			||||||
        await this.actor.setEffect(STATUSES.StatusDemiReve, false)
 | 
					        await this.actor.setEffect(STATUSES.StatusDemiReve, false)
 | 
				
			||||||
        this.$tellToUserAndGM(message)
 | 
					        this._tellToGM(this.actor.name + " a quitté les terres médianes");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      await this.actor.santeIncDec((ReglesOptionnelles.isUsing("appliquer-fatigue") ? "fatigue" : "endurance"),
 | 
				
			||||||
 | 
					        this.cumulFatigue)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.pixiTMR.close();
 | 
					 | 
				
			||||||
    this.pixiTMR = undefined
 | 
					 | 
				
			||||||
    await super.close();
 | 
					    await super.close();
 | 
				
			||||||
    return true
 | 
					    this.pixiTMR.close()
 | 
				
			||||||
 | 
					    this.pixiTMR = undefined
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -371,53 +363,48 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    switch (action) {
 | 
					    switch (action) {
 | 
				
			||||||
      case 'derober':
 | 
					      case 'derober':
 | 
				
			||||||
        await this.$derober()
 | 
					        await this.derober();
 | 
				
			||||||
        this.restoreTMRAfterAction()
 | 
					        this.restoreTMRAfterAction();
 | 
				
			||||||
        return
 | 
					        return;
 | 
				
			||||||
      case 'refouler':
 | 
					      case 'refouler':
 | 
				
			||||||
        await this.$refouler()
 | 
					        await this.refouler();
 | 
				
			||||||
        break
 | 
					        break;
 | 
				
			||||||
      case 'maitriser':
 | 
					      case 'maitriser':
 | 
				
			||||||
        await this.$maitriserRencontre()
 | 
					        await this.maitriserRencontre();
 | 
				
			||||||
        break
 | 
					        break;
 | 
				
			||||||
      case 'ignorer':
 | 
					      case 'ignorer':
 | 
				
			||||||
        await this.$ignorerRencontre()
 | 
					        await this.ignorerRencontre();
 | 
				
			||||||
        break
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    await this.postRencontre(tmr);
 | 
					    await this.postRencontre(tmr);
 | 
				
			||||||
    this.restoreTMRAfterAction();
 | 
					    this.restoreTMRAfterAction();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async $derober() {
 | 
					  async derober() {
 | 
				
			||||||
    if (this.currentRencontre) {
 | 
					 | 
				
			||||||
    console.log("-> derober", this.currentRencontre);
 | 
					    console.log("-> derober", this.currentRencontre);
 | 
				
			||||||
    await this.actor.addTMRRencontre(this.currentRencontre);
 | 
					    await this.actor.addTMRRencontre(this.currentRencontre);
 | 
				
			||||||
      this.$forceClose(`${this.actor.name} s'est dérobé face à la rencontre ${this.currentRencontre.name}, et quitte les TMR.`)
 | 
					    this._tellToGM(this.actor.name + " s'est dérobé et quitte les TMR.");
 | 
				
			||||||
    }
 | 
					    this.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $refouler() {
 | 
					  async refouler() {
 | 
				
			||||||
    if (this.currentRencontre) {
 | 
					 | 
				
			||||||
    console.log("-> refouler", this.currentRencontre);
 | 
					    console.log("-> refouler", this.currentRencontre);
 | 
				
			||||||
    await this.actor.ajouterRefoulement(this.currentRencontre.system.refoulement, `${this.currentRencontre.system.genre == 'f' ? 'une' : 'un'} ${this.currentRencontre.name}`);
 | 
					    await this.actor.ajouterRefoulement(this.currentRencontre.system.refoulement, `${this.currentRencontre.system.genre == 'f' ? 'une' : 'un'} ${this.currentRencontre.name}`);
 | 
				
			||||||
      await this.$deleteRencontreTMRAtPosition()
 | 
					    await this.actor.deleteRencontreTMRAtPosition()
 | 
				
			||||||
    this.updateTokens();
 | 
					    this.updateTokens();
 | 
				
			||||||
      this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
      this.$nettoyerRencontre();
 | 
					    this.nettoyerRencontre();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $ignorerRencontre() {
 | 
					  async ignorerRencontre() {
 | 
				
			||||||
    if (this.currentRencontre) {
 | 
					 | 
				
			||||||
    console.log("-> ignorer", this.currentRencontre);
 | 
					    console.log("-> ignorer", this.currentRencontre);
 | 
				
			||||||
      this.$tellToGM(this.actor.name + " a ignoré: " + this.currentRencontre.name);
 | 
					    this._tellToGM(this.actor.name + " a ignoré: " + this.currentRencontre.name);
 | 
				
			||||||
      await this.$deleteRencontreTMRAtPosition()
 | 
					    await this.actor.deleteRencontreTMRAtPosition()
 | 
				
			||||||
    this.updateTokens();
 | 
					    this.updateTokens();
 | 
				
			||||||
      this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
      this.$nettoyerRencontre();
 | 
					    this.nettoyerRencontre();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -434,29 +421,41 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $checkQuitterTMR() {
 | 
					  checkQuitterTMR() {
 | 
				
			||||||
    const reason = this.actor.isDead()
 | 
					    if (this.actor.isDead()) {
 | 
				
			||||||
      ? "est mort"
 | 
					      this._tellToGM("Vous êtes mort : vous quittez les Terres médianes !");
 | 
				
			||||||
      : this.actor.isCumulFatigueCauseSommeil(this.cumulFatigue)
 | 
					      this.close();
 | 
				
			||||||
        ? "s'écroule de fatigue"
 | 
					      return true;
 | 
				
			||||||
        : (this.actor.getReveActuel() == 0)
 | 
					 | 
				
			||||||
          ? "tombe à 0 Points de Rêve"
 | 
					 | 
				
			||||||
          : undefined
 | 
					 | 
				
			||||||
    if (reason) {
 | 
					 | 
				
			||||||
      if (!this.actor.isDead()) {
 | 
					 | 
				
			||||||
        await this.$refouler()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
      this.$forceClose(`${this.actor.name} ${reason} et quitte les Terres médianes !`)
 | 
					
 | 
				
			||||||
      return true
 | 
					    if (ReglesOptionnelles.isUsing("appliquer-fatigue")
 | 
				
			||||||
 | 
					      ? (this.actor.getFatigueRestante() <= this.cumulFatigue)
 | 
				
			||||||
 | 
					      : (this.actor.getEnduranceActuelle() <= this.cumulFatigue)
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					      this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !");
 | 
				
			||||||
 | 
					      this.quitterLesTMRInconscient();
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return false
 | 
					
 | 
				
			||||||
 | 
					    if (this.actor.getReveActuel() == 0) {
 | 
				
			||||||
 | 
					      this._tellToGM("Vos Points de Rêve sont à 0 : vous quittez les Terres médianes !");
 | 
				
			||||||
 | 
					      this.quitterLesTMRInconscient();
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $maitriserRencontre() {
 | 
					  async quitterLesTMRInconscient() {
 | 
				
			||||||
 | 
					    await this.refouler();
 | 
				
			||||||
 | 
					    this.close();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
 | 
					  async maitriserRencontre() {
 | 
				
			||||||
    console.log("-> maitriser", this.currentRencontre);
 | 
					    console.log("-> maitriser", this.currentRencontre);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.$deleteRencontreTMRAtPosition();
 | 
					    await this.actor.deleteRencontreTMRAtPosition()
 | 
				
			||||||
    this.updateTokens();
 | 
					    this.updateTokens();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let rencontreData = {
 | 
					    let rencontreData = {
 | 
				
			||||||
@@ -471,21 +470,11 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
      tmr: TMRUtility.getTMR(this._getCoordActor())
 | 
					      tmr: TMRUtility.getTMR(this._getCoordActor())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.$tentativeMaitrise(rencontreData);
 | 
					    await this._tentativeMaitrise(rencontreData);
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async $deleteRencontreTMRAtPosition() {
 | 
					 | 
				
			||||||
    const position = this.actor.getDemiReve()
 | 
					 | 
				
			||||||
    const rencontreIds = this.actor.itemTypes[ITEM_TYPES.rencontre]
 | 
					 | 
				
			||||||
      .filter(it => it.system.coord == position)
 | 
					 | 
				
			||||||
      .map(it => it.id)
 | 
					 | 
				
			||||||
    if (rencontreIds.length > 0) {
 | 
					 | 
				
			||||||
      await this.actor.deleteEmbeddedDocuments('Item', rencontreIds)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $tentativeMaitrise(rencData) {
 | 
					  async _tentativeMaitrise(rencData) {
 | 
				
			||||||
    this.rencontreState = 'normal';
 | 
					    this.rencontreState = 'normal';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rencData.reve = this.actor.getReveActuel();
 | 
					    rencData.reve = this.actor.getReveActuel();
 | 
				
			||||||
@@ -494,7 +483,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    RollDataAjustements.calcul(rencData, this.actor);
 | 
					    RollDataAjustements.calcul(rencData, this.actor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rencData.rolled = rencData.presentCite
 | 
					    rencData.rolled = rencData.presentCite
 | 
				
			||||||
      ? this.$rollPresentCite(rencData)
 | 
					      ? this._rollPresentCite(rencData)
 | 
				
			||||||
      : await RdDResolutionTable.roll(rencData.reve, RollDataAjustements.sum(rencData.ajustements));
 | 
					      : await RdDResolutionTable.roll(rencData.reve, RollDataAjustements.sum(rencData.ajustements));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const result = rencData.rolled.isSuccess
 | 
					    const result = rencData.rolled.isSuccess
 | 
				
			||||||
@@ -504,41 +493,38 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    await RdDRencontre.appliquer(result.effets, this, rencData);
 | 
					    await RdDRencontre.appliquer(result.effets, this, rencData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rencData.poesie = { extrait: result.poesie, reference: result.reference };
 | 
					    rencData.poesie = { extrait: result.poesie, reference: result.reference };
 | 
				
			||||||
    rencData.message = this.$formatMessageRencontre(rencData, result.message);
 | 
					    rencData.message = this.formatMessageRencontre(rencData, result.message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ChatMessage.create({
 | 
					    ChatMessage.create({
 | 
				
			||||||
      whisper: ChatUtility.getOwners(this.actor),
 | 
					      whisper: ChatUtility.getOwners(this.actor),
 | 
				
			||||||
      content: await foundry.applications.handlebars.renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.hbs`, rencData)
 | 
					      content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.hbs`, rencData)
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
    if (await this.$checkQuitterTMR()) {
 | 
					    if (this.checkQuitterTMR()) {
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (this.rencontreState == 'persistant') {
 | 
					    if (this.rencontreState == 'persistant') {
 | 
				
			||||||
      this.$nouvelleTentativeMaitrise(rencData);
 | 
					      this._nouvelleTentativeMaitrise(rencData);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (!this.isRencontreDeplacement()) {
 | 
					    else if (!this.isRencontreDeplacement()) {
 | 
				
			||||||
      this.$nettoyerRencontre();
 | 
					      this.nettoyerRencontre();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $nouvelleTentativeMaitrise(rencData) {
 | 
					  _nouvelleTentativeMaitrise(rencData) {
 | 
				
			||||||
    setTimeout(() => {
 | 
					    setTimeout(() => {
 | 
				
			||||||
      /**
 | 
					      // TODO: remplacer par une boucle while(this.currentRencontre) ?
 | 
				
			||||||
       * TODO: remplacer par une boucle while(this.currentRencontre) ?
 | 
					 | 
				
			||||||
       * ajouter un moyen d'attendre la saisie de l'utilisateur (jet obligatoire)?
 | 
					 | 
				
			||||||
       */
 | 
					 | 
				
			||||||
      rencData.nbRounds++;
 | 
					      rencData.nbRounds++;
 | 
				
			||||||
      if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
 | 
					      if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
 | 
				
			||||||
        this.cumulFatigue += this.fatigueParCase;
 | 
					        this.cumulFatigue += this.fatigueParCase;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      this.$tentativeMaitrise(rencData);
 | 
					      this._tentativeMaitrise(rencData);
 | 
				
			||||||
      this.$deleteTmrMessages(rencData.actor, rencData.nbRounds);
 | 
					      this._deleteTmrMessages(rencData.actor, rencData.nbRounds);
 | 
				
			||||||
    }, 2000);
 | 
					    }, 2000);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $formatMessageRencontre(rencData, template) {
 | 
					  formatMessageRencontre(rencData, template) {
 | 
				
			||||||
    let messageDuree = ''
 | 
					    let messageDuree = ''
 | 
				
			||||||
    if (rencData.nbRounds > 1) {
 | 
					    if (rencData.nbRounds > 1) {
 | 
				
			||||||
      if (rencData.rolled.isSuccess) {
 | 
					      if (rencData.rolled.isSuccess) {
 | 
				
			||||||
@@ -557,7 +543,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  $rollPresentCite(rencData) {
 | 
					  _rollPresentCite(rencData) {
 | 
				
			||||||
    let rolled = RdDResolutionTable.computeChances(rencData.reve, 0);
 | 
					    let rolled = RdDResolutionTable.computeChances(rencData.reve, 0);
 | 
				
			||||||
    foundry.utils.mergeObject(rolled, { caracValue: rencData.reve, finalLevel: 0, roll: rolled.score });
 | 
					    foundry.utils.mergeObject(rolled, { caracValue: rencData.reve, finalLevel: 0, roll: rolled.score });
 | 
				
			||||||
    RdDResolutionTable.succesRequis(rolled);
 | 
					    RdDResolutionTable.succesRequis(rolled);
 | 
				
			||||||
@@ -565,7 +551,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  $deleteTmrMessages(actor, nbRounds = -1) {
 | 
					  _deleteTmrMessages(actor, nbRounds = -1) {
 | 
				
			||||||
    setTimeout(() => {
 | 
					    setTimeout(() => {
 | 
				
			||||||
      if (nbRounds < 0) {
 | 
					      if (nbRounds < 0) {
 | 
				
			||||||
        ChatUtility.removeChatMessageContaining(`<h4 data-categorie="tmr" data-actor-id="${actor._id}"`);
 | 
					        ChatUtility.removeChatMessageContaining(`<h4 data-categorie="tmr" data-actor-id="${actor._id}"`);
 | 
				
			||||||
@@ -584,7 +570,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  $tellToGM(message) {
 | 
					  _tellToGM(message) {
 | 
				
			||||||
    ChatMessage.create({
 | 
					    ChatMessage.create({
 | 
				
			||||||
      user: game.user.id,
 | 
					      user: game.user.id,
 | 
				
			||||||
      content: message,
 | 
					      content: message,
 | 
				
			||||||
@@ -593,7 +579,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  $tellToUserAndGM(message) {
 | 
					  _tellToUserAndGM(message) {
 | 
				
			||||||
    ChatMessage.create({
 | 
					    ChatMessage.create({
 | 
				
			||||||
      user: game.user.id,
 | 
					      user: game.user.id,
 | 
				
			||||||
      content: message,
 | 
					      content: message,
 | 
				
			||||||
@@ -615,7 +601,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    if (this.currentRencontre) {
 | 
					    if (this.currentRencontre) {
 | 
				
			||||||
      if (this.rencontresExistantes.find(it => it.id == this.currentRencontre.id)) {
 | 
					      if (this.rencontresExistantes.find(it => it.id == this.currentRencontre.id)) {
 | 
				
			||||||
        // rencontre en attente suite à dérobade
 | 
					        // rencontre en attente suite à dérobade
 | 
				
			||||||
        await this.$maitriserRencontre();
 | 
					        await this.maitriserRencontre();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      else {
 | 
					      else {
 | 
				
			||||||
        const dialog = new RdDTMRRencontreDialog(this.actor, this.currentRencontre, tmr);
 | 
					        const dialog = new RdDTMRRencontreDialog(this.actor, this.currentRencontre, tmr);
 | 
				
			||||||
@@ -662,7 +648,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
      tmr: tmr,
 | 
					      tmr: tmr,
 | 
				
			||||||
      presentCite: presentCite
 | 
					      presentCite: presentCite
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    await this.$tentativeMaitrise(rencontreData);
 | 
					    await this._tentativeMaitrise(rencontreData);
 | 
				
			||||||
    this.postRencontre(tmr);
 | 
					    this.postRencontre(tmr);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -741,7 +727,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
      content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.hbs`, rollData)
 | 
					      content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.hbs`, rollData)
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    if (rollData.rolled.isEchec) {
 | 
					    if (rollData.rolled.isEchec) {
 | 
				
			||||||
      await this.$forceClose(`n'a pas maîtrisé la case ${rollData.tmr.label} et quitte les terres médianes`)
 | 
					      await this.close();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    await this.souffleSiEchecTotal(rollData);
 | 
					    await this.souffleSiEchecTotal(rollData);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -796,7 +782,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
        onConqueteReussie: r => EffetsDraconiques.fermetureCites.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
					        onConqueteReussie: r => EffetsDraconiques.fermetureCites.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
				
			||||||
        onConqueteEchec: r => {
 | 
					        onConqueteEchec: r => {
 | 
				
			||||||
          this.souffleSiEchecTotal(rollData);
 | 
					          this.souffleSiEchecTotal(rollData);
 | 
				
			||||||
          this.$forceClose(`${this.actor.name} n'a pas maîtrisé la ${tmr.label}, et quitte les TMR.`)
 | 
					          this.close()
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        canClose: false
 | 
					        canClose: false
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
@@ -811,7 +797,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
        onConqueteReussie: r => EffetsDraconiques.periple.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
					        onConqueteReussie: r => EffetsDraconiques.periple.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
				
			||||||
        onConqueteEchec: r => {
 | 
					        onConqueteEchec: r => {
 | 
				
			||||||
          this.souffleSiEchecTotal(rollData);
 | 
					          this.souffleSiEchecTotal(rollData);
 | 
				
			||||||
          this.$forceClose(`${this.actor.name} n'a pas purifié la ${tmr.label}, et quitte les TMR.`)
 | 
					          this.close()
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        canClose: false
 | 
					        canClose: false
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
@@ -825,7 +811,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
        difficulte: -7,
 | 
					        difficulte: -7,
 | 
				
			||||||
        action: 'Conquérir',
 | 
					        action: 'Conquérir',
 | 
				
			||||||
        onConqueteReussie: r => EffetsDraconiques.conquete.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
					        onConqueteReussie: r => EffetsDraconiques.conquete.onVisiteSupprimer(r.actor, tmr, (casetmr) => this.removeToken(tmr, casetmr)),
 | 
				
			||||||
        onConqueteEchec: r => this.$forceClose(`${this.actor.name} n'a pas conquis la case ${tmr.label}, et quitte les TMR.`),
 | 
					        onConqueteEchec: r => this.close(),
 | 
				
			||||||
        canClose: false
 | 
					        canClose: false
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -936,15 +922,19 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async processSortReserve(sortReserve) {
 | 
					  async processSortReserve(sortReserve) {
 | 
				
			||||||
    await this.actor.deleteEmbeddedDocuments('Item', [sortReserve.id]);
 | 
					    await this.actor.deleteEmbeddedDocuments('Item', [sortReserve.id]);
 | 
				
			||||||
    console.log("declencheSortEnReserve", sortReserve)
 | 
					    console.log("declencheSortEnReserve", sortReserve);
 | 
				
			||||||
    const sort = sortReserve.system.sortid ? this.actor.items.get(sortReserve.system.sortid) : undefined
 | 
					    const heureCible = RdDTimestamp.definition(sortReserve.system.heurecible).label;
 | 
				
			||||||
    const message = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-lancement-sortreserve.hbs`,
 | 
					    this._tellToUserAndGM(`Vous avez déclenché 
 | 
				
			||||||
      { sortReserve, sort })
 | 
					        ${sortReserve.system.echectotal ? "<strong>l'échec total!</strong>" : "le sort"}
 | 
				
			||||||
    await this.$forceClose(message)
 | 
					        en réserve <strong>${sortReserve.name}</strong>
 | 
				
			||||||
 | 
					        avec ${sortReserve.system.ptreve} points de Rêve
 | 
				
			||||||
 | 
					        en ${sortReserve.system.coord} (${TMRUtility.getTMRLabel(sortReserve.system.coord)}).
 | 
				
			||||||
 | 
					        L'heure ciblée est ${heureCible}`);
 | 
				
			||||||
 | 
					    this.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  $nettoyerRencontre() {
 | 
					  nettoyerRencontre() {
 | 
				
			||||||
    // Suppression des dessins des zones possibles
 | 
					    // Suppression des dessins des zones possibles
 | 
				
			||||||
    this.currentRencontre?.graphics?.forEach(graphic => this.pixiTMR.removeGraphic(graphic))
 | 
					    this.currentRencontre?.graphics?.forEach(graphic => this.pixiTMR.removeGraphic(graphic))
 | 
				
			||||||
    // Nettoyage de la structureet de l'état
 | 
					    // Nettoyage de la structureet de l'état
 | 
				
			||||||
@@ -996,10 +986,6 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    const targetOddq = this.pixiTMR.computeEventOddq(event)
 | 
					    const targetOddq = this.pixiTMR.computeEventOddq(event)
 | 
				
			||||||
    const targetCoord = TMRUtility.oddqToCoordTMR(targetOddq)
 | 
					    const targetCoord = TMRUtility.oddqToCoordTMR(targetOddq)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (targetCoord == COORD_TMR_INCONNU){
 | 
					 | 
				
			||||||
      ui.notifications.error("Vous ne pouvez pas vous déplacer ici");
 | 
					 | 
				
			||||||
      return
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // Validation de la case de destination (gestion du cas des rencontres qui peuvent téléporter)
 | 
					    // Validation de la case de destination (gestion du cas des rencontres qui peuvent téléporter)
 | 
				
			||||||
    const typeDeplacement = this._calculDeplacement(targetCoord, currentCoord, currentOddq, targetOddq);
 | 
					    const typeDeplacement = this._calculDeplacement(targetCoord, currentCoord, currentOddq, targetOddq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1035,7 +1021,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
        console.log("STATUS :", this.rencontreState, this.currentRencontre);
 | 
					        console.log("STATUS :", this.rencontreState, this.currentRencontre);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.$checkQuitterTMR();
 | 
					    this.checkQuitterTMR();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -1068,13 +1054,13 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    */
 | 
					    */
 | 
				
			||||||
    this.notifierResonanceSigneDraconique(targetCoord);
 | 
					    this.notifierResonanceSigneDraconique(targetCoord);
 | 
				
			||||||
    await this.actor.rollUnSort(targetCoord);
 | 
					    await this.actor.rollUnSort(targetCoord);
 | 
				
			||||||
    this.$nettoyerRencontre();
 | 
					    this.nettoyerRencontre();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  externalRefresh() {
 | 
					  externalRefresh() {
 | 
				
			||||||
    this.createPixiSprites();
 | 
					    this.createPixiSprites();
 | 
				
			||||||
    this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
    this.updateTokens();
 | 
					    this.updateTokens();
 | 
				
			||||||
    console.log("TMR REFRESHED !!!");
 | 
					    console.log("TMR REFRESHED !!!");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -1085,7 +1071,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
      return this.forceTMRContinueAction()
 | 
					      return this.forceTMRContinueAction()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (this.currentRencontre != 'normal') {
 | 
					    if (this.currentRencontre != 'normal') {
 | 
				
			||||||
      this.$nettoyerRencontre();
 | 
					      this.nettoyerRencontre();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    let tmr = TMRUtility.getTMR(targetCoord);
 | 
					    let tmr = TMRUtility.getTMR(targetCoord);
 | 
				
			||||||
    // Gestion cases spéciales type Trou noir, etc
 | 
					    // Gestion cases spéciales type Trou noir, etc
 | 
				
			||||||
@@ -1097,7 +1083,7 @@ export class RdDTMRDialog extends Dialog {
 | 
				
			|||||||
    if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
 | 
					    if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
 | 
				
			||||||
      this.cumulFatigue += this.fatigueParCase;
 | 
					      this.cumulFatigue += this.fatigueParCase;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.$updateValuesDisplay();
 | 
					    this.updateValuesDisplay();
 | 
				
			||||||
    this.actor.notifyRefreshTMR();
 | 
					    this.actor.notifyRefreshTMR();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
 | 
					    if (deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
/* -------------------------------------------- */
 | 
					/* -------------------------------------------- */
 | 
				
			||||||
import { HtmlUtility } from "./html-utility.js";
 | 
					import { HtmlUtility } from "./html-utility.js";
 | 
				
			||||||
 | 
					import { Misc } from "./misc.js";
 | 
				
			||||||
import { RdDCombatManager } from "./rdd-combat.js";
 | 
					import { RdDCombatManager } from "./rdd-combat.js";
 | 
				
			||||||
import { Targets } from "./targets.js";
 | 
					import { Targets } from "./targets.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,8 +14,8 @@ export class RdDTokenHud {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static async removeExtensionHud(app, html, tokenId) {
 | 
					  static async removeExtensionHud(app, html, tokenId) {
 | 
				
			||||||
    $(html).find('.control-icon.rdd-combat').remove();
 | 
					    html.find('.control-icon.rdd-combat').remove();
 | 
				
			||||||
    $(html).find('.control-icon.rdd-initiative').remove();
 | 
					    html.find('.control-icon.rdd-initiative').remove();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
@@ -49,7 +50,7 @@ export class RdDTokenHud {
 | 
				
			|||||||
        { name: 'Initiative +1', command: 'inc', value: 0.01 },
 | 
					        { name: 'Initiative +1', command: 'inc', value: 0.01 },
 | 
				
			||||||
        { name: 'Initiative -1', command: 'dec', value: -0.01 }]
 | 
					        { name: 'Initiative -1', command: 'dec', value: -0.01 }]
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    const controlIconCombat = $(html).find('.control-icon[data-action=combat]');
 | 
					    const controlIconCombat = html.find('.control-icon[data-action=combat]');
 | 
				
			||||||
    await RdDTokenHud._configureSubMenu(controlIconCombat,
 | 
					    await RdDTokenHud._configureSubMenu(controlIconCombat,
 | 
				
			||||||
      'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.hbs',
 | 
					      'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.hbs',
 | 
				
			||||||
      hudData,
 | 
					      hudData,
 | 
				
			||||||
@@ -68,7 +69,7 @@ export class RdDTokenHud {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static async addExtensionHudCombat(html, combatant, token, actions) {
 | 
					  static async addExtensionHudCombat(html, combatant, token, actions) {
 | 
				
			||||||
    const hudData = { combatant, token, actions, commandes: [] };
 | 
					    const hudData = { combatant, token, actions, commandes: [] };
 | 
				
			||||||
    const controlIconTarget = $(html).find('.control-icon[data-action=target]');
 | 
					    const controlIconTarget = html.find('.control-icon[data-action=target]');
 | 
				
			||||||
    await RdDTokenHud._configureSubMenu(controlIconTarget, 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.hbs', hudData,
 | 
					    await RdDTokenHud._configureSubMenu(controlIconTarget, 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.hbs', hudData,
 | 
				
			||||||
      (event) => {
 | 
					      (event) => {
 | 
				
			||||||
        const actionIndex = event.currentTarget.attributes['data-action-index']?.value;
 | 
					        const actionIndex = event.currentTarget.attributes['data-action-index']?.value;
 | 
				
			||||||
@@ -88,7 +89,7 @@ export class RdDTokenHud {
 | 
				
			|||||||
    if (target?.actor) {
 | 
					    if (target?.actor) {
 | 
				
			||||||
      const hudSoins = { blessures: target.actor.blessuresASoigner() ?? [] };
 | 
					      const hudSoins = { blessures: target.actor.blessuresASoigner() ?? [] };
 | 
				
			||||||
      if (hudSoins.blessures.length > 0) {
 | 
					      if (hudSoins.blessures.length > 0) {
 | 
				
			||||||
        const controlIconTarget = $(html).find('.control-icon[data-action=combat]');
 | 
					        const controlIconTarget = html.find('.control-icon[data-action=combat]');
 | 
				
			||||||
        await RdDTokenHud._configureSubMenu(controlIconTarget,
 | 
					        await RdDTokenHud._configureSubMenu(controlIconTarget,
 | 
				
			||||||
          'systems/foundryvtt-reve-de-dragon/templates/hud-actor-soins.hbs',
 | 
					          'systems/foundryvtt-reve-de-dragon/templates/hud-actor-soins.hbs',
 | 
				
			||||||
          hudSoins,
 | 
					          hudSoins,
 | 
				
			||||||
@@ -111,8 +112,7 @@ export class RdDTokenHud {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static async addTokenHudExtensions(app, html, tokenId) {
 | 
					  static async addTokenHudExtensions(app, html, tokenId) {
 | 
				
			||||||
    console.log(`Adding token HUD extensions for token ${tokenId}`);
 | 
					    const controlIconCombat = html.find('.control-icon[data-action=combat]');
 | 
				
			||||||
    const controlIconCombat = $(html).find('.control-icon[data-action=combat]');
 | 
					 | 
				
			||||||
    if (controlIconCombat.length > 0) {
 | 
					    if (controlIconCombat.length > 0) {
 | 
				
			||||||
      controlIconCombat.click(event => {
 | 
					      controlIconCombat.click(event => {
 | 
				
			||||||
        if (event.currentTarget.className.includes('active')) {
 | 
					        if (event.currentTarget.className.includes('active')) {
 | 
				
			||||||
@@ -129,7 +129,7 @@ export class RdDTokenHud {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  static async _configureSubMenu(insertionPoint, template, hudData, onMenuItem) {
 | 
					  static async _configureSubMenu(insertionPoint, template, hudData, onMenuItem) {
 | 
				
			||||||
    const hud = $(await foundry.applications.handlebars.renderTemplate(template, hudData));
 | 
					    const hud = $(await renderTemplate(template, hudData));
 | 
				
			||||||
    const list = hud.find('div.rdd-hud-list');
 | 
					    const list = hud.find('div.rdd-hud-list');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    RdDTokenHud._toggleHudListActive(hud, list);
 | 
					    RdDTokenHud._toggleHudListActive(hud, list);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -318,7 +318,6 @@ export class RdDUtility {
 | 
				
			|||||||
    // gestion des dates et heures
 | 
					    // gestion des dates et heures
 | 
				
			||||||
    Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
 | 
					    Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
 | 
				
			||||||
    Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
 | 
					    Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
 | 
				
			||||||
    Handlebars.registerHelper('timestamp-definition', (heure) => RdDTimestamp.definition(heure))
 | 
					 | 
				
			||||||
    Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
 | 
					    Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
 | 
				
			||||||
    Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
 | 
					    Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
 | 
				
			||||||
    Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
 | 
					    Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
 | 
				
			||||||
@@ -349,7 +348,7 @@ export class RdDUtility {
 | 
				
			|||||||
    Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
 | 
					    Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
 | 
				
			||||||
    Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
 | 
					    Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foundry.applications.handlebars.loadTemplates(templatePaths);
 | 
					    loadTemplates(templatePaths);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static getItem(itemId, actorId = undefined) {
 | 
					  static getItem(itemId, actorId = undefined) {
 | 
				
			||||||
@@ -733,14 +732,14 @@ export class RdDUtility {
 | 
				
			|||||||
    RdDTextEditor.registerChatCallbacks(html)
 | 
					    RdDTextEditor.registerChatCallbacks(html)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Gestion spécifique message passeurs
 | 
					    // Gestion spécifique message passeurs
 | 
				
			||||||
    $(html).on("click", '.tmr-passeur-coord a', event => {
 | 
					    html.on("click", '.tmr-passeur-coord a', event => {
 | 
				
			||||||
      let coord = event.currentTarget.attributes['data-tmr-coord'].value;
 | 
					      let coord = event.currentTarget.attributes['data-tmr-coord'].value;
 | 
				
			||||||
      let actorId = event.currentTarget.attributes['data-actor-id'].value;
 | 
					      let actorId = event.currentTarget.attributes['data-actor-id'].value;
 | 
				
			||||||
      let actor = game.actors.get(actorId);
 | 
					      let actor = game.actors.get(actorId);
 | 
				
			||||||
      actor.tmrApp.positionnerDemiReve(coord);
 | 
					      actor.tmrApp.positionnerDemiReve(coord);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    // Gestion spécifique des sorts en réserve multiples (ie têtes)
 | 
					    // Gestion spécifique des sorts en réserve multiples (ie têtes)
 | 
				
			||||||
    $(html).on("click", '.declencher-sort-reserve', event => {
 | 
					    html.on("click", '.declencher-sort-reserve', event => {
 | 
				
			||||||
      let coord = event.currentTarget.attributes['data-tmr-coord'].value;
 | 
					      let coord = event.currentTarget.attributes['data-tmr-coord'].value;
 | 
				
			||||||
      let sortId = event.currentTarget.attributes['data-sort-id'].value;
 | 
					      let sortId = event.currentTarget.attributes['data-sort-id'].value;
 | 
				
			||||||
      let actorId = event.currentTarget.attributes['data-actor-id'].value;
 | 
					      let actorId = event.currentTarget.attributes['data-actor-id'].value;
 | 
				
			||||||
@@ -750,7 +749,7 @@ export class RdDUtility {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // gestion bouton tchat Possession
 | 
					    // gestion bouton tchat Possession
 | 
				
			||||||
    $(html).on("click", '.defense-possession', event => {
 | 
					    html.on("click", '.defense-possession', event => {
 | 
				
			||||||
      let attackerId = event.currentTarget.attributes['data-attackerId'].value
 | 
					      let attackerId = event.currentTarget.attributes['data-attackerId'].value
 | 
				
			||||||
      let defenderId = event.currentTarget.attributes['data-defenderId'].value
 | 
					      let defenderId = event.currentTarget.attributes['data-defenderId'].value
 | 
				
			||||||
      let possessionId = event.currentTarget.attributes['data-possessionId'].value
 | 
					      let possessionId = event.currentTarget.attributes['data-possessionId'].value
 | 
				
			||||||
@@ -758,16 +757,16 @@ export class RdDUtility {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // gestion bouton tchat Acheter
 | 
					    // gestion bouton tchat Acheter
 | 
				
			||||||
    $(html).on("click", '.button-acheter', event => {
 | 
					    html.on("click", '.button-acheter', event => {
 | 
				
			||||||
      const venteData = DialogItemAchat.preparerAchat(event.currentTarget);
 | 
					      const venteData = DialogItemAchat.preparerAchat(event.currentTarget);
 | 
				
			||||||
      if (venteData) {
 | 
					      if (venteData) {
 | 
				
			||||||
        DialogItemAchat.onAcheter(venteData);
 | 
					        DialogItemAchat.onAcheter(venteData);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event));
 | 
					    html.on("click", '.button-creer-acteur', event => RdDNameGen.onCreerActeur(event));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Gestion du bouton payer
 | 
					    // Gestion du bouton payer
 | 
				
			||||||
    $(html).on("click", '.payer-button', event => {
 | 
					    html.on("click", '.payer-button', event => {
 | 
				
			||||||
      let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0);
 | 
					      let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0);
 | 
				
			||||||
      let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
 | 
					      let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
 | 
				
			||||||
      if (actor) {
 | 
					      if (actor) {
 | 
				
			||||||
@@ -775,8 +774,8 @@ export class RdDUtility {
 | 
				
			|||||||
        ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget));
 | 
					        ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget));
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    $(html).on("click", '.rdd-world-content-link', async event => {
 | 
					    html.on("click", '.rdd-world-content-link', async event => {
 | 
				
			||||||
      const htmlElement = $(html).find(event.currentTarget);
 | 
					      const htmlElement = html.find(event.currentTarget);
 | 
				
			||||||
      const id = htmlElement?.data("id");
 | 
					      const id = htmlElement?.data("id");
 | 
				
			||||||
      const doctype = htmlElement?.data("doctype");
 | 
					      const doctype = htmlElement?.data("doctype");
 | 
				
			||||||
      switch (doctype ?? 'Item') {
 | 
					      switch (doctype ?? 'Item') {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ import { Misc } from "../misc.js"
 | 
				
			|||||||
export const EXPORT_CSV_SCRIPTARIUM = 'export-csv-scriptarium'
 | 
					export const EXPORT_CSV_SCRIPTARIUM = 'export-csv-scriptarium'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const OPTIONS_AVANCEES = [
 | 
					const OPTIONS_AVANCEES = [
 | 
				
			||||||
  { group: 'Menus', name: EXPORT_CSV_SCRIPTARIUM, descr: "Proposer le menu d'export csv Scriptarium", default: false },
 | 
					  { group: 'Menus', name: EXPORT_CSV_SCRIPTARIUM, descr: "Proposer le menu d'export csv Scriptarium" },
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class OptionsAvancees extends FormApplication {
 | 
					export class OptionsAvancees extends FormApplication {
 | 
				
			||||||
@@ -24,6 +24,10 @@ export class OptionsAvancees extends FormApplication {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(...args) {
 | 
				
			||||||
 | 
					    super(...args)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static _getId(name) {
 | 
					  static _getId(name) {
 | 
				
			||||||
    return `rdd-advanced-${name}`
 | 
					    return `rdd-advanced-${name}`
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -71,7 +75,7 @@ export class OptionsAvancees extends FormApplication {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    $(html).find(".select-option").click((event) => {
 | 
					    html.find(".select-option").click((event) => {
 | 
				
			||||||
      if (event.currentTarget.attributes.name) {
 | 
					      if (event.currentTarget.attributes.name) {
 | 
				
			||||||
        let id = event.currentTarget.attributes.name.value
 | 
					        let id = event.currentTarget.attributes.name.value
 | 
				
			||||||
        let isChecked = event.currentTarget.checked
 | 
					        let isChecked = event.currentTarget.checked
 | 
				
			||||||
@@ -84,3 +88,4 @@ export class OptionsAvancees extends FormApplication {
 | 
				
			|||||||
    this.close()
 | 
					    this.close()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,7 +112,7 @@ export class ReglesOptionnelles extends FormApplication {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    $(html).find(".select-option").click((event) => {
 | 
					    html.find(".select-option").click((event) => {
 | 
				
			||||||
      if (event.currentTarget.attributes.name) {
 | 
					      if (event.currentTarget.attributes.name) {
 | 
				
			||||||
        let id = event.currentTarget.attributes.name.value;
 | 
					        let id = event.currentTarget.attributes.name.value;
 | 
				
			||||||
        let isChecked = event.currentTarget.checked;
 | 
					        let isChecked = event.currentTarget.checked;
 | 
				
			||||||
@@ -125,3 +125,4 @@ export class ReglesOptionnelles extends FormApplication {
 | 
				
			|||||||
    this.close();
 | 
					    this.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -131,7 +131,7 @@ export class StatusEffects extends FormApplication {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    $(html).find(".select-effect").click((event) => {
 | 
					    html.find(".select-effect").click((event) => {
 | 
				
			||||||
      let id = event.currentTarget.attributes.name?.value;
 | 
					      let id = event.currentTarget.attributes.name?.value;
 | 
				
			||||||
      if (id) {
 | 
					      if (id) {
 | 
				
			||||||
        let selected = StatusEffects._getUseStatusEffects();
 | 
					        let selected = StatusEffects._getUseStatusEffects();
 | 
				
			||||||
@@ -151,3 +151,4 @@ export class StatusEffects extends FormApplication {
 | 
				
			|||||||
    this.close();
 | 
					    this.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -184,7 +184,7 @@ export class SystemCompendiums extends FormApplication {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    $(html).find("select.system-compendium-setting").change((event) => {
 | 
					    html.find("select.system-compendium-setting").change((event) => {
 | 
				
			||||||
      const compendium = $(event.currentTarget).data('compendium')
 | 
					      const compendium = $(event.currentTarget).data('compendium')
 | 
				
			||||||
      const value = $(event.currentTarget).val();
 | 
					      const value = $(event.currentTarget).val();
 | 
				
			||||||
      const systemCompendium = CONFIGURABLE_COMPENDIUMS[compendium];
 | 
					      const systemCompendium = CONFIGURABLE_COMPENDIUMS[compendium];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ export class DialogChateauDormant extends Dialog {
 | 
				
			|||||||
      motifStress: `Nuit du ${date}`,
 | 
					      motifStress: `Nuit du ${date}`,
 | 
				
			||||||
      finChateauDormant: game.system.rdd.calendrier.getTimestampFinChateauDormant()
 | 
					      finChateauDormant: game.system.rdd.calendrier.getTimestampFinChateauDormant()
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    const html = await foundry.applications.handlebars.renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-chateau-dormant.hbs",
 | 
					    const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-chateau-dormant.hbs",
 | 
				
			||||||
      dialogData);
 | 
					      dialogData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    new DialogChateauDormant(dialogData, html)
 | 
					    new DialogChateauDormant(dialogData, html)
 | 
				
			||||||
@@ -36,7 +36,7 @@ export class DialogChateauDormant extends Dialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    super.activateListeners(html);
 | 
					    super.activateListeners(html);
 | 
				
			||||||
    this.html = $(html);
 | 
					    this.html = html;
 | 
				
			||||||
    this.html.find('input.sommeil-insomnie').change(event => this.onInsomnie(event));
 | 
					    this.html.find('input.sommeil-insomnie').change(event => this.onInsomnie(event));
 | 
				
			||||||
    this._activateListenerOnActorMoral(this.html);
 | 
					    this._activateListenerOnActorMoral(this.html);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,6 @@ const TEMPLATE_CALENDRIER = "systems/foundryvtt-reve-de-dragon/templates/time/ca
 | 
				
			|||||||
const INITIAL_CALENDAR_POS = { top: 200, left: 200, horlogeAnalogique: true };
 | 
					const INITIAL_CALENDAR_POS = { top: 200, left: 200, horlogeAnalogique: true };
 | 
				
			||||||
/* -------------------------------------------- */
 | 
					/* -------------------------------------------- */
 | 
				
			||||||
export class RdDCalendrier extends Application {
 | 
					export class RdDCalendrier extends Application {
 | 
				
			||||||
  static _warnedAppV1 = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static initSettings() {
 | 
					  static initSettings() {
 | 
				
			||||||
    game.settings.register(SYSTEM_RDD, "liste-nombre-astral", {
 | 
					    game.settings.register(SYSTEM_RDD, "liste-nombre-astral", {
 | 
				
			||||||
      name: "liste-nombre-astral",
 | 
					      name: "liste-nombre-astral",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,7 +102,7 @@ export class TMRRencontres {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* -------------------------------------------- */
 | 
					  /* -------------------------------------------- */
 | 
				
			||||||
  async $chatRolledRencontre(row, rencontre, tmr) {
 | 
					  async $chatRolledRencontre(row, rencontre, tmr) {
 | 
				
			||||||
    const flavorContent = await foundry.applications.handlebars.renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.hbs',
 | 
					    const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll-rencontre.hbs',
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        roll: row.roll,
 | 
					        roll: row.roll,
 | 
				
			||||||
        rencontre,
 | 
					        rencontre,
 | 
				
			||||||
@@ -113,7 +113,7 @@ export class TMRRencontres {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
    const messageData = {
 | 
					    const messageData = {
 | 
				
			||||||
      user: game.user.id,
 | 
					      user: game.user.id,
 | 
				
			||||||
      type: CONST.CHAT_MESSAGE_STYLES.ROLL,
 | 
					      type: CONST.CHAT_MESSAGE_TYPES.ROLL,
 | 
				
			||||||
      roll: row.roll,
 | 
					      roll: row.roll,
 | 
				
			||||||
      sound: CONFIG.sounds.dice,
 | 
					      sound: CONFIG.sounds.dice,
 | 
				
			||||||
      content: flavorContent
 | 
					      content: flavorContent
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,9 +2,6 @@ import { Misc } from "./misc.js";
 | 
				
			|||||||
import { Grammar } from "./grammar.js";
 | 
					import { Grammar } from "./grammar.js";
 | 
				
			||||||
import { RdDDice } from "./rdd-dice.js";
 | 
					import { RdDDice } from "./rdd-dice.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TMR_INCONNU = "inconnu"
 | 
					 | 
				
			||||||
export const COORD_TMR_INCONNU = "A0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const TMRType = {
 | 
					export const TMRType = {
 | 
				
			||||||
  cite: { type: 'cite', name: "cité", genre: "f" },
 | 
					  cite: { type: 'cite', name: "cité", genre: "f" },
 | 
				
			||||||
  sanctuaire: { type: 'sanctuaire', name: "sanctuaire", genre: 'm' },
 | 
					  sanctuaire: { type: 'sanctuaire', name: "sanctuaire", genre: 'm' },
 | 
				
			||||||
@@ -19,15 +16,13 @@ export const TMRType = {
 | 
				
			|||||||
  marais: { type: 'marais', name: "marais", genre: "m" },
 | 
					  marais: { type: 'marais', name: "marais", genre: "m" },
 | 
				
			||||||
  gouffre: { type: 'gouffre', name: "gouffre", genre: "m" },
 | 
					  gouffre: { type: 'gouffre', name: "gouffre", genre: "m" },
 | 
				
			||||||
  necropole: { type: 'necropole', name: "nécropole", genre: "f" },
 | 
					  necropole: { type: 'necropole', name: "nécropole", genre: "f" },
 | 
				
			||||||
  desolation: { type: 'desolation', name: "désolation", genre: "f" },
 | 
					  desolation: { type: 'desolation', name: "désolation", genre: "f" }
 | 
				
			||||||
  [TMR_INCONNU]: { type: TMR_INCONNU, name: TMR_INCONNU, genre: "m" }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const FLEUVE_COORD = 'Fleuve'
 | 
					export const FLEUVE_COORD = 'Fleuve'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TMRMapping = {
 | 
					const TMRMapping = {
 | 
				
			||||||
  Fleuve: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli", generique: 'fleuve' },
 | 
					  Fleuve: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli", generique: 'fleuve' },
 | 
				
			||||||
  [COORD_TMR_INCONNU]: { type: TMR_INCONNU, label: TMR_INCONNU },
 | 
					 | 
				
			||||||
  A1: { type: TMRType.cite.type, label: "Cité Vide" },
 | 
					  A1: { type: TMRType.cite.type, label: "Cité Vide" },
 | 
				
			||||||
  B1: { type: TMRType.plaines.type, label: "Plaines d’Assorh" },
 | 
					  B1: { type: TMRType.plaines.type, label: "Plaines d’Assorh" },
 | 
				
			||||||
  C1: { type: TMRType.necropole.type, label: "Nécropole de Kroak" },
 | 
					  C1: { type: TMRType.necropole.type, label: "Nécropole de Kroak" },
 | 
				
			||||||
@@ -277,7 +272,7 @@ export class TMRUtility {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static getTMRType(coord) {
 | 
					  static getTMRType(coord) {
 | 
				
			||||||
    const tmr = TMRUtility.getTMR(coord)
 | 
					    const tmr = TMRUtility.getTMR(coord);
 | 
				
			||||||
    return Misc.upperFirst(TMRType[tmr.type].name);
 | 
					    return Misc.upperFirst(TMRType[tmr.type].name);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,9 +3,9 @@ import { Draconique } from "./draconique.js";
 | 
				
			|||||||
import { PixiTMR } from "./pixi-tmr.js";
 | 
					import { PixiTMR } from "./pixi-tmr.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const IMAGE_CARTE_TMR = 'image-carte-tmr';
 | 
					const IMAGE_CARTE_TMR = 'image-carte-tmr';
 | 
				
			||||||
const TMR_V1 = "systems/foundryvtt-reve-de-dragon/assets/ui/tmr-v1.webp";
 | 
					const TMR_V1 = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v1.webp";
 | 
				
			||||||
const TMR_V2 = "systems/foundryvtt-reve-de-dragon/assets/ui/tmr-v2.webp";
 | 
					const TMR_V2 = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v2.webp";
 | 
				
			||||||
const TMR_V3_COULEUR = "systems/foundryvtt-reve-de-dragon/assets/ui/tmr-v3-couleur.webp";
 | 
					const TMR_V3_COULEUR = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v3-couleur.webp";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class CarteTmr extends Draconique {
 | 
					export class CarteTmr extends Draconique {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export class Conquete extends Draconique {
 | 
				
			|||||||
  async onActorCreateOwned(actor, item) { await this._creerConquete(actor, item); }
 | 
					  async onActorCreateOwned(actor, item) { await this._creerConquete(actor, item); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  code() { return 'conquete' }
 | 
					  code() { return 'conquete' }
 | 
				
			||||||
  tooltip(linkData) { return 'Doit être conquis' }
 | 
					  tooltip(linkData) { return `Doit être conquis` }
 | 
				
			||||||
  img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/conquete.svg' }
 | 
					  img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/conquete.svg' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  createSprite(pixiTMR) {
 | 
					  createSprite(pixiTMR) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { ITEM_TYPES } from "../constants.js";
 | 
					import { ITEM_TYPES } from "../constants.js";
 | 
				
			||||||
import { COORD_TMR_INCONNU, TMRUtility } from "../tmr-utility.js";
 | 
					import { TMRUtility } from "../tmr-utility.js";
 | 
				
			||||||
import { PixiTMR } from "./pixi-tmr.js";
 | 
					import { PixiTMR } from "./pixi-tmr.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const registeredEffects = [
 | 
					const registeredEffects = [
 | 
				
			||||||
@@ -12,7 +12,7 @@ export class Draconique {
 | 
				
			|||||||
  static init() {
 | 
					  static init() {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static isCaseTMR(item) { return item.type == ITEM_TYPES.casetmr }
 | 
					  static isCaseTMR(item) { return item.type == ITEM_TYPES.casetmr; }
 | 
				
			||||||
  static isQueueDragon(item) { return item.isQueueDragon(); }
 | 
					  static isQueueDragon(item) { return item.isQueueDragon(); }
 | 
				
			||||||
  static isSouffleDragon(item) { return item.type == ITEM_TYPES.souffle; }
 | 
					  static isSouffleDragon(item) { return item.type == ITEM_TYPES.souffle; }
 | 
				
			||||||
  static isTeteDragon(item) { return item.type == ITEM_TYPES.tete; }
 | 
					  static isTeteDragon(item) { return item.type == ITEM_TYPES.tete; }
 | 
				
			||||||
@@ -127,7 +127,7 @@ export class Draconique {
 | 
				
			|||||||
   * @param {*} coord les coordonnées d'une case. Si undefined toute case du type correspondra, 
 | 
					   * @param {*} coord les coordonnées d'une case. Si undefined toute case du type correspondra, 
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  isCase(item, coord = undefined) {
 | 
					  isCase(item, coord = undefined) {
 | 
				
			||||||
    return Draconique.isCaseTMR(item) && item.system.specific == this.code() && (coord ? (coord != COORD_TMR_INCONNU && item.system.coord == coord) : true);
 | 
					    return Draconique.isCaseTMR(item) && item.system.specific == this.code() && (coord ? item.system.coord == coord : true);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  find(list, coord = undefined) {
 | 
					  find(list, coord = undefined) {
 | 
				
			||||||
@@ -150,7 +150,7 @@ export class Draconique {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  isCaseForSource(item, draconique) {
 | 
					  isCaseForSource(item, draconique) {
 | 
				
			||||||
    return Draconique.isCaseTMR(item) && item.system.specific == this.code() && item.system.sourceid == draconique.id
 | 
					    return Draconique.isCaseTMR(item) && item.system.specific == this.code() && item.system.sourceid == draconique.id;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async onVisiteSupprimer(actor, tmr, onRemoveToken) {
 | 
					  async onVisiteSupprimer(actor, tmr, onRemoveToken) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import { Grammar } from "../grammar.js";
 | 
					import { Grammar } from "../grammar.js";
 | 
				
			||||||
import { tmrTokenZIndex } from "../tmr-constants.js";
 | 
					import { tmrTokenZIndex } from "../tmr-constants.js";
 | 
				
			||||||
import { COORD_TMR_INCONNU, TMRUtility } from "../tmr-utility.js";
 | 
					import { TMRUtility } from "../tmr-utility.js";
 | 
				
			||||||
import { Draconique } from "./draconique.js";
 | 
					import { Draconique } from "./draconique.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class QueteEaux extends Draconique {
 | 
					export class QueteEaux extends Draconique {
 | 
				
			||||||
@@ -9,13 +9,11 @@ export class QueteEaux extends Draconique {
 | 
				
			|||||||
  match(item) { return Draconique.isTeteDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes("quete des eaux"); }
 | 
					  match(item) { return Draconique.isTeteDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes("quete des eaux"); }
 | 
				
			||||||
  manualMessage() { return "Vous devrez re-configurer votre Nouvelle Quête des Eaux une fois un lac ou marais vaincu" }
 | 
					  manualMessage() { return "Vous devrez re-configurer votre Nouvelle Quête des Eaux une fois un lac ou marais vaincu" }
 | 
				
			||||||
  async onActorCreateOwned(actor, tete) {
 | 
					  async onActorCreateOwned(actor, tete) {
 | 
				
			||||||
    await this.createCaseTmr(actor, "Nouvelle Quête des Eaux", { coord: COORD_TMR_INCONNU }, tete.id);
 | 
					    await this.createCaseTmr(actor, "Nouvelle Quête des Eaux", { coord: 'A0' }, tete.id);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  code() { return 'maitrisee' }
 | 
					  code() { return 'maitrisee' }
 | 
				
			||||||
  tooltip(linkData) {
 | 
					  tooltip(linkData) { return `Quête des eaux, ${TMRUtility.getTMRType(linkData.system.coord)} maîtrisé` }
 | 
				
			||||||
    return linkData.system.coord == COORD_TMR_INCONNU ? 'Nouvelle Quête des eaux en cours' : `Quête des eaux, ${TMRUtility.getTMRType(linkData.system.coord)} maîtrisé`
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/maitrisee.svg' }
 | 
					  img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/maitrisee.svg' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  createSprite(pixiTMR) {
 | 
					  createSprite(pixiTMR) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
import { Grammar } from "../grammar.js";
 | 
					import { Grammar } from "../grammar.js";
 | 
				
			||||||
import { tmrTokenZIndex } from "../tmr-constants.js";
 | 
					import { tmrTokenZIndex } from "../tmr-constants.js";
 | 
				
			||||||
import { COORD_TMR_INCONNU } from "../tmr-utility.js";
 | 
					 | 
				
			||||||
import { Draconique } from "./draconique.js";
 | 
					import { Draconique } from "./draconique.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class TerreAttache extends Draconique {
 | 
					export class TerreAttache extends Draconique {
 | 
				
			||||||
@@ -10,7 +9,7 @@ export class TerreAttache extends Draconique {
 | 
				
			|||||||
  manualMessage() { return "Vous pouvez re-configurer votre Nouvelle Terre d'attache" }
 | 
					  manualMessage() { return "Vous pouvez re-configurer votre Nouvelle Terre d'attache" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async onActorCreateOwned(actor, tete) {
 | 
					  async onActorCreateOwned(actor, tete) {
 | 
				
			||||||
    await this.createCaseTmr(actor, "Nouvelle Terre d'attache", { coord: COORD_TMR_INCONNU }, tete.id);
 | 
					    await this.createCaseTmr(actor, "Nouvelle Terre d'attache", { coord: 'A0' }, tete.id);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  code() { return 'attache' }
 | 
					  code() { return 'attache' }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,9 +106,9 @@ export class DialogFatigueVoyage extends Dialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  activateListeners(html) {
 | 
					  activateListeners(html) {
 | 
				
			||||||
    if (this.html == undefined) {
 | 
					    if (this.html == undefined) {
 | 
				
			||||||
      $(html).find('select[name="code-terrain"]').trigger("focus")
 | 
					      html.find('select[name="code-terrain"]').trigger("focus")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.html = $(html);
 | 
					    this.html = html;
 | 
				
			||||||
    super.activateListeners(html);
 | 
					    super.activateListeners(html);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.html.find('select[name="code-terrain"]').change(event => this.changeParameters())
 | 
					    this.html.find('select[name="code-terrain"]').change(event => this.changeParameters())
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								package.json
									
									
									
									
									
								
							@@ -1,37 +1,15 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "foundryvtt-reve-de-dragon",
 | 
					 | 
				
			||||||
  "description": "<h2><em>Rêve de Dragon</em> pour Foundry Virtual TableTop</h2>",
 | 
					 | 
				
			||||||
  "private": true,
 | 
					 | 
				
			||||||
  "version": "1.0.0",
 | 
					 | 
				
			||||||
  "license": "Creative Commons",
 | 
					 | 
				
			||||||
  "main": "gulpfile.js",
 | 
					 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "build": "npx vite build",
 | 
					    "build": "npx vite build",
 | 
				
			||||||
    "gulp": "gulp",
 | 
					 | 
				
			||||||
    "run": "npx vite serve",
 | 
					    "run": "npx vite serve",
 | 
				
			||||||
    "packCompendiumsToDist": "node ./tools/packCompendiumsToDist.mjs",
 | 
					    "packCompendiumsToDist": "node ./tools/packCompendiumsToDist.mjs",
 | 
				
			||||||
    "packCompendiumsToPublic": "node ./tools/packCompendiumsToPublic.mjs",
 | 
					    "packCompendiumsToPublic": "node ./tools/packCompendiumsToPublic.mjs",
 | 
				
			||||||
    "unpackCompendiumsFromPublic": "node ./tools/unpackCompendiumsFromPublic.mjs"
 | 
					    "unpackCompendiumsFromPublic": "node ./tools/unpackCompendiumsFromPublic.mjs"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@eslint/js": "^9.8.0",
 | 
					    "@foundryvtt/foundryvtt-cli": "^1.0.3"
 | 
				
			||||||
    "@foundryvtt/foundryvtt-cli": "^1.0.3",
 | 
					 | 
				
			||||||
    "commander": "^11.1.0",
 | 
					 | 
				
			||||||
    "eslint": "^9.9.0",
 | 
					 | 
				
			||||||
    "eslint-config-prettier": "^9.1.0",
 | 
					 | 
				
			||||||
    "eslint-plugin-jsdoc": "^48.11.0",
 | 
					 | 
				
			||||||
    "eslint-plugin-prettier": "^5.2.1",
 | 
					 | 
				
			||||||
    "globals": "^15.9.0",
 | 
					 | 
				
			||||||
    "less": "^4.1.3",
 | 
					 | 
				
			||||||
    "prettier": "^3.3.3"
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "gulp": "^5.0.0",
 | 
					 | 
				
			||||||
    "gulp-less": "^5.0.0",
 | 
					 | 
				
			||||||
    "rollup-plugin-visualizer": "^5.12.0"
 | 
					    "rollup-plugin-visualizer": "^5.12.0"
 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "repository": {
 | 
					 | 
				
			||||||
    "type": "git",
 | 
					 | 
				
			||||||
    "url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon.git"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -196,7 +196,7 @@ system:
 | 
				
			|||||||
      derivee: false
 | 
					      derivee: false
 | 
				
			||||||
    protection:
 | 
					    protection:
 | 
				
			||||||
      type: number
 | 
					      type: number
 | 
				
			||||||
      value: 10
 | 
					      value: 2
 | 
				
			||||||
      label: Protection
 | 
					      label: Protection
 | 
				
			||||||
      derivee: false
 | 
					      derivee: false
 | 
				
			||||||
  compteurs:
 | 
					  compteurs:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ name: Terres médianes du rêve
 | 
				
			|||||||
type: script
 | 
					type: script
 | 
				
			||||||
scope: global
 | 
					scope: global
 | 
				
			||||||
author: Hp9ImM4o9YRTSdfu
 | 
					author: Hp9ImM4o9YRTSdfu
 | 
				
			||||||
img: systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-normal.svg
 | 
					img: systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg
 | 
				
			||||||
command: |-
 | 
					command: |-
 | 
				
			||||||
  const selected = game.system.rdd.RdDUtility.getSelectedActor();
 | 
					  const selected = game.system.rdd.RdDUtility.getSelectedActor();
 | 
				
			||||||
  if (!selected) {
 | 
					  if (!selected) {
 | 
				
			||||||
@@ -18,8 +18,8 @@ command: |-
 | 
				
			|||||||
    title: `Monter dans les TMR`,
 | 
					    title: `Monter dans les TMR`,
 | 
				
			||||||
    content: `Monter dans les TMR`,
 | 
					    content: `Monter dans les TMR`,
 | 
				
			||||||
    buttons: {
 | 
					    buttons: {
 | 
				
			||||||
      normale: { label: `normale`, icon: `<img class="button-img" src="systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/>`, callback: () => selected.displayTMR("normal") },
 | 
					      normale: { label: `normale`, icon: `<img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" alt="Montée dans les Terres Médianes !"/>`, callback: () => selected.displayTMR("normal") },
 | 
				
			||||||
      rapide: { label: `rapide`, icon: `<img class="button-img" src="systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/>`, callback: () => selected.displayTMR("rapide") },
 | 
					      rapide: { label: `rapide`, icon: `<img class="button-img" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" alt="Montée accélérée dans les Terres Médianes !"/>`, callback: () => selected.displayTMR("rapide") },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ sort: 0
 | 
				
			|||||||
pages:
 | 
					pages:
 | 
				
			||||||
  - name: 'Figure: Documentation MJ/Joueurs'
 | 
					  - name: 'Figure: Documentation MJ/Joueurs'
 | 
				
			||||||
    type: image
 | 
					    type: image
 | 
				
			||||||
    src: systems/foundryvtt-reve-de-dragon/assets/logo.webp
 | 
					    src: systems/foundryvtt-reve-de-dragon/styles/img/logo.webp
 | 
				
			||||||
    title:
 | 
					    title:
 | 
				
			||||||
      show: false
 | 
					      show: false
 | 
				
			||||||
      level: 1
 | 
					      level: 1
 | 
				
			||||||
@@ -94,9 +94,9 @@ pages:
 | 
				
			|||||||
        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/bones.svg" width="25" height="30" /> Encaisser des dommages</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/bones.svg" width="25" height="30" /> Encaisser des dommages</li>
 | 
				
			||||||
        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/regen.svg" width="25" height="30" /> Remise à neuf (Uniquement pour le MJ) pour enlever toutes les blessures/états du personnage.</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/regen.svg" width="25" height="30" /> Remise à neuf (Uniquement pour le MJ) pour enlever toutes les blessures/états du personnage.</li>
 | 
				
			||||||
        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/sleep.svg" width="25" height="30" /> Le sommeil (dormir une heure, une nuit, gris rêve)</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="icons/svg/sleep.svg" width="25" height="30" /> Le sommeil (dormir une heure, une nuit, gris rêve)</li>
 | 
				
			||||||
        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-normal.svg" width="25" height="30" /> Montée dans les Terres Médianes</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-normal.svg" width="25" height="30" /> Montée dans les Terres Médianes</li>
 | 
				
			||||||
        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-rapide.svg" width="25" height="30" /> Montée rapide</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-rapide.svg" width="25" height="30" /> Montée rapide</li>
 | 
				
			||||||
        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/assets/ui/icon-tmr-view.svg" width="25" height="30" /> Regarder ses terres médianes (sans monter)</li>
 | 
					        <li><img style="background-color:purple;vertical-align:middle" src="systems/foundryvtt-reve-de-dragon/styles/img/ui/icon-tmr-view.svg" width="25" height="30" /> Regarder ses terres médianes (sans monter)</li>
 | 
				
			||||||
        </ul>
 | 
					        </ul>
 | 
				
			||||||
        <h1>Combat</h1>
 | 
					        <h1>Combat</h1>
 | 
				
			||||||
        <p>Pour l'initiative et les attaques, des options sont disponibles
 | 
					        <p>Pour l'initiative et les attaques, des options sont disponibles
 | 
				
			||||||
@@ -171,7 +171,7 @@ pages:
 | 
				
			|||||||
        <li>Les retours que vous nous ferez via <a href="https://discord.gg/pPSDNJk">discord</a>
 | 
					        <li>Les retours que vous nous ferez via <a href="https://discord.gg/pPSDNJk">discord</a>
 | 
				
			||||||
        (channel #rêve-de-dragon) ;-)</li>
 | 
					        (channel #rêve-de-dragon) ;-)</li>
 | 
				
			||||||
        </ul>
 | 
					        </ul>
 | 
				
			||||||
        <p><img style="border:0;display:block;margin-left:auto;margin-right:auto" src="systems/foundryvtt-reve-de-dragon/assets/rdd_pause.webp" width="210" height="216" /></p>
 | 
					        <p><img style="border:0;display:block;margin-left:auto;margin-right:auto" src="systems/foundryvtt-reve-de-dragon/styles/img/rdd_pause.webp" width="210" height="216" /></p>
 | 
				
			||||||
    _id: p0xOSy6tZwU4DOq5
 | 
					    _id: p0xOSy6tZwU4DOq5
 | 
				
			||||||
    image: {}
 | 
					    image: {}
 | 
				
			||||||
    video:
 | 
					    video:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ sort: 0
 | 
				
			|||||||
pages:
 | 
					pages:
 | 
				
			||||||
  - name: 'Figure: Passeur fou'
 | 
					  - name: 'Figure: Passeur fou'
 | 
				
			||||||
    type: image
 | 
					    type: image
 | 
				
			||||||
    src: systems/foundryvtt-reve-de-dragon/assets/ui/tmp_main_r1.webp
 | 
					    src: systems/foundryvtt-reve-de-dragon/styles/img/ui/tmp_main_r1.webp
 | 
				
			||||||
    title:
 | 
					    title:
 | 
				
			||||||
      show: false
 | 
					      show: false
 | 
				
			||||||
      level: 1
 | 
					      level: 1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ sort: 0
 | 
				
			|||||||
pages:
 | 
					pages:
 | 
				
			||||||
  - name: 'Figure: Tourbillon rouge'
 | 
					  - name: 'Figure: Tourbillon rouge'
 | 
				
			||||||
    type: image
 | 
					    type: image
 | 
				
			||||||
    src: systems/foundryvtt-reve-de-dragon/assets/ui/tmp_main_r1.webp
 | 
					    src: systems/foundryvtt-reve-de-dragon/styles/img/ui/tmp_main_r1.webp
 | 
				
			||||||
    title:
 | 
					    title:
 | 
				
			||||||
      show: false
 | 
					      show: false
 | 
				
			||||||
      level: 1
 | 
					      level: 1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
name: Rêve de Dragon
 | 
					name: Rêve de Dragon
 | 
				
			||||||
type: rencontre
 | 
					type: rencontre
 | 
				
			||||||
img: systems/foundryvtt-reve-de-dragon/assets/rdd_pause.webp
 | 
					img: systems/foundryvtt-reve-de-dragon/styles/img/rdd_pause.webp
 | 
				
			||||||
system:
 | 
					system:
 | 
				
			||||||
  description: ''
 | 
					  description: ''
 | 
				
			||||||
  descriptionmj: ''
 | 
					  descriptionmj: ''
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ regions: []
 | 
				
			|||||||
ownership:
 | 
					ownership:
 | 
				
			||||||
  default: 0
 | 
					  default: 0
 | 
				
			||||||
background:
 | 
					background:
 | 
				
			||||||
  src: systems/foundryvtt-reve-de-dragon/assets/ecran_rdd.webp
 | 
					  src: systems/foundryvtt-reve-de-dragon/styles/img/ecran_rdd.webp
 | 
				
			||||||
  offsetX: 0
 | 
					  offsetX: 0
 | 
				
			||||||
  offsetY: 0
 | 
					  offsetY: 0
 | 
				
			||||||
  anchorX: 0
 | 
					  anchorX: 0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								styles/img/.directory
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								styles/img/.directory
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					[Dolphin]
 | 
				
			||||||
 | 
					Timestamp=2020,11,21,13,59,38
 | 
				
			||||||
 | 
					Version=4
 | 
				
			||||||
 | 
					VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 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  | 
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user