diff --git a/module/actor.js b/module/actor.js index b23b9fe2..00e2975a 100644 --- a/module/actor.js +++ b/module/actor.js @@ -479,7 +479,7 @@ export class RdDActor extends Actor { await this._recupererBlessures(message, "critique", blessures.critiques.liste.filter(b => b.active), blessures.graves.liste); await this.update({ "data.blessures": blessures }); await this._recupererVie(message); - await this.jetDeMoral('neutre'); + await this._jetDeMoralChateauDormant(message); await this._recupereChance(); await this.transformerStress(); await this.retourSeuilDeReve(message); @@ -503,6 +503,11 @@ export class RdDActor extends Actor { await this.unsetFlag('foundryvtt-reve-de-dragon', 'utilisationChance'); } + async _jetDeMoralChateauDormant(message) { + const jetMoral = await this._jetDeMoral('neutre'); + message.content += jetMoral.ajustement == 0 ? ' -- le moral reste stable' : ' -- le moral retourne vers 0'; + } + /* -------------------------------------------- */ async _recupererBlessures(message, type, liste, moindres) { if (!this.bonusRecuperationPotion) this.bonusRecuperationPotion = 0; @@ -1250,8 +1255,8 @@ export class RdDActor extends Actor { } /* -------------------------------------------- */ - detectSurEncombrement() { - return Math.max(0, Math.ceil(Number(this.encTotal) - this.getEncombrementMax())); + computeMalusSurEncombrement() { + return Math.min(0, this.getEncombrementMax() - Math.ceil(Number(this.getEncTotal()))); } getEncombrementMax() { @@ -1292,7 +1297,7 @@ export class RdDActor extends Actor { .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) { + if (Misc.templateData(this).attributs?.malusarmure?.value != newMalusArmure) { await this.updateAttributeValue("malusarmure", newMalusArmure); } return newMalusArmure; @@ -1339,23 +1344,24 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeEtatGeneral() { const actorData = Misc.data(this); + const tplData = Misc.templateData(this); // Pas d'état général pour les entités forçage à 0 if (this.data.type == 'entite') { - actorData.data.compteurs.etat.value = 0; + tplData.compteurs.etat.value = 0; return; } // Pour les autres - let state = - (actorData.data.sante.vie.max - actorData.data.sante.vie.value); - if (ReglesOptionelles.isUsing("appliquer-fatigue") && actorData.data.sante.fatigue) { - state += RdDUtility.currentFatigueMalus(actorData.data.sante.fatigue.value, actorData.data.sante.endurance.max); + let state = Math.min(tplData.sante.vie.value - tplData.sante.vie.max, 0); + if (ReglesOptionelles.isUsing("appliquer-fatigue") && tplData.sante.fatigue) { + state += RdDUtility.currentFatigueMalus(tplData.sante.fatigue.value, tplData.sante.endurance.max); } // Ajout de l'éthylisme - state += Math.min(0, (actorData.data.compteurs.ethylisme?.value ?? 0)); + state += Math.min(0, (tplData.compteurs.ethylisme?.value ?? 0)); - actorData.data.compteurs.etat.value = state; - if (actorData.data.compteurs?.surenc) { - actorData.data.compteurs.surenc.value = - this.detectSurEncombrement(); + tplData.compteurs.etat.value = state; + if (tplData.compteurs?.surenc) { + tplData.compteurs.surenc.value = this.computeMalusSurEncombrement(); } } @@ -1767,19 +1773,16 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async jetDeMoral(situation, messageReussi = undefined, messageManque = undefined) { - let jetMoral = await this._jetMoral(situation) - if (jetMoral.ajustement != 0) { - let defaultMessage = jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral"; - let finMessage = jetMoral.succes ? (messageReussi != undefined ? messageReussi : defaultMessage) : (messageManque != undefined ? messageManque : defaultMessage); - ChatMessage.create({ - whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), - content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).` - }); - } + const jetMoral = await this._jetDeMoral(situation); + const finMessage = (jetMoral.succes ? messageReussi : messageManque) ?? (jetMoral.ajustement == 0 ? "Vous gardez votre moral": jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral"); + ChatMessage.create({ + whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name), + content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).` + }); return jetMoral.ajustement; } - async _jetMoral(situation) { + async _jetDeMoral(situation) { const moralActuel = Misc.toInt(Misc.templateData(this).compteurs.moral.value); const jet = await RdDDice.rollTotal("1d20", { showDice: true }); const difficulte = 10 + moralActuel; @@ -1972,7 +1975,7 @@ export class RdDActor extends Actor { ethylismeData.perteEndurance = await this.santeIncDec("endurance", -perte); if (!ethylisme.jet_moral) { - ethylismeData.jetMoral = await this._jetMoral('heureuse'); + ethylismeData.jetMoral = await this._jetDeMoral('heureuse'); if (ethylismeData.jetMoral.ajustement == 1) { ethylismeData.moralAlcool = 'heureux'; ethylisme.jet_moral = true; diff --git a/module/dialog-item-achat.js b/module/dialog-item-achat.js index 0d9c9c90..b6b3f6ba 100644 --- a/module/dialog-item-achat.js +++ b/module/dialog-item-achat.js @@ -29,7 +29,7 @@ export class DialogItemAchat extends Dialog { constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) { const isConsommable = venteData.item.type == 'nourritureboisson'; - let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 300, 'z-index': 99999 }; + let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 350, 'z-index': 99999 }; const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre"; const buttons = {}; @@ -39,7 +39,7 @@ export class DialogItemAchat extends Dialog { buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } }; buttons["decliner"] = { label: "Décliner", callback: it => { } }; let conf = { - title: actionAchat, + title: venteData.acheteur? venteData.acheteur.name + " - " + actionAchat : actionAchat, content: html, default: actionAchat, buttons: buttons diff --git a/styles/img/ui/icon_echoppe.webp b/styles/img/ui/icon_echoppe.webp new file mode 100644 index 00000000..e547bf14 Binary files /dev/null and b/styles/img/ui/icon_echoppe.webp differ diff --git a/templates/dialog-item-achat.html b/templates/dialog-item-achat.html index b6c6b9e3..b182a975 100644 --- a/templates/dialog-item-achat.html +++ b/templates/dialog-item-achat.html @@ -1,14 +1,24 @@
\ No newline at end of file +