diff --git a/module/actor.js b/module/actor.js index 00e2975a..6ef742dc 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1902,9 +1902,8 @@ export class RdDActor extends Actor { ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} pour manger ${choix.doses}`) return; } - const surmonteExotisme = await this.surmonterExotisme(item, choix); - if (!surmonteExotisme) { - ui.notifications.warn(`Vous n'arrivez pas à manger de ${itemData.name}`) + if (!this._apprecierCuisine(itemData, choix.seForcer)) { + ui.notifications.info(`${this.name} ne n'arrive pas à manger de ${itemData.name}`) return; } await this.manger(item, choix.doses, { diminuerQuantite: false }); @@ -1912,10 +1911,40 @@ export class RdDActor extends Actor { await item.diminuerQuantite(choix.doses, choix); } + async _apprecierCuisine(itemData, seForcer) { + const surmonteExotisme = await this._surmonterExotisme(itemData, seForcer); + if (surmonteExotisme) { + await this.apprecier('gout', 'cuisine', itemData.data.qualite, itemData.data.boisson ? "apprécie la boisson" : "apprécie le plat"); + } + else if (seForcer) { + await this.jetDeMoral('malheureux'); + } + else { + return false; + } + return true; + } + /* -------------------------------------------- */ - async manger(item, doses, options = { diminuerQuantite: true }) { - if (!item.getActionPrincipale()) return; - await this.apprecierCuisine(item); + async _surmonterExotisme(itemData) { + const exotisme = Math.min(itemData.data.exotisme, itemData.data.qualite, 0); + if (exotisme < 0) { + const rolled = await this.rollCaracCompetence('volonte', 'cuisine', exotisme, { title: `tente de surmonter l'exotisme de ${itemData.name}` }); + return rolled.isSuccess; + } + return true; + } + + /* -------------------------------------------- */ + async apprecier(carac, compName, qualite, title) { + const rolled = await this.rollCaracCompetence(carac, compName, qualite, { title: title, apprecier: true }); + if (rolled?.isSuccess) { + await this.jetDeMoral('heureux'); + } + } + + /* -------------------------------------------- */ + async manger(item, doses, options = { diminuerQuantite: true}) { const sust = Misc.templateData(item).sust; if (sust > 0) { await this.updateCompteurValue('sust', Misc.keepDecimals(Misc.templateData(this).compteurs.sust.value + sust * doses, 2)); @@ -1925,7 +1954,6 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async boire(item, doses, options = { diminuerQuantite: true }) { - if (!item.getActionPrincipale()) return; const itemData = Misc.data(item); const desaltere = itemData.data.desaltere; if (desaltere > 0) { @@ -2008,35 +2036,6 @@ export class RdDActor extends Actor { await RdDResolutionTable.displayRollData(ethylismeData, this, 'chat-resultat-ethylisme.html'); } - /* -------------------------------------------- */ - async apprecierCuisine(item) { - const cuisine = Misc.data(this.getCompetence('cuisine')); - const itemData = Misc.data(item); - const qualite = itemData.data.qualite; - if (cuisine && qualite > 0 && qualite > cuisine.data.niveau) { - const rolled = await this.rollCaracCompetence('gout', 'cuisine', qualite, { title: itemData.data.boisson ? "apprécie la boisson" : "apprécie le plat" }); - if (rolled.isSuccess) { - await this.jetDeMoral('heureux'); - } - } - } - - /* -------------------------------------------- */ - async surmonterExotisme(item, choix = {}) { - const itemData = Misc.data(item); - const exotisme = Math.min(itemData.data.exotisme, itemData.data.qualite, 0); - if (exotisme < 0) { - const rolled = await this.rollCaracCompetence('volonte', 'cuisine', exotisme, { title: `tente de surmonter l'exotisme de ${itemData.name}` }); - if (rolled.isEchec) { - if (!choix.seForcer) { - return false; - } - await this.jetDeMoral('malheureux'); - } - } - return true; - } - /* -------------------------------------------- */ async jetGoutCuisine() { console.info('Jet de Gout/Cuisine'); @@ -2446,16 +2445,19 @@ export class RdDActor extends Actor { RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-general.html'); } - async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) { + async rollCaracCompetence(caracName, compName, diff, options = { title: "", apprecier: false}) { const carac = this.getCaracByName(caracName); if (!carac) { ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`) return; } const competence = Misc.data(this.getCompetence(compName)); - if (compName && !competence) { - ui.notifications.warn(`${this.name} n'a pas de compétence correspondant à ${compName}`) - return; + if (options.apprecier && competence){ + const minQualite = Math.max(0, competence.data.niveau); + if (diff <= minQualite) { + ui.notifications.info(`${this.name} a un niveau ${competence.data.niveau} en ${competence.name}, trop élevé pour apprécier la qualité de ${diff}`) + return; + } } let rollData = { alias: this.name,