Travail sur queues/souffles

This commit is contained in:
Vincent Vandemeulebrouck 2021-02-06 01:34:49 +01:00
parent 7c54597a20
commit fe73e5b984
3 changed files with 42 additions and 26 deletions

View File

@ -1765,10 +1765,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective' isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective'
let addMsg = ""; let addMsg = "";
let rencSpecial = this.data.items.find(item => RdDItem.isMauvaiseRencontreEnPerspective(item)); let rencSpecial = this.data.items.find(item => RdDItem.isHRMauvaiseRencontreEnPerspective(item));
if (rencSpecial) { if (rencSpecial) {
rencSpecial = duplicate(rencSpecial); // To keep it rencSpecial = duplicate(rencSpecial); // To keep it
if (rencSpecial.type == 'queue') { if (rencSpecial.type != 'souffle') {
this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues
addMsg = " La queue a été supprimée de votre fiche automatiquement"; addMsg = " La queue a été supprimée de votre fiche automatiquement";
} else { } else {
@ -1784,15 +1784,14 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getTMRFatigue() { // Pour l'instant uniquement Inertie Draconique getTMRFatigue() { // Pour l'instant uniquement Inertie Draconique
let inertieDraconique = this.data.items.find(item => item.type == 'queue' && item.name.toLowerCase().includes('inertie draconique')); let countInertieDraconique = this.data.items.filter(item => RdDItem.isHRInertieDraconique(item)).length;
if (inertieDraconique) { if (countInertieDraconique>0) {
ChatMessage.create({ ChatMessage.create({
content: "Vous êtes sous le coup d'une Inertie Draconique : vous perdez 2 cases de Fatigue par déplacement au lieu d'1.", content: `Vous êtes sous le coup d'une Inertie Draconique : vous perdez ${countInertieDraconique+1} cases de Fatigue par déplacement au lieu d'une.`,
whisper: ChatMessage.getWhisperRecipients(game.user.name) whisper: ChatMessage.getWhisperRecipients(game.user.name)
}); });
return 2;
} }
return 1; return countInertieDraconique + 1;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -1808,7 +1807,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
isDoubleResistanceFleuve() { isDoubleResistanceFleuve() {
let resistFleuve = this.data.items.find(item => RdDItem.isDoubleResistanceFleuve(item)); let resistFleuve = this.data.items.find(item => RdDItem.isHRDoubleResistanceFleuve(item));
if (resistFleuve) { if (resistFleuve) {
ChatMessage.create({ ChatMessage.create({
content: "Vous êtes sous le coup d'une Double Résistance du Fleuve : vous devez maîtriser 2 fois chaque case humide, un second jet est donc effectué.", content: "Vous êtes sous le coup d'une Double Résistance du Fleuve : vous devez maîtriser 2 fois chaque case humide, un second jet est donc effectué.",
@ -1821,7 +1820,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async checkSoufflePeage(cellDescr) { async checkSoufflePeage(cellDescr) {
let peage = this.data.items.find(item => item.type == 'souffle' && item.name.toLowerCase().includes('péage')); let peage = this.data.items.find(item => RdDItem.isHRPeage(item));
if (peage && (cellDescr.type == 'pont' || cellDescr.type == 'cite')) { if (peage && (cellDescr.type == 'pont' || cellDescr.type == 'cite')) {
await this.reveActuelIncDec(-1); await this.reveActuelIncDec(-1);
ChatMessage.create({ ChatMessage.create({
@ -1842,7 +1841,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
isCaseHumideAdditionelle(tmr) { isCaseHumideAdditionelle(tmr) {
if (tmr.type == 'pont' && this.data.items.find(it => RdDItem.isPontImpraticable(it))) { if (tmr.type == 'pont' && this.data.items.find(it => RdDItem.isHRPontImpraticable(it))) {
ChatMessage.create({ ChatMessage.create({
content: tmr.label +": Vous êtes sous le coup d'une Impraticabilité des Ponts : ce pont doit être maîtrisé comme une case humide.", content: tmr.label +": Vous êtes sous le coup d'une Impraticabilité des Ponts : ce pont doit être maîtrisé comme une case humide.",
whisper: ChatMessage.getWhisperRecipients(game.user.name) whisper: ChatMessage.getWhisperRecipients(game.user.name)
@ -1852,7 +1851,7 @@ export class RdDActor extends Actor {
// Débordement ? // Débordement ?
let isTmrInondee = this.data.items.filter(it => RdDItem.isCaseTMR(it)) let isTmrInondee = this.data.items.filter(it => RdDItem.isCaseTMR(it))
.filter(it => it.data.coord == tmr.coord) .filter(it => it.data.coord == tmr.coord)
.find(it => RdDItem.isCaseInnondee(it)); .find(it => RdDItem.isHRCaseInnondee(it));
if (isTmrInondee) { if (isTmrInondee) {
ChatMessage.create({ ChatMessage.create({
content: tmr.label +": cette case est inondée, elle doit être maîtrisée comme une case humide.", content: tmr.label +": cette case est inondée, elle doit être maîtrisée comme une case humide.",
@ -2066,7 +2065,7 @@ export class RdDActor extends Actor {
height: 600, height: 600,
callbacks: [ callbacks: [
this.createCallbackExperience(), this.createCallbackExperience(),
{ action: r => this._resultArt(r) } { action: r => callBackResult(r) }
] ]
}); });
dialog.render(true); dialog.render(true);

View File

@ -3,23 +3,39 @@ import { Misc } from "./misc.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDItem { export class RdDItem {
static isPontImpraticable(item) { static isQueueDragon(item) {
return item.type == 'souffle' && item.name.toLowerCase().includes(' des ponts'); return item.type == 'queue' || item.type == 'ombre';
} }
static isDoubleResistanceFleuve(item) { static isSouffleDragon(item) {
return item.type == 'souffle' && item.name.toLowerCase().includes('résistance du fleuve') return item.type == 'souffle';
} }
static isCaseInnondee(item) { static isHRPontImpraticable(item) {
return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement'; return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes(' des ponts');
}
static isHRDoubleResistanceFleuve(item) {
return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes('résistance du fleuve')
}
static isHRPeage(item) {
return RdDItem.isSouffleDragon(item) && item.name.toLowerCase().includes('péage')
}
static isHRMauvaiseRencontreEnPerspective(item) {
return (RdDItem.isQueueDragon(item) || RdDItem.isSouffleDragon(item)) && item.name.toLowerCase().includes('mauvaise rencontre')
}
static isHRInertieDraconique(item) {
return RdDItem.isQueueDragon(item) && item.name.toLowerCase().includes('inertie draconique')
} }
static isCaseTMR(item) { static isCaseTMR(item) {
return item.type == 'casetmr'; return item.type == 'casetmr';
} }
static isMauvaiseRencontreEnPerspective(item) { static isHRCaseInnondee(item) {
return (item.type == 'queue' || item.type == 'ombre' || item.type == 'souffle') && item.name.toLowerCase().includes('mauvaise rencontre') return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement';
} }
} }

View File

@ -36,7 +36,8 @@ export class RdDTMRDialog extends Dialog {
this.actor = actor; this.actor = actor;
this.actor.tmrApp = this; // reference this app in the actor structure this.actor.tmrApp = this; // reference this app in the actor structure
this.viewOnly = mode == "visu" this.viewOnly = mode == "visu"
this.nbFatigue = this.viewOnly ? 0 : 1; // 1 premier point de fatigue du à la montée this.fatigueParCase = this.viewOnly ? 0 : this.actor.getTMRFatigue();
this.cumulFatigue = 0;
this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list); this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list);
this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list); this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list);
this.casesSpeciales = this.actor.data.items.filter(item => item.type == 'casetmr'); this.casesSpeciales = this.actor.data.items.filter(item => item.type == 'casetmr');
@ -51,7 +52,7 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
close() { close() {
this.actor.santeIncDec("fatigue", this.nbFatigue).then(super.close()); // moving 1 cell costs 1 fatigue this.actor.santeIncDec("fatigue", this.cumulFatigue).then(super.close()); // moving 1 cell costs 1 fatigue
this.actor.tmrApp = undefined; // Cleanup reference this.actor.tmrApp = undefined; // Cleanup reference
this.actor.setStatusDemiReve(false); this.actor.setStatusDemiReve(false);
if (!this.viewOnly) { if (!this.viewOnly) {
@ -174,7 +175,7 @@ export class RdDTMRDialog extends Dialog {
this.close(); this.close();
return true; return true;
} }
const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.nbFatigue; const resteAvantInconscience = this.actor.getFatigueMax() - this.actor.getFatigueActuelle() - this.cumulFatigue;
if (resteAvantInconscience <= 0) { if (resteAvantInconscience <= 0) {
this._tellToGM("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.quitterLesTMRInconscient(); this.quitterLesTMRInconscient();
@ -245,7 +246,7 @@ export class RdDTMRDialog extends Dialog {
else if (rencontreData.rolled.isEchec && rencontreData.rencontre.isPersistant) { else if (rencontreData.rolled.isEchec && rencontreData.rencontre.isPersistant) {
setTimeout(() => { setTimeout(() => {
rencontreData.nbRounds++; rencontreData.nbRounds++;
this.nbFatigue += 1; this.cumulFatigue += this.fatigueParCase;
this._tentativeMaitrise(rencontreData); this._tentativeMaitrise(rencontreData);
this._deleteTmrMessages(rencontreData.actor, rencontreData.nbRounds); this._deleteTmrMessages(rencontreData.actor, rencontreData.nbRounds);
}, 2000); }, 2000);
@ -609,7 +610,7 @@ export class RdDTMRDialog extends Dialog {
await this.actor.update({ "data.reve.tmrpos": tmrPos }); await this.actor.update({ "data.reve.tmrpos": tmrPos });
this._updateDemiReve(); this._updateDemiReve();
this.nbFatigue += 1; this.cumulFatigue += this.fatigueParCase;
this.updateValuesDisplay(); this.updateValuesDisplay();
game.socket.emit("system.foundryvtt-reve-de-dragon", { game.socket.emit("system.foundryvtt-reve-de-dragon", {
msg: "msg_tmr_move", data: { msg: "msg_tmr_move", data: {
@ -700,6 +701,7 @@ export class RdDTMRDialog extends Dialog {
// Gestion du cout de montée en points de rêve // Gestion du cout de montée en points de rêve
let reveCout = (this.tmrdata.isRapide && !this.actor.checkTeteDeplacementAccelere()) ? -2 : -1; let reveCout = (this.tmrdata.isRapide && !this.actor.checkTeteDeplacementAccelere()) ? -2 : -1;
this.cumulFatigue += this.fatigueParCase;
reveCout -= this.actor.checkMonteeLaborieuse(); reveCout -= this.actor.checkMonteeLaborieuse();
await this.actor.reveActuelIncDec(reveCout); await this.actor.reveActuelIncDec(reveCout);
// Le reste... // Le reste...
@ -707,7 +709,6 @@ export class RdDTMRDialog extends Dialog {
let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord); let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord);
await this.manageRencontre(tmr, () => { await this.manageRencontre(tmr, () => {
this.postRencontre(tmr); this.postRencontre(tmr);
this.nbFatigue = this.actor.getTMRFatigue();
this.actor.displayTMRQueueSouffleInformation(); this.actor.displayTMRQueueSouffleInformation();
}); });
} }