Fix messages

- undefined dans certains cas (lancer de sort)
- promise pour la maîtrise de case humides
- ajout de message au joueur pour les jets de rencontre
- messages au joueur + GM pour les résultats de rencontres
- message au joueur + GM lors de la montée et dans les cas où les TMRs sont quittées
This commit is contained in:
2020-11-29 18:06:19 +01:00
parent ec4166d2da
commit c9a214adca
4 changed files with 106 additions and 89 deletions

View File

@ -21,7 +21,7 @@ const tmrConstants = {
export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */
constructor(html, actor, tmrData, viewOnly) {
constructor(html, actor, tmrData, mode) {
const dialogConf = {
title: "Terres Médianes de Rêve",
content: html,
@ -41,19 +41,23 @@ export class RdDTMRDialog extends Dialog {
this.tmrdata = duplicate(tmrData);
this.actor = actor;
this.actor.tmrApp = this; // reference this app in the actor structure
this.viewOnly = viewOnly
this.viewOnly = mode == "visu"
this.nbFatigue = this.viewOnly ? 0 : 1; // 1 premier point de fatigue du à la montée
this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list);
this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list);
this.allTokens = [];
this.rencontreState = 'aucune';
this.pixiApp = new PIXI.Application({ width: 720, height: 860 });
if (!this.viewOnly){
this._tellToGM(this.actor.name + " monte dans les terres médianes (" + mode + ")");
}
}
/* -------------------------------------------- */
close() {
this.actor.santeIncDec("fatigue", this.nbFatigue).then(super.close()); // moving 1 cell costs 1 fatigue
this.actor.tmrApp = undefined; // Cleanup reference
this._tellToGM(this.actor.name + " a quitté les terres médianes")
}
/* -------------------------------------------- */
@ -169,15 +173,15 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */
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._tellToGM("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._tellToGM("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._tellToGM("Vous n'avez plus de Points de Vie : vous quittez les Terres médianes !");
this.close();
}
}
@ -202,14 +206,15 @@ export class RdDTMRDialog extends Dialog {
if (rolled.isEchec) {
rencontreData = await TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled, this);
message += rencontreData.message;
this._tellToUser("Vous avez <strong>échoué</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force
+ message);
if (this.currentRencontre.data.quitterTMR) // Selon les rencontres, quitter TMR ou pas
this._tellToGM("Vous avez <strong>échoué</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message);
if (this.currentRencontre.data.quitterTMR) { // Selon les rencontres, quitter TMR ou pas
this.close();
}
} else {
rencontreData = await TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled);
message += rencontreData.message;
this._tellToUser("Vous avez <strong>réussi</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message);
this._tellToGM("Vous avez <strong>réussi</strong> à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message);
}
await this.rencontrePostProcess( rencontreData );
@ -224,7 +229,7 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */
_tellToUser(message) {
ChatMessage.create({ content: message, user: game.user._id });
ChatMessage.create({ content: message, user: game.user._id, whisper: [game.user._id] });
}
/* -------------------------------------------- */
@ -238,15 +243,7 @@ export class RdDTMRDialog extends Dialog {
return;
}
this.currentRencontre = undefined;
let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR);
if (rencontre == undefined) {
let myRoll = new Roll("d7").roll();
if (myRoll.total == 7) {
rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
}
}
if ( TMRUtility.isForceRencontre() )
rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
let rencontre = await this._jetDeRencontre(coordTMR, cellDescr);
if (rencontre) { // Manages it
if (rencontre.rencontre) rencontre = rencontre.rencontre; // Manage stored rencontres
@ -267,6 +264,24 @@ export class RdDTMRDialog extends Dialog {
}
}
async _jetDeRencontre(coordTMR, cellDescr) {
let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR);
if (rencontre == undefined) {
let myRoll = new Roll("d7").roll();
if (myRoll.total == 7) {
rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
}
else {
this._tellToUser(myRoll.total + ": Pas de rencontre en " + cellDescr.label + " (" + coordTMR + ")");
}
}
if (TMRUtility.isForceRencontre()) {
return await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
}
return rencontre;
}
/* -------------------------------------------- */
performRoll(html) {
if (this.viewOnly) {
@ -313,7 +328,7 @@ export class RdDTMRDialog extends Dialog {
// TODO: ajouter l'état général?
const etatGeneral = this.actor.data.data.compteurs.etat.value
let difficulte = draconic.data.niveau - 7;
let rolled = RdDResolutionTable.roll(carac, difficulte);
let rolled = await RdDResolutionTable.roll(carac, difficulte);
console.log("manageCaseHumide >>", rolled);
@ -363,7 +378,7 @@ export class RdDTMRDialog extends Dialog {
const declenchementSort = "Vous avez déclenché le sort <strong>" + sortReserve.sort.name
+ "</strong> en réserve en " + sortReserve.coord + " (" + TMRUtility.getTMRDescription(sortReserve.coord).label
+ ") avec " + sortReserve.sort.ptreve_reel + " points de Rêve";
this._tellToUser(declenchementSort);
this._tellToGM(declenchementSort);
this.close();
}
}
@ -436,11 +451,16 @@ export class RdDTMRDialog extends Dialog {
if ( deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
await myself.manageRencontre(coordTMR, cellDescr);
}
myself.manageCaseHumide(cellDescr);
await myself.manageCaseHumide(cellDescr);
await myself.declencheSortEnReserve(coordTMR);
} else if (deplacementType == 'messager') { // Dans ce cas, ouverture du lancement de sort sur la case visée
myself.actor.rollUnSort( coordTMR );
/*
TODO: si la case a un sort en réserve, lancer ce sort.
Si la case est le demi-rêve, ne pas lancer de sort.
Si un lancement de sort est en cours, trouver un moyen de réafficher cette fenêtre si on essaie de lancer un sort (ou bloquer le lancer de sort)
*/
await myself.actor.rollUnSort( coordTMR );
myself.nettoyerRencontre();
} else {