Initial release for FoundryVTT
This commit is contained in:
103
modules/donjon-et-cie-main.mjs
Normal file
103
modules/donjon-et-cie-main.mjs
Normal file
@@ -0,0 +1,103 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user