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
1 changed files with 42 additions and 40 deletions

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}`)
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,