Test rencontres
This commit is contained in:
		| @@ -328,6 +328,7 @@ export class RdDActor extends Actor { | |||||||
|     return explications |     return explications | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   async dormir(heures=1)  { |   async dormir(heures=1)  { | ||||||
|     let message = { title : "Récupération", content :"Vous dormez " + heures + " heure" + (heures > 1 ? "s":  "") }; |     let message = { title : "Récupération", content :"Vous dormez " + heures + " heure" + (heures > 1 ? "s":  "") }; | ||||||
|     this.recupereEndurance(message); |     this.recupereEndurance(message); | ||||||
| @@ -338,6 +339,7 @@ export class RdDActor extends Actor { | |||||||
|     ChatMessage.create( message ); |     ChatMessage.create( message ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   recupereEndurance(message) { |   recupereEndurance(message) { | ||||||
|     const avant = this.data.data.sante.endurance.value; |     const avant = this.data.data.sante.endurance.value; | ||||||
|     this.santeIncDec("endurance", this.data.data.sante.endurance.max - avant); |     this.santeIncDec("endurance", this.data.data.sante.endurance.max - avant); | ||||||
| @@ -347,6 +349,7 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   async recupererFatigueUneHeure(message) { |   async recupererFatigueUneHeure(message) { | ||||||
|     let fatigue = duplicate(this.data.data.sante.fatigue) |     let fatigue = duplicate(this.data.data.sante.fatigue) | ||||||
|     if (fatigue.value == 0) { |     if (fatigue.value == 0) { | ||||||
| @@ -379,6 +382,7 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   recuperationReve(message)  { |   recuperationReve(message)  { | ||||||
|     const seuil = this.data.data.reve.seuil.value; |     const seuil = this.data.data.reve.seuil.value; | ||||||
|     const reve = this.getReveActuel(); |     const reve = this.getReveActuel(); | ||||||
| @@ -401,6 +405,7 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   combattreReveDeDragon(force){ |   combattreReveDeDragon(force){ | ||||||
|     let draconic = this.getBestDraconic(); |     let draconic = this.getBestDraconic(); | ||||||
|     let niveau = Math.max(0, draconic.data.niveau); |     let niveau = Math.max(0, draconic.data.niveau); | ||||||
| @@ -413,6 +418,7 @@ export class RdDActor extends Actor { | |||||||
|     return this.appliquerReveDeDragon(rolled, force); |     return this.appliquerReveDeDragon(rolled, force); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   appliquerReveDeDragon(roll, force) { |   appliquerReveDeDragon(roll, force) { | ||||||
|     let message = ""; |     let message = ""; | ||||||
|     if (roll.isSuccess) { |     if (roll.isSuccess) { | ||||||
| @@ -629,6 +635,7 @@ export class RdDActor extends Actor { | |||||||
|     return ret;       |     return ret;       | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   ajouterSouffle() { |   ajouterSouffle() { | ||||||
|     let souffle = RdDRollTables.getSouffle(); |     let souffle = RdDRollTables.getSouffle(); | ||||||
|     // ChatMessage.create({ |     // ChatMessage.create({ | ||||||
| @@ -638,6 +645,7 @@ export class RdDActor extends Actor { | |||||||
|     // this.actor.createOwnedItem(souffle); |     // this.actor.createOwnedItem(souffle); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   async ajouterQueue() { |   async ajouterQueue() { | ||||||
|     // TODO: Déterminer si Thanatos a été utilisé? => laisser le joueur ne pas choisir Thanatos => choisir sa voie? |     // TODO: Déterminer si Thanatos a été utilisé? => laisser le joueur ne pas choisir Thanatos => choisir sa voie? | ||||||
|     let utiliseThanatos = false; |     let utiliseThanatos = false; | ||||||
| @@ -697,6 +705,13 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */   | ||||||
|  |   async updateCoordTMR( coord ) {         | ||||||
|  |     let tmrPos = duplicate(this.data.data.reve.tmrpos ); | ||||||
|  |     tmrPos.coord = coord; | ||||||
|  |     await this.update( {"data.reve.tmrpos": tmrPos } ); | ||||||
|  |   } | ||||||
|  |    | ||||||
|   /* -------------------------------------------- */   |   /* -------------------------------------------- */   | ||||||
|   async updatePointsDeReve( value ) {     |   async updatePointsDeReve( value ) {     | ||||||
|     let reve = duplicate(this.data.data.reve.reve); |     let reve = duplicate(this.data.data.reve.reve); | ||||||
| @@ -704,6 +719,7 @@ export class RdDActor extends Actor { | |||||||
|     await this.update( {"data.reve.reve": reve } ); |     await this.update( {"data.reve.reve": reve } ); | ||||||
|   } |   } | ||||||
|    |    | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   async updatePointDeSeuil(value=1) { |   async updatePointDeSeuil(value=1) { | ||||||
|     const seuil = Misc.toInt(this.data.data.reve.seuil.value); |     const seuil = Misc.toInt(this.data.data.reve.seuil.value); | ||||||
|     const reve = Misc.toInt(this.data.data.carac.reve.value); |     const reve = Misc.toInt(this.data.data.carac.reve.value); | ||||||
| @@ -712,6 +728,7 @@ export class RdDActor extends Actor { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|    |    | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   async setPointsDeSeuil( value ) {     |   async setPointsDeSeuil( value ) {     | ||||||
|     let seuil = duplicate(this.data.data.reve.seuil); |     let seuil = duplicate(this.data.data.reve.seuil); | ||||||
|     seuil.value = value; |     seuil.value = value; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ import { RdDActorCreatureSheet } from "./actor-creature-sheet.js"; | |||||||
| import { RdDActorHumanoideSheet } from "./actor-humanoide-sheet.js"; | import { RdDActorHumanoideSheet } from "./actor-humanoide-sheet.js"; | ||||||
| import { RdDActorEntiteSheet } from "./actor-entite-sheet.js"; | import { RdDActorEntiteSheet } from "./actor-entite-sheet.js"; | ||||||
| import { RdDUtility } from "./rdd-utility.js"; | import { RdDUtility } from "./rdd-utility.js"; | ||||||
|  | import { TMRUtility } from "./tmr-utility.js"; | ||||||
| import { RdDCalendrier } from "./rdd-calendrier.js"; | import { RdDCalendrier } from "./rdd-calendrier.js"; | ||||||
| import { RdDResolutionTable } from "./rdd-resolution-table.js"; | import { RdDResolutionTable } from "./rdd-resolution-table.js"; | ||||||
|  |  | ||||||
| @@ -100,7 +101,8 @@ Hooks.once("init", async function() { | |||||||
|  |  | ||||||
|   // Create useful storage space |   // Create useful storage space | ||||||
|   game.system.rdd = { |   game.system.rdd = { | ||||||
|     rollDataHandler: {} |     rollDataHandler: {}, | ||||||
|  |     TMRUtility: TMRUtility | ||||||
|     } |     } | ||||||
|   // Create specific settings |   // Create specific settings | ||||||
|   // game.settings.register("foundryvtt-reve-de-dragon", "configuration", { |   // game.settings.register("foundryvtt-reve-de-dragon", "configuration", { | ||||||
|   | |||||||
| @@ -114,18 +114,19 @@ export class RdDTMRDialog extends Dialog { | |||||||
|       + RdDResolutionTable.explain(rolled); |       + RdDResolutionTable.explain(rolled); | ||||||
|  |  | ||||||
|     if (rolled.isEchec) { |     if (rolled.isEchec) { | ||||||
|       TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled); |       message += TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled); | ||||||
|       this._tellToUser("Vous avez <strong>échoué</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force |       this._tellToUser("Vous avez <strong>échoué</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force | ||||||
|         + "<br>Vous quittez brutalement les Terres Médianes !" + message); |         + "<br>Vous quittez brutalement les Terres Médianes !" + message); | ||||||
|       this.close(); |       this.close(); | ||||||
|     } else { |     } else { | ||||||
|       TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled); |       message += TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled); | ||||||
|       this._tellToUser("Vous avez <strong>réussi</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message); |       this._tellToUser("Vous avez <strong>réussi</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message); | ||||||
|     } |     } | ||||||
|     console.log("-> matriser", this.currentRencontre); |     console.log("-> matriser", this.currentRencontre); | ||||||
|     this.updateValuesDisplay(); |     this.updateValuesDisplay(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   _tellToUser(message) { |   _tellToUser(message) { | ||||||
|     ChatMessage.create({ title: "TMR", content: message, user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") }); |     ChatMessage.create({ title: "TMR", content: message, user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") }); | ||||||
|   } |   } | ||||||
| @@ -139,9 +140,9 @@ export class RdDTMRDialog extends Dialog { | |||||||
|     let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR); |     let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR); | ||||||
|     if (rencontre == undefined) { |     if (rencontre == undefined) { | ||||||
|       let deRencontre = new Roll("d7").roll(); |       let deRencontre = new Roll("d7").roll(); | ||||||
|       if (deRencontre.total == 7) { |       //if (deRencontre.total == 7) { | ||||||
|         rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); |         rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); | ||||||
|       } |       //} | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (rencontre) { // Manages it |     if (rencontre) { // Manages it | ||||||
|   | |||||||
| @@ -582,6 +582,12 @@ export class RdDUtility  { | |||||||
|       attackerActor.continueRoll( rollData ); |       attackerActor.continueRoll( rollData ); | ||||||
|     });  |     });  | ||||||
|  |  | ||||||
|  |     html.on("click", '.tmr-passeur-coord a', event => { | ||||||
|  |       let coord = event.currentTarget.attributes['data-tmr-coord'].value; | ||||||
|  |       let actor = game.actors.get( game.user.character.id ); | ||||||
|  |       actor.updateCoordTMR(coord); | ||||||
|  |     });       | ||||||
|  |       | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -268,15 +268,17 @@ export class TMRUtility  { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async rencontreTMRRoll( coordTMR, cellDescr )  |   static async rencontreTMRRoll( coordTMR, cellDescr )  | ||||||
|   { |   { | ||||||
|     let rencontre = this.rencontreTMRTypeCase(cellDescr.type); |     //let rencontre = this.rencontreTMRTypeCase(cellDescr.type); | ||||||
|  |     let rencontre = rencontresTable[4]; | ||||||
|     if (rencontre){ |     if (rencontre){ | ||||||
|       rencontre = duplicate(rencontre); |       rencontre = duplicate(rencontre); | ||||||
|       rencontre.force = this.evaluerForceRencontre(rencontre); |       rencontre.force = 1;//this.evaluerForceRencontre(rencontre); | ||||||
|       rencontre.coord = coordTMR; |       rencontre.coord = coordTMR; | ||||||
|     } |     } | ||||||
|     return rencontre; |     return rencontre; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   static rencontreTMRTypeCase(typeTMR, roll=undefined) { |   static rencontreTMRTypeCase(typeTMR, roll=undefined) { | ||||||
|     if (!roll) |     if (!roll) | ||||||
|     { |     { | ||||||
| @@ -325,6 +327,19 @@ export class TMRUtility  { | |||||||
|     // TODO random get same type |     // TODO random get same type | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   static getLocationTypeList( coordTMR ) { | ||||||
|  |     let descr = this.getTMRDescription( coordTMR ); | ||||||
|  |     let typeList = []; | ||||||
|  |     for (let index in TMRMapping) { | ||||||
|  |       let caseTMR = TMRMapping[index]; | ||||||
|  |       if (caseTMR.type == descr.type) | ||||||
|  |         typeList.push(index) | ||||||
|  |     } | ||||||
|  |     return typeList; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   static evaluerForceRencontre(rencontre) { |   static evaluerForceRencontre(rencontre) { | ||||||
|     if (this.isReveDeDragon(rencontre)) { |     if (this.isReveDeDragon(rencontre)) { | ||||||
|       let ddr = RdDDice.deDraconique(); |       let ddr = RdDDice.deDraconique(); | ||||||
| @@ -336,19 +351,20 @@ export class TMRUtility  { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   static isReveDeDragon(rencontre) { |   static isReveDeDragon(rencontre) { | ||||||
|     return rencontre.name.toLowerCase() == "Rêve de Dragon".toLowerCase(); |     return rencontre.name.toLowerCase() == "Rêve de Dragon".toLowerCase(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async processRencontreReussite( actor, rencontre, rolled ) { |   static async processRencontreReussite( actor, rencontre, rolled ) { | ||||||
|     let msg = "Vous avez réussi votre maîtrise ! "; |     let msg = "<br>"; | ||||||
|     console.log("processRencontreReussite", actor, rencontre); |     console.log("processRencontreReussite", actor, rencontre); | ||||||
|     if (rencontre.name == "Messagers des Rêves") { |     if (rencontre.name == "Messagers des Rêves") { | ||||||
|       msg += "Le Messager des Rêves vous permet de lancer votre sort à XX cases !"; |       msg += "Le Messager des Rêves vous permet de lancer votre sort à XX cases !"; | ||||||
|      |      | ||||||
|     } else if (rencontre.name == "Passeur des Rêves") { |     } else if (rencontre.name == "Passeur des Rêves") { | ||||||
|       msg += "Le Passeur des Rêves vous téléporte sur une case à distance XX !"; |       msg += "Le Passeur des Rêves vous téléporte sur une case à XX !"; | ||||||
|        |        | ||||||
|     } else if (rencontre.name == "Fleur des Rêves") { |     } else if (rencontre.name == "Fleur des Rêves") { | ||||||
|       await actor.updatePointsDeReve( rencontre.force ); |       await actor.updatePointsDeReve( rencontre.force ); | ||||||
| @@ -358,7 +374,12 @@ export class TMRUtility  { | |||||||
|       msg += "Ce Mangeur des Rêves disparait !" |       msg += "Ce Mangeur des Rêves disparait !" | ||||||
|      |      | ||||||
|     } else if (rencontre.name == "Changeur de Rêve") { |     } else if (rencontre.name == "Changeur de Rêve") { | ||||||
|       msg += "Ce Changeur des Rêves disparait !" |       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 += "<li class='tmr-passeur-coord' data-tmr-coord='"+coord+"'><a>"+coord+" - " +caseTMR.label+"</a></li>"; | ||||||
|  |       } | ||||||
|        |        | ||||||
|     } else if (rencontre.name == "Briseur de Rêve") { |     } else if (rencontre.name == "Briseur de Rêve") { | ||||||
|       msg += "Ce Briseur des Rêves disparait !" |       msg += "Ce Briseur des Rêves disparait !" | ||||||
| @@ -377,11 +398,12 @@ export class TMRUtility  { | |||||||
|       msg += "Vous maîtrisez le Rêve de Dragon !" |       msg += "Vous maîtrisez le Rêve de Dragon !" | ||||||
|       msg += actor.appliquerReveDeDragon(rolled, rencontre.force); |       msg += actor.appliquerReveDeDragon(rolled, rencontre.force); | ||||||
|     }   |     }   | ||||||
|  |     return msg; | ||||||
|   } |   } | ||||||
|    |    | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async processRencontreEchec( actor, rencontre, rolled ) { |   static async processRencontreEchec( actor, rencontre, rolled ) { | ||||||
|     let msg = "Vous avez échoué à votre maîtrise ! "; |     let msg = "<br>"; | ||||||
|      |      | ||||||
|     if (rencontre.name == "Messagers des Rêves") { |     if (rencontre.name == "Messagers des Rêves") { | ||||||
|       msg += "Le Messager des Rêves s'éloigne de vous !"; |       msg += "Le Messager des Rêves s'éloigne de vous !"; | ||||||
| @@ -395,10 +417,11 @@ export class TMRUtility  { | |||||||
|     } else if (rencontre.name == "Mangeur de Rêve") { |     } else if (rencontre.name == "Mangeur de Rêve") { | ||||||
|       await actor.updatePointsDeReve( -rencontre.force ); |       await actor.updatePointsDeReve( -rencontre.force ); | ||||||
|       msg += "Ce Mangeur des Rêves croque votre Rêve ! Vous perdez " + rencontre.force + " points de rêve actuels, votre nouveau total est de " + actor.data.data.reve.reve.value;       |       msg += "Ce Mangeur des Rêves croque votre Rêve ! Vous perdez " + rencontre.force + " points de rêve actuels, votre nouveau total est de " + actor.data.data.reve.reve.value;       | ||||||
|  |     | ||||||
|     } else if (rencontre.name == "Changeur de Rêve") { |     } else if (rencontre.name == "Changeur de Rêve") { | ||||||
|       let coordTMR = actor.data.data.reve.tmrpos.coord; |       let coordTMR = actor.data.data.reve.tmrpos.coord; | ||||||
|       let newcoordTMR = this.getRandomLocationType(coordTMR); |       let newcoordTMR = this.getRandomLocationType(coordTMR); | ||||||
|       msg += "Vous avez été téléporté en "; // TODO |       msg += "Vous avez été téléporté en " + coordTMR +  " - " + coordTMR.label;  | ||||||
|        |        | ||||||
|     } else if (rencontre.name == "Briseur de Rêve") { |     } else if (rencontre.name == "Briseur de Rêve") { | ||||||
|       msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes"; |       msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes"; | ||||||
| @@ -416,6 +439,7 @@ export class TMRUtility  { | |||||||
|       msg += "Le Rêve de Dragon tourne au cauchemar !" |       msg += "Le Rêve de Dragon tourne au cauchemar !" | ||||||
|       msg += actor.appliquerReveDeDragon(rolled, rencontre.force); |       msg += actor.appliquerReveDeDragon(rolled, rencontre.force); | ||||||
|     } |     } | ||||||
|  |     return msg; | ||||||
|   } |   } | ||||||
|      |      | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -431,9 +455,6 @@ export class TMRUtility  { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   /** |  | ||||||
|    *  |  | ||||||
|    */ |  | ||||||
|   static getTMRAleatoire() |   static getTMRAleatoire() | ||||||
|   { |   { | ||||||
|     let num = new Roll("1d15").roll().total; |     let num = new Roll("1d15").roll().total; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user