forked from public/foundryvtt-reve-de-dragon
		
	Travail sur queues/souffles
This commit is contained in:
		| @@ -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(); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user