104 lines
3.9 KiB
JavaScript
104 lines
3.9 KiB
JavaScript
import { DONJON_ET_CIE } from "./donjon-et-cie-config.mjs";
|
|
import { DonjonEtCieUtility } from "./donjon-et-cie-utility.mjs";
|
|
import { DonjonEtCieActor } from "./donjon-et-cie-actor.mjs";
|
|
import { DonjonEtCieItem } from "./donjon-et-cie-item.mjs";
|
|
import * as models from "./models/index.mjs";
|
|
import * as sheets from "./applications/sheets/_module.mjs";
|
|
import { DonjonEtCieRollDialog } from "./applications/donjon-et-cie-roll-dialog.mjs";
|
|
import { DonjonEtCieRolls } from "./donjon-et-cie-rolls.mjs";
|
|
|
|
function onChatActionClick(event) {
|
|
const button = event.target.closest("[data-action='rollChatDamage'], [data-action='rollSpellChaos'], [data-action='applyDamage']");
|
|
if (!(button instanceof HTMLElement)) return;
|
|
|
|
event.preventDefault();
|
|
|
|
void (async () => {
|
|
if (button.dataset.action === "rollSpellChaos") {
|
|
const actorUuid = button.dataset.actorUuid;
|
|
const itemUuid = button.dataset.itemUuid;
|
|
if (!actorUuid || !itemUuid) return;
|
|
const [actor, item] = await Promise.all([fromUuid(actorUuid), fromUuid(itemUuid)]);
|
|
return DonjonEtCieRolls.rollSpellChaos(actor, item);
|
|
}
|
|
|
|
if (button.dataset.action === "applyDamage") {
|
|
const card = button.closest(".dnc-chat-card-damage");
|
|
const select = card?.querySelector("[data-role='damage-target']");
|
|
const targetUuid = select instanceof HTMLSelectElement ? select.value : "";
|
|
if (!targetUuid) {
|
|
ui.notifications.warn(game.i18n.localize("DNC.Chat.SelectTarget"));
|
|
return null;
|
|
}
|
|
|
|
const target = await fromUuid(targetUuid);
|
|
if (!target) {
|
|
ui.notifications.warn(game.i18n.localize("DNC.Chat.TargetUnavailable"));
|
|
return null;
|
|
}
|
|
|
|
return DonjonEtCieRolls.applyDamage(target, {
|
|
damage: Number(button.dataset.damage ?? 0),
|
|
useArmor: button.dataset.useArmor === "true",
|
|
sourceLabel: button.dataset.sourceLabel ?? ""
|
|
});
|
|
}
|
|
|
|
const itemUuid = button.dataset.itemUuid;
|
|
if (!itemUuid) return;
|
|
const item = await fromUuid(itemUuid);
|
|
return item?.rollDamage?.();
|
|
})();
|
|
}
|
|
|
|
Hooks.once("init", async () => {
|
|
console.log("Initialisation du systeme Donjon & Cie");
|
|
|
|
await DonjonEtCieUtility.preloadHandlebarsTemplates();
|
|
|
|
CONFIG.Combat.initiative = {
|
|
formula: "1d20 + @system.caracteristiques.dexterite.value + @system.combat.initiativeBonus",
|
|
decimals: 0
|
|
};
|
|
|
|
CONFIG.Actor.documentClass = DonjonEtCieActor;
|
|
CONFIG.Actor.dataModels = {
|
|
employe: models.EmployeDataModel,
|
|
pnj: models.PnjDataModel
|
|
};
|
|
|
|
CONFIG.Item.documentClass = DonjonEtCieItem;
|
|
CONFIG.Item.dataModels = {
|
|
trait: models.TraitDataModel,
|
|
langue: models.LangueDataModel,
|
|
capacite: models.CapaciteDataModel,
|
|
sortilege: models.SortilegeDataModel,
|
|
arme: models.ArmeDataModel,
|
|
armure: models.ArmureDataModel,
|
|
equipement: models.EquipementDataModel,
|
|
consommable: models.ConsommableDataModel
|
|
};
|
|
|
|
game.system.donjonEtCie = {
|
|
config: DONJON_ET_CIE,
|
|
models,
|
|
sheets,
|
|
rolls: DonjonEtCieRolls,
|
|
dialogs: DonjonEtCieRollDialog,
|
|
utility: DonjonEtCieUtility
|
|
};
|
|
|
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
|
foundry.documents.collections.Actors.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCieEmployeSheet, { types: ["employe"], makeDefault: true });
|
|
foundry.documents.collections.Actors.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCiePNJSheet, { types: ["pnj"], makeDefault: true });
|
|
|
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
|
for (const type of ["trait", "langue", "capacite", "sortilege", "arme", "armure", "equipement", "consommable"]) {
|
|
foundry.documents.collections.Items.registerSheet("fvtt-donjon-et-cie", sheets.DonjonEtCieItemSheet, { types: [type], makeDefault: true });
|
|
}
|
|
});
|
|
|
|
Hooks.once("ready", () => {
|
|
document.addEventListener("click", onChatActionClick);
|
|
});
|