diff --git a/wg-greyknights/LICENSE b/wg-greyknights/LICENSE deleted file mode 100644 index fc3cb5c..0000000 --- a/wg-greyknights/LICENSE +++ /dev/null @@ -1 +0,0 @@ -Homebrew content for personal table use. \ No newline at end of file diff --git a/wg-greyknights/README.txt b/wg-greyknights/README.txt deleted file mode 100644 index 1abd673..0000000 --- a/wg-greyknights/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -Grey Knights — Compendium (Wrath & Glory) v0.6.1 -- Consolidated main pack 'gk-items' (merged updated items; icons improved where missing/generic). -- Auto-loadout scoped to our GK archetype. -- If you previously had a LevelDB folder packs/gk-items/, delete it once to force re-migration, then Rebuild Index. - -Changelog highlights: -* Replaced Aegis/Terminator Aegis/Integrated Storm Bolter with your updated JSONs (equip-only effects left intact). -* Added Pilgrim Astartes Power Armor and ORDO MALLEUS keyword fallback to the main pack. -* Added Nemesis Falchions (Pair), Psycannon, Psilencer, Psybolt Ammunition. -* Set rarity 'unique' for new weapons/ammo. -* Improved icons for items lacking an icon, using modules/wng-core/assets list. - diff --git a/wg-greyknights/icons/placeholder.txt b/wg-greyknights/icons/placeholder.txt deleted file mode 100644 index c045b88..0000000 --- a/wg-greyknights/icons/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -Drop your real icons here; JSONs point to icons/svg/ (Foundry stock) to avoid broken paths. \ No newline at end of file diff --git a/wg-greyknights/manifest.json b/wg-greyknights/manifest.json deleted file mode 100644 index ef7ccf2..0000000 --- a/wg-greyknights/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "id": "wrath-and-glory-gk", - "title": "Wrath & Glory — Inquisition & Daemonhunters (Grey Knights)", - "description": "Content split into Inquisition and Daemonhunters. Includes Grey Knight stubs (weapons, archetypes) for importer.", - "version": "0.3.0", - "compatibility": { - "minimum": "10", - "verified": "11" - }, - "authors": [ - { - "name": "ChatGPT (assistant)" - } - ], - "systems": [ - { - "id": "wrath-and-glory", - "type": "system", - "compatibility": { - "minimum": "5" - } - } - ], - "esmodules": [ - "scripts/macro-gk-auto-loadout-on-archetype.js" - ], - "packs": [], - "relationships": { - "systems": [ - { - "id": "wrath-and-glory" - } - ] - } -} \ No newline at end of file diff --git a/wg-greyknights/packs/daemonhunters.db b/wg-greyknights/packs/daemonhunters.db deleted file mode 100644 index 6a4ff0d..0000000 --- a/wg-greyknights/packs/daemonhunters.db +++ /dev/null @@ -1,17 +0,0 @@ -{"name": "Aegis Power Armour", "type": "armour", "img": "icons/svg/shield.svg", "effects": [{"_id": "25aqxUBwyQtSAdxb", "name": "Aegis Wards (Constant)", "origin": null, "disabled": false, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.skills.psychicMastery.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.resolve.bonus", "mode": 2, "value": "1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/aura.svg", "type": "base", "system": {"transferData": {"type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "equipTransfer": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "description": "", "statuses": [], "sort": 0}, {"_id": "LfRNsXknme6JLgSC", "name": "Aegis Warding Runes (Toggle)", "origin": null, "disabled": true, "duration": {"startTime": null, "combat": null, "seconds": null, "rounds": null, "turns": null, "startRound": null, "startTurn": null}, "changes": [{"key": "system.combat.resilience.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.defence.bonus", "mode": 2, "value": "-1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {"wrath-and-glory": {"manualEffectKeys": false}, "effectmacro": {"onEnable": {"script": "// Effect Macro — toggled: ON\nif (!item) return;\nconst candidates = [\n \"system.invulnerable\",\n \"system.armour.invulnerable\",\n \"system.attributes.invulnerable\",\n \"system.defences.invulnerable\"\n];\nconst path = candidates.find(p => foundry.utils.hasProperty(item, p)) ?? \"system.invulnerable\";\nawait item.update({ [path]: true });\n\n// (opcjonalnie) podbij też wartość/bonus na aktorze — odkomentuj jeśli Twój system tego używa\n/*\nconst apaths = [\"system.combat.invulnerable.bonus\", \"system.combat.invulnerable.value\"];\nconst apath = apaths.find(p => foundry.utils.hasProperty(actor, p));\nif (apath) await actor.update({ [apath]: 1 });\n*/\n"}, "onDisable": {"script": "// Effect Macro — toggled: OFF\nif (!item) return;\nconst candidates = [\n \"system.invulnerable\",\n \"system.armour.invulnerable\",\n \"system.attributes.invulnerable\",\n \"system.defences.invulnerable\"\n];\nconst path = candidates.find(p => foundry.utils.hasProperty(item, p)) ?? \"system.invulnerable\";\nawait item.update({ [path]: false });\n\n// (opcjonalnie) wyzeruj bonus na aktorze\n/*\nconst apaths = [\"system.combat.invulnerable.bonus\", \"system.combat.invulnerable.value\"];\nconst apath = apaths.find(p => foundry.utils.hasProperty(actor, p));\nif (apath) await actor.update({ [apath]: 0 });\n*/\n"}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": "ETeghv7x8fjtIEKK", "modifiedTime": 1755820582300}, "img": "icons/svg/explosion.svg", "type": "base", "system": {"transferData": {"type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "equipTransfer": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "description": "", "statuses": [], "sort": 0}], "flags": {"wng-core": {"initialization-folder": "Armour", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "unique", "description": "

Grey Knights sanctified power armour with hexagrammic wards and storm bolter forearm mount.

", "value": 9, "keywords": "POWERED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "rating": 5, "base": 0, "traits": {"list": [{"name": "powered", "rating": "3"}]}, "invulnerable": false}, "folder": "K59Lb8PvaCmIrviu", "_id": "11NZTwYXPlHBlnXC"} -{"name": "Grey Knight Armour Integrated Storm Bolter", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/storm-bolter.webp", "effects": [], "flags": {"wng-core": {"initialization-folder": "Weapons", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "rare", "description": "

Integrated forearm storm bolter. Integrated: does not occupy hands; may fire while wielding two‑handed melee. Treat as Pistol for firing in melee.

", "value": 4, "keywords": "BOLT, INTEGRATED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 10, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": 0, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 12, "medium": 24, "long": 36, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 1, "traits": {"list": [{"name": "brutal"}, {"name": "pistol"}, {"name": "rapidFire", "rating": "2"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "folder": "85dkcvhBYli5TJrZ", "_id": "SDFwequVtp6WsCFj"} -{"name": "Terminator Aegis (Grey Knights)", "type": "armour", "img": "modules/wng-core/assets/icons/armour/terminator-armour.webp", "effects": [{"_id": "OvE7cPAtNLDdEj6j", "name": "Aegis Wards (Constant)", "origin": null, "disabled": false, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.skills.psychicMastery.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.resolve.bonus", "mode": 2, "value": "1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/aura.svg", "type": "base", "description": "", "statuses": [], "sort": 0}, {"_id": "RXHERg7YjunnEQ8h", "name": "Aegis Warding Runes (Toggle)", "origin": null, "disabled": true, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.combat.resilience.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.defence.bonus", "mode": 2, "value": "-1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/explosion.svg", "type": "base", "description": "", "statuses": [], "sort": 0}], "flags": {"wng-core": {"initialization-folder": "Armour", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "", "description": "

Grey Knights Tactical Dreadnought armour with Aegis wards and storm bolter hard‑mount.

", "value": 10, "keywords": "POWERED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "rating": 7, "base": 0, "traits": {"list": [{"name": "cumbersome"}, {"name": "powered", "rating": "4"}]}, "invulnerable": false}, "folder": "K59Lb8PvaCmIrviu", "_id": "9XTvCiJElW4LJij9"} -{"name": "Nemesis Falchions (Pair)", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/force-sword.webp", "system": {"quantity": 1, "rarity": "unique", "description": "A matched pair of sanctified force blades. When wielding both, each attack may gain either +1 bonus die to WS or +1ED. Vs DAEMON/PSYKER: +1ED. Requires PSYKER to benefit from Force.", "value": 9, "keywords": "IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 12, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": -3, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "melee", "range": {"short": 0, "medium": 0, "long": 0, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 0, "traits": {"list": [{"name": "force"}, {"name": "parry"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "folder": null, "flags": {}, "_id": "AUwZwmYWGCSH04m2"} -{"name": "Psilencer", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/assault-cannon.webp", "system": {"quantity": 1, "rarity": "unique", "description": "High-rate psykic disruptor. Vs PSYKER: +1ED; hit PSYKER cannot Aim in the same round.", "value": 9, "keywords": "IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 11, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": 0, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 12, "medium": 24, "long": 36, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 3, "traits": {"list": [{"name": "rapidFire", "rating": "3"}, {"name": "reliable"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "folder": null, "flags": {}, "_id": "qvk9TxIezbO2C5OK"} -{"name": "Psycannon", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/autocannon.webp", "system": {"quantity": 1, "rarity": "unique", "description": "Anti-daemonic bolt weapon. Vs DAEMON/PSYKER: +1ED. On Critical: gains Rending (1) for the result.", "value": 9, "keywords": "BOLT, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 14, "bonus": 0, "rank": 0, "ed": {"base": 3, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": -2, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 20, "medium": 40, "long": 60, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 2, "traits": {"list": [{"name": "heavy", "rating": "7"}, {"name": "rapidFire", "rating": "2"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "folder": null, "flags": {}, "_id": "luQa0ffP6nroOeN8"} -{"name": "Psybolt Ammunition", "type": "ammo", "img": "modules/wng-core/assets/icons/ammo/ammo.webp", "system": {"quantity": 1, "rarity": "unique", "description": "Upgrade for BOLT/Storm Bolter weapons. Grants +1ED. Against DAEMON/PSYKER, attacks gain Rending (1). Apply manually to attack resolving rules; conditional effects are not automated.", "value": 5, "keywords": "BOLT, SANCTIFIED", "effect": "", "traits": {"list": []}}, "effects": [], "folder": null, "flags": {}, "_id": "ozxEfipXNkP69SHr"} -{"name": "Pilgrim Astartes Plate (Disguise Armour)", "type": "armour", "img": "modules/wng-core/assets/icons/armour/terminator-armour.webp", "effects": [{"_id": "44rACWx99MiXXe4E", "name": "Pilgrim Disguise Penalties", "icon": "icons/svg/downgrade.svg", "origin": "", "disabled": false, "duration": {"startTime": null, "seconds": null, "turns": null, "startRound": null, "startTurn": null}, "changes": [{"key": "system.attributes.agility.bonus", "mode": 2, "value": -1, "priority": 20}, {"key": "system.skills.stealth.bonus", "mode": 2, "value": -1, "priority": 20}, {"key": "system.combat.speed", "mode": 2, "value": -1, "priority": 20}], "tint": null, "transfer": true, "flags": {}}], "flags": {"wng-core": {"initialization-folder": "Armour", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "rare", "description": "

Scavenged Black Templars plate, patched & lightened. Designed for incognito operations.

", "value": 6, "keywords": "POWERED, IMPERIUM, ADEPTUS ASTARTES, BLACK TEMPLARS (DISGUISE)", "equipped": true, "rating": 4, "base": 0, "traits": {"list": [{"name": "cumbersome"}, {"name": "powered", "rating": "1"}]}, "invulnerable": false}, "folder": "K59Lb8PvaCmIrviu", "_id": "2P2HioialQdFUCv6"} -{"name": "Nemesis Force Halberd", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/force-stave.webp", "system": {"quantity": 1, "rarity": "unique", "value": 7, "description": "Grey Knight Nemesis Halberd (treated as Force Stave; +1 DMG baseline for GK; +1ED vs Daemons & Psykers — narrative).", "keywords": "FORCE, ADEPTUS ASTARTES, GREY KNIGHTS, 2-HANDED", "equipped": false, "damage": {"base": 12, "ed": {"base": 2}, "ap": {"base": -1}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}}, "category": "melee", "range": {"melee": 2, "short": 0, "medium": 0, "long": 0}, "traits": {"list": [{"name": "force"}, {"name": "parry"}]}}, "effects": [], "flags": {}, "_id": "71e5ec3cd2b14fa4"} -{"name": "Aegis of Titan", "type": "ability", "img": "modules/wng-core/assets/icons/abilities/adeptus-astartes.webp", "effects": [{"name": "Aegis of Titan (Innate)", "img": "modules/wng-core/assets/icons/abilities/adeptus-astartes.webp", "_id": "8872d1e71d2c4b2a", "type": "base", "system": {"transferData": {"type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "equipTransfer": true, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "scriptData": [], "itemTargetData": {"ids": [], "allItems": false}, "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "changes": [{"key": "flags.wng-daemonhunters.denyBonus", "mode": 2, "value": "1", "priority": 10}, {"key": "flags.wng-daemonhunters.corruptionResistInnate", "mode": 2, "value": "1", "priority": 10}], "disabled": false, "transfer": true}], "system": {"description": "

Innate sanctity of a Grey Knight. +1 bonus die to Deny the Witch; +1 to resist Corruption. If equipped with Aegis armour, gain an additional +1 to resist Corruption.

", "cost": 0, "requirements": "GREY KNIGHTS"}, "_id": "bb3bccb475804f5c"} -{"name": "Brotherhood of Psykers", "type": "ability", "img": "modules/wng-core/assets/icons/abilities/adeptus-astartes.webp", "effects": [], "system": {"description": "

You gain the PSYKER Keyword and know Universal Psyker Abilities and Smite. When you gain this Ability, choose one Discipline: Librarius or Sanctic. Learn one power from the chosen Discipline.

", "cost": 0, "requirements": "GREY KNIGHTS"}, "_id": "afd071e300664fc6"} -{"name": "Might of Heroes", "type": "psychicPower", "img": "modules/wng-core/assets/icons/powers/power.webp", "effects": [{"_id": "dE9A7AKv5dhN9tmI", "changes": [{"key": "system.attributes.strength.bonus", "mode": 2, "value": "@test.result.bonus", "priority": null}, {"key": "system.attributes.toughness.bonus", "mode": 2, "value": "@test.result.bonus", "priority": null}, {"key": "system.attributes.initiative.bonus", "mode": 2, "value": "@test.result.bonus", "priority": null}], "disabled": false, "duration": {"startTime": null, "seconds": null, "combat": null, "rounds": null, "turns": null, "startRound": null, "startTurn": null}, "transfer": false, "flags": {"wrath-and-glory": {"migrated": true, "manualEffectKeys": false}}, "tint": "#ffffff", "origin": null, "name": "Might of Heroes", "description": "", "statuses": [], "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "modules/wng-core/assets/icons/powers/power.webp", "type": "base", "system": {"transferData": {"type": "target", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "equipTransfer": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "scriptData": [{"script": "[Script.iUUp4ouubYFUgtuB]", "label": "Delete", "trigger": "updateCombat", "options": {"targeter": false, "deleteEffect": false, "defending": false}, "async": false}], "itemTargetData": {"ids": [], "allItems": false}, "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "sort": 0}], "folder": "XeqLNhxj3ih0QuHM", "flags": {"wng-forsaken": {"initialization-folder": "Psychic Powers", "sort": 0}, "core": {}}, "system": {"dn": "7", "description": "

Summoning the labyrinthine lore of your Librarius, you bestow the martial might of ancestral Astartes brethren unto your ally, siphoning the Warp to empower their form. 

\n

Your target gains +1 Strength, Toughness, and Initiative until the start of your next Turn. 

", "effect": "", "cost": 15, "activation": "action", "duration": "Sustained", "range": "15 m", "multiTarget": false, "keywords": "PSYCHIC", "prerequisites": "ADEPTUS ASTARTES Keyword", "damage": {"base": 0, "bonus": 0, "rank": 0, "ed": {"base": 0, "bonus": 0, "rank": 0}, "otherDamage": {"wounds": "", "shock": "", "mortal": "0"}, "enabled": false, "ap": {"base": 0, "bonus": 0, "rank": 0}}, "potency": {"list": [{"description": "Your target gains an additional +1 Strength, Toughness, and Initiative.", "cost": 3, "property": "bonus", "initial": "1", "value": "1", "single": false}]}, "test": {"dn": null, "type": "", "self": false}, "traits": {"list": []}}, "_id": "t3zyqiQP8J16yRpS"} -{"name": "Hammerhand (Sanctic)", "type": "psychicPower", "img": "modules/wng-core/assets/icons/powers/power.webp", "effects": [], "system": {"dn": "7", "cost": 10, "activation": "action", "duration": "Sustained", "range": "Self", "keywords": "PSYCHIC, SANCTIC", "description": "

Melee attacks gain +1ED until the start of your next Turn (persists while Sustained). Optionally spend 3 Shock on activation to gain +1 DN to resist Disarm/Shove.

"}, "_id": "9e8737e9f92e4532"} -{"name": "Sanctuary (Sanctic)", "type": "psychicPower", "img": "modules/wng-core/assets/icons/powers/power.webp", "effects": [], "system": {"dn": "7", "cost": 15, "activation": "action", "duration": "Sustained", "range": "Aura 5 m", "keywords": "PSYCHIC, SANCTIC", "description": "

Allies in the aura gain +1 to Resolve vs Fear/Corruption; their attacks count as Sanctified vs DAEMON for overcoming Resistances (GM adjudication). Ends if you are Incapacitated.

"}, "_id": "a15a5a18f5974dca"} -{"name": "The Shrouding (Sanctic)", "type": "psychicPower", "img": "modules/wng-core/assets/icons/powers/power.webp", "effects": [], "system": {"dn": "7", "cost": 10, "activation": "action", "duration": "Sustained", "range": "Self or Ally within 15 m", "keywords": "PSYCHIC, SANCTIC", "description": "

Attacks against the target suffer +1 DN (ranged) while Sustained; moving more than normal Speed ends the effect at end of Turn. Potency: also +1 DN melee.

"}, "_id": "df6a8672ccb14f55"} -{"name": "Might of Titan (Sanctic)", "type": "psychicPower", "img": "modules/wng-core/assets/icons/powers/power.webp", "effects": [], "system": {"dn": "7", "cost": 15, "activation": "action", "duration": "Sustained", "range": "15 m", "keywords": "PSYCHIC, SANCTIC", "description": "

Target ally gains +1 to Strength-based Tests and +1ED on melee attacks; while Sustained, the bonuses persist. Potency: also +1 to Toughness Tests.

"}, "_id": "3a2f1d3395884f24"} -{"name": "Grey Knight", "type": "archetype", "img": "modules/wng-core/assets/images/archetype-astartes-librarian.webp", "effects": [], "system": {"tier": 4, "journal": "", "species": {"name": "Adeptus Astartes", "id": ""}, "faction": {"name": "Adeptus Astartes", "id": ""}, "influence": 2, "cost": 360, "keywords": ["IMPERIUM", "ADEPTUS ASTARTES", "GREY KNIGHTS", "INQUISITION", "DAEMONHUNTERS"], "attributes": {"strength": 5, "toughness": 5, "agility": 5, "initiative": 5, "willpower": 6, "intellect": 3, "fellowship": 2}, "skills": {"athletics": 3, "awareness": 3, "ballisticSkill": 5, "leadership": 1, "psychicMastery": 4, "scholar": 2, "stealth": 3, "survival": 1, "weaponSkill": 5}, "ability": {"name": "Aegis of Titan", "id": ""}, "wargear": {"structure": {"type": "and", "groupId": "root", "id": "root", "options": []}, "options": []}}, "_id": "57753a87bde04745"} diff --git a/wg-greyknights/packs/gk-items-060.db b/wg-greyknights/packs/gk-items-060.db deleted file mode 100644 index 9864962..0000000 --- a/wg-greyknights/packs/gk-items-060.db +++ /dev/null @@ -1,7 +0,0 @@ -{"name": "Nemesis Falchions (Pair)", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/force-sword.webp", "system": {"quantity": 1, "rarity": "unique", "description": "A matched pair of sanctified force blades. When wielding both, each attack may gain either +1 bonus die to WS or +1ED. Vs DAEMON/PSYKER: +1ED. Requires PSYKER to benefit from Force.", "value": 9, "keywords": "IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 12, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": -3, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "melee", "range": {"short": 0, "medium": 0, "long": 0, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 0, "traits": {"list": [{"name": "force"}, {"name": "parry"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755858904217, "modifiedTime": 1755859370010, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.AUwZwmYWGCSH04m2", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": null, "flags": {}, "_id": "AUwZwmYWGCSH04m2"} -{"name": "Psilencer", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/assault-cannon.webp", "system": {"quantity": 1, "rarity": "unique", "description": "High-rate psykic disruptor. Vs PSYKER: +1ED; hit PSYKER cannot Aim in the same round.", "value": 9, "keywords": "IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 11, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": 0, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 12, "medium": 24, "long": 36, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 3, "traits": {"list": [{"name": "rapidFire", "rating": "3"}, {"name": "reliable"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755859392521, "modifiedTime": 1755859417510, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.qvk9TxIezbO2C5OK", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": null, "flags": {}, "_id": "qvk9TxIezbO2C5OK"} -{"name": "Psycannon", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/autocannon.webp", "system": {"quantity": 1, "rarity": "unique", "description": "Anti-daemonic bolt weapon. Vs DAEMON/PSYKER: +1ED. On Critical: gains Rending (1) for the result.", "value": 9, "keywords": "BOLT, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, SANCTIFIED", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 14, "bonus": 0, "rank": 0, "ed": {"base": 3, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": -2, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 20, "medium": 40, "long": 60, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 2, "traits": {"list": [{"name": "heavy", "rating": "7"}, {"name": "rapidFire", "rating": "2"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "effects": [], "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755858910417, "modifiedTime": 1755859387007, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.luQa0ffP6nroOeN8", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": null, "flags": {}, "_id": "luQa0ffP6nroOeN8"} -{"name": "Terminator Aegis (Grey Knights)", "type": "armour", "img": "modules/wng-core/assets/icons/armour/terminator-armour.webp", "effects": [{"_id": "OvE7cPAtNLDdEj6j", "name": "Aegis Wards (Constant)", "origin": null, "disabled": false, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.skills.psychicMastery.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.resolve.bonus", "mode": 2, "value": "1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/aura.svg", "type": "base", "description": "", "statuses": [], "sort": 0}, {"_id": "RXHERg7YjunnEQ8h", "name": "Aegis Warding Runes (Toggle)", "origin": null, "disabled": true, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.combat.resilience.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.defence.bonus", "mode": 2, "value": "-1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/explosion.svg", "type": "base", "description": "", "statuses": [], "sort": 0}], "flags": {"wng-core": {"initialization-folder": "Armour", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "", "description": "

Grey Knights Tactical Dreadnought armour with Aegis wards and storm bolter hard‑mount.

", "value": 10, "keywords": "POWERED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "rating": 7, "base": 0, "traits": {"list": [{"name": "cumbersome"}, {"name": "powered", "rating": "4"}]}, "invulnerable": false}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755859195679, "modifiedTime": 1755859221056, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.9XTvCiJElW4LJij9", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": "K59Lb8PvaCmIrviu", "_id": "9XTvCiJElW4LJij9"} -{"name": "Psybolt Ammunition", "type": "ammo", "img": "modules/wng-core/assets/icons/ammo/ammo.webp", "system": {"quantity": 1, "rarity": "unique", "description": "Upgrade for BOLT/Storm Bolter weapons. Grants +1ED. Against DAEMON/PSYKER, attacks gain Rending (1). Apply manually to attack resolving rules; conditional effects are not automated.", "value": 5, "keywords": "BOLT, SANCTIFIED", "effect": "", "traits": {"list": []}}, "effects": [], "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755858907510, "modifiedTime": 1755859000832, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.ozxEfipXNkP69SHr", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": null, "flags": {}, "_id": "ozxEfipXNkP69SHr"} -{"name": "Aegis Power Armour", "type": "armour", "img": "modules/wng-core/assets/icons/armour/aquila-mk-vii.webp", "effects": [{"_id": "25aqxUBwyQtSAdxb", "name": "Aegis Wards (Constant)", "origin": null, "disabled": false, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.skills.psychicMastery.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.resolve.bonus", "mode": 2, "value": "1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/aura.svg", "type": "base", "description": "", "statuses": [], "sort": 0}, {"_id": "LfRNsXknme6JLgSC", "name": "Aegis Warding Runes (Toggle)", "origin": null, "disabled": true, "duration": {"startTime": null, "combat": null}, "changes": [{"key": "system.combat.resilience.bonus", "mode": 2, "value": "1", "priority": 20}, {"key": "system.combat.defence.bonus", "mode": 2, "value": "-1", "priority": 20}], "tint": "#ffffff", "transfer": true, "flags": {}, "system": {"transferData": {"equipTransfer": true, "type": "document", "originalType": "document", "documentType": "Actor", "avoidTest": {"value": "none", "opposed": false, "prevention": true, "reversed": false}, "testIndependent": false, "selfOnly": false, "prompt": false, "area": {"templateData": {"borderColor": null, "fillColor": null, "texture": null}, "keep": false, "aura": {"transferred": false, "render": false}, "duration": "sustained"}, "zone": {"type": "zone", "transferred": false, "traits": {}, "skipImmediateOnPlacement": false, "keep": false}}, "itemTargetData": {"ids": [], "allItems": false}, "scriptData": [], "zone": {"type": "zone", "traits": {}, "skipImmediateOnPlacement": false}, "sourceData": {"test": {}}}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "lastModifiedBy": null}, "img": "icons/svg/explosion.svg", "type": "base", "description": "", "statuses": [], "sort": 0}], "flags": {"wng-core": {"initialization-folder": "Armour", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "", "description": "

Grey Knights sanctified power armour with hexagrammic wards and storm bolter forearm mount.

", "value": 9, "keywords": "POWERED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "rating": 5, "base": 0, "traits": {"list": [{"name": "powered", "rating": "3"}]}, "invulnerable": false}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755859231852, "modifiedTime": 1755859293388, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.11NZTwYXPlHBlnXC", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": "K59Lb8PvaCmIrviu", "_id": "11NZTwYXPlHBlnXC"} -{"name": "Grey Knight Armour Integrated Storm Bolter", "type": "weapon", "img": "modules/wng-core/assets/icons/weapons/storm-bolter.webp", "effects": [], "flags": {"wng-core": {"initialization-folder": "Weapons", "sort": 0}, "core": {}}, "system": {"quantity": 1, "rarity": "rare", "description": "

Integrated forearm storm bolter. Integrated: does not occupy hands; may fire while wielding two‑handed melee. Treat as Pistol for firing in melee.

", "value": 4, "keywords": "BOLT, INTEGRATED, IMPERIUM, ADEPTUS ASTARTES, GREY KNIGHTS, INQUISITION, DAEMONHUNTERS", "equipped": false, "attack": {"base": 0, "bonus": 0, "rank": "none"}, "damage": {"base": 10, "bonus": 0, "rank": 0, "ed": {"base": 2, "bonus": 0, "rank": 0, "dice": ""}, "ap": {"base": 0, "bonus": 0, "rank": 0, "dice": ""}, "enabled": false, "otherDamage": {"mortal": "0", "wounds": "0", "shock": "0"}, "dice": ""}, "ed": {"base": 0, "bonus": 0, "rank": 0}, "ap": {"base": 0, "bonus": 0, "rank": 0}, "category": "ranged", "range": {"short": 12, "medium": 24, "long": 36, "melee": 1, "thrown": null}, "ammo": {"id": ""}, "salvo": 1, "traits": {"list": [{"name": "brutal"}, {"name": "pistol"}, {"name": "rapidFire", "rating": "2"}]}, "upgrades": [], "otherDamage": {}, "combi": {}, "twinned": false}, "_stats": {"coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1", "createdTime": 1755859127318, "modifiedTime": 1755859187508, "lastModifiedBy": "ETeghv7x8fjtIEKK", "exportSource": {"worldId": "gilead2", "uuid": "Item.SDFwequVtp6WsCFj", "coreVersion": "13.347", "systemId": "wrath-and-glory", "systemVersion": "7.1.1"}}, "folder": "85dkcvhBYli5TJrZ", "_id": "SDFwequVtp6WsCFj"} diff --git a/wg-greyknights/scripts/auto-gk-archetype.js b/wg-greyknights/scripts/auto-gk-archetype.js deleted file mode 100644 index 3aa99e7..0000000 --- a/wg-greyknights/scripts/auto-gk-archetype.js +++ /dev/null @@ -1,75 +0,0 @@ -// WNG-Daemonhunters 0.6.4.2 — GK autoload (single dialog, restored Archetype in pack) -Hooks.once('ready', () => console.log("WNG-Daemonhunters | Auto-loadout ready")); - -async function addFromPackByName(actor, packKey, name, equip=false) { - const pack = game.packs.get(packKey); - if (!pack) return ui.notifications?.warn(`Pack not found: ${packKey}`); - const index = await pack.getIndex(); - const entry = index.find(e => e.name === name); - if (!entry) return ui.notifications?.warn(`Item not in pack: ${name}`); - const doc = await pack.getDocument(entry._id); - const data = doc.toObject(); delete data._id; - if (equip && data.system && ('equipped' in data.system)) data.system.equipped = true; - const [created] = await actor.createEmbeddedDocuments('Item', [data]); - return created; -} -async function addFromUuid(actor, uuid, equip=false) { - const doc = await fromUuid(uuid); - if (!doc) return ui.notifications?.warn(`Missing UUID: ${uuid}`); - const data = doc.toObject(); delete data._id; - if (equip && data.system && ('equipped' in data.system)) data.system.equipped = true; - const [created] = await actor.createEmbeddedDocuments('Item', [data]); - return created; -} - -Hooks.on('createItem', async (item, options, userId) => { - try { - const actor = item.parent; - if (!actor || item.type !== 'archetype' || item.name !== 'Grey Knight') return; - if (game.userId !== userId) return; - if (actor.getFlag('wng-daemonhunters','gkLoaded')) return; - - const content = `

Select initial loadout for Grey Knight:

-
- -
`; - - new Dialog({ - title: "Grey Knight — Choose Loadout", - content, - buttons: { - ok: { label: "Apply", callback: async (html) => { - const choice = html.find('#gk-loadout').val(); - const PACK = "wng-daemonhunters.daemonhunters"; - - // Core abilities - await addFromPackByName(actor, PACK, "Aegis of Titan"); - await addFromPackByName(actor, PACK, "Brotherhood of Psykers"); - await addFromPackByName(actor, PACK, "Might of Heroes"); - - if (choice === 'incog') { - await addFromPackByName(actor, PACK, "Pilgrim Astartes Plate (Disguise Armour)", true); - await addFromUuid(actor, "Compendium.wng-core.items.Item.4QVBQYWXXLyvFWkj", true); // Knife - await addFromUuid(actor, "Compendium.wng-core.items.Item.7b2xcPWBB7up65PM", true); // Bolt Pistol - } else if (choice === 'power') { - await addFromPackByName(actor, PACK, "Aegis Power Armour", true); - await addFromPackByName(actor, PACK, "Nemesis Force Halberd", true); - await addFromPackByName(actor, PACK, "Grey Knight Armour Integrated Storm Bolter", true); - } else if (choice === 'termi') { - await addFromPackByName(actor, PACK, "Terminator Aegis (Grey Knights)", true); - await addFromPackByName(actor, PACK, "Nemesis Force Halberd", true); - await addFromPackByName(actor, PACK, "Grey Knight Armour Integrated Storm Bolter", true); - } - - await actor.setFlag('wng-daemonhunters','gkLoaded', true); - ui.notifications?.info("Grey Knight loadout applied."); - }} - }, - default: "ok" - }).render(true); - } catch (e) { console.error("GK autoload error", e); } -}); diff --git a/wg-greyknights/scripts/gk-import-from-module.js b/wg-greyknights/scripts/gk-import-from-module.js deleted file mode 100644 index ac4d699..0000000 --- a/wg-greyknights/scripts/gk-import-from-module.js +++ /dev/null @@ -1,40 +0,0 @@ -// GK – Import Items From Module into Items Directory -(async () => { - const FILES = [ - "fvtt-Item-archetype-grey-knight_v5.json", - "fvtt-Item-ability-aegis-of-titan_v5.json", - "fvtt-Item-nemesis-force-halberd_v4.json", - "fvtt-Item-gk-armour-integrated-storm-bolter_v2.json", - "fvtt-Item-aegis-power-armour_v2.json", - "fvtt-Item-terminator-aegis-gk_v4.json" - ]; - const MODULE_ID = "gk-greyknight"; - const base = `modules/${MODULE_ID}/foundry`; - - const ensureFolder = async (name, color="#4b6eaf") => { - let f = game.folders.find(x => x.type === "Item" && x.name === name); - if (!f) f = await Folder.create({name, type:"Item", color}); - return f; - }; - const worldFolder = await ensureFolder("Grey Knight Pack", "#4b6eaf"); - - const fetchJSON = async (path) => { - const res = await fetch(`/${path}`); - if (!res.ok) throw new Error(`Nie mogę pobrać: ${path} (HTTP ${res.status})`); - return await res.json(); - }; - - let created = 0, updated = 0; - for (const fn of FILES) { - const full = `${base}/${fn}`; - try { - const data = await fetchJSON(full); - if (data._id) delete data._id; - data.folder = worldFolder.id; - const existing = game.items.getName(data.name); - if (existing) { await existing.update(data); updated++; } - else { await Item.create(data); created++; } - } catch (e) { console.error("Import err", full, e); ui.notifications.warn(`Błąd importu: ${fn}`); } - } - ui.notifications.info(`GK Module Import: utworzono ${created}, zaktualizowano ${updated}.`); -})(); \ No newline at end of file diff --git a/wg-greyknights/scripts/gk-loadout-manager.js b/wg-greyknights/scripts/gk-loadout-manager.js deleted file mode 100644 index 600b541..0000000 --- a/wg-greyknights/scripts/gk-loadout-manager.js +++ /dev/null @@ -1,64 +0,0 @@ -// GK – Loadout Manager (module) -(async () => { - const NAMES = { - archetype: "Grey Knight (Archetype)", - ability: "Aegis of Titan (Ability)", - nemesis: "Nemesis Force Halberd", - storm: "Grey Knight Armour Integrated Storm Bolter", - aegis: "Aegis Power Armour", - term: "Terminator Aegis (Grey Knights)" - }; - const FOLDER = "Grey Knight Pack"; - - const actor = canvas.tokens.controlled[0]?.actor ?? game.user.character; - if (!actor) return ui.notifications.warn("Zaznacz token albo przypisz postać."); - - const mode = await Dialog.prompt({ - title: "Grey Knight – Loadout Manager", - content: `

Wybierz lub zmień loadout:

-
-
- `, - label: "OK", - callback: html => html.find('input[name="m"]:checked').val() - }); - if (!mode) return; - - const findWorldItem = (name) => { - const inFolder = game.items.filter(i => i.name === name && i.folder?.name === FOLDER); - if (inFolder.length) return inFolder[0]; - return game.items.getName(name) ?? null; - }; - const ensureOnActor = async (name) => { - const have = actor.items.getName(name); - if (have) return have; - const worldIt = findWorldItem(name); - if (!worldIt) { ui.notifications.warn(`Brak w Items Directory: ${name} — użyj importera modułu.`); return null; } - const created = await actor.createEmbeddedDocuments("Item", [worldIt.toObject()]); - return created[0]; - }; - - for (const key of Object.keys(NAMES)) await ensureOnActor(NAMES[key]); - - const setEquipped = async (name, on) => { const it = actor.items.getName(name); if (it) await it.update({"system.equipped": !!on}); }; - await setEquipped(NAMES.aegis, false); - await setEquipped(NAMES.term, false); - await setEquipped(NAMES.storm, false); - await setEquipped(NAMES.nemesis, false); - - if (mode === "war") { - await setEquipped(NAMES.aegis, true); - await setEquipped(NAMES.storm, true); - await setEquipped(NAMES.nemesis, true); - } else if (mode === "term") { - await setEquipped(NAMES.term, true); - await setEquipped(NAMES.storm, true); - await setEquipped(NAMES.nemesis, true); - } - - const anyAegisEquipped = !!actor.items.find(i => ["armour","armor"].includes(i.type) && /Aegis/.test(i.name) && i.system?.equipped); - const abilItem = actor.items.getName(NAMES.ability); - if (abilItem) for (const ef of abilItem.effects ?? []) if (ef.name?.includes("Aegis Synergy")) await ef.update({ disabled: !anyAegisEquipped }); - - ui.notifications.info(`Loadout ustawiony: ${mode.toUpperCase()}.`); -})(); \ No newline at end of file diff --git a/wg-greyknights/scripts/macro-gk-auto-loadout-on-archetype.js b/wg-greyknights/scripts/macro-gk-auto-loadout-on-archetype.js deleted file mode 100644 index 01bf305..0000000 --- a/wg-greyknights/scripts/macro-gk-auto-loadout-on-archetype.js +++ /dev/null @@ -1,20 +0,0 @@ -// Auto loadout on archetype creation (hook Actor creation) -Hooks.on("createActor", async (actor, options, userId) => { - try { - const arch = actor.items.find(i => i.type === "archetype" && i.name?.includes("Grey Knight")); - if (!arch) return; - const names = ["Nemesis Force Halberd","Aegis Power Armour","Grey Knight Armour Integrated Storm Bolter","Aegis of Titan"]; - const toAdd = []; - for (const n of names) { - const packItem = game.items.getName?.(n); - if (packItem) toAdd.push(packItem.toObject()); - else { - // fallback: create minimal items - toAdd.push({name:n, type: n.includes("Armour") ? "armor" : (n.includes("Bolter") ? "weapon" : "ability"), img:"icons/svg/placeholder.svg", system:{}}); - } - } - await actor.createEmbeddedDocuments("Item", toAdd); - } catch(e) { - console.error(e); - } -}); \ No newline at end of file