Limites à l'appréciation

On n'apprécie pas si on se force
On n'apprécie pas si la qualité est en dessous de la compétence

On pourrait apprécier les oeuvres (méthode générique pour apprécier)
This commit is contained in:
Vincent Vandemeulebrouck 2021-11-10 22:49:01 +01:00
parent 42716dcadb
commit 8b4f87062c

View File

@ -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}`) ui.notifications.warn(`Il n'y a pas assez de ${itemData.name} pour manger ${choix.doses}`)
return; return;
} }
const surmonteExotisme = await this.surmonterExotisme(item, choix); if (!this._apprecierCuisine(itemData, choix.seForcer)) {
if (!surmonteExotisme) { ui.notifications.info(`${this.name} ne n'arrive pas à manger de ${itemData.name}`)
ui.notifications.warn(`Vous n'arrivez pas à manger de ${itemData.name}`)
return; return;
} }
await this.manger(item, choix.doses, { diminuerQuantite: false }); await this.manger(item, choix.doses, { diminuerQuantite: false });
@ -1912,10 +1911,40 @@ export class RdDActor extends Actor {
await item.diminuerQuantite(choix.doses, choix); 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 _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}) { async manger(item, doses, options = { diminuerQuantite: true}) {
if (!item.getActionPrincipale()) return;
await this.apprecierCuisine(item);
const sust = Misc.templateData(item).sust; const sust = Misc.templateData(item).sust;
if (sust > 0) { if (sust > 0) {
await this.updateCompteurValue('sust', Misc.keepDecimals(Misc.templateData(this).compteurs.sust.value + sust * doses, 2)); 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 }) { async boire(item, doses, options = { diminuerQuantite: true }) {
if (!item.getActionPrincipale()) return;
const itemData = Misc.data(item); const itemData = Misc.data(item);
const desaltere = itemData.data.desaltere; const desaltere = itemData.data.desaltere;
if (desaltere > 0) { if (desaltere > 0) {
@ -2008,35 +2036,6 @@ export class RdDActor extends Actor {
await RdDResolutionTable.displayRollData(ethylismeData, this, 'chat-resultat-ethylisme.html'); 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() { async jetGoutCuisine() {
console.info('Jet de Gout/Cuisine'); console.info('Jet de Gout/Cuisine');
@ -2446,17 +2445,20 @@ export class RdDActor extends Actor {
RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-general.html'); 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); const carac = this.getCaracByName(caracName);
if (!carac) { if (!carac) {
ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`) ui.notifications.warn(`${this.name} n'a pas de caractéristique correspondant à ${caracName}`)
return; return;
} }
const competence = Misc.data(this.getCompetence(compName)); const competence = Misc.data(this.getCompetence(compName));
if (compName && !competence) { if (options.apprecier && competence){
ui.notifications.warn(`${this.name} n'a pas de compétence correspondant à ${compName}`) 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; return;
} }
}
let rollData = { let rollData = {
alias: this.name, alias: this.name,
caracValue: Number(carac.value), caracValue: Number(carac.value),