mirror of
https://github.com/migatu/vtt_work.git
synced 2026-07-14 21:38:39 +00:00
Import gk-greyknight-0.4.2-patch.zip do wg-greyknights (2025-08-21T21:19:36Z)
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user