From 50413a14d6bac836938b848ac50e7abbf2aca2ab Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sat, 8 Apr 2023 23:21:57 -0500 Subject: [PATCH] actions and a gold helper macro --- macros/gold-calculator.js | 33 +++++++++++++++++++++++++++++++++ module.json | 12 ++++++++++++ packs/common-actions.db | 8 ++++++++ packs/helper-macros.db | 1 + 4 files changed, 54 insertions(+) create mode 100644 macros/gold-calculator.js create mode 100644 packs/common-actions.db create mode 100644 packs/helper-macros.db diff --git a/macros/gold-calculator.js b/macros/gold-calculator.js new file mode 100644 index 0000000..b6e4f36 --- /dev/null +++ b/macros/gold-calculator.js @@ -0,0 +1,33 @@ +let tokens = [] +if (canvas.tokens.controlled.length > 0) { + tokens = canvas.tokens.controlled +} +if (tokens.length > 0) { + main(tokens) +} else { + ui.notifications.error('Please select or target a token') +} + +async function main (tokens) { + const currencies = ['Copper', 'Silver', 'Gold', 'Platinum'] + let template = '
' + const fmtOptions = { + minimumIntegerDigits: 1, + minimumFractionDigits: 2, + maximumFractionDigits: 2 + } + const fmt = Intl.NumberFormat('en-US', fmtOptions) + for (const token of tokens) { + const actor = token.actor + let total = 0 + for (const item of actor.items.filter(i => currencies.indexOf(i.name) > -1)) { + total += item.system.price * item.system.quantity + } + template += `` + } + template += '' + Dialog.prompt({ + title: 'Currency Totals', + content: template + }) +} diff --git a/module.json b/module.json index 3338214..878da0d 100644 --- a/module.json +++ b/module.json @@ -30,6 +30,18 @@ "label": "SWADE MB Effect Macros", "path": "./packs/effect-macros.db", "type": "Macro" + }, + { + "name": "helper-macros", + "label": "SWADE MB Helper Macros", + "path": "./packs/helper-macros.db", + "type": "Macro" + }, + { + "name": "Common Actions", + "label": "SWADE MB Common Actions", + "path": "./packs/common-actions.db", + "type": "Item" } ], "relationships": { diff --git a/packs/common-actions.db b/packs/common-actions.db new file mode 100644 index 0000000..b9eea40 --- /dev/null +++ b/packs/common-actions.db @@ -0,0 +1,8 @@ +{"name":"Disarm","type":"action","img":"icons/skills/melee/sword-damaged-broken-orange.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore03rules0.JournalEntryPage.03situationalr00#disarm]{DISARM}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"nRh9e5kO":{"name":"Disarm","type":"resist","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null}}},"favorite":false,"source":"Savage Pathfinder - Enhanced"},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"core":{"sourceId":"Item.qL8jMZC3S26pu9YU"},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1679667342015,"modifiedTime":1681014011833,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"da2BUepbnG4S4DAY"} +{"name":"Work the Room","type":"action","img":"icons/skills/social/diplomacy-unity-alliance.webp","system":{"description":"","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"VHwhhR0B":{"name":"Persuasion","type":"skill","skillOverride":"Persuasion","skillMod":"","rof":2,"shotsUsed":null},"WF83NRE1":{"name":"Performance","type":"skill","skillOverride":"Performance","skillMod":"","rof":2,"shotsUsed":null}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"swim":{"config":{"reloadSFX":"","fireSFX":"","autoFireSFX":"","silencedFireSFX":"","silencedAutoFireSFX":"","emptySFX":"","isPack":false,"isConsumable":false,"isSilenced":false,"loadedAmmo":"","_version":1}},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Item.341DHgHgVRvAO2Zm"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1667885448561,"modifiedTime":1681014013808,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"ccLpXqADP6FTIoMy"} +{"name":"Push","type":"action","img":"icons/skills/melee/shield-block-bash-blue.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore03rules0.JournalEntryPage.03situationalr00#push]{Push}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"wwxI37Do":{"name":"Push","type":"skill","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"o5BwRFE0":{"name":"Oppose Push","type":"resist","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"SceRYgjP":{"name":"Resist Prone","type":"resist","skillOverride":"Athletics","skillMod":"","rof":null,"shotsUsed":null}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"swim":{"config":{"reloadSFX":"","fireSFX":"","autoFireSFX":"","silencedFireSFX":"","silencedAutoFireSFX":"","emptySFX":"","isPack":false,"isConsumable":false,"isSilenced":false,"loadedAmmo":"","_version":1}},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Item.tuKRrhwS9UKIEVwE"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1667884673139,"modifiedTime":1681014015412,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"Z9nICkaRkzyMkdrr"} +{"name":"Networking","type":"action","img":"icons/skills/social/diplomacy-handshake.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore04theadv.JournalEntryPage.04networking0000]{Networking}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"VvEhWhmL":{"name":"Persuasion","type":"skill","skillOverride":"Persuasion","skillMod":"","rof":null,"shotsUsed":null},"vyhH3l9E":{"name":"Intimidation","type":"skill","skillOverride":"Intimidation","skillMod":"","rof":null,"shotsUsed":null}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"swim":{"config":{"reloadSFX":"","fireSFX":"","autoFireSFX":"","silencedFireSFX":"","silencedAutoFireSFX":"","emptySFX":"","isPack":false,"isConsumable":false,"isSilenced":false,"loadedAmmo":"","_version":1}},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Item.XoWhd1ycgoU4ncig"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1667885227318,"modifiedTime":1681014016960,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"KOiLsMDf2M6h6a1K"} +{"name":"Grapple (Tentacles)","type":"action","img":"icons/skills/melee/unarmed-punch-fist.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore03rules0.JournalEntryPage.03situationalr00#grappling]{Grappling}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"XEC2IWM0":{"name":"Grapple","type":"skill","skillOverride":"Athletics","skillMod":"+2","rof":null,"shotsUsed":null},"g7oxsNqI":{"name":"Resist Grapple","type":"resist","skillOverride":"Athletics","skillMod":"","rof":null,"shotsUsed":null},"KCvw4z5i":{"name":"Crush","type":"skill","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"1wWLiKwK":{"name":"Resist Crush","type":"resist","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"t1Db4fxd":{"name":"Crush","type":"damage","skillOverride":"","skillMod":"","rof":null,"shotsUsed":null,"dmgOverride":"@str","dmgMod":""}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"swim":{"config":{"reloadSFX":"","fireSFX":"","autoFireSFX":"","silencedFireSFX":"","silencedAutoFireSFX":"","emptySFX":"","isPack":false,"isConsumable":false,"isSilenced":false,"loadedAmmo":"","_version":1}},"core":{"sourceId":"Item.OPK9APtdci9h9ltN"},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1667883835416,"modifiedTime":1681014018893,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"7hCuCBWngOYb7DMB"} +{"name":"Grapple","type":"action","img":"icons/skills/melee/unarmed-punch-fist.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore03rules0.JournalEntryPage.03situationalr00#grappling]{Grappling}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"XEC2IWM0":{"name":"Grapple","type":"skill","skillOverride":"Athletics","skillMod":"","rof":null,"shotsUsed":null},"g7oxsNqI":{"name":"Resist Grapple","type":"resist","skillOverride":"Athletics","skillMod":"","rof":null,"shotsUsed":null},"KCvw4z5i":{"name":"Crush","type":"skill","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"1wWLiKwK":{"name":"Resist Crush","type":"resist","skillOverride":"Strength","skillMod":"","rof":null,"shotsUsed":null},"t1Db4fxd":{"name":"Crush","type":"damage","skillOverride":"","skillMod":"","rof":null,"shotsUsed":null,"dmgOverride":"@str","dmgMod":""}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"swim":{"config":{"reloadSFX":"","fireSFX":"","autoFireSFX":"","silencedFireSFX":"","silencedAutoFireSFX":"","emptySFX":"","isPack":false,"isConsumable":false,"isSilenced":false,"loadedAmmo":"","_version":1}},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Item.VDKhDxOtfGnZt4W0"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1667883835416,"modifiedTime":1681014020440,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"2jAOeH9QKQqjugAt"} +{"name":"Frenzy","type":"action","img":"icons/skills/melee/strikes-sword-scimitar.webp","system":{"description":"","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"qQtymA5P":{"name":"Frenzy Attack","type":"skill","skillOverride":"Fighting","skillMod":"","rof":2,"shotsUsed":null}}},"favorite":false,"source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Item.YJftrFaCCzVkNXt3"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1668048955652,"modifiedTime":1681014022280,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"nQHHXfEN7Ey2iWIM"} +{"name":"Evade","type":"action","img":"icons/skills/movement/figure-running-gray.webp","system":{"description":"

@UUID[Compendium.swpf-core-rules.swpf-rules.swpfcore03rules0.JournalEntryPage.03situationalr00#evasion]{Evasion}

","notes":"","additionalStats":{},"actions":{"skill":"","skillMod":"","dmgMod":"","additional":{"L0XtU5KM":{"name":"Evade (Agility)","type":"resist","skillOverride":"Agility","skillMod":"-2","rof":null,"shotsUsed":null}}},"favorite":false,"equipped":"true","source":""},"effects":[],"ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"core":{"sourceId":"Actor.nN6vdXjmbPij159e.Item.nYBD8hiCOTkm8ZPC"},"exportSource":{"world":"swpf-rotr","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1674019466231,"modifiedTime":1681014023930,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"NuVPqEyIe7KaQHvr"} diff --git a/packs/helper-macros.db b/packs/helper-macros.db new file mode 100644 index 0000000..73d5ad5 --- /dev/null +++ b/packs/helper-macros.db @@ -0,0 +1 @@ +{"name":"Gold Totals","type":"script","author":"ueJGUfSYuRRL3Ypr","img":"icons/commodities/currency/coins-plain-stack-gold-yellow.webp","scope":"global","command":"let tokens = []\nif (canvas.tokens.controlled.length > 0) {\n tokens = canvas.tokens.controlled\n}\nif (tokens.length > 0) {\n main(tokens)\n} else {\n ui.notifications.error('Please select or target a token')\n}\n\nasync function main (tokens) {\n const currencies = ['Copper', 'Silver', 'Gold', 'Platinum']\n let template = '
ActorCurrency
${actor.name}${fmt.format::(total)}
'\n const fmtOptions = {\n minimumIntegerDigits: 1,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }\n const fmt = Intl.NumberFormat('en-US', fmtOptions)\n for (const token of tokens) {\n const actor = token.actor\n let total = 0\n for (const item of actor.items.filter(i => currencies.indexOf(i.name) > -1)) {\n total += item.system.price * item.system.quantity\n }\n template += ``\n }\n template += ''\n Dialog.prompt({\n title: 'Currency Totals',\n content: template\n })\n}","ownership":{"default":0,"ueJGUfSYuRRL3Ypr":3},"flags":{"advanced-macros":{"runAsGM":false,"runForSpecificUser":""},"exportSource":{"world":"swade-module-test","system":"swade","coreVersion":"10.291","systemVersion":"2.2.5"},"core":{"sourceId":"Macro.lOAxoK00x5QQFbTH"}},"_stats":{"systemId":"swade","systemVersion":"2.2.5","coreVersion":"10.291","createdTime":1680966567327,"modifiedTime":1681013325194,"lastModifiedBy":"ueJGUfSYuRRL3Ypr"},"folder":null,"sort":0,"_id":"QMnx9cuyw81kRS2o"}
ActorCurrency
${actor.name}${fmt.format(total)}