Files
fvtt-donjon-et-cie/modules/donjon-et-cie-item.mjs
LeRatierBretonnier 6883cc1020
Some checks failed
Release Creation / build (release) Failing after 51s
Ajout entrainements
2026-04-19 19:06:47 +02:00

73 lines
2.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Donjon & Cie - Systeme FoundryVTT
*
* Donjon & Cie est un jeu de role edite par John Doe.
* Ce systeme FoundryVTT est une implementation independante et n'est pas
* affilie a John Doe.
*
* @author LeRatierBretonnien
* @copyright 20252026 LeRatierBretonnien
* @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/
*/
import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs";
import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs";
export class DonjonEtCieItem extends Item {
async _preCreate(data, options, user) {
await super._preCreate(data, options, user);
const currentImg = data.img ?? this.img;
if (currentImg && !currentImg.startsWith("icons/svg/")) return;
this.updateSource({ img: DonjonEtCieUtility.getDefaultItemIcon(this.type) });
}
get usageDie() {
return Number(this.system.delta ?? 0);
}
get usageDieMax() {
return Number(this.system.deltaMax ?? this.system.delta ?? 0);
}
async roll() {
if (this.type === "arme") return DonjonEtCieRollDialog.createWeapon(this.actor, this);
if (this.type === "sortilege") return DonjonEtCieRollDialog.createSpell(this.actor, this);
if (this.usageDie) return DonjonEtCieRollDialog.createUsage(this);
if (this.type === "entrainement" && this.usageDieMax > 0) {
ui.notifications.warn(game.i18n.localize("DNC.Warn.TrainingExhausted"));
return null;
}
return this.postToChat();
}
async rollDamage() {
if (!this.system.degats) return null;
return DonjonEtCieRollDialog.createDamage(this.actor, this);
}
async postToChat() {
const content = await foundry.applications.handlebars.renderTemplate(
"systems/fvtt-donjon-et-cie/templates/chat/item-card.hbs",
{
item: this,
usageLabel: DonjonEtCieUtility.formatUsageDie(this.usageDie)
}
);
return ChatMessage.create({
speaker: ChatMessage.getSpeaker({ actor: this.actor }),
user: game.user.id,
content
});
}
async resetUsageDie() {
if (this.type !== "entrainement") return this;
const deltaMax = this.usageDieMax;
if (!deltaMax) return this;
return this.update({ "system.delta": deltaMax });
}
}