236 lines
7.7 KiB
JavaScript
236 lines
7.7 KiB
JavaScript
/**
|
||
* 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 2025–2026 LeRatierBretonnien
|
||
* @license CC BY-NC-SA 4.0 – https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||
*/
|
||
|
||
import { DonjonEtCieRolls } from "../donjon-et-cie-rolls.mjs";
|
||
import { DonjonEtCieUtility } from "../donjon-et-cie-utility.mjs";
|
||
|
||
export class DonjonEtCieRollDialog {
|
||
static async createInitiative(actor) {
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/initiative-roll.hbs",
|
||
{
|
||
actorName: actor.name,
|
||
dex: actor.system.caracteristiques?.dexterite?.value ?? 0,
|
||
initiativeBonus: actor.system.combat?.initiativeBonus ?? 0
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Initiative"), icon: "fa-solid fa-bolt" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Lancer",
|
||
icon: "fa-solid fa-bolt",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollInitiative(actor, {
|
||
mode: form.mode?.value ?? "normal"
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
|
||
static async createCharacteristic(actor, characteristicKey) {
|
||
const characteristic = actor.system.caracteristiques?.[characteristicKey];
|
||
if (!characteristic) return;
|
||
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/characteristic-roll.hbs",
|
||
{
|
||
actorName: actor.name,
|
||
characteristic,
|
||
characteristicKey,
|
||
favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor),
|
||
hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Characteristic"), icon: "fa-solid fa-dice-d20" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Lancer",
|
||
icon: "fa-solid fa-dice-d20",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollCharacteristic(actor, characteristicKey, {
|
||
mode: form.mode?.value ?? "normal",
|
||
favorKey: form.favorDepartment?.value ?? ""
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
|
||
static async createWeapon(actor, item) {
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/weapon-roll.hbs",
|
||
{
|
||
actorName: actor.name,
|
||
item,
|
||
characteristicLabel: DonjonEtCieUtility.getWeaponCharacteristicLabel(item.system.categorie),
|
||
characteristicValue: actor.system.caracteristiques?.[DonjonEtCieUtility.getWeaponCharacteristicKey(item.system.categorie)]?.value ?? 0,
|
||
favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor),
|
||
hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Attack"), icon: "fa-solid fa-sword" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Attaquer",
|
||
icon: "fa-solid fa-sword",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollWeapon(actor, item, {
|
||
mode: form.mode?.value ?? "normal",
|
||
favorKey: form.favorDepartment?.value ?? ""
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
|
||
static async createSpell(actor, item) {
|
||
const characteristicKey = item.system.caracteristique || "intelligence";
|
||
const characteristic = actor.system.caracteristiques?.[characteristicKey];
|
||
const magicResources = DonjonEtCieUtility.getMagicResourceContext(actor);
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/spell-roll.hbs",
|
||
{
|
||
actorName: actor.name,
|
||
item,
|
||
characteristic,
|
||
rank: magicResources.rank,
|
||
currentPv: actor.system.sante?.pv?.value ?? 0,
|
||
focusLabel: magicResources.focusLabel,
|
||
focusDisplay: magicResources.focusDisplay,
|
||
focusIsActive: magicResources.focusIsActive,
|
||
chaosLabel: magicResources.chaosLabel,
|
||
autoDisadvantage: Number(item.system.coutPv ?? 0) > magicResources.rank,
|
||
favorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor),
|
||
hasFavorOptions: DonjonEtCieUtility.getAvailableFavorOptions(actor).length > 0
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Spell"), icon: "fa-solid fa-wand-magic-sparkles" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Lancer",
|
||
icon: "fa-solid fa-wand-magic-sparkles",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollSpell(actor, item, {
|
||
mode: form.mode?.value ?? "normal",
|
||
favorKey: form.favorDepartment?.value ?? ""
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
|
||
static async createUsage(item) {
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/usage-roll.hbs",
|
||
{
|
||
item
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Usage"), icon: "fa-solid fa-hourglass-half" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Utiliser",
|
||
icon: "fa-solid fa-hourglass-half",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollUsage(item, {
|
||
mode: form.mode?.value ?? "normal"
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
|
||
static async createDamage(actor, item) {
|
||
const content = await foundry.applications.handlebars.renderTemplate(
|
||
"systems/fvtt-donjon-et-cie/templates/dialogs/damage-roll.hbs",
|
||
{
|
||
actorName: actor?.name ?? item.actor?.name ?? "",
|
||
item,
|
||
actorBonus: actor?.system?.combat?.degatsBonus ?? 0
|
||
}
|
||
);
|
||
|
||
return foundry.applications.api.DialogV2.wait({
|
||
window: { title: game.i18n.localize("DNC.Roll.Damage"), icon: "fa-solid fa-burst" },
|
||
classes: ["dnc-roll-dialog"],
|
||
content,
|
||
modal: false,
|
||
buttons: [
|
||
{
|
||
action: "roll",
|
||
label: "Lancer",
|
||
icon: "fa-solid fa-burst",
|
||
default: true,
|
||
callback: async (event, button) => {
|
||
const form = button.form.elements;
|
||
return DonjonEtCieRolls.rollDamage(actor, item, {
|
||
mode: form.mode?.value ?? "normal"
|
||
});
|
||
}
|
||
}
|
||
],
|
||
rejectClose: false
|
||
});
|
||
}
|
||
}
|