#80 Gestion de la queue Mauvaise Rencontre en Perspective
This commit is contained in:
parent
5c423d1245
commit
aea1bca24a
@ -1286,6 +1286,19 @@ export class RdDActor extends Actor {
|
||||
dialog.render(true);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
isRencontreSpeciale( ) { // Gestion queue 'Mauvaise Rencontre en Perpective'
|
||||
let rencSpecial = this.data.items.find( item => item.type == 'queue' && item.name.toLowerCase().includes( 'mauvaise rencontre' ) );
|
||||
if ( rencSpecial ) {
|
||||
rencSpecial = duplicate(rencSpecial); // To keep it
|
||||
this.deleteOwnedItem( rencSpecial._id ); // Suppression dans la liste des queues
|
||||
ChatUtility.chatWithRollMode(
|
||||
{ content:"Votre rencontre en TMR est spéciale à cause de votre Queue de Dragon : Mauvaise Rencontre en Perspective. La queue a été supprimée de votre état."},
|
||||
this.name);
|
||||
}
|
||||
return rencSpecial;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _rollUnSortResult(rollData, isSortReserve = false) {
|
||||
rollData.isSortReserve = isSortReserve;
|
||||
|
@ -100,9 +100,9 @@ export class RdDTMRDialog extends Dialog {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async refouler(data) {
|
||||
this._tellToGM(this.actor.name + " a refoulé une rencontre.");
|
||||
this._tellToGM(this.actor.name + " a refoulé : " + this.currentRencontre.name );
|
||||
await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary
|
||||
let result = await this.actor.ajouterRefoulement(1);
|
||||
let result = await this.actor.ajouterRefoulement( this.currentRencontre.data.refoulement );
|
||||
this.updatePreviousRencontres();
|
||||
console.log("-> refouler", this.currentRencontre)
|
||||
this.updateValuesDisplay();
|
||||
@ -139,6 +139,20 @@ export class RdDTMRDialog extends Dialog {
|
||||
console.log("NEWPOS", tmrPos);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async gererTourbillonRouge( ) {
|
||||
this.nbFatigue += 4; // 4 cases -> 4 pts de fatigue
|
||||
await this.actor.reveActuelIncDec( -2 ); // -2 pts de Reve a chaque itération
|
||||
if ( !this.currentRencontre.tourbillonDirection ) {
|
||||
this.currentRencontre.tourbillonDirection = TMRUtility.getDirectionPattern();
|
||||
}
|
||||
let tmrPos = this.actor.data.data.reve.tmrpos;
|
||||
tmrPos.coord = TMRUtility.deplaceTMRSelonPattern( tmrPos.coord, this.currentRencontre.tourbillonDirection, 4 ); // Depl. 4 cases.
|
||||
await this.actor.update({ "data.reve.tmrpos": tmrPos });
|
||||
await this.actor.santeIncDec( "vie", -1); // Et -1 PV
|
||||
console.log("TOURBILLON ROUGE", tmrPos);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** Gère les rencontres avec du post-processing graphique (passeur, messagers, tourbillons, ...) */
|
||||
async rencontrePostProcess( rencontreData) {
|
||||
@ -149,6 +163,17 @@ export class RdDTMRDialog extends Dialog {
|
||||
if ( this.rencontreState == 'passeur' || this.rencontreState == 'messager' ) {
|
||||
// Récupère la liste des cases à portées
|
||||
locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants );
|
||||
|
||||
} else if ( this.rencontreState == 'passeurfou' ) { // Cas spécial du passeur fou
|
||||
let sortReserve = this.actor.data.data.reve.reserve[0];
|
||||
let tmrPos
|
||||
if ( sortReserve ) {
|
||||
tmrPos = sortReserve.coord; // Passeur fou positionne sur la case d'un ort en réserve (TODO : Choisir le plus loin)
|
||||
} else {
|
||||
let direction = TMRUtility.getDirectionPattern(); // Déplacement aléatoire de la force du Passeur Fou
|
||||
tmrPos = TMRUtility.deplaceTMRSelonPattern(this.actor.data.data.reve.tmrpos.coord, direction, this.currentRencontre.force );
|
||||
}
|
||||
await this.actor.update({ "data.reve.tmrpos": tmrPos });
|
||||
|
||||
} else if ( this.rencontreState == 'changeur' ) {
|
||||
// Liste des cases de même type
|
||||
@ -163,6 +188,9 @@ export class RdDTMRDialog extends Dialog {
|
||||
} else if ( this.rencontreState == 'tourbillonnoir' ) {
|
||||
await this.gererTourbillon(2);
|
||||
|
||||
} else if ( this.rencontreState == 'tourbillonrouge' ) {
|
||||
await this.gererTourbillonRouge();
|
||||
|
||||
} else {
|
||||
this.currentRencontre = undefined; // Cleanup, not used anymore
|
||||
}
|
||||
@ -194,7 +222,6 @@ 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 + etatGeneral;
|
||||
console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force, etatGeneral);
|
||||
@ -252,30 +279,20 @@ export class RdDTMRDialog extends Dialog {
|
||||
this.currentRencontre = duplicate(rencontre);
|
||||
|
||||
let dialog = new RdDTMRRencontreDialog("", this, this.currentRencontre);
|
||||
/*
|
||||
let dialog = new Dialog({
|
||||
title: "Rencontre en TMR!",
|
||||
content: "Vous recontrez un " + rencontre.name + " de force " + rencontre.force + "<br>",
|
||||
buttons: {
|
||||
derober: { icon: '<i class="fas fa-check"></i>', label: "Se dérober", callback: () => this.derober() },
|
||||
refouler: { icon: '<i class="fas fa-check"></i>', label: "Refouler", callback: () => this.refouler() },
|
||||
maitiser: { icon: '<i class="fas fa-check"></i>', label: "Maîtriser", callback: () => this.maitriser() }
|
||||
},
|
||||
default: "derober"
|
||||
});*/
|
||||
dialog.render(true);
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _jetDeRencontre(coordTMR, cellDescr) {
|
||||
|
||||
let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR);
|
||||
if (rencontre == undefined) {
|
||||
let myRoll = new Roll("1d7").roll();
|
||||
if (myRoll.total == 7) {
|
||||
rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
|
||||
}
|
||||
else {
|
||||
let isSpecial = this.actor.isRencontreSpeciale();
|
||||
rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr, isSpecial );
|
||||
} else {
|
||||
this._tellToUser(myRoll.total + ": Pas de rencontre en " + cellDescr.label + " (" + coordTMR + ")");
|
||||
}
|
||||
}
|
||||
|
@ -207,6 +207,17 @@ const TMRMapping = {
|
||||
M15: { type: "cite", label: "Cité de Klana"}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const rencontresSpeciale = [
|
||||
{name:"Mangeur de Rêve", data: { force: "1d6", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Mangeur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Reflet d'ancien Rêve", data: { force: "2d6+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon blanc", data: { force: "2d6+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon noir", data: { force: "2d8+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Passeur fou", data: { force: "2d8", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon rouge", data: { force: "2d8", ignorer: false, derober: true, refoulement: 3, quitterTMR: false } }
|
||||
]
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const rencontresTable = [
|
||||
{name:"Messagers des Rêves", data: { force: "2d4", ignorer: true, derober: true, refoulement: 1, quitterTMR: false,
|
||||
@ -334,7 +345,7 @@ export class TMRUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rencontreTMRRoll( coordTMR, cellDescr )
|
||||
static async rencontreTMRRoll( coordTMR, cellDescr, isSpecial = false )
|
||||
{
|
||||
if ( this.forceRencontre ) {
|
||||
// Forced
|
||||
@ -344,13 +355,20 @@ export class TMRUtility {
|
||||
rencontre.nbCases = 0; // Utilisé pour les Tourbillons
|
||||
return rencontre;
|
||||
}
|
||||
let rencontre = await this.rencontreTMRTypeCase(cellDescr.type);
|
||||
let rencontre;
|
||||
if ( isSpecial ) {
|
||||
let index = new Roll("1d7").roll().total;
|
||||
rencontre = rencontresSpeciale[index-1];
|
||||
} else {
|
||||
rencontre = await this.rencontreTMRTypeCase(cellDescr.type);
|
||||
}
|
||||
//let rencontre = rencontresTable[4];
|
||||
if (rencontre) {
|
||||
rencontre = duplicate(rencontre);
|
||||
rencontre.force = await this.evaluerForceRencontre(rencontre);
|
||||
rencontre.coord = coordTMR;
|
||||
rencontre.nbCases = 0; // Utilisé pour les Tourbillons
|
||||
rencontre.isSpecial = isSpecial; // Garder l'information
|
||||
}
|
||||
return rencontre;
|
||||
}
|
||||
@ -507,17 +525,25 @@ export class TMRUtility {
|
||||
} else if (rencontre.name == "Briseur de Rêve") {
|
||||
message += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||
|
||||
} else if (rencontre.name == "Passeur fou") {
|
||||
message += "Vous êtes déplacé sur la case de votre sort en réserve le plus proche, ou sinon aléatoirement dans une direction";
|
||||
state = "passeurfou";
|
||||
|
||||
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
||||
message += "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") {
|
||||
message += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonblanc";
|
||||
|
||||
} else if (rencontre.name == "Tourbillon noir") {
|
||||
message += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonnoir";
|
||||
|
||||
} else if (rencontre.name == "Tourbillon rouge") {
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonrouge";
|
||||
|
||||
} else if (rencontre.name == "Rêve de Dragon") {
|
||||
message += "Le Rêve de Dragon tourne au cauchemar !"
|
||||
|
Loading…
Reference in New Issue
Block a user