forked from public/foundryvtt-reve-de-dragon
		
	Compare commits
	
		
			25 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0009876a6d | |||
| 54785f0c3a | |||
| df76c4bd78 | |||
| 5f3c678195 | |||
| 89bbe63340 | |||
| 149990e352 | |||
| 3e355784c7 | |||
| b92055d5dd | |||
| 220f8142f5 | |||
| a8bb00ad0b | |||
| 78e30b5503 | |||
| 069fef4720 | |||
| e32a7d7540 | |||
| 0773493851 | |||
| da982678b7 | |||
| c1066d70f6 | |||
| 5085ba5b54 | |||
| f37483a61d | |||
| 5357e53a5f | |||
| 764dde6296 | |||
| 681fbc3177 | |||
| 70e3e63001 | |||
| 7ed9a4a12b | |||
| acfab362a0 | |||
| 3d49a3de11 | 
							
								
								
									
										25
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,4 +1,29 @@ | |||||||
| # 12.0 | # 12.0 | ||||||
|  | ## 12.0.42 - Les errements d'Astrobazzarh | ||||||
|  | - Correction de différentes automatisations de combat incorrectes | ||||||
|  | - Correction des jets `@roll[vue/-2]` qui tentaient de chercher une compétence -2 (à cause des armes à 1/2 mains) | ||||||
|  |  | ||||||
|  | ## 12.0.41 - La loupe d'Astrobazzarh | ||||||
|  | - On peut de nouveau effectuer des tirages cachés | ||||||
|  | - Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence | ||||||
|  |  | ||||||
|  | ## 12.0.40 - Les mains d'Astrobazzarh | ||||||
|  | - correction des attaques particulières en combat | ||||||
|  | - correction de message sur les min/max liés aux modificateurs de races (s'applique uniquement sur la taille) | ||||||
|  |  | ||||||
|  | ## 12.0.39 - Les mains d'Astrobazzarh | ||||||
|  | - les armes à 1 ou 2 mains fonctionnent dans les liens de jets de dés | ||||||
|  | - commande `/jet` pour poster une demande de jet de dés | ||||||
|  |  | ||||||
|  | ## 12.0.38 - Les prévisions d'Astrobazzarh | ||||||
|  | - Correction de modifications de personnages qui ne s'affichaient pas: | ||||||
|  |   - changements d'endurance/vie/fatigue, transformé, ... | ||||||
|  | - Migration des compétences "Ecriture" en "Écriture" dans les tâches, livres, oeuvres et méditations | ||||||
|  | - Correction des jets de compétences de créatures | ||||||
|  | - Premières préparations techniques pour le passage à Founry v13 | ||||||
|  |   - liste des impacts d'un jet de dés (expérience, points de tâche, ...) | ||||||
|  |   - utilisation de l'extension hbs pour tous les fichiers handlebars | ||||||
|  |  | ||||||
| ## 12.0.37 - Les enchantements d'Astrobazzarh | ## 12.0.37 - Les enchantements d'Astrobazzarh | ||||||
| - les potions ont un état, seules les potions liquides sont enchantables | - les potions ont un état, seules les potions liquides sont enchantables | ||||||
| - les lancements de sorts du jour sont conservés jusqu'à chateau dormant | - les lancements de sorts du jour sont conservés jusqu'à chateau dormant | ||||||
|   | |||||||
| @@ -44,13 +44,13 @@ export class ChatVente { | |||||||
|     vente.nbLots = Math.max(0, vente.nbLots - quantite) |     vente.nbLots = Math.max(0, vente.nbLots - quantite) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) |     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||||
|  |  | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||||
|     chatMessage.update({ content: html }); |     chatMessage.update({ content: html }); | ||||||
|     chatMessage.render(true); |     chatMessage.render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static async displayAchatVente(vente) { |   static async displayAchatVente(vente) { | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente); |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', vente); | ||||||
|     const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html)) |     const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html)) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) |     await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots) | ||||||
|     await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, { |     await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, { | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ export class DialogItemAchat extends Dialog { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     DialogItemAchat.changeNombreLots(venteData, 1) |     DialogItemAchat.changeNombreLots(venteData, 1) | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData) |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.hbs`, venteData) | ||||||
|     new DialogItemAchat(html, venteData).render(true) |     new DialogItemAchat(html, venteData).render(true) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ export class DialogItemVente extends Dialog { | |||||||
|       quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent, |       quantiteIllimite: item.isItemCommerce() ? quantiteMax == undefined : !item.parent, | ||||||
|       isOwned:  item.parent, |       isOwned:  item.parent, | ||||||
|     } |     } | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.html`, venteData); |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.hbs`, venteData); | ||||||
|     return new DialogItemVente(venteData, html).render(true); |     return new DialogItemVente(venteData, html).render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { |     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs", | ||||||
|       width: 550, |       width: 550, | ||||||
|       showCompNiveauBase: false, |       showCompNiveauBase: false, | ||||||
|       vueArchetype: false, |       vueArchetype: false, | ||||||
| @@ -126,77 +126,73 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.show-hide-competences').click(async event => { |     this.html.find('.show-hide-competences').click(async event => { | ||||||
|       this.options.showCompNiveauBase = !this.options.showCompNiveauBase; |       this.options.showCompNiveauBase = !this.options.showCompNiveauBase | ||||||
|       this.render(true); |       this.render(true) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     this.html.find('.button-tmr-visu').click(async event => this.actor.displayTMR("visu")) |     this.html.find('.button-tmr-visu').click(async event => await this.actor.displayTMR("visu")) | ||||||
|  |  | ||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('.sheet-possession-attack').click(async event => { |     this.html.find('.sheet-possession-attack').click(async event => { | ||||||
|       const poss = RdDSheetUtility.getItem(event, this.actor) |       const poss = RdDSheetUtility.getItem(event, this.actor) | ||||||
|       this.actor.conjurerPossession(poss) |       await this.actor.conjurerPossession(poss) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.subacteur-coeur-toggle a').click(async event => { |     this.html.find('.subacteur-coeur-toggle a').click(async event => { | ||||||
|       const subActorIdactorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') |       const subActorIdactorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||||
|       const coeurNombre = $(event.currentTarget).data('numero-coeur') |       const coeurNombre = $(event.currentTarget).data('numero-coeur') | ||||||
|       RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) |       await RdDCoeur.toggleSubActeurCoeur(this.actor.id, subActorIdactorId, coeurNombre) | ||||||
|     }) |     }) | ||||||
|     this.html.find('.subacteur-tendre-moment').click(async event => { |     this.html.find('.subacteur-tendre-moment').click(async event => { | ||||||
|       const subActorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') |       const subActorId = RdDSheetUtility.getEventItemData(event, 'subactor-id') | ||||||
|       RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) |       await RdDCoeur.startSubActeurTendreMoment(this.actor.id, subActorId) | ||||||
|     }) |     }) | ||||||
|     this.html.find('.subacteur-delete').click(async event => { |     this.html.find('.subacteur-delete').click(async event => { | ||||||
|       const li = RdDSheetUtility.getEventElement(event); |       const li = RdDSheetUtility.getEventElement(event); | ||||||
|       const subActorId = li.data("subactor-id"); |       const subActorId = li.data("subactor-id"); | ||||||
|       this.deleteSubActeur(subActorId, li); |       this.deleteSubActeur(subActorId, li); | ||||||
|     }) |     }) | ||||||
|     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => { |     this.html.find("input.derivee-value[name='system.compteurs.stress.value']").change(async event => | ||||||
|       this.actor.updateCompteurValue("stress", parseInt(event.target.value)); |       await this.actor.updateCompteurValue("stress", parseInt(event.target.value)) | ||||||
|     }); |     ); | ||||||
|     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => { |     this.html.find("input.derivee-value[name='system.compteurs.experience.value']").change(async event => | ||||||
|       this.actor.updateCompteurValue("experience", parseInt(event.target.value)); |       await this.actor.updateCompteurValue("experience", parseInt(event.target.value)) | ||||||
|     }); |     ); | ||||||
|  |  | ||||||
|     this.html.find('.creer-tache').click(async event => this.createEmptyTache()); |     this.html.find('.creer-tache').click(async event => await this.createEmptyTache()); | ||||||
|     this.html.find('.creer-une-oeuvre').click(async event => this.selectTypeOeuvreToCreate()); |     this.html.find('.creer-une-oeuvre').click(async event => await this.selectTypeOeuvreToCreate()); | ||||||
|     this.html.find('.creer-tache-blessure-legere').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); |     this.html.find('.creer-tache-blessure-legere').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 2)); | ||||||
|     this.html.find('.creer-tache-blessure-grave').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); |     this.html.find('.creer-tache-blessure-grave').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 4)); | ||||||
|     this.html.find('.creer-tache-blessure-critique').click(async event => RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); |     this.html.find('.creer-tache-blessure-critique').click(async event => await RdDItemBlessure.createTacheSoinBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.blessure-premierssoins-done').change(async event => { |     this.html.find('.blessure-premierssoins-done').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); | ||||||
|       await blessure?.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-soinscomplets-done').change(async event => { |     this.html.find('.blessure-soinscomplets-done').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) | ||||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-premierssoins-bonus').change(async event => { |     this.html.find('.blessure-premierssoins-bonus').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) | ||||||
|       await blessure?.setSoinsBlessure({ premierssoins: { bonus: Number(event.currentTarget.value) } }) |  | ||||||
|     }); |     }); | ||||||
|     this.html.find('.blessure-soinscomplets-bonus').change(async event => { |     this.html.find('.blessure-soinscomplets-bonus').change(async event => { | ||||||
|       const blessure = this.getBlessure(event); |       await this.getBlessure(event)?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) | ||||||
|       await blessure?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle')) |     this.html.find('.roll-chance-actuelle').click(async event => await this.actor.rollCarac('chance-actuelle')) | ||||||
|     this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance()) |     this.html.find('.button-appel-chance').click(async event => await this.actor.rollAppelChance()) | ||||||
|  |  | ||||||
|     this.html.find('[name="jet-astrologie"]').click(async event => this.actor.astrologieNombresAstraux()) |     this.html.find('[name="jet-astrologie"]').click(async event => await this.actor.astrologieNombresAstraux()) | ||||||
|     this.html.find('.action-tache').click(async event => this.actor.rollTache(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-tache').click(async event => await this.actor.rollTache(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.meditation-label a').click(async event => this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) |     this.html.find('.meditation-label a').click(async event => await this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) | ||||||
|  |  | ||||||
|     this.html.find('.action-chant').click(async event => this.actor.rollChant(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-chant').click(async event => await this.actor.rollChant(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.action-danse').click(async event => this.actor.rollDanse(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-danse').click(async event => await this.actor.rollDanse(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.action-musique').click(async event => this.actor.rollMusique(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-musique').click(async event => await this.actor.rollMusique(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.action-oeuvre').click(async event => this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-oeuvre').click(async event => await this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.action-jeu').click(async event => this.actor.rollJeu(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-jeu').click(async event => await this.actor.rollJeu(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.action-recettecuisine').click(async event => this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) |     this.html.find('.action-recettecuisine').click(async event => await this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) | ||||||
|  |  | ||||||
|     this.html.find('.description-aleatoire').click(async event => new AppPersonnageAleatoire(this.actor).render(true)) |     this.html.find('.description-aleatoire').click(async event => new AppPersonnageAleatoire(this.actor).render(true)) | ||||||
|     if (game.user.isGM) { |     if (game.user.isGM) { | ||||||
| @@ -212,16 +208,16 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|         await this.actor.deleteExperienceLog(0, key + 1); |         await this.actor.deleteExperienceLog(0, key + 1); | ||||||
|       }); |       }); | ||||||
|       // Boutons spéciaux MJs |       // Boutons spéciaux MJs | ||||||
|       this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) |       this.html.find('.forcer-tmr-aleatoire').click(async event => await this.actor.reinsertionAleatoire("Action MJ")) | ||||||
|       this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) |       this.html.find('.don-de-haut-reve').click(async event => await this.actor.addDonDeHautReve()) | ||||||
|       this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) |       this.html.find('.afficher-tmr').click(async event => await this.actor.changeTMRVisible()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Points de reve actuel |     // Points de reve actuel | ||||||
|     this.html.find('.roll-reve-actuel').click(async event => this.actor.rollCarac('reve-actuel', {resistance:true})) |     this.html.find('.roll-reve-actuel').click(async event => await this.actor.rollCarac('reve-actuel', { resistance: true })) | ||||||
|     this.html.find('.action-empoignade').click(async event => RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) |     this.html.find('.action-empoignade').click(async event => await RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) | ||||||
|  |  | ||||||
|     this.html.find('.roll-arme').click(async event => this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) |     this.html.find('.roll-arme').click(async event => await this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) | ||||||
|  |  | ||||||
|     // Initiative pour l'arme |     // Initiative pour l'arme | ||||||
|     this.html.find('.roll-init-arme').click(async event => { |     this.html.find('.roll-init-arme').click(async event => { | ||||||
| @@ -234,30 +230,34 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|     }) |     }) | ||||||
|     // Display TMR |     // Display TMR | ||||||
|  |  | ||||||
|     this.html.find('.button-tmr').click(async event => this.actor.displayTMR("normal")) |     this.html.find('.button-tmr').click(async event => await this.actor.displayTMR("normal")) | ||||||
|     this.html.find('.button-tmr-rapide').click(async event => this.actor.displayTMR("rapide")) |     this.html.find('.button-tmr-rapide').click(async event => await this.actor.displayTMR("rapide")) | ||||||
|  |  | ||||||
|     this.html.find('.button-repos').click(async event => await this.actor.repos()) |     this.html.find('.button-repos').click(async event => await this.actor.repos()) | ||||||
|  |  | ||||||
|     this.html.find('.carac-xp-augmenter').click(async event => this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) |     this.html.find('.carac-xp-augmenter').click(async event => await this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", ""))) | ||||||
|     this.html.find('.competence-xp-augmenter').click(async event => this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) |     this.html.find('.competence-xp-augmenter').click(async event => await this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event))) | ||||||
|     this.html.find('.competence-stress-augmenter').click(async event => this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event))) |     this.html.find('.competence-stress-augmenter').click(async event =>{ | ||||||
|  |       await this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event)) | ||||||
|  |       this.render(true) | ||||||
|  |     }  | ||||||
|  |   ) | ||||||
|  |  | ||||||
|     if (this.options.vueDetaillee) { |     if (this.options.vueDetaillee) { | ||||||
|       // On carac change |       // On carac change | ||||||
|       this.html.find('input.carac-xp').change(async event => { |       this.html.find('input.carac-xp').change(async event => { | ||||||
|         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", ""); |         let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", "") | ||||||
|         this.actor.updateCaracXP(caracName, parseInt(event.target.value)); |         await this.actor.updateCaracXP(caracName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|       // On competence xp change |       // On competence xp change | ||||||
|       this.html.find('input.competence-xp').change(async event => { |       this.html.find('input.competence-xp').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value | ||||||
|         this.actor.updateCompetenceXP(compName, parseInt(event.target.value)); |         await this.actor.updateCompetenceXP(compName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|       this.html.find('input.competence-xp-sort').change(async event => { |       this.html.find('input.competence-xp-sort').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value | ||||||
|         this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); |         await this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)) | ||||||
|       }); |       }) | ||||||
|  |  | ||||||
|       this.html.find('.toggle-archetype').click(async event => { |       this.html.find('.toggle-archetype').click(async event => { | ||||||
|         this.options.vueArchetype = !this.options.vueArchetype; |         this.options.vueArchetype = !this.options.vueArchetype; | ||||||
| @@ -266,27 +266,27 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { | |||||||
|       // On competence archetype change |       // On competence archetype change | ||||||
|       this.html.find('.competence-archetype').change(async event => { |       this.html.find('.competence-archetype').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value; | ||||||
|         this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); |         await this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); | ||||||
|       }); |       }); | ||||||
|       this.html.find('.nouvelle-incarnation').click(async event => this.actor.nouvelleIncarnation()) |       this.html.find('.nouvelle-incarnation').click(async event => await this.actor.nouvelleIncarnation()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // On pts de reve change |     // On pts de reve change | ||||||
|     this.html.find('.pointsreve-value').change(async event => this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) |     this.html.find('.pointsreve-value').change(async event => await this.actor.update({ "system.reve.reve.value": event.currentTarget.value })) | ||||||
|     this.html.find('.seuil-reve-value').change(async event => this.actor.setPointsDeSeuil(event.currentTarget.value)) |     this.html.find('.seuil-reve-value').change(async event => await this.actor.setPointsDeSeuil(event.currentTarget.value)) | ||||||
|  |  | ||||||
|     this.html.find('.stress-test').click(async event => this.actor.transformerStress()) |     this.html.find('.stress-test').click(async event => await this.actor.transformerStress()) | ||||||
|     this.html.find('.moral-malheureux').click(async event => this.actor.jetDeMoral('malheureuse')) |     this.html.find('.moral-malheureux').click(async event => await this.actor.jetDeMoral('malheureuse')) | ||||||
|     this.html.find('.moral-neutre').click(async event => this.actor.jetDeMoral('neutre')) |     this.html.find('.moral-neutre').click(async event => await this.actor.jetDeMoral('neutre')) | ||||||
|     this.html.find('.moral-heureux').click(async event => this.actor.jetDeMoral('heureuse')) |     this.html.find('.moral-heureux').click(async event => await this.actor.jetDeMoral('heureuse')) | ||||||
|     this.html.find('.button-ethylisme').click(async event => this.actor.jetEthylisme()) |     this.html.find('.button-ethylisme').click(async event => await this.actor.jetEthylisme()) | ||||||
|  |  | ||||||
|     this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1)) |     this.html.find('.ptreve-actuel-plus').click(async event => await this.actor.reveActuelIncDec(1)) | ||||||
|     this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1)) |     this.html.find('.ptreve-actuel-moins').click(async event => await this.actor.reveActuelIncDec(-1)) | ||||||
|     this.html.find('.chance-actuelle-plus').click(async event => this.actor.chanceActuelleIncDec(1)) |     this.html.find('.chance-actuelle-plus').click(async event => await this.actor.chanceActuelleIncDec(1)) | ||||||
|     this.html.find('.chance-actuelle-moins').click(async event => this.actor.chanceActuelleIncDec(-1)) |     this.html.find('.chance-actuelle-moins').click(async event => await this.actor.chanceActuelleIncDec(-1)) | ||||||
|     this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1)) |     this.html.find('.fatigue-plus').click(async event => await this.actor.santeIncDec("fatigue", 1)) | ||||||
|     this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1)) |     this.html.find('.fatigue-moins').click(async event => await this.actor.santeIncDec("fatigue", -1)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   getBlessure(event) { |   getBlessure(event) { | ||||||
|   | |||||||
							
								
								
									
										252
									
								
								module/actor.js
									
									
									
									
									
								
							
							
						
						
									
										252
									
								
								module/actor.js
									
									
									
									
									
								
							| @@ -42,6 +42,7 @@ import { RdDItemTete } from "./item/tete.js"; | |||||||
| import { DialogSelect } from "./dialog-select.js"; | import { DialogSelect } from "./dialog-select.js"; | ||||||
| import { PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js"; | import { PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js"; | ||||||
| import { RdDItemRace } from "./item/race.js"; | import { RdDItemRace } from "./item/race.js"; | ||||||
|  | import { RdDRollResult } from "./rdd-roll-result.js"; | ||||||
|  |  | ||||||
| export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre'] | export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre'] | ||||||
|  |  | ||||||
| @@ -627,7 +628,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     rollData.competence.system.defaut_carac = 'reve-actuel'; |     rollData.competence.system.defaut_carac = 'reve-actuel'; | ||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this, rollData, |     const dialog = await RdDRoll.create(this, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-reve-de-dragon.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-reve-de-dragon.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'maitrise', |         name: 'maitrise', | ||||||
|         label: 'Maîtriser le Rêve de Dragon', |         label: 'Maîtriser le Rêve de Dragon', | ||||||
| @@ -735,7 +736,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       await competence.update({ |       await competence.update({ | ||||||
|         "system.xp": toXp, |         "system.xp": toXp, | ||||||
|         "system.niveau": toNiveau, |         "system.niveau": toNiveau, | ||||||
|       }); |       }, { render: false }) | ||||||
|       await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name); |       await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name); | ||||||
|       await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name); |       await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name); | ||||||
|     } |     } | ||||||
| @@ -757,7 +758,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|           expérience requise: ${xpRequis} |           expérience requise: ${xpRequis} | ||||||
|           niveau : ${fromNiveau} |           niveau : ${fromNiveau} | ||||||
|           archétype : ${competence.system.niveau_archetype}`); |           archétype : ${competence.system.niveau_archetype}`); | ||||||
|       return; |       return | ||||||
|     } |     } | ||||||
|     const xpUtilise = Math.max(0, Math.min(fromXpStress, xpRequis)); |     const xpUtilise = Math.max(0, Math.min(fromXpStress, xpRequis)); | ||||||
|     const gainNiveau = (xpUtilise >= xpRequis || xpRequis <= 0) ? 1 : 0; |     const gainNiveau = (xpUtilise >= xpRequis || xpRequis <= 0) ? 1 : 0; | ||||||
| @@ -766,7 +767,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     await competence.update({ |     await competence.update({ | ||||||
|       "system.xp": newXp, |       "system.xp": newXp, | ||||||
|       "system.niveau": toNiveau, |       "system.niveau": toNiveau, | ||||||
|     }); |     }, { render: false }) | ||||||
|     const toXpStress = Math.max(0, fromXpStress - xpUtilise); |     const toXpStress = Math.max(0, fromXpStress - xpUtilise); | ||||||
|     await this.update({ "system.compteurs.experience.value": toXpStress }); |     await this.update({ "system.compteurs.experience.value": toXpStress }); | ||||||
|  |  | ||||||
| @@ -782,7 +783,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 }); |       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); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -807,10 +808,10 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       if (isNaN(toXp) || typeof (toXp) != 'number') toXp = 0; |       if (isNaN(toXp) || typeof (toXp) != 'number') toXp = 0; | ||||||
|       const fromXp = competence.system.xp; |       const fromXp = competence.system.xp; | ||||||
|       this.checkCompetenceXP(idOrName, toXp); |       this.checkCompetenceXP(idOrName, toXp); | ||||||
|       await competence.update({ 'system.xp': toXp }); |       await competence.update({ 'system.xp': toXp }, { render: false }) | ||||||
|       await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name, true); |       await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name, true); | ||||||
|       if (toXp > fromXp) { |       if (toXp > fromXp) { | ||||||
|         RdDUtility.checkThanatosXP(idOrName); |         RdDUtility.checkThanatosXP(competence) | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -821,10 +822,10 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     if (competence) { |     if (competence) { | ||||||
|       if (isNaN(toXpSort) || typeof (toXpSort) != 'number') toXpSort = 0; |       if (isNaN(toXpSort) || typeof (toXpSort) != 'number') toXpSort = 0; | ||||||
|       const fromXpSort = competence.system.xp_sort; |       const fromXpSort = competence.system.xp_sort; | ||||||
|       await competence.update({ 'system.xp_sort': toXpSort }); |       await competence.update({ 'system.xp_sort': toXpSort }, { render: false }) | ||||||
|       await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXpSort, toXpSort, competence.name, true); |       await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXpSort, toXpSort, competence.name, true); | ||||||
|       if (toXpSort > fromXpSort) { |       if (toXpSort > fromXpSort) { | ||||||
|         RdDUtility.checkThanatosXP(idOrName); |         RdDUtility.checkThanatosXP(competence) | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -833,7 +834,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   async updateCompetenceArchetype(idOrName, compValue) { |   async updateCompetenceArchetype(idOrName, compValue) { | ||||||
|     let competence = this.getCompetence(idOrName) |     let competence = this.getCompetence(idOrName) | ||||||
|     if (competence) { |     if (competence) { | ||||||
|       await competence.update({ 'system.niveau_archetype': Math.max(compValue ?? 0, 0) }); |       await competence.update({ 'system.niveau_archetype': Math.max(compValue ?? 0, 0) }) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1197,12 +1198,12 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       diffConditions: 0, |       diffConditions: 0, | ||||||
|       ajustementsForce: CONFIG.RDD.difficultesLibres |       ajustementsForce: CONFIG.RDD.difficultesLibres | ||||||
|     } |     } | ||||||
|     let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-ethylisme.html', rollData); |     let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-ethylisme.hbs', rollData); | ||||||
|     new RdDRollDialogEthylisme(html, rollData, this, r => this.saouler(r.forceAlcool)).render(true); |     new RdDRollDialogEthylisme(html, rollData, this, r => this.saouler(r.forceAlcool)).render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async mangerNourriture(item, onActionItem) { |   async mangerNourriture(item) { | ||||||
|     return (await DialogConsommer.create(this, item, onActionItem)).render(true); |     return (await DialogConsommer.create(this, item)).render(true); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async actionLire(item) { |   async actionLire(item) { | ||||||
| @@ -1390,7 +1391,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     ethylismeData.doses = ethylisme.nb_doses; |     ethylismeData.doses = ethylisme.nb_doses; | ||||||
|  |  | ||||||
|     await this.update({ 'system.compteurs.ethylisme': ethylisme }); |     await this.update({ 'system.compteurs.ethylisme': ethylisme }); | ||||||
|     await RdDResolutionTable.displayRollData(ethylismeData, this, 'chat-resultat-ethylisme.html'); |     await RdDRollResult.displayRollData(ethylismeData, this, 'chat-resultat-ethylisme.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1431,7 +1432,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-transformer-stress.html`, stressRollData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-transformer-stress.hbs`, stressRollData) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     const toStress = Math.max(fromStress - stressRollData.perte - 1, 0); |     const toStress = Math.max(fromStress - stressRollData.perte - 1, 0); | ||||||
| @@ -1479,7 +1480,6 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   createCallbackExperience() { |   createCallbackExperience() { | ||||||
|     return { |     return { | ||||||
|       condition: r => r.rolled.isPart && r.finalLevel < 0 && game.settings.get("core", "rollMode") != 'selfroll', |  | ||||||
|       action: r => this.appliquerAjoutExperience(r) |       action: r => this.appliquerAjoutExperience(r) | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| @@ -1487,7 +1487,6 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   createCallbackAppelAuMoral() { /* Si l'appel au moral est utilisé, on l'affiche dans le chat et on diminue éventuellement le moral */ |   createCallbackAppelAuMoral() { /* Si l'appel au moral est utilisé, on l'affiche dans le chat et on diminue éventuellement le moral */ | ||||||
|     return { |     return { | ||||||
|       condition: r => r.use.appelAuMoral && game.settings.get("core", "rollMode") != 'selfroll', |  | ||||||
|       action: r => this._appliquerAppelMoral(r) |       action: r => this._appliquerAppelMoral(r) | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| @@ -1516,7 +1515,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|         if (display) { |         if (display) { | ||||||
|           ChatMessage.create({ |           ChatMessage.create({ | ||||||
|             whisper: ChatUtility.getOwners(this), |             whisper: ChatUtility.getOwners(this), | ||||||
|             content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html`, checkXp) |             content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.hbs`, checkXp) | ||||||
|           }); |           }); | ||||||
|         } |         } | ||||||
|         return checkXp; |         return checkXp; | ||||||
| @@ -1548,7 +1547,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|         if (display) { |         if (display) { | ||||||
|           ChatMessage.create({ |           ChatMessage.create({ | ||||||
|             whisper: ChatUtility.getOwners(this), |             whisper: ChatUtility.getOwners(this), | ||||||
|             content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html`, checkXp) |             content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.hbs`, checkXp) | ||||||
|           }); |           }); | ||||||
|         } |         } | ||||||
|         return checkXp; |         return checkXp; | ||||||
| @@ -1558,13 +1557,16 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async appliquerAjoutExperience(rollData, hideChatMessage = 'show') { |   async appliquerAjoutExperience(rollData, hideChatMessage = 'show') { | ||||||
|     if (!Misc.hasConnectedGM()) { |     if (!rollData.rolled.isPart || | ||||||
|  |       rollData.finalLevel >= 0 || | ||||||
|  |       game.settings.get("core", "rollMode") == 'selfroll' || | ||||||
|  |       !Misc.hasConnectedGM()) { | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|     hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM) |     hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM) | ||||||
|     let xpData = await this._appliquerExperience(rollData.rolled, rollData.selectedCarac.label, rollData.competence, rollData.jetResistance); |     let xpData = await this._appliquerExperience(rollData.rolled, rollData.selectedCarac.label, rollData.competence, rollData.jetResistance); | ||||||
|     if (xpData.length) { |     if (xpData.length) { | ||||||
|       const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.html`, { |       const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-gain-xp.hbs`, { | ||||||
|         actor: this, |         actor: this, | ||||||
|         xpData |         xpData | ||||||
|       }) |       }) | ||||||
| @@ -1582,7 +1584,9 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _appliquerAppelMoral(rollData) { |   async _appliquerAppelMoral(rollData) { | ||||||
|     if (!rollData.use.moral) return; |     if (!rollData.use.moral || game.settings.get("core", "rollMode") == 'selfroll') { | ||||||
|  |       return | ||||||
|  |     } | ||||||
|     if (rollData.rolled.isEchec || |     if (rollData.rolled.isEchec || | ||||||
|       (rollData.ajustements.diviseurSignificative && (rollData.rolled.roll * rollData.ajustements.diviseurSignificative > rollData.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'; | ||||||
| @@ -1644,7 +1648,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     const dialog = await this.openRollDialog({ |     const dialog = await this.openRollDialog({ | ||||||
|       name: 'lancer-un-sort', |       name: 'lancer-un-sort', | ||||||
|       label: 'Lancer un sort', |       label: 'Lancer un sort', | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|         carac: { 'reve': reve }, |         carac: { 'reve': reve }, | ||||||
|         forceCarac: { 'reve': reve }, |         forceCarac: { 'reve': reve }, | ||||||
| @@ -1657,10 +1661,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|         diffLibre: RdDItemSort.getDifficulte(sorts[0], -7), // Per default at startup |         diffLibre: RdDItemSort.getDifficulte(sorts[0], -7), // Per default at startup | ||||||
|         coutreve: Array(30).fill().map((item, index) => 1 + index), |         coutreve: Array(30).fill().map((item, index) => 1 + index), | ||||||
|       }, |       }, | ||||||
|       callbackAction: async r => { |       callbacks: [{ action: r => this._rollUnSortResult(r) }] | ||||||
|         await this._rollUnSortResult(r); |  | ||||||
|         if (!r.isSortReserve) this.tmrApp?.close(); |  | ||||||
|       } |  | ||||||
|     }); |     }); | ||||||
|     this.tmrApp?.setTMRPendingAction(dialog); |     this.tmrApp?.setTMRPendingAction(dialog); | ||||||
|   } |   } | ||||||
| @@ -1764,20 +1765,49 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     reveActuel = Math.max(reveActuel - rollData.depenseReve, 0); |     reveActuel = Math.max(reveActuel - rollData.depenseReve, 0); | ||||||
|     await this.update({ "system.reve.reve.value": reveActuel }); |     await this.update({ "system.reve.reve.value": reveActuel }); | ||||||
|  |  | ||||||
|     // Final chat message |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-sort.hbs'); | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-sort.html'); |  | ||||||
|  |  | ||||||
|     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) { | ||||||
|  |       this.tmrApp?.close(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue | ||||||
|  |    * @param {*} caracName  | ||||||
|  |    * @param {*} compName  | ||||||
|  |    * @param {*} diff  | ||||||
|  |    * @param {*} options  | ||||||
|  |    * @returns  | ||||||
|  |    */ | ||||||
|  |   async doRollCaracCompetence(caracName, compName, diff, options = { title: "" }) { | ||||||
|  |     const carac = this.getCaracByName(caracName); | ||||||
|  |     if (!carac) { | ||||||
|  |       ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`) | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     const competence = this.getCompetence(compName); | ||||||
|  |     let rollData = { | ||||||
|  |       alias: this.getAlias(), | ||||||
|  |       caracValue: Number(carac.value), | ||||||
|  |       selectedCarac: carac, | ||||||
|  |       competence: competence, | ||||||
|  |       diffLibre: diff, | ||||||
|  |       show: { title: options?.title ?? '' } | ||||||
|  |     }; | ||||||
|  |     RollDataAjustements.calcul(rollData, this); | ||||||
|  |     await RdDResolutionTable.rollData(rollData); | ||||||
|  |     this.gererExperience(rollData); | ||||||
|  |     await RdDRollResult.displayRollData(rollData, this) | ||||||
|  |     return rollData.rolled; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   gererExperience(rollData) { |   gererExperience(rollData) { | ||||||
|     const callback = this.createCallbackExperience(); |     this.createCallbackExperience().action(rollData); | ||||||
|     if (callback.condition(rollData)) { |  | ||||||
|       callback.action(rollData); |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1790,7 +1820,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|         name: nomTache, type: 'tache', |         name: nomTache, type: 'tache', | ||||||
|         system: { |         system: { | ||||||
|           carac: 'intellect', |           carac: 'intellect', | ||||||
|           competence: 'Ecriture', |           competence: 'Écriture', | ||||||
|           difficulte: item.system.difficulte, |           difficulte: item.system.difficulte, | ||||||
|           periodicite: "60 minutes", |           periodicite: "60 minutes", | ||||||
|           fatigue: 2, |           fatigue: 2, | ||||||
| @@ -1823,6 +1853,27 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     return undefined; |     return undefined; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { | ||||||
|  |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|  |     const competence = this.getCompetence(compName); | ||||||
|  |     await this.openRollDialog({ | ||||||
|  |       name: 'jet-competence', | ||||||
|  |       label: 'Jet ' + Grammar.apostrophe('de', competence.name), | ||||||
|  |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|  |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|  |         carac: this.system.carac, | ||||||
|  |         selectedCarac: this.getCaracByName(caracName), | ||||||
|  |         selectedCaracName: caracName, | ||||||
|  |         diffLibre: diff, | ||||||
|  |         competence: competence, | ||||||
|  |         show: { title: options?.title ?? '' } | ||||||
|  |       }, | ||||||
|  |       // TODO: | ||||||
|  |       callbacks: [{ action: r => this.$onRollCompetence(r, options) }] | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollTache(id, options = {}) { |   async rollTache(id, options = {}) { | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
| @@ -1833,7 +1884,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-competence', |       name: 'jet-competence', | ||||||
|       label: 'Jet de Tâche ' + tacheData.name, |       label: 'Jet de Tâche ' + tacheData.name, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|         competence: compData, |         competence: compData, | ||||||
|         tache: tacheData, |         tache: tacheData, | ||||||
| @@ -1844,7 +1895,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|           [tacheData.system.carac]: foundry.utils.duplicate(this.system.carac[tacheData.system.carac]) |           [tacheData.system.carac]: foundry.utils.duplicate(this.system.carac[tacheData.system.carac]) | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this._tacheResult(r, options) |       callbacks: [{ action: r => this._tacheResult(r, options) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1867,14 +1918,14 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     await this.updateEmbeddedDocuments('Item', [rollData.tache]); |     await this.updateEmbeddedDocuments('Item', [rollData.tache]); | ||||||
|     await this.santeIncDec("fatigue", rollData.tache.system.fatigue); |     await this.santeIncDec("fatigue", rollData.tache.system.fatigue); | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-tache.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-tache.hbs'); | ||||||
|     if (options?.onRollAutomate) { |     if (options?.onRollAutomate) { | ||||||
|       options.onRollAutomate(rollData); |       options.onRollAutomate(rollData); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _rollArt(artData, selected, oeuvre, callbackAction = r => this._resultArt(r)) { |   async _rollArt(artData, selected, oeuvre, callbackAction = async r => await this._resultArt(r)) { | ||||||
|     oeuvre.system.niveau = oeuvre.system.niveau ?? 0; |     oeuvre.system.niveau = oeuvre.system.niveau ?? 0; | ||||||
|     foundry.utils.mergeObject(artData, |     foundry.utils.mergeObject(artData, | ||||||
|       { |       { | ||||||
| @@ -1896,10 +1947,10 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: `jet-${artData.art}`, |       name: `jet-${artData.art}`, | ||||||
|       label: `${artData.verbe} ${oeuvre.name}`, |       label: `${artData.verbe} ${oeuvre.name}`, | ||||||
|       template: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.html`, |       template: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.hbs`, | ||||||
|       rollData: artData, |       rollData: artData, | ||||||
|       callbackAction: callbackAction |       callbacks: [{ action: callbackAction }], | ||||||
|     }); |     }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1908,7 +1959,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     const baseQualite = (artData.rolled.isSuccess ? niveau : artData.competence.system.niveau); |     const baseQualite = (artData.rolled.isSuccess ? niveau : artData.competence.system.niveau); | ||||||
|     artData.qualiteFinale = Math.min(baseQualite, niveau) + artData.rolled.ptQualite; |     artData.qualiteFinale = Math.min(baseQualite, niveau) + artData.rolled.ptQualite; | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`); |     await RdDRollResult.displayRollData(artData, this.name, `chat-resultat-${artData.art}.hbs`); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -1985,7 +2036,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       ui.notifications.info(`${platCuisine.system.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`); |       ui.notifications.info(`${platCuisine.system.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`); | ||||||
|     } |     } | ||||||
|     cuisine.platCuisine = platCuisine; |     cuisine.platCuisine = platCuisine; | ||||||
|     await RdDResolutionTable.displayRollData(cuisine, this.name, `chat-resultat-${cuisine.art}.html`); |     await RdDRollResult.displayRollData(cuisine, this.name, `chat-resultat-${cuisine.art}.hbs`); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async preparerNourriture(item) { |   async preparerNourriture(item) { | ||||||
| @@ -2059,7 +2110,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this, meditationData, |     const dialog = await RdDRoll.create(this, meditationData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-meditation', |         name: 'jet-meditation', | ||||||
|         label: "Jet de méditation", |         label: "Jet de méditation", | ||||||
| @@ -2080,7 +2131,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       await this.createEmbeddedDocuments("Item", [RdDItemSigneDraconique.prepareSigneDraconiqueMeditation(meditationRoll.meditation, meditationRoll.rolled)]); |       await this.createEmbeddedDocuments("Item", [RdDItemSigneDraconique.prepareSigneDraconiqueMeditation(meditationRoll.meditation, meditationRoll.rolled)]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(meditationRoll, this.name, 'chat-resultat-meditation.html'); |     await RdDRollResult.displayRollData(meditationRoll, this.name, 'chat-resultat-meditation.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -2132,7 +2183,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this, rollData, |     const dialog = await RdDRoll.create(this, rollData, | ||||||
|       { |       { | ||||||
|         html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-signedraconique.html', |         html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-signedraconique.hbs', | ||||||
|         close: async html => await this._onCloseRollDialog(html) |         close: async html => await this._onCloseRollDialog(html) | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
| @@ -2167,7 +2218,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXp, toXp, `${rollData.competence.name} : signe draconique`); |       await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXp, toXp, `${rollData.competence.name} : signe draconique`); | ||||||
|     } |     } | ||||||
|     await this.deleteEmbeddedDocuments("Item", [rollData.signe._id]); |     await this.deleteEmbeddedDocuments("Item", [rollData.signe._id]); | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this.name, 'chat-resultat-lecture-signedraconique.html'); |     await RdDRollResult.displayRollData(rollData, this.name, 'chat-resultat-lecture-signedraconique.hbs'); | ||||||
|     this.tmrApp.close(); |     this.tmrApp.close(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -2176,15 +2227,15 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'appelChance', |       name: 'appelChance', | ||||||
|       label: 'Appel à la chance', |       label: 'Appel à la chance', | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.hbs', | ||||||
|       rollData: { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' }, |       rollData: { selectedCarac: this.getCaracByName('chance-actuelle'), surprise: '' }, | ||||||
|       callbackAction: r => this._appelChanceResult(r, onSuccess, onEchec) |       callbacks: [{ action: r => this.$appelChanceResult(r, onSuccess, onEchec) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _appelChanceResult(rollData, onSuccess, onEchec) { |   async $appelChanceResult(rollData, onSuccess, onEchec) { | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-appelchance.html') |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-appelchance.hbs') | ||||||
|     if (rollData.rolled.isSuccess) { |     if (rollData.rolled.isSuccess) { | ||||||
|       await this.setFlag(SYSTEM_RDD, 'utilisationChance', true); |       await this.setFlag(SYSTEM_RDD, 'utilisationChance', true); | ||||||
|       await this.chanceActuelleIncDec(-1); |       await this.chanceActuelleIncDec(-1); | ||||||
| @@ -2476,7 +2527,6 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|     const blessure = this.getItem(blessureId, 'blessure') |     const blessure = this.getItem(blessureId, 'blessure') | ||||||
|     console.log('TODO update blessure', this, blessureId, rollData, rollData.tache); |  | ||||||
|     if (blessure && !blessure.system.premierssoins.done) { |     if (blessure && !blessure.system.premierssoins.done) { | ||||||
|       const tache = rollData.tache; |       const tache = rollData.tache; | ||||||
|       if (rollData.rolled.isETotal) { |       if (rollData.rolled.isETotal) { | ||||||
| @@ -2593,12 +2643,13 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async incDecItemUse(itemId, inc = 1) { |   async incDecItemUse(itemId, shouldIncrease = true) { | ||||||
|  |     if (shouldIncrease) { | ||||||
|       const currentItemUse = this.getFlag(SYSTEM_RDD, 'itemUse'); |       const currentItemUse = this.getFlag(SYSTEM_RDD, 'itemUse'); | ||||||
|       let itemUse = currentItemUse ? foundry.utils.duplicate(currentItemUse) : {}; |       let itemUse = currentItemUse ? foundry.utils.duplicate(currentItemUse) : {}; | ||||||
|     itemUse[itemId] = (itemUse[itemId] ?? 0) + inc; |       itemUse[itemId] = (itemUse[itemId] ?? 0) + 1; | ||||||
|       await this.setFlag(SYSTEM_RDD, 'itemUse', itemUse); |       await this.setFlag(SYSTEM_RDD, 'itemUse', itemUse); | ||||||
|     console.log("ITEM USE INC", inc, itemUse); |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -2637,7 +2688,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|       rollData.competence.system.defaut_carac = caracTache; |       rollData.competence.system.defaut_carac = caracTache; | ||||||
|  |  | ||||||
|       const dialog = await RdDRoll.create(this, rollData, |       const dialog = await RdDRoll.create(this, rollData, | ||||||
|         { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.html' }, |         { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.hbs' }, | ||||||
|         { |         { | ||||||
|           name: 'tache-alchimique', |           name: 'tache-alchimique', | ||||||
|           label: 'Tache Alchimique', |           label: 'Tache Alchimique', | ||||||
| @@ -2658,7 +2709,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _alchimieResult(rollData) { |   async _alchimieResult(rollData) { | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-alchimie.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-alchimie.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -2807,25 +2858,25 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async consommerPotionSoin(potionData) { |   async consommerPotionSoin(potion) { | ||||||
|     potionData.alias = this.name; |     potion.alias = this.name; | ||||||
|     potionData.supprimer = true; |     potion.supprimer = true; | ||||||
|  |  | ||||||
|     if (potionData.system.magique) { |     if (potion.system.magique) { | ||||||
|       // Gestion de la résistance: |       // Gestion de la résistance: | ||||||
|       potionData.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); |       potion.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); | ||||||
|       if (potionData.rolled.isEchec) { |       if (potion.rolled.isEchec) { | ||||||
|         await this.reveActuelIncDec(-1); |         await this.reveActuelIncDec(-1); | ||||||
|         potionData.guerisonData = await this.buildPotionGuerisonList(potionData.system.puissance); |         potion.guerisonData = await this.buildPotionGuerisonList(potion.system.puissance); | ||||||
|         potionData.guerisonMinutes = potionData.guerisonData.pointsConsommes * 5; |         potion.guerisonMinutes = potion.guerisonData.pointsConsommes * 5; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     if (!potionData.system.magique || potionData.rolled.isSuccess) { |     if (!potion.system.magique || potion.rolled.isSuccess) { | ||||||
|       await this.setBonusPotionSoin(potionData.system.herbebonus); |       await this.setBonusPotionSoin(potion.system.herbebonus); | ||||||
|     } |     } | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.hbs`, potion) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -2834,35 +2885,35 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async consommerPotionRepos(potionData) { |   async consommerPotionRepos(potion) { | ||||||
|     potionData.alias = this.name; |     potion.alias = this.name; | ||||||
|     potionData.supprimer = true; |     potion.supprimer = true; | ||||||
|  |  | ||||||
|     if (potionData.system.magique) { |     if (potion.system.magique) { | ||||||
|       // Gestion de la résistance: |       // Gestion de la résistance: | ||||||
|       potionData.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); |       potion.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); | ||||||
|       if (potionData.rolled.isEchec) { |       if (potion.rolled.isEchec) { | ||||||
|         await this.reveActuelIncDec(-1); |         await this.reveActuelIncDec(-1); | ||||||
|         let fatigueActuelle = this.getFatigueActuelle(); |         let fatigueActuelle = this.getFatigueActuelle(); | ||||||
|         potionData.caseFatigueReel = Math.min(fatigueActuelle, potionData.system.puissance); |         potion.caseFatigueReel = Math.min(fatigueActuelle, potion.system.puissance); | ||||||
|         potionData.guerisonDureeUnite = (potionData.system.reposalchimique) ? "rounds" : "minutes"; |         potion.guerisonDureeUnite = (potion.system.reposalchimique) ? "rounds" : "minutes"; | ||||||
|         potionData.guerisonDureeValue = (potionData.system.reposalchimique) ? potionData.caseFatigueReel : potionData.caseFatigueReel * 5; |         potion.guerisonDureeValue = (potion.system.reposalchimique) ? potion.caseFatigueReel : potion.caseFatigueReel * 5; | ||||||
|         potionData.aphasiePermanente = false; |         potion.aphasiePermanente = false; | ||||||
|         if (potionData.system.reposalchimique) { |         if (potion.system.reposalchimique) { | ||||||
|           let chanceAphasie = await RdDDice.rollTotal("1d100"); |           let chanceAphasie = await RdDDice.rollTotal("1d100"); | ||||||
|           if (chanceAphasie <= potionData.system.pr) { |           if (chanceAphasie <= potion.system.pr) { | ||||||
|             potionData.aphasiePermanente = true; |             potion.aphasiePermanente = true; | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         await this.santeIncDec("fatigue", -potionData.caseFatigueReel); |         await this.santeIncDec("fatigue", -potion.caseFatigueReel); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     if (!potionData.system.magique || potionData.rolled.isSuccess) { |     if (!potion.system.magique || potion.rolled.isSuccess) { | ||||||
|       this.bonusRepos = potionData.system.herbebonus; |       this.bonusRepos = potion.system.herbebonus; | ||||||
|     } |     } | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.hbs`, potion) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -2887,7 +2938,7 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|  |  | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, { |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.hbs`, { | ||||||
|         alias: this.getAlias(), |         alias: this.getAlias(), | ||||||
|         nbBrinsReste: herbeData.system.quantite - herbeData.nbBrins, |         nbBrinsReste: herbeData.system.quantite - herbeData.nbBrins, | ||||||
|         potion: newPotion, |         potion: newPotion, | ||||||
| @@ -2902,35 +2953,32 @@ export class RdDActor extends RdDBaseActorSang { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async consommerPotionGenerique(potionData) { |   async consommerPotionGenerique(potion) { | ||||||
|     potionData.alias = this.name; |     potion.alias = this.name; | ||||||
|  |  | ||||||
|     if (potionData.system.magique) { |     if (potion.system.magique) { | ||||||
|       // Gestion de la résistance: |       // Gestion de la résistance: | ||||||
|       potionData.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); |       potion.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); | ||||||
|       if (potionData.rolled.isEchec) { |       if (potion.rolled.isEchec) { | ||||||
|         await this.reveActuelIncDec(-1); |         await this.reveActuelIncDec(-1); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.hbs`, potion) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async consommerPotion(potion, onActionItem = async () => { }) { |   async consommerPotion(potion) { | ||||||
|     const potionData = potion |     if (potion.system.categorie.includes('Soin')) { | ||||||
|  |       this.consommerPotionSoin(potion); | ||||||
|     if (potionData.system.categorie.includes('Soin')) { |     } else if (potion.system.categorie.includes('Repos')) { | ||||||
|       this.consommerPotionSoin(potionData); |       this.consommerPotionRepos(potion); | ||||||
|     } else if (potionData.system.categorie.includes('Repos')) { |  | ||||||
|       this.consommerPotionRepos(potionData); |  | ||||||
|     } else { |     } else { | ||||||
|       this.consommerPotionGenerique(potionData); |       this.consommerPotionGenerique(potion); | ||||||
|     } |     } | ||||||
|     await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potionData.supprimer }); |     await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potion.supprimer }); | ||||||
|     await onActionItem() |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -26,16 +26,17 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | |||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('.button-encaissement').click(async event => this.actor.encaisser()) |     this.html.find('.button-encaissement').click(async event => await this.actor.encaisser()) | ||||||
|     this.html.find('.roll-carac').click(async event => { |     this.html.find('.roll-carac').click(async event => { | ||||||
|       this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value))}) |       await this.actor.rollCarac(Grammar.toLowerCaseNoAccent(event.currentTarget.attributes['data-carac-name'].value)) | ||||||
|     this.html.find('.roll-competence').click(async event => this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); |     }) | ||||||
|     this.html.find('.endurance-plus').click(async event => this.actor.santeIncDec("endurance", 1)); |     this.html.find('.roll-competence').click(async event => await this.actor.rollCompetence(RdDSheetUtility.getItemId(event))); | ||||||
|     this.html.find('.endurance-moins').click(async event => this.actor.santeIncDec("endurance", -1)); |     this.html.find('.endurance-plus').click(async event => await this.actor.santeIncDec("endurance", 1)); | ||||||
|  |     this.html.find('.endurance-moins').click(async event => await this.actor.santeIncDec("endurance", -1)); | ||||||
|  |  | ||||||
|     if (game.user.isGM) { |     if (game.user.isGM) { | ||||||
|       this.html.find('.button-remise-a-neuf').click(async event => this.actor.remiseANeuf()) |       this.html.find('.button-remise-a-neuf').click(async event => await this.actor.remiseANeuf()) | ||||||
|       this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); |       this.html.find('.delete-active-effect').click(async event => await this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect'))); | ||||||
|       this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects()); |       this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects()); | ||||||
|     } |     } | ||||||
|     this.html.find('.competence-add').click(async event => |     this.html.find('.competence-add').click(async event => | ||||||
| @@ -55,14 +56,13 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet { | |||||||
|     if (this.options.vueDetaillee) { |     if (this.options.vueDetaillee) { | ||||||
|       // On carac change |       // On carac change | ||||||
|       this.html.find('.carac-value').change(async event => { |       this.html.find('.carac-value').change(async event => { | ||||||
|         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", ""); |         let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "") | ||||||
|         this.actor.updateCarac(caracName, parseInt(event.target.value)); |         await this.actor.updateCarac(caracName, parseInt(event.target.value)) | ||||||
|       }); |       }); | ||||||
|       // On competence change |       // On competence change | ||||||
|       this.html.find('.competence-value').change(async event => { |       this.html.find('.competence-value').change(async event => { | ||||||
|         let compName = event.currentTarget.attributes.compname.value; |         let compName = event.currentTarget.attributes.compname.value | ||||||
|         //console.log("Competence changed :", compName); |         await this.actor.updateCompetence(compName, parseInt(event.target.value)) | ||||||
|         this.actor.updateCompetence(compName, parseInt(event.target.value)); |  | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ import { StatusEffects } from "../settings/status-effects.js"; | |||||||
| import { Targets } from "../targets.js"; | import { Targets } from "../targets.js"; | ||||||
| import { RdDConfirm } from "../rdd-confirm.js"; | import { RdDConfirm } from "../rdd-confirm.js"; | ||||||
| import { RdDCarac } from "../rdd-carac.js"; | import { RdDCarac } from "../rdd-carac.js"; | ||||||
|  | import { RdDRollResult } from "../rdd-roll-result.js"; | ||||||
|  |  | ||||||
| import { ChatUtility } from "../chat-utility.js"; | import { ChatUtility } from "../chat-utility.js"; | ||||||
| import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js"; | import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js"; | ||||||
| @@ -268,30 +269,17 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async openRollDialog({ name, label, template, rollData, callbackAction }) { |   async openRollDialog({ name, label, template, rollData, callbacks }) { | ||||||
|     const dialog = await RdDRoll.create(this, rollData, |     const dialog = await RdDRoll.create(this, rollData, | ||||||
|       { html: template, close: async html => await this._onCloseRollDialog(html) }, |       { html: template, close: async html => await this._onCloseRollDialog(html) }, | ||||||
|       { |       { name: name, label: label, callbacks: [this.createCallbackExperience(), this.createCallbackAppelAuMoral()].concat(callbacks) }) | ||||||
|         name: name, |     dialog.render(true) | ||||||
|         label: label, |  | ||||||
|         callbacks: [ |  | ||||||
|           this.createCallbackExperience(), |  | ||||||
|           this.createCallbackAppelAuMoral(), |  | ||||||
|           { action: callbackAction } |  | ||||||
|         ] |  | ||||||
|       }); |  | ||||||
|     dialog.render(true); |  | ||||||
|     return dialog |     return dialog | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   createEmptyCallback() { |   createCallbackExperience() { return { action: r => { } } } | ||||||
|     return { |   createCallbackAppelAuMoral() { return { action: r => { } } } | ||||||
|       condition: r => false, |  | ||||||
|       action: r => { } |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|   createCallbackExperience() { return this.createEmptyCallback(); } |  | ||||||
|   createCallbackAppelAuMoral() { return this.createEmptyCallback(); } |  | ||||||
|   async _onCloseRollDialog(html) { } |   async _onCloseRollDialog(html) { } | ||||||
|  |  | ||||||
|   async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { |   async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { | ||||||
| @@ -299,8 +287,8 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     const competence = this.getCompetence(compName); |     const competence = this.getCompetence(compName); | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-competence', |       name: 'jet-competence', | ||||||
|       label: competence? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`, |       label: competence ? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|         alias: this.getAlias(), |         alias: this.getAlias(), | ||||||
|         carac: this.system.carac, |         carac: this.system.carac, | ||||||
| @@ -310,7 +298,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|         competence: competence, |         competence: competence, | ||||||
|         show: { title: options?.title ?? '' } |         show: { title: options?.title ?? '' } | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this.$onRollCompetence(r, options) |       callbacks: [async r => this.$onRollCompetence(r, options)] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|   /** |   /** | ||||||
| @@ -353,16 +341,14 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined) |     const selectedCaracName = ['apparence', 'perception', 'force', 'reve'].find(it => carac[it] != undefined) | ||||||
|  |  | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: `jet-${this.id}`, |  | ||||||
|       label: `Jet de ${this.getAlias()}`, |  | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.html', |  | ||||||
|       rollData: { |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|         carac: carac, |         carac: carac, | ||||||
|         selectedCarac: carac[selectedCaracName], |         selectedCarac: carac[selectedCaracName], | ||||||
|         selectedCaracName: selectedCaracName, |         selectedCaracName: selectedCaracName, | ||||||
|         competences: this.itemTypes['competence'] |         competences: this.itemTypes['competence'] | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this.$onRollCaracResult(r) |       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -373,32 +359,38 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     foundry.utils.mergeObject(options, { resistance: false, diff: 0 }, { overwrite: false }) |     foundry.utils.mergeObject(options, { resistance: false, diff: 0 }, { overwrite: false }) | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|     let selectedCarac = this.getCaracByName(caracName) |     let selectedCarac = this.getCaracByName(caracName) | ||||||
|     console.log("selectedCarac", selectedCarac) |     const title = 'Jet ' + Grammar.apostrophe('de', selectedCarac.label); | ||||||
|  |     const jetResistance = options.resistance ? caracName : undefined; | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-' + caracName, |       name: 'jet-' + caracName, | ||||||
|       label: 'Jet ' + Grammar.apostrophe('de', selectedCarac.label), |       label: title, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.hbs', | ||||||
|       rollData: { |       rollData: { | ||||||
|  |         alias: this.getAlias(), | ||||||
|         selectedCarac: selectedCarac, |         selectedCarac: selectedCarac, | ||||||
|         competences: this.itemTypes['competence'], |         competences: this.itemTypes['competence'], | ||||||
|         diffLibre: options.diff ?? 0, |         diffLibre: options.diff ?? 0, | ||||||
|         jetResistance: options.resistance ? caracName : undefined |         jetResistance: jetResistance | ||||||
|       }, |       }, | ||||||
|       callbackAction: r => this.$onRollCaracResult(r) |       callbacks: [{ action: r => this.$onRollCaracResult(r) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async $onRollCaracResult(rollData) { |   async $onRollCaracResult(rollData) { | ||||||
|     // Final chat message |     // Final chat message | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-general.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-general.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) { |   async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) { | ||||||
|     RdDEmpoignade.checkEmpoignadeEnCours(this) |     RdDEmpoignade.checkEmpoignadeEnCours(this) | ||||||
|     const competence = this.getCompetence(idOrName); |     const competence = this.getCompetence(idOrName); | ||||||
|     let rollData = { carac: this.system.carac, competence: competence, arme: options.arme } |     let rollData = { | ||||||
|  |       carac: this.system.carac, | ||||||
|  |       competence: competence, | ||||||
|  |       arme: options.arme | ||||||
|  |     } | ||||||
|     if (competence.type == ITEM_TYPES.competencecreature) { |     if (competence.type == ITEM_TYPES.competencecreature) { | ||||||
|       const token = RdDUtility.getSelectedToken(this) |       const token = RdDUtility.getSelectedToken(this) | ||||||
|       const arme = RdDItemCompetenceCreature.armeCreature(competence) |       const arme = RdDItemCompetenceCreature.armeCreature(competence) | ||||||
| @@ -416,18 +408,18 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       // Transformer la competence de créature |       // Transformer la competence de créature | ||||||
|       RdDItemCompetenceCreature.setRollDataCreature(rollData) |       RdDItemCompetenceCreature.setRollDataCreature(rollData) | ||||||
|     } |     } | ||||||
|  |     const dialogLabel = 'Jet ' + Grammar.apostrophe('de', competence.name); | ||||||
|     await this.openRollDialog({ |     await this.openRollDialog({ | ||||||
|       name: 'jet-competence', |       name: 'jet-competence', | ||||||
|       label: 'Jet ' + Grammar.apostrophe('de', competence.name), |       label: dialogLabel, | ||||||
|       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', |       template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|       rollData: rollData, |       rollData: rollData, | ||||||
|       callbackAction: r => this.$onRollCompetence(r, options) |       callbacks: [{ action: r => this.$onRollCompetence(r, options) }] | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async $onRollCompetence(rollData, options) { |   async $onRollCompetence(rollData, options) { | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-competence.html') |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-competence.hbs') | ||||||
|     if (options?.onRollAutomate) { |     if (options?.onRollAutomate) { | ||||||
|       options.onRollAutomate(rollData); |       options.onRollAutomate(rollData); | ||||||
|     } |     } | ||||||
| @@ -527,7 +519,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|     await ChatUtility.createChatWithRollMode( |     await ChatUtility.createChatWithRollMode( | ||||||
|       { |       { | ||||||
|         roll: encaissement.roll, |         roll: encaissement.roll, | ||||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) |         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||||
|       }, |       }, | ||||||
|       this |       this | ||||||
|     ) |     ) | ||||||
| @@ -537,7 +529,7 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       encaissement.isGM = true |       encaissement.isGM = true | ||||||
|       ChatMessage.create({ |       ChatMessage.create({ | ||||||
|         whisper: ChatUtility.getGMs(), |         whisper: ChatUtility.getGMs(), | ||||||
|         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.html', encaissement) |         content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-encaissement.hbs', encaissement) | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -562,10 +554,8 @@ export class RdDBaseActorReve extends RdDBaseActor { | |||||||
|       await entite.setEntiteReveAccordee(this); |       await entite.setEntiteReveAccordee(this); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.html'); |     await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.hbs'); | ||||||
|     if (rolled.isPart) { |  | ||||||
|     await this.appliquerAjoutExperience(rollData, true); |     await this.appliquerAjoutExperience(rollData, true); | ||||||
|     } |  | ||||||
|     return rolled.isSuccess; |     return rolled.isSuccess; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,20 +17,20 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet { | |||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('.creer-blessure-legere').click(async event => RdDItemBlessure.createBlessure(this.actor, 2)); |     this.html.find('.creer-blessure-legere').click(async event => await RdDItemBlessure.createBlessure(this.actor, 2)); | ||||||
|     this.html.find('.creer-blessure-grave').click(async event => RdDItemBlessure.createBlessure(this.actor, 4)); |     this.html.find('.creer-blessure-grave').click(async event => await RdDItemBlessure.createBlessure(this.actor, 4)); | ||||||
|     this.html.find('.creer-blessure-critique').click(async event => RdDItemBlessure.createBlessure(this.actor, 6)); |     this.html.find('.creer-blessure-critique').click(async event => await RdDItemBlessure.createBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 0)); |     this.html.find('.subir-blessure-contusion').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 0)); | ||||||
|     this.html.find('.subir-blessure-legere').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2)); |     this.html.find('.subir-blessure-legere').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 2)); | ||||||
|     this.html.find('.subir-blessure-grave').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 4)); |     this.html.find('.subir-blessure-grave').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 4)); | ||||||
|     this.html.find('.subir-blessure-critique').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 6)); |     this.html.find('.subir-blessure-critique').click(async event => await RdDItemBlessure.applyFullBlessure(this.actor, 6)); | ||||||
|  |  | ||||||
|     this.html.find('.jet-vie').click(async event => this.actor.jetDeVie()) |     this.html.find('.jet-vie').click(async event => await this.actor.jetDeVie()) | ||||||
|     this.html.find('.jet-endurance').click(async event => await this.jetEndurance()) |     this.html.find('.jet-endurance').click(async event => await this.jetEndurance()) | ||||||
|  |  | ||||||
|     this.html.find('.vie-plus').click(async event => this.actor.santeIncDec("vie", 1)) |     this.html.find('.vie-plus').click(async event => await this.actor.santeIncDec("vie", 1)) | ||||||
|     this.html.find('.vie-moins').click(async event => this.actor.santeIncDec("vie", -1)) |     this.html.find('.vie-moins').click(async event => await this.actor.santeIncDec("vie", -1)) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async jetEndurance() { |   async jetEndurance() { | ||||||
|   | |||||||
| @@ -85,14 +85,14 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|     super.activateListeners(html); |     super.activateListeners(html); | ||||||
|     this.html = html; |     this.html = html; | ||||||
|  |  | ||||||
|     this.html.find('.actionItem').click(event => ItemAction.onActionItem(event, this.actor, this.options)) |     this.html.find('.actionItem').click(async event => await ItemAction.onActionItem(event, this.actor, this.options)) | ||||||
|     this.html.find('.item-edit').click(async event => this.itemActionEdit(event)) |     this.html.find('.item-edit').click(async event => await this.itemActionEdit(event)) | ||||||
|     this.html.find('.conteneur-name a').click(async event => { |     this.html.find('.conteneur-name a').click(async event => { | ||||||
|       RdDUtility.toggleAfficheContenu(this.getItemId(event)) |       RdDUtility.toggleAfficheContenu(this.getItemId(event)) | ||||||
|       this.render(true) |       this.render(true) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.actor-montrer').click(async event => this.actor.postActorToChat()); |     this.html.find('.actor-montrer').click(async event => await this.actor.postActorToChat()); | ||||||
|  |  | ||||||
|     this.html.find('.recherche') |     this.html.find('.recherche') | ||||||
|       .each((index, field) => { |       .each((index, field) => { | ||||||
| @@ -106,21 +106,17 @@ export class RdDBaseActorSheet extends ActorSheet { | |||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('.item-equip-armure').click(async event => this.actor.equiperObjet(this.getItem(event))) |     this.html.find('.item-equip-armure').click(async event => await this.actor.equiperObjet(this.getItem(event))) | ||||||
|     this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor)); |     this.html.find('.item-delete').click(async event => await RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor)); | ||||||
|     this.html.find('.item-quantite-plus').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); |     this.html.find('.item-quantite-plus').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); | ||||||
|     this.html.find('.item-quantite-moins').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); |     this.html.find('.item-quantite-moins').click(async event => await this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); | ||||||
|  |  | ||||||
|     this.html.find('.creer-un-objet').click(async event => { |     this.html.find('.creer-un-objet').click(async event => await this.selectObjetTypeToCreate()) | ||||||
|       this.selectObjetTypeToCreate(); |     this.html.find('.nettoyer-conteneurs').click(async event => await this.actor.nettoyerConteneurs()) | ||||||
|     }); |  | ||||||
|     this.html.find('.nettoyer-conteneurs').click(async event => { |  | ||||||
|       this.actor.nettoyerConteneurs(); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     this.html.find('.vue-detaillee').click(async event => { |     this.html.find('.vue-detaillee').click(async event => { | ||||||
|       this.options.vueDetaillee = !this.options.vueDetaillee; |       this.options.vueDetaillee = !this.options.vueDetaillee | ||||||
|       this.render(true); |       this.render(true) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -244,16 +244,19 @@ export class RdDBaseActor extends Actor { | |||||||
|   async onUpdateActor(update, options, actorId) { } |   async onUpdateActor(update, options, actorId) { } | ||||||
|   async onDeleteItem(item, options, id) { |   async onDeleteItem(item, options, id) { | ||||||
|     if (item.isInventaire()) { |     if (item.isInventaire()) { | ||||||
|       this._removeItemFromConteneur(item) |       await this._removeItemFromConteneur(item) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _removeItemFromConteneur(item) { |   async _removeItemFromConteneur(item) { | ||||||
|     this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) |     const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id)) | ||||||
|       .forEach(conteneur => { |       .map(conteneur => { | ||||||
|         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id); |         const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id) | ||||||
|         conteneur.update({ 'system.contenu': nouveauContenu }); |         return { _id: conteneur.id, 'system.contenu': nouveauContenu } | ||||||
|       }); |       }) | ||||||
|  |     if (updates.length > 0) { | ||||||
|  |       await this.updateEmbeddedDocuments('Item', updates) | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async onTimeChanging(oldTimestamp, newTimestamp) { |   async onTimeChanging(oldTimestamp, newTimestamp) { | ||||||
| @@ -414,7 +417,7 @@ export class RdDBaseActor extends Actor { | |||||||
|       user: achat.userId, |       user: achat.userId, | ||||||
|       speaker: { alias: (acheteur ?? vendeur).getAlias() }, |       speaker: { alias: (acheteur ?? vendeur).getAlias() }, | ||||||
|       whisper: ChatUtility.getOwners(this), |       whisper: ChatUtility.getOwners(this), | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem) |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.hbs', chatAchatItem) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     if (!achat.vente.quantiteIllimite) { |     if (!achat.vente.quantiteIllimite) { | ||||||
| @@ -731,7 +734,7 @@ export class RdDBaseActor extends Actor { | |||||||
|       name: this.getAlias(), |       name: this.getAlias(), | ||||||
|       system: { description: this.system.description } |       system: { description: this.system.description } | ||||||
|     } |     } | ||||||
|     renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.html', 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))); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -744,7 +747,7 @@ export class RdDBaseActor extends Actor { | |||||||
|   async jetDeMoral() { this.actionImpossible("jet de moral") } |   async jetDeMoral() { this.actionImpossible("jet de moral") } | ||||||
|  |  | ||||||
|   async resetItemUse() { } |   async resetItemUse() { } | ||||||
|   async incDecItemUse(itemId, inc = 1) { } |   async incDecItemUse(itemId, shouldIncrease = true) { } | ||||||
|   getItemUse(itemId) { return 0; } |   getItemUse(itemId) { return 0; } | ||||||
|  |  | ||||||
|   async finDeRound(options = { terminer: false }) { } |   async finDeRound(options = { terminer: false }) { } | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(super.defaultOptions, { |     return foundry.utils.mergeObject(super.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.hbs", | ||||||
|       width: 600, height: 720, |       width: 600, height: 720, | ||||||
|       tabs: [] |       tabs: [] | ||||||
|     }, { inplace: false }) |     }, { inplace: false }) | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ export class RdDCreatureSheet extends RdDBaseActorSangSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(RdDBaseActorSangSheet.defaultOptions, { |     return foundry.utils.mergeObject(RdDBaseActorSangSheet.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.hbs", | ||||||
|       width: 640, height: 720 |       width: 640, height: 720 | ||||||
|     }, { inplace: false }) |     }, { inplace: false }) | ||||||
|   } |   } | ||||||
| @@ -26,15 +26,15 @@ export class RdDCreatureSheet extends RdDBaseActorSangSheet { | |||||||
|     // On competence change |     // On competence change | ||||||
|     this.html.find('.creature-carac').change(async event => { |     this.html.find('.creature-carac').change(async event => { | ||||||
|       let compName = event.currentTarget.attributes.compname.value; |       let compName = event.currentTarget.attributes.compname.value; | ||||||
|       this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); |       await this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||||
|     }); |     }); | ||||||
|     this.html.find('.creature-niveau').change(async event => { |     this.html.find('.creature-niveau').change(async event => { | ||||||
|       let compName = event.currentTarget.attributes.compname.value; |       let compName = event.currentTarget.attributes.compname.value; | ||||||
|       this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value)); |       await this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value)); | ||||||
|     }); |     }); | ||||||
|     this.html.find('.creature-dommages').change(async event => { |     this.html.find('.creature-dommages').change(async event => { | ||||||
|       let compName = event.currentTarget.attributes.compname.value; |       let compName = event.currentTarget.attributes.compname.value; | ||||||
|       this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); |       await this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { |     return foundry.utils.mergeObject(RdDBaseActorReveSheet.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.hbs", | ||||||
|       width: 640, height: 720, |       width: 640, height: 720, | ||||||
|     }, { inplace: false }) |     }, { inplace: false }) | ||||||
|   } |   } | ||||||
| @@ -33,15 +33,15 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet { | |||||||
|     // On competence change |     // On competence change | ||||||
|     this.html.find('.creature-carac').change(async event => { |     this.html.find('.creature-carac').change(async event => { | ||||||
|       let compName = event.currentTarget.attributes.compname.value; |       let compName = event.currentTarget.attributes.compname.value; | ||||||
|       this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); |       await this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); | ||||||
|     }); |     }); | ||||||
|     this.html.find('.creature-dommages').change(async event => { |     this.html.find('.creature-dommages').change(async event => { | ||||||
|       let compName = event.currentTarget.attributes.compname.value; |       let compName = event.currentTarget.attributes.compname.value; | ||||||
|       this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); |       await this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     this.html.find('.resonance-add').click(async event => |     this.html.find('.resonance-add').click(async event => | ||||||
|       DialogSelect.select({ |       await DialogSelect.select({ | ||||||
|         label: "Choisir un acteur à accorder", |         label: "Choisir un acteur à accorder", | ||||||
|         list: game.actors.filter(it => it.isPersonnage() && it.prototypeToken.actorLink) |         list: game.actors.filter(it => it.isPersonnage() && it.prototypeToken.actorLink) | ||||||
|       }, |       }, | ||||||
|   | |||||||
| @@ -104,13 +104,12 @@ export class RdDActorExportSheet extends RdDActorSheet { | |||||||
|     this.html.find('.click-blessure-add').click(async event => |     this.html.find('.click-blessure-add').click(async event => | ||||||
|       await this.actor.ajouterBlessure({ |       await this.actor.ajouterBlessure({ | ||||||
|         gravite: this.html.find(event.currentTarget).data('gravite') |         gravite: this.html.find(event.currentTarget).data('gravite') | ||||||
|         // event.currentTarget.attributes['data-gravite'].value |  | ||||||
|       }) |       }) | ||||||
|     ) |     ) | ||||||
|     this.html.find('.button-export').click(async event => { |     this.html.find('.button-export').click(async event => await | ||||||
|       ExportScriptarium.INSTANCE.exportActors([this.actor], |       ExportScriptarium.INSTANCE.exportActors([this.actor], | ||||||
|         `${this.actor.uuid}-${this.actor.name}` |         `${this.actor.uuid}-${this.actor.name}` | ||||||
|       ) |       ) | ||||||
|     }) |     ) | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ export class RdDActorVehiculeSheet extends RdDBaseActorSheet { | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
|     return foundry.utils.mergeObject(RdDBaseActorSheet.defaultOptions, { |     return foundry.utils.mergeObject(RdDBaseActorSheet.defaultOptions, { | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.hbs", | ||||||
|       width: 640, height: 720, |       width: 640, height: 720, | ||||||
|     }, { inplace: false }) |     }, { inplace: false }) | ||||||
|   } |   } | ||||||
| @@ -32,18 +32,10 @@ export class RdDActorVehiculeSheet extends RdDBaseActorSheet { | |||||||
|     super.activateListeners(html); |     super.activateListeners(html); | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('.resistance-moins').click(async event => { |     this.html.find('.resistance-moins').click(async event => await this.actor.vehicleIncDec("resistance", -1)) | ||||||
|       this.actor.vehicleIncDec("resistance", -1); |     this.html.find('.resistance-plus').click(async event => await this.actor.vehicleIncDec("resistance", 1)) | ||||||
|     }); |     this.html.find('.structure-moins').click(async event => await this.actor.vehicleIncDec("structure", -1)) | ||||||
|     this.html.find('.resistance-plus').click(async event => { |     this.html.find('.structure-plus').click(async event => await this.actor.vehicleIncDec("structure", 1)) | ||||||
|       this.actor.vehicleIncDec("resistance", 1); |  | ||||||
|     }); |  | ||||||
|     this.html.find('.structure-moins').click(async event => { |  | ||||||
|       this.actor.vehicleIncDec("structure", -1); |  | ||||||
|     }); |  | ||||||
|     this.html.find('.structure-plus').click(async event => { |  | ||||||
|       this.actor.vehicleIncDec("structure", 1); |  | ||||||
|     }); |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ import { RdDUtility } from "../../rdd-utility.js"; | |||||||
| import { TextRollManager } from "./text-roll-formatter.js"; | import { TextRollManager } from "./text-roll-formatter.js"; | ||||||
|  |  | ||||||
| const REGECP_CARAC = "(?<carac>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)" | const REGECP_CARAC = "(?<carac>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)" | ||||||
| const REGEXP_COMP = "(\\/(?<competence>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+))?" | const REGEXP_COMP = "(\\/(?<competence>[A-Za-zÀ-ÖØ-öø-ÿ ]+([1-2]?[A-Za-zÀ-ÖØ-öø-ÿ ]+)?))?" | ||||||
| const REGEXP_DIFF = "(/(?<diff>[\\+\\-]?\\d+(d\\d+)?))?" | const REGEXP_DIFF = "(/(?<diff>[\\+\\-]?\\d+(d\\d+)?))?" | ||||||
| const REGEXP_ROLL_CARAC_COMP = REGECP_CARAC + REGEXP_COMP + REGEXP_DIFF | const REGEXP_ROLL_CARAC_COMP = REGECP_CARAC + REGEXP_COMP + REGEXP_DIFF | ||||||
| const XREGEXP_ROLL_CARAC_COMP = XRegExp("@roll\\[" + REGEXP_ROLL_CARAC_COMP + "\\]", 'giu') | const XREGEXP_ROLL_CARAC_COMP = XRegExp("@roll\\[" + REGEXP_ROLL_CARAC_COMP + "\\]", 'giu') | ||||||
|   | |||||||
| @@ -62,7 +62,6 @@ export class ChatUtility { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|  |  | ||||||
|   static removeMessages(socketData) { |   static removeMessages(socketData) { | ||||||
|     if (Misc.isFirstConnectedGM()) { |     if (Misc.isFirstConnectedGM()) { | ||||||
|       ChatUtility.onRemoveMessages(socketData); |       ChatUtility.onRemoveMessages(socketData); | ||||||
| @@ -97,7 +96,7 @@ export class ChatUtility { | |||||||
|         } |         } | ||||||
|         break |         break | ||||||
|       case "gmroll": |       case "gmroll": | ||||||
|         messageData.whisper = ChatUtility.getOwners(actor) |         messageData.whisper = actor ? ChatUtility.getOwners(actor) : ChatUtility.getUserAndGMs() | ||||||
|         break |         break | ||||||
|       case "selfroll": |       case "selfroll": | ||||||
|         messageData.whisper = [game.user] |         messageData.whisper = [game.user] | ||||||
| @@ -108,7 +107,7 @@ export class ChatUtility { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   static getOwners(document) { |   static getOwners(document) { | ||||||
|     return game.users.filter(it => document.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER) |     return document ? game.users.filter(it => document.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER) : [game.user] | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static getUserAndGMs() { |   static getUserAndGMs() { | ||||||
| @@ -199,7 +198,7 @@ export class ChatUtility { | |||||||
|   static async onCreateChatMessage(chatMessage, options, id) { |   static async onCreateChatMessage(chatMessage, options, id) { | ||||||
|     if (chatMessage.isAuthor) { |     if (chatMessage.isAuthor) { | ||||||
|       await chatMessage.setFlag(SYSTEM_RDD, 'rdd-timestamp', game.system.rdd.calendrier.getTimestamp()); |       await chatMessage.setFlag(SYSTEM_RDD, 'rdd-timestamp', game.system.rdd.calendrier.getTimestamp()); | ||||||
|       await chatMessage.update({ content: await RdDTextEditor.enrichHTML(chatMessage.content, undefined, {showLink:false}) }) |       await chatMessage.update({ content: await RdDTextEditor.enrichHTML(chatMessage.content, undefined, { showLink: false }) }) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ export class DialogChoixXpCarac extends Dialog { | |||||||
|     dialogData = foundry.utils.mergeObject(dialogData, { |     dialogData = foundry.utils.mergeObject(dialogData, { | ||||||
|       default: 'appliquer', |       default: 'appliquer', | ||||||
|       buttons: { |       buttons: { | ||||||
|         'appliquer': { icon:'<i class="fa-solid fa-check"></i>', label: "Ajouter la répartition", callback: it => this.appliquerSelection() } |         'appliquer': { icon: '<i class="fa-solid fa-check"></i>', label: "Ajouter la répartition", callback: it => this.appliquerSelection() } | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     super(dialogData, dialogOptions) |     super(dialogData, dialogOptions) | ||||||
| @@ -37,18 +37,13 @@ export class DialogChoixXpCarac extends Dialog { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   activateListeners(html) { |   activateListeners(html) { | ||||||
|     //TODO |  | ||||||
|     super.activateListeners(html) |     super.activateListeners(html) | ||||||
|     this.html = html |     this.html = html | ||||||
|     this.html.find("li.xpCarac-option .xpCarac-moins").click(event => |     this.html.find("li.xpCarac-option .xpCarac-moins").click(event => this.ajouterXp(event, -1)) | ||||||
|       this.ajouterXp(event, -1) |     this.html.find("li.xpCarac-option .xpCarac-plus").click(event => this.ajouterXp(event, 1)) | ||||||
|     ) |  | ||||||
|     this.html.find("li.xpCarac-option .xpCarac-plus").click(event => |  | ||||||
|       this.ajouterXp(event, 1) |  | ||||||
|     ) |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async ajouterXp(event, delta) { |   ajouterXp(event, delta) { | ||||||
|     const liCarac = this.html.find(event.currentTarget)?.parents("li.xpCarac-option") |     const liCarac = this.html.find(event.currentTarget)?.parents("li.xpCarac-option") | ||||||
|     const label = liCarac?.data("carac-label") |     const label = liCarac?.data("carac-label") | ||||||
|     const carac = this.caracs.find(c => c.label == label) |     const carac = this.caracs.find(c => c.label == label) | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ export class DialogChronologie extends Dialog { | |||||||
|       timestamp: game.system.rdd.calendrier.timestamp, |       timestamp: game.system.rdd.calendrier.timestamp, | ||||||
|       dateReel: game.system.rdd.calendrier.dateReel() |       dateReel: game.system.rdd.calendrier.dateReel() | ||||||
|     }; |     }; | ||||||
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-chronologie.html", dialogData); |     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-chronologie.hbs", dialogData); | ||||||
|     const dialog = new DialogChronologie(html, dialogData); |     const dialog = new DialogChronologie(html, dialogData); | ||||||
|     dialog.render(true); |     dialog.render(true); | ||||||
|   } |   } | ||||||
| @@ -100,7 +100,7 @@ export class DialogChronologie extends Dialog { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   async prepareChronologieEntry(journalParameters) { |   async prepareChronologieEntry(journalParameters) { | ||||||
|     return await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chronologie-entry.html", journalParameters); |     return await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chronologie-entry.hbs", journalParameters); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   extractJournalParameters() { |   extractJournalParameters() { | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ export class DialogCreateSigneDraconique extends Dialog { | |||||||
|         })) |         })) | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-create-signedraconique.html", dialogData); |     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-create-signedraconique.hbs", dialogData); | ||||||
|     new DialogCreateSigneDraconique(dialogData, html) |     new DialogCreateSigneDraconique(dialogData, html) | ||||||
|       .render(true); |       .render(true); | ||||||
|   } |   } | ||||||
| @@ -49,7 +49,7 @@ export class DialogCreateSigneDraconique extends Dialog { | |||||||
|     actor.createEmbeddedDocuments("Item", [signe]); |     actor.createEmbeddedDocuments("Item", [signe]); | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(actor), |       whisper: ChatUtility.getOwners(actor), | ||||||
|       content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", { |       content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.hbs", { | ||||||
|         signe: signe, |         signe: signe, | ||||||
|         alias: actor.getAlias() |         alias: actor.getAlias() | ||||||
|       }) |       }) | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ export class DialogFabriquerPotion extends Dialog { | |||||||
|     } |     } | ||||||
|     const potionData = DialogFabriquerPotion.prepareData(item, brinsMinimum) |     const potionData = DialogFabriquerPotion.prepareData(item, brinsMinimum) | ||||||
|     const options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 } |     const options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 } | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', potionData) |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.hbs', potionData) | ||||||
|  |  | ||||||
|     new DialogFabriquerPotion(actor, potionData, html, options).render(true) |     new DialogFabriquerPotion(actor, potionData, html, options).render(true) | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -2,13 +2,13 @@ import { Misc } from "./misc.js"; | |||||||
|  |  | ||||||
| export class DialogConsommer extends Dialog { | export class DialogConsommer extends Dialog { | ||||||
|  |  | ||||||
|   static async create(actor, item, onActionItem = async () => { }) { |   static async create(actor, item) { | ||||||
|     const consommerData = DialogConsommer.prepareData(actor, item); |     const consommerData = DialogConsommer.prepareData(actor, item); | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.html', consommerData); |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.hbs', consommerData); | ||||||
|     return new DialogConsommer(actor, item, consommerData, html, onActionItem) |     return new DialogConsommer(actor, item, consommerData, html) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   constructor(actor, item, consommerData, html, onActionItem = async () => { }) { |   constructor(actor, item, consommerData, html) { | ||||||
|     const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 }; |     const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 }; | ||||||
|     let conf = { |     let conf = { | ||||||
|       title: consommerData.title, |       title: consommerData.title, | ||||||
| @@ -16,10 +16,7 @@ export class DialogConsommer extends Dialog { | |||||||
|       default: consommerData.buttonName, |       default: consommerData.buttonName, | ||||||
|       buttons: { |       buttons: { | ||||||
|         [consommerData.buttonName]: { |         [consommerData.buttonName]: { | ||||||
|           label: consommerData.buttonName, callback: async it => { |           label: consommerData.buttonName, callback: async it => await this.onConsommer() | ||||||
|             await this.onConsommer(); |  | ||||||
|             await onActionItem(); |  | ||||||
|           } |  | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ export class DialogSelect extends Dialog { | |||||||
|   static extractIdNameImg(it) { return { id: it.id, name: it.name, img: it.img } } |   static extractIdNameImg(it) { return { id: it.id, name: it.name, img: it.img } } | ||||||
|  |  | ||||||
|   static async select(selectionData, onSelectChoice) { |   static async select(selectionData, onSelectChoice) { | ||||||
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.html", selectionData) |     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.hbs", selectionData) | ||||||
|  |  | ||||||
|     const dialogData = { |     const dialogData = { | ||||||
|       title: selectionData.title ?? selectionData.label, |       title: selectionData.title ?? selectionData.label, | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ export class DialogSplitItem extends Dialog { | |||||||
|       item: item, |       item: item, | ||||||
|       choix: { quantite: 1, max: item.system.quantite - 1 } |       choix: { quantite: 1, max: item.system.quantite - 1 } | ||||||
|     }; |     }; | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-split.html`, splitData); |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-split.hbs`, splitData); | ||||||
|     return new DialogSplitItem(item, splitData, html, callback) |     return new DialogSplitItem(item, splitData, html, callback) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ export class DialogValidationEncaissement extends Dialog { | |||||||
|  |  | ||||||
|   static async validerEncaissement(actor, rollData, armure, onEncaisser) { |   static async validerEncaissement(actor, rollData, armure, onEncaisser) { | ||||||
|     const encaissement = await RdDUtility.jetEncaissement(actor, rollData, armure, { showDice: HIDE_DICE }); |     const encaissement = await RdDUtility.jetEncaissement(actor, rollData, armure, { showDice: HIDE_DICE }); | ||||||
|     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.html', { |     const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.hbs', { | ||||||
|       actor: actor, |       actor: actor, | ||||||
|       rollData: rollData, |       rollData: rollData, | ||||||
|       encaissement: encaissement |       encaissement: encaissement | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
|  |  | ||||||
| import { ITEM_TYPES } from "./constants.js"; | import { ITEM_TYPES } from "./constants.js"; | ||||||
|  | import { Grammar } from "./grammar.js"; | ||||||
| import { RdDCombatManager } from "./rdd-combat.js"; | import { RdDCombatManager } from "./rdd-combat.js"; | ||||||
|  |  | ||||||
| export const CATEGORIES_COMPETENCES_CREATURES = { | export const CATEGORIES_COMPETENCES_CREATURES = { | ||||||
| @@ -17,9 +18,11 @@ export class RdDItemCompetenceCreature extends Item { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static setRollDataCreature(rollData) { |   static setRollDataCreature(rollData) { | ||||||
|     rollData.carac = { "carac_creature": { label: rollData.competence.name, value: rollData.competence.system.carac_value } } |     const code = Grammar.toLowerCaseNoAccentNoSpace(rollData.competence.name); | ||||||
|     rollData.competence.system.defaut_carac = "carac_creature" |     const selectedCarac = { code: code, label: rollData.competence.name, value: rollData.competence.system.carac_value }; | ||||||
|     rollData.selectedCarac = rollData.carac.carac_creature |     rollData.carac = { [code]: selectedCarac } | ||||||
|  |     rollData.competence.system.defaut_carac = code | ||||||
|  |     rollData.selectedCarac = selectedCarac | ||||||
|     rollData.arme = RdDItemCompetenceCreature.armeCreature(rollData.competence); |     rollData.arme = RdDItemCompetenceCreature.armeCreature(rollData.competence); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -159,23 +159,19 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|  |  | ||||||
|     HtmlUtility.showControlWhen(this.html.find(".item-cout"), ReglesOptionnelles.isUsing('afficher-prix-joueurs') |     HtmlUtility.showControlWhen(this.html.find(".item-cout"), ReglesOptionnelles.isUsing('afficher-prix-joueurs') | ||||||
|       || game.user.isGM |       || game.user.isGM | ||||||
|       || !this.item.isOwned); |       || !this.item.isOwned) | ||||||
|     HtmlUtility.showControlWhen(this.html.find(".item-magique"), this.item.isMagique); |     HtmlUtility.showControlWhen(this.html.find(".item-magique"), this.item.isMagique) | ||||||
|  |  | ||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return | ||||||
|  |  | ||||||
|     this.form.ondragstart = (event) => this._onDragStart(event); |     this.form.ondragstart = async event => await this._onDragStart(event) | ||||||
|     this.form.ondrop = (event) => this._onDrop(event); |     this.form.ondrop = async event => await this._onDrop(event) | ||||||
|  |  | ||||||
|     // Select competence categorie |     // Select competence categorie | ||||||
|     this.html.find(".categorie").change(event => this._onSelectCategorie(event)); |     this.html.find(".categorie").change(async event => await this._onSelectCategorie(event)) | ||||||
|  |  | ||||||
|     this.html.find('.sheet-competence-xp').change((event) => { |     this.html.find('.sheet-competence-xp').change(event => RdDUtility.checkThanatosXP(this.item)) | ||||||
|       if (this.item.isCompetencePersonnage()) { |  | ||||||
|         RdDUtility.checkThanatosXP(this.item.name); |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
|     this.html.find(".item-cout input[name='system.cout']").change(event => { |     this.html.find(".item-cout input[name='system.cout']").change(event => { | ||||||
|       if (this.item.isMonnaie()) { |       if (this.item.isMonnaie()) { | ||||||
|         const value = event.currentTarget.value; |         const value = event.currentTarget.value; | ||||||
| @@ -184,42 +180,41 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     this.html.find('.delete-bonus-case').click((event) => { |     this.html.find('.delete-bonus-case').click(async event => await this.supprimerBonusCase(event.currentTarget.attributes['data-deleteCoord'].value)) | ||||||
|       this.supprimerBonusCase(event.currentTarget.attributes['data-deleteCoord'].value) |     this.html.find('.creer-tache-livre').click(async event => await this._getEventActor(event).creerTacheDepuisLivre(this.item)) | ||||||
|     }) |     this.html.find('.creer-potion-base').click(async event => await this._getEventActor(event).fabriquerDecoctionHerbe(this.item)) | ||||||
|  |     this.html.find('input[name="system.cacher_points_de_tache"]').change(async event => | ||||||
|     this.html.find('.creer-tache-livre').click((event) => this._getEventActor(event).creerTacheDepuisLivre(this.item)); |       await this.item.update({ 'system.cacher_points_de_tache': event.currentTarget.checked }) | ||||||
|     this.html.find('.creer-potion-base').click((event) => this._getEventActor(event).fabriquerDecoctionHerbe(this.item)) |     ) | ||||||
|     this.html.find('input[name="system.cacher_points_de_tache"]').change(async event => await this.item.update({ 'system.cacher_points_de_tache': event.currentTarget.checked })); |  | ||||||
|  |  | ||||||
|     this.html.find('.roll-text').click(async event => await RdDTextEditor.rollText(event, this.actor)) |     this.html.find('.roll-text').click(async event => await RdDTextEditor.rollText(event, this.actor)) | ||||||
|     this.html.find('.chat-roll-text').click(async event => await RdDTextEditor.chatRollText(event)) |     this.html.find('.chat-roll-text').click(async event => await RdDTextEditor.chatRollText(event)) | ||||||
|  |  | ||||||
|     if (this.actor) { |     if (this.actor) { | ||||||
|       this.html.find('.actionItem').click(event => ItemAction.onActionItem(event, this.actor, this.options)) |       this.html.find('.actionItem').click(async event => await ItemAction.onActionItem(event, this.actor, this.options)) | ||||||
|  |  | ||||||
|       // TODO: utiliser un itemAction? |       // TODO: utiliser un itemAction? | ||||||
|       this.html.find('.item-potion-consommer').click(event => this.itemActionConsommer(event)) |       this.html.find('.item-potion-consommer').click(async event => await this.itemActionConsommer(event)) | ||||||
|  |  | ||||||
|       this.html.find('.item-quantite-plus').click(async event => { |       this.html.find('.item-quantite-plus').click(async event => { | ||||||
|         await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), 1) |         await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), 1) | ||||||
|         this.render() |         //this.render() | ||||||
|       }) |       }) | ||||||
|       this.html.find('.item-quantite-moins').click(async event => { |       this.html.find('.item-quantite-moins').click(async event => { | ||||||
|         await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), -1) |         await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), -1) | ||||||
|         this.render() |         //this.render() | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const updateItemTimestamp = (path, timestamp) => this.item.update({ [path]: foundry.utils.duplicate(timestamp) }) |     const updateItemTimestamp = (path, timestamp) => this.item.update({ [path]: foundry.utils.duplicate(timestamp) }) | ||||||
|  |  | ||||||
|     RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.debut', updateItemTimestamp); |     RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.debut', updateItemTimestamp) | ||||||
|     RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.fin', updateItemTimestamp); |     RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.fin', updateItemTimestamp) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   itemActionDelete(event) { |   async itemActionDelete(event) { | ||||||
|     const item = RdDSheetUtility.getItem(event, this.actor) |     const item = RdDSheetUtility.getItem(event, this.actor) | ||||||
|     return RdDUtility.confirmActorItemDelete(item, this.actor) |     return await RdDUtility.confirmActorItemDelete(item, this.actor) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async itemActionConsommer(event) { |   async itemActionConsommer(event) { | ||||||
| @@ -238,12 +233,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _getEventActor(event) { |   _getEventActor(event) { return game.actors.get(event.currentTarget.attributes['data-actor-id'].value) } | ||||||
|     let actorId = event.currentTarget.attributes['data-actor-id'].value; |  | ||||||
|     let actor = game.actors.get(actorId); |  | ||||||
|     return actor; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onSelectCategorie(event) { |   async _onSelectCategorie(event) { | ||||||
| @@ -285,7 +275,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|         break |         break | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return this.item.update(formData); |     return this.item.update(formData) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -318,8 +308,9 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onDragStart(event) { |   async _onDragStart(event) { } | ||||||
|   } |   async _onDropItem(event, dragData) { } | ||||||
|  |   async _onDropActor(event, dragData) { } | ||||||
|  |  | ||||||
|   async _onDrop(event) { |   async _onDrop(event) { | ||||||
|     // Try to extract the dragData |     // Try to extract the dragData | ||||||
| @@ -345,13 +336,7 @@ export class RdDItemSheet extends ItemSheet { | |||||||
|         return JSON.parse(eventData); |         return JSON.parse(eventData); | ||||||
|       } |       } | ||||||
|     } catch (err) { } |     } catch (err) { } | ||||||
|     return undefined; |     return undefined | ||||||
|   } |  | ||||||
|  |  | ||||||
|   async _onDropItem(event, dragData) { |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   async _onDropActor(event, dragData) { |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -591,7 +591,7 @@ export class RdDItem extends Item { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   getChatItemTemplate() { |   getChatItemTemplate() { | ||||||
|     return 'systems/foundryvtt-reve-de-dragon/templates/post-item.html'; |     return 'systems/foundryvtt-reve-de-dragon/templates/post-item.hbs'; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static propertyIfDefined(name, val, condition = true) { |   static propertyIfDefined(name, val, condition = true) { | ||||||
|   | |||||||
| @@ -135,12 +135,12 @@ export class ItemAction { | |||||||
|     return undefined |     return undefined | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static onActionItem(event, actor, options) { |   static async onActionItem(event, actor, options) { | ||||||
|     const item = RdDSheetUtility.getItem(event, actor) |     const item = RdDSheetUtility.getItem(event, actor) | ||||||
|     const code = $(event.currentTarget).data('code') |     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 && (!action.optionsFilter || action.optionsFilter(options))) { |     if (action && (!action.optionsFilter || action.optionsFilter(options))) { | ||||||
|       action.action(item, actor) |       await action.action(item, actor) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,11 +19,13 @@ export class RdDItemRace extends RdDItem { | |||||||
|         return false |         return false | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     if (code == LIST_CARAC_PERSONNAGE.taille.code) { | ||||||
|       const carac = RdDCarac.carac(code) |       const carac = RdDCarac.carac(code) | ||||||
|       if (race.isMax(actor, code, value - 1)) { |       if (race.isMax(actor, code, value - 1)) { | ||||||
|         ui.notifications.warn(`${value} est supérieure au maximum de ${carac.label}`) |         ui.notifications.warn(`${value} est supérieure au maximum de ${carac.label}`) | ||||||
|         return false |         return false | ||||||
|       } |       } | ||||||
|  |     } | ||||||
|     return true |     return true | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -59,7 +61,8 @@ export class RdDItemRace extends RdDItem { | |||||||
|     if (code == LIST_CARAC_PERSONNAGE.force.code) { |     if (code == LIST_CARAC_PERSONNAGE.force.code) { | ||||||
|       return value >= this.getForceMax(actor) |       return value >= this.getForceMax(actor) | ||||||
|     } |     } | ||||||
|     const max = foundry.utils.getProperty(this, path) ?? -1 |     const pathMax = path.replace(".value", ".max"); | ||||||
|  |     const max = foundry.utils.getProperty(this, pathMax) ?? -1 | ||||||
|     return (max > 0 && value >= max) |     return (max > 0 && value >= max) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,9 +4,9 @@ const RARETE_FREQUENTE = { code: 'Frequente', label: 'Fréquente', frequence: 18 | |||||||
| const RARETE_RARE = { code: 'Rare', label: 'Rare', frequence: 6, min: 3, max: 12 }; | const RARETE_RARE = { code: 'Rare', label: 'Rare', frequence: 6, min: 3, max: 12 }; | ||||||
| const RARETE_RARISSIME = { code: 'Rarissime', label: 'Rarissime', frequence: 2, min: 1, max: 4 }; | const RARETE_RARISSIME = { code: 'Rarissime', label: 'Rarissime', frequence: 2, min: 1, max: 4 }; | ||||||
| const RARETE_INEXISTANT = { code: 'Inexistant', label: 'Inexistant', frequence: 0, min: 0, max: 0 }; | const RARETE_INEXISTANT = { code: 'Inexistant', label: 'Inexistant', frequence: 0, min: 0, max: 0 }; | ||||||
| const RARETE_EGALE = { code: 'eqal', label: 'Egal', frequence: 1, min: 1, max: 1 }; | const RARETE_EGALE = { code: 'egal', label: 'Egal', frequence: 1, min: 1, max: 1 }; | ||||||
|  |  | ||||||
| const RARETES = [ | export const RARETES = [ | ||||||
|   RARETE_COMMUNE, |   RARETE_COMMUNE, | ||||||
|   RARETE_FREQUENTE, |   RARETE_FREQUENTE, | ||||||
|   RARETE_RARE, |   RARETE_RARE, | ||||||
|   | |||||||
| @@ -34,8 +34,8 @@ export class RdDItemInventaireSheet extends RdDItemSheet { | |||||||
|     HtmlUtility.showControlWhen(this.html.find("div.description-milieu"), TYPE_ITEMS_NATURELS.includes(this.item.type)); |     HtmlUtility.showControlWhen(this.html.find("div.description-milieu"), TYPE_ITEMS_NATURELS.includes(this.item.type)); | ||||||
|  |  | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|     this.html.find("a.preparer-nourriture").click(event => this.preparerNourriture(event)); |     this.html.find("a.preparer-nourriture").click(async event => await this.preparerNourriture(event)); | ||||||
|     this.html.find("a.manger-nourriture").click(event => this.mangerNourriture(event)); |     this.html.find("a.manger-nourriture").click(async event => await this.mangerNourriture(event)); | ||||||
|  |  | ||||||
|     this.html.find("input.input-selection-milieu").keypress(event => { |     this.html.find("input.input-selection-milieu").keypress(event => { | ||||||
|       if (event.keyCode == '13') { |       if (event.keyCode == '13') { | ||||||
| @@ -43,11 +43,11 @@ export class RdDItemInventaireSheet extends RdDItemSheet { | |||||||
|       } |       } | ||||||
|       event.stopPropagation(); |       event.stopPropagation(); | ||||||
|     }) |     }) | ||||||
|     this.html.find("a.milieu-add").click(event => this.onAddMilieu(event)); |     this.html.find("a.milieu-add").click(async event => await this.onAddMilieu(event)); | ||||||
|     this.html.find("div.environnement-milieu a.milieu-delete").click(event => this.onDeleteMilieu(event)); |     this.html.find("div.environnement-milieu a.milieu-delete").click(async event => await this.onDeleteMilieu(event)); | ||||||
|     this.html.find("div.environnement-milieu select.environnement-rarete").change(event => this.onChange(event, |     this.html.find("div.environnement-milieu select.environnement-rarete").change(async event => await this.onChange(event, | ||||||
|       updated => this.$changeRarete(event, updated))); |       updated => this.$changeRarete(event, updated))); | ||||||
|     this.html.find("div.environnement-milieu input[name='environnement-frequence']").change(event => this.onChange(event, |     this.html.find("div.environnement-milieu input[name='environnement-frequence']").change(async event => await this.onChange(event, | ||||||
|       updated => this.$changeFrequence(event, updated))); |       updated => this.$changeFrequence(event, updated))); | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,15 +15,15 @@ export class RdDBlessureItemSheet extends RdDItemSheet { | |||||||
|  |  | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     this.html.find('[name="premierssoins-done"]').change(async event => { |     this.html.find('[name="premierssoins-done"]').change(async event => | ||||||
|       await this.item.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }); |       await this.item.setSoinsBlessure({ premierssoins: { done: event.currentTarget.checked } }) | ||||||
|     }); |     ) | ||||||
|     this.html.find('[name="soinscomplets-done"]').change(async event => { |     this.html.find('[name="soinscomplets-done"]').change(async event => | ||||||
|       await this.item.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) |       await this.item.setSoinsBlessure({ soinscomplets: { done: event.currentTarget.checked } }) | ||||||
|     }); |     ) | ||||||
|     this.html.find('[name="system-gravite"]').change(async event => { |     this.html.find('[name="system-gravite"]').change(async event => { | ||||||
|       const gravite = Number(event.currentTarget.value) |       const gravite = Number(event.currentTarget.value) | ||||||
|       await this.item.setSoinsBlessure({ gravite: gravite, difficulte: - gravite }) |       await this.item.setSoinsBlessure({ gravite: gravite, difficulte: - gravite }) | ||||||
|     }); |     }) | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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(event => this.onDeleteLinkedActor()); |     html.find("a.linked-actor-delete").click(async event => await this.onDeleteLinkedActor()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async _onDropActor(event, dragData) { |   async _onDropActor(event, dragData) { | ||||||
|   | |||||||
| @@ -44,8 +44,8 @@ export class RdDRencontreItemSheet extends RdDItemSheet { | |||||||
|   activateListeners(html) { |   activateListeners(html) { | ||||||
|     super.activateListeners(html); |     super.activateListeners(html); | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|     this.html.find("a.effet-add").click(event => this.onAddEffet(event)); |     this.html.find("a.effet-add").click(async event => await this.onAddEffet(event)); | ||||||
|     this.html.find("a.effet-delete").click(event => this.onDeleteEffet(event)); |     this.html.find("a.effet-delete").click(async event => await this.onDeleteEffet(event)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async onAddEffet(event) { |   async onAddEffet(event) { | ||||||
|   | |||||||
| @@ -36,9 +36,9 @@ export class RdDSigneDraconiqueItemSheet extends RdDItemSheet { | |||||||
|  |  | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|  |  | ||||||
|     html.find(".signe-aleatoire").click(event => this.setSigneAleatoire()); |     html.find(".signe-aleatoire").click(async event => await this.setSigneAleatoire()); | ||||||
|     html.find("input.select-tmr").change(event => this.onSelectTmr(event)); |     html.find("input.select-tmr").change(async event => await this.onSelectTmr(event)); | ||||||
|     html.find(".signe-xp-sort").change(event => 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() { | ||||||
|   | |||||||
| @@ -614,7 +614,7 @@ class _12_0_37_MigrationAlchimieEtat extends Migration { | |||||||
|     return ['Alchimie', 'Repos', 'Soin', 'Autre'].includes(categorie) ? 'Liquide' : 'Autre' |     return ['Alchimie', 'Repos', 'Soin', 'Autre'].includes(categorie) ? 'Liquide' : 'Autre' | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async migratePotion(potion) { |   migratePotion(potion) { | ||||||
|     const newCategorie = this.mappingCategorie(potion.system.categorie) |     const newCategorie = this.mappingCategorie(potion.system.categorie) | ||||||
|     return { |     return { | ||||||
|       _id: potion.id, |       _id: potion.id, | ||||||
| @@ -625,6 +625,19 @@ class _12_0_37_MigrationAlchimieEtat extends Migration { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | class _12_0_38_TachesEcriture extends Migration { | ||||||
|  |   get code() { return "migration-tache-ecriture" } | ||||||
|  |   get version() { return "12.0.38" } | ||||||
|  |  | ||||||
|  |   async migrate() { | ||||||
|  |     await this.applyItemsUpdates(items => items | ||||||
|  |       .filter(it => [ITEM_TYPES.tache, ITEM_TYPES.livre, ITEM_TYPES.oeuvre, ITEM_TYPES.meditation].includes(it.type) ) | ||||||
|  |       .filter(it => it.system.competence == 'Ecriture') | ||||||
|  |       .map(it => { return { _id: it.id, 'system.competence': 'Écriture' } }) | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| export class Migrations { | export class Migrations { | ||||||
|   static getMigrations() { |   static getMigrations() { | ||||||
|     return [ |     return [ | ||||||
| @@ -647,6 +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() | ||||||
|     ]; |     ]; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -238,7 +238,7 @@ export class Misc { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static findFirstLike(value, elements, options = {}) { |   static findFirstLike(value, elements, options = {}) { | ||||||
|     options = foundry.utils.mergeObject(DEFAULT_FIND_OPTIONS, options, { overwrite: true, inplace: false }); |     options = foundry.utils.mergeObject(DEFAULT_FIND_OPTIONS, options, { overwrite: true, inplace: false }); | ||||||
|     const subset = this.findAllLike(value, elements, options); |     const subset = this.findAllLike(value, elements, options) | ||||||
|     if (subset.length == 0) { |     if (subset.length == 0) { | ||||||
|       console.log(`Aucune ${options.description} pour ${value}`); |       console.log(`Aucune ${options.description} pour ${value}`); | ||||||
|       return undefined |       return undefined | ||||||
| @@ -263,7 +263,8 @@ export class Misc { | |||||||
|     } |     } | ||||||
|     value = Grammar.toLowerCaseNoAccent(value); |     value = Grammar.toLowerCaseNoAccent(value); | ||||||
|     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))) | ||||||
|     if (subset.length == 0) { |     if (subset.length == 0) { | ||||||
|       options.onMessage(`Pas de ${options.description} correspondant à ${value}`); |       options.onMessage(`Pas de ${options.description} correspondant à ${value}`); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -75,12 +75,12 @@ const LIST_CARAC_ROLL = Object.values(LIST_CARAC_PERSONNAGE).filter(it => it.isC | |||||||
|  |  | ||||||
| export class RdDCarac { | export class RdDCarac { | ||||||
|  |  | ||||||
|   static caracDetails(name) { |   static caracDetails(name, options = { onMessage: undefined }) { | ||||||
|     let entry = Misc.findFirstLike(name, LIST_CARAC_ROLL, { mapper: it => it.code, description: 'caractéristique', onMessage: m => { } }) |     let entry = Misc.findFirstLike(name, LIST_CARAC_ROLL, { mapper: it => it.code, description: 'caractéristique', onMessage: m => { } }) | ||||||
|     if (entry) { |     if (entry) { | ||||||
|       return entry |       return entry | ||||||
|     } |     } | ||||||
|     return Misc.findFirstLike(name, LIST_CARAC_ROLL, { mapper: it => it.label, description: 'caractéristique' }) |     return Misc.findFirstLike(name, LIST_CARAC_ROLL, { mapper: it => it.label, description: 'caractéristique', onMessage: options.onMessage }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static carac(code) { |   static carac(code) { | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; | |||||||
| import { STATUSES } from "./settings/status-effects.js"; | import { STATUSES } from "./settings/status-effects.js"; | ||||||
| import { Targets } from "./targets.js"; | import { Targets } from "./targets.js"; | ||||||
| import { RdDEmpoignade } from "./rdd-empoignade.js"; | import { RdDEmpoignade } from "./rdd-empoignade.js"; | ||||||
|  | import { RdDRollResult } from "./rdd-roll-result.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| const premierRoundInit = [ | const premierRoundInit = [ | ||||||
| @@ -361,7 +362,7 @@ export class RdDCombatManager extends Combat { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static listActionsActorCombatant( actor) { |   static listActionsActorCombatant(actor) { | ||||||
|     const possessions = actor.listActionsPossessions() |     const possessions = actor.listActionsPossessions() | ||||||
|     const actions = possessions.length > 0 |     const actions = possessions.length > 0 | ||||||
|       ? possessions |       ? possessions | ||||||
| @@ -667,7 +668,7 @@ export class RdDCombat { | |||||||
|         const activite = this._ajustementMouvement(this.defender) |         const activite = this._ajustementMouvement(this.defender) | ||||||
|         const total = [portee, taille, activite].map(it => it.diff).filter(d => !Number.isNaN(d)).reduce(Misc.sum(), 0) |         const total = [portee, taille, activite].map(it => it.diff).filter(d => !Number.isNaN(d)).reduce(Misc.sum(), 0) | ||||||
|         ChatMessage.create({ |         ChatMessage.create({ | ||||||
|           content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-info-distance.html', { |           content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-info-distance.hbs', { | ||||||
|             rollData: rollData, |             rollData: rollData, | ||||||
|             attacker: _token, |             attacker: _token, | ||||||
|             isVisible: isVisible, |             isVisible: isVisible, | ||||||
| @@ -734,7 +735,7 @@ export class RdDCombat { | |||||||
|     await this.proposerAjustementTirLancer(rollData) |     await this.proposerAjustementTirLancer(rollData) | ||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this.attacker, rollData, |     const dialog = await RdDRoll.create(this.attacker, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-attaque', |         name: 'jet-attaque', | ||||||
|         label: 'Attaque: ' + (arme?.name ?? competence.name), |         label: 'Attaque: ' + (arme?.name ?? competence.name), | ||||||
| @@ -742,11 +743,8 @@ export class RdDCombat { | |||||||
|           this.attacker.createCallbackExperience(), |           this.attacker.createCallbackExperience(), | ||||||
|           this.attacker.createCallbackAppelAuMoral(), |           this.attacker.createCallbackAppelAuMoral(), | ||||||
|           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, |           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, | ||||||
|           { condition: r => arme && !RdDCombat.isParticuliere(r), action: r => this.attacker.incDecItemUse(arme._id) }, |           { action: async r => await this.attacker.incDecItemUse(arme._id, arme && !RdDCombat.isParticuliere(r)) }, | ||||||
|           { condition: r => (RdDCombat.isReussite(r) && !RdDCombat.isParticuliere(r)), action: r => this._onAttaqueNormale(r) }, |           { action: r => this._onAttaque(r) }, | ||||||
|           { condition: RdDCombat.isParticuliere, action: r => this._onAttaqueParticuliere(r) }, |  | ||||||
|           { condition: RdDCombat.isEchec, action: r => this._onAttaqueEchec(r) }, |  | ||||||
|           { condition: RdDCombat.isEchecTotal, action: r => this._onAttaqueEchecTotal(r) }, |  | ||||||
|         ] |         ] | ||||||
|       }); |       }); | ||||||
|     dialog.render(true); |     dialog.render(true); | ||||||
| @@ -782,9 +780,23 @@ export class RdDCombat { | |||||||
|     return rollData; |     return rollData; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   async _onAttaque(attackerRoll) { | ||||||
|  |     if (RdDCombat.isParticuliere(attackerRoll)) { | ||||||
|  |       return await this._onAttaqueParticuliere(attackerRoll) | ||||||
|  |     } | ||||||
|  |     if (RdDCombat.isReussite(attackerRoll)) { | ||||||
|  |       return await this._onAttaqueNormale(attackerRoll) | ||||||
|  |     } | ||||||
|  |     // if (RdDCombat.isParticuliere(attackerRoll) && attackerRoll.particuliere == undefined) { | ||||||
|  |     //   return | ||||||
|  |     // } | ||||||
|  |     if (RdDCombat.isEchecTotal(attackerRoll)) { | ||||||
|  |       return await this._onAttaqueEchecTotal(attackerRoll) | ||||||
|  |     } | ||||||
|  |     return await this._onAttaqueEchec(attackerRoll) | ||||||
|  |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onAttaqueParticuliere(rollData) { |   async _onAttaqueParticuliere(rollData) { | ||||||
|  |  | ||||||
|     const isMeleeDiffNegative = (rollData.competence.type == 'competencecreature' || rollData.selectedCarac.label == "Mêlée") && rollData.diffLibre < 0; |     const isMeleeDiffNegative = (rollData.competence.type == 'competencecreature' || rollData.selectedCarac.label == "Mêlée") && rollData.diffLibre < 0; | ||||||
|     // force toujours, sauf empoignade |     // force toujours, sauf empoignade | ||||||
|     // finesse seulement en mélée, pour l'empoignade, ou si la difficulté libre est de -1 minimum |     // finesse seulement en mélée, pour l'empoignade, ou si la difficulté libre est de -1 minimum | ||||||
| @@ -806,7 +818,7 @@ export class RdDCombat { | |||||||
|     const choixParticuliere = await ChatMessage.create({ |     const choixParticuliere = await ChatMessage.create({ | ||||||
|       alias: this.attacker.getAlias(), |       alias: this.attacker.getAlias(), | ||||||
|       whisper: ChatUtility.getOwners(this.attacker), |       whisper: ChatUtility.getOwners(this.attacker), | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', { |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.hbs', { | ||||||
|         alias: this.attacker.getAlias(), |         alias: this.attacker.getAlias(), | ||||||
|         attackerId: this.attackerId, |         attackerId: this.attackerId, | ||||||
|         attackerToken: this.attackerToken, |         attackerToken: this.attackerToken, | ||||||
| @@ -830,13 +842,13 @@ export class RdDCombat { | |||||||
|       cible: this.defender?.getAlias() ?? 'la cible', |       cible: this.defender?.getAlias() ?? 'la cible', | ||||||
|       isRecul: (attackerRoll.particuliere == 'force' || attackerRoll.tactique == 'charge') |       isRecul: (attackerRoll.particuliere == 'force' || attackerRoll.tactique == 'charge') | ||||||
|     } |     } | ||||||
|     await RdDResolutionTable.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.html'); |     await RdDRollResult.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.hbs'); | ||||||
|  |  | ||||||
|     if (!await this.attacker.accorder(this.defender, 'avant-defense')) { |     if (!await this.attacker.accorder(this.defender, 'avant-defense')) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (this.target) { |     if (this.defender) { | ||||||
|       await this._sendMessageDefense(attackerRoll, defenderRoll); |       await this._sendMessageDefense(attackerRoll, defenderRoll); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -895,7 +907,7 @@ export class RdDCombat { | |||||||
|       speaker: ChatMessage.getSpeaker(this.defender, canvas.tokens.get(this.defenderTokenId)), |       speaker: ChatMessage.getSpeaker(this.defender, canvas.tokens.get(this.defenderTokenId)), | ||||||
|       alias: this.attacker?.getAlias(), |       alias: this.attacker?.getAlias(), | ||||||
|       whisper: ChatUtility.getOwners(this.defender), |       whisper: ChatUtility.getOwners(this.defender), | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html', paramDemandeDefense), |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.hbs', paramDemandeDefense), | ||||||
|     }); |     }); | ||||||
|     // flag pour garder les jets d'attaque/defense |     // flag pour garder les jets d'attaque/defense | ||||||
|     ChatUtility.setMessageData(choixDefense, 'defender-roll', defenderRoll); |     ChatUtility.setMessageData(choixDefense, 'defender-roll', defenderRoll); | ||||||
| @@ -940,7 +952,7 @@ export class RdDCombat { | |||||||
|   async _onAttaqueEchecTotal(attackerRoll) { |   async _onAttaqueEchecTotal(attackerRoll) { | ||||||
|     const choixEchecTotal = await ChatMessage.create({ |     const choixEchecTotal = await ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this.attacker), |       whisper: ChatUtility.getOwners(this.attacker), | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.html', { |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-etotal.hbs', { | ||||||
|         attackerId: this.attackerId, |         attackerId: this.attackerId, | ||||||
|         attacker: this.attacker, |         attacker: this.attacker, | ||||||
|         attackerToken: this.attackerToken, |         attackerToken: this.attackerToken, | ||||||
| @@ -964,22 +976,20 @@ export class RdDCombat { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onAttaqueEchec(rollData) { |   async _onAttaqueEchec(attackerRoll) { | ||||||
|     console.log("RdDCombat.onAttaqueEchec >>>", rollData); |     console.log("RdDCombat.onAttaqueEchec >>>", attackerRoll); | ||||||
|     await RdDResolutionTable.displayRollData(rollData, this.attacker, 'chat-resultat-attaque.html'); |     await RdDRollResult.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async choixParticuliere(rollData, choix) { |   async choixParticuliere(rollData, choix) { | ||||||
|     console.log("RdDCombat.choixParticuliere >>>", rollData, choix); |     console.log("RdDCombat.choixParticuliere >>>", rollData, choix); | ||||||
|  |  | ||||||
|     if (choix != "rapidite") { |     await this.attacker.incDecItemUse(rollData.arme.id, choix != "rapidite") | ||||||
|       this.attacker.incDecItemUse(rollData.arme.id); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     this.removeChatMessageActionsPasseArme(rollData.passeArme); |     this.removeChatMessageActionsPasseArme(rollData.passeArme); | ||||||
|     rollData.particuliere = choix; |     rollData.particuliere = choix; | ||||||
|     await this._onAttaqueNormale(rollData); |     await this._onAttaqueNormale(rollData) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -995,7 +1005,7 @@ export class RdDCombat { | |||||||
|     let rollData = this._prepareParade(attackerRoll, arme, competence); |     let rollData = this._prepareParade(attackerRoll, arme, competence); | ||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this.defender, rollData, |     const dialog = await RdDRoll.create(this.defender, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-parade', |         name: 'jet-parade', | ||||||
|         label: 'Parade: ' + (arme ? arme.name : rollData.competence.name), |         label: 'Parade: ' + (arme ? arme.name : rollData.competence.name), | ||||||
| @@ -1003,10 +1013,8 @@ export class RdDCombat { | |||||||
|           this.defender.createCallbackExperience(), |           this.defender.createCallbackExperience(), | ||||||
|           this.defender.createCallbackAppelAuMoral(), |           this.defender.createCallbackAppelAuMoral(), | ||||||
|           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, |           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, | ||||||
|           { condition: r => !RdDCombat.isParticuliere(r), action: r => this.defender.incDecItemUse(armeParadeId) }, |           { action: async r => await this.defender.incDecItemUse(armeParadeId, !RdDCombat.isParticuliere(r)) }, | ||||||
|           { condition: RdDCombat.isReussite, action: r => this._onParadeNormale(r) }, |           { action: r => this._onParade(r) }, | ||||||
|           { condition: RdDCombat.isParticuliere, action: r => this._onParadeParticuliere(r) }, |  | ||||||
|           { condition: RdDCombat.isEchec, action: r => this._onParadeEchec(r) }, |  | ||||||
|         ] |         ] | ||||||
|       }); |       }); | ||||||
|     dialog.render(true); |     dialog.render(true); | ||||||
| @@ -1037,8 +1045,19 @@ export class RdDCombat { | |||||||
|     return defenderRoll; |     return defenderRoll; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   async _onParade(defenderRoll) { | ||||||
|  |     if (RdDCombat.isParticuliere(defenderRoll)) { | ||||||
|  |       return await this._onParadeParticuliere(defenderRoll) | ||||||
|  |     } | ||||||
|  |     if (RdDCombat.isReussite(defenderRoll)) { | ||||||
|  |       return await this._onParadeNormale(defenderRoll) | ||||||
|  |     } | ||||||
|  |     await this._onParadeEchec(defenderRoll) | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   _onParadeParticuliere(defenderRoll) { |   async _onParadeParticuliere(defenderRoll) { | ||||||
|     console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll); |     console.log("RdDCombat._onParadeParticuliere >>>", defenderRoll); | ||||||
|     if (!defenderRoll.attackerRoll.isPart) { |     if (!defenderRoll.attackerRoll.isPart) { | ||||||
|       // TODO: attaquant doit jouer résistance et peut être désarmé p132 |       // TODO: attaquant doit jouer résistance et peut être désarmé p132 | ||||||
| @@ -1047,14 +1066,13 @@ export class RdDCombat { | |||||||
|         this.defender) |         this.defender) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onParadeNormale(defenderRoll) { |   async _onParadeNormale(defenderRoll) { | ||||||
|     console.log("RdDCombat._onParadeNormale >>>", defenderRoll); |     console.log("RdDCombat._onParadeNormale >>>", defenderRoll); | ||||||
|  |  | ||||||
|     await this.computeRecul(defenderRoll); |     await this.computeRecul(defenderRoll); | ||||||
|     await this.computeDeteriorationArme(defenderRoll); |     await this.computeDeteriorationArme(defenderRoll); | ||||||
|     await RdDResolutionTable.displayRollData(defenderRoll, this.defender, 'chat-resultat-parade.html'); |     await RdDRollResult.displayRollData(defenderRoll, this.defender, 'chat-resultat-parade.hbs'); | ||||||
|     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); |     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1062,7 +1080,7 @@ export class RdDCombat { | |||||||
|   async _onParadeEchec(defenderRoll) { |   async _onParadeEchec(defenderRoll) { | ||||||
|     console.log("RdDCombat._onParadeEchec >>>", defenderRoll); |     console.log("RdDCombat._onParadeEchec >>>", defenderRoll); | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(defenderRoll, this.defender, 'chat-resultat-parade.html'); |     await RdDRollResult.displayRollData(defenderRoll, this.defender, 'chat-resultat-parade.hbs'); | ||||||
|  |  | ||||||
|     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); |     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); | ||||||
|     this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true }); |     this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true }); | ||||||
| @@ -1079,18 +1097,16 @@ export class RdDCombat { | |||||||
|     let rollData = this._prepareEsquive(attackerRoll, esquive); |     let rollData = this._prepareEsquive(attackerRoll, esquive); | ||||||
|  |  | ||||||
|     const dialog = await RdDRoll.create(this.defender, rollData, |     const dialog = await RdDRoll.create(this.defender, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-esquive', |         name: 'jet-esquive', | ||||||
|         label: 'Esquiver', |         label: 'Esquiver', | ||||||
|         callbacks: [ |         callbacks: [ | ||||||
|           this.defender.createCallbackExperience(), |           this.defender.createCallbackExperience(), | ||||||
|           this.defender.createCallbackAppelAuMoral(), |           this.defender.createCallbackAppelAuMoral(), | ||||||
|           { condition: r => !RdDCombat.isParticuliere(r), action: r => this.defender.incDecItemUse(esquive._id) }, |           { action: async r => await this.defender.incDecItemUse(esquive._id, !RdDCombat.isParticuliere(r)) }, | ||||||
|           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, |           { action: r => this.removeChatMessageActionsPasseArme(r.passeArme) }, | ||||||
|           { condition: RdDCombat.isReussite, action: r => this._onEsquiveNormale(r) }, |           { action: r => this._onEsquive(r) }, | ||||||
|           { condition: RdDCombat.isParticuliere, action: r => this._onEsquiveParticuliere(r) }, |  | ||||||
|           { condition: RdDCombat.isEchec, action: r => this._onEsquiveEchec(r) }, |  | ||||||
|         ] |         ] | ||||||
|       }); |       }); | ||||||
|     dialog.render(true); |     dialog.render(true); | ||||||
| @@ -1118,9 +1134,18 @@ export class RdDCombat { | |||||||
|     return rollData; |     return rollData; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   async _onEsquive(defenderRoll) { | ||||||
|  |     if (RdDCombat.isParticuliere(defenderRoll)) { | ||||||
|  |       return await this._onEsquiveParticuliere(defenderRoll) | ||||||
|  |     } | ||||||
|  |     if (RdDCombat.isReussite(defenderRoll)) { | ||||||
|  |       return await this._onEsquiveNormale(defenderRoll) | ||||||
|  |     } | ||||||
|  |     return await this._onEsquiveEchec(defenderRoll) | ||||||
|  |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   _onEsquiveParticuliere(rollData) { |   async _onEsquiveParticuliere(defenderRoll) { | ||||||
|     console.log("RdDCombat._onEsquiveParticuliere >>>", rollData); |     console.log("RdDCombat._onEsquiveParticuliere >>>", defenderRoll); | ||||||
|     ChatUtility.createChatWithRollMode( |     ChatUtility.createChatWithRollMode( | ||||||
|       { content: "<strong>Vous pouvez esquiver une deuxième fois!</strong>" }, |       { content: "<strong>Vous pouvez esquiver une deuxième fois!</strong>" }, | ||||||
|       this.defender); |       this.defender); | ||||||
| @@ -1129,7 +1154,7 @@ export class RdDCombat { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _onEsquiveNormale(defenderRoll) { |   async _onEsquiveNormale(defenderRoll) { | ||||||
|     console.log("RdDCombat._onEsquiveNormal >>>", defenderRoll); |     console.log("RdDCombat._onEsquiveNormal >>>", defenderRoll); | ||||||
|     await RdDResolutionTable.displayRollData(defenderRoll, this.defender, 'chat-resultat-esquive.html'); |     await RdDRollResult.displayRollData(defenderRoll, this.defender, 'chat-resultat-esquive.hbs'); | ||||||
|     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); |     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1137,7 +1162,7 @@ export class RdDCombat { | |||||||
|   async _onEsquiveEchec(defenderRoll) { |   async _onEsquiveEchec(defenderRoll) { | ||||||
|     console.log("RdDCombat._onEsquiveEchec >>>", defenderRoll); |     console.log("RdDCombat._onEsquiveEchec >>>", defenderRoll); | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(defenderRoll, this.defender, 'chat-resultat-esquive.html'); |     await RdDRollResult.displayRollData(defenderRoll, this.defender, 'chat-resultat-esquive.hbs'); | ||||||
|  |  | ||||||
|     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); |     this.removeChatMessageActionsPasseArme(defenderRoll.passeArme); | ||||||
|     this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true }) |     this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true }) | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ import { FenetreRechercheTirage } from "./tirage/fenetre-recherche-tirage.js"; | |||||||
| import { TMRUtility } from "./tmr-utility.js"; | import { TMRUtility } from "./tmr-utility.js"; | ||||||
| import { DialogFatigueVoyage } from "./voyage/dialog-fatigue-voyage.js"; | import { DialogFatigueVoyage } from "./voyage/dialog-fatigue-voyage.js"; | ||||||
| import { ChatUtility } from "./chat-utility.js"; | import { ChatUtility } from "./chat-utility.js"; | ||||||
|  | import { RdDRollResult } from "./rdd-roll-result.js"; | ||||||
|  |  | ||||||
| const rddRollNumeric = /^(\d+)\s*([\+\-]?\d+)?\s*(s)?/; | const rddRollNumeric = /^(\d+)\s*([\+\-]?\d+)?\s*(s)?/; | ||||||
|  |  | ||||||
| @@ -128,6 +129,16 @@ export class RdDCommands { | |||||||
|           <br><strong>/rdd vol déser +2</strong> effectue un jet de Volonté/Survie en désert à +2 pour les tokens sélectionnés |           <br><strong>/rdd vol déser +2</strong> effectue un jet de Volonté/Survie en désert à +2 pour les tokens sélectionnés | ||||||
|           ` |           ` | ||||||
|     }); |     }); | ||||||
|  |     this.registerCommand({ | ||||||
|  |       path: ["/jet"], func: (content, msg, params) => this.askRollRdd(msg, params), | ||||||
|  |       descr: `Poste dans le tchat un jet de dés à effectuer. Exemples: | ||||||
|  |           <br><strong>/jet Vue Vigilance</strong> poste une demande de jet de VUE / Vigilance à 0 | ||||||
|  |           <br><strong>/jet Vue</strong> poste une demande de jet de VUE à 0 | ||||||
|  |           <br><strong>/jet Vue -2</strong> poste une demande de jet de VUE à -2 | ||||||
|  |           <br><strong>/jet Vue Vigilance -2</strong> poste une demande de jet de VUE / Vigilance à -2 | ||||||
|  |           <br><strong>/jet vol déser +2</strong> poste une demande de jet de VOLONTÉ / Survie en désert à +2 | ||||||
|  |           ` | ||||||
|  |     }); | ||||||
|     this.registerCommand({ path: ["/ddr"], func: (content, msg, params) => this.rollDeDraconique(msg), descr: "Lance un Dé Draconique" }); |     this.registerCommand({ path: ["/ddr"], func: (content, msg, params) => this.rollDeDraconique(msg), descr: "Lance un Dé Draconique" }); | ||||||
|  |  | ||||||
|     this.registerCommand({ |     this.registerCommand({ | ||||||
| @@ -256,7 +267,7 @@ export class RdDCommands { | |||||||
|     let commands = [] |     let commands = [] | ||||||
|     this._buildSubTableHelp(commands, table ?? this.commandsTable); |     this._buildSubTableHelp(commands, table ?? this.commandsTable); | ||||||
|  |  | ||||||
|     let html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/settings/dialog-aide-commands.html", { commands: commands }); |     let html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/settings/dialog-aide-commands.hbs", { commands: commands }); | ||||||
|     let d = new Dialog( |     let d = new Dialog( | ||||||
|       { |       { | ||||||
|         title: "Commandes disponibles dans le tchat", |         title: "Commandes disponibles dans le tchat", | ||||||
| @@ -339,6 +350,25 @@ export class RdDCommands { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   async askRollRdd(msg, params) { | ||||||
|  |     if (params.length == 0) { | ||||||
|  |       return false | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       let length = params.length; | ||||||
|  |       let diff = Number(params[length - 1]); | ||||||
|  |       if (Number.isInteger(Number(diff))) { | ||||||
|  |         length--; | ||||||
|  |       } | ||||||
|  |       else { | ||||||
|  |         diff = 0; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       const carac = params[0]; | ||||||
|  |       const competence = length > 1 ? '/' + Misc.join(params.slice(1, length), ' ') : '' | ||||||
|  |       ChatMessage.create({ content: `@roll[${carac}${competence}/${diff}]` }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollRdDNumeric(msg, carac, diff, significative = false) { |   async rollRdDNumeric(msg, carac, diff, significative = false) { | ||||||
| @@ -349,7 +379,7 @@ export class RdDCommands { | |||||||
|       show: { title: "Table de résolution" } |       show: { title: "Table de résolution" } | ||||||
|     }; |     }; | ||||||
|     await RdDResolutionTable.rollData(rollData); |     await RdDResolutionTable.rollData(rollData); | ||||||
|     return RdDCommands._chatAnswer(msg, await RdDResolutionTable.buildRollDataHtml(rollData)); |     return RdDCommands._chatAnswer(msg, await RdDRollResult.buildRollDataHtml(rollData)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -1,12 +1,10 @@ | |||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| import { RdDResolutionTable } from "./rdd-resolution-table.js"; |  | ||||||
| import { RdDRoll } from "./rdd-roll.js"; | import { RdDRoll } from "./rdd-roll.js"; | ||||||
| import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; | import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; | ||||||
| import { ChatUtility } from "./chat-utility.js"; | import { ChatUtility } from "./chat-utility.js"; | ||||||
| import { STATUSES } from "./settings/status-effects.js"; | import { STATUSES } from "./settings/status-effects.js"; | ||||||
| import { ITEM_TYPES } from "./constants.js"; | import { ITEM_TYPES } from "./constants.js"; | ||||||
|  | import { RdDRollResult } from "./rdd-roll-result.js"; | ||||||
| /* -------------------------------------------- */ |  | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| export class RdDEmpoignade { | export class RdDEmpoignade { | ||||||
| @@ -159,7 +157,7 @@ export class RdDEmpoignade { | |||||||
|     if ((isNouvelle || empoignade.system.pointsemp == 0) && defender.hasArmeeMeleeEquipee()) { |     if ((isNouvelle || empoignade.system.pointsemp == 0) && defender.hasArmeeMeleeEquipee()) { | ||||||
|       ChatUtility.createChatWithRollMode( |       ChatUtility.createChatWithRollMode( | ||||||
|         { |         { | ||||||
|           content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-valider.html`, { attacker: attacker, defender: defender }) |           content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-valider.hbs`, { attacker: attacker, defender: defender }) | ||||||
|         }, |         }, | ||||||
|         attacker |         attacker | ||||||
|       ) |       ) | ||||||
| @@ -192,7 +190,7 @@ export class RdDEmpoignade { | |||||||
|     } |     } | ||||||
|     if (empoignade.system.pointsemp >= 2) { |     if (empoignade.system.pointsemp >= 2) { | ||||||
|       if (!empoignade.system.ausol) { |       if (!empoignade.system.ausol) { | ||||||
|         let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-entrainer.html'); |         let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-entrainer.hbs'); | ||||||
|         RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |         RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
| @@ -216,7 +214,7 @@ export class RdDEmpoignade { | |||||||
|     } |     } | ||||||
|     const msg = await ChatMessage.create({ |     const msg = await ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(attacker), |       whisper: ChatUtility.getOwners(attacker), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-immobilise.html`, rollData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-immobilise.hbs`, rollData) | ||||||
|     }) |     }) | ||||||
|     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|   } |   } | ||||||
| @@ -224,7 +222,7 @@ export class RdDEmpoignade { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async $rollAttaqueEmpoignade(attacker, rollData, isNouvelle = false) { |   static async $rollAttaqueEmpoignade(attacker, rollData, isNouvelle = false) { | ||||||
|     const dialog = await RdDRoll.create(attacker, rollData, |     const dialog = await RdDRoll.create(attacker, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-empoignade', |         name: 'jet-empoignade', | ||||||
|         label: 'Empoigner', |         label: 'Empoigner', | ||||||
| @@ -250,7 +248,7 @@ export class RdDEmpoignade { | |||||||
|     if (rollData.rolled.isPart) { |     if (rollData.rolled.isPart) { | ||||||
|       rollData.particuliere = "finesse"; |       rollData.particuliere = "finesse"; | ||||||
|     } |     } | ||||||
|     let msg = await RdDResolutionTable.displayRollData(rollData, defender, 'chat-empoignade-resultat.html'); |     let msg = await RdDRollResult.displayRollData(rollData, defender, 'chat-empoignade-resultat.hbs'); | ||||||
|     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -287,7 +285,7 @@ export class RdDEmpoignade { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async $rollDefenseEmpoignade(defender, defenderRoll) { |   static async $rollDefenseEmpoignade(defender, defenderRoll) { | ||||||
|     const dialog = await RdDRoll.create(defender, defenderRoll, |     const dialog = await RdDRoll.create(defender, defenderRoll, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-empoignade.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-empoignade.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'empoignade', |         name: 'empoignade', | ||||||
|         label: 'Contrer', |         label: 'Contrer', | ||||||
| @@ -312,9 +310,9 @@ export class RdDEmpoignade { | |||||||
|       RdDEmpoignade.$updateEtatEmpoignade(empoignade) |       RdDEmpoignade.$updateEtatEmpoignade(empoignade) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(rollData, rollData.defender, 'chat-empoignade-resultat.html') |     await RdDRollResult.displayRollData(rollData, rollData.defender, 'chat-empoignade-resultat.hbs') | ||||||
|     if (empoignade.system.pointsemp >= 2) { |     if (empoignade.system.pointsemp >= 2) { | ||||||
|       let msg = await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-empoignade-entrainer.html'); |       let msg = await RdDRollResult.displayRollData(rollData, rollData.attacker, 'chat-empoignade-entrainer.hbs'); | ||||||
|       RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |       RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -358,7 +356,7 @@ export class RdDEmpoignade { | |||||||
|     await attacker.setEffect(STATUSES.StatusProne, true); |     await attacker.setEffect(STATUSES.StatusProne, true); | ||||||
|     await defender.setEffect(STATUSES.StatusProne, true); |     await defender.setEffect(STATUSES.StatusProne, true); | ||||||
|  |  | ||||||
|     let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-entrainer-sol.html'); |     let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-entrainer-sol.hbs'); | ||||||
|     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -374,7 +372,7 @@ export class RdDEmpoignade { | |||||||
|     await defender.setEffect(STATUSES.StatusProne, true); |     await defender.setEffect(STATUSES.StatusProne, true); | ||||||
|     await this.$deleteEmpoignade(empoignade) |     await this.$deleteEmpoignade(empoignade) | ||||||
|  |  | ||||||
|     let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-projeter-sol.html'); |     let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-projeter-sol.hbs'); | ||||||
|     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -401,7 +399,7 @@ export class RdDEmpoignade { | |||||||
|     if (perteMode == "endquart") { |     if (perteMode == "endquart") { | ||||||
|       await defender.santeIncDec("endurance", -(3 * Math.floor(endValue / 4))); |       await defender.santeIncDec("endurance", -(3 * Math.floor(endValue / 4))); | ||||||
|     } |     } | ||||||
|     let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-perte-endurance.html'); |     let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-perte-endurance.hbs'); | ||||||
|     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); |     RdDEmpoignade.$storeRollEmpoignade(msg, rollData); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -117,7 +117,7 @@ export class RdDMeteo { | |||||||
|     meteo.pluie.description = RdDMeteo.pluie(meteo.pluie.force); |     meteo.pluie.description = RdDMeteo.pluie(meteo.pluie.force); | ||||||
|  |  | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-meteo.html', meteo), |       content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-resultat-meteo.hbs', meteo), | ||||||
|       whisper: ChatUtility.getGMs() |       whisper: ChatUtility.getGMs() | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ const words = ['pore', 'pre', 'flor', 'lane', 'turlu', 'pin', 'a', 'alph', 'i', | |||||||
| export class RdDNameGen { | export class RdDNameGen { | ||||||
|  |  | ||||||
|   static async proposeName(msg, params) { |   static async proposeName(msg, params) { | ||||||
|     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.html`, { |     const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-command-nom.hbs`, { | ||||||
|       nom: await RdDNameGen.generate() |       nom: await RdDNameGen.generate() | ||||||
|     }); |     }); | ||||||
|     ChatMessage.create({ content: html, whisper: ChatUtility.getGMs() }); |     ChatMessage.create({ content: html, whisper: ChatUtility.getGMs() }); | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| /* -------------------------------------------- */ |  | ||||||
| import { RdDResolutionTable } from "./rdd-resolution-table.js"; |  | ||||||
| import { RdDRoll } from "./rdd-roll.js"; | import { RdDRoll } from "./rdd-roll.js"; | ||||||
| import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; | import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; | ||||||
| import { Targets } from "./targets.js"; | import { Targets } from "./targets.js"; | ||||||
| import { ITEM_TYPES } from "./constants.js"; | import { ITEM_TYPES } from "./constants.js"; | ||||||
|  | import { RdDRollResult } from "./rdd-roll-result.js"; | ||||||
|  | import { Grammar } from "./grammar.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| /* On part du principe qu'une entité démarre tjs  | /* On part du principe qu'une entité démarre tjs  | ||||||
| @@ -98,7 +98,10 @@ export class RdDPossession { | |||||||
|   static selectCompetenceDraconicOuPossession(rollData, rollingActor) { |   static selectCompetenceDraconicOuPossession(rollData, rollingActor) { | ||||||
|     rollData.competence = rollingActor.getDraconicOuPossession(); |     rollData.competence = rollingActor.getDraconicOuPossession(); | ||||||
|     if (rollingActor.isCreatureEntite()) { |     if (rollingActor.isCreatureEntite()) { | ||||||
|       RdDItemCompetenceCreature.setRollDataCreature(rollData) |       const carac = rollingActor.system.carac | ||||||
|  |       rollData.carac = carac | ||||||
|  |       rollData.competence.system.defaut_carac = 'reve' | ||||||
|  |       rollData.selectedCarac = carac.reve | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       rollData.selectedCarac = rollingActor.system.carac.reve |       rollData.selectedCarac = rollingActor.system.carac.reve | ||||||
| @@ -110,7 +113,7 @@ export class RdDPossession { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async $rollAttaquePossession(attacker, rollData, isNouvelle = false) { |   static async $rollAttaquePossession(attacker, rollData, isNouvelle = false) { | ||||||
|     const dialog = await RdDRoll.create(attacker, rollData, |     const dialog = await RdDRoll.create(attacker, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'jet-possession', |         name: 'jet-possession', | ||||||
|         label: rollData.isECNIDefender ? 'Conjurer la possession' : 'Possession', |         label: rollData.isECNIDefender ? 'Conjurer la possession' : 'Possession', | ||||||
| @@ -131,13 +134,13 @@ export class RdDPossession { | |||||||
|     } |     } | ||||||
|     const possession = (rollData.isECNIDefender ? rollData.attacker : rollData.defender).getPossession(rollData.possession.system.possessionid) |     const possession = (rollData.isECNIDefender ? rollData.attacker : rollData.defender).getPossession(rollData.possession.system.possessionid) | ||||||
|     RdDPossession.storePossessionAttaque(possession, rollData) |     RdDPossession.storePossessionAttaque(possession, rollData) | ||||||
|     await RdDResolutionTable.displayRollData(rollData, rollData.defender, 'chat-resultat-possession.html'); |     await RdDRollResult.displayRollData(rollData, rollData.defender, 'chat-resultat-possession.hbs'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async $rollDefensePossession(defender, rollData) { |   static async $rollDefensePossession(defender, rollData) { | ||||||
|     const dialog = await RdDRoll.create(defender, rollData, |     const dialog = await RdDRoll.create(defender, rollData, | ||||||
|       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.html' }, |       { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.hbs' }, | ||||||
|       { |       { | ||||||
|         name: 'possession', |         name: 'possession', | ||||||
|         label: 'Conjurer une Possession', |         label: 'Conjurer une Possession', | ||||||
| @@ -171,7 +174,7 @@ export class RdDPossession { | |||||||
|     rollData.possession = possession |     rollData.possession = possession | ||||||
|     RdDPossession.$updateEtatPossession(rollData.possession) |     RdDPossession.$updateEtatPossession(rollData.possession) | ||||||
|  |  | ||||||
|     await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.html') |     await RdDRollResult.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.hbs') | ||||||
|     if (rollData.possession.isPosseder || rollData.possession.isConjurer) { |     if (rollData.possession.isPosseder || rollData.possession.isConjurer) { | ||||||
|       // conjuration |       // conjuration | ||||||
|       await victime.deleteEmbeddedDocuments("Item", [rollData.possession._id]) |       await victime.deleteEmbeddedDocuments("Item", [rollData.possession._id]) | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| import { ChatUtility } from "./chat-utility.js"; |  | ||||||
| import { Misc } from "./misc.js"; | import { Misc } from "./misc.js"; | ||||||
| import { RdDDice } from "./rdd-dice.js"; | import { RdDDice } from "./rdd-dice.js"; | ||||||
| import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; | import { ReglesOptionnelles } from "./settings/regles-optionnelles.js"; | ||||||
| @@ -54,7 +53,6 @@ export class RdDResolutionTable { | |||||||
|     return this._computeCell(level, percentage); |     return this._computeCell(level, percentage); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static _computeRow(caracValue) { |   static _computeRow(caracValue) { | ||||||
|     let dataRow = [ |     let dataRow = [ | ||||||
| @@ -89,24 +87,10 @@ export class RdDResolutionTable { | |||||||
|     return resultat; |     return resultat; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |  | ||||||
|   static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.html') { |  | ||||||
|     return await ChatUtility.createChatWithRollMode( |  | ||||||
|       { content: await RdDResolutionTable.buildRollDataHtml(rollData, template) }, |  | ||||||
|       actor |  | ||||||
|     ) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   static actorChatName(actor) { |   static actorChatName(actor) { | ||||||
|     return actor ?? game.user.name; |     return actor ?? game.user.name; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |  | ||||||
|   static async buildRollDataHtml(rollData, template = 'chat-resultat-general.html') { |  | ||||||
|     rollData.show = rollData.show || {}; |  | ||||||
|     return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async rollData(rollData) { |   static async rollData(rollData) { | ||||||
|     rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData); |     rollData.rolled = await this.roll(rollData.caracValue, rollData.finalLevel, rollData); | ||||||
| @@ -284,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 renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.html', { |     return await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', { | ||||||
|       carac: carac, |       carac: carac, | ||||||
|       difficulte: level, |       difficulte: level, | ||||||
|       min: minLevel, |       min: minLevel, | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ import { RdDUtility } from "./rdd-utility.js"; | |||||||
| export class RdDEncaisser extends Dialog { | export class RdDEncaisser extends Dialog { | ||||||
|  |  | ||||||
|   static async encaisser(actor) { |   static async encaisser(actor) { | ||||||
|     let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html', |     let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.hbs', | ||||||
|       { ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() } |       { ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() } | ||||||
|     ); |     ); | ||||||
|     new RdDEncaisser(html, actor).render(true); |     new RdDEncaisser(html, actor).render(true); | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ export class RdDRollResolutionTable extends Dialog { | |||||||
|     if (RdDRollResolutionTable.resolutionTable == undefined) { |     if (RdDRollResolutionTable.resolutionTable == undefined) { | ||||||
|       const rollData = {} |       const rollData = {} | ||||||
|       RdDRollResolutionTable._setDefaultOptions(rollData); |       RdDRollResolutionTable._setDefaultOptions(rollData); | ||||||
|       let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', rollData); |       let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.hbs', rollData); | ||||||
|       RdDRollResolutionTable.resolutionTable = new RdDRollResolutionTable(rollData, html); |       RdDRollResolutionTable.resolutionTable = new RdDRollResolutionTable(rollData, html); | ||||||
|       RdDRollResolutionTable.resolutionTable.render(true); |       RdDRollResolutionTable.resolutionTable.render(true); | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								module/rdd-roll-result.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								module/rdd-roll-result.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | import { ChatUtility } from "./chat-utility.js"; | ||||||
|  |  | ||||||
|  | export class RdDRollResult { | ||||||
|  |  | ||||||
|  |   static async displayRollData(rollData, actor = undefined, template = 'chat-resultat-general.hbs') { | ||||||
|  |     const chatMessage = await ChatUtility.createChatWithRollMode( | ||||||
|  |       { content: await RdDRollResult.buildRollDataHtml(rollData, template) }, | ||||||
|  |       actor | ||||||
|  |     ) | ||||||
|  |     return chatMessage | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static async buildRollDataHtml(rollData, template = 'chat-resultat-general.hbs') { | ||||||
|  |     rollData.show = rollData.show || {}; | ||||||
|  |     return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -138,9 +138,9 @@ export class RdDRoll extends Dialog { | |||||||
|     } |     } | ||||||
|     if (this.rollData.selectedCarac) { |     if (this.rollData.selectedCarac) { | ||||||
|       this.html.find("[name='carac']").val( |       this.html.find("[name='carac']").val( | ||||||
|         this.actor?.type == ACTOR_TYPES.personnage |         RdDCarac.caracDetails(this.rollData.selectedCarac.label, { onMessage: m => { } })?.code | ||||||
|           ? RdDCarac.caracDetails(this.rollData.selectedCarac.label).code |         ?? this.rollData.selectedCarac.code | ||||||
|           : this.rollData.selectedCarac.label |         ?? Grammar.toLowerCaseNoAccentNoSpace(this.rollData.selectedCarac.label) | ||||||
|       ) |       ) | ||||||
|     } |     } | ||||||
|     if (this.rollData.selectedSort) { |     if (this.rollData.selectedSort) { | ||||||
| @@ -269,14 +269,11 @@ export class RdDRoll extends Dialog { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   async onAction(action) { |   async onAction(action) { | ||||||
|     this.rollData.forceDiceResult = Number.parseInt(this.html.find("[name='force-dice-result']").val()) ?? -1; |     this.rollData.forceDiceResult = Number.parseInt(this.html.find("[name='force-dice-result']").val()) ?? -1 | ||||||
|     await RdDResolutionTable.rollData(this.rollData); |     await RdDResolutionTable.rollData(this.rollData) | ||||||
|     console.log("RdDRoll -=>", this.rollData, this.rollData.rolled); |  | ||||||
|     if (action.callbacks) |  | ||||||
|     for (let callback of action.callbacks) { |     for (let callback of action.callbacks) { | ||||||
|         if (callback.condition == undefined || callback.condition(this.rollData)) { |       await callback.action(this.rollData) | ||||||
|           await callback.action(this.rollData); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -286,7 +283,7 @@ export class RdDRoll extends Dialog { | |||||||
|     this.rollData.bonus = RdDItemSort.getCaseBonus(sort, this.rollData.tmr.coord); |     this.rollData.bonus = RdDItemSort.getCaseBonus(sort, this.rollData.tmr.coord); | ||||||
|     this.rollData.diffLibre = RdDItemSort.getDifficulte(sort, -7); |     this.rollData.diffLibre = RdDItemSort.getDifficulte(sort, -7); | ||||||
|     RdDItemSort.setCoutReveReel(sort); |     RdDItemSort.setCoutReveReel(sort); | ||||||
|     const htmlSortDescription = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html", { sort: sort }); |     const htmlSortDescription = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.hbs", { sort: sort }); | ||||||
|     this.html.find(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort"); |     this.html.find(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort"); | ||||||
|     this.html.find(".bonus-case").text(`${this.rollData.bonus}%`); |     this.html.find(".bonus-case").text(`${this.rollData.bonus}%`); | ||||||
|     this.html.find(".placeholder-description-sort").children().remove(); |     this.html.find(".placeholder-description-sort").children().remove(); | ||||||
| @@ -347,7 +344,7 @@ export class RdDRoll extends Dialog { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async buildAjustements(rollData) { |   async buildAjustements(rollData) { | ||||||
|     return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.html`, rollData); |     return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs`, rollData); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -48,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 renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', 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() }); | ||||||
|     } |     } | ||||||
| @@ -497,7 +497,7 @@ export class RdDTMRDialog extends Dialog { | |||||||
|  |  | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this.actor), |       whisper: ChatUtility.getOwners(this.actor), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.html`, rencData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.hbs`, rencData) | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     this.updateValuesDisplay(); |     this.updateValuesDisplay(); | ||||||
| @@ -724,7 +724,7 @@ export class RdDTMRDialog extends Dialog { | |||||||
|     rollData.poesie = await Poetique.getExtrait(); |     rollData.poesie = await Poetique.getExtrait(); | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this.actor), |       whisper: ChatUtility.getOwners(this.actor), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, 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.close(); |       await this.close(); | ||||||
| @@ -841,7 +841,7 @@ export class RdDTMRDialog extends Dialog { | |||||||
|     rollData.poesie = await Poetique.getExtrait(); |     rollData.poesie = await Poetique.getExtrait(); | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(this.actor), |       whisper: ChatUtility.getOwners(this.actor), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.hbs`, rollData) | ||||||
|     }); |     }); | ||||||
|     if (rollData.rolled.isEchec) { |     if (rollData.rolled.isEchec) { | ||||||
|       options.onConqueteEchec(rollData, options.effetDraconique); |       options.onConqueteEchec(rollData, options.effetDraconique); | ||||||
| @@ -857,7 +857,7 @@ export class RdDTMRDialog extends Dialog { | |||||||
|     rollData.isTMRCache = rollData.actor.isTMRCache(); |     rollData.isTMRCache = rollData.actor.isTMRCache(); | ||||||
|     const dialog = await RdDRoll.create(this.actor, rollData, |     const dialog = await RdDRoll.create(this.actor, rollData, | ||||||
|       { |       { | ||||||
|         html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-maitrise-tmr.html', |         html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-maitrise-tmr.hbs', | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|         name: rollData.maitrise.verbe, label: rollData.maitrise.action, |         name: rollData.maitrise.verbe, label: rollData.maitrise.action, | ||||||
| @@ -1098,7 +1098,7 @@ export class RdDTMRDialog extends Dialog { | |||||||
|     if (!this.viewOnly && this.actor.isResonanceSigneDraconique(coord)) { |     if (!this.viewOnly && this.actor.isResonanceSigneDraconique(coord)) { | ||||||
|       ChatMessage.create({ |       ChatMessage.create({ | ||||||
|         whisper: ChatUtility.getOwners(this.actor), |         whisper: ChatUtility.getOwners(this.actor), | ||||||
|         content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.html`, { |         content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.hbs`, { | ||||||
|           alias: this.actor.getAlias(), |           alias: this.actor.getAlias(), | ||||||
|           typeTMR: TMRUtility.getTMRType(coord) |           typeTMR: TMRUtility.getTMRType(coord) | ||||||
|         }) |         }) | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ export class RdDTokenHud { | |||||||
|     }; |     }; | ||||||
|     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.html', |       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.hbs', | ||||||
|       hudData, |       hudData, | ||||||
|       (event) => { |       (event) => { | ||||||
|         let initCommand = event.currentTarget.attributes['data-command']?.value; |         let initCommand = event.currentTarget.attributes['data-command']?.value; | ||||||
| @@ -70,7 +70,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.html', 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; | ||||||
|         const action = hudData.actions[actionIndex]; |         const action = hudData.actions[actionIndex]; | ||||||
|   | |||||||
| @@ -112,34 +112,34 @@ export class RdDUtility { | |||||||
|   static preloadHandlebarsTemplates() { |   static preloadHandlebarsTemplates() { | ||||||
|     const templatePaths = [ |     const templatePaths = [ | ||||||
|       //Character Sheets |       //Character Sheets | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor-sheet.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor-sheet.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor-creature-sheet.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.hbs', | ||||||
|       // sous-parties de feuilles de personnages |       // sous-parties de feuilles de personnages | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-buttons.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-buttons.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-etat.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-etat.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-creature.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-creature.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-entitee.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-entitee.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/armures.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/armures.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/competence.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/competence.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/combat.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/combat.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/blessures.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/blessure.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/blessure.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs', | ||||||
| @@ -149,11 +149,11 @@ export class RdDUtility { | |||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/jeus.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/jeus.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs', | ||||||
| @@ -163,9 +163,9 @@ export class RdDUtility { | |||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-casetmrs.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/hr-casetmrs.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/xp-journal.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/xp-journal.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html', |       'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-item.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-item.hbs', | ||||||
|       "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs", |       "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs", | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs', | ||||||
| @@ -176,36 +176,36 @@ export class RdDUtility { | |||||||
|       //Items |       //Items | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/boutons-comestible.html', |       'systems/foundryvtt-reve-de-dragon/templates/item/boutons-comestible.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/icon-arme-broken.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/item/icon-arme-broken.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/temporel.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/item/temporel.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.html', |       'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.html', |       'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.html', |       'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/header-item.html', |       'systems/foundryvtt-reve-de-dragon/templates/header-item.hbs', | ||||||
|  |  | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/queue-sheet.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/item/queue-sheet.hbs', | ||||||
|       // partial enums |       // partial enums | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-categories.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-categories.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/enum-categorie-alchimie.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/item/enum-categorie-alchimie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/item/enum-etat-alchimie.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/item/enum-etat-alchimie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-queue.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-queue.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-competence.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-draconic.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-heures.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-heures.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-mortalite.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-mortalite.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-niveau-ethylisme.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-niveau-ethylisme.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-periode.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-periode.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-effet.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-effet.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html', |       'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.hbs', | ||||||
|       // Partials |       // Partials | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/enchantement/partial-enchantement.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/enchantement/partial-enchantement.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/coeur/chat-effet-tendre-moment.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/coeur/chat-effet-tendre-moment.hbs', | ||||||
| @@ -219,53 +219,53 @@ export class RdDUtility { | |||||||
|       'systems/foundryvtt-reve-de-dragon/templates/common/periodicite.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/common/periodicite.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/common/enum-duree.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/common/enum-duree.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/common/compendium-link.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/common/compendium-link.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-ajustements.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-astrologique.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-astrologique.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-coeur.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-coeur.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-competences.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-competences.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffLibre.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffLibre.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffFixe.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-diffCondition.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-enctotal.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-enctotal.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-surenc.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-surenc.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-item-hautrevant.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-item-hautrevant.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-item-frequence.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-item-frequence.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html', |       'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/resolution-table.html', |       'systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs', | ||||||
|       // Dialogs |       // Dialogs | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.html', |       'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/sommeil/sommeil-actor-moral.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/sommeil/sommeil-actor-moral.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-gardien.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-gardien.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-joueur.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-joueur.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-theme.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/sommeil/astrologie-theme.hbs', | ||||||
|       // HUD |       // HUD | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html', |       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html', |       'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.hbs', | ||||||
|       // messages tchat |       // messages tchat | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-infojet.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-description.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-description.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-info-appel-au-moral.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-info-distance.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-info-distance.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-acteur.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-acteur.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-sante.hbs', |       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-sante.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-competence-xp.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-actor-carac-xp.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html', |       'systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.hbs', | ||||||
|       'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html' |       'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.hbs' | ||||||
|     ]; |     ]; | ||||||
|  |  | ||||||
|     // foundry et options |     // foundry et options | ||||||
| @@ -964,8 +964,8 @@ export class RdDUtility { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /*-------------------------------------------- */ |   /*-------------------------------------------- */ | ||||||
|   static checkThanatosXP(compName) { |   static checkThanatosXP(item) { | ||||||
|     if (compName.includes('Thanatos')) { |     if (item.isCompetencePersonnage() && item.name.includes('Thanatos')) { | ||||||
|       let message = "Vous avez mis des points d'Expérience en Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique."; |       let message = "Vous avez mis des points d'Expérience en Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique."; | ||||||
|       ChatMessage.create({ |       ChatMessage.create({ | ||||||
|         whisper: ChatUtility.getUserAndGMs(), |         whisper: ChatUtility.getUserAndGMs(), | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ export class StatusEffects extends FormApplication { | |||||||
|     const options = super.defaultOptions; |     const options = super.defaultOptions; | ||||||
|     foundry.utils.mergeObject(options, { |     foundry.utils.mergeObject(options, { | ||||||
|       id: "status-effects", |       id: "status-effects", | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/settings/status-effects.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/settings/status-effects.hbs", | ||||||
|       height: 800, |       height: 800, | ||||||
|       width: 350, |       width: 350, | ||||||
|       minimizable: false, |       minimizable: false, | ||||||
|   | |||||||
| @@ -157,7 +157,7 @@ export class SystemCompendiums extends FormApplication { | |||||||
|     const options = super.defaultOptions; |     const options = super.defaultOptions; | ||||||
|     foundry.utils.mergeObject(options, { |     foundry.utils.mergeObject(options, { | ||||||
|       id: "system-compendiums", |       id: "system-compendiums", | ||||||
|       template: "systems/foundryvtt-reve-de-dragon/templates/settings/system-compendiums.html", |       template: "systems/foundryvtt-reve-de-dragon/templates/settings/system-compendiums.hbs", | ||||||
|       height: 'fit-content', |       height: 'fit-content', | ||||||
|       width: 600, |       width: 600, | ||||||
|       minimizable: false, |       minimizable: false, | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ export class DialogRepos extends Dialog { | |||||||
|         "heures": 4 |         "heures": 4 | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-repos.html", actor); |     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-repos.hbs", actor); | ||||||
|     const dialog = new DialogRepos(html, actor); |     const dialog = new DialogRepos(html, actor); | ||||||
|     dialog.render(true); |     dialog.render(true); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ export class DialogStress extends Dialog { | |||||||
|         ) |         ) | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-stress.html", dialogData); |     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-stress.hbs", dialogData); | ||||||
|     new DialogStress(dialogData, html) |     new DialogStress(dialogData, html) | ||||||
|       .render(true); |       .render(true); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ export class EffetsRencontre { | |||||||
|     }) |     }) | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(context.actor), |       whisper: ChatUtility.getOwners(context.actor), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.hbs`, context) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -128,7 +128,7 @@ export class EffetsRencontre { | |||||||
|  |  | ||||||
|     ChatMessage.create({ |     ChatMessage.create({ | ||||||
|       whisper: ChatUtility.getOwners(context.actor), |       whisper: ChatUtility.getOwners(context.actor), | ||||||
|       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context) |       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.hbs`, context) | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| { | { | ||||||
|   "id": "foundryvtt-reve-de-dragon", |   "id": "foundryvtt-reve-de-dragon", | ||||||
|   "title": "Rêve de Dragon", |   "title": "Rêve de Dragon", | ||||||
|   "version": "12.0.35", |   "version": "12.0.42", | ||||||
|   "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.35/rddsystem.zip", |   "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.42/rddsystem.zip", | ||||||
|   "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.35/system.json", |   "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/releases/download/12.0.42/system.json", | ||||||
|   "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", |   "changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md", | ||||||
|   "compatibility": { |   "compatibility": { | ||||||
|     "minimum": "11", |     "minimum": "11", | ||||||
|   | |||||||
| @@ -16,12 +16,12 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-creature.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-creature.hbs"}} | ||||||
|             <div class="flex-group-left header-etats"> |             <div class="flex-group-left header-etats"> | ||||||
|               <div class="flexcol"> |               <div class="flexcol"> | ||||||
|                 <span>{{system.compteurs.etat.label}}: {{system.compteurs.etat.value}}</span> |                 <span>{{system.compteurs.etat.label}}: {{system.compteurs.etat.value}}</span> | ||||||
|                 <span>{{calc.resumeBlessures}}</span> |                 <span>{{calc.resumeBlessures}}</span> | ||||||
|                 {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.html"}} |                 {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.hbs"}} | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
| @@ -43,13 +43,13 @@ | |||||||
|     {{!-- Carac & compétences --}} |     {{!-- Carac & compétences --}} | ||||||
|     <div class="tab items" data-group="primary" data-tab="carac"> |     <div class="tab items" data-group="primary" data-tab="carac"> | ||||||
|       <div class="flexrow"> |       <div class="flexrow"> | ||||||
|         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} |         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs"}} | ||||||
|       </div> |       </div> | ||||||
|       <div class="grid grid-2col"> |       <div class="grid grid-2col"> | ||||||
|         <div class="flex-group-left flexcol"> |         <div class="flex-group-left flexcol"> | ||||||
|           <ul class="carac-list alterne-list"> |           <ul class="carac-list alterne-list"> | ||||||
|           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} |           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.hbs"}} | ||||||
|           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}} |           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.hbs"}} | ||||||
|           </ul> |           </ul> | ||||||
|         </div> |         </div> | ||||||
|         <div class="flex-group-left flexcol competence-column"> |         <div class="flex-group-left flexcol competence-column"> | ||||||
| @@ -57,13 +57,13 @@ | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
|       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html"}} |       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessures.hbs"}} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     {{!-- Equipment Tab --}} |     {{!-- Equipment Tab --}} | ||||||
|     <div class="tab items" data-group="primary" data-tab="items"> |     <div class="tab items" data-group="primary" data-tab="items"> | ||||||
|       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} |       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} | ||||||
|       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}} |       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.hbs"}} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     {{!-- Description Tab --}} |     {{!-- Description Tab --}} | ||||||
| @@ -72,7 +72,7 @@ | |||||||
|         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} |         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
|       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}} |       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs"}} | ||||||
| 
 | 
 | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
| @@ -16,7 +16,7 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-entitee.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs-entitee.hbs"}} | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| @@ -29,13 +29,13 @@ | |||||||
|     {{!-- Carac Tab --}} |     {{!-- Carac Tab --}} | ||||||
|     <div class="items" data-group="primary" data-tab="carac"> |     <div class="items" data-group="primary" data-tab="carac"> | ||||||
|       <div class="flexrow"> |       <div class="flexrow"> | ||||||
|         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} |         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs"}} | ||||||
|       </div> |       </div> | ||||||
|       <div class="grid grid-2col"> |       <div class="grid grid-2col"> | ||||||
|         <div class="flex-group-left flexcol"> |         <div class="flex-group-left flexcol"> | ||||||
|           <ul class="carac-list alterne-list"> |           <ul class="carac-list alterne-list"> | ||||||
|           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} |           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.hbs"}} | ||||||
|           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html"}} |           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.hbs"}} | ||||||
|           </ul> |           </ul> | ||||||
|         </div> |         </div> | ||||||
|         <div class="flex-group-left flexcol"> |         <div class="flex-group-left flexcol"> | ||||||
| @@ -51,7 +51,7 @@ | |||||||
|       <div class="form-group large-editor"> |       <div class="form-group large-editor"> | ||||||
|         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} |         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} | ||||||
|       </div> |       </div> | ||||||
|       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}} |       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs"}} | ||||||
| 
 | 
 | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
| @@ -7,13 +7,13 @@ | |||||||
|         <div class="flexcol"> |         <div class="flexcol"> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> |             <h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-buttons.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-buttons.hbs"}} | ||||||
|           </div> |           </div> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             <img class="profile-img" src="{{img}}" data-edit="img" data-tooltip="{{name}}" /> |             <img class="profile-img" src="{{img}}" data-edit="img" data-tooltip="{{name}}" /> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs.hbs"}} | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-etat.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-etat.hbs"}} | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.hbs"}} | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| @@ -37,17 +37,17 @@ | |||||||
|       {{#if options.isObserver}}{{!-- Carac Tab --}} |       {{#if options.isObserver}}{{!-- Carac Tab --}} | ||||||
|       <div class="tab items" data-group="primary" data-tab="carac"> |       <div class="tab items" data-group="primary" data-tab="carac"> | ||||||
|         <div class="flexrow"> |         <div class="flexrow"> | ||||||
|           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} |           {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs"}} | ||||||
|         </div> |         </div> | ||||||
|         <div class="grid grid-2col"> |         <div class="grid grid-2col"> | ||||||
|           <div class="flex-group-left flexcol"> |           <div class="flex-group-left flexcol"> | ||||||
|             <ul class="carac-list alterne-list"> |             <ul class="carac-list alterne-list"> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.hbs"}} | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.hbs"}} | ||||||
|             </ul> |             </ul> | ||||||
|           </div> |           </div> | ||||||
|           <div class="flex-group-left flexcol" > |           <div class="flex-group-left flexcol" > | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.hbs"}} | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| @@ -56,7 +56,7 @@ | |||||||
|       <div class="tab competences" data-group="primary" data-tab="competences"> |       <div class="tab competences" data-group="primary" data-tab="competences"> | ||||||
|         <div class="flexrow"> |         <div class="flexrow"> | ||||||
|           <span> |           <span> | ||||||
|             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} |             {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs"}} | ||||||
|           </span> |           </span> | ||||||
|           <span class="flexrow"><a class="show-hide-competences"> |           <span class="flexrow"><a class="show-hide-competences"> | ||||||
|             {{#if options.showCompNiveauBase}} |             {{#if options.showCompNiveauBase}} | ||||||
| @@ -85,18 +85,18 @@ | |||||||
|         </div> |         </div> | ||||||
|         <div class="grid {{#if (and options.vueDetaillee options.vueArchetype)}}grid-competence-archetype{{else}}grid-2col{{/if}}"> |         <div class="grid {{#if (and options.vueDetaillee options.vueArchetype)}}grid-competence-archetype{{else}}grid-2col{{/if}}"> | ||||||
|           <div class="competence-column"> |           <div class="competence-column"> | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.generale) categorie="Compétences générales"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.generale) categorie="Compétences générales"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.particuliere) categorie="Compétences Particulières"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.particuliere) categorie="Compétences Particulières"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.specialisee) categorie="Compétences Spécialisées"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.specialisee) categorie="Compétences Spécialisées"}} | ||||||
|           </div> |           </div> | ||||||
|           <div class="competence-column"> |           <div class="competence-column"> | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.html"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.hbs"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.melee) categorie="Compétences de Mêlée"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.melee) categorie="Compétences de Mêlée"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.tir) categorie="Compétences de Tir"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.tir) categorie="Compétences de Tir"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.lancer) categorie="Compétences de Lancer"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.lancer) categorie="Compétences de Lancer"}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.connaissance) categorie="Connaissances"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.connaissance) categorie="Connaissances"}} | ||||||
|             {{#if (or system.attributs.hautrevant.value options.vueDetaillee)}} |             {{#if (or system.attributs.hautrevant.value options.vueDetaillee)}} | ||||||
|             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html" competences=(filtreTriCompetences byCateg.draconic) categorie="Draconic"}} |             {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.hbs" competences=(filtreTriCompetences byCateg.draconic) categorie="Draconic"}} | ||||||
|             {{/if}} |             {{/if}} | ||||||
|           </div> |           </div> | ||||||
|           {{#if (and options.vueDetaillee options.vueArchetype)}} |           {{#if (and options.vueDetaillee options.vueArchetype)}} | ||||||
| @@ -109,8 +109,8 @@ | |||||||
|       {{/if}} |       {{/if}} | ||||||
|       {{#if options.isObserver}}{{!-- Combat Tab --}} |       {{#if options.isObserver}}{{!-- Combat Tab --}} | ||||||
|       <div class="tab combat" data-group="primary" data-tab="combat"> |       <div class="tab combat" data-group="primary" data-tab="combat"> | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/combat.html"}}<hr> |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/combat.hbs"}}<hr> | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessures.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs"}} | ||||||
|       </div> |       </div> | ||||||
| @@ -118,7 +118,7 @@ | |||||||
| 
 | 
 | ||||||
|       {{#if options.isObserver}}{{!-- Connaissances Tab --}} |       {{#if options.isObserver}}{{!-- Connaissances Tab --}} | ||||||
|       <div class="tab connaissances" data-group="primary" data-tab="connaissances"> |       <div class="tab connaissances" data-group="primary" data-tab="connaissances"> | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/taches.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/taches.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}} | ||||||
| @@ -144,7 +144,7 @@ | |||||||
|       {{!-- Equipment Tab --}} |       {{!-- Equipment Tab --}} | ||||||
|       <div class="tab items" data-group="primary" data-tab="items"> |       <div class="tab items" data-group="primary" data-tab="items"> | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs"}} | ||||||
|         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-vehicules.hbs"}} |         {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-vehicules.hbs"}} | ||||||
|       </div> |       </div> | ||||||
| @@ -195,7 +195,7 @@ | |||||||
|               <label for="system.heure">Heure de naissance</label> |               <label for="system.heure">Heure de naissance</label> | ||||||
|               <select type="text" name="system.heure" value="{{system.heure}}" data-dtype="String"> |               <select type="text" name="system.heure" value="{{system.heure}}" data-dtype="String"> | ||||||
|                 {{#select system.heure}} |                 {{#select system.heure}} | ||||||
|                 {{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}} |                 {{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.hbs"}} | ||||||
|                 {{/select}} |                 {{/select}} | ||||||
|               </select> |               </select> | ||||||
|             </li> |             </li> | ||||||
| @@ -228,8 +228,8 @@ | |||||||
|           <div class="form-group large-editor"> |           <div class="form-group large-editor"> | ||||||
|             {{editor notes target="system.notes" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} |             {{editor notes target="system.notes" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} | ||||||
|           </div> |           </div> | ||||||
|           {{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-journal.html"}} |           {{> "systems/foundryvtt-reve-de-dragon/templates/actor/xp-journal.hbs"}} | ||||||
|           {{> "systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}} |           {{> "systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs"}} | ||||||
|         </article> |         </article> | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
| @@ -46,7 +46,7 @@ | |||||||
|     {{!-- Carac Tab --}} |     {{!-- Carac Tab --}} | ||||||
|     <div class="tab" data-group="primary" data-tab="description"> |     <div class="tab" data-group="primary" data-tab="description"> | ||||||
|       <div class="flexrow"> |       <div class="flexrow"> | ||||||
|         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html"}} |         {{>"systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.hbs"}} | ||||||
|       </div> |       </div> | ||||||
|       <div class="grid grid-2col"> |       <div class="grid grid-2col"> | ||||||
|         <div class="flex-group-left flexcol"> |         <div class="flex-group-left flexcol"> | ||||||
| @@ -55,7 +55,7 @@ | |||||||
|               <span class="carac-label">Catégorie</span> |               <span class="carac-label">Catégorie</span> | ||||||
|               <select name="system.categorie" class="categorie" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> |               <select name="system.categorie" class="categorie" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> | ||||||
|                 {{#select system.categorie}} |                 {{#select system.categorie}} | ||||||
|                 {{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html"}} |                 {{>"systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.hbs"}} | ||||||
|                 {{/select}} |                 {{/select}} | ||||||
|               </select> |               </select> | ||||||
|             </li> |             </li> | ||||||
| @@ -86,13 +86,13 @@ | |||||||
|       <div class="form-group large-editor"> |       <div class="form-group large-editor"> | ||||||
|         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} |         {{editor description target="system.description" button=true owner=options.isOwner editable=options.editable engine="prosemirror"}} | ||||||
|       </div> |       </div> | ||||||
|       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}} |       {{>"systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs"}} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     {{!-- Equipment Tab --}} |     {{!-- Equipment Tab --}} | ||||||
|     <div class="tab items" data-group="primary" data-tab="items"> |     <div class="tab items" data-group="primary" data-tab="items"> | ||||||
|       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} |       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} | ||||||
|       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}} |       {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.hbs"}} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|   </section> |   </section> | ||||||
| @@ -4,7 +4,7 @@ | |||||||
|     </label> |     </label> | ||||||
|     <label class="carac-xp"/> |     <label class="carac-xp"/> | ||||||
|   </li> |   </li> | ||||||
|   {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}} |   {{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.hbs"}} | ||||||
|   <li class="caracteristique flexrow list-item"> |   <li class="caracteristique flexrow list-item"> | ||||||
|     <span class="carac-label" name="catEntite">Catégorie</span> |     <span class="carac-label" name="catEntite">Catégorie</span> | ||||||
|     <select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> |     <select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}> | ||||||
| @@ -47,7 +47,7 @@ | |||||||
|     {{/if}} |     {{/if}} | ||||||
|     {{/unless}} |     {{/unless}} | ||||||
|     <br> |     <br> | ||||||
|     {{> "systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}} |     {{> "systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.hbs"}} | ||||||
|     <br> |     <br> | ||||||
|   </section> |   </section> | ||||||
| </form> | </form> | ||||||
| @@ -3,7 +3,7 @@ | |||||||
|     <div>{{system.compteurs.etat.label}}: {{system.compteurs.etat.value}}</div> |     <div>{{system.compteurs.etat.label}}: {{system.compteurs.etat.value}}</div> | ||||||
|     <div>Sur-encombrement: {{calc.surenc}}</div> |     <div>Sur-encombrement: {{calc.surenc}}</div> | ||||||
|     <div>{{calc.resumeBlessures}}</div> |     <div>{{calc.resumeBlessures}}</div> | ||||||
|     {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.html"}} |     {{>"systems/foundryvtt-reve-de-dragon/templates/actor/header-effects.hbs"}} | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| @@ -36,6 +36,6 @@ | |||||||
| </li> | </li> | ||||||
| {{/if}} | {{/if}} | ||||||
| <hr> | <hr> | ||||||
| {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html"}} | {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.hbs"}} | ||||||
| {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs"}} | {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs"}} | ||||||
| {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs"}} | {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs"}} | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|   {{else if (eq type 'heure')}} |   {{else if (eq type 'heure')}} | ||||||
|   <select class="current-value" name="current.{{path}}" value="{{value}}" type="text" data-dtype="String"> |   <select class="current-value" name="current.{{path}}" value="{{value}}" type="text" data-dtype="String"> | ||||||
|     {{#select value}} |     {{#select value}} | ||||||
|     {{> "systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}} |     {{> "systems/foundryvtt-reve-de-dragon/templates/enum-heures.hbs"}} | ||||||
|     {{/select}} |     {{/select}} | ||||||
|   </select> |   </select> | ||||||
|   {{else}} |   {{else}} | ||||||
|   | |||||||
| @@ -1,15 +1,18 @@ | |||||||
| <div> | <div> | ||||||
|   <ul class="item-list"> |   <ul class="item-list"> | ||||||
|     <li class="item flexrow"> |     <li class="flexrow"> | ||||||
|       <label class="derivee-label" for="system.compteurs.experience.value">Stress transformé</label> |       <label class="derivee-label" for="system.compteurs.experience.value">Stress transformé</label> | ||||||
|       {{#if options.vueDetaillee}} |       {{#if options.vueDetaillee}} | ||||||
|       <input class="derivee-value" type="number" name="system.compteurs.experience.value" value="{{system.compteurs.experience.value}}" data-dtype="number" size="3"/> |       <input class="resource-content" | ||||||
|  |         type="text" data-dtype="Number" size="3" | ||||||
|  |         name="system.compteurs.experience.value" | ||||||
|  |         value="{{system.compteurs.experience.value}}"/> | ||||||
|       {{else}} |       {{else}} | ||||||
|       <label name="system.compteurs.experience.value">{{system.compteurs.experience.value}}</label> |       <label name="system.compteurs.experience.value">{{system.compteurs.experience.value}}</label> | ||||||
|       {{/if}} |       {{/if}} | ||||||
|     </li> |     </li> | ||||||
|     {{#if options.vueDetaillee}} |     {{#if options.vueDetaillee}} | ||||||
|     <li class="item flexrow"> |     <li class="flexrow"> | ||||||
|       <span class="generic-label">Total XP compétences</span> |       <span class="generic-label">Total XP compétences</span> | ||||||
|       <span class="competence-value">{{calc.competenceXPTotal}}</span> |       <span class="competence-value">{{calc.competenceXPTotal}}</span> | ||||||
|     </li> |     </li> | ||||||
| @@ -6,4 +6,4 @@ | |||||||
|   {{#if vendeur}}à {{vendeur.name}}{{/if}}: |   {{#if vendeur}}à {{vendeur.name}}{{/if}}: | ||||||
|   {{quantiteTotal}} {{item.name}} pour {{prixTotal}} sols. |   {{quantiteTotal}} {{item.name}} pour {{prixTotal}} sols. | ||||||
| </p> | </p> | ||||||
| {{> "systems/foundryvtt-reve-de-dragon/templates/chat-description.html" item.system}} | {{> "systems/foundryvtt-reve-de-dragon/templates/chat-description.hbs" item.system}} | ||||||
| @@ -6,7 +6,7 @@ | |||||||
| <div> | <div> | ||||||
|   {{#if system.magique}} |   {{#if system.magique}} | ||||||
|     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. |     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. | ||||||
|     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} |     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.hbs"}} | ||||||
|   {{/if}} |   {{/if}} | ||||||
|   <br>Les effets de la potions sont à gérer manuellement, en fonction de sa nature |   <br>Les effets de la potions sont à gérer manuellement, en fonction de sa nature | ||||||
|   {{#if system.magique}} |   {{#if system.magique}} | ||||||
| @@ -6,7 +6,7 @@ | |||||||
| <div> | <div> | ||||||
|   {{#if system.magique}} |   {{#if system.magique}} | ||||||
|     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. |     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. | ||||||
|     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} |     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.hbs"}} | ||||||
|     {{#if rolled.isEchec}} |     {{#if rolled.isEchec}} | ||||||
|     <br>La potion fait effet ! |     <br>La potion fait effet ! | ||||||
|       {{alias}} a perdu 1 point de rêve et s'endort pour {{guerisonDureeValue}} {{guerisonDureeUnite}} et |       {{alias}} a perdu 1 point de rêve et s'endort pour {{guerisonDureeValue}} {{guerisonDureeUnite}} et | ||||||
| @@ -6,7 +6,7 @@ | |||||||
| <div> | <div> | ||||||
|   {{#if system.magique}} |   {{#if system.magique}} | ||||||
|     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. |     Le Jet de Résistance est {{#if rolled.isSuccess}}réussi{{else}}échoué{{/if}}. | ||||||
|     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} |     {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.hbs"}} | ||||||
|     {{#if rolled.isEchec}} |     {{#if rolled.isEchec}} | ||||||
|       <br>La potion fait effet! |       <br>La potion fait effet! | ||||||
|       {{alias}} a perdu 1 point de rêve et s'endort pour {{guerisonMinutes}} minutes. A son réveil, les blessures suivantes seront guéries :  |       {{alias}} a perdu 1 point de rêve et s'endort pour {{guerisonMinutes}} minutes. A son réveil, les blessures suivantes seront guéries :  | ||||||
| @@ -2,19 +2,22 @@ | |||||||
|   <h4 class="rdd-roll-part">{{alias}} réussit une attaque particulière!</strong></h4> |   <h4 class="rdd-roll-part">{{alias}} réussit une attaque particulière!</strong></h4> | ||||||
|   {{#if isForce}} |   {{#if isForce}} | ||||||
|   <br> |   <br> | ||||||
|   <a class="chat-card-button particuliere-attaque" data-mode="force" data-attackerId="{{attackerId}}"> |   <a class="chat-card-button particuliere-attaque" data-mode="force" data-attackerId="{{attackerId}}" | ||||||
|  |     data-defenderTokenId="{{defenderToken.id}}" data-attackerTokenId="{{attackerToken.id}}"> | ||||||
|     Attaquer en Force |     Attaquer en Force | ||||||
|   </a> |   </a> | ||||||
|   {{/if}} |   {{/if}} | ||||||
|   {{#if isRapide}} |   {{#if isRapide}} | ||||||
|   <br> |   <br> | ||||||
|   <a class="chat-card-button particuliere-attaque" data-mode="rapidite" data-attackerId="{{attackerId}}"> |   <a class="chat-card-button particuliere-attaque" data-mode="rapidite" data-attackerId="{{attackerId}}" | ||||||
|  |     data-defenderTokenId="{{defenderToken.id}}" data-attackerTokenId="{{attackerToken.id}}"> | ||||||
|     Attaquer en Rapidité |     Attaquer en Rapidité | ||||||
|   </a> |   </a> | ||||||
|   {{/if}} |   {{/if}} | ||||||
|   {{#if isFinesse}} |   {{#if isFinesse}} | ||||||
|   <br> |   <br> | ||||||
|   <a class="chat-card-button particuliere-attaque" data-mode="finesse" data-attackerId="{{attackerId}}"> |   <a class="chat-card-button particuliere-attaque" data-mode="finesse" data-attackerId="{{attackerId}}" | ||||||
|  |     data-defenderTokenId="{{defenderToken.id}}" data-attackerTokenId="{{attackerToken.id}}"> | ||||||
|     Attaquer en Finesse |     Attaquer en Finesse | ||||||
|   </a> |   </a> | ||||||
|   {{/if}} |   {{/if}} | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user