#27 Gestion des rencontres
This commit is contained in:
parent
42a5078bba
commit
2d1509aadd
@ -365,6 +365,8 @@ export class RdDActor extends Actor {
|
|||||||
message.content += "<br>Vous êtes bien reposé";
|
message.content += "<br>Vous êtes bien reposé";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
_calculRecuperationSegment(actuel)
|
_calculRecuperationSegment(actuel)
|
||||||
{
|
{
|
||||||
const segments = RdDUtility.getSegmentsFatigue(this.data.data.sante.endurance.max);
|
const segments = RdDUtility.getSegmentsFatigue(this.data.data.sante.endurance.max);
|
||||||
|
@ -123,23 +123,44 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** Gère les rencontres avec du post-processing graphique (passeur, messagers, tourbillons, ...) */
|
/** Gère les rencontres avec du post-processing graphique (passeur, messagers, tourbillons, ...) */
|
||||||
rencontrePostProcess( rencontreData) {
|
async rencontrePostProcess( rencontreData) {
|
||||||
if (!rencontreData) return; // Sanity check
|
if (!rencontreData) return; // Sanity check
|
||||||
this.rencontreState = rencontreData.state; // garder la trace de l'état en cours
|
this.rencontreState = rencontreData.state; // garder la trace de l'état en cours
|
||||||
|
|
||||||
if ( this.rencontreState == 'passeur') {
|
let locList
|
||||||
console.log("Processing passeur");
|
if ( this.rencontreState == 'passeur' || this.rencontreState == 'messager' ) {
|
||||||
// Récupère la liste des cases à portées
|
// Récupère la liste des cases à portées
|
||||||
let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants );
|
locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants );
|
||||||
this.colorierZoneRencontre( locList );
|
|
||||||
} else if ( this.rencontreState == 'messager') {
|
} else if ( this.rencontreState == 'changeur' ) {
|
||||||
console.log("Processing messager");
|
// Liste des cases de même type
|
||||||
// Récupère la liste des cases à portées
|
locList = TMRUtility.getLocationTypeList( this.actor.data.data.reve.tmrpos.coord );
|
||||||
let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants );
|
|
||||||
this.colorierZoneRencontre( locList );
|
} else if ( this.rencontreState == 'reflet' ) {
|
||||||
|
this.nbFatigue += 1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
this.currentRencontre = undefined; // Cleanup, not used anymore
|
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 draconic = this.actor.getBestDraconic();
|
||||||
const carac = this.actor.getReveActuel();
|
const carac = this.actor.getReveActuel();
|
||||||
// TODO: ajouter l'état général?
|
// TODO: ajouter l'état général?
|
||||||
const etatGeneral = this.actor.data.data.compteurs.etat.value
|
const etatGeneral = this.actor.data.data.compteurs.etat.value;
|
||||||
const difficulte = draconic.data.niveau - this.currentRencontre.force;
|
const difficulte = draconic.data.niveau - this.currentRencontre.force + etatGeneral;
|
||||||
console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force);
|
console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force, etatGeneral);
|
||||||
|
|
||||||
let rolled = RdDResolutionTable.roll(carac, difficulte);
|
let rolled = RdDResolutionTable.roll(carac, difficulte);
|
||||||
let message = "<br><strong>Test : Rêve actuel / " + draconic.name + " / " + this.currentRencontre.name + "</strong>" + "<br>"
|
let message = "<br><strong>Test : Rêve actuel / " + draconic.name + " / " + this.currentRencontre.name + "</strong>" + "<br>"
|
||||||
@ -172,10 +193,14 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rencontrePostProcess( rencontreData );
|
await this.rencontrePostProcess( rencontreData );
|
||||||
|
|
||||||
console.log("-> matriser", this.currentRencontre);
|
console.log("-> matriser", this.currentRencontre);
|
||||||
this.updateValuesDisplay();
|
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;
|
refoulement.innerHTML = this.actor.data.data.reve.refoulement.value;
|
||||||
|
|
||||||
let fatigueItem = document.getElementById("tmr-fatigue-table");
|
let fatigueItem = document.getElementById("tmr-fatigue-table");
|
||||||
|
console.log("Refresh : ", this.actor.data.data.sante.fatigue.value);
|
||||||
fatigueItem.innerHTML = "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(this.actor.data.data.sante.fatigue.value, this.actor.data.data.sante.endurance.max).html() + "</table>";
|
fatigueItem.innerHTML = "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(this.actor.data.data.sante.fatigue.value, this.actor.data.data.sante.endurance.max).html() + "</table>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,7 +364,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
processClickPostRencontre( coord ) {
|
processClickPostRencontre( coord ) {
|
||||||
let deplacementType = "erreur";
|
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);
|
console.log("Searching", this.currentRencontre.locList, coord);
|
||||||
let isInArea = this.currentRencontre.locList.find(locCoord => locCoord == coord );
|
let isInArea = this.currentRencontre.locList.find(locCoord => locCoord == coord );
|
||||||
if ( isInArea ) { // OK !
|
if ( isInArea ) { // OK !
|
||||||
@ -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");
|
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);
|
console.log("STATUS :", myself.rencontreState, myself.currentRencontre);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.checkQuitterTMR(); // Vérifier l'état des compteurs reve/fatigue/vie
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -226,7 +226,7 @@ const rencontresTable = [
|
|||||||
{name:"Briseur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: true,
|
{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",
|
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" } },
|
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",
|
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" } },
|
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,
|
{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 !"
|
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 vous propose de vous déplacer sur une autre case de même type.<ol>"
|
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 );
|
state = "changeur";
|
||||||
for ( let coord of locList) {
|
|
||||||
let caseTMR = TMRMapping[coord];
|
|
||||||
msg += "<li class='tmr-passeur-coord'><a data-actor-id='"+actor.data._id+"' data-tmr-coord='"+coord+"'>"+coord+" - " +caseTMR.label+"</a></li>";
|
|
||||||
}
|
|
||||||
msg += "</ol>"
|
|
||||||
|
|
||||||
} 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 !"
|
||||||
@ -459,8 +454,8 @@ export class TMRUtility {
|
|||||||
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||||
|
|
||||||
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
||||||
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
msg += "Votre Rêve est figé, vous restez sur cette case tant que ce Reflet n'est pas vaincu!";
|
||||||
state = "reflet"
|
state = "reflet";
|
||||||
|
|
||||||
} else if (rencontre.name == "Tourbillon blanc") {
|
} else if (rencontre.name == "Tourbillon blanc") {
|
||||||
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
msg += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"name": "foundryvtt-reve-de-dragon",
|
"name": "foundryvtt-reve-de-dragon",
|
||||||
"title": "Rêve de Dragon",
|
"title": "Rêve de Dragon",
|
||||||
"description": "Rêve de Dragon RPG for FoundryVTT",
|
"description": "Rêve de Dragon RPG for FoundryVTT",
|
||||||
"version": "0.9.66",
|
"version": "0.9.67",
|
||||||
"minimumCoreVersion": "0.7.5",
|
"minimumCoreVersion": "0.7.5",
|
||||||
"compatibleCoreVersion": "0.7.6",
|
"compatibleCoreVersion": "0.7.6",
|
||||||
"templateVersion": 47,
|
"templateVersion": 47,
|
||||||
|
Loading…
Reference in New Issue
Block a user