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'
|
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);
|
||||||
|
@ -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';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user