Gestion des signes draconiques #455
@ -95,7 +95,7 @@ export class RdDActorSheet extends ActorSheet {
|
||||
caracTotal: RdDCarac.computeTotal(formData.data.carac, formData.data.beaute),
|
||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||
encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(),
|
||||
prixTotalEquipement: await this.actor.computePrixTotalEquipement(),
|
||||
prixTotalEquipement: this.actor.computePrixTotalEquipement(),
|
||||
surprise: RdDBonus.find(this.actor.getSurprise(false)).descr,
|
||||
fatigue: {
|
||||
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
|
||||
|
@ -89,7 +89,6 @@ export class RdDActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
|
||||
const actorData = this.data;
|
||||
|
||||
// Dynamic computing fields
|
||||
@ -232,7 +231,7 @@ export class RdDActor extends Actor {
|
||||
return Math.floor(this.encTotal ?? 0);
|
||||
}
|
||||
getPrixTotalEquipement() {
|
||||
return Math.floor(this.prixTotalEquipement ?? 0);
|
||||
return Math.floor(Misc.templateData(this).prixTotalEquipement ?? 0);
|
||||
}
|
||||
getSurenc() {
|
||||
return Misc.toInt(Misc.templateData(this).compteurs.surenc?.value);
|
||||
@ -948,57 +947,61 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
detectSurEncombrement() {
|
||||
let maxEnc = 0;
|
||||
if (this.data.type == 'vehicule')
|
||||
maxEnc = Misc.templateData(this).capacite_encombrement;
|
||||
else
|
||||
maxEnc = Misc.templateData(this).attributs.encombrement.value;
|
||||
let diffEnc = Number(this.data.encTotal) - Number(maxEnc);
|
||||
return Math.max(0, Math.ceil(diffEnc));
|
||||
return Math.max(0, Math.ceil(Number(this.data.encTotal) - this.getEncombrementMax()));
|
||||
}
|
||||
getEncombrementMax() {
|
||||
return (this.data.type == 'vehicule')
|
||||
? Misc.templateData(this).capacite_encombrement
|
||||
: Misc.templateData(this).attributs.encombrement.value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async computeEncombrementTotalEtMalusArmure() {
|
||||
let encTotal = 0;
|
||||
let newMalusArmure = 0;
|
||||
for (const itemData of this.filterItemsData(it => it.data.encombrement)) {
|
||||
if (itemData.type == 'armure' && itemData.data.equipe) { // Armure équipée, intégration du malus armure total
|
||||
newMalusArmure += itemData.data.malus;
|
||||
await this.computeMalusArmure();
|
||||
return this.computeEncombrement();
|
||||
}
|
||||
// Calcul encombrement
|
||||
if (itemData.data && itemData.data.encombrement != undefined) {
|
||||
if (!Number(itemData.data.encombrement)) itemData.data.encombrement = 0; // Auto-fix
|
||||
if (itemData.data.quantite == undefined) itemData.data.quantite = 1; // Auto-fix
|
||||
if (itemData.data.quantite < 0) itemData.data.quantite = 0; // Auto-fix
|
||||
itemData.data.encTotal = Number(itemData.data.encombrement) * Number(itemData.data.quantite);
|
||||
encTotal += itemData.data.encTotal;
|
||||
} else {
|
||||
itemData.data.encTotal = 0; // Force default enc
|
||||
}
|
||||
}
|
||||
// Mise à jour valeur totale et états
|
||||
this.data.encTotal = encTotal;
|
||||
this.detectSurEncombrement();
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeEncombrement() {
|
||||
Misc.templateData(this).encTotal = this.filterItemsData(it => it.data.encombrement)
|
||||
.map(it => this._calcEncItem(it))
|
||||
.reduce(Misc.sum(), 0);
|
||||
return Misc.templateData(this).encTotal;
|
||||
}
|
||||
|
||||
_calcEncItem(it) {
|
||||
it.data.encombrement = Number(it.data.encombrement ?? 0);
|
||||
it.data.quantite = Math.min(1, Number(it.data.quantite ?? 1));
|
||||
it.data.encTotal = it.data.encombrement * it.data.quantite;
|
||||
return it.data.encTotal;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async computeMalusArmure() {
|
||||
const newMalusArmure = this.filterItemsData(it => it.type == 'armure' && it.data.equipe)
|
||||
.map(it => it.data.malus ?? 0)
|
||||
.reduce(Misc.sum(), 0);
|
||||
// Mise à jour éventuelle du malus armure
|
||||
if (newMalusArmure && Misc.templateData(this).attributs?.malusarmure?.value != newMalusArmure) {
|
||||
await this.updateAttributeValue("malusarmure", newMalusArmure);
|
||||
}
|
||||
return encTotal;
|
||||
return newMalusArmure;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async computePrixTotalEquipement() {
|
||||
computePrixTotalEquipement() {
|
||||
let prixTotalEquipement = 0;
|
||||
|
||||
// prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité.
|
||||
for (const itemData of this.filterItemsData(it => it?.data.cout)) {
|
||||
const cout = Math.min(Number(itemData.data.cout) ?? 0, 0);
|
||||
const quantite = Math.min(Number(itemData.data.quantite) ?? 1, 1);
|
||||
const cout = Math.min(Number(itemData.data.cout ?? 0), 0);
|
||||
const quantite = Math.min(Number(itemData.data?.quantite ?? 1), 1);
|
||||
prixTotalEquipement += cout * quantite;
|
||||
}
|
||||
// Mise à jour valeur totale de l'équipement
|
||||
this.prixTotalEquipement = prixTotalEquipement;
|
||||
Misc.templateData(this).prixTotalEquipement = prixTotalEquipement;
|
||||
return prixTotalEquipement;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user