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