105 lines
3.2 KiB
JavaScript
105 lines
3.2 KiB
JavaScript
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 = [
|
|
`<b>Rareté</b>: ${this.system.rarete} `,
|
|
`<b>Catégorie</b>: ${this.system.categorie}`,
|
|
`<b>Etat</b>: ${this.system.etat}`
|
|
]
|
|
const proprietesMagiques = this.system.magique ? [
|
|
`<b>Enchantée</b> <i class="fa-solid fa-sparkles"></i> ${this.system.purifie ? ', purifiée' : ''} ${this.system.prpermanent ? 'permanente' : ''} `,
|
|
`<b>Points de rêve</b>: ${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;
|
|
}
|
|
|
|
} |