import { Grammar } from "../grammar.js"; import { RdDItem } from "../item.js"; import { SystemCompendiums } from "../settings/system-compendiums.js"; import { ACTION_ITEM_ENCHANTER } from "../enchantement/dialog-enchanter.js"; // --- Actions sur les "potions" const _CONSOMMER_POTION = { code: 'item-potion-consommer', label: 'Consommer', icon: it => 'fa-solid fa-vial', optionsFilter: options => options.editable, action: (item, actor) => actor.consommerPotion(item) } /** * Item pour gérer les potions */ export class RdDItemPotion extends RdDItem { static async herbesSoins() { return await RdDItemPotion.$listHerbes(it => Grammar.equalsInsensitive(it.system.categorie, 'Soin') && it.system.niveau > 0) } static async herbesRepos() { return await RdDItemPotion.$listHerbes(it => Grammar.equalsInsensitive(it.system.categorie, 'Repos') && it.system.niveau > 0) } static async $listHerbes(filter) { const herbes = await SystemCompendiums.getWorldOrCompendiumItems('herbe', 'faune-flore-mineraux'); return herbes.filter(filter) } static get defaultIcon() { return "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp" } get isEnchantementPossible() { return this.system.etat == 'Liquide' } itemSpecificActions() { return [_CONSOMMER_POTION, ACTION_ITEM_ENCHANTER] } prepareDerivedData() { super.prepareDerivedData() this.system.puissance = this.system.magique ? this.calculPuissance() : 0 } getUtilisation() { switch (this.system.categorie) { case 'Alchimie': case 'Autre': case 'AlchimieAutre': // TODO: distinguer les remèdes alchimiques enchantables/non return 'alchimie' case 'Cuisine': return 'cuisine' case 'Remede': case 'Repos': case 'Soin': return 'soins' } return '' } getProprietes() { const proprietes = [ `Rareté: ${this.system.rarete} `, `Catégorie: ${this.system.categorie}`, `Etat: ${this.system.etat}` ] const proprietesMagiques = this.system.magique ? [ `Enchantée ${this.system.purifie ? ', purifiée' : ''} ${this.system.prpermanent ? 'permanente' : ''} `, `Points de rêve: ${this.system.pr}`, ] : [] return proprietes .concat(proprietesMagiques) .concat(this._inventaireTemplateChatData()) .filter(it => it != undefined) } perteReveChateauDormant() { if (this.system.magique && !this.system.prpermanent && this.system.pr > 0) { const nouveaupr = Math.max(this.system.pr - 1, 0) return { alias: this.parent.getAlias(), item: this, nouveaupr: nouveaupr, update: { _id: this.id, 'system.pr': nouveaupr, 'system.magique': nouveaupr > 0 } } } return undefined } calculPuissance() { return this.system.herbebonus * this.system.pr } static buildHerbesList(listeHerbes, max) { let list = {} for (let herbe of listeHerbes) { let brins = max - herbe.system.niveau; list[herbe.name] = `${herbe.name} (Bonus: ${herbe.system.niveau}, Brins: ${brins})`; } list['Autre'] = 'Autre (Bonus: variable, Brins: variable)' return list; } }