forked from public/foundryvtt-reve-de-dragon
Faune et flore comestibles
- permettre de cuisiner les ingrédients (faune & flore) - permettre de manger des ingrédients "crus"
This commit is contained in:
122
module/actor.js
122
module/actor.js
@ -1209,7 +1209,7 @@ export class RdDActor extends Actor {
|
||||
const cible = this.getContenantOrParent(dest);
|
||||
const [empilable, message] = item.isInventaireEmpilable(dest);
|
||||
if (empilable) {
|
||||
await this.regrouperEquipementsSimilaires(item, dest);
|
||||
await dest.empiler(item)
|
||||
result = false;
|
||||
}
|
||||
// changer de conteneur
|
||||
@ -1309,11 +1309,6 @@ export class RdDActor extends Actor {
|
||||
return itemMap;
|
||||
}
|
||||
|
||||
async regrouperEquipementsSimilaires(item, dest) {
|
||||
await dest.quantiteIncDec(item.system.quantite);
|
||||
await item.delete();
|
||||
}
|
||||
|
||||
isSurenc() {
|
||||
return this.isPersonnage() ? (this.computeMalusSurEncombrement() < 0) : false
|
||||
}
|
||||
@ -1949,20 +1944,28 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async actionItem(item, onActionItem = async () => { }) {
|
||||
if (!item.getActionPrincipale()) return;
|
||||
switch (item.type) {
|
||||
case 'nourritureboisson': return await this.actionNourritureboisson(item, onActionItem);
|
||||
case 'potion': return await this.consommerPotion(item, onActionItem);
|
||||
case 'livre': return await this.actionLire(item);
|
||||
case 'conteneur': return await item.sheet.render(true);
|
||||
case 'herbe': {
|
||||
if (item.isHerbeAPotion()) {
|
||||
return this.dialogFabriquerPotion(item);
|
||||
}
|
||||
return;
|
||||
item.actionPrincipale(this, onActionItem);
|
||||
}
|
||||
|
||||
async actionNourritureboisson(item, onActionItem) {
|
||||
switch (item.isComestible()) {
|
||||
case 'brut': {
|
||||
let d = new Dialog({
|
||||
title: "Nourriture brute",
|
||||
content: `Que faire de votre ${item.name}`,
|
||||
buttons: {
|
||||
'cuisiner': { icon: '<i class="fas fa-check"></i>', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) },
|
||||
'manger': { icon: '<i class="fas fa-check"></i>', label: 'Manger cru', callback: async () => await this.mangerNourriture(item, onActionItem) }
|
||||
}
|
||||
});
|
||||
d.render(true);
|
||||
return true;
|
||||
}
|
||||
case 'queue': case 'ombre': return await this.actionRefoulement(item);
|
||||
case 'pret':
|
||||
await this.mangerNourriture(item, onActionItem);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -1976,11 +1979,18 @@ export class RdDActor extends Actor {
|
||||
await this.rollTache(tache.id);
|
||||
}
|
||||
}
|
||||
async actionHerbe(item) {
|
||||
if (item.isHerbeAPotion()) {
|
||||
return this.dialogFabriquerPotion(item);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async consommer(item, choix) {
|
||||
switch (item.type) {
|
||||
case 'nourritureboisson':
|
||||
case 'herbe': case 'faune':
|
||||
return await this.consommerNourritureboisson(item.id, choix);
|
||||
case 'potion':
|
||||
return await this.consommerPotion(item)
|
||||
@ -1999,7 +2009,7 @@ export class RdDActor extends Actor {
|
||||
return;
|
||||
}
|
||||
const item = this.getObjet(itemId)
|
||||
if (item.type != 'nourritureboisson') {
|
||||
if (!item.isComestible()) {
|
||||
return;
|
||||
}
|
||||
if (choix.doses > item.system.quantite) {
|
||||
@ -2738,8 +2748,9 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _resultArt(artData) {
|
||||
const baseQualite = (artData.rolled.isSuccess ? artData.oeuvre.system.niveau : artData.competence.system.niveau);
|
||||
artData.qualiteFinale = Math.min(baseQualite, artData.oeuvre.system.niveau) + artData.rolled.ptQualite;
|
||||
const niveau = artData.oeuvre.system.niveau ?? 0;
|
||||
const baseQualite = (artData.rolled.isSuccess ? niveau : artData.competence.system.niveau);
|
||||
artData.qualiteFinale = Math.min(baseQualite, niveau) + artData.rolled.ptQualite;
|
||||
|
||||
await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`);
|
||||
}
|
||||
@ -2793,32 +2804,64 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _resultRecetteCuisine(artData) {
|
||||
const baseQualite = (artData.rolled.isSuccess ? artData.oeuvre.system.niveau : artData.competence.system.niveau);
|
||||
const sust = artData.oeuvre.system.sust * artData.proportions;
|
||||
artData.qualiteFinale = Math.min(baseQualite, artData.oeuvre.system.niveau) + artData.rolled.ptQualite;
|
||||
artData.exotismeFinal = Math.min(Math.min(artData.qualiteFinale, artData.oeuvre.system.exotisme ?? 0), 0);
|
||||
//console.log("OEUVRE", artData.art, artData)
|
||||
async _resultRecetteCuisine(cuisine) {
|
||||
const niveauRecette = cuisine.oeuvre.system.niveau ?? 0;
|
||||
const baseQualite = (cuisine.rolled.isSuccess ? niveauRecette : cuisine.competence.system.niveau);
|
||||
cuisine.qualiteFinale = Math.min(baseQualite, niveauRecette) + cuisine.rolled.ptQualite;
|
||||
cuisine.exotismeFinal = Math.min(Math.min(cuisine.qualiteFinale, cuisine.oeuvre.system.exotisme ?? 0), 0);
|
||||
cuisine.sust = cuisine.oeuvre.system.sust * Math.min(cuisine.proportions, cuisine.proportionsMax ?? cuisine.proportions)
|
||||
const platCuisine = {
|
||||
name: artData.oeuvre.name,
|
||||
name: cuisine.oeuvre.name,
|
||||
type: 'nourritureboisson',
|
||||
img: 'systems/foundryvtt-reve-de-dragon/icons/objets/provision_cuite.webp',
|
||||
system: {
|
||||
description: cuisine.oeuvre.system.description,
|
||||
sust: 1,
|
||||
qualite: cuisine.qualiteFinale,
|
||||
exotisme: cuisine.exotismeFinal,
|
||||
encombrement: 0.1,
|
||||
quantite: Math.max(1, Math.floor(cuisine.sust)),
|
||||
cout: Math.max(cuisine.qualiteFinale, 0) * 0.01
|
||||
"description": cuisine.oeuvre.system.description,
|
||||
"sust": 1,
|
||||
"qualite": cuisine.qualiteFinale,
|
||||
"exotisme": cuisine.exotismeFinal,
|
||||
"encombrement": 0.1,
|
||||
"quantite": Math.max(1, Math.floor(cuisine.sust)),
|
||||
"cout": Math.max(cuisine.qualiteFinale) * 0.01
|
||||
}
|
||||
};
|
||||
if (artData.ajouterEquipement) {
|
||||
}
|
||||
if (cuisine.ajouterEquipement) {
|
||||
await this.createEmbeddedDocuments('Item', [platCuisine]);
|
||||
ui.notifications.info(`${platCuisine.system.quantite} rations de ${platCuisine.name} ont été ajoutés à votre équipement`);
|
||||
}
|
||||
artData.platCuisine = platCuisine;
|
||||
await RdDResolutionTable.displayRollData(artData, this.name, `chat-resultat-${artData.art}.html`);
|
||||
cuisine.platCuisine = platCuisine;
|
||||
await RdDResolutionTable.displayRollData(cuisine, this.name, `chat-resultat-${cuisine.art}.html`);
|
||||
}
|
||||
|
||||
async preparerNourriture(item) {
|
||||
if (item.isComestible() == 'brut') {
|
||||
const nourriture = {
|
||||
name: 'Plat de ' + item.name,
|
||||
type: 'recettecuisine',
|
||||
img: item.img,
|
||||
system: {
|
||||
sust: 1,
|
||||
exotisme: item.system.exotisme,
|
||||
ingredients: item.name
|
||||
}
|
||||
};
|
||||
const artData = {
|
||||
verbe: 'Préparer',
|
||||
compName: 'cuisine',
|
||||
proportions: 1,
|
||||
proportionsMax: Math.min(50, item.system.sust),
|
||||
ajouterEquipement: true
|
||||
};
|
||||
await this._rollArt(artData, 'odoratgout', nourriture, async (cuisine) => {
|
||||
await this._resultRecetteCuisine(cuisine);
|
||||
const remaining = Math.max(item.system.quantite - cuisine.proportions, 0);
|
||||
if (remaining > 0) {
|
||||
await item.update({ 'system.quantite': remaining })
|
||||
}
|
||||
else {
|
||||
await this.deleteEmbeddedDocuments('Item', [item.id]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -4145,6 +4188,7 @@ export class RdDActor extends Actor {
|
||||
await this.onCreateOwnedDraconique(item, options, id);
|
||||
break;
|
||||
}
|
||||
await item.onCreateDecoupeComestible(this);
|
||||
}
|
||||
|
||||
async onDeleteItem(item, options, id) {
|
||||
|
Reference in New Issue
Block a user