Travail sur queues/souffles
This commit is contained in:
parent
7c54597a20
commit
fe73e5b984
@ -1765,10 +1765,10 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective'
|
||||
let addMsg = "";
|
||||
let rencSpecial = this.data.items.find(item => RdDItem.isMauvaiseRencontreEnPerspective(item));
|
||||
let rencSpecial = this.data.items.find(item => RdDItem.isHRMauvaiseRencontreEnPerspective(item));
|
||||
if (rencSpecial) {
|
||||
rencSpecial = duplicate(rencSpecial); // To keep it
|
||||
if (rencSpecial.type == 'queue') {
|
||||
if (rencSpecial.type != 'souffle') {
|
||||
this.deleteOwnedItem(rencSpecial._id); // Suppression dans la liste des queues
|
||||
addMsg = " La queue a été supprimée de votre fiche automatiquement";
|
||||
} else {
|
||||
@ -1784,15 +1784,14 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getTMRFatigue() { // Pour l'instant uniquement Inertie Draconique
|
||||
let inertieDraconique = this.data.items.find(item => item.type == 'queue' && item.name.toLowerCase().includes('inertie draconique'));
|
||||
if (inertieDraconique) {
|
||||
let countInertieDraconique = this.data.items.filter(item => RdDItem.isHRInertieDraconique(item)).length;
|
||||
if (countInertieDraconique>0) {
|
||||
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)
|
||||
});
|
||||
return 2;
|
||||
}
|
||||
return 1;
|
||||
return countInertieDraconique + 1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -1808,7 +1807,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
isDoubleResistanceFleuve() {
|
||||
let resistFleuve = this.data.items.find(item => RdDItem.isDoubleResistanceFleuve(item));
|
||||
let resistFleuve = this.data.items.find(item => RdDItem.isHRDoubleResistanceFleuve(item));
|
||||
if (resistFleuve) {
|
||||
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é.",
|
||||
@ -1821,7 +1820,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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')) {
|
||||
await this.reveActuelIncDec(-1);
|
||||
ChatMessage.create({
|
||||
@ -1842,7 +1841,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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({
|
||||
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)
|
||||
@ -1852,7 +1851,7 @@ export class RdDActor extends Actor {
|
||||
// Débordement ?
|
||||
let isTmrInondee = this.data.items.filter(it => RdDItem.isCaseTMR(it))
|
||||
.filter(it => it.data.coord == tmr.coord)
|
||||
.find(it => RdDItem.isCaseInnondee(it));
|
||||
.find(it => RdDItem.isHRCaseInnondee(it));
|
||||
if (isTmrInondee) {
|
||||
ChatMessage.create({
|
||||
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,
|
||||
callbacks: [
|
||||
this.createCallbackExperience(),
|
||||
{ action: r => this._resultArt(r) }
|
||||
{ action: r => callBackResult(r) }
|
||||
]
|
||||
});
|
||||
dialog.render(true);
|
||||
|
@ -3,23 +3,39 @@ import { Misc } from "./misc.js";
|
||||
/* -------------------------------------------- */
|
||||
export class RdDItem {
|
||||
|
||||
static isPontImpraticable(item) {
|
||||
return item.type == 'souffle' && item.name.toLowerCase().includes(' des ponts');
|
||||
static isQueueDragon(item) {
|
||||
return item.type == 'queue' || item.type == 'ombre';
|
||||
}
|
||||
|
||||
static isDoubleResistanceFleuve(item) {
|
||||
return item.type == 'souffle' && item.name.toLowerCase().includes('résistance du fleuve')
|
||||
static isSouffleDragon(item) {
|
||||
return item.type == 'souffle';
|
||||
}
|
||||
|
||||
static isCaseInnondee(item) {
|
||||
return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement';
|
||||
static isHRPontImpraticable(item) {
|
||||
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) {
|
||||
return item.type == 'casetmr';
|
||||
}
|
||||
|
||||
static isMauvaiseRencontreEnPerspective(item) {
|
||||
return (item.type == 'queue' || item.type == 'ombre' || item.type == 'souffle') && item.name.toLowerCase().includes('mauvaise rencontre')
|
||||
static isHRCaseInnondee(item) {
|
||||
return RdDItem.isCaseTMR(item) && item.data.specific == 'debordement';
|
||||
}
|
||||
|
||||
}
|
@ -36,7 +36,8 @@ export class RdDTMRDialog extends Dialog {
|
||||
this.actor = actor;
|
||||
this.actor.tmrApp = this; // reference this app in the actor structure
|
||||
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.sortReserves = duplicate(this.actor.data.data.reve.reserve.list);
|
||||
this.casesSpeciales = this.actor.data.items.filter(item => item.type == 'casetmr');
|
||||
@ -51,7 +52,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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.setStatusDemiReve(false);
|
||||
if (!this.viewOnly) {
|
||||
@ -174,7 +175,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
this.close();
|
||||
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) {
|
||||
this._tellToGM("Vous vous écroulez de fatigue : vous quittez les Terres médianes !");
|
||||
this.quitterLesTMRInconscient();
|
||||
@ -245,7 +246,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
else if (rencontreData.rolled.isEchec && rencontreData.rencontre.isPersistant) {
|
||||
setTimeout(() => {
|
||||
rencontreData.nbRounds++;
|
||||
this.nbFatigue += 1;
|
||||
this.cumulFatigue += this.fatigueParCase;
|
||||
this._tentativeMaitrise(rencontreData);
|
||||
this._deleteTmrMessages(rencontreData.actor, rencontreData.nbRounds);
|
||||
}, 2000);
|
||||
@ -609,7 +610,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
await this.actor.update({ "data.reve.tmrpos": tmrPos });
|
||||
|
||||
this._updateDemiReve();
|
||||
this.nbFatigue += 1;
|
||||
this.cumulFatigue += this.fatigueParCase;
|
||||
this.updateValuesDisplay();
|
||||
game.socket.emit("system.foundryvtt-reve-de-dragon", {
|
||||
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
|
||||
let reveCout = (this.tmrdata.isRapide && !this.actor.checkTeteDeplacementAccelere()) ? -2 : -1;
|
||||
this.cumulFatigue += this.fatigueParCase;
|
||||
reveCout -= this.actor.checkMonteeLaborieuse();
|
||||
await this.actor.reveActuelIncDec(reveCout);
|
||||
// Le reste...
|
||||
@ -707,7 +709,6 @@ export class RdDTMRDialog extends Dialog {
|
||||
let tmr = TMRUtility.getTMR(this.actor.data.data.reve.tmrpos.coord);
|
||||
await this.manageRencontre(tmr, () => {
|
||||
this.postRencontre(tmr);
|
||||
this.nbFatigue = this.actor.getTMRFatigue();
|
||||
this.actor.displayTMRQueueSouffleInformation();
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user