From c57f140c5428bdd82f729381789abc79914fc5ff Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 30 Mar 2023 00:19:12 +0200 Subject: [PATCH] Ajout de l'origine d'une blessure En combat, indication de l'origine des blessures --- module/actor.js | 18 ++++----- module/dialog-validation-encaissement.js | 4 +- module/item/blessure.js | 48 ++++++++++++++++-------- module/migrations.js | 3 +- module/time/rdd-timestamp.js | 22 ++++++----- template.json | 2 +- templates/actor/blessure.hbs | 7 ++-- templates/item-blessure-sheet.html | 5 ++- 8 files changed, 65 insertions(+), 44 deletions(-) diff --git a/module/actor.js b/module/actor.js index a941d79b..5f308945 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3209,10 +3209,6 @@ export class RdDActor extends RdDBaseActor { if (attacker && !await attacker.accorder(this, 'avant-encaissement')) { return; } - this.validerEncaissement(rollData, show); - } - - async validerEncaissement(rollData, show) { if (ReglesOptionelles.isUsing('validation-encaissement-gr') && !game.user.isGM) { RdDBaseActor.remoteActorCall({ actorId: this.id, @@ -3223,18 +3219,18 @@ export class RdDActor extends RdDBaseActor { } const armure = await this.computeArmure(rollData); if (ReglesOptionelles.isUsing('validation-encaissement-gr')) { - DialogValidationEncaissement.validerEncaissement(this, rollData, armure, show, (encaissement, show) => this._appliquerEncaissement(encaissement, show)); + DialogValidationEncaissement.validerEncaissement(this, rollData, armure, show, (encaissement, show) => this._appliquerEncaissement(encaissement, show, attacker)); } else { let encaissement = await RdDUtility.jetEncaissement(rollData, armure, { showDice: SHOW_DICE }); - await this._appliquerEncaissement(encaissement, show) + await this._appliquerEncaissement(encaissement, show, attacker) } } - async _appliquerEncaissement(encaissement, show) { + async _appliquerEncaissement(encaissement, show, attacker) { let santeOrig = duplicate(this.system.sante); - const blessure = await this.ajouterBlessure(encaissement); // Will upate the result table + const blessure = await this.ajouterBlessure(encaissement, attacker); // Will update the result table const perteVie = this.isEntite() ? { newValue: 0 } : await this.santeIncDec("vie", -encaissement.vie); @@ -3268,7 +3264,7 @@ export class RdDActor extends RdDBaseActor { } /* -------------------------------------------- */ - async ajouterBlessure(encaissement) { + async ajouterBlessure(encaissement, attacker = undefined) { if (this.isEntite()) return; // Une entité n'a pas de blessures if (encaissement.gravite < 0) return; if (encaissement.gravite > 0) { @@ -3281,7 +3277,7 @@ export class RdDActor extends RdDBaseActor { } } const endActuelle = Number(this.system.sante.endurance.value); - const blessure = await RdDItemBlessure.createBlessure(this, encaissement.gravite, encaissement.dmg.loc.label); + const blessure = await RdDItemBlessure.createBlessure(this, encaissement.gravite, encaissement.dmg.loc.label, attacker); if (blessure.isCritique()) { encaissement.endurance = endActuelle; } @@ -3534,7 +3530,7 @@ export class RdDActor extends RdDBaseActor { for (let blessure of blessures) { if (pointsGuerison >= blessure.system.gravite) { pointsGuerison -= blessure.system.gravite; - guerisonData.list.push(`1 Blessure ${blessure.system.labelGravite} (${blessure.system.gravite} points)`); + guerisonData.list.push(`1 Blessure ${blessure.system.label} (${blessure.system.gravite} points)`); ids.push(blessure.id) } } diff --git a/module/dialog-validation-encaissement.js b/module/dialog-validation-encaissement.js index a5d092ea..4172bcfe 100644 --- a/module/dialog-validation-encaissement.js +++ b/module/dialog-validation-encaissement.js @@ -23,7 +23,7 @@ export class DialogValidationEncaissement extends Dialog { constructor(html, actor, rollData, armure, encaissement, show, onEncaisser) { // Common conf let buttons = { - "valider": { label: "Valider", callback: html => this.validerEncaissement() }, + "valider": { label: "Valider", callback: html => this.onValider() }, "annuler": { label: "Annuler", callback: html => { } }, }; @@ -64,7 +64,7 @@ export class DialogValidationEncaissement extends Dialog { }); } - async validerEncaissement() { + async onValider() { this.encaissement = await RdDUtility.jetEncaissement(this.rollData, this.armure, { showDice: SHOW_DICE, forceDiceResult: this.forceDiceResult}); this.onEncaisser(this.encaissement, this.show) } diff --git a/module/item/blessure.js b/module/item/blessure.js index dbf4ad87..0b1076ba 100644 --- a/module/item/blessure.js +++ b/module/item/blessure.js @@ -14,11 +14,11 @@ const TACHES_SOIN_BLESSURE = { } const definitionsBlessures = [ - { type: "contusion", gravite: 0, labelGravite: 'Contusion/éraflure', max: 100, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/eraflure.webp" }, - { type: "legere", gravite: 2, labelGravite: 'Légère', max: 5, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, - { type: "grave", gravite: 4, labelGravite: 'Grave', max: 2, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, - { type: "critique", gravite: 6, labelGravite: 'Critique', max: 1, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, - { type: "mort", gravite: 8, labelGravite: 'Mort', max: 1, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/mort.webp" } + { type: "contusion", gravite: 0, label: 'Contusion/éraflure', max: 100, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/eraflure.webp" }, + { type: "legere", gravite: 2, label: 'Légère', max: 5, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, + { type: "grave", gravite: 4, label: 'Grave', max: 2, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, + { type: "critique", gravite: 6, label: 'Critique', max: 1, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp" }, + { type: "mort", gravite: 8, label: 'Mort', max: 1, icon: "systems/foundryvtt-reve-de-dragon/icons/sante/mort.webp" } ] export class RdDItemBlessure extends RdDItem { @@ -29,7 +29,7 @@ export class RdDItemBlessure extends RdDItem { prepareDerivedData() { super.prepareDerivedData(); - this.system.labelGravite = this.getLabelGravite() + this.system.label = this.getLabelGravite() } static prepareTacheSoin(gravite) { @@ -40,19 +40,19 @@ export class RdDItemBlessure extends RdDItem { } return mergeObject(duplicate(BASE_TACHE_SOIN_BLESSURE), tache) } - static async createBlessure(actor, gravite, localisation = '') { + static async createBlessure(actor, gravite, localisation = '', attacker) { const definition = RdDItemBlessure.getDefinition(gravite) const blessure = { - name: definition.labelGravite, + name: definition.label, type: 'blessure', img: definition.icon, system: { gravite: gravite, difficulte: - gravite, - localisation: localisation + localisation: localisation, + origine: attacker?.name ?? "" } } - const blessures = await actor.createEmbeddedDocuments('Item', [blessure]) return blessures[0] } @@ -100,12 +100,12 @@ export class RdDItemBlessure extends RdDItem { const gravite = this.system.gravite; const graviteMoindre = gravite - 2; const moindres = blessures.filter(it => it.system.gravite == graviteMoindre, 'blessures').length - const labelGravite = this.getLabelGravite(); + const label = this.getLabelGravite(); let rolled = await actor.jetRecuperationConstitution(this.system.soinscomplets.bonus, message); if (rolled.isETotal) { - message.content += ` -- une blessure ${labelGravite} s'infecte (temps de guérison augmenté de ${gravite} jours, perte de vie)`; + message.content += ` -- une blessure ${label} s'infecte (temps de guérison augmenté de ${gravite} jours, perte de vie)`; await actor.santeIncDec("vie", -1); mergeObject(update, { system: { fin: { indexDate: timestamp.addJours(gravite).indexDate } } @@ -113,13 +113,13 @@ export class RdDItemBlessure extends RdDItem { } else { if (!isMaladeEmpoisonne && rolled.isSuccess && this.peutRetrograder(graviteMoindre, moindres)) { - message.content += ` -- une blessure ${labelGravite} cicatrise`; + message.content += ` -- une blessure ${label} cicatrise`; mergeObject(update, { system: { gravite: graviteMoindre, fin: { indexDate: timestamp.addJours(graviteMoindre).indexDate } } }); } else { - message.content += ` -- une blessure ${labelGravite} reste stable`; + message.content += ` -- une blessure ${label} reste stable`; } } await this.update(update); @@ -152,7 +152,7 @@ export class RdDItemBlessure extends RdDItem { } getLabelGravite() { - return RdDItemBlessure.getDefinition(this.system.gravite).labelGravite + return RdDItemBlessure.getDefinition(this.system.gravite).label } static getDefinition(gravite) { @@ -178,4 +178,22 @@ export class RdDItemBlessure extends RdDItem { isMort() { return this.system.gravite > 6 } + + getProprietes() { + return [ + RdDItem.propertyIfDefined('Causée par', this.system.origine, this.system.origine), + `Heure et Date: ${new RdDTimestamp(this.system.temporel.debut).formatDateHeure()}`, + RdDItem.propertyIfDefined('Blessé', this.parent?.name, this.parent), + `Localisation: ${this.system.localisation}`, + `Gravité: ${RdDItemBlessure.getDefinition(this.system.gravite).label}`, + `Difficulté des soins: ${this.system.difficulte}`, + (this.system.soinscomplets.done ? + `Bonus soins complets: ${this.system.soinscomplets.bonus}` : + (this.system.premierssoins.done ? + `Bonus premiers soins: ${this.system.premierssoins.bonus}` : + `Points de tâche: ${this.system.premierssoins.tache}` + ) + ), + ]; + } } diff --git a/module/migrations.js b/module/migrations.js index 0287775d..5d5a3ecf 100644 --- a/module/migrations.js +++ b/module/migrations.js @@ -452,8 +452,7 @@ class _10_7_0_MigrationBlessures extends Migration { fin: { indexDate: datePremiereRecup.indexDate, indexMinute: 0 }, premierssoins: { done: blessure.psdone, bonus: blessure.premiers_soins }, soinscomplets: { done: blessure.scdone, bonus: blessure.soins_complets }, - localisation: blessure.localisation, - jours: blessure.jours + localisation: blessure.localisation } } } diff --git a/module/time/rdd-timestamp.js b/module/time/rdd-timestamp.js index a28afaff..948dd97b 100644 --- a/module/time/rdd-timestamp.js +++ b/module/time/rdd-timestamp.js @@ -228,6 +228,15 @@ export class RdDTimestamp { this.indexMinute = indexMinute ?? 0 } + get annee() { return Math.floor(this.indexDate / RDD_JOURS_PAR_AN) } + get mois() { return Math.floor((this.indexDate % RDD_JOURS_PAR_AN) / RDD_JOURS_PAR_MOIS) } + get jour() { return (this.indexDate % RDD_JOURS_PAR_AN) % RDD_JOURS_PAR_MOIS } + get heure() { return Math.floor(this.indexMinute / RDD_MINUTES_PAR_HEURES) } + get minute() { return this.indexMinute % RDD_MINUTES_PAR_HEURES } + get round() { return ROUNDS_PAR_MINUTE * (this.indexMinute - Math.floor(this.indexMinute)) } + get angleHeure() { return this.indexMinute / RDD_MINUTES_PAR_JOUR * 360 - 45 } + get angleMinute() { return this.indexMinute / RDD_MINUTES_PAR_HEURES * 360 + 45 } + /** * Convertit le timestamp en une structure avec les informations utiles * pour afficher la date et l'heure @@ -244,15 +253,6 @@ export class RdDTimestamp { }; } - get annee() { return Math.floor(this.indexDate / RDD_JOURS_PAR_AN) } - get mois() { return Math.floor((this.indexDate % RDD_JOURS_PAR_AN) / RDD_JOURS_PAR_MOIS) } - get jour() { return (this.indexDate % RDD_JOURS_PAR_AN) % RDD_JOURS_PAR_MOIS } - get heure() { return Math.floor(this.indexMinute / RDD_MINUTES_PAR_HEURES) } - get minute() { return this.indexMinute % RDD_MINUTES_PAR_HEURES } - get round() { return ROUNDS_PAR_MINUTE * (this.indexMinute - Math.floor(this.indexMinute)) } - get angleHeure() { return this.indexMinute / RDD_MINUTES_PAR_JOUR * 360 - 45 } - get angleMinute() { return this.indexMinute / RDD_MINUTES_PAR_HEURES * 360 + 45} - formatDate() { const jour = this.jour + 1; const mois = RdDTimestamp.definition(this.mois).label; @@ -260,6 +260,10 @@ export class RdDTimestamp { return `${jour} ${mois}` + (annee ? ' ' + annee : ''); } + formatDateHeure() { + return `${RdDTimestamp.definition(this.heure).label}, ${this.formatDate()}`; + } + nouveauJour() { return new RdDTimestamp({ indexDate: this.indexDate + 1, indexMinute: 0 }) } nouvelleHeure() { diff --git a/template.json b/template.json index a58c064c..149ba47f 100644 --- a/template.json +++ b/template.json @@ -620,7 +620,7 @@ "bonus": 0 }, "localisation": "", - "jours": 0 + "origine": "" }, "maladie": { "templates": ["description", "temporel"], diff --git a/templates/actor/blessure.hbs b/templates/actor/blessure.hbs index 056ea377..4dd54b07 100644 --- a/templates/actor/blessure.hbs +++ b/templates/actor/blessure.hbs @@ -1,8 +1,8 @@ -
  • +
  • - {{system.labelGravite}} + {{system.label}} {{#if (gt system.gravite 6)}} @@ -30,7 +30,8 @@ {{/if}} - {{system.localisation}} + {{#if system.origine}}Par {{system.origine}}{{/if}} + {{#if system.localisation}}{{system.localisation}}{{/if}} diff --git a/templates/item-blessure-sheet.html b/templates/item-blessure-sheet.html index fec18247..9f949ff5 100644 --- a/templates/item-blessure-sheet.html +++ b/templates/item-blessure-sheet.html @@ -17,6 +17,10 @@ +
    + + +
    {{#if (lt system.gravite 7)}}
    @@ -35,7 +39,6 @@ {{/if}} -
    {{#if system.premierssoins.done}}