Files
vtt_work/wg-greyknights/gk-greyknight-0.4.2-patch/scripts/auto-loadout.js
T

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);
}
});
});