diff --git a/module/actor.js b/module/actor.js index 7997bbed..6aa2251a 100644 --- a/module/actor.js +++ b/module/actor.js @@ -365,6 +365,8 @@ export class RdDActor extends Actor { message.content += "
Vous êtes bien reposé"; } } + + /* -------------------------------------------- */ _calculRecuperationSegment(actuel) { const segments = RdDUtility.getSegmentsFatigue(this.data.data.sante.endurance.max); diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 3c6069cc..de07c6d1 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -123,23 +123,44 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ /** Gère les rencontres avec du post-processing graphique (passeur, messagers, tourbillons, ...) */ - rencontrePostProcess( rencontreData) { + async rencontrePostProcess( rencontreData) { if (!rencontreData) return; // Sanity check this.rencontreState = rencontreData.state; // garder la trace de l'état en cours - if ( this.rencontreState == 'passeur') { - console.log("Processing passeur"); + let locList + if ( this.rencontreState == 'passeur' || this.rencontreState == 'messager' ) { // Récupère la liste des cases à portées - let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants ); - this.colorierZoneRencontre( locList ); - } else if ( this.rencontreState == 'messager') { - console.log("Processing messager"); - // Récupère la liste des cases à portées - let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants ); - this.colorierZoneRencontre( locList ); + locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants ); + + } else if ( this.rencontreState == 'changeur' ) { + // Liste des cases de même type + locList = TMRUtility.getLocationTypeList( this.actor.data.data.reve.tmrpos.coord ); + + } else if ( this.rencontreState == 'reflet' ) { + this.nbFatigue += 1; + } else { this.currentRencontre = undefined; // Cleanup, not used anymore } + + if ( locList ) + this.colorierZoneRencontre( locList ); + + } + /* -------------------------------------------- */ + checkQuitterTMR() { + if ( this.actor.data.data.reve.reve.value == 0) { + ChateMessage.create( { content: "Vos Points de Rêve sont à 0 : vous quittez les Terres médianes !"} ); + this.close(); + } + if ( this.nbFatigue == this.actor.data.data.sante.fatigue.max ) { + ChateMessage.create({ content: "Vous vous écroulez de fatigue : vous quittez les Terres médianes !"}); + this.close(); + } + if ( this.actor.data.data.sante.vie.value == 0 ) { + ChateMessage.create({ content: "Vous n'avez plus de Points de Vie : vous quittez les Terres médianes !"}); + this.close(); + } } /* -------------------------------------------- */ @@ -150,9 +171,9 @@ export class RdDTMRDialog extends Dialog { const draconic = this.actor.getBestDraconic(); const carac = this.actor.getReveActuel(); // TODO: ajouter l'état général? - const etatGeneral = this.actor.data.data.compteurs.etat.value - const difficulte = draconic.data.niveau - this.currentRencontre.force; - console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force); + const etatGeneral = this.actor.data.data.compteurs.etat.value; + const difficulte = draconic.data.niveau - this.currentRencontre.force + etatGeneral; + console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force, etatGeneral); let rolled = RdDResolutionTable.roll(carac, difficulte); let message = "
Test : Rêve actuel / " + draconic.name + " / " + this.currentRencontre.name + "" + "
" @@ -172,10 +193,14 @@ export class RdDTMRDialog extends Dialog { this._tellToUser("Vous avez réussi à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message); } - this.rencontrePostProcess( rencontreData ); + await this.rencontrePostProcess( rencontreData ); console.log("-> matriser", this.currentRencontre); this.updateValuesDisplay(); + + this.checkQuitterTMR(); + if ( this.rencontreState == 'reflet') + this.maitriser(); } /* -------------------------------------------- */ @@ -247,6 +272,7 @@ export class RdDTMRDialog extends Dialog { refoulement.innerHTML = this.actor.data.data.reve.refoulement.value; let fatigueItem = document.getElementById("tmr-fatigue-table"); + console.log("Refresh : ", this.actor.data.data.sante.fatigue.value); fatigueItem.innerHTML = "" + RdDUtility.makeHTMLfatigueMatrix(this.actor.data.data.sante.fatigue.value, this.actor.data.data.sante.endurance.max).html() + "
"; } @@ -338,13 +364,13 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ processClickPostRencontre( coord ) { let deplacementType = "erreur"; - if (this.rencontreState == 'passeur' || this.rencontreState == 'messager') { + if (this.rencontreState == 'passeur' || this.rencontreState == 'messager' || this.rencontreState == 'changeur') { console.log("Searching", this.currentRencontre.locList, coord); let isInArea = this.currentRencontre.locList.find(locCoord => locCoord == coord ); if ( isInArea ) { // OK ! deplacementType = (this.rencontreState == 'messager') ? 'messager' : 'saut'; } - } + } return deplacementType; } @@ -401,6 +427,8 @@ export class RdDTMRDialog extends Dialog { ui.notifications.error("Vous ne pouvez vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre"); console.log("STATUS :", myself.rencontreState, myself.currentRencontre); } + + this.checkQuitterTMR(); // Vérifier l'état des compteurs reve/fatigue/vie } /* -------------------------------------------- */ diff --git a/module/tmr-utility.js b/module/tmr-utility.js index 4ac959b7..ea967a76 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -226,7 +226,7 @@ const rencontresTable = [ {name:"Briseur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: true, cite: "81-85", sanctuaire: "81-85", plaines: "76-82", pont: "76-82", collines: "70-82", foret: "70-82", monts: "60-75", desert: "60-75", fleuve: "50-65", lac: "50-65", marais: "40-60", gouffre: "40-60", necropole: "31-50", desolation: "31-50" } }, - {name:"Reflet d'ancien Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1,quitterTMR: true, + {name:"Reflet d'ancien Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1,quitterTMR: false, cite: "86-90", sanctuaire: "86-90", plaines: "83-88", pont: "83-88", collines: "83-88", foret: "83-88", monts: "76-85", desert: "76-85", fleuve: "66-79", lac: "66-79", marais: "61-75", gouffre: "61-75", necropole: "51-65", desolation: "51-65" } }, {name:"Tourbillon blanc", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: true, @@ -400,13 +400,8 @@ export class TMRUtility { msg += "Ce Mangeur des Rêves disparait !" } else if (rencontre.name == "Changeur de Rêve") { - msg += "Ce Changeur des Rêves vous propose de vous déplacer sur une autre case de même type.
    " - let locList = this.getLocationTypeList( actor.data.data.reve.tmrpos.coord ); - for ( let coord of locList) { - let caseTMR = TMRMapping[coord]; - msg += "
  1. "+coord+" - " +caseTMR.label+"
  2. "; - } - msg += "
" + msg += "Ce Changeur des Rêves vous propose de vous déplacer sur une autre case de même type." + state = "changeur"; } else if (rencontre.name == "Briseur de Rêve") { msg += "Ce Briseur des Rêves disparait !" @@ -459,8 +454,8 @@ export class TMRUtility { msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes"; } else if (rencontre.name == "Reflet d'ancien Rêve") { - msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes"; - state = "reflet" + msg += "Votre Rêve est figé, vous restez sur cette case tant que ce Reflet n'est pas vaincu!"; + state = "reflet"; } else if (rencontre.name == "Tourbillon blanc") { msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes"; diff --git a/system.json b/system.json index 0280b4ba..be7e1460 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "foundryvtt-reve-de-dragon", "title": "Rêve de Dragon", "description": "Rêve de Dragon RPG for FoundryVTT", - "version": "0.9.66", + "version": "0.9.67", "minimumCoreVersion": "0.7.5", "compatibleCoreVersion": "0.7.6", "templateVersion": 47,