diff --git a/module/actor-sheet.js b/module/actor-sheet.js
index 4003a99c..7965a19d 100644
--- a/module/actor-sheet.js
+++ b/module/actor-sheet.js
@@ -164,14 +164,11 @@ export class RdDActorSheet extends ActorSheet {
const item = RdDSheetUtility.getItem(event, this.actor);
RdDSheetUtility.splitItem(item, this.actor);
});
- html.find('.item-action').click(async event => {
- const item = RdDSheetUtility.getItem(event, this.actor)
- this.actor.actionItem(item);
- });
html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true))
html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor)));
html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente());
html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem());
+ html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor));
html.find('.subacteur-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event);
const actorId = li.data("actor-id");
diff --git a/module/actor.js b/module/actor.js
index f9c5c3bf..f8c6ea1c 100644
--- a/module/actor.js
+++ b/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: '', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) },
+ 'manger': { icon: '', 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) {
diff --git a/module/dialog-item-consommer.js b/module/dialog-item-consommer.js
index d74a704c..69642e7d 100644
--- a/module/dialog-item-consommer.js
+++ b/module/dialog-item-consommer.js
@@ -48,25 +48,47 @@ export class DialogConsommer extends Dialog {
}
}
switch (item.type) {
+ case 'herbe': case 'faune':
+ consommerData.title = 'Manger une portion crue: ';
+ consommerData.buttonName = "Manger";
+ break;
case 'nourritureboisson':
- consommerData.title = item.system.boisson ? `${item.name}: boire une dose` : `${item.name}: manger une portion`;
+ consommerData.title = item.system.boisson ? 'Boire une dose: ' : 'Manger une portion: ';
consommerData.buttonName = item.system.boisson ? "Boire" : "Manger";
break;
case 'potion':
- consommerData.title = `${item.name}: boire la potion`;
+ consommerData.title = 'Boire la potion: ';
consommerData.buttonName = "Boire";
break;
}
- DialogConsommer.calculDoses(consommerData, consommerData.choix.doses)
+ consommerData.title += item.name;
+ DialogConsommer.calculDoses(consommerData, item)
return consommerData;
}
- static calculDoses(consommer) {
+ static calculDoses(consommer, item) {
const doses = consommer.choix.doses;
- consommer.totalSust = Misc.keepDecimals(doses * (consommer.item.system.sust ?? 0), 2);
- consommer.totalDesaltere = consommer.item.system.boisson
- ? Misc.keepDecimals(doses * (consommer.item.system.desaltere ?? 0), 2)
- : 0;
+ switch (item.type) {
+ case 'herbe': case 'faune':
+ consommer.totalSust = doses;
+ consommer.totalDesaltere = 0;
+ consommer.choix.sust = 1;
+ consommer.choix.quantite = 0;
+ consommer.choix.encombrement = Misc.keepDecimals(consommer.item.system.encombrement / item.system.sust, 2);
+ return;
+ case 'nourritureboisson':
+ consommer.choix.sust = consommer.item.system.sust;
+ consommer.choix.quantite = doses;
+ consommer.choix.encombrement = 0
+ consommer.totalSust = Misc.keepDecimals(doses * (consommer.item.system.sust ?? 0), 2);
+ consommer.totalDesaltere = consommer.item.system.boisson
+ ? Misc.keepDecimals(doses * (consommer.item.system.desaltere ?? 0), 2)
+ : 0;
+ break;
+ case 'potion':
+ consommer.totalSust = 0
+ consommer.totalDesaltere = 0
+ }
}
@@ -84,7 +106,7 @@ export class DialogConsommer extends Dialog {
selectDoses(event) {
this.consommerData.choix.doses = Number(event.currentTarget.value);
- DialogConsommer.calculDoses(this.consommerData);
+ DialogConsommer.calculDoses(this.consommerData, this.item);
$(".total-sust").text(this.consommerData.totalSust);
$(".total-desaltere").text(this.consommerData.totalDesaltere);
}
diff --git a/module/item-faune-sheet.js b/module/item-faune-sheet.js
index 274142b2..3b97d7ca 100644
--- a/module/item-faune-sheet.js
+++ b/module/item-faune-sheet.js
@@ -26,21 +26,22 @@ export class RdDFauneItemSheet extends RdDItemSheet {
EnvironmentSheetHelper.activateListeners(this, html);
html.find("a.linked-actor-delete").click(event => this.onDeleteLinkedActor());
-
+ html.find("a.preparer-nourriture").click(event => this.preparerNourriture(event));
+ html.find("a.manger-nourriture").click(event => this.mangerNourriture(event));
}
async _onDropActor(event, dragData) {
console.log('faune:dropActor', event, dragData)
- const actor = fromUuidSync(dragData.uuid);
- if (actor?.pack) {
+ const linkedActor = fromUuidSync(dragData.uuid);
+ if (linkedActor?.pack) {
this.item.update({
- 'system.actor.pack': actor.pack,
- 'system.actor.id': actor._id,
- 'system.actor.name': actor.name
+ 'system.actor.pack': linkedActor.pack,
+ 'system.actor.id': linkedActor._id,
+ 'system.actor.name': linkedActor.name
});
}
else {
- ui.notifications.warn(`${actor.name} ne provient pas d'eun compendium.
+ ui.notifications.warn(`${linkedActor.name} ne provient pas d'un compendium.
Choisissez une créature du compendium pour représenter un élément de faune générique`)
}
}
@@ -51,4 +52,16 @@ export class RdDFauneItemSheet extends RdDItemSheet {
'system.actor.name': ''
});
}
+
+ async preparerNourriture(event) {
+ if (this.actor) {
+ await this.actor.preparerNourriture(this.item);
+ }
+ }
+ async mangerNourriture(event) {
+ if (this.actor) {
+ await this.actor.mangerNourriture(this.item);
+ }
+ }
+
}
diff --git a/module/item-sheet.js b/module/item-sheet.js
index b08d6a8d..baeb40e5 100644
--- a/module/item-sheet.js
+++ b/module/item-sheet.js
@@ -99,7 +99,8 @@ export class RdDItemSheet extends ItemSheet {
cssClass: this.isEditable ? "editable" : "locked",
isSoins: false,
description: await TextEditor.enrichHTML(this.item.system.description, { async: true }),
- descriptionmj: await TextEditor.enrichHTML(this.item.system.descriptionmj, { async: true })
+ descriptionmj: await TextEditor.enrichHTML(this.item.system.descriptionmj, { async: true }),
+ isComestible: this.item.isComestible()
}
const competences = await SystemCompendiums.getCompetences(this.actor?.type);
@@ -197,15 +198,12 @@ export class RdDItemSheet extends ItemSheet {
}
});
- html.find('.item-action').click(async event => {
- const item = RdDSheetUtility.getItem(event, this.actor);
- this.actor.actionItem(item, async () => itemSheetDialog.render(true));
- });
html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, async () => itemSheetDialog.render(true)));
html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true));
html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor)));
html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente());
html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem());
+ html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, async () => itemSheetDialog.render(true)));
}
_getEventActor(event) {
diff --git a/module/item.js b/module/item.js
index 650540b9..4d888422 100644
--- a/module/item.js
+++ b/module/item.js
@@ -1,5 +1,6 @@
import { DialogItemVente } from "./dialog-item-vente.js";
import { Grammar } from "./grammar.js";
+import { Misc } from "./misc.js";
import { RdDHerbes } from "./rdd-herbes.js";
import { RdDUtility } from "./rdd-utility.js";
@@ -91,10 +92,16 @@ export class RdDItem extends Item {
return true;
}
- static getUniteQuantite(type) {
- switch (type) {
+ getUniteQuantite() {
+ switch (this.type) {
case "monnaie": return "(Pièces)"
- case "herbe": return "(Brins)"
+ case "herbe":
+ switch (this.system.categorie) {
+ case 'Alchimie': case 'Repos': case 'Soin':
+ return "(Brins)"
+ case 'Cuisine': return '';
+ }
+ return '';
case "ingredient": return "(Pépins ou Brins)"
}
return '';
@@ -165,9 +172,25 @@ export class RdDItem extends Item {
return !this.isConteneur() || (this.system.contenu?.length ?? 0) == 0;
}
- isAlcool() {
- return this.type == 'nourritureboisson' && this.system.boisson && this.system.alcoolise;
+ isNourritureBoisson() {
+ return this.type == 'nourritureboisson';
}
+
+ isComestible() {
+ switch (this.type) {
+ case 'nourritureboisson': return 'pret';
+ case 'herbe':
+ return this.system.categorie == 'Cuisine' && this.system.sust > 0 ? 'brut' : '';
+ case 'faune':
+ return this.system.sust > 0 ? 'brut' : '';
+ }
+ return '';
+ }
+
+ isAlcool() {
+ return this.isNourritureBoisson() && this.system.boisson && this.system.alcoolise;
+ }
+
isHerbeAPotion() {
return this.type == 'herbe' && (this.system.categorie == 'Soin' || this.system.categorie == 'Repos');
}
@@ -193,13 +216,22 @@ export class RdDItem extends Item {
getEnc() {
switch (this.type) {
case 'herbe':
- return encBrin;
+ return this.getEncHerbe();
case 'gemme':
return encPepin * this.system.taille;
}
return Math.max(this.system.encombrement ?? 0, 0);
}
+ getEncHerbe() {
+ switch (this.system.categorie) {
+ case 'Repos': case 'Soin': case 'Alchimie':
+ return encBrin;
+ }
+ return this.system.encombrement;
+
+ }
+
valeurTotale() {
return this.getQuantite() * this.valeur()
}
@@ -231,17 +263,41 @@ export class RdDItem extends Item {
}
getActionPrincipale(options = { warnIfNot: true }) {
- const warn = options.warnIfNot;
switch (this.type) {
- case 'nourritureboisson': return this._actionOrWarnQuantiteZero(this.system.boisson ? 'Boire' : 'Manger', warn);
- case 'potion': return this._actionOrWarnQuantiteZero('Boire', warn);
- case 'livre': return this._actionOrWarnQuantiteZero('Lire', warn);
case 'conteneur': return 'Ouvrir';
- case 'herbe': return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined;
- case 'queue': case 'ombre': return this.system.refoulement > 0 ? 'Refouler' : undefined;
+ }
+ if (this.actor?.isPersonnage()) {
+ const warn = options.warnIfNot;
+ if (this.isComestible() == 'brut') {
+ return 'Utiliser';
+ }
+ switch (this.type) {
+ case 'nourritureboisson': return this._actionOrWarnQuantiteZero(this.system.boisson ? 'Boire' : 'Manger', warn);
+ case 'potion': return this._actionOrWarnQuantiteZero('Boire', warn);
+ case 'livre': return this._actionOrWarnQuantiteZero('Lire', warn);
+ case 'herbe': return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined;
+ case 'queue': case 'ombre': return this.system.refoulement > 0 ? 'Refouler' : undefined;
+ }
}
return undefined;
}
+
+ /* -------------------------------------------- */
+ async actionPrincipale(actor, onActionItem = async () => { }) {
+ if (!this.getActionPrincipale()) {
+ return;
+ }
+ if (await actor.actionNourritureboisson(this, onActionItem)) {
+ return;
+ }
+ switch (this.type) {
+ case 'potion': return await actor.consommerPotion(this, onActionItem);
+ case 'livre': return await actor.actionLire(this);
+ case 'conteneur': return await this.sheet.render(true);
+ case 'herbe': return await actor.actionHerbe(this);
+ case 'queue': case 'ombre': return await actor.actionRefoulement(this);
+ }
+ }
_actionOrWarnQuantiteZero(actionName, warn) {
if ((this.system.quantite ?? 0) <= 0) {
@@ -260,6 +316,42 @@ export class RdDItem extends Item {
await this.quantiteIncDec(-nombre, options);
}
+ async onCreateDecoupeComestible(actor) {
+ if (actor && this.isComestible() == 'brut' && this.system.sust != 1) {
+ if (this.system.sust < 1) {
+ await actor.updateEmbeddedDocuments('Item', [{
+ _id: this.id,
+ 'system.sust': 0
+ }])
+ }
+ else {
+ const sust = Math.floor(this.system.sust);
+ await actor.updateEmbeddedDocuments('Item', [{
+ _id: this.id,
+ 'system.quantite': this.system.quantite * sust,
+ 'system.encombrement': Misc.keepDecimals(this.system.encombrement / sust, 2),
+ 'system.cout': Misc.keepDecimals(this.system.cout / sust, 2),
+ 'system.sust': 1
+ }])
+ }
+ }
+ }
+
+ async empiler(item) {
+ if (this.isComestible() == 'brut') {
+ const sust = this.system.sust + item.system.sust;
+ const encombrement = this.system.encombrement + item.system.encombrement;
+ await this.update({
+ "system.sust": sust,
+ "system.encombrement": encombrement
+ });
+ }
+ else {
+ await this.quantiteIncDec(item.system.quantite);
+ }
+ await item.delete();
+ }
+
async quantiteIncDec(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) {
const quantite = Number(this.system.quantite ?? -1);
if (quantite >= 0) {
@@ -297,8 +389,13 @@ export class RdDItem extends Item {
return [false, `Impossible de regrouper ${this.name} avec ${other.name}`];
}
else {
- const differences = Object.entries(this.system)
- .filter(([key, value]) => !['quantite', 'cout', 'encTotal'].includes(key) && value != other.system[key]);
+ const excludedProperties = ['quantite', 'cout', 'encTotal'];
+ if (this.isComestible()) {
+ excludedProperties.push('sust', 'encombrement');
+ }
+ let differences = Object.entries(this.system)
+ .filter(([key, value]) => !excludedProperties.includes(key))
+ .filter(([key, value]) => value != other.system[key])
if (differences.length > 0) {
let message = `Impossible de regrouper les ${this.type} ${this.name}: `;
for (const [key, value] of differences) {
diff --git a/module/rdd-utility.js b/module/rdd-utility.js
index 8625e267..c86000df 100644
--- a/module/rdd-utility.js
+++ b/module/rdd-utility.js
@@ -14,6 +14,7 @@ import { RdDNameGen } from "./rdd-namegen.js";
import { RdDConfirm } from "./rdd-confirm.js";
import { RdDCalendrier } from "./rdd-calendrier.js";
import { Environnement } from "./environnement.js";
+import { RdDItemCompetence } from "./item-competence.js";
/* -------------------------------------------- */
// This table starts at 0 -> niveau -10
@@ -170,6 +171,7 @@ export class RdDUtility {
//Items
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs',
'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete.hbs',
+ 'systems/foundryvtt-reve-de-dragon/templates/item/boutons-comestible.html',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.html',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.html',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.html',
diff --git a/template.json b/template.json
index c9950acf..a81410e4 100644
--- a/template.json
+++ b/template.json
@@ -595,6 +595,10 @@
"environnement": {
"milieu": "",
"environnement": []
+ },
+ "comestible": {
+ "sust": 0,
+ "exotisme": 0
}
},
"competence": {
@@ -699,13 +703,12 @@
"templates": [ "description", "inventaire" ]
},
"nourritureboisson": {
- "templates": [ "description", "inventaire" ],
+ "templates": [ "description", "inventaire", "comestible"],
+ "cuisinier": "",
"boisson": false,
"desaltere": 0,
"alcoolise": false,
- "force": 0,
- "sust": 0,
- "exotisme": 0
+ "force": 0
},
"herbe": {
"templates": [ "description", "inventaire", "environnement"],
@@ -714,17 +717,14 @@
"categorie": ""
},
"ingredient": {
- "templates": [ "description", "inventaire", "environnement" ],
+ "templates": [ "description", "inventaire", "environnement", "comestible"],
"niveau": 0,
"base": 0,
- "sust": 0,
- "exotisme": 0,
"categorie": ""
},
"faune": {
- "templates": [ "description", "inventaire", "environnement"],
- "sust": 0,
- "exotisme": 0,
+ "templates": [ "description", "inventaire", "environnement", "comestible"],
+ "categorie": "",
"actor": {
"id": "",
"pack": "",
diff --git a/templates/item-faune-sheet.html b/templates/item-faune-sheet.html
index 145b7a0c..cde0c58c 100644
--- a/templates/item-faune-sheet.html
+++ b/templates/item-faune-sheet.html
@@ -3,6 +3,7 @@