diff --git a/module/actor.js b/module/actor.js index 34bf85ac..af1cc5ba 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1765,10 +1765,10 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective' let addMsg = ""; - let rencSpecial = this.data.items.find(item => RdDItem.isMauvaiseRencontreEnPerspective(item)); + let rencSpecial = this.data.items.find(item => RdDItem.isHRMauvaiseRencontreEnPerspective(item)); if (rencSpecial) { rencSpecial = duplicate(rencSpecial); // To keep it - if (rencSpecial.type == 'queue') { + if (rencSpecial.type != 'souffle') { this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues addMsg = " La queue a été supprimée de votre fiche automatiquement"; } else { @@ -1784,15 +1784,14 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ getTMRFatigue() { // Pour l'instant uniquement Inertie Draconique - let inertieDraconique = this.data.items.find(item => item.type == 'queue' && item.name.toLowerCase().includes('inertie draconique')); - if (inertieDraconique) { + let countInertieDraconique = this.data.items.filter(item => RdDItem.isHRInertieDraconique(item)).length; + if (countInertieDraconique>0) { ChatMessage.create({ - content: "Vous êtes sous le coup d'une Inertie Draconique : vous perdez 2 cases de Fatigue par déplacement au lieu d'1.", + content: `Vous êtes sous le coup d'une Inertie Draconique : vous perdez ${countInertieDraconique+1} cases de Fatigue par déplacement au lieu d'une.`, whisper: ChatMessage.getWhisperRecipients(game.user.name) }); - return 2; } - return 1; + return countInertieDraconique + 1; } /* -------------------------------------------- */ @@ -1808,7 +1807,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ isDoubleResistanceFleuve() { - let resistFleuve = this.data.items.find(item => RdDItem.isDoubleResistanceFleuve(item)); + let resistFleuve = this.data.items.find(item => RdDItem.isHRDoubleResistanceFleuve(item)); if (resistFleuve) { ChatMessage.create({ content: "Vous êtes sous le coup d'une Double Résistance du Fleuve : vous devez maîtriser 2 fois chaque case humide, un second jet est donc effectué.", @@ -1821,7 +1820,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async checkSoufflePeage(cellDescr) { - let peage = this.data.items.find(item => item.type == 'souffle' && item.name.toLowerCase().includes('péage')); + let peage = this.data.items.find(item => RdDItem.isHRPeage(item)); if (peage && (cellDescr.type == 'pont' || cellDescr.type == 'cite')) { await this.reveActuelIncDec(-1); ChatMessage.create({ @@ -1842,7 +1841,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ isCaseHumideAdditionelle(tmr) { - if (tmr.type == 'pont' && this.data.items.find(it => RdDItem.isPontImpraticable(it))) { + if (tmr.type == 'pont' && this.data.items.find(it => RdDItem.isHRPontImpraticable(it))) { ChatMessage.create({ content: tmr.label +": Vous êtes sous le coup d'une Impraticabilité des Ponts : ce pont doit être maîtrisé comme une case humide.", whisper: ChatMessage.getWhisperRecipients(game.user.name) @@ -1852,7 +1851,7 @@ export class RdDActor extends Actor { // Débordement ? let isTmrInondee = this.data.items.filter(it => RdDItem.isCaseTMR(it)) .filter(it => it.data.coord == tmr.coord) - .find(it => RdDItem.isCaseInnondee(it)); + .find(it => RdDItem.isHRCaseInnondee(it)); if (isTmrInondee) { ChatMessage.create({ content: tmr.label +": cette case est inondée, elle doit être maîtrisée comme une case humide.", @@ -2066,7 +2065,7 @@ export class RdDActor extends Actor { height: 600, callbacks: [ this.createCallbackExperience(), - { action: r => this._resultArt(r) } + { action: r => callBackResult(r) } ] }); dialog.render(true); diff --git a/module/item.js b/module/item.js index 4de0d66a..a7d43f62 100644 --- a/module/item.js +++ b/module/item.js @@ -3,23 +3,39 @@ import { Misc } from "./misc.js"; /* -------------------------------------------- */ export class RdDItem { - static isPontImpraticable(item) { - return item.type == 'souffle' && item.name.toLowerCase().includes(' des ponts'); + static isQueueDragon(item) { + return item.type == 'queue' || item.type == 'ombre'; } - static isDoubleResistanceFleuve(item) { - return item.type == 'souffle' && item.name.toLowerCase().includes('résistance du fleuve') + static isSouffleDragon(item) { + return item.type == 'souffle'; } - static isCaseInnondee(item) { - return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement'; + static isHRPontImpraticable(item) { + return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes(' des ponts'); + } + + static isHRDoubleResistanceFleuve(item) { + return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes('résistance du fleuve') + } + static isHRPeage(item) { + return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes('péage') + } + + static isHRMauvaiseRencontreEnPerspective(item) { + return (RdDItem.isQueueDragon(item) || RdDItem.isSouffleDragon(item)) && item.name.toLowerCase().includes('mauvaise rencontre') + } + + static isHRInertieDraconique(item) { + return RdDItem.isQueueDragon(item) && item.name.toLowerCase().includes('inertie draconique') } static isCaseTMR(item) { return item.type == 'casetmr'; } - static isMauvaiseRencontreEnPerspective(item) { - return (item.type == 'queue' || item.type == 'ombre' || item.type == 'souffle') && item.name.toLowerCase().includes('mauvaise rencontre') + static isHRCaseInnondee(item) { + return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement'; } + } \ No newline at end of file diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 9745a5f6..ac36b550 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -36,7 +36,8 @@ export class RdDTMRDialog extends Dialog { this.actor = actor; this.actor.tmrApp = this; // reference this app in the actor structure this.viewOnly = mode == "visu" - this.nbFatigue = this.viewOnly ? 0 : 1; // 1 premier point de fatigue du à la montée + this.fatigueParCase = this.viewOnly ? 0 : this.actor.getTMRFatigue(); + this.cumulFatigue = 0; this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list); this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list); this.casesSpeciales = this.actor.data.items.filter(item => item.type == 'casetmr'); @@ -51,7 +52,7 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ close() { - this.actor.santeIncDec("fatigue", this.nbFatigue).then(super.close()); // moving 1 cell costs 1 fatigue + this.actor.santeIncDec("fatigue", this.cumulFatigue).then(super.close()); // moving 1 cell costs 1 fatigue this.actor.tmrApp = undefined; // Cleanup reference this.actor.setStatusDemiReve(false); if (!this.viewOnly) { @@ -174,7 +175,7 @@ export class RdDTMRDialog extends Dialog { this.close(); return true; } - const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.nbFatigue; + const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.cumulFatigue; if (resteAvantInconscience <= 0) { this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !"); this.quitterLesTMRInconscient(); @@ -245,7 +246,7 @@ export class RdDTMRDialog extends Dialog { else if (rencontreData.rolled.isEchec && rencontreData.rencontre.isPersistant) { setTimeout(() => { rencontreData.nbRounds++; - this.nbFatigue += 1; + this.cumulFatigue += this.fatigueParCase; this._tentativeMaitrise(rencontreData); this._deleteTmrMessages(rencontreData.actor, rencontreData.nbRounds); }, 2000); @@ -609,7 +610,7 @@ export class RdDTMRDialog extends Dialog { await this.actor.update({ "data.reve.tmrpos": tmrPos }); this._updateDemiReve(); - this.nbFatigue += 1; + this.cumulFatigue += this.fatigueParCase; this.updateValuesDisplay(); game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_tmr_move", data: { @@ -700,6 +701,7 @@ export class RdDTMRDialog extends Dialog { // Gestion du cout de montée en points de rêve let reveCout = (this.tmrdata.isRapide && !this.actor.checkTeteDeplacementAccelere()) ? -2 : -1; + this.cumulFatigue += this.fatigueParCase; reveCout -= this.actor.checkMonteeLaborieuse(); await this.actor.reveActuelIncDec(reveCout); // Le reste... @@ -707,7 +709,6 @@ export class RdDTMRDialog extends Dialog { let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord); await this.manageRencontre(tmr, () => { this.postRencontre(tmr); - this.nbFatigue = this.actor.getTMRFatigue(); this.actor.displayTMRQueueSouffleInformation(); }); }