Fix: soucis avec plusieurs queues&souffles

=> montée laborieuse, mauvaises rencontres

Simplification de EffetsDraconiques: passer l'actor pour tester
si l'acteur a un effet sur lui, ou un item pour tester si un item
correspond
This commit is contained in:
Vincent Vandemeulebrouck 2022-04-23 01:02:03 +02:00
parent 9a8ef9f316
commit f0d23bb1d0
4 changed files with 49 additions and 83 deletions

View File

@ -337,7 +337,7 @@ export class RdDActorSheet extends ActorSheet {
ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat."); ui.notifications.info("Impossible de lancer l'initiative sans être dans un combat.");
} }
}); });
// Display TMR, visuualisation // Display TMR, visualisation
html.find('.visu-tmr').click(async event => { html.find('.visu-tmr').click(async event => {
this.actor.displayTMR("visu"); this.actor.displayTMR("visu");
}); });

View File

@ -2373,14 +2373,13 @@ 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 => EffetsDraconiques.isMauvaiseRencontre(item)); let rencSpecial = EffetsDraconiques.mauvaiseRencontre(this);
if (rencSpecial) { if (rencSpecial) {
rencSpecial = Misc.data(rencSpecial); // To keep it
if (rencSpecial.type != 'souffle') { if (rencSpecial.type != 'souffle') {
this.deleteEmbeddedDocuments('Item', [rencSpecial._id]); // Suppression dans la liste des queues this.deleteEmbeddedDocuments('Item', [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 {
addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres manuellement."; addMsg = " Vous devez gérer manuellement le décompte de mauvaises rencontres.";
} }
ChatMessage.create({ ChatMessage.create({
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg, content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
@ -3138,7 +3137,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente countMonteeLaborieuse() { // Return +1 par queue/ombre/souffle Montée Laborieuse présente
let countMonteeLaborieuse = this.filterItemsData(it => EffetsDraconiques.isMonteeLaborieuse(it)).length; let countMonteeLaborieuse = EffetsDraconiques.countMonteeLaborieuse(this);
if (countMonteeLaborieuse > 0) { if (countMonteeLaborieuse > 0) {
ChatMessage.create({ ChatMessage.create({
content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`, content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`,

View File

@ -589,7 +589,7 @@ export class RdDTMRDialog extends Dialog {
maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' } maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' }
} }
rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined, rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined,
rollData.competence.data.defaut_carac = 'reve-actuel'; rollData.competence.data.defaut_carac = 'reve-actuel';
await this._rollMaitriseCaseHumide(rollData); await this._rollMaitriseCaseHumide(rollData);
} }
} }

View File

@ -92,43 +92,10 @@ export class EffetsDraconiques {
static isPresentCite(caseTMR, coord) { static isPresentCite(caseTMR, coord) {
return EffetsDraconiques.presentCites.isCase(caseTMR, coord); return EffetsDraconiques.presentCites.isCase(caseTMR, coord);
} }
/* -------------------------------------------- */
static isMauvaiseRencontre(item) {
return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre'));
}
static isMonteeLaborieuse(item) {
return EffetsDraconiques.isMatching(item, it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse'));
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static isFermetureCite(item) { static isSortImpossible(actor) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.fermetureCites.match(it)); return actor.data.items.find(it =>
}
static isPontImpraticable(item) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pontImpraticable.match(it));
}
static isDoubleResistanceFleuve(item) {
return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve'));
}
static isPeage(item) {
return EffetsDraconiques.isMatching(item, it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage'));
}
static isPeriple(item) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.periple.match(it));
}
static isDesorientation(item) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.desorientation.match(it)); // TODO
}
/* -------------------------------------------- */
static isSortImpossible(item) {
return EffetsDraconiques.isMatching(item, it =>
EffetsDraconiques.conquete.match(it) || EffetsDraconiques.conquete.match(it) ||
EffetsDraconiques.periple.match(it) || EffetsDraconiques.periple.match(it) ||
EffetsDraconiques.urgenceDraconique.match(it) || EffetsDraconiques.urgenceDraconique.match(it) ||
@ -136,57 +103,57 @@ export class EffetsDraconiques {
); );
} }
static isSortReserveImpossible(item) { static isSortReserveImpossible(actor) {
return EffetsDraconiques.isMatching(item, it => return actor.data.items.find(it =>
EffetsDraconiques.conquete.match(it) || EffetsDraconiques.conquete.match(it) ||
EffetsDraconiques.periple.match(it) || EffetsDraconiques.periple.match(it) ||
EffetsDraconiques.pelerinage.match(it) EffetsDraconiques.pelerinage.match(it)
); );
} }
static isConquete(item) { static isDonDoubleReve(actor) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.conquete.match(it)); return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve');
} }
static isPelerinage(item) { static isConnaissanceFleuve(actor) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.pelerinage.match(it)); return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve'));
} }
static countInertieDraconique(item) { static isReserveEnSecurite(actor) {
return EffetsDraconiques.count(item, it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')); return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité'));
} }
static isUrgenceDraconique(item) { static isDeplacementAccelere(actor) {
return EffetsDraconiques.isMatching(item, it => EffetsDraconiques.urgenceDraconique.match(it)); return actor.data.items.find(it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré'));
} }
/* -------------------------------------------- */ static isDoubleResistanceFleuve(actor) {
static isDonDoubleReve(item) { return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('résistance du fleuve'));
return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name == 'Don de double-rêve');
} }
static isConnaissanceFleuve(item) { static countInertieDraconique(actor) {
return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes('connaissance du fleuve')); return actor.data.items.filter(it => Draconique.isQueueDragon(it) && it.name.toLowerCase().includes('inertie draconique')).length;
} }
static isReserveEnSecurite(item) { static countMonteeLaborieuse(actor) {
return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' en sécurité')); return actor.data.items.filter(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('montée laborieuse')).length;
} }
static isDeplacementAccelere(item) { static mauvaiseRencontre(actor) {
item = Misc.data(item); return actor.data.items.find(it => Draconique.isQueueSouffle(it) && it.name.toLowerCase().includes('mauvaise rencontre'));
return EffetsDraconiques.isMatching(item, it => Draconique.isTeteDragon(it) && it.name.toLowerCase().includes(' déplacement accéléré'));
} }
static isMatching(item, matcher) { static isPontImpraticable(actor) {
return EffetsDraconiques.toItems(item).find(matcher); return actor.data.items.find(it => EffetsDraconiques.pontImpraticable.match(it));
}
static count(item, matcher) {
return EffetsDraconiques.toItems(item).filter(matcher).length;
} }
static toItems(item) { static isUrgenceDraconique(actor) {
return (item?.documentName === 'Actor') ? item.data.items : (item?.documentName === 'Item') ? [Misc.data(item)] : []; return actor.data.items.find(it => EffetsDraconiques.urgenceDraconique.match(it));
} }
static isPeage(actor) {
return actor.data.items.find(it => Draconique.isSouffleDragon(it) && it.name.toLowerCase().includes('péage'));
}
} }