Vincent Vandemeulebrouck
327943c4aa
Par exemple, la mise à jour de quantité d'herbe ne se faisait pas dans les liste d'équipement des feuilles de conteneurs, lors d'une fabrication de potion dans les items
88 lines
3.2 KiB
JavaScript
88 lines
3.2 KiB
JavaScript
import { Grammar } from "./grammar.js";
|
|
import { Misc } from "./misc.js";
|
|
import { RdDUtility } from "./rdd-utility.js";
|
|
|
|
export class DialogFabriquerPotion extends Dialog {
|
|
|
|
/* -------------------------------------------- */
|
|
static async create(actor, item, onActionItem) {
|
|
const min = DialogFabriquerPotion.nombreBrinsMinimum(item);
|
|
if (item.system.quantite < min) {
|
|
ui.notifications.warn(`Vous avez ${item.system.quantite} brins de ${item.name}, il en faut au moins ${min} pour faire une potion!`);
|
|
return;
|
|
}
|
|
let potionData = DialogFabriquerPotion.prepareData(actor, item);
|
|
|
|
const html = await renderTemplate( 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', potionData);
|
|
|
|
let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 };
|
|
new DialogFabriquerPotion(actor, potionData, onActionItem, html, options).render(true);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static prepareData(actor, item) {
|
|
let potionData = duplicate(item)
|
|
potionData.nbBrinsSelect = RdDUtility.buildListOptions(
|
|
DialogFabriquerPotion.nombreBrinsMinimum(item),
|
|
DialogFabriquerPotion.nombreBrinsOptimal(item));
|
|
potionData.nbBrins = Math.min(potionData.system.quantite, DialogFabriquerPotion.nombreBrinsOptimal(potionData));
|
|
potionData.herbebonus = item.system.niveau;
|
|
potionData.buttonName = "Fabriquer";
|
|
return potionData;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
constructor(actor, potionData, onActionItem, html, options) {
|
|
const conf = {
|
|
title: `Fabriquer une potion de ${potionData.system.categorie}`,
|
|
content: html,
|
|
default: 'fabriquer',
|
|
buttons: {
|
|
'fabriquer': {
|
|
label: potionData.buttonName, callback: it => this.onFabriquer()
|
|
}
|
|
}
|
|
};
|
|
|
|
super(conf, options);
|
|
|
|
this.actor = actor;
|
|
this.potionData = potionData;
|
|
this.onActionItem = onActionItem;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
this.html = html;
|
|
this.html.find("[name='nbBrins']").change(event => {
|
|
this.potionData.nbBrins = Misc.toInt(event.currentTarget.value);
|
|
const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins);
|
|
this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants)
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
async onFabriquer() {
|
|
await this.html.find("[name='nbBrins']").change();
|
|
await this.actor.fabriquerPotion(this.potionData);
|
|
this.close();
|
|
await this.onActionItem()
|
|
}
|
|
|
|
static nombreBrinsMinimum(herbeData) {
|
|
switch (herbeData.system.categorie ?? '') {
|
|
case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau);
|
|
case "Repos": return 1 + Math.max(0, 7 - 2 * herbeData.system.niveau);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
static nombreBrinsOptimal(herbeData) {
|
|
switch (herbeData.system.categorie ?? '') {
|
|
case "Soin": return 12 - herbeData.system.niveau;
|
|
case "Repos": return 7 - herbeData.system.niveau;
|
|
}
|
|
return 1;
|
|
}
|
|
} |