9 lines
12 KiB
Plaintext

{"_id":"5uYT6npGhh29j3Bq","name":"Toggle Holding","permission":{"default":0,"goVuB7uyVDPjAwfj":3},"type":"script","flags":{"combat-utility-belt":{"macroTrigger":""},"core":{"sourceId":"Macro.dsr95SKSNCDX70VO"},"cf":{"id":"temp_pswasgs6ygg"}},"scope":"global","command":"main ()\n\nasync function main() {\n\nconst effect = \"systems/swade/assets/icons/status/status_holding.svg\";\nconst effectName = \"Holding\";\n\n //Is a token selected\n if (canvas.tokens.controlled.length == 0) {\n ui.notifications.error(\"No tokens selected\");\n return;\n }\n\n let tokens = canvas.tokens.controlled.map(token => {return token});\n\n for (let token of tokens) {\n await token.toggleEffect(effect);\n } // end for\n} //End main","author":"goVuB7uyVDPjAwfj","img":"systems/swade/assets/icons/status/status_holding.svg","actorIds":[]}
{"_id":"B07BTxFEkIpxWK3p","name":"Adventure Card","permission":{"default":0,"mrhsZpAiXth4sLah":3},"type":"script","flags":{"core":{"sourceId":"Compendium.swade-macros-simple.SWADE-Macros.dj9ISCPKpZRu43ud"},"cf":{"id":"temp_natl1zonf8"}},"scope":"global","command":"/* Mini Tutorial\r\n1 - Import the cards to a rollable table (i recommend Card Deck Importer - follow the instructions there). Name the rollable table AdventureDeck or change below.\r\n2 - Create an item (gear) named Adventure Card. Give it to the characters that will use it.\r\n3 - Run the macro.\r\n*/\r\n\r\nvar rollTableName = \"AdventureDeck\"; /// name of the rolltable with adventure cards\r\nvar itemCard = \"Adventure Card\"; /// name of the item holding the adventure card\r\n\r\nlet chars = game.actors.entities.filter((t) => t.data.type === \"character\"); /// all the chars\r\nlet optionchars = \"\";\r\nvar allchars = [];\r\n\r\nfor (const char of chars) {\r\n let myitem = char.items.find((i) => i.name === itemCard);\r\n if (myitem !== null) {\r\n /// filters the ones that has the item\r\n optionchars += `<option value=\"` + char._id + `\">` + char.name + `</option>`;\r\n allchars.push(char._id);\r\n }\r\n}\r\n\r\nif (!optionchars) {\r\n /// no chars\r\n ui.notifications.warn(`No character has the item ` + itemCard + `.`, {});\r\n}\r\n\r\nlet template =\r\n `<p>How many cards? <input type=\"number\" value=\"1\" id=\"qtde\" style=\"width:50px\" /></p>\r\n<p>For wich character? <select id=\"jogs\"><option value=\"todos\">All</option>` +\r\n optionchars +\r\n `</select></p>`;\r\nnew Dialog({\r\n title: \"Give Adventure Cards\",\r\n content: template,\r\n buttons: {\r\n ok: {\r\n label: \"Give\",\r\n callback: function (html) {\r\n applyFormOptions(html);\r\n },\r\n },\r\n cancel: {\r\n label: \"Cancel\",\r\n },\r\n },\r\n}).render(true);\r\n\r\nfunction drawFromTable(tableName) {\r\n /// thanks to Forien for this. Check his modules https://foundryvtt.com/community/forien\r\n const table = game.tables.getName(tableName);\r\n if (!table) {\r\n ui.notifications.warn(`Table ${tableName} not found.`, {});\r\n return;\r\n }\r\n let results = table.roll().results;\r\n\r\n // if table is without replacemenets, mark results as drawn\r\n if (table.data.replacement === false) {\r\n results = results.map((r) => {\r\n r.drawn = true;\r\n return r;\r\n });\r\n\r\n table.updateEmbeddedEntity(\"TableResult\", results);\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction applyFormOptions(html) {\r\n let qtde = html.find(\"#qtde\")[0].value;\r\n let selchar = html.find(\"#jogs\")[0].value;\r\n\r\n if (selchar === \"todos\") {\r\n for (let i = 0; i < allchars.length; i++) {\r\n giveCards(qtde, allchars[i]);\r\n }\r\n } else {\r\n giveCards(qtde, selchar);\r\n }\r\n\r\n let chatData = {\r\n user: game.user._id,\r\n speaker: ChatMessage.getSpeaker(),\r\n content: \"Adventure Cards given\",\r\n };\r\n ChatMessage.create(chatData, {});\r\n}\r\n\r\nfunction giveCards(howmany, actorId) {\r\n let char = game.actors.get(actorId);\r\n let myitem = char.items.find((i) => i.name === itemCard);\r\n let updatedesc = \"\";\r\n\r\n for (let i = 1; i <= howmany; i++) {\r\n let results = drawFromTable(rollTableName);\r\n updatedesc +=\r\n \"<p>@Compendium[\" + results[0].collection + \".\" + results[0].resultId + \"]{\" + results[0].text + \"}</p>\";\r\n }\r\n\r\n myitem.update({ [\"data.description\"]: updatedesc });\r\n}\r\n","author":"mrhsZpAiXth4sLah","img":"icons/svg/chest.svg","actorIds":[]}
{"_id":"CZvzvDhyY6oUHdKN","name":"Toggle Flying","permission":{"default":0,"goVuB7uyVDPjAwfj":3},"type":"script","flags":{"combat-utility-belt":{"macroTrigger":""},"core":{"sourceId":"Macro.dsr95SKSNCDX70VO"},"cf":{"id":"temp_pswasgs6ygg"}},"scope":"global","command":"main ()\n\nasync function main() {\n\nconst effect = \"systems/swade/assets/icons/status/status_flying.svg\";\nconst effectName = \"Flying\";\n\n //Is a token selected\n if (canvas.tokens.controlled.length == 0) {\n ui.notifications.error(\"No tokens selected\");\n return;\n }\n\n let tokens = canvas.tokens.controlled.map(token => {return token});\n\n for (let token of tokens) {\n await token.toggleEffect(effect);\n } // end for\n} //End main","author":"goVuB7uyVDPjAwfj","img":"systems/swade/assets/icons/status/status_flying.svg","actorIds":[]}
{"_id":"Elp8657828AQ5fUL","name":"Card Draw","permission":{"default":0,"mrhsZpAiXth4sLah":3},"type":"script","flags":{"core":{"sourceId":"Compendium.swade-macros-simple.SWADE-Macros.RhmF9WWSB93bXUeF"},"cf":{"id":"temp_natl1zonf8"}},"scope":"global","command":"/*\r\nFeatures\r\n- Draw n cards placing them in the scene\r\n- This macro can reset the table preventing from the error\r\n- This macro can line up the cards\r\n*/\r\n\r\ngetRequirements();\r\n\r\nfunction getRequirements() {\r\n //How Many Cards to Draw\r\n //Width/Height\r\n //Which Table to Draw From\r\n let cardsList = \"\";\r\n Array.from(game.tables).map((el) => {\r\n cardsList += `<option value=\"${el.data.name}\">${el.data.name}</option>`;\r\n });\r\n\r\n let template = `\r\n <p>Table to Draw From: <select id=\"tableName\">${cardsList}</select></p>\r\n <p>\r\n Cards to Draw (Lines x Columns): <input id=\"dogFightLines\" type=\"number\" min=\"1\" style=\"width: 50px;\" value=1> x <input id=\"dogFightColumns\" type=\"number\" min=\"1\" style=\"width: 50px;\" value=9>\r\n </p> \r\n <p>\r\n Height: <input id=\"height\" type=\"number\" min=\"1\" style=\"width: 50px\" value=150>\r\n Width: <input id=\"width\" type=\"number\" min=\"1\" style=\"width: 50px\" value=107>\r\n </p>\r\n <br />\r\n <p>\r\n <input type=\"checkbox\" id=\"reset\" checked/>\r\n Reset Table?\r\n </p> \r\n <p>\r\n <input type=\"checkbox\" id=\"stackupcards\"/>\r\n Just stack up all cards\r\n </p> \r\n <br /> \r\n <p>\r\n <h3>Horizontal spacing between cards</h3>\r\n <input id=\"spacingx\" type=\"range\" min=\"0\" max=\"100\" value=\"20\" step=\"5\">\r\n </p>\r\n <p>\r\n <h3>Vertical spacing between cards (dogfight only)</h3>\r\n <input id=\"spacingy\" type=\"range\" min=\"0\" max=\"100\" value=\"100\" step=\"5\"> \r\n </p>\r\n `;\r\n new Dialog({\r\n title: \"Draw Cards To Table\",\r\n content: template,\r\n buttons: {\r\n ok: {\r\n label: \"Draw\",\r\n callback: async (html) => {\r\n makeTiles(html);\r\n },\r\n },\r\n cancel: {\r\n label: \"Cancel\",\r\n },\r\n },\r\n }).render(true);\r\n}\r\n\r\nasync function makeTiles(html) { \r\n let spacingx = html.find(\"#spacingx\")[0].value/100;\r\n let spacingy = html.find(\"#spacingy\")[0].value/100;\r\n let dogFightLines = html.find(\"#dogFightLines\")[0].value;\r\n let dogFightColumns = html.find(\"#dogFightColumns\")[0].value; \r\n let resetTable = html.find(\"#reset\")[0].value;\r\n const stackupcards = html.find(\"#stackupcards\")[0].checked;\r\n let tableName = html.find(\"#tableName\")[0].value;\r\n let cardsToDraw = dogFightLines*dogFightColumns;\r\n let _height = html.find(\"#height\")[0].value;\r\n let _width = html.find(\"#width\")[0].value;\r\n\r\n if (resetTable=='on') {\r\n await game.tables.find((el) => el.data.name == tableName).reset();\r\n }\r\n\r\n let cardDraws = (\r\n await game.tables\r\n .find((el) => el.data.name == tableName)\r\n .drawMany(cardsToDraw)\r\n ).results;\r\n\r\n let centerX = game.scenes.active.data.width / 3;\r\n let centerY = game.scenes.active.data.height / 2;\r\n \r\n let deltaX = 0;\r\n let deltaY = 0;\r\n let counter = 0;\r\n \r\n //console.log(spacingx + '/' + spacingy + ' stackupcards:' + (stackupcards!='on'));\r\n for (let y = 0; y < dogFightLines; y++) {\r\n deltaY = ( _height*y + _height*spacingy*y );\r\n for (let x = 0; x < dogFightColumns; x++) { \r\n deltaX = ( _width*x + _width*spacingx*x ); \r\n if (stackupcards) {\r\n deltaX = 0;\r\n deltaY = 0; \r\n }\r\n await Tile.create({\r\n img: cardDraws[counter].img,\r\n width: _width,\r\n height: _height,\r\n x: centerX + deltaX,\r\n y: centerY + deltaY\r\n }); \r\n //console.log('x:' + x + ' y:' + y + ' counter:' + counter + ' deltaX:' + deltaX + ' deltaY:' + deltaY);\r\n counter = counter + 1;\r\n //console.log('centerX: ' + centerX + ' / deltaX: ' + deltaX + ' / centerX+deltaX:' + (centerX+deltaX) ); \r\n } \r\n }\r\n}","author":"mrhsZpAiXth4sLah","img":"icons/svg/thrust.svg","actorIds":[]}
{"_id":"GdDAPaUnymrqdVrM","name":"Toggle Prone","permission":{"default":0,"goVuB7uyVDPjAwfj":3},"type":"script","flags":{"combat-utility-belt":{"macroTrigger":""},"core":{"sourceId":"Macro.0nnEBhT2P7XeoKl7"},"cf":{"id":"temp_pswasgs6ygg"}},"scope":"global","command":"main ()\n\nasync function main() {\n //Is a token selected\n if (canvas.tokens.controlled.length == 0) {\n ui.notifications.error(\"No tokens selected\");\n return;\n }\n const effectName = \"SWADE.Prone\";\n let effect = CONFIG.statusEffects.find(s => s.label == effectName);\n\n let tokens = canvas.tokens.controlled.map(token => {return token});\n\n for (let token of tokens) {\n await token.toggleEffect(effect);\n } // end for\n} //End main","author":"goVuB7uyVDPjAwfj","img":"systems/swade/assets/icons/status/status_prone.svg","actorIds":[]}
{"name":"Fear Table","permission":{"default":0,"goVuB7uyVDPjAwfj":3},"type":"script","flags":{"core":{"sourceId":"Macro.tt5wQLZWCHErlY8L"},"combat-utility-belt":{"macroTrigger":""}},"scope":"global","command":"// Ask for Fear Penalty\n// Roll On the Fear Table with the Penalty\n\nmain()\n\nasync function main(){\n let fearTable = await game.packs.get(\"swade-core-rules.swade-tables\").getEntity(game.packs.get(\"swade-core-rules.swade-tables\").index.find(el => el.name == \"Fear Table\")._id)\n new Dialog({\n title:\"Fear Table Modifier\",\n content: `\n <div style=\"display:flex\">\n <p style=\"flex:3\">Creature Fear Penalty (Positive Number): </p>\n <input type=\"number\" id=\"fearPenalty\" value=0 style=\"flex:1\"/>\n </div> \n `,\n buttons: {\n roll: {\n label: \"Roll\",\n callback: (html) => {\n let mod = html.find(\"#fearPenalty\")[0].value;\n console.log(mod)\n fearTable.draw({roll:new Roll(`1d20 + ${mod}`)})\n }\n }, \n cancel: {\n label: \"Cancel\"\n }\n }\n }).render(true)\n}","author":"goVuB7uyVDPjAwfj","img":"systems/swade/assets/icons/status/status_frightened.svg","actorIds":[],"_id":"Ry6NLK24QaSVA1dM"}
{"name":"#[CF_tempEntity]","permission":{"default":0,"goVuB7uyVDPjAwfj":3},"type":"chat","flags":{"cf":{"id":"temp_pswasgs6ygg","folderPath":[],"color":"#000000","fontColor":"#FFFFFF","name":"States","children":[],"icon":""}},"scope":"global","command":"","author":"goVuB7uyVDPjAwfj","img":"icons/svg/dice-target.svg","actorIds":[],"_id":"T7HZINkdw1Z6u1Fc"}
{"name":"#[CF_tempEntity]","permission":{"default":0,"mrhsZpAiXth4sLah":3},"type":"chat","flags":{"cf":{"id":"temp_natl1zonf8","folderPath":[],"color":"#000000","fontColor":"#FFFFFF","name":"Cards","children":[],"icon":""}},"scope":"global","command":"","author":"mrhsZpAiXth4sLah","img":"icons/svg/dice-target.svg","actorIds":[],"_id":"hnicuEhZlfMF2upA"}