Fix calcul encTotal
Autant le calculer depuis les objets eux-mêmes
This commit is contained in:
		| @@ -1142,9 +1142,7 @@ export class RdDActor extends Actor { | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   computeEncombrement() { | ||||
|     this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) | ||||
|       .map(it => it.data.encTotal) | ||||
|       .reduce(Misc.sum(), 0); | ||||
|     this.encTotal = this.items.map(it => it.getEncTotal()).reduce(Misc.sum(), 0); | ||||
|     return this.encTotal; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -88,13 +88,17 @@ export class RdDItem extends Item { | ||||
|     return Misc.templateData(this).magique; | ||||
|   } | ||||
|  | ||||
|   getEncTotal() { | ||||
|     const itemData = Misc.data(this); | ||||
|     return Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); | ||||
|   } | ||||
|   getEnc() { | ||||
|     const itemData = Misc.data(this); | ||||
|     switch (itemData.type) { | ||||
|       case 'herbe': | ||||
|         return encBrin; | ||||
|     } | ||||
|     return itemData.data.encombrement | ||||
|     return itemData.data.encombrement ?? 0; | ||||
|   } | ||||
|  | ||||
|   prepareDerivedData() { | ||||
|   | ||||
| @@ -177,7 +177,7 @@ export class RdDUtility { | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-surenc.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-enctotal.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html',       | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html', | ||||
|       // Calendrier | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html', | ||||
|       'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html', | ||||
| @@ -339,28 +339,40 @@ export class RdDUtility { | ||||
|     // Attribution des objets aux conteneurs | ||||
|     for (let conteneur of conteneurs) { | ||||
|       conteneur.subItems = []; | ||||
|       conteneur.data.encTotal = conteneur.data.encombrement; | ||||
|       //conteneur.data.encTotal = ; Deja calculé | ||||
|       if (conteneur.data.contenu) { | ||||
|         for (let id of conteneur.data.contenu) { | ||||
|           let objet = objets.find(objet => (id == objet._id)); | ||||
|           if (objet) { | ||||
|             if (!objet.data.encombrement) | ||||
|               objet.data.encombrement = 0; // Auto-fix | ||||
|             objet.estContenu = true; // Permet de filtrer ce qifui est porté dans le template | ||||
|             objetVersConteneur[id] = conteneur._id; | ||||
|             conteneur.data.encTotal += Number(objet.data.encombrement) * Number(((objet.data.quantite) ? objet.data.quantite : 1)); | ||||
|             conteneur.subItems.push(objet); | ||||
|           } | ||||
|       for (let id of conteneur.data.contenu ?? []) { | ||||
|         let objet = objets.find(objet => (id == objet._id)); | ||||
|         if (objet) { | ||||
|           objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template | ||||
|           objetVersConteneur[id] = conteneur._id; | ||||
|           conteneur.subItems.push(objet); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     for (let conteneur of conteneurs) { | ||||
|       conteneur.data.encTotal = RdDUtility.calculEncContenu(conteneur, objets); | ||||
|     } | ||||
|     return objetVersConteneur; | ||||
|   } | ||||
|    | ||||
|  | ||||
|   static calculEncContenu(conteneur, objets) { | ||||
|     const itemData = Misc.data(conteneur); | ||||
|     const contenuDatas = (itemData.data.contenu ?? []).filter(id => id != undefined) | ||||
|       .map(id => Misc.data(objets.find(it => (id == it._id)))); | ||||
|     let enc = Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); | ||||
|     for (let itemData of contenuDatas){ | ||||
|       if (itemData.type == 'conteneur') { | ||||
|         enc +=  RdDUtility.calculEncContenu(itemData, objets); | ||||
|       } | ||||
|       else{ | ||||
|         enc += Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); | ||||
|       } | ||||
|     } | ||||
|     return enc; | ||||
|   } | ||||
|  | ||||
|   // Construit la liste des conteneurs de niveau 1 (c'est à dire non contenu eux-même dans un conteneur) | ||||
|   static conteneursRacine(conteneurs) { | ||||
|     return conteneurs.filter( (conteneur, index, arr) => !conteneur.estContenu); | ||||
|     return conteneurs.filter((conteneur, index, arr) => !conteneur.estContenu); | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
| @@ -429,7 +441,7 @@ export class RdDUtility { | ||||
|     return ReglesOptionelles.isUsing("appliquer-fatigue") ? { | ||||
|       malus: RdDUtility.calculMalusFatigue(fatigue, endurance), | ||||
|       html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "</table>" | ||||
|     } : { malus:0, html:''}; | ||||
|     } : { malus: 0, html: '' }; | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
| @@ -513,7 +525,7 @@ export class RdDUtility { | ||||
|     if (ReglesOptionelles.isUsing("appliquer-fatigue")) { | ||||
|       max = Math.max(1, Math.min(max, 60)); | ||||
|       value = Math.min(max * 2, Math.max(0, value)); | ||||
|        | ||||
|  | ||||
|       let fatigueTab = fatigueMatrix[max]; | ||||
|       let fatigueRem = value; | ||||
|       for (let idx = 0; idx < fatigueTab.length; idx++) { | ||||
| @@ -558,7 +570,7 @@ export class RdDUtility { | ||||
|         return RdDUtility.responseNombreAstral(sockmsg.data); | ||||
|       case "msg_tmr_move": | ||||
|         let actor = game.actors.get(sockmsg.data.actorId); | ||||
|         if (actor.isOwner || game.user.isGM ) { | ||||
|         if (actor.isOwner || game.user.isGM) { | ||||
|           actor.refreshTMRView(sockmsg.data.tmrPos); | ||||
|         } | ||||
|         break; | ||||
| @@ -587,7 +599,7 @@ export class RdDUtility { | ||||
|  | ||||
|     // gestion bouton tchat Acheter | ||||
|     html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event)); | ||||
|      | ||||
|  | ||||
|     // Gestion du bouton payer | ||||
|     html.on("click", '.payer-button', event => { | ||||
|       let sumdenier = event.currentTarget.attributes['data-somme-denier']?.value ?? 0; | ||||
| @@ -637,14 +649,14 @@ export class RdDUtility { | ||||
|       if (token.actor && token.data.actorLink) { | ||||
|         return token.actor; | ||||
|       } | ||||
|       if (msgPlayer != undefined){ | ||||
|       if (msgPlayer != undefined) { | ||||
|         msgPlayer += "<br>le token sélectionné doit être lié à un personnage"; | ||||
|       } | ||||
|     } | ||||
|     if (game.user.character) { | ||||
|       return game.user.character; | ||||
|     } | ||||
|     if (msgPlayer != undefined){ | ||||
|     if (msgPlayer != undefined) { | ||||
|       msgPlayer += "<br>vous pouvez sélectionner un seul token lié à un personnage"; | ||||
|       msgPlayer += "<br>vous devez être connecté comme joueur avec un personnage sélectionné"; | ||||
|       ui.notifications.warn(msgPlayer); | ||||
| @@ -805,9 +817,9 @@ export class RdDUtility { | ||||
|   } | ||||
|  | ||||
|   /*-------------------------------------------- */ | ||||
|   static distribuerStress( stressValue, raison = 'Inconnu', nomJoueur = undefined) { | ||||
|   static distribuerStress(stressValue, raison = 'Inconnu', nomJoueur = undefined) { | ||||
|     if (game.user.isGM) { | ||||
|       if( nomJoueur == undefined) { | ||||
|       if (nomJoueur == undefined) { | ||||
|         for (let actor of game.actors) { | ||||
|           if (actor.hasPlayerOwner) { | ||||
|             actor.addCompteurValue('stress', stressValue, raison); | ||||
| @@ -816,7 +828,7 @@ export class RdDUtility { | ||||
|         } | ||||
|       } else { | ||||
|         //console.log(stressValue, nomJoueur); | ||||
|         let joueur = game.users.find( user => user.name.toLowerCase() == nomJoueur.toLowerCase() ); | ||||
|         let joueur = game.users.find(user => user.name.toLowerCase() == nomJoueur.toLowerCase()); | ||||
|         //console.log("Player", joueur, joueur.character ); | ||||
|         joueur.character.addCompteurValue('stress', stressValue, raison); | ||||
|         ui.notifications.info(`${joueur.character.name} a reçu ${stressValue} points de Stress (raison : ${raison})`); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user