mirror of
https://github.com/migatu/vtt_work.git
synced 2026-07-14 21:38:39 +00:00
69 lines
2.5 KiB
JavaScript
69 lines
2.5 KiB
JavaScript
// gk-greyknight — auto-attach loadout on Grey Knight Archetype
|
|
Hooks.once("ready", () => {
|
|
const PACK_KEY = "gk-greyknight.gk-items"; // moduleId.packName
|
|
const NAMES = [
|
|
"Aegis of Titan (Ability)",
|
|
"Nemesis Force Halberd",
|
|
"Grey Knight Armour Integrated Storm Bolter",
|
|
"Aegis Power Armour"
|
|
];
|
|
|
|
async function fetchFromCompendium(name) {
|
|
const pack = game.packs.get(PACK_KEY);
|
|
if (!pack) return null;
|
|
const index = await pack.getIndex();
|
|
const hit = index.find(e => e.name === name);
|
|
if (!hit) return null;
|
|
const doc = await pack.getDocument(hit._id);
|
|
return doc?.toObject();
|
|
}
|
|
|
|
async function ensureOnActor(actor, name, equip=false) {
|
|
const have = actor.items.getName(name);
|
|
if (have) return have;
|
|
let src = await fetchFromCompendium(name);
|
|
if (!src) {
|
|
// fallback: look in world items directory
|
|
const world = game.items.getName(name);
|
|
if (world) src = world.toObject();
|
|
}
|
|
if (!src) return null;
|
|
// set equipped if item supports it
|
|
if (equip && src.system && typeof src.system.equipped !== "undefined") {
|
|
src.system.equipped = true;
|
|
}
|
|
const created = await actor.createEmbeddedDocuments("Item", [src]);
|
|
return created[0];
|
|
}
|
|
|
|
// Hook: when the Grey Knight Archetype is added to an actor
|
|
Hooks.on("createItem", async (item, opts, userId) => {
|
|
try {
|
|
if (item?.type !== "archetype") return;
|
|
if (item?.name !== "Grey Knight (Archetype)") return;
|
|
const actor = item.parent;
|
|
if (!actor || game.userId !== userId) return;
|
|
|
|
// Attach base loadout (War-Plate default) + ability
|
|
await ensureOnActor(actor, "Aegis of Titan (Ability)", false);
|
|
await ensureOnActor(actor, "Nemesis Force Halberd", true);
|
|
await ensureOnActor(actor, "Grey Knight Armour Integrated Storm Bolter", true);
|
|
await ensureOnActor(actor, "Aegis Power Armour", true);
|
|
|
|
// Optional: enable Aegis Synergy effect if present and Aegis is equipped
|
|
const abil = actor.items.getName("Aegis of Titan (Ability)");
|
|
const aegis = actor.items.getName("Aegis Power Armour");
|
|
const hasAegis = !!(aegis?.system?.equipped);
|
|
if (abil && abil.effects) {
|
|
for (const ef of abil.effects) {
|
|
if (ef.name?.toLowerCase().includes("synergy")) await ef.update({disabled: !hasAegis});
|
|
}
|
|
}
|
|
|
|
ui.notifications.info("Grey Knight loadout attached.");
|
|
} catch (e) {
|
|
console.error("gk-greyknight auto-loadout error:", e);
|
|
}
|
|
});
|
|
});
|