diff --git a/modules/loadScripts.js b/modules/loadScripts.js index 651049a..75e11c6 100644 --- a/modules/loadScripts.js +++ b/modules/loadScripts.js @@ -1,5 +1,4 @@ export default function() { - mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\r\n// takes 3 Poisoned Conditions that cannot be resisted at first,\r\nawait this.actor.addCondition(\"poisoned\", 3)\r\n\r\n// recovers a number of Wounds equal to their Toughness Bonus, \r\nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n\r\n// and acquires the Regenerate Creature Trait.\r\nconst hasRegenerate = this.actor.has(\"Regenerieren\")\r\nif (hasRegenerate === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\r\n let traitItem = trait.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n}\r\n\r\nthis.script.scriptMessage(`
${this.actor.prototypeToken.name} hat:\r\n
Wenn alle Vergifteten Zustände beendet sind, geht auch die Eigenschaft Regenerieren verloren.
`,\r\n\r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\r\n{\r\n args.fields.modifier += 10;\r\n args.flags.quietenedApplied = true\r\n}","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\n\r\nlet data1 = item1.toObject();\r\ndata1.system.location.key = this.item.system.location.key\r\n\r\nlet data2 = item2.toObject();\r\ndata2.system.location.key = this.item.system.location.key\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\r\n","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\r\n\r\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\r\n\r\nif (text == \"GM's Choice\")\r\n{\r\n return this.script.scriptNotification(text)\r\n}\r\n\r\nif (spellsWithLore.length > 0)\r\n{\r\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\r\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\n this.script.scriptNotification(selectedSpell.name);\r\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\r\n}\r\nelse\r\n{\r\n ui.notifications.notify(`Could not find ${lore} spell. Try Again`)\r\n}","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\r\n{\r\n\targs.test.result.other.push(`${this.effect.name}: Automatic Failure`)\r\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\r\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\r\nlet data = item.toObject();\r\ndata.system.specification.value = fixation.result;\r\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\")\r\n }\r\n})\r\n","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\r\nif (!table)\r\n{\r\n\treturn ui.notifications.error(\"Mutation table not found, please ensure a table with the `mutatephys` key is imported in the world.\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\r\n{\r\n args.flags.strikeToStun = true\r\n args.fields.modifier += 20;\r\n args.fields.hitLocation = \"head\";\r\n}\r\nargs.fields.successBonus++;","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\r\n{\r\n\treturn true;\r\n}\r\nelse \r\n{\r\n\targs.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says \"any gossip test can be reversed\" so check it here instead of submission\r\n}\r\n ","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\r\n\r\nif ([\"fire\", \"electricity\", \"poison\"].includes(type))\r\n{\r\n args.applyAP = false;\r\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\r\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\r\nthis.effect.update({\"disabled\": state});\r\n\r\nif (state)\r\n return ui.notifications.info(\"EFFECT.CreatureBackInWater\", {localize: true})\r\n\r\nreturn ui.notifications.info(\"EFFECT.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let terrain = name.split(\"(\")[1].split(\")\")[0]\r\n tests = tests.replace(\"the Terrain\", terrain)\r\n }\r\n else // If no sense specified, provide dialog choice\r\n {\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n coastal : \"Coastal\",\r\n deserts : \"Deserts\",\r\n marshes : \"Marshes\",\r\n rocky : \"Rocky\",\r\n tundra : \"Tundra\",\r\n woodlands : \"Woodlands\"\r\n }, this.item.img), 1, \"Choose Terrain\");\r\n if (choice[0])\r\n {\r\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\r\n tests = tests.replace(\"the Terrain\", choice[0].name + \" Terrain\")\r\n }\r\n }\r\n\r\n this.effect.updateSource({name})\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 5,\r\n \"s\" : 5,\r\n \"t\" : 0,\r\n \"i\" : 5,\r\n \"ag\" : 5,\r\n \"dex\" : 5,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n\r\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n","1CeYp5MlPcH68UIw":"let characteristics = {\r\n \"ws\" : 15,\r\n \"bs\" : 10,\r\n \"s\" : 10,\r\n \"t\" : 15,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Intimidate\", \"Commandement\" , \"Perception\"]\r\nlet skillAdvancements = [10, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Drilled\", \"Menaçant\", \"Robust\"]\r\nlet trappings = [\"Arme simple\", \"Mail Coat\", \"Mail Chausses\"]\r\nlet specialItems = [ \r\n] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\r\nthis.actor.modifyWounds(healed)\r\nthis.script.scriptMessage(`Healed ${healed} Wounds`)","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\r\n\r\nlet loc = \"body\"\r\n\r\nlet APatLoc = this.actor.system.status.armour[loc];\r\n\r\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\r\n\r\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n\r\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\r\n\r\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\nmsg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\nthis.script.scriptMessage(msg)\r\n\r\nlet test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n\tthis.actor.addCondition(\"stunned\");","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\r\n let data = item.toObject();\r\n if (this.item.system.location.key == \"rLeg\")\r\n {\r\n data.system.location.value = \"Right Toe\"\r\n\tdata.system.location.key = \"rToe\";\r\n }\r\n else if (this.item.system.location.key == \"lLeg\")\r\n {\r\n data.system.location.value = \"Left Toe\"\r\n\tdata.system.location.key = \"lToe\";\r\n }\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}\r\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1LDSzXeO5CzXgTOc":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) || args.skill?.name == `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\r\nawait test.roll()\r\nif (test.succeeded)\r\n{\r\n this.effect.delete();\r\n}\r\n","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\", 3)\r\n }\r\n})","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n}\r\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\r\n args.data.damage -= 1","1wKVvxRTHOyV4Qdv":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Sail\"))","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choose Location\");\r\n\r\nlet location = choice[0].id;\r\n\r\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\r\n\r\nif (itemTargeted)\r\n{\r\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\r\n}","1yOvw74jzFfaI87b":"return args.options.reload\r\n","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gained a Stunned Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}\r\n\r\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\r\n{\r\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\r\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\r\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\r\nargs.item.system.damage.value += `+${sl}`;","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\r\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\r\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Armour value\", this.effect.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\r\n\treturn true;\r\n\r\nif (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\r\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\r\n ui.notifications.notify(`${this.effect.name}: Gained ${this.item.Advances} Advantage`)\r\n this.actor.setAdvantage(this.item.Advances)\r\n }\r\n}","2sDH6RvoOAR40oqH":"\r\n\r\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\r\n await test.roll();\r\n if (test.failed) {\r\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\r\n }\r\n}\r\n\r\n// Since wounds change when the effect is deleted, need to wait until after \r\n// the max wounds have been recalculated to apply damage\r\ngame.wfrp4e.utility.sleep(1000).then(async () => {\r\n let roll = await new Roll(\"1d10\").roll();\r\n\r\n roll.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\r\n\r\n})","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\r\n {\r\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\r\n }\r\n} ","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\r\nif (!currentCareer)\r\n{\r\n return;\r\n}\r\n\r\nlet talents = [\"Aethyric Attunement\",\r\n\"Arcane Magic (Any)\",\r\n\"Chaos Magic (Tzeentch)\",\r\n\"Fast Hands\",\r\n\"Instinctive Diction\",\r\n\"Magical Sense\",\r\n\"Petty Magic\",\r\n\"Second Sight\",\r\n\"War Wizard\",\r\n\"Witch!\"].filter(t => !currentCareer.system.talents.includes(t))\r\n\r\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2W9uMTT6iJhfQ044":"let skill = `Trade (${this.item.parenthesesText})`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet craftsmanAdded = this.actor.getFlag(\"wfrp4e\", \"craftsmanAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\tcraftsmanAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.craftsmanAdded\", craftsmanAdded)\r\n}","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\r\n{\r\n args.bleedingHand = true;\r\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\r\n if (!success)\r\n {\r\n args.abort = true;\r\n }\r\n}","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name = data.name += \" (Hearing)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\r\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\r\nif (wounds.value == 0)\r\n return this.script.scriptNotification(\"No effect at 0 Wounds\", \"error\")\r\n\r\nthis.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\r\n}","33US8YRgaMqYu2We":"return !args.options.handling","37UN17gb8suFeZIW":"this.script.scriptMessage(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\r\nargs.actor.system.details.price.gc *= 1.1;","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","3eSaX0BeaUalNkEP":"return args.options.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3hfMQkUKYI4rCuBy":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\r\nif (fatigue)\r\n{\r\n this.script.scriptNotification(\"Removing Fatigued Condition, disabled effect\")\r\n this.effect.update({disabled : true})\r\n await this.actor.removeCondition(\"fatigued\")\r\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choose Location\");\r\nif (choice[0])\r\n{\r\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\r\n}\r\n\r\nlet location = choice[0].id;\r\n\r\nif ([\"lArm\", \"rArm\"].includes(location))\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nif (location == \"body\")\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"prone\");\r\n }\r\n}\r\n\r\nif (location == \"head\")\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\");\r\n }\r\n}","3jm0NoYpgB6ZuUSl":"args.options.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.scriptMessage(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\nthis.actor.addCondition(\"ablaze\");","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\r\n}\r\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\r\nawait args.actor.addCondition(\"prone\")","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\r\n\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\r\n\r\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\r\n{\r\n args.item.qualities.value.push({name : \"penetrating\"})\r\n args.item.qualities.value.push({name : \"impale\"})\r\n}","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\r\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\r\nif (smoothing)\r\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\r\n this.script.scriptMessage(`${this.actor.name} lost 1 point of ${game.wfrp4e.config.characteristics[char]}`)\r\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\r\n }\r\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\r\n \"ws\" : 25,\r\n \"bs\" : 10,\r\n \"s\" : 15,\r\n \"t\" : 15,\r\n \"i\" : 25,\r\n \"ag\" : 20,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 25,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","4OlwxU60UqKg81yb":"const target = args.actor;\r\n\r\nif (target.has(\"Ethereal\") || target.has(\"Corruption\")) {\r\n args.totalWoundLoss += 6;\r\n args.modifiers.other.push({label: this.effect.name, value: 6})\r\n}","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4pQW4WLyhjbZR85k":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += 5;\r\n args.modifiers.other.push({label : this.effect.name, value : 5})\r\n }\r\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\r\nawait args.actor.addCondition(\"entangled\")","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"bleeding\");\r\n}\r\n","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \r\n this.effect.delete();","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4ZR7p8G3OzOBWx0L":"return args.skill?.name !== game.i18n.localize(\"NAME.Endurance\");","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\r\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","52mwb33mGrQjq89B":"return args.skill?.name != game.i18n.localize(\"NAME.Research\");","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\r\nlet damage = args.totalWoundLoss;\r\nlet tb = sourceActor.system.characteristics.t.bonus\r\nargs.abort = `${this.effect.name}: Damage applied to ${sourceActor.name}`;\r\n\r\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\r\n\r\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\r\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\r\n this.script.scriptMessage(`Fortune point stolen from ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n}","5dR7Erj3nwsxLAV7":"let characteristics = {\r\n \"ws\" : 35,\r\n \"bs\" : 10,\r\n \"s\" : 25,\r\n \"t\" : 30,\r\n \"i\" : 30,\r\n \"ag\" : 25,\r\n \"dex\" : 0,\r\n \"int\" : 15,\r\n \"wp\" : 35,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Luck\", \"Resolute\", \"Unshakable\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5Fe1ELaS6Gnvy0Cj":"return args.skill?.name.includes(\"Channelling\") || args.type == \"channelling\" || args.skill?.name == game.i18n.localize(\"NAME.Charm\") || args.skill?.name.includes(\"Language (Magick)\") || args.type == \"cast\"","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JvKJZPcd6Hz5zvn":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 20,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 15,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Leadership\"]\r\nlet skillAdvancements = [15, 15, 10, 5]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\r\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = this.effect.name + \" \" + updateObj.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5JWC0l3JEpOsqbR9":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Dodge\", \"Perception\"]\r\nlet skillAdvancements = [10, 10]\r\nlet talents = [\"Flee!\", \"Marksman\"]\r\nlet trappings = [\"Hand Weapon\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.successBonus += 1\r\n}\r\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.modifier -= 10;\r\n}","5LdJCKfQem1AQK24":"\r\nif (!args.flags.howlingWarpGale)\r\n{\r\n args.fields.modifier -= 10;\r\n args.flags.howlingWarpGale = true; // prevent double application\r\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += ` (Followers of Tzeentch)`;\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\nanimosity.system.specification.value = \"Followers of Nurgle\";\r\n\r\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nlet mutations = [];\r\nlet msg = `Mutations Gained
`\r\nfor(let i = 0; i < roll.total; i++)\r\n{\r\n let item;\r\n let uuid;\r\n let result;\r\n if (i % 2 == 0)\r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n else \r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n msg += `@UUID[${uuid}]{${item.name}}
`\r\n mutations.push(item.toObject());\r\n }\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\r\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5ScjIdRUOxblHdWS":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","5sI9iYh5j2nx2XyT":"return !([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\n\r\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\r\nlet selectedCrew = [];\r\n\r\nwhile (selectedCrew.length < rating && crewList.length) {\r\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\r\n} \r\n\r\nfor (let member of selectedCrew) {\r\n let actor = game.actors.get(member.id);\r\n actor.applyBasicDamage(9, {\r\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \r\n minimumOne: true, \r\n loc: \"roll\", \r\n suppressMsg: false, \r\n hideDSN: false \r\n });\r\n}","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\r\n\r\nif (!visor)\r\n args.fields.modifier -= 10;\r\nelse\r\n args.fields.modifier -= 20;","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\r\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\r\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasColdBlooded = this.actor.has(\"Cold Blooded\")\r\nif (hasColdBlooded === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Cold Blooded Creature Trait and may reverse any failed Willpower based Tests.
\r\nIf they gain a Surprised Condition, this Condition is not lost the first time it should be (which is typically at the end of the Round or if they victim is attacked).
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Use Ward provided by ${this.effect.name}?`,\r\n\tbuttons : {\r\n\t\tyes : {\r\n\t\t\tlabel : \"Yes\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tno : {\r\n\t\t\tlabel: \"No\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n})\r\n\r\nif (useWard)\r\n\targs.ward = 9;","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\r\n{\r\n await this.actor.modifyAdvantage(-2);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.effect.delete();\r\n}","6oSs8qKFNFz2lSmh":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value = 0;\r\n","6qJP0hpShEM43ohx":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Oceans)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Oceans)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lure of the Leviathan.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became @Condition[Stunned] by the sight.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"stunned\");\r\n}","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Regenerate')\r\n\r\nif (regenerate)\r\n{\r\n let effect = regenerate.effects.contents[0]\r\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\r\n \r\n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\r\n}","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"ablaze\")","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nitem = item.toObject()\r\n\r\nitem.system.specification.value = 10;\r\nitem.name += \" (Fire)\"\r\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\r\n\r\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Spellcasting Lore\", this.effect.name, \"\", Object.values(game.wfrp4e.config.magicLores));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\r\n{\r\n\tthis.script.scriptNotification(\"Cannot update Fortune\");\r\n\tdelete args.data.system.status.wounds.value;\r\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n}\r\nelse if (args.test.isFumble && roll != 1)\r\n{\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n}\r\n\r\n","715G1Bf0haOHvmYQ":"return !(args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")))","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7ateEtT5HXg1vObY":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\r\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","7e8FgQUF2oANANmx":"return args.skill?.name == \"Melee (Brawling)\" || args.item?.weaponGroup?.value == \"brawling\"","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\r\n{\r\n ValueDialog.create(\"Enter Wounds Lost to gain SL\", this.effect.name, \"0\").then(async value => {\r\n value = Math.clamped(value, 0, 3)\r\n if (value == 0)\r\n {\r\n return; \r\n }\r\n else if (Number.isNumeric(value))\r\n {\r\n this.script.scriptNotification(`Lost ${value} Wounds`)\r\n this.actor.modifyWounds(-1 * value)\r\n await this.item.system.toggleEquip();\r\n args.test.addSL(value);\r\n args.test.preData.other.push(`${this.effect.name}: +${value} SL`)\r\n }\r\n })\r\n}","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\r\n args.prefillModifiers.modifier += 10; \r\n\r\n\r\nargs.prefillModifiers.successBonus += 1; \r\n","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) \r\n{ \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7OmrMjaU48o2FEZi":"\r\nthis.actor.characteristics.t.bonus = 10\r\n\r\nthis.actor.details.move.value = 0;\r\nthis.actor.details.move.walk= 0;\r\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"fatigued\")\r\n} ","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\r\nlet match = result.text.match(/b>([^<]+)/i);\r\nlet key = match[1];\r\nlet roll = new Roll(\"5d10\");\r\nlet value = undefined;\r\n\r\nawait this.script.scriptMessage(result.text, {flavor: result.title});\r\n\r\nswitch (key) {\r\n case 'Stromfels Triumphant!':\r\n value = 0;\r\n break;\r\n case 'Stromfels Ascends!':\r\n await roll.evaluate();\r\n if (this.actor.system.status.mood.value > 0)\r\n value = -roll.total;\r\n else if (this.actor.system.status.mood.value < 0)\r\n value = roll.total;\r\n break;\r\n case 'No effect.':\r\n break;\r\n case 'Manann Provoked!':\r\n await roll.evaluate();\r\n value = -roll.total;\r\n break;\r\n}\r\n\r\nif (roll._evaluated)\r\n await roll.toMessage();\r\n\r\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasPainless = this.actor.has(\"Painless\");\r\nif (hasPainless === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(\r\n `
${this.actor.prototypeToken.name} has gained the Painless Creature Trait. This\r\n effect lasts for one hour, after which it dissipates and the full effect\r\n of all the imbiber's wounds come crashing down at once.
\r\nNote that this does not prevent the user from acquiring a Critical\r\n Wound or dying from one. It merely allows them to ignore most\r\n of their effects.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\r\n}","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptNotification(`Removed ${poisoned.conditionValue} Poisoned Conditions`)\r\n poisoned.delete(); \r\n}\r\nelse\r\n this.script.scriptNotification(`No Poisoned Conditions`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Claimed ${this.effect.name} Bonus`);","84IB8CWa55XzoAkv":"return ([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","86ivOsBQAuu0UmFg":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\");\r\n}","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\r\n\r\nif (APIgnored)\r\n{\r\n args.modifiers.ap.ignored += APIgnored\r\n args.modifiers.ap.details.push(`${this.effect.name}: Ignore AP with Weakpoints (${APIgnored})`)\r\n}","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\nif (!this.actor.has(\"Undead\") && !this.actor.has(\"Daemonic\")) \r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), { appendTitle: \" - \" + this.effect.name, fields: { difficulty: \"average\" }, context: { failure: `Lost ${strLoss} Strength and ${tghLoss} Toughness` } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n this.actor.update({ \"system.characteristics.s.initial\": this.actor.system.characteristics.s.initial - strLoss, \"system.characteristics.t.initial\": this.actor.system.characteristics.t.initial - tghLoss })\r\n }\r\n })\r\n\r\n}\r\nelse {\r\n this.script.scriptNotification(`${this.actor.name} is immune to ${this.effect.name}`)\r\n}\r\n","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\r\nlet types = {\r\n none : \"None\",\r\n cold : \"Cold\",\r\n corrosion : \"Corrosion\",\r\n fire : \"Fire\",\r\n electricity : \"Electricity\",\r\n poison : \"Poison\",\r\n smoke : \"Smoke\",\r\n various : \"Various\"\r\n}\r\nif (!type)\r\n{\r\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choose Breath\"))[0]?.id;\r\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\r\n}\r\n\r\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\r\n{\r\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\r\n}","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier += 10;\r\n}\r\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier -= 10;\r\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8N3Uqjq1ZxPxo4pk":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Lore\"))","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\r\nargs.item.system.qualities.value.push({name : \"impact\"})\r\n","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\r\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\r\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\r\nif (caster)\r\n{\r\n let healed= caster.characteristics.wp.bonus\r\n this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","8TRiAJ8thIKE4IoL":"\r\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\r\n\r\nargs.actor.characteristics.i.modifier += 10 * SL\r\nargs.actor.characteristics.ag.modifier += 10 * SL","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\r\n\r\nif (weakpointsAP > 0)\r\n{\r\n args.modifiers.ap.ignored += weakpointsAP;\r\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore Weakpoints (${weakpointsAP})`);\r\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Range)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\r\n }\r\n}","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\r\nitem.system.specification.value = 1;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8xqYrBIf1Zhlwizg":"const repaired_message = `Finished raisint the anchor.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'vhard';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\r\nthis.actor.characteristics.int.value= \"-\"\r\nthis.actor.characteristics.wp.value= \"-\"\r\nthis.actor.characteristics.fel.value = \"-\"","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n this.actor.addCondition(\"stunned\") \r\n}\r\nelse if (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\", 2);\r\n}","8zTkDVziBPaNbMQX":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, \"Choose 6 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, \"Choose 9 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\r\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\r\n return\r\n\r\nif (args.test.characteristicKey == \"wp\")\r\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\r\n let data = item.toObject();\r\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\r\n data.system.description.value += \"This Talent also extends to any metal object because of Metallic Affinity
\"\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n})","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptNotification(\"Gained a Festering Wound\")\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Avoided a Festering Wound\")\r\n}\r\n","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\r\nargs.actor.system.details.price.gc *= 1.1;","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name += ` (Smell)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\r\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.name += ` (When Charging)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\r\n\tthis.script.scriptNotification(\"Applied after effects\");\r\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.name += \" (No AP)\"\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\r\n","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"\", true);\r\ncareers.forEach(c => {\r\n if (!c.id)\r\n {\r\n c.id = c._id;\r\n }\r\n});\r\nlet choice = await ItemDialog.create(careers, 1, \"Choose Double Life Career\");\r\nif (choice[0])\r\n{\r\n let career = await fromUuid(choice[0].uuid);\r\n let data = career.toObject();\r\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\r\n}\r\n","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\r\n{\r\n this.script.scriptMessage(`Gained ${Math.abs(args.test.result.SL)} Corruption points`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (args.test.failed && this.actor.type == \"character\")\r\n {\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\r\n }\r\n}","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","A1odAcuRbq9797ZB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Polearm)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nApply damage with ${this.effect.name} to attacker?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\r\n }\r\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\r\n{\r\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\r\n\tif (args.wardRoll >= args.ward && args.ward > 3)\r\n {\r\n let newWard = Math.max(3, args.ward - 1)\r\n this.script.scriptMessage(\"Ward improved to \" + newWard)\r\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\r\n }\r\n\r\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n\r\n\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\r\n\r\nlet lostFingers = this.actor.flags.useless[key] || 0;\r\n\r\nlostFingers += 1\r\n\r\nthis.actor.flags.useless[key] = lostFingers;\r\n\r\nif (lostFingers >= 4)\r\n{\r\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\r\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\r\n{\r\n if (effect.isCondition)\r\n {\r\n effect.delete();\r\n }\r\n}","cqYgZQk1C3kMARy5":"return args.skill?.name !== game.i18n.localize(\"NAME.Haggle\");","CS6O7UUjQcUJoOUP":"if (args.test.failed)\r\n {\r\n let SL = Number(args.test.result.SL)\r\n if (SL <= -2 && SL > -4)\r\n this.actor.addCondition(\"stunned\")\r\n else if (SL <= -4 && SL > -6)\r\n this.script.scriptMessage(this.actor.prototypeToken.name + \" must make a Willpower Test or fall @Condition[Prone].\")\r\n else if (SL <= -6)\r\n this.actor.addCondition(\"unconscious\")\r\n }","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cTYNaKbepMwqYsZ8":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\r\n\r\nthis.actor.system.characteristics.s.modifier += sl * 10;\r\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\r\nlet data = item.toObject();\r\n\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tgroup = this.item.parenthesesText\r\n}\r\n\r\nelse \r\n{\r\n\tgroup = await ValueDialog.create(\"Enter Hatred Group\", \"Hatred Group\")\r\n\r\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\r\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\r\n}\r\n\r\n\r\ndata.name = data.name.replace(\"Target\", group);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cV9JiAgUPOeUHKnS":"args.fields.successBonus++;\r\nif (args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\"))\r\n{\r\n args.fields.modifier += 10;\r\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.actor.modifyAdvantage(-3);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Moderate Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(`${this.effect.name}: \r\n @Corruption[moderate]{Moderate Exposure to Corruption}
\r\n ${args.actor.prototypeToken.name} must take an \r\n Corruption (Moderate) Test`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value -=2\r\n if (args.item.cn.value < 0)\r\n args.item.cn.value = 0\r\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\r\nthis.actor.characteristics.i.bonus = 1;\r\n\r\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\r\n{\r\n skill.system.total.value= Math.min(skill.system.total.value, 10)\r\n}","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\r\n\r\n","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dAMtbn3uQwF8KpKU":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\");","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\r\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\r\nconsole.log(this.actor);\r\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\r\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\n\r\nsense.name += \" (Sight)\";\r\nsense.system.tests.value = sense.system.tests.value.replace(\"Sense\", \"Sight\")\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\r\n}","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\r\n\r\nthis.actor.update({\"system.status.fate.value\" : current + 1})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`)","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","dfEgat3jz4EtWszH":"return args.skill?.name == \"Stealth (Urban)\"","dfnCK8jCPXNLM7Gh":"let aoeDamage = this.effect.sourceTest.result.damage - 5 // Easily handle magic missile damage by just subtracting 5 from the item's (which has +10 base)\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - Ablaze`})\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Trade (Apothecary)\" || args.skill?.name == \"Trade (Alchemist)\"","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\r\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","dIxYt421K010eogY":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.ag.value\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\r\n{\r\n return\r\n}\r\n\r\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\ntooth = tooth.toObject()\r\ntooth.system.specification.value = 3\r\ntooth.system.qualities.value = [{name : \"magical\"}]\r\n \r\nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nclaw = claw.toObject()\r\nclaw.system.specification.value = 4\r\nclaw.system.qualities.value = [{name : \"magical\"}]\r\nclaw.name = \"Claw\"\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n args.abort = \"Missed - Headless\"\r\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Ribs\";\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create(\"Select the column to roll on to determine Beast Head\", \"Select Column\", \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\r\n\r\nif (column)\r\n{\r\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\r\n this.script.scriptMessage(`${result.title}
${result.result}`);\r\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n let item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n this.item.delete();\r\n }\r\n}","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\r\n{\r\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\r\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"blinded\");\r\n await this.actor.addCondition(\"fatigued\")\r\n} ","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dsXGavzXLerXR8Xg":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\"))","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\r\n args.fields.slBonus += 2;\r\nelse\r\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","dULCkRxtisuzQyuK":"if (args.options.condition) \r\n this.effect.delete();","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athletics\"","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \r\n{\r\n\tlet roll = await new Roll(\"1d10\").roll()\r\n\tawait roll.toMessage(this.script.getChatData());\r\n\tif (roll.total == 9 || roll.total == 10)\r\n\t{\r\n\t this.script.scriptMessage(`${this.actor.name} attached to ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} gorges and falls off.`)\r\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \r\n\t}\r\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\r\n\r\nthis.item.updateSource({\"system.location.key\" : letter + \"Finger\"})\r\n\r\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\r\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\r\n let days = new Roll(injury.system.duration.value).roll( {async: false} ).total\r\n let num = 1 + Number(this.effect.sourceTest.result.SL);\r\n let roll = await new Roll(num+'d10').roll({async: false})\r\n await roll.toMessage(this.script.getChatData())\r\n let newDays = Math.max(days - roll.total, 1)\r\n this.actor.updateEmbeddedDocuments(\"Item\", [{_id: injury.id, 'system.duration.value': newDays} ])\r\n let message = \"Injury reduces to \"+newDays+\" (-\" + roll.total + \") instead of \"+days\r\n this.script.scriptMessage(message)\r\n}\r\n","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Melee (Brawling)\" && args.item?.weaponGroup?.value != \"brawling\"","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n await this.actor.addCondition(\"broken\");\r\n}","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\r\n}","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\r\n args.actor.addCondition(\"unconscious\");\r\n}","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\r\n\r\nawait args.actor.addCondition(\"ablaze\", 2);\r\nawait args.actor.addCondition(\"prone\");","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\r\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\r\n\r\nif (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.script.scriptNotification(`Adding ${frenzy.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\r\n}\r\nelse if (this.actor.system.status.advantage.value >= 1)\r\n{\r\n let data = hatred.toObject();\r\n data.system.specification.value = \"Close Combat opponents\"\r\n this.script.scriptNotification(`Adding ${hatred.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\r\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\r\n{\r\n blinded.delete()\r\n}","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`)\r\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n fatigued.delete();\r\n this.script.scriptNotification(\"Removed Fatigued\")\r\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\n\r\nawait test.roll();","E6v4YZrvFikbdXoO":"const locations = [];\r\n\r\nfor (let [key, loc] of Object.entries(args.AP)) {\r\n if (loc.layers?.some(i => i.metal))\r\n locations.push(key);\r\n}\r\n\r\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`)\r\n}","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (this.item.system.location.key == \"rArm\")\r\n{\r\n\tdata.system.location.value = \"Right Hand\"\r\n\tdata.system.location.key = \"rHand\"\r\n}\r\nelse if (this.item.system.location.key == \"lArm\")\r\n{\r\n\tdata.system.location.value = \"Left Hand\"\r\n\tdata.system.location.key = \"lHand\"\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","EBNrA6FNX4d05EUx":"return !args.options.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Riverways)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Riverways)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lures of Lurkerfish.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became beguiled by the sight and unable to perform any action except moving towards the light.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"unconscious\");\r\n}","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Yield or die!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.script.scriptNotification(\"Adding \" + data.name);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\r\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","EDAMEOzdBfkoKHxP":"return args.skill?.name !== game.i18n.localize(\"NAME.Navigation\");","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.script.scriptMessage(\"Can perform an Action or Move (choose one)\")\r\n}\r\nelse \r\n{\r\n this.script.scriptMessage(\"Cannot perform an Action or Move this round\") \r\n}","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\r\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\r\nif (trait && trait.name.includes(\"Bite\") && woundLossEffect)\r\n{\r\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\r\n}","eGQAyzCFZAEQhyJl":"const roll = new Roll(\"2d10\");\r\nawait roll.evaluate();\r\nconst money = game.wfrp4e.market.addMoneyTo(this.actor, `${roll.total}b`);\r\nawait this.actor.updateEmbeddedDocuments(\"Item\", money);\r\nthis.script.message(game.i18n.format(\"SCRIPT.Silvertide\", {name: this.actor.name, pennies: roll.total}));","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\r\nlet data = item.toObject();\r\ndata.name += \" (Enemy)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\r\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\r\nlet data = item.toObject();\r\ndata.name += \" (To Be Determined)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\r\n{\r\n this.script.scriptNotification(\"Adding Prone\");\r\n this.actor.addCondition(\"prone\")\r\n}","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\r\nuses++;\r\nthis.script.scriptNotification(`Used ${uses} times`)\r\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\r\nif (uses >= 3)\r\n{\r\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\r\n\tthis.script.scriptNotification(`Used up`);\r\n}\r\n","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\r\nthis.script.scriptMessage(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`)\r\n\r\nthis.actor.hasCondition(\"bleeding\")?.delete()\r\nthis.actor.hasCondition(\"fatigued\")?.delete()\r\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ePPgxQOqL1Uhz2k9":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Bow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `
\r\n Add Option?\r\n
\r\nFinished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\r\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\r\n let wp = caster.system.characteristics.wp.value\r\n if (wp > this.actor.system.characteristics.t.value) {\r\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\r\n this.actor.update({ \"system.status.wounds.value\": 0 })\r\n this.actor.addCondition(\"dead\")\r\n }\r\n else {\r\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\r\n ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\r\n })\r\n }\r\n }\r\n}","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Entertain (Singing)\";","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.name = this.effect.name;\r\ndata.type = 'trapping';\r\ndata.system.trappingType = {value: 'clothingAccessories'};\r\ndata.system.equipped = {value: true};\r\n\r\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\r\neffectData.disabled = false;\r\neffectData.system.transferData.equipTransfer = true;\r\ndata.effects = [effectData];\r\n\r\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Ride (Horse)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 0,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Consume Alcohol\", \"Row\", \"Sail\", \"Swim\"]\r\n let skillAdvancements = [10, 10, 10, 10]\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","FYUPfYyTYZkxRLFT":"return ![\"NAME.Endurance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\r\nawait roll.toMessage(this.script.getChatData());\r\nthis.script.scriptNotification(`Healed ${roll.total} Wounds`)\r\nthis.actor.corruptionDialog(\"moderate\")\r\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\r\nawait test.roll()\r\n// If they fail, they acquire 2 Poisoned Conditions. \r\nif (test.failed) \r\n{\r\n this.actor.addCondition(\"poisoned\", 2)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained 2 @Condition[Poisoned] Conditions.
\r\nAny being with the Bestial Creature Trait that bites them and takes damage will not bite them again during a hostile encounter, though the creature may still attack them in other ways.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\r\nelse if (test.succeeded) \r\n{\r\n // Don't attempt to add Corrosive Blood if actor already has it\r\n const hasCorrosiveBlood = this.actor.has(\"Corrosive Blood\")\r\n if (hasCorrosiveBlood !== undefined) return \r\n\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n const duration = 3 + parseInt(test.result.SL)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} gains the Corrosive Blood Trait for ${duration} rounds.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Social Group)\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let group = name.split(\"(\")[1].split(\")\")[0]\r\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\r\n }\r\n else if (!name.includes(\"(\"))\r\n {\r\n let value = await ValueDialog.create(\"Enter Etiquette Group\", this.effect.name);\r\n if (value)\r\n {\r\n name = this.item.name + ` (${value})`;\r\n tests = this.item.system.tests.value.replace(\"Social Group\", value);\r\n }\r\n }\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \r\n// of the target point is splashed with mystic poison, \r\n// suffering 1d10 + SL damage which ignores Armour Points\r\n\r\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\r\n\r\nawait damage.toMessage(this.script.getChatData())\r\n\r\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\r\n damage.total,\r\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\r\n))\r\n\r\n// ... and gains the Poisoned Condition\r\n\r\nthis.actor.addCondition(\"poisoned\")","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\r\nargs.actor.addCondition(\"ablaze\", ablaze)","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\r\n amberTalons.name = \"Amber Talons\";\r\n amberTalons.img = this.effect.img;\r\n amberTalons.system.damage.value = \"SB + WPB\"\r\n amberTalons.system.equipped = true;\r\n amberTalons.system.qualities.value.push({name : \"magical\"})\r\n amberTalons.effects.push({\r\n label : \"Amber Talons\",\r\n transfer: false,\r\n icon : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\r\n flags : {\r\n wfrp4e : {\r\n applicationData : {\r\n documentType : \"Item\"\r\n },\r\n scriptData : [{\r\n trigger : \"applyDamage\",\r\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\r\n }]\r\n }\r\n }\r\n })\r\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[1].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\r\n{\r\n \r\n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\r\n{\r\n\targs.fields.lostHand = true;\r\n\targs.fields.modifier += -20;\r\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","GbPEy22VuCNzlNv2":"return !this.actor.isMounted || (!args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) && !args.options.dodge)","Gc8S5TYlVdV8NnOT":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, context: { failure: \"Gained a Broken Condition\", success: \"Resisted the Broken Condition\" } })\r\n\r\n await test.roll();\r\n\r\n if (!test.succeeded)\r\n {\r\n args.actor.addCondition(\"broken\");\r\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\r\n{\r\n let removeRepeater = false\r\n if(!this.item.system.offhand.value) // main\r\n {\r\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\r\n if (offhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n else // offhand\r\n {\r\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\r\n if (mainhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n \r\n if (removeRepeater)\r\n {\r\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\r\n }\r\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\r\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\r\nawait test.roll();\r\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n this.actor.addCondition(\"fatigued\") \r\n })\r\n}","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\r\n args.actor.addCondition(\"ablaze\")","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\r\n\r\neffects.splice(effects.length - 1);\r\n\r\nif (effects.length == 0)\r\n{\r\n return this.script.scriptNotification(\"All Effects have been used. Reset to select them again\")\r\n}\r\nlet choice = await ItemDialog.create(effects, 1, \"Choose Power to Gain\");\r\n\r\nif (choice[0])\r\n{\r\n choice[0].update({disabled : true})\r\n let effect = choice[0].convertToApplied();\r\n effect.name += ` (${this.effect.name})`\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\r\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\r\n{\r\n e.update({disabled: false})\r\n}\r\nthis.script.scriptNotification(\"Reset Powers\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Stealth (Underground)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Venom Strength\", this.effect.name, \"\", Object.values(game.wfrp4e.config.difficultyNames));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\r\n{\r\n args.item.system.AP.head = 0;\r\n}","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\r\n{\r\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\r\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\r\n\r\nif (value === 0)\r\n args.actor.system.status.mood.value = 0;\r\nelse if (value !== undefined)\r\n args.actor.system.status.mood.value += value;","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData())\r\n if (roll.total <= 3)\r\n {\r\n this.actor.addCondition(\"blinded\", 3)\r\n }\r\n else if (roll.total <= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n else if (roll.total <= 9)\r\n {\r\n this.actor.addCondition(\"stunned\");\r\n }\r\n else if (roll.total == 10)\r\n {\r\n this.actor.addConditon(\"unconscious\")\r\n }\r\n}","goz8yTlMozlsz3uY":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\r\n args.test.preData.canReverse = true","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","gqZLfIr6svrtdwdC":"return args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\") && args.skill?.name != game.i18n.localize(\"NAME.MeleeBrawling\") && args.weapon?.system?.weaponGroup?.value != \"brawling\"","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData());\r\n if (roll.total == 9)\r\n {\r\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\r\nif (turns <= 0) return;\r\nturns--;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\nconst target = canvas.scene.tokens.get(targetId);\r\n\r\nif (turns > 0) {\r\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\r\n\r\n return this.script.scriptMessage(`${speaker.alias} continues wrapping itself around ${target.name}. It will be able to start crushin in ${turns} turns.
`);\r\n}\r\n\r\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\r\n this.script.scriptMessage(`${speaker.alias} can resume crushing ${target.name} with the Extended Test.
`);\r\n\r\n return;\r\n}\r\n\r\nconst extendedTestData = {\r\n name: this.effect.name,\r\n type: \"extendedTest\",\r\n img: this.effect.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target.actor.system.status.wounds.value\r\n },\r\n test: {\r\n value: 'Strength'\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: \"challenging\"\r\n }\r\n }\r\n};\r\n\r\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\nconst extendedTest = extendedTests[0];\r\n\r\nthis.script.scriptMessage(`${speaker.alias} finished wrapping itself around ${target.name}. It can now begin crushing via the @UUID[${extendedTest.uuid}] Extended Test.
`);\r\n\r\nlet effect = {\r\n name: extendedTest.name,\r\n icon: extendedTest.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: extendedTest.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.effects.find(e => e.id === id);\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n this.script.scriptMessage(\\`${speaker.alias} crushed the ${target.name}. Boat shatters, reduced to a mass of flotsam.
\\`);\r\n await effect.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n}\r\n\r\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","GsAyB5xnK3ASeoah":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\r\n game.dice3d?.showForRoll(roll);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\r\n","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\r\nargs.fields.slBonus -= specification;","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Gained a Poisoned Condition\", success: \"Resisted the poison\" }})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"poisoned\");\r\n }\r\n}\r\n ","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\r\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\r\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\r\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\r\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\r\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\r\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\r\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\r\n\r\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Select Wind\")\r\n//this.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\r\n\r\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\r\n\r\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\r\nif (bleeding)\r\n{\r\n this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`)\r\n bleeding.delete(); \r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(`No Bleeding Conditions`)\r\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\r\n{\r\n args.test.options.criminal = true;\r\n let currentCareer = args.test.actor.system.currentCareer;\r\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\r\n if (coin != \"g\") // Don't roll for gold, just use standing value\r\n {\r\n dieAmount = dieAmount + \"d10\";\r\n }\r\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\r\n let moneyString = `${moneyEarned}${coin}`\r\n let transactionString = `${moneyEarned}${term}`\r\n\r\n this.script.scriptMessage(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\r\n{ \r\n args.test.result.description = \"Astounding Failure\";\r\n args.test.result.outcome = \"failure\";\r\n ChatMessage.create({content : \"SQUEAK\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\r\n}","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\r\n\r\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\r\n\r\nthis.script.scriptMessage(`Attaches to ${args.actor.name}`)","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\r\n test.roll();\r\n})","h766UvswLCsxcMow":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : -15,\r\n \"t\" : 0,\r\n \"i\" : 20,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 5,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\r\nlet skillAdvancements = [7, 60, 7]\r\nlet talents = [\"Menacing\", \"Shadow\"]\r\nlet traits = [\"Distracting\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\r\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\r\nthis.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Corruption Point Gained\" } })\r\nawait test.roll();\r\n\r\nif (test.failed && args.actor.type == \"character\") \r\n{\r\n let msg = \"\"\r\n msg += `${this.actor.prototypeToken.name} gained a Corruption point
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${args.actor.prototypeToken.name} gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}`\r\n }\r\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\r\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Flail)\")\r\n{\r\n args.item.system.modifier.value += 10;\r\n}","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\r\n\r\nwoundsGained = Math.floor(woundsGained / 2)\r\n\r\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\r\n\r\nthis.script.scriptMessage(`Gains ${woundsGained} Wounds`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n this.script.scriptMessage(`Fumble: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","HdTuY2IGhdlMDOy3":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Animal Telepathy\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \r\n// in melee combat must make an Average (+20) Endurance Test \r\n// or take a Stunned Condition\r\n\r\n\r\nif (args.totalWoundLoss > 1) {\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await args.actor.addCondition(\"stunned\");\r\n }\r\n}","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","HfZAQWoY8n3clLlo":"if (!args.itemCreated) return;\r\nif (args.itemCreated.type !== \"critical\") return;\r\nif (args.itemCreated.system.location.value.toLowerCase() !== \"head\") return;\r\nif (Number(args.itemCreated.system.wounds.value) > 0) {\r\n this.script.message(game.i18n.format(\"SCRIPT.Sallet\", {name: args.itemCreated.parent.name, wounds: args.itemCreated.system.wounds.value}))\r\n}","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : 5,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Cool\", \"Dodge\"]\r\n let skillAdvancements = [10, 10]\r\n let talents = [\"Combat Reflexes\"]\r\n let trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), game.wfrp4e.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\r\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choose a Skill\")\r\n\r\n items = items.map(i => i.toObject())\r\n items.forEach(i => i.system.advances.value = 20)\r\n\r\nitems.forEach(i => equip(i))\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.data.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.data.equipped = true\r\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\r\n item.data.worn = true\r\n}","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\r\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\r\n{\r\n\treturn;\r\n}\r\n\r\nlet index = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(index, 1, \"Choose a Lore\")\r\nlet text;\r\nif (!choice[0])\r\n{\r\n let custom = await Dialog.wait({\r\n title : \"Enter Lore\",\r\n content : \"\",\r\n buttons : {\r\n confirm : {\r\n label : game.i18n.localize(\"Confirm\"),\r\n callback : (dlg) => {\r\n return dlg.find(\"input\")[0].value\r\n }\r\n }\r\n },\r\n default : \"confirm\",\r\n close : () => {\r\n return \"\"\r\n }\r\n }) \r\n text = custom || \"\"\r\n}\r\nelse \r\n{\r\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\r\n}\r\n\r\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\r\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.\r\n Select your choice\r\n
\r\n${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ht7csu1KImHzpzL5":"return args.item?.actor?.type !== \"vehicle\" || args.item?.type !== \"weapon\" || !args.item.name.includes(\"Cannon\");","huJcVpVn6Q7sQkFC":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 1;\r\n","HUKzssLxeQo1wbx9":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n this.actor.addCondition(\"bleeding\")","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Duration)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\r\n }\r\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let damage = this.effect.sourceTest.result.damage\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n}","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\r\n{\r\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\r\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\r\n{\r\n\tgame.wfrp4e.utility.sleep(200).then(() => {\r\n\t\tthis.script.scriptMessage(\"Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location\")\r\n\r\n\t})\r\n}","HYrl5aNMm8BAdqH7":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\r\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot cast Spells or use Prayers\");\r\n}\r\nelse return true;","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","I9QAPKbaXwMMMBT4":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\r\n await secondTest.roll();\r\n if(secondTest.failed)\r\n {\r\n this.effect.updateSource({name : \"Taste of Death\"})\r\n await this.actor.addCondition(\"fatigued\");\r\n }\r\n else \r\n {\r\n return false;\r\n }\r\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.addSystemEffect(\"convulsions\")\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Symptom[Convulsions] for [[1d10]] hours`)\r\n }\r\n}","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif(test.failed)\r\n{\r\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\r\n}","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\tthis.script.scriptNotification(\"Immune to Fear\");\r\n\targs.extendedTest.delete();\r\n\targs.abort = true;\r\n}\r\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyFear(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postFear(value, name)\r\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.s.bonus\r\ndata.system.description.value = \"\"\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 1\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\r\n}","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\r\n return\r\n\r\nlet reach = args.item.reach.value\r\nlet reachNum = game.wfrp4e.config.reachNum[reach]\r\nreachNum = Math.min(reachNum + 2, 7)\r\n\r\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\r\n\r\nargs.item.reach.value = key","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\r\n// or the state of being Stinking Drunk are eliminated. \r\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\r\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\r\n\r\n// The drinker is thereafter Fatigued \r\n// for a number of hours equal to 10 minus their Toughness Bonus — \r\n// nothing but time and rest can eliminate this penalty.\r\nawait this.actor.addCondition(\"fatigued\")\r\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\r\nthis.effect.updateSource({\"duration.rounds\" : duration});\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.
`, \r\n{\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n}) ","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\r\n\r\nthis.script.scriptMessage(`this.actor.prototypeToken.name healed ${healed} Wounds`);\r\n\r\nthis.actor.modifyWounds(healed)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n let spells = this.actor.itemTypes.spell;\r\n if (spells.length)\r\n {\r\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\r\n this.script.scriptMessage(`Loses access to ${chosen.name}`)\r\n chosen.update({name : chosen.name += \" (LOST)\"})\r\n }\r\n}\r\n\r\n\r\n","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Arcane Magic (Fire)\"))\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\r\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\r\n let staunch = ~~args.test.result.SL + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 2;\r\n","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 3\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\r\n{\r\n\targs.flags.amputatedFootOrLeg= true;\r\n\targs.fields.modifier -= 20;\r\n}","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\r\n{\r\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\r\n}","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n await this.actor.addCondition(\"grappling\")\r\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\r\nfor (let i=0; iOnce they fall asleep however, it is almost impossible. At this point the victim must make a Hard (-20) Endurance Test. If they fail, they never awaken.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\r\nif (this.actor.flags.holed.reminded === true) return;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nthis.script.scriptMessage(`${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.
`);\r\n\r\nthis.actor.flags.holed.reminded = true;","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\r\n{\r\n this.actor.removeCondition(\"broken\")\r\n this.script.scriptNotification(`Cannot have Broken`);\r\n}","iT0h3VZLEBQnn5Bx":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\") && args.skill?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\");","iT3C15fMyQrj1RmG":"if (this.actor.has(\"Undead\") && this.actor.has(\"Ethereal\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n this.actor.addCondition(\"stunned\")\r\n })\r\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\r\n\r\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\r\n{\r\n return;\r\n}\r\n\r\nlet god = await ValueDialog.create(\"Enter a Deity\", \"Blessed\")\r\n\r\nif (god)\r\n{\r\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Loading Prayers\")\r\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\r\n if (blessings.length)\r\n {\r\n this.script.scriptNotification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\r\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)\r\n }\r\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\r\n await this.actor.update({\"system.details.god.value\": god})\r\n}","iuSoKntfJ4eAPafQ":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\r\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\r\n\r\nif (result.object.documentId && result.object.documentCollection)\r\n{\r\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\r\n if (item)\r\n { \r\n let data = item.toObject();\r\n // Some items need sourceTest for their effects\r\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\r\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\r\n }\r\n}\r\n\r\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet witchAdded = actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\twitchAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\r\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","J0IWUhxada2ONowP":" return args.skill?.name == \"Entertain (Sing)\" || args.skill?.name == \"Entertain (Singing)\" || (args.skill?.name.includes(\"Language\") && (args.skill?.name.includes(\"Magick\") || args.skill?.name.includes(\"Elthárin\") || args.skill?.name.includes(\"Cathayan\")))","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\r\n{\r\n args.item.system.qualities.value.push({name : \"penetrating\"})\r\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\r\n{\r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n wardData = ward.toObject()\r\n wardData.system.specification.value = \"8\"\r\n \r\n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\r\n mrData = mr.toObject()\r\n mrData.system.specification.value = 2\r\n \r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\r\n}\r\nelse\r\n{\r\n this.effect.deleteCreatedItems()\r\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\r\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\r\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \r\n{\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Minor Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(\r\n `${this.effect.name}: \r\n @Corruption[minor]{Minor Exposure to Corruption}Damage all Items carried?
`})\r\n\tif (damageItems)\r\n\t{\r\n\t\tlet msg = ``\r\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\r\n\t\tlet armour = args.actor.itemTypes.armour.filter(i => i.isEquipped);\r\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\r\n\t\tfor(let item of weapons)\r\n\t\t{\r\n\t\t\tif (item.system.properties.qualities.shield)\r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1);\r\n\t\t\t}\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of armour)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of trappings)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tif (msg)\r\n\t\t{\r\n\t\t\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nif (type == \"fire\")\r\n{\r\n\tawait args.actor.addCondition(\"ablaze\");\r\n}\r\n\r\nif (type == \"electricity\")\r\n{\r\n\tawait args.actor.addCondition(\"stunned\");\r\n}\r\n\r\nif (type == \"poison\")\r\n{\r\n\tawait args.actor.addCondition(\"poisoned\");\r\n}\r\n\r\n","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}\r\n","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(\"Athletics\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"poisoned\")","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\r\nif (blinded)\r\n{\r\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\r\n blinded.system._scripts = null;\r\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\r\nwoundsGained = Math.ceil(woundsGained / 2)\r\n\r\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\r\n\r\nargs.actor.addCondition(\"fatigued\")\r\nargs.attacker.hasCondition(\"fatigued\")?.delete();\r\n\r\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\r\n\r\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\r\n{\r\n await broken.delete();\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\r\n this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\r\n}","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","JhbZWZhOJ23yOBmG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'hard';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","JhCMYHHYA860Kka8":"return !this.actor.attacker || args.item?.system?.attackType !== \"melee\" || args.skill?.name !== game.i18n.localize(\"NAME.Dodge\");","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","JibNjuQrJRnY0yf9":"return this.actor.flags.useless.rEye && this.actor.flags.useless.lEye && ([\"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) || args.weapon || args.options.dodge)","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Language (Magick)\", \"Channelling (Hysh)\"].includes(args.skill?.name) ","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\r\n{\r\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\r\n args.test.result.critical += ` (+${args.test.result.critModifier})`\r\n}","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\r\n","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.removeCondition(\"surprised\")\r\n this.script.scriptMessage(`Cannot be Surprised`);\r\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\r\n\r\nreturn true; // No need to show this in the dialog","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\r\n\targs.abort = `${this.effect.name}: Ignored`","jOm7RxGFm1y6mCpN":"return args.options.crewTest.name.includes(\"Batten Down\");","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\r\nif (caster)\r\n{\r\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\r\n await this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"vhard\"}, context : {success : \"1 Corruption point that was gained within the last hour is removed.\", failure: \"Nothing happens\"}})\r\n await test.roll();","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Poisoned Condition Gained\", success: \"Resisted Poisoned Condition\" } })\r\n await test.roll();\r\n if (test.failed)\r\n { \r\n args.actor.addCondition(\"poisoned\");\r\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\r\n {\r\n args.actor.addCondition(\"unconscious\")\r\n }\r\n }\r\n}\r\n\r\n // else\r\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\r\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\r\nif (tokenImg)\r\n{\r\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \r\n }\r\n else \r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Token Image path configured. The image path should be set in the first line of this script.\", \"error\");\r\n}","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\r\n this.actor.addCondition(\"dead\")","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\r\n {\r\n args.addImpact = true\r\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Added\")\r\n }","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\r\n{\r\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\r\n}","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} is Immersed within a Sea Elemental and suffers from @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}
They may attempt to escape by freeing themselves from the @Condition[Entangled} Condition as if they were @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} by the Sea Elemental, making an Opposed Strength Test against its Strength of 59.
`);","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\r\n\r\nlet options = {\r\n appendTitle : \" – \" + this.effect.name,\r\n skipTargets: true,\r\n fields: {difficulty: 'average'},\r\n characteristic: 'wp',\r\n}\r\n\r\nlet test = await args.actor.setupSkill('Cool', options);\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n await this.effect.delete();\r\n args.extraMessages.push(`${args.actor.name} lost ${args.totalWoundLoss} Wounds to an attack, which caused it to let go of ${target.name}.`);\r\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\r\nawait this.actor.addCondition(\"deafened\")\r\nawait this.actor.addCondition(\"fatigued\")","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\r\nargs.actor.addCondition(\"ablaze\", ablaze)","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\r\n let value = await ValueDialog.create(\"Armoured Value\", \"Enter the Armoured value\");\r\n if (value) {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();\r\nreturn true;","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n\t args.actor.addCondition(\"stunned\");\r\n }\r\n\targs.actor.hasCondition(\"bleeding\")?.delete()\r\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst roll = new Roll(`2d10 - ${sin}`);\r\nawait roll.evaluate();\r\nawait roll.toMessage({flavor: `${this.effect.name}`});\r\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\r\n{\r\n args.test.result.damage +=1 \r\n args.test.result.additionalDamage += 1\r\n}","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\r\nawait this.actor.addCondition(\"ablaze\")","kEaBLoIHt1FpQVKq":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Invisibility\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\r\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\r\nlet choice = [];\r\n\r\nif (!specification || specification == \"Trained Skills\")\r\n{\r\n choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n broken: \"Broken\",\r\n drive: \"Drive\",\r\n entertain: \"Entertain\",\r\n fetch: \"Fetch\",\r\n guard: \"Guard\",\r\n home: \"Home\",\r\n magic: \"Magic\",\r\n mount: \"Mount\",\r\n war: \"War\"\r\n }, this.effect.img), \"unlimited\", \"Choose Training\");\r\n}\r\nelse \r\n{\r\n choice = specification.split(\", \").map(i => {\r\n return {\r\n id : i.toLowerCase(),\r\n name : i\r\n }\r\n });\r\n}\r\n\r\nif (choice.length)\r\n{\r\n let changes = foundry.utils.deepClone(this.effect.changes);\r\n\r\n for(let training of choice)\r\n {\r\n switch(training.id)\r\n {\r\n case \"broken\" : \r\n let roll = await new Roll(\"2d10\").roll(); \r\n roll.toMessage(this.script.getChatData());\r\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\r\n\r\n if (this.actor.type == \"creature\")\r\n {\r\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\r\n if (bestial)\r\n {\r\n bestial.update({\"system.disabled\" : true})\r\n }\r\n }\r\n break;\r\n\r\n case \"drive\" : \r\n\r\n break;\r\n\r\n case \"entertain\" : \r\n\r\n break;\r\n\r\n case \"fetch\" : \r\n\r\n break;\r\n\r\n case \"guard\" : \r\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\r\n setProperty(args, \"options.keepId\", true);\r\n break;\r\n\r\n case \"home\" : \r\n\r\n break;\r\n\r\n case \"magic\" : \r\n\r\n break;\r\n\r\n case \"mount\" : \r\n\r\n break;\r\n\r\n case \"war\" : \r\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\r\n break;\r\n }\r\n }\r\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\r\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\r\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\r\nif (!table)\r\n{\r\n\tui.notifications.error(\"Cannot find table with key: mutatemental\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\nteeth = teeth.toObject();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","KIoVBinAZK8sMOqD":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 10,\r\n \"bright\": 5,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"flame\",\r\n },\r\n \"color\": \"#ac9e6c\",\r\n }}));","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (opposedResult.differenceSL < 6)\r\n {\r\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\r\n }\r\n else if (opposedResult.differenceSL >= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n}","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \r\n{\r\n this.item.system.reduceQuantity();\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\r\n await test.roll();\r\n if (test.succeeded) \r\n {\r\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(\"Heal Test failed!\", \"error\")\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"None left!\", \"error\")\r\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\r\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) \r\n {\r\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`)\r\n }\r\n })\r\n }","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll(); \r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}\r\n ","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\r\n{\r\n\targs.flags.lostFingers = true;\r\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\r\n}","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Schemer\", \"Second Sight\"].map(game.wfrp4e.utility.findTalent))\r\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\r\nlet data = item.toObject();\r\ndata.name += ` (Disease)`;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSjsDlsx3DD6cT16":"return args.skill?.name != game.i18n.localize(\"NAME.Bribery\");","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\r\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptMessage(\"Immune to Poisoned\")\r\n poisoned.delete()\r\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\r\nargs.actor.system.details.man -= 1;\r\nargs.actor.system.status.carries.max *= 1.5;","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\r\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\r\nthis.actor.hasCondition(\"deafened\")?.delete()\r\nthis.actor.hasCondition(\"unconscious\")?.delete()","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Ranged (Bow)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","KyswmGj1uG3QS3ng":"args.applyAP = false;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","l1ntrpa8RE3Lg5xE":"return args.skill?.name === game.i18n.localize(\"NAME.Perception\");","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\r\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`Apply blunt damage reduction? (-3)
`})\r\n\r\nif (blunt)\r\n{\r\n args.modifiers.other.push({label : this.effect.name, details : \"Blunt Damage Reduction\", value : -3})\r\n}","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\r\n\r\nargs.fields.successBonus += 2 + amount;","lhemR8EP5tGNKout":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : \"Suffer Creeping Irrationality\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n msg = `@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: ${Math.ceil(CONFIG.Dice.randomUniform() * 10)}
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${this.actor.prototypeToken.name} also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}
`\r\n let newCorruption = Number(this.actor.status.corruption.value) + 1\r\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\r\n }\r\n\r\n this.script.scriptMessage(msg);\r\n}\r\n","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","lII4KMRblqwFBlsV":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 20,\r\n \"wp\" : 10,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Channelling\", \"Charm\", \"Perform (Dancing)\"]\r\nlet skillAdvancements = [0, 6, 3]\r\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\r\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [\"Marsh Lights\", \"Sleep\"];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","LjfScVGBf0Egr70E":"let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize(\"NAME.AnimalCare\"));\r\nlet animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize(\"NAME.AnimalTraining\")));\r\n\r\nif (animalCare) \r\n animalCare.system.modifier.value += 20;\r\n\r\nfor (let training of animalTrainings) {\r\n training.system.modifier.value += 30;\r\n}","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.details.price.gc -= Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \r\n{\r\n this.actor.addCondition(\"unconscious\");\r\n}\r\nelse \r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\r\n\r\nif(career)\r\n{\r\n career.system.current.value = true;\r\n}","lOIHiAIDtj91kllN":"const chanties = await WFRP_Utility.findAll('wfrp4e-soc.chanty');\r\nlet choice = await ItemDialog.create(chanties, 1, \"Choose Chanty\");\r\nif (choice.length) {\r\n console.log(choice);\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id});\r\n}","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\nthis.script.scriptNotification(\"Added \" + item.name)","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\r\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\r\n{\r\n args.opposedTest.swap(this.effect.label);\r\n}","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\r\nlet damage = this.actor.system.characteristics.s.bonus + 6\r\n\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await this.actor.addCondition(\"stunned\")\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }\r\n })","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `${this.effect.name}: cannot move or take actions`}}).then(test => {\r\n test.roll();\r\n })\r\n}","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\r\n{\r\n this.script.scriptMessage(`${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n await args.actor.addCondition(\"fatigued\");\r\n }\r\n}","lRZhkh8pcu93QTKz":"if (args.test.spell)\r\n{\r\n\targs.test.preData.SL = -10\r\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\n\r\nlet infectedData = infected.toObject();\r\nlet fearData = fear.toObject();\r\nfearData.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\r\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\r\nthis.script.scriptMessage(msg)\r\nthis.actor.modifyWounds(-1)","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\r\nawait test.roll();\r\n\r\nif (test.failed) \r\n{\r\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\n let currentAge = parseInt(this.actor.system.details.age.value)\r\n\r\n let inline = `@ROLL`\r\n let msg =\r\n `${this.actor.prototypeToken.name} ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses
\r\n${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Weapon Skill
\r\n${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Ballistic Skill
\r\n${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Strength
\r\n${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Toughness
\r\n${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agility
\r\n${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dexterity
\r\n `\r\n this.script.scriptMessage(msg);\r\n\r\n let characteristics = duplicate(this.actor.system.characteristics)\r\n\r\n characteristics.ws.initial -= ws\r\n characteristics.bs.initial -= bs\r\n characteristics.s.initial -= s\r\n characteristics.t.initial -= t\r\n characteristics.ag.initial -= ag\r\n characteristics.dex.initial -= dex\r\n\r\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\r\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\r\n{\r\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\r\n if (slash)\r\n {\r\n slash.value = \"2A\"\r\n }\r\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\r\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\r\n\tthis.actor.addCondition(\"stunned\", stuns)\r\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\r\n\r\nif (caster)\r\n{\r\n let bonus = caster.system.characteristics.wp.bonus\r\n this.actor.modifyWounds(bonus)\r\n\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\r\n}","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\")\r\n}","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Endurance', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 't',\r\n context: {failure: \"Mast shattered!\"}\r\n});\r\nawait test.roll();\r\n\r\nif (test.failed) {\r\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\r\n this.effect.update({disabled: true});\r\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\r\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M0XhKnWjG14pk3iH":"return !args.skill?.name.includes(\"Channelling\") && args.type != \"channelling\" && args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(\"Language (Magick)\") && args.type != \"cast\"","M2FshTX4PjKFVU8y":"args.flags.earCount = Number.isNumeric(args.flags.earCount) ? args.flags.earCount+1 : 1;\r\nif (args.characteristic == \"fel\")\r\n{\r\n\targs.fields.modifier -= 5;\r\n}\r\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\r\n{\r\n\targs.fields.modifier -= 20;\r\n}\r\n","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\r\nargs.prefillModifiers.successBonus++;\r\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\r\n this.effect.sourceItem.delete();\r\n }\r\n}","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.options.reload","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n\targs.actor.addCondition(\"unconscious\")\r\n}\r\n\r\n","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\r\n{\r\n args.flags.trained = true;\r\n args.fields.modifier += 10;\r\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\r\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","McLR9YcgVUG3MooC":"args.applyTB = false;","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\r\nlet critTable = `crit${this.generalizeTable(loc)`;\r\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\r\n\r\nthis.script.scriptMessage(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyTerror(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postTerror(value, name)\r\n}","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\")\r\n await this.actor.hasCondition(\"ablaze\")?.delete()\r\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 20,\r\n \"bright\": 10,\r\n \"angle\": 360,\r\n \"alpha\": 0.4,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Abort damage with ${this.effect.name}?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n args.abort = `${this.effect.name}: Damage cancelled`\r\n }\r\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\r\n{\r\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\r\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Dodge\", { fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n await args.actor.addCondition(\"bleeding\")\r\n await args.actor.addCondition(\"entangled\")\r\n }\r\n })","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nfear = fear.toObject();\r\nfear.system.specification.value = 1;\r\nacutesense = acutesense.toObject();\r\nacutesense.name += \" (Smell)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\r\nbrokenbone = brokenbone.toObject();\r\nteeth = teeth.toObject();\r\ntongue = tongue.toObject();\r\n\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\n\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nbrokenbone.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\r\n","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\r\n{\r\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\r\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}\r\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Fear value\", this.item.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","nIOeK0BrtdZeZW8X":"console.log(\"SKILL\", this)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"challenging\"}, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet rollD10 = await new Roll(\"1d10\").roll()\r\nrollD10.toMessage(this.script.getChatData())\r\n\r\n\r\nif (test.succeeded)\r\n{\r\n //...\r\n}\r\nelse if (test.failed)\r\n{\r\n //...\r\n}\r\n","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\r\n{\r\n this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\r\nconst sl = message.system.sl;\r\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\r\nlet current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n They gain +50 to Swim Tests and can breathe underwater.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}\r\n","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Magic Resistance\", \"talent\")) \r\n return\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","nkSmu7v9WiAaK4vq":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\r\n{\r\n let AP = parseInt(this.effect.sourceTest.result.SL)\r\n args.modifiers.ap.value += AP;\r\n args.modifiers.ap.magical += AP;\r\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\r\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\r\nargs.test.result.critModifier += 20;\r\n\r\nif (args.test.result.critical)\r\n{\r\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\r\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n}\r\n ","Np8P8IPT2GYlrh6G":"return args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})` && args.type !== \"channelling\";","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\r\n\r\nreturn opposedResult?.winner == \"attacker\";","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier -= 10;\r\n}\r\nelse if ([\"wp\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier += 10;\r\n}","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o3JUBKLvE6bBxK2n":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" } })\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n await this.actor.addCondition(\"prone\")\r\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\r\n injury = injury.toObject()\r\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\r\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\r\n if (injury.system.location.key[0] == \"r\")\r\n {\r\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\r\n }\r\n else if (injury.system.location.key[0] == \"l\")\r\n {\r\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\r\n }\r\n setProperty(injury, \"system.wfrp4e.count\", toes)\r\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\r\n}","O45vpR4jDbQQnmvJ":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\r\nanimosity.name = animosity.name.replace(\"(Target)\", \"(Followers of Slaanesh)\");\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","O7lXFZLrLdFaShGR":"args.options.catfall = true;","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\r\n\r\nthis.script.scriptMessage(`Gained ${points} Fortune Points`)","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\r\nlet biteData = bite.toObject();\r\nlet venomData = venom.toObject();\r\n\r\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\r\nvenomData.system.specification.value = \"Average\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \r\nawait test.roll();","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n this.actor.modifyWounds(-1);\r\n this.script.scriptMessage(\"Takes 1 Damage\")\r\n }\r\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\r\nargs.actor.system.characteristics.t.value += 30\r\n\r\nargs.actor.system.characteristics.s.bonus += 3\r\nargs.actor.system.characteristics.t.bonus += 3\r\n\r\nif (args.actor.system.characteristics.s.value > 100)\r\n{\r\n args.actor.system.characteristics.s.value = 100\r\n args.actor.system.characteristics.s.bonus = 10\r\n}\r\n\r\nif (args.actor.system.characteristics.t.value > 100)\r\n{\r\n args.actor.system.characteristics.t.value = 100\r\nargs.actor.system.characteristics.t.bonus = 10\r\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\r\n{\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let msg = `Rolled ${roll}.`\r\n if (roll >= 7)\r\n {\r\n msg = `Attack hits with an SL of ${roll - 6}.`\r\n }\r\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.actor.removeCondition(\"surprised\");\r\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\r\n{\r\n\tthis.script.scriptNotification(\"Disabled!\");\r\n\tawait this.effect.update({\"disabled\" : true})\r\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","OEy2lxvic37dRBEt":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\r\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\r\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\r\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\r\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\r\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\r\n\r\nfunction tinDifference(layers)\r\n{ \r\n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\r\n\r\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\r\n\r\n return metalAP - tinAP;\r\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\r\n ","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\r\n\r\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\r\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\r\n\r\nblows = Math.clamped(blows, 0, difficulties.length - 1)\r\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\r\n{\r\n let difficulty = difficulties[blows];\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a Challenging (+0) Willpower Test`);\r\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\r\n }\r\n })\r\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'average';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\r\n\r\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\r\n\r\nthis.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","OvIELZLvnlN2H2uw":"args.update({light : {\r\n \"dim\": 2,\r\n \"bright\": 1,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"pulse\",\r\n },\r\n \"color\": \"#949bff\",\r\n}});","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\r\n let data = item.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n \r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)\r\n }\r\n}","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\r\n args.test.preData.canReverse = true","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\r\n{\r\n this.actor.modifyAdvantage(-1);\r\n this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);\r\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\r\nthis.actor.addCondition(\"stunned\", roll.total)","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed;","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","p7NJB1PsY6X5q8OO":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet traits = await warhammer.utility.findAllItems(\"trait\");\r\ntraits = traits.filter(t => t.name.includes(\"Companion Trait\"));\r\n\r\nlet items = await ItemDialog.create(traits);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: items[0].name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PdClojv7yNgQpOUc":"return args.skill?.name != game.i18n.localize(\"NAME.Endurance\");","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\r\n\r\nlet mainEffect = this.item.effects.contents[0];\r\nif (mainEffect.name.includes(\"(Lore)\"))\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\r\n if (choice.length)\r\n {\r\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\r\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\r\n }\r\n}\r\n\r\nthis.effect.delete();","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\r\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \r\n (this.actor.isOpposing || args.test.context.defending) && \r\n args.test.result.roll % 11 == 0 && \r\n args.test.succeeded && \r\n [\"Language (Magick)\", \"Dodge\"].includes(args.test.item?.name))\r\n {\r\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\r\n let text = `${this.effect.name}: Adding Unstable and Ward`\r\n args.test.result.other.push(text) \r\n this.script.scriptNotification(text);\r\n \r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n let wardData = ward.toObject();\r\n wardData.system.specification.value = 9;\r\n \r\n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\r\n let unstableData = unstable.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\r\n }\r\n","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\r\n item = item.toObject()\r\n item.system.specification.value = this.actor.characteristics.ag.value\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\r\n})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\r\n\r\nif (ablaze) {\r\n ablaze.delete();\r\n this.script.scriptNotification(\"Resisted Ablaze\");\r\n}","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\r\nlet data = item.toObject();\r\ndata.name += \" (Woodlands)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choose Size\");\r\n if (choice[0])\r\n {\r\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\r\n }\r\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \r\n// reducing the SL of any spell affecting it by 3. \r\n// This effect lasts for one hour.\r\nconst hasMagicResistance = this.actor.has(\"Magic Resistance\")\r\n\r\nif (hasMagicResistance === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\r\n let traitItem = trait.toObject()\r\n traitItem.system.specification.value = 2\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Magic Resistance Trait. This effect lasts for one hour.
`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}\r\n\r\nif (hasMagicResistance) {\r\n // Multiple doses may be consumed at once, with each one adding an additional 1 to the Magic Resistance rating and increasing the duration by one hour. \r\n let msg = `${this.actor.prototypeToken.name} has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.
`\r\n\r\n // Resist toxic effect\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n fields: {difficulty: \"challenging\"}\r\n }).then(async test => {\r\n await test.roll()\r\n\r\n // If they fail ...\r\n if (!test.succeeded) {\r\n msg += `However, they begin to ooze the thick, poisonous slime that coats every Dreadmaw. They have gained 1 Poisoned Condition now and should continue to receive an additional @Condition[Poisoned] Condition at the end of each of the round.
\r\nIf they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.
`\r\n this.actor.addCondition(\"poisoned\", 1)\r\n }\r\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\r\n })\r\n}\r\n","PMNjdEAusVBfam09":"return args.skill?.name === game.i18n.localize(\"NAME.Charm\");","Pn5fekTbkwlr61XU":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Engineer)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Arcane Magic (Light)\", \"talent\")\r\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\r\n\r\nif (!talent)\r\n{\r\n await this.actor.addCondition(\"blinded\")\r\n}\r\n\r\nif (demon)\r\n{\r\n await this.actor.addCondition(\"stunned\")\r\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\r\n {\r\n args.actor.addCondition('ablaze')\r\n }","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\r\n\r\nif (criticals.length)\r\n{\r\n this.script.scriptNotification(\"Cannot suffer Critical Wounds\");\r\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\r\n}\r\n\r\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\r\n{\r\n this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\r\n}","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll();\r\nlet mood = await new Roll(\"-2d10\").roll();\r\n\r\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\r\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\r\n\r\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\r\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\r\n\r\nthis.effect.delete();","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\r\nargs.actor.system.details.move.value -= 1;","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \r\n{\r\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\r\n let results = roll.results[0]\r\n\r\n this.script.scriptMessage(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\r\n })\r\n\r\n }\r\n\r\n","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\n","pzknBcJtZWeliE27":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\") || args.item?.name == game.i18n.localize(\"NAME.Cool\")","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n ws : game.wfrp4e.config.characteristics.ws,\r\n t : game.wfrp4e.config.characteristics.t,\r\n ag : game.wfrp4e.config.characteristics.ag,\r\n wp : game.wfrp4e.config.characteristics.wp\r\n}, this.effect.img), 1, \"Choose Characteristic\");\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q4EQgP4gZR8TTm7S":"let penalty = 0\r\nif (args.item?.system.attackType)\r\n{\r\n penalty -= 30\r\n}\r\nif (args.actor.has(\"Second Sight\", \"talent\"))\r\n penalty += 10\r\n\r\nargs.prefillModifiers.modifier += penalty","Q5gh5Y9dCdclcwsD":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name != `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"When Alone\";\r\ndata.effects[0].disabled = true;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","q8lOAWr2970sZeTw":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\r\n\r\n if (args.actor.details.move.value > 3)\r\n {\r\n args.actor.details.move.value -= 1;\r\n if (args.actor.details.move.value < 3)\r\n args.actor.details.move.value = 3\r\n }","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \r\n{\r\n if (args.test.succeeded) \r\n {\r\n let staunch = Number(args.test.result.SL) + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n {\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n }\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\r\n {\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n }\r\n}","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","QbIYnshWeP1U8SUy":"args.applyAP = false;\r\nargs.applyTB = false;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\r\nthis.actor.status.encumbrance.pct = 0;","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QfTBRGXVfwQSghmd":"fromUuid(this.effect.origin).then(caster => {\r\n if (caster) {\r\n if (actor.items.find(it => it.name == game.i18n.localize(\"Bestial\"))) {\r\n let healed = caster.characteristics.wp.bonus\r\n let wounds = duplicate(args.actor.status.wounds)\r\n wounds.value += healed\r\n\r\n if (wounds.value > wounds.max)\r\n wounds.value = wounds.max\r\n\r\n args.actor.update({ \"system.status.wounds\": wounds })\r\n ChatMessage.create({ content: `${this.actor.prototypeToken.name} regains ${healed} Wounds`, speaker: { alias: this.effect.name } })\r\n } else {\r\n ui.notifications.warn(\"Target actor has no Bestial trait\")\r\n }\r\n }\r\n})\r\n\r\n","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 1;\r\n\r\nargs.actor.system.details.man -= 2;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\r\nlet fearData = fear.toObject();\r\nlet leaderData = leader.toObject();\r\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \r\ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\r\n","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"type\": \"\",\r\n },\r\n \"color\": \"#000000\",\r\n }}));","qmOt7h17hGAKqQe0":"\r\nlet choice = await Dialog.wait({\r\n title: this.effect.name,\r\n content: `${this.effect.name}: Is this a ranged or magical attack that orignates outside the Dome?
`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n})\r\n\r\nif (choice)\r\n{\r\n\targs.ward = 6;\r\n}","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\r\n\r\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\r\nlet scriptData = this.effect.flags.wfrp4e.scriptData;\r\n\r\nif (closed) {\r\n scriptData[0].label = \"Open\";\r\n} else {\r\n scriptData[0].label = \"Close\";\r\n}\r\n\r\nawait this.effect.update({\"flags.wfrp4e.scriptData\": scriptData});","QNxmImpLTou6WdMQ":"let test = args.test\r\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\r\n test.result.other.push(\"Can make a Difficult (-10) Willpower Test to prevent the Miscast\")","QoEOxRruQXYrZrv3":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"skill\"\r\n },\r\n {\r\n property : \"name\",\r\n value : /Melee/gm,\r\n regex: true\r\n }\r\n]\r\n\r\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, \"Choose 2 Skills to add +20\")\r\nitems = items.map(i => i.toObject())\r\nitems.forEach(i => i.system.advances.value = 20)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QPVVDPcJ4Xi5FmQl":"if(this.actor.hasCondition(\"fatigued\") && args.opposedTest.result.hitloc.value == \"head\" && (args.opposedTest.attackerTest.result.critical || args.actor.status.wounds.value - args.totalWoundLoss < 0))\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n }\r\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\r\n args.item.damage.value += \" + 1\"","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\r\n{\r\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\r\n}\r\n\r\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\r\n\r\nif (choice[0])\r\n{\r\n\tthis.actor.removeCondition(choice[0].conditionId)\r\n}\r\n","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n effectData.duration.seconds = 10800\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Night Vision\") && !this.actor.has(\"Night Vision\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\r\n{\r\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\r\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 1;\r\nAP[\"rArm\"].value += 1;\r\nAP[\"lArm\"].value += 1;\r\nAP[\"body\"].value += 1;\r\nAP[\"lLeg\"].value += 1;\r\nAP[\"rLeg\"].value += 1;","qTk96NKh14YOIShf":"return args.skill?.name === game.i18n.localize(\"NAME.Haggle\");","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `${this.effect.name}: Vomit!`} })\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\r\n\r\nthis.script.scriptMessage(content)","qxzhPtysAjPWspKf":"if (this.actor.has(\"Undead\") || this.actor.has(\"Daemonic\"))\r\n{\r\n this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);\r\n}","qzGPJflVW7c2Ciim":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\");","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","R32U01LBjBrK1pns":" const templateMap = {\r\n 'P2e7Yx98bK3u110a' : \"\",\r\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \r\n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \r\n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \r\n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \r\n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \r\n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\r\n }\r\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\r\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\r\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\r\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\r\n\r\n\r\n let templateItem = await game.wfrp4e.utility.findItemId(templateMap[template._id]);\r\n\r\n let bio = \r\n `\r\nTemplate: ${template.text}
\r\nPhsyical Quirk: ${physicalQuirk}
\r\nWork Ethic: ${workEthic}
\r\nPersonality Quirk: ${personalityQuirk}
\r\n `\r\n \r\n this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\r\n\r\n if (templateItem)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\r\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 1\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","R8ecKGRzOr4ThvVa":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R8FBHZaaARA3z9pB":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'hard';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\r\n{\r\n this.actor.removeCondition(\"bleeding\");\r\n this.script.scriptNotification(\"Removed 1 Bleeding Condition\")\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Bleeding Conditions\");\r\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rBAoyhzeU3Q8MVSk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 50;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.script.scriptNotification(\"Cannot be surprised\");\r\n this.actor.removeCondition(\"surprised\");\r\n}","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\r\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\r\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\r\n\r\nas.name += \" (Sight)\";\r\n\r\nlet roll = (await new Roll(\"1d10\").roll());\r\nroll.toMessage(this.script.getChatData())\r\nlet items = []\r\n\r\nif (roll.total <= 2)\r\n{\r\n items = items.concat([as]);\r\n}\r\nelse if (roll.total <= 4)\r\n{\r\n items = items.concat([hv]);\r\n}\r\nelse if (roll.total <= 6)\r\n{\r\n items = items.concat([ms]);\r\n}\r\nelse if (roll.total <= 8)\r\n{\r\n items = items.concat([ss]);\r\n}\r\nelse if (roll.total <= 10)\r\n{\r\n items = items.concat([as, hv, ms, ss]);\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (data.system.location.key[0] == \"r\")\r\n{\r\n\tdata.system.location.value = \"Right Ankle\"\r\n}\r\nelse if (data.system.location.key[0] == \"l\")\r\n{\r\n\tdata.system.location.value = \"Left Ankle\"\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\r\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\r\n effectData.duration.seconds = 60 * minutes\r\n this.script.scriptMessage(`Duration: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\r\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\r\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\r\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\r\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\r\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\r\n\r\narmour.name = \"Armour (Hide)\"\r\narmour.system.specification.value = 2\r\nbite.system.specification.value = 3\r\nfear.system.specification.value = 2\r\nweapon.system.specification.value = 4\r\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\r\n\r\n\r\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\r\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\r\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\r\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\r\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\r\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\r\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\r\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\r\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\r\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\r\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\r\n\r\nblessed.system.specification.value = \"Ulric\"\r\nsize.system.specification.value = \"Large\"\r\n\r\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\r\n\r\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\r\n\r\nitems = items.concat(chosen || [])\r\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\r\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\r\n\r\nlet skill = await ItemDialog.create(skills, 1, \"Select the skill used by the weapon\")\r\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\r\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\r\n\r\nlet weapon = {\r\n\tname : this.effect.name,\r\n\ttype : \"weapon\",\r\n\timg : this.effect.img,\r\n\tsystem : {\r\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\r\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\r\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\r\n\t\t\"reach.value\" : \"average\",\r\n\t\t\"qualities.value\" : [{name : \"magical\"}]\r\n\t},\r\n}\r\n\r\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\r\nthis.script.scriptNotification(\"Item created. Further customization must be done manually within the Item's sheet\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptMessage(\"Gained 2 Bleeding Conditions\")\r\n}","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\r\n\r\nfor (let effect of holed) {\r\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\r\n}\r\n\r\nthis.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`);","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rlTvhnDpj4lzfusf":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && args.skill?.name !== game.i18n.localize(\"NAME.Climb\");","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\r\n return ui.notifications.warn(\"You must target exactly one Boat.\");\r\n\r\nconst target = game.user.targets.first();\r\nconst vehicle = target.actor;\r\n\r\nif (!(vehicle.system instanceof VehicleModel)) \r\n return ui.notifications.warn(\"You can only Constrict a Boat\");\r\n\r\nif (vehicle.size > 3)\r\n return ui.notifications.warn(\"You can only Constrict vessels of Size Large or smaller\");\r\n\r\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\r\n\r\nconst mainEffect = this.item.effects.contents[0];\r\nconst effectData = mainEffect.toObject();\r\n\r\neffectData.statuses = [effectData.name.slugify()];\r\n\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\r\n\r\nawait this.actor.applyEffect({effectData: [effectData]});\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} started wrapping itself around the ${target.name} and will be able to start crushing it after ${turns} turns.`);","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 30;\r\n}","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"flags.wfrp4e.applicationData.type\" : \"crew\"})","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.item.name} Overloads!`)\r\n }\r\n}","RPqgRUkiLY5thVbC":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'average';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Drop the item!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\n\r\nif (location && test.failed)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\r\nif (test.spell.lore.value == \"fire\")\r\n{\r\n if (test.result.overcast.usage.target?.AoE)\r\n {\r\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\r\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\r\n }\r\n if (test.result.overcast.usage.range)\r\n {\r\n test.result.overcast.usage.range.current *= 2\r\n test.result.overcast.usage.range.initial *= 2\r\n }\r\n \r\n}","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\r\nawait args.actor.addCondition(\"deafened\");\r\nawait args.actor.addCondition(\"stunned\");","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\ntest.roll();","RrchOMpEdIvceJxl":"return args.skill?.name == \"Stealth (Rural)\"","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"disease\")\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choose a Disease\")\r\n\r\nif (choice[0])\r\n{\r\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n}","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\r\n","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\r\n{\r\n args.test.result.damage += 1\r\n args.test.result.additionalDamage += 1\r\n if (!args.test.result.resolute) {\r\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\r\n args.test.result.resolute = true // Prevent duplicate messages\r\n }\r\n}\r\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":" let characteristics = {\r\n \"ws\" : -10,\r\n \"bs\" : -10,\r\n \"s\" : -5,\r\n \"t\" : -5,\r\n \"i\" : -10,\r\n \"ag\" : -10,\r\n \"dex\" : -10,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = []\r\n let skillAdvancements = []\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\r\nlet terrorTraitItem = item.toObject()\r\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \r\nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"blinded\");\r\n}\r\n\r\nlet msg = ``\r\nlet armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped);\r\nfor(let item of armour)\r\n{\r\n\tfor(let key in item.system.AP)\r\n\t{\r\n\t\tlet AP = item.system.AP[key]\r\n\t\tlet damage = Math.floor(AP / 2);\r\n\t\tawait item.system.damageItem(damage, [key]);\r\n\t}\r\n\tmsg += `${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\r\nif (this.actor.flags.holed.applied === true) return;\r\nif (this.actor.hasCondition(\"dead\")) return;\r\n\r\nconst currentHoled = this.actor.flags.holed.holed || 0;\r\n\r\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\r\n if (!m.name.toLowerCase().includes(\"gun port\")) \r\n return acc;\r\n \r\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\r\n if (!closed) acc++;\r\n \r\n return acc;\r\n}, 0);\r\n\r\nconst totalHoled = currentHoled + openGunPorts;\r\nconst toughness = this.actor.system.characteristics.t.value;\r\nthis.actor.flags.holed.total = totalHoled;\r\n\r\nif (totalHoled >= toughness) {\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n this.script.scriptMessage(`\r\n${speaker.alias} sank due to having Holed (${totalHoled}) rating equal to, or exceeding its Toughness (${toughness })
\r\n\r\n Holed due to Critical Damage: ${currentHoled}
\r\n Holed due to opened Gun Ports: ${openGunPorts}\r\n
By imbibing this potion, ${this.actor.prototypeToken.name} has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\r\n\r\nif (location == \"lArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Left\")\r\n}\r\nelse if (location == \"rArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Right\")\r\n}\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\r\n\r\nif (location)\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syBgPp7rOymCZejX":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunity to Psychology\")?.delete();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)\r\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\r\nlet data = item.toObject();\r\ndata.name = data.name.replace(\"Target\", \"Greenskins, Undead, Chaos\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","T3RfSt3VMEat3iDD":"return args.skill?.name !== game.i18n.localize(\"NAME.Perception\");","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\r\n{\r\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","tCIT1a12Gt6k2ohA":"let resistance\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tresistance = this.item.parenthesesText\r\n}\r\nelse \r\n{\r\n resistance = await ValueDialog.create(\"Enter Resistance\", \"Resistance\") \r\n \r\n if (resistance)\r\n {\r\n this.item.updateSource({name : this.item.name + ` (${resistance})`})\r\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\r\n }\r\n} \r\nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\r\n\r\nif (resistance && !this.effect.name.includes(\"(\"))\r\n{\r\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\r\n}","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","TCtXPvDpbfz1yrVZ":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Two-Handed)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\n\r\n Select your choice\r\n
\r\n `,\r\n buttons : {\r\n 1 : {\r\n label : \"Shield\",\r\n callback : () => {\r\n return \"shield\"\r\n }\r\n },\r\n 2 : {\r\n label : \"Two-Handed Weapon\",\r\n callback : () => {\r\n return \"twohanded\"\r\n }\r\n },\r\n }\r\n})\r\n\r\nlet weapons = await warhammer.utility.findAllItems(\"weapon\", \"Loading Weapons\");\r\nlet items\r\nif (choice == \"shield\") \r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.properties.qualities.shield), 1, \"Choisissez a Shield\");\r\n}\r\nelse if (choice == \"twohanded\")\r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.weaponGroup.value == \"twohanded\"), 1, \"Choisissez a Two-Handed Weapon\");\r\n}\r\nitems = items.map(i => i.toObject())\r\n\r\nitems.forEach(i => i.system.equipped.value)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n let add = 0\r\n\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \r\n {\r\n add = 1 // can't use isFumble if no hit location\r\n }\r\n\r\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\r\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\r\n\r\n}","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\nif (args.applyAP && nonmagical) \r\n{\r\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\n args.modifiers.ap.ignored += nonmagical\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Non-Magical AP (\" + nonmagical + \")\");\r\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.system.specification.value = 1;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\r\nlet test = await this.actor.setupTrait(stomp)\r\nawait test.roll();","tn6SwmjAuNzqE6dx":"let damage = 0\r\nlet test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n damage = 10;\r\n}\r\nelse if (test.failed)\r\n{\r\n damage = 20;\r\n}\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\r\n \"ws\": 45,\r\n \"bs\": 30,\r\n \"s\": 35,\r\n \"t\": 45,\r\n \"i\": 30,\r\n \"ag\": 35,\r\n \"dex\": 25,\r\n \"int\": 25,\r\n \"wp\": 30,\r\n \"fel\": 25\r\n}\r\nfor (let char in this.actor.characteristics) {\r\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\r\n this.actor.characteristics[char].initial = gorCharacteristics[char]\r\n}","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"unconscious\")\r\n}","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n let sourceActor = this.effect.sourceActor;\r\n if (sourceActor)\r\n {\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\r\n }\r\n}","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\r\n\r\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\r\nthis.script.scriptMessage(`Location: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TpZItJ5Ugbazaobd":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\r\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","Tq45Nd8J3eTvHT41":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.SetTrap\");","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Minor\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","tuIsytv3jl2yAIb2":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\") && args.skill?.name !== game.i18n.localize(\"NAME.Intimidate\") && args.skill?.name !== game.i18n.localize(\"NAME.Leadership\")","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n this.script.scriptNotification(`Cleared ${fatigued.conditionValue} Fatigued Conditions`)\r\n fatigued.delete(); \r\n}\r\nelse \r\n{\r\n\tthis.script.scriptNotification(`No Fatigued Conditions`)\r\n}","TwgdEucxcHloc4cX":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nAppy ${this.effect.name} Damage? Attacker must have used bare hands or a melee weapon made of metal.`})\r\n if (apply)\r\n {\r\n \r\n let damage = 5 + this.actor.characteristics.wp.bonus;\r\n \r\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\r\n \r\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\r\n \r\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\r\n \r\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n \r\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\r\n \r\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\n msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\n this.script.scriptMessage(msg)\r\n }\r\n}","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData());\r\n args.totalWoundLoss += roll.total;\r\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\r\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n else \r\n {\r\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\r\n }\r\n}\r\nelse \r\n{\r\n return false;\r\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\r\nthis.script.scriptNotification(lore)\r\nif (lore == \"GM's Choice\") {\r\n return\r\n}\r\n\r\nelse if (lore == \"Arcane Magic\") {\r\n lore = \"Arcane\"\r\n}\r\n\r\nelse if (lore == \"Petty Magic\") {\r\n lore = \"petty\"\r\n}\r\n\r\nelse {\r\n lore = lore.toLowerCase();\r\n}\r\n\r\nlet spellsWithLore = []\r\nif (lore == \"Arcane\") {\r\n spellsWithLore = spells.filter(i => !i.system.lore.value)\r\n}\r\nelse {\r\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\r\n}\r\n\r\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\r\n this.actor.setupCast(item).then(test => test.roll());\r\n})","UlRSaZG4ZUU6fMND":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nEnter the number of diseases/poisons cured
\",\r\n buttons : {\r\n confirm : {\r\n label : \"Confirm\",\r\n callback : (dlg) => {\r\n let input = dlg.find(\"input\");\r\n value = parseInt(input[0].value);\r\n return value;\r\n }\r\n }\r\n }\r\n})\r\n\r\n\r\nlet damage = 0;\r\n\r\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\r\n\r\nlet test = new Roll(`${rolls.join(\" + \")}`);\r\nawait test.roll();\r\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Longbow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `\r\n Add Option?\r\n
\r\nFinished replacing ${this.item.name} with a makeshift one.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \r\n{\r\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) \r\n {\r\n await args.actor.addCondition(\"poisoned\")\r\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\r\n }\r\n })\r\n}","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\r\nif (SL < 0)\r\n SL = 0\r\nthis.actor.addCondition(\"fatigued\", 1 + SL)","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VLdF2HPnCrNIgp7a":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\n animosity.system.specification.value = \"Followers of Slaanesh\";\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","VlHuDIAvPr8JM1P5":"return args.skill?.name !== game.i18n.localize(\"NAME.Row\");","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","VNOKTzCrFbZ6PJUj":"return ![\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","Vns6WrafVq8NjX7t":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\")","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\r\n\r\nawait roll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n return false;\r\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Language (Magick)\"","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData())\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\r\n// On a 1, its poison has run dry, \r\n// and the next time it is employed it will shatter.\r\n\r\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\r\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\r\n ChatMessage.create({\r\n content: `\r\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\r\n blind: true\r\n })\r\n}\r\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.characteristics.t.initial += 10 * specification;\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"fatigued\") \r\n }\r\n})","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\r\nif (broken)\r\n{\r\n broken.delete();\r\n this.script.scriptNotification(\"Removed Broken\")\r\n}","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"prone\")\r\n\tawait this.actor.addCondition(\"stunned\")\r\n}\r\n \r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\r\nargs.modifiers.other.push({label : this.effect.name, value : -1)","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\r\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.minormis\r\n}\r\n// Decrement the major miscast to minor miscast\r\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.majormis\r\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\r\n}","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\r\n{\r\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\r\n\t{\r\n\t\tif (parseInt(args.test.result.SL) > 0)\r\n\t\t{\r\n\t\t\targs.test.result.SL = \"-0\";\r\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\r\n\t\t}\r\n\t\targs.test.result.outcome = \"failure\"\r\n args.test.result.other.push(`${this.effect.name}: Maximum -0 SL`)\r\n\t}\r\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\nlet slOver = this.effect.sourceTest.result.slOver;\r\nlet overcast = this.effect.sourceTest.result.overcast\r\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\r\nlet added = Math.floor(slOver / 3) || 0\r\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4RuGIfseGoxXA3k":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\r\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 60\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","WB6sIpLEPC8YPX67":"if (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\r\nlet msg = \"\";\r\nfor(let item of items)\r\n{\r\n if (item.system.properties.qualities.durable)\r\n {\r\n await item.update({\"system.qualities.value\" : []});\r\n msg += `${item.name} loses all Qualities
`\r\n }\r\n else \r\n {\r\n msg += `${item.name} crumbles into dust!
` \r\n await item.update({name : item.name + \" (Dust)\"})\r\n }\r\n}\r\nif(msg)\r\n{\r\n this.script.scriptMessage(msg);\r\n}","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","whUSkaR1yem21bXp":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 6,\r\n \"int\" : -5,\r\n \"wp\" : 0,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Melee (Basic)\", \"Track\"]\r\nlet skillAdvancements = [8, 7]\r\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\r\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\r\n{\r\n args.item.system.qualities.value.push({name : \"magical\"})\r\n}","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\r\nargs.item.system.qualities.value.push({name : \"magical\"});","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 3\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","WO5n7Vbx8AgoVrwC":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\r\n let skillAdvancements = [10, 10, 10]\r\n let talents = []\r\n let trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\r\n{\r\n\tthis.actor.addCondition(\"dead\");\r\n}","Wqff6ICWYzvLDYC8":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Sensory Sharing\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","WR0Kqn8CF5iwToak":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\r\n{\r\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\r\n disease = disease.toObject()\r\n disease.system.duration.active = true\r\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\r\n }\r\n })\r\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\r\n\r\n this.script.scriptNotification(\"This test only applies to criminals, otherwise close the dialog.\");\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \r\n {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"unconscious\");\r\n }\r\n });","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\r\n // must make a Challenging (+0) Endurance Test \r\n\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\r\n fields: {difficulty: \"challenging\"}\r\n })\r\n \r\n await test.roll();\r\n if (test.failed)\r\n {\r\n // or gain a Deafened Condition \r\n this.actor.addCondition(\"deafened\");\r\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\r\n let damage = (await new Roll(\"1d10\").roll());\r\n await damage.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Does not need to make Fear or Terror tests\");\r\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n\r\nawait this.actor.addCondition(\"deafened\", 3)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"Gain a Broken Condition\", success : \"Avoided Broken Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"broken\")\r\n}","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\r\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\r\n\r\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\r\n grim.update({\"system.specification.value\": 4});\r\n}\r\n\r\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\r\n grim.update({\"system.specification.value\": 2});\r\n}","x2RLUUNB7BiIDYCP":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, skipTargets: true, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\r\nitem.name += ` (Disabled by ${this.item.name})`;","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nlet data = item.toObject();\r\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\r\ndata.system.specification.value = 5\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n\tthis.actor.removeCondition(\"prone\");\r\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\r\n}\r\nelse \r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\r\nChatMessage.create({content : \"Grace is beyond style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n\r\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n \"nobles\" : \"Nobles\",\r\n \"guilders\" : \"Guilders\",\r\n \"servants\" : \"Servants\"\r\n}), 1, \"Choose Group\")\r\n\r\nlet name = choice[0]?.name\r\n\r\nif (!name)\r\n{\r\n return;\r\n}\r\n\r\nif (item)\r\n{\r\n item.update({\r\n name : item.name.split(\"(\")[0] + ` (${name})`, \r\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\r\n })\r\n}\r\nelse \r\n{\r\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\r\n let data = item.toObject();\r\n data.name += ` (${name})`\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\r\n scythe.name = \"Scythe of Shyish\";\r\n scythe.system.damage.value = \"WPB + 3\"\r\n scythe.system.equipped = true;\r\n scythe.img = this.effect.icon;\r\n scythe.system.qualities.value.push({name : \"magical\"})\r\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","XCAfy460IotarQek":"return false;","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}\r\n\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","XcvDYNZgJ2rpAdDV":"\r\n let fatigued = this.actor.hasCondition(\"fatigued\")\r\n if (!fatigued)\r\n {\r\n this.actor.addCondition(\"fatigued\")\r\n ui.notifications.notify(\"Fatigued added to \" + this.actor.name + \" which cannot be removed until the Malaise symptom is gone.\")\r\n }","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\r\n}","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\r\n{\r\n args.addImpact = true;\r\n args.opposedTest.result.other.push(\"Impact against Skaven\")\r\n}","Xf4FcZ4ZLdWmOXBa":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\n\r\nthis.script.scriptMessage(msg);","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\r\n args.test?.result?.other.push(\"Gain additional +1 Corruption from \" + this.effect.name)\r\n}","yQziCK8G8I1RYkTj":"let add;\r\nif (args.opposedTest?.attackerTest?.weapon?.isRanged && args.opposedTest?.result.hitloc?.value === \"head\") {\r\n add = await Dialog.confirm({title : this.effect.name, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\r\n}\r\n\r\nif (add) {\r\n\r\n args.modifiers.ap.metal++;\r\n args.modifiers.ap.used++;\r\n args.modifiers.ap.value++;\r\n args.modifiers.ap.details.push(\"+1 AP against missile attacks to the front\");\r\n}","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yRRzSKlcN3L7rEEe":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Play\"));","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\r\nthis.script.scriptNotification(\"Added Fatigued\")","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","yTmRoUstxHMso91c":"if (args.item.name == \"Magic Resistance\" && args.item.type == \"trait\")\r\n{\r\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\r\n}","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\r\nlet fel_gain = 0\r\nif (args.actor.characteristics.fel.value <= 0)\r\n{\r\n fel_gain += (await new Roll(\"2d10\").roll()).total\r\n}\r\n\r\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\r\n\r\nif (fel_gain)\r\n msg += ` and ${fel_gain} Fellowship`\r\n\r\n\r\nlet newInt = i_gain + args.actor.characteristics.int.modifier\r\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\r\n\r\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\r\n\r\nthis.script.scriptMessage(msg)","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\r\n\r\nif (newEffect)\r\n{\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\r\n}","YySjPfSAPdMAfjsh":"let talents = [\"Berserk Charge\", \"Combat Aware\", \"Combat Reflexes\", \"Furious Assault\", \"Implacable\", \"Magic Resistance\", \"Resistance (Magic)\", \"Resolute\", \"Strike Mighty Blow\", \"Warrior Born\"];\r\nlet currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer) return;\r\n\r\nfor (let talent of talents) {\r\n if (currentCareer.system.talents.includes(talent))\r\n continue;\r\n currentCareer.system.talents.push(talent);\t\r\n}\r\n\r\n","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\r\n\tthis.script.scriptNotification(\"Angewandt nach Effekten\");\r\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nitem = item.toObject()\r\nitem.name = this.effect.name\r\nitem.system.specification.value = this.actor.characteristics.s.bonus\r\nitem.system.description.value = \"\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 2;\r\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\r\nif (ablaze)\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\");\r\n ablaze.delete()\r\n}","z5HfNUrHy5MS3K7a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true);\r\n\r\nlet choice = await ItemDialog.create(spells, 1);\r\n\r\nif (choice[0])\r\n{\r\n this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\r\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\r\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\r\n spell.system.wind.value = \"Channelling (Dhar)\";\r\n spell.system.memorized.value = true;\r\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\r\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZCkYe5XMVY1RWMXG":"args.options.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effect because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\r\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\r\n{\r\n halve = await Dialog.confirm({title : this.effect.name, content : \"Halve Damage? (Halves Damage from all fire)\"})\r\n}\r\nelse\r\n{\r\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\r\n}\r\n\r\nif (halve)\r\n{\r\n args.totalWoundLoss /= 2;\r\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\r\n}","zdGAvfL7zJ7wpYxG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'easy';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\r\n\r\nswitch (initiativeSetting) {\r\n case \"default\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"sl\":\r\n args.initiative += \"+1\"\r\n break;\r\n\r\n case \"d10Init\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"d10InitAgi\":\r\n args.initiative += \"+1\"\r\n break;\r\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","ZgF1sYdbAKaOuHmK":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\");","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet biteData = bite.toObject();\r\nlet infectedData = infected.toObject();\r\n\r\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Religion\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Nichts übrig!\", \"error\")\r\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Blutend hinzugefügt\")\r\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\r\n if (target.actor.details.size.value == \"tiny\")\r\n modifier = 30\r\n if (target.actor.details.size.value == \"ltl\")\r\n modifier = 20\r\n if (target.actor.details.size.value == \"sml\")\r\n modifier = 10\r\n\t\r\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 2;\r\nAP[\"rArm\"].value += 2;\r\nAP[\"lArm\"].value += 2;\r\nAP[\"body\"].value += 2;\r\nAP[\"lLeg\"].value += 2;\r\nAP[\"rLeg\"].value += 2;","zL7ECmBBMAqf5Esn":"let hasMagazine = await Dialog.confirm({content: \"Does the vessel have a magazine or any other kind of store for blackpowder?
\"});\r\n\r\nif (!hasMagazine) return;\r\n\r\nlet roll = new Roll(\"d10\");\r\nawait roll.evaluate();\r\n// await roll.toMessage();\r\nlet anchor = roll.toAnchor();\r\n\r\nlet crits = [];\r\n\r\nfor (let i = 0; i < roll.total; i++) {\r\n let result = await WFRP_Tables.rollTable('crithull');\r\n let collection = game.packs.get(result.object.documentCollection)\r\n\r\n if (collection)\r\n await collection.getDocuments()\r\n\r\n if (!collection)\r\n collection = game.items;\r\n\r\n let item = collection.get(result.object.documentId)\r\n if (item)\r\n crits.push(item);\r\n}\r\n\r\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\r\nthis.script.scriptMessage(`${this.item.name} caused an additional ${anchor.outerHTML} Critical Hits to the Hull!
${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}
`\r\n}\r\n\r\nthis.script.scriptMessage(msg);","zR4WAjzXHTZuiu5G":"let actor = this.actor;\r\n let effect = this.effect;\r\n let bleedingAmt;\r\n let bleedingRoll;\r\n let msg = \"\"\r\n\r\n let damage = effect.conditionValue;\r\n let scriptArgs = {msg, damage};\r\n await Promise.all(actor.runScripts(\"preApplyCondition\", {effect, data : scriptArgs}))\r\n msg = scriptArgs.msg;\r\n damage = scriptArgs.damage;\r\n msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})\r\n\r\n if (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\"))\r\n {\r\n await actor.addCondition(\"unconscious\")\r\n msg += \"Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'difficult';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n // Wait till after chat card is posted\r\n game.wfrp4e.utility.sleep(500).then(() => {\r\n game.wfrp4e.utility.postTerror(1, this.effect.name)\r\n game.wfrp4e.utility.postTerror(2, this.effect.name)\r\n })\r\n}","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\nlet holed = this.actor.flags.holed || {holed: 0};\r\nholed.holed += rating;\r\nthis.actor.flags.holed = holed;\r\n","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed","zxG5KbliWE9xWNQD":"this.script.message(\"Überspring automatisch jede \" + this.script.label);\r\nargs.abort = true;","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","zXh8rgMxWoCLTxVd":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 0\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.effect.delete()\r\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \r\n// in Wolves, Lions, Goats, and Chimeras.\r\ngame.wfrp4e.utility.postFear(2, this.effect.name)\r\n","zzk2uRSFjFHB5kjw":"\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)"}); - + mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\r\n// takes 3 Poisoned Conditions that cannot be resisted at first,\r\nawait this.actor.addCondition(\"poisoned\", 3)\r\n\r\n// recovers a number of Wounds equal to their Toughness Bonus, \r\nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n\r\n// and acquires the Regenerate Creature Trait.\r\nconst hasRegenerate = this.actor.has(\"Regenerieren\")\r\nif (hasRegenerate === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\r\n let traitItem = trait.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n}\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} hat:\r\n
Wenn alle Vergifteten Zustände beendet sind, geht auch die Eigenschaft Regenerieren verloren.
`,\r\n\r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\r\n{\r\n args.fields.modifier += 10;\r\n args.flags.quietenedApplied = true\r\n}","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\n\r\nlet data1 = item1.toObject();\r\ndata1.system.location.key = this.item.system.location.key\r\n\r\nlet data2 = item2.toObject();\r\ndata2.system.location.key = this.item.system.location.key\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\r\n","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\r\n\r\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\r\n\r\nif (text == \"GM's Choice\")\r\n{\r\n return this.script.scriptNotification(text)\r\n}\r\n\r\nif (spellsWithLore.length > 0)\r\n{\r\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\r\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\n this.script.scriptNotification(selectedSpell.name);\r\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\r\n}\r\nelse\r\n{\r\n ui.notifications.notify(`Could not find ${lore} spell. Try Again`)\r\n}","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\r\n{\r\n\targs.test.result.other.push(`${this.effect.name}: Automatic Failure`)\r\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\r\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\r\nlet data = item.toObject();\r\ndata.system.specification.value = fixation.result;\r\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\")\r\n }\r\n})\r\n","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\r\nif (!table)\r\n{\r\n\treturn ui.notifications.error(\"Mutation table not found, please ensure a table with the `mutatephys` key is imported in the world.\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\r\n{\r\n args.flags.strikeToStun = true\r\n args.fields.modifier += 20;\r\n args.fields.hitLocation = \"head\";\r\n}\r\nargs.fields.successBonus++;","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\r\n{\r\n\treturn true;\r\n}\r\nelse \r\n{\r\n\targs.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says \"any gossip test can be reversed\" so check it here instead of submission\r\n}\r\n ","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\r\n\r\nif ([\"fire\", \"electricity\", \"poison\"].includes(type))\r\n{\r\n args.applyAP = false;\r\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\r\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\r\nthis.effect.update({\"disabled\": state});\r\n\r\nif (state)\r\n return ui.notifications.info(\"EFFECT.CreatureBackInWater\", {localize: true})\r\n\r\nreturn ui.notifications.info(\"EFFECT.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let terrain = name.split(\"(\")[1].split(\")\")[0]\r\n tests = tests.replace(\"the Terrain\", terrain)\r\n }\r\n else // If no sense specified, provide dialog choice\r\n {\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n coastal : \"Coastal\",\r\n deserts : \"Deserts\",\r\n marshes : \"Marshes\",\r\n rocky : \"Rocky\",\r\n tundra : \"Tundra\",\r\n woodlands : \"Woodlands\"\r\n }, this.item.img), 1, \"Choose Terrain\");\r\n if (choice[0])\r\n {\r\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\r\n tests = tests.replace(\"the Terrain\", choice[0].name + \" Terrain\")\r\n }\r\n }\r\n\r\n this.effect.updateSource({name})\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 5,\r\n \"s\" : 5,\r\n \"t\" : 0,\r\n \"i\" : 5,\r\n \"ag\" : 5,\r\n \"dex\" : 5,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n\r\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n","1CeYp5MlPcH68UIw":"let characteristics = {\r\n \"ws\" : 15,\r\n \"bs\" : 10,\r\n \"s\" : 10,\r\n \"t\" : 15,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Intimidate\", \"Commandement\" , \"Perception\"]\r\nlet skillAdvancements = [10, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Drilled\", \"Menaçant\", \"Robust\"]\r\nlet trappings = [\"Arme simple\", \"Mail Coat\", \"Mail Chausses\"]\r\nlet specialItems = [ \r\n] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\r\nthis.actor.modifyWounds(healed)\r\nthis.script.scriptMessage(`Healed ${healed} Wounds`)","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\r\n\r\nlet loc = \"body\"\r\n\r\nlet APatLoc = this.actor.system.status.armour[loc];\r\n\r\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\r\n\r\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n\r\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\r\n\r\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\nmsg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\nthis.script.scriptMessage(msg)\r\n\r\nlet test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n\tthis.actor.addCondition(\"stunned\");","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\r\n let data = item.toObject();\r\n if (this.item.system.location.key == \"rLeg\")\r\n {\r\n data.system.location.value = \"Right Toe\"\r\n\tdata.system.location.key = \"rToe\";\r\n }\r\n else if (this.item.system.location.key == \"lLeg\")\r\n {\r\n data.system.location.value = \"Left Toe\"\r\n\tdata.system.location.key = \"lToe\";\r\n }\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}\r\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1LDSzXeO5CzXgTOc":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) || args.skill?.name == `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\r\nawait test.roll()\r\nif (test.succeeded)\r\n{\r\n this.effect.delete();\r\n}\r\n","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\", 3)\r\n }\r\n})","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n}\r\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\r\n args.data.damage -= 1","1wKVvxRTHOyV4Qdv":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Sail\"))","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choose Location\");\r\n\r\nlet location = choice[0].id;\r\n\r\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\r\n\r\nif (itemTargeted)\r\n{\r\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\r\n}","1yOvw74jzFfaI87b":"return args.options.reload\r\n","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gained a Stunned Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}\r\n\r\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\r\n{\r\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\r\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\r\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\r\nargs.item.system.damage.value += `+${sl}`;","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\r\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\r\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Armour value\", this.effect.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\r\n\treturn true;\r\n\r\nif (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\r\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\r\n ui.notifications.notify(`${this.effect.name}: Gained ${this.item.Advances} Advantage`)\r\n this.actor.setAdvantage(this.item.Advances)\r\n }\r\n}","2sDH6RvoOAR40oqH":"\r\n\r\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\r\n await test.roll();\r\n if (test.failed) {\r\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\r\n }\r\n}\r\n\r\n// Since wounds change when the effect is deleted, need to wait until after \r\n// the max wounds have been recalculated to apply damage\r\ngame.wfrp4e.utility.sleep(1000).then(async () => {\r\n let roll = await new Roll(\"1d10\").roll();\r\n\r\n roll.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\r\n\r\n})","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\r\n {\r\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\r\n }\r\n} ","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\r\nif (!currentCareer)\r\n{\r\n return;\r\n}\r\n\r\nlet talents = [\"Aethyric Attunement\",\r\n\"Arcane Magic (Any)\",\r\n\"Chaos Magic (Tzeentch)\",\r\n\"Fast Hands\",\r\n\"Instinctive Diction\",\r\n\"Magical Sense\",\r\n\"Petty Magic\",\r\n\"Second Sight\",\r\n\"War Wizard\",\r\n\"Witch!\"].filter(t => !currentCareer.system.talents.includes(t))\r\n\r\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2W9uMTT6iJhfQ044":"let skill = `Trade (${this.item.parenthesesText})`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet craftsmanAdded = this.actor.getFlag(\"wfrp4e\", \"craftsmanAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\tcraftsmanAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.craftsmanAdded\", craftsmanAdded)\r\n}","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\r\n{\r\n args.bleedingHand = true;\r\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\r\n if (!success)\r\n {\r\n args.abort = true;\r\n }\r\n}","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name = data.name += \" (Hearing)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\r\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\r\nif (wounds.value == 0)\r\n return this.script.scriptNotification(\"No effect at 0 Wounds\", \"error\")\r\n\r\nthis.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\r\n}","33US8YRgaMqYu2We":"return !args.options.handling","37UN17gb8suFeZIW":"this.script.scriptMessage(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\r\nargs.actor.system.details.price.gc *= 1.1;","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","3eSaX0BeaUalNkEP":"return args.options.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3hfMQkUKYI4rCuBy":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\r\nif (fatigue)\r\n{\r\n this.script.scriptNotification(\"Removing Fatigued Condition, disabled effect\")\r\n this.effect.update({disabled : true})\r\n await this.actor.removeCondition(\"fatigued\")\r\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choose Location\");\r\nif (choice[0])\r\n{\r\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\r\n}\r\n\r\nlet location = choice[0].id;\r\n\r\nif ([\"lArm\", \"rArm\"].includes(location))\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nif (location == \"body\")\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"prone\");\r\n }\r\n}\r\n\r\nif (location == \"head\")\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\");\r\n }\r\n}","3jm0NoYpgB6ZuUSl":"args.options.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.scriptMessage(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\nthis.actor.addCondition(\"ablaze\");","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\r\n}\r\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\r\nawait args.actor.addCondition(\"prone\")","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\r\n\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\r\n\r\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\r\n{\r\n args.item.qualities.value.push({name : \"penetrating\"})\r\n args.item.qualities.value.push({name : \"impale\"})\r\n}","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\r\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\r\nif (smoothing)\r\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\r\n this.script.scriptMessage(`${this.actor.name} lost 1 point of ${game.wfrp4e.config.characteristics[char]}`)\r\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\r\n }\r\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\r\n \"ws\" : 25,\r\n \"bs\" : 10,\r\n \"s\" : 15,\r\n \"t\" : 15,\r\n \"i\" : 25,\r\n \"ag\" : 20,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 25,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","4OlwxU60UqKg81yb":"const target = args.actor;\r\n\r\nif (target.has(\"Ethereal\") || target.has(\"Corruption\")) {\r\n args.totalWoundLoss += 6;\r\n args.modifiers.other.push({label: this.effect.name, value: 6})\r\n}","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4pQW4WLyhjbZR85k":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += 5;\r\n args.modifiers.other.push({label : this.effect.name, value : 5})\r\n }\r\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\r\nawait args.actor.addCondition(\"entangled\")","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"bleeding\");\r\n}\r\n","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \r\n this.effect.delete();","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4ZR7p8G3OzOBWx0L":"return args.skill?.name !== game.i18n.localize(\"NAME.Endurance\");","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\r\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","52mwb33mGrQjq89B":"return args.skill?.name != game.i18n.localize(\"NAME.Research\");","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\r\nlet damage = args.totalWoundLoss;\r\nlet tb = sourceActor.system.characteristics.t.bonus\r\nargs.abort = `${this.effect.name}: Damage applied to ${sourceActor.name}`;\r\n\r\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\r\n\r\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\r\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\r\n this.script.scriptMessage(`Fortune point stolen from ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n}","5dR7Erj3nwsxLAV7":"let characteristics = {\r\n \"ws\" : 35,\r\n \"bs\" : 10,\r\n \"s\" : 25,\r\n \"t\" : 30,\r\n \"i\" : 30,\r\n \"ag\" : 25,\r\n \"dex\" : 0,\r\n \"int\" : 15,\r\n \"wp\" : 35,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Luck\", \"Resolute\", \"Unshakable\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5Fe1ELaS6Gnvy0Cj":"return args.skill?.name.includes(\"Channelling\") || args.type == \"channelling\" || args.skill?.name == game.i18n.localize(\"NAME.Charm\") || args.skill?.name.includes(\"Language (Magick)\") || args.type == \"cast\"","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JvKJZPcd6Hz5zvn":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 20,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 15,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Leadership\"]\r\nlet skillAdvancements = [15, 15, 10, 5]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\r\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = this.effect.name + \" \" + updateObj.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5JWC0l3JEpOsqbR9":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Dodge\", \"Perception\"]\r\nlet skillAdvancements = [10, 10]\r\nlet talents = [\"Flee!\", \"Marksman\"]\r\nlet trappings = [\"Hand Weapon\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.successBonus += 1\r\n}\r\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.modifier -= 10;\r\n}","5LdJCKfQem1AQK24":"\r\nif (!args.flags.howlingWarpGale)\r\n{\r\n args.fields.modifier -= 10;\r\n args.flags.howlingWarpGale = true; // prevent double application\r\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += ` (Followers of Tzeentch)`;\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\nanimosity.system.specification.value = \"Followers of Nurgle\";\r\n\r\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nlet mutations = [];\r\nlet msg = `Mutations Gained
`\r\nfor(let i = 0; i < roll.total; i++)\r\n{\r\n let item;\r\n let uuid;\r\n let result;\r\n if (i % 2 == 0)\r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n else \r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n msg += `@UUID[${uuid}]{${item.name}}
`\r\n mutations.push(item.toObject());\r\n }\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\r\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5ScjIdRUOxblHdWS":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","5sI9iYh5j2nx2XyT":"return !([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\n\r\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\r\nlet selectedCrew = [];\r\n\r\nwhile (selectedCrew.length < rating && crewList.length) {\r\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\r\n} \r\n\r\nfor (let member of selectedCrew) {\r\n let actor = game.actors.get(member.id);\r\n actor.applyBasicDamage(9, {\r\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \r\n minimumOne: true, \r\n loc: \"roll\", \r\n suppressMsg: false, \r\n hideDSN: false \r\n });\r\n}","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\r\n\r\nif (!visor)\r\n args.fields.modifier -= 10;\r\nelse\r\n args.fields.modifier -= 20;","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\r\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\r\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasColdBlooded = this.actor.has(\"Cold Blooded\")\r\nif (hasColdBlooded === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Cold Blooded Creature Trait and may reverse any failed Willpower based Tests.
\r\nIf they gain a Surprised Condition, this Condition is not lost the first time it should be (which is typically at the end of the Round or if they victim is attacked).
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Use Ward provided by ${this.effect.name}?`,\r\n\tbuttons : {\r\n\t\tyes : {\r\n\t\t\tlabel : \"Yes\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tno : {\r\n\t\t\tlabel: \"No\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n})\r\n\r\nif (useWard)\r\n\targs.ward = 9;","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\r\n{\r\n await this.actor.modifyAdvantage(-2);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.effect.delete();\r\n}","6oSs8qKFNFz2lSmh":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value = 0;\r\n","6qJP0hpShEM43ohx":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Oceans)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Oceans)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lure of the Leviathan.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became @Condition[Stunned] by the sight.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"stunned\");\r\n}","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Regenerate')\r\n\r\nif (regenerate)\r\n{\r\n let effect = regenerate.effects.contents[0]\r\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\r\n \r\n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\r\n}","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"ablaze\")","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nitem = item.toObject()\r\n\r\nitem.system.specification.value = 10;\r\nitem.name += \" (Fire)\"\r\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\r\n\r\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Spellcasting Lore\", this.effect.name, \"\", Object.values(game.wfrp4e.config.magicLores));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\r\n{\r\n\tthis.script.scriptNotification(\"Cannot update Fortune\");\r\n\tdelete args.data.system.status.wounds.value;\r\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n}\r\nelse if (args.test.isFumble && roll != 1)\r\n{\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n}\r\n\r\n","715G1Bf0haOHvmYQ":"return !(args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")))","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7ateEtT5HXg1vObY":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\r\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","7e8FgQUF2oANANmx":"return args.skill?.name == \"Melee (Brawling)\" || args.item?.weaponGroup?.value == \"brawling\"","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\r\n{\r\n ValueDialog.create(\"Enter Wounds Lost to gain SL\", this.effect.name, \"0\").then(async value => {\r\n value = Math.clamped(value, 0, 3)\r\n if (value == 0)\r\n {\r\n return; \r\n }\r\n else if (Number.isNumeric(value))\r\n {\r\n this.script.scriptNotification(`Lost ${value} Wounds`)\r\n this.actor.modifyWounds(-1 * value)\r\n await this.item.system.toggleEquip();\r\n args.test.addSL(value);\r\n args.test.preData.other.push(`${this.effect.name}: +${value} SL`)\r\n }\r\n })\r\n}","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\r\n args.prefillModifiers.modifier += 10; \r\n\r\n\r\nargs.prefillModifiers.successBonus += 1; \r\n","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) \r\n{ \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7OmrMjaU48o2FEZi":"\r\nthis.actor.characteristics.t.bonus = 10\r\n\r\nthis.actor.details.move.value = 0;\r\nthis.actor.details.move.walk= 0;\r\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"fatigued\")\r\n} ","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\r\nlet match = result.text.match(/b>([^<]+)/i);\r\nlet key = match[1];\r\nlet roll = new Roll(\"5d10\");\r\nlet value = undefined;\r\n\r\nawait this.script.scriptMessage(result.text, {flavor: result.title});\r\n\r\nswitch (key) {\r\n case 'Stromfels Triumphant!':\r\n value = 0;\r\n break;\r\n case 'Stromfels Ascends!':\r\n await roll.evaluate();\r\n if (this.actor.system.status.mood.value > 0)\r\n value = -roll.total;\r\n else if (this.actor.system.status.mood.value < 0)\r\n value = roll.total;\r\n break;\r\n case 'No effect.':\r\n break;\r\n case 'Manann Provoked!':\r\n await roll.evaluate();\r\n value = -roll.total;\r\n break;\r\n}\r\n\r\nif (roll._evaluated)\r\n await roll.toMessage();\r\n\r\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasPainless = this.actor.has(\"Painless\");\r\nif (hasPainless === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(\r\n `
${this.actor.prototypeToken.name} has gained the Painless Creature Trait. This\r\n effect lasts for one hour, after which it dissipates and the full effect\r\n of all the imbiber's wounds come crashing down at once.
\r\nNote that this does not prevent the user from acquiring a Critical\r\n Wound or dying from one. It merely allows them to ignore most\r\n of their effects.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\r\n}","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptNotification(`Removed ${poisoned.conditionValue} Poisoned Conditions`)\r\n poisoned.delete(); \r\n}\r\nelse\r\n this.script.scriptNotification(`No Poisoned Conditions`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Claimed ${this.effect.name} Bonus`);","84IB8CWa55XzoAkv":"return ([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","86ivOsBQAuu0UmFg":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\");\r\n}","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\r\n\r\nif (APIgnored)\r\n{\r\n args.modifiers.ap.ignored += APIgnored\r\n args.modifiers.ap.details.push(`${this.effect.name}: Ignore AP with Weakpoints (${APIgnored})`)\r\n}","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\nif (!this.actor.has(\"Undead\") && !this.actor.has(\"Daemonic\")) \r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), { appendTitle: \" - \" + this.effect.name, fields: { difficulty: \"average\" }, context: { failure: `Lost ${strLoss} Strength and ${tghLoss} Toughness` } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n this.actor.update({ \"system.characteristics.s.initial\": this.actor.system.characteristics.s.initial - strLoss, \"system.characteristics.t.initial\": this.actor.system.characteristics.t.initial - tghLoss })\r\n }\r\n })\r\n\r\n}\r\nelse {\r\n this.script.scriptNotification(`${this.actor.name} is immune to ${this.effect.name}`)\r\n}\r\n","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\r\nlet types = {\r\n none : \"None\",\r\n cold : \"Cold\",\r\n corrosion : \"Corrosion\",\r\n fire : \"Fire\",\r\n electricity : \"Electricity\",\r\n poison : \"Poison\",\r\n smoke : \"Smoke\",\r\n various : \"Various\"\r\n}\r\nif (!type)\r\n{\r\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choose Breath\"))[0]?.id;\r\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\r\n}\r\n\r\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\r\n{\r\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\r\n}","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier += 10;\r\n}\r\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier -= 10;\r\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8N3Uqjq1ZxPxo4pk":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Lore\"))","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\r\nargs.item.system.qualities.value.push({name : \"impact\"})\r\n","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\r\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\r\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\r\nif (caster)\r\n{\r\n let healed= caster.characteristics.wp.bonus\r\n this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","8TRiAJ8thIKE4IoL":"\r\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\r\n\r\nargs.actor.characteristics.i.modifier += 10 * SL\r\nargs.actor.characteristics.ag.modifier += 10 * SL","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\r\n\r\nif (weakpointsAP > 0)\r\n{\r\n args.modifiers.ap.ignored += weakpointsAP;\r\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore Weakpoints (${weakpointsAP})`);\r\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Range)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\r\n }\r\n}","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\r\nitem.system.specification.value = 1;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8xqYrBIf1Zhlwizg":"const repaired_message = `Finished raisint the anchor.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'vhard';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\r\nthis.actor.characteristics.int.value= \"-\"\r\nthis.actor.characteristics.wp.value= \"-\"\r\nthis.actor.characteristics.fel.value = \"-\"","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n this.actor.addCondition(\"stunned\") \r\n}\r\nelse if (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\", 2);\r\n}","8zTkDVziBPaNbMQX":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, \"Choose 6 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, \"Choose 9 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\r\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\r\n return\r\n\r\nif (args.test.characteristicKey == \"wp\")\r\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\r\n let data = item.toObject();\r\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\r\n data.system.description.value += \"This Talent also extends to any metal object because of Metallic Affinity
\"\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n})","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptNotification(\"Gained a Festering Wound\")\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Avoided a Festering Wound\")\r\n}\r\n","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\r\nargs.actor.system.details.price.gc *= 1.1;","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name += ` (Smell)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\r\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.name += ` (When Charging)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\r\n\tthis.script.scriptNotification(\"Applied after effects\");\r\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.name += \" (No AP)\"\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\r\n","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"\", true);\r\ncareers.forEach(c => {\r\n if (!c.id)\r\n {\r\n c.id = c._id;\r\n }\r\n});\r\nlet choice = await ItemDialog.create(careers, 1, \"Choose Double Life Career\");\r\nif (choice[0])\r\n{\r\n let career = await fromUuid(choice[0].uuid);\r\n let data = career.toObject();\r\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\r\n}\r\n","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\r\n{\r\n this.script.scriptMessage(`Gained ${Math.abs(args.test.result.SL)} Corruption points`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (args.test.failed && this.actor.type == \"character\")\r\n {\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\r\n }\r\n}","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","A1odAcuRbq9797ZB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Polearm)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nApply damage with ${this.effect.name} to attacker?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\r\n }\r\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\r\n{\r\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\r\n\tif (args.wardRoll >= args.ward && args.ward > 3)\r\n {\r\n let newWard = Math.max(3, args.ward - 1)\r\n this.script.scriptMessage(\"Ward improved to \" + newWard)\r\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\r\n }\r\n\r\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n\r\n\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\r\n\r\nlet lostFingers = this.actor.flags.useless[key] || 0;\r\n\r\nlostFingers += 1\r\n\r\nthis.actor.flags.useless[key] = lostFingers;\r\n\r\nif (lostFingers >= 4)\r\n{\r\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\r\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\r\n{\r\n if (effect.isCondition)\r\n {\r\n effect.delete();\r\n }\r\n}","cqYgZQk1C3kMARy5":"return args.skill?.name !== game.i18n.localize(\"NAME.Haggle\");","CS6O7UUjQcUJoOUP":"if (args.test.failed)\r\n {\r\n let SL = Number(args.test.result.SL)\r\n if (SL <= -2 && SL > -4)\r\n this.actor.addCondition(\"stunned\")\r\n else if (SL <= -4 && SL > -6)\r\n this.script.scriptMessage(this.actor.prototypeToken.name + \" must make a Willpower Test or fall @Condition[Prone].\")\r\n else if (SL <= -6)\r\n this.actor.addCondition(\"unconscious\")\r\n }","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cTYNaKbepMwqYsZ8":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\r\n\r\nthis.actor.system.characteristics.s.modifier += sl * 10;\r\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\r\nlet data = item.toObject();\r\n\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tgroup = this.item.parenthesesText\r\n}\r\n\r\nelse \r\n{\r\n\tgroup = await ValueDialog.create(\"Enter Hatred Group\", \"Hatred Group\")\r\n\r\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\r\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\r\n}\r\n\r\n\r\ndata.name = data.name.replace(\"Target\", group);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cV9JiAgUPOeUHKnS":"args.fields.successBonus++;\r\nif (args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\"))\r\n{\r\n args.fields.modifier += 10;\r\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.actor.modifyAdvantage(-3);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Moderate Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(`${this.effect.name}: \r\n @Corruption[moderate]{Moderate Exposure to Corruption}
\r\n ${args.actor.prototypeToken.name} must take an \r\n Corruption (Moderate) Test`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value -=2\r\n if (args.item.cn.value < 0)\r\n args.item.cn.value = 0\r\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\r\nthis.actor.characteristics.i.bonus = 1;\r\n\r\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\r\n{\r\n skill.system.total.value= Math.min(skill.system.total.value, 10)\r\n}","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\r\n\r\n","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dAMtbn3uQwF8KpKU":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\");","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\r\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\r\nconsole.log(this.actor);\r\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\r\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\n\r\nsense.name += \" (Sight)\";\r\nsense.system.tests.value = sense.system.tests.value.replace(\"Sense\", \"Sight\")\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\r\n}","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\r\n\r\nthis.actor.update({\"system.status.fate.value\" : current + 1})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`)","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","dfEgat3jz4EtWszH":"return args.skill?.name == \"Stealth (Urban)\"","dfnCK8jCPXNLM7Gh":"let aoeDamage = this.effect.sourceTest.result.damage - 5 // Easily handle magic missile damage by just subtracting 5 from the item's (which has +10 base)\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - Ablaze`})\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Trade (Apothecary)\" || args.skill?.name == \"Trade (Alchemist)\"","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\r\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","dIxYt421K010eogY":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.ag.value\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\r\n{\r\n return\r\n}\r\n\r\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\ntooth = tooth.toObject()\r\ntooth.system.specification.value = 3\r\ntooth.system.qualities.value = [{name : \"magical\"}]\r\n \r\nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nclaw = claw.toObject()\r\nclaw.system.specification.value = 4\r\nclaw.system.qualities.value = [{name : \"magical\"}]\r\nclaw.name = \"Claw\"\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n args.abort = \"Missed - Headless\"\r\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Ribs\";\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create(\"Select the column to roll on to determine Beast Head\", \"Select Column\", \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\r\n\r\nif (column)\r\n{\r\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\r\n this.script.scriptMessage(`${result.title}
${result.result}`);\r\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n let item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n this.item.delete();\r\n }\r\n}","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\r\n{\r\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\r\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"blinded\");\r\n await this.actor.addCondition(\"fatigued\")\r\n} ","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dsXGavzXLerXR8Xg":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\"))","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\r\n args.fields.slBonus += 2;\r\nelse\r\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","dULCkRxtisuzQyuK":"if (args.options.condition) \r\n this.effect.delete();","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athletics\"","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \r\n{\r\n\tlet roll = await new Roll(\"1d10\").roll()\r\n\tawait roll.toMessage(this.script.getChatData());\r\n\tif (roll.total == 9 || roll.total == 10)\r\n\t{\r\n\t this.script.scriptMessage(`${this.actor.name} attached to ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} gorges and falls off.`)\r\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \r\n\t}\r\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\r\n\r\nthis.item.updateSource({\"system.location.key\" : letter + \"Finger\"})\r\n\r\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\r\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\r\n let days = new Roll(injury.system.duration.value).roll( {async: false} ).total\r\n let num = 1 + Number(this.effect.sourceTest.result.SL);\r\n let roll = await new Roll(num+'d10').roll({async: false})\r\n await roll.toMessage(this.script.getChatData())\r\n let newDays = Math.max(days - roll.total, 1)\r\n this.actor.updateEmbeddedDocuments(\"Item\", [{_id: injury.id, 'system.duration.value': newDays} ])\r\n let message = \"Injury reduces to \"+newDays+\" (-\" + roll.total + \") instead of \"+days\r\n this.script.scriptMessage(message)\r\n}\r\n","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Melee (Brawling)\" && args.item?.weaponGroup?.value != \"brawling\"","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n await this.actor.addCondition(\"broken\");\r\n}","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\r\n}","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\r\n args.actor.addCondition(\"unconscious\");\r\n}","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\r\n\r\nawait args.actor.addCondition(\"ablaze\", 2);\r\nawait args.actor.addCondition(\"prone\");","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\r\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\r\n\r\nif (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.script.scriptNotification(`Adding ${frenzy.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\r\n}\r\nelse if (this.actor.system.status.advantage.value >= 1)\r\n{\r\n let data = hatred.toObject();\r\n data.system.specification.value = \"Close Combat opponents\"\r\n this.script.scriptNotification(`Adding ${hatred.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\r\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\r\n{\r\n blinded.delete()\r\n}","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`)\r\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n fatigued.delete();\r\n this.script.scriptNotification(\"Removed Fatigued\")\r\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\n\r\nawait test.roll();","E6v4YZrvFikbdXoO":"const locations = [];\r\n\r\nfor (let [key, loc] of Object.entries(args.AP)) {\r\n if (loc.layers?.some(i => i.metal))\r\n locations.push(key);\r\n}\r\n\r\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`)\r\n}","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (this.item.system.location.key == \"rArm\")\r\n{\r\n\tdata.system.location.value = \"Right Hand\"\r\n\tdata.system.location.key = \"rHand\"\r\n}\r\nelse if (this.item.system.location.key == \"lArm\")\r\n{\r\n\tdata.system.location.value = \"Left Hand\"\r\n\tdata.system.location.key = \"lHand\"\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","EBNrA6FNX4d05EUx":"return !args.options.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Riverways)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Riverways)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lures of Lurkerfish.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became beguiled by the sight and unable to perform any action except moving towards the light.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"unconscious\");\r\n}","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Yield or die!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.script.scriptNotification(\"Adding \" + data.name);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\r\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","EDAMEOzdBfkoKHxP":"return args.skill?.name !== game.i18n.localize(\"NAME.Navigation\");","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.script.scriptMessage(\"Can perform an Action or Move (choose one)\")\r\n}\r\nelse \r\n{\r\n this.script.scriptMessage(\"Cannot perform an Action or Move this round\") \r\n}","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\r\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\r\nif (trait && trait.name.includes(\"Bite\") && woundLossEffect)\r\n{\r\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\r\n}","eGQAyzCFZAEQhyJl":"const roll = new Roll(\"2d10\");\r\nawait roll.evaluate();\r\nconst money = game.wfrp4e.market.addMoneyTo(this.actor, `${roll.total}b`);\r\nawait this.actor.updateEmbeddedDocuments(\"Item\", money);\r\nthis.script.message(game.i18n.format(\"SCRIPT.Silvertide\", {name: this.actor.name, pennies: roll.total}));","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\r\nlet data = item.toObject();\r\ndata.name += \" (Enemy)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\r\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\r\nlet data = item.toObject();\r\ndata.name += \" (To Be Determined)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\r\n{\r\n this.script.scriptNotification(\"Adding Prone\");\r\n this.actor.addCondition(\"prone\")\r\n}","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\r\nuses++;\r\nthis.script.scriptNotification(`Used ${uses} times`)\r\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\r\nif (uses >= 3)\r\n{\r\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\r\n\tthis.script.scriptNotification(`Used up`);\r\n}\r\n","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\r\nthis.script.scriptMessage(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`)\r\n\r\nthis.actor.hasCondition(\"bleeding\")?.delete()\r\nthis.actor.hasCondition(\"fatigued\")?.delete()\r\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ePPgxQOqL1Uhz2k9":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Bow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `
\r\n Add Option?\r\n
\r\nFinished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\r\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\r\n let wp = caster.system.characteristics.wp.value\r\n if (wp > this.actor.system.characteristics.t.value) {\r\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\r\n this.actor.update({ \"system.status.wounds.value\": 0 })\r\n this.actor.addCondition(\"dead\")\r\n }\r\n else {\r\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\r\n ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\r\n })\r\n }\r\n }\r\n}","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Entertain (Singing)\";","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.name = this.effect.name;\r\ndata.type = 'trapping';\r\ndata.system.trappingType = {value: 'clothingAccessories'};\r\ndata.system.equipped = {value: true};\r\n\r\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\r\neffectData.disabled = false;\r\neffectData.system.transferData.equipTransfer = true;\r\ndata.effects = [effectData];\r\n\r\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Ride (Horse)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 0,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Consume Alcohol\", \"Row\", \"Sail\", \"Swim\"]\r\n let skillAdvancements = [10, 10, 10, 10]\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","FYUPfYyTYZkxRLFT":"return ![\"NAME.Endurance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\r\nawait roll.toMessage(this.script.getChatData());\r\nthis.script.scriptNotification(`Healed ${roll.total} Wounds`)\r\nthis.actor.corruptionDialog(\"moderate\")\r\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\r\nawait test.roll()\r\n// If they fail, they acquire 2 Poisoned Conditions. \r\nif (test.failed) \r\n{\r\n this.actor.addCondition(\"poisoned\", 2)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained 2 @Condition[Poisoned] Conditions.
\r\nAny being with the Bestial Creature Trait that bites them and takes damage will not bite them again during a hostile encounter, though the creature may still attack them in other ways.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\r\nelse if (test.succeeded) \r\n{\r\n // Don't attempt to add Corrosive Blood if actor already has it\r\n const hasCorrosiveBlood = this.actor.has(\"Corrosive Blood\")\r\n if (hasCorrosiveBlood !== undefined) return \r\n\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n const duration = 3 + parseInt(test.result.SL)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} gains the Corrosive Blood Trait for ${duration} rounds.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Social Group)\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let group = name.split(\"(\")[1].split(\")\")[0]\r\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\r\n }\r\n else if (!name.includes(\"(\"))\r\n {\r\n let value = await ValueDialog.create(\"Enter Etiquette Group\", this.effect.name);\r\n if (value)\r\n {\r\n name = this.item.name + ` (${value})`;\r\n tests = this.item.system.tests.value.replace(\"Social Group\", value);\r\n }\r\n }\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \r\n// of the target point is splashed with mystic poison, \r\n// suffering 1d10 + SL damage which ignores Armour Points\r\n\r\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\r\n\r\nawait damage.toMessage(this.script.getChatData())\r\n\r\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\r\n damage.total,\r\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\r\n))\r\n\r\n// ... and gains the Poisoned Condition\r\n\r\nthis.actor.addCondition(\"poisoned\")","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\r\nargs.actor.addCondition(\"ablaze\", ablaze)","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\r\n amberTalons.name = \"Amber Talons\";\r\n amberTalons.img = this.effect.img;\r\n amberTalons.system.damage.value = \"SB + WPB\"\r\n amberTalons.system.equipped = true;\r\n amberTalons.system.qualities.value.push({name : \"magical\"})\r\n amberTalons.effects.push({\r\n label : \"Amber Talons\",\r\n transfer: false,\r\n icon : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\r\n flags : {\r\n wfrp4e : {\r\n applicationData : {\r\n documentType : \"Item\"\r\n },\r\n scriptData : [{\r\n trigger : \"applyDamage\",\r\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\r\n }]\r\n }\r\n }\r\n })\r\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[1].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\r\n{\r\n \r\n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\r\n{\r\n\targs.fields.lostHand = true;\r\n\targs.fields.modifier += -20;\r\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","GbPEy22VuCNzlNv2":"return !this.actor.isMounted || (!args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) && !args.options.dodge)","Gc8S5TYlVdV8NnOT":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, context: { failure: \"Gained a Broken Condition\", success: \"Resisted the Broken Condition\" } })\r\n\r\n await test.roll();\r\n\r\n if (!test.succeeded)\r\n {\r\n args.actor.addCondition(\"broken\");\r\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\r\n{\r\n let removeRepeater = false\r\n if(!this.item.system.offhand.value) // main\r\n {\r\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\r\n if (offhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n else // offhand\r\n {\r\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\r\n if (mainhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n \r\n if (removeRepeater)\r\n {\r\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\r\n }\r\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\r\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\r\nawait test.roll();\r\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n this.actor.addCondition(\"fatigued\") \r\n })\r\n}","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\r\n args.actor.addCondition(\"ablaze\")","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\r\n\r\neffects.splice(effects.length - 1);\r\n\r\nif (effects.length == 0)\r\n{\r\n return this.script.scriptNotification(\"All Effects have been used. Reset to select them again\")\r\n}\r\nlet choice = await ItemDialog.create(effects, 1, \"Choose Power to Gain\");\r\n\r\nif (choice[0])\r\n{\r\n choice[0].update({disabled : true})\r\n let effect = choice[0].convertToApplied();\r\n effect.name += ` (${this.effect.name})`\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\r\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\r\n{\r\n e.update({disabled: false})\r\n}\r\nthis.script.scriptNotification(\"Reset Powers\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Stealth (Underground)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Venom Strength\", this.effect.name, \"\", Object.values(game.wfrp4e.config.difficultyNames));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\r\n{\r\n args.item.system.AP.head = 0;\r\n}","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\r\n{\r\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\r\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\r\n\r\nif (value === 0)\r\n args.actor.system.status.mood.value = 0;\r\nelse if (value !== undefined)\r\n args.actor.system.status.mood.value += value;","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData())\r\n if (roll.total <= 3)\r\n {\r\n this.actor.addCondition(\"blinded\", 3)\r\n }\r\n else if (roll.total <= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n else if (roll.total <= 9)\r\n {\r\n this.actor.addCondition(\"stunned\");\r\n }\r\n else if (roll.total == 10)\r\n {\r\n this.actor.addConditon(\"unconscious\")\r\n }\r\n}","goz8yTlMozlsz3uY":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\r\n args.test.preData.canReverse = true","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","gqZLfIr6svrtdwdC":"return args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\") && args.skill?.name != game.i18n.localize(\"NAME.MeleeBrawling\") && args.weapon?.system?.weaponGroup?.value != \"brawling\"","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData());\r\n if (roll.total == 9)\r\n {\r\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\r\nif (turns <= 0) return;\r\nturns--;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\nconst target = canvas.scene.tokens.get(targetId);\r\n\r\nif (turns > 0) {\r\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\r\n\r\n return this.script.scriptMessage(`${speaker.alias} continues wrapping itself around ${target.name}. It will be able to start crushin in ${turns} turns.
`);\r\n}\r\n\r\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\r\n this.script.scriptMessage(`${speaker.alias} can resume crushing ${target.name} with the Extended Test.
`);\r\n\r\n return;\r\n}\r\n\r\nconst extendedTestData = {\r\n name: this.effect.name,\r\n type: \"extendedTest\",\r\n img: this.effect.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target.actor.system.status.wounds.value\r\n },\r\n test: {\r\n value: 'Strength'\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: \"challenging\"\r\n }\r\n }\r\n};\r\n\r\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\nconst extendedTest = extendedTests[0];\r\n\r\nthis.script.scriptMessage(`${speaker.alias} finished wrapping itself around ${target.name}. It can now begin crushing via the @UUID[${extendedTest.uuid}] Extended Test.
`);\r\n\r\nlet effect = {\r\n name: extendedTest.name,\r\n icon: extendedTest.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: extendedTest.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.effects.find(e => e.id === id);\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n this.script.scriptMessage(\\`${speaker.alias} crushed the ${target.name}. Boat shatters, reduced to a mass of flotsam.
\\`);\r\n await effect.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n}\r\n\r\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","GsAyB5xnK3ASeoah":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\r\n game.dice3d?.showForRoll(roll);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\r\n","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\r\nargs.fields.slBonus -= specification;","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Gained a Poisoned Condition\", success: \"Resisted the poison\" }})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"poisoned\");\r\n }\r\n}\r\n ","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\r\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\r\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\r\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\r\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\r\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\r\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\r\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\r\n\r\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Select Wind\")\r\n//this.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\r\n\r\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\r\n\r\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\r\nif (bleeding)\r\n{\r\n this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`)\r\n bleeding.delete(); \r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(`No Bleeding Conditions`)\r\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\r\n{\r\n args.test.options.criminal = true;\r\n let currentCareer = args.test.actor.system.currentCareer;\r\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\r\n if (coin != \"g\") // Don't roll for gold, just use standing value\r\n {\r\n dieAmount = dieAmount + \"d10\";\r\n }\r\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\r\n let moneyString = `${moneyEarned}${coin}`\r\n let transactionString = `${moneyEarned}${term}`\r\n\r\n this.script.scriptMessage(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\r\n{ \r\n args.test.result.description = \"Astounding Failure\";\r\n args.test.result.outcome = \"failure\";\r\n ChatMessage.create({content : \"SQUEAK\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\r\n}","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\r\n\r\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\r\n\r\nthis.script.scriptMessage(`Attaches to ${args.actor.name}`)","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\r\n test.roll();\r\n})","h766UvswLCsxcMow":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : -15,\r\n \"t\" : 0,\r\n \"i\" : 20,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 5,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\r\nlet skillAdvancements = [7, 60, 7]\r\nlet talents = [\"Menacing\", \"Shadow\"]\r\nlet traits = [\"Distracting\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\r\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\r\nthis.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Corruption Point Gained\" } })\r\nawait test.roll();\r\n\r\nif (test.failed && args.actor.type == \"character\") \r\n{\r\n let msg = \"\"\r\n msg += `${this.actor.prototypeToken.name} gained a Corruption point
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${args.actor.prototypeToken.name} gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}`\r\n }\r\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\r\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Flail)\")\r\n{\r\n args.item.system.modifier.value += 10;\r\n}","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\r\n\r\nwoundsGained = Math.floor(woundsGained / 2)\r\n\r\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\r\n\r\nthis.script.scriptMessage(`Gains ${woundsGained} Wounds`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n this.script.scriptMessage(`Fumble: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","HdTuY2IGhdlMDOy3":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Animal Telepathy\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \r\n// in melee combat must make an Average (+20) Endurance Test \r\n// or take a Stunned Condition\r\n\r\n\r\nif (args.totalWoundLoss > 1) {\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await args.actor.addCondition(\"stunned\");\r\n }\r\n}","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","HfZAQWoY8n3clLlo":"if (!args.itemCreated) return;\r\nif (args.itemCreated.type !== \"critical\") return;\r\nif (args.itemCreated.system.location.value.toLowerCase() !== \"head\") return;\r\nif (Number(args.itemCreated.system.wounds.value) > 0) {\r\n this.script.message(game.i18n.format(\"SCRIPT.Sallet\", {name: args.itemCreated.parent.name, wounds: args.itemCreated.system.wounds.value}))\r\n}","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : 5,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Cool\", \"Dodge\"]\r\n let skillAdvancements = [10, 10]\r\n let talents = [\"Combat Reflexes\"]\r\n let trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), game.wfrp4e.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\r\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choose a Skill\")\r\n\r\n items = items.map(i => i.toObject())\r\n items.forEach(i => i.system.advances.value = 20)\r\n\r\nitems.forEach(i => equip(i))\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.data.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.data.equipped = true\r\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\r\n item.data.worn = true\r\n}","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\r\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\r\n{\r\n\treturn;\r\n}\r\n\r\nlet index = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(index, 1, \"Choose a Lore\")\r\nlet text;\r\nif (!choice[0])\r\n{\r\n let custom = await Dialog.wait({\r\n title : \"Enter Lore\",\r\n content : \"\",\r\n buttons : {\r\n confirm : {\r\n label : game.i18n.localize(\"Confirm\"),\r\n callback : (dlg) => {\r\n return dlg.find(\"input\")[0].value\r\n }\r\n }\r\n },\r\n default : \"confirm\",\r\n close : () => {\r\n return \"\"\r\n }\r\n }) \r\n text = custom || \"\"\r\n}\r\nelse \r\n{\r\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\r\n}\r\n\r\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\r\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.\r\n Select your choice\r\n
\r\n${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ht7csu1KImHzpzL5":"return args.item?.actor?.type !== \"vehicle\" || args.item?.type !== \"weapon\" || !args.item.name.includes(\"Cannon\");","huJcVpVn6Q7sQkFC":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 1;\r\n","HUKzssLxeQo1wbx9":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n this.actor.addCondition(\"bleeding\")","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Duration)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\r\n }\r\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let damage = this.effect.sourceTest.result.damage\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n}","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\r\n{\r\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\r\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\r\n{\r\n\tgame.wfrp4e.utility.sleep(200).then(() => {\r\n\t\tthis.script.scriptMessage(\"Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location\")\r\n\r\n\t})\r\n}","HYrl5aNMm8BAdqH7":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\r\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot cast Spells or use Prayers\");\r\n}\r\nelse return true;","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","I9QAPKbaXwMMMBT4":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\r\n await secondTest.roll();\r\n if(secondTest.failed)\r\n {\r\n this.effect.updateSource({name : \"Taste of Death\"})\r\n await this.actor.addCondition(\"fatigued\");\r\n }\r\n else \r\n {\r\n return false;\r\n }\r\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.addSystemEffect(\"convulsions\")\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Symptom[Convulsions] for [[1d10]] hours`)\r\n }\r\n}","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif(test.failed)\r\n{\r\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\r\n}","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\tthis.script.scriptNotification(\"Immune to Fear\");\r\n\targs.extendedTest.delete();\r\n\targs.abort = true;\r\n}\r\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyFear(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postFear(value, name)\r\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.s.bonus\r\ndata.system.description.value = \"\"\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 1\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\r\n}","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\r\n return\r\n\r\nlet reach = args.item.reach.value\r\nlet reachNum = game.wfrp4e.config.reachNum[reach]\r\nreachNum = Math.min(reachNum + 2, 7)\r\n\r\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\r\n\r\nargs.item.reach.value = key","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\r\n// or the state of being Stinking Drunk are eliminated. \r\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\r\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\r\n\r\n// The drinker is thereafter Fatigued \r\n// for a number of hours equal to 10 minus their Toughness Bonus — \r\n// nothing but time and rest can eliminate this penalty.\r\nawait this.actor.addCondition(\"fatigued\")\r\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\r\nthis.effect.updateSource({\"duration.rounds\" : duration});\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.
`, \r\n{\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n}) ","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\r\n\r\nthis.script.scriptMessage(`this.actor.prototypeToken.name healed ${healed} Wounds`);\r\n\r\nthis.actor.modifyWounds(healed)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n let spells = this.actor.itemTypes.spell;\r\n if (spells.length)\r\n {\r\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\r\n this.script.scriptMessage(`Loses access to ${chosen.name}`)\r\n chosen.update({name : chosen.name += \" (LOST)\"})\r\n }\r\n}\r\n\r\n\r\n","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Arcane Magic (Fire)\"))\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\r\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\r\n let staunch = ~~args.test.result.SL + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 2;\r\n","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 3\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\r\n{\r\n\targs.flags.amputatedFootOrLeg= true;\r\n\targs.fields.modifier -= 20;\r\n}","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\r\n{\r\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\r\n}","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n await this.actor.addCondition(\"grappling\")\r\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\r\nfor (let i=0; iOnce they fall asleep however, it is almost impossible. At this point the victim must make a Hard (-20) Endurance Test. If they fail, they never awaken.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\r\nif (this.actor.flags.holed.reminded === true) return;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nthis.script.scriptMessage(`${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.
`);\r\n\r\nthis.actor.flags.holed.reminded = true;","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\r\n{\r\n this.actor.removeCondition(\"broken\")\r\n this.script.scriptNotification(`Cannot have Broken`);\r\n}","iT0h3VZLEBQnn5Bx":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\") && args.skill?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\");","iT3C15fMyQrj1RmG":"if (this.actor.has(\"Undead\") && this.actor.has(\"Ethereal\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n this.actor.addCondition(\"stunned\")\r\n })\r\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\r\n\r\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\r\n{\r\n return;\r\n}\r\n\r\nlet god = await ValueDialog.create(\"Enter a Deity\", \"Blessed\")\r\n\r\nif (god)\r\n{\r\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Loading Prayers\")\r\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\r\n if (blessings.length)\r\n {\r\n this.script.scriptNotification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\r\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)\r\n }\r\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\r\n await this.actor.update({\"system.details.god.value\": god})\r\n}","iuSoKntfJ4eAPafQ":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\r\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\r\n\r\nif (result.object.documentId && result.object.documentCollection)\r\n{\r\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\r\n if (item)\r\n { \r\n let data = item.toObject();\r\n // Some items need sourceTest for their effects\r\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\r\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\r\n }\r\n}\r\n\r\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet witchAdded = actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\twitchAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\r\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","J0IWUhxada2ONowP":" return args.skill?.name == \"Entertain (Sing)\" || args.skill?.name == \"Entertain (Singing)\" || (args.skill?.name.includes(\"Language\") && (args.skill?.name.includes(\"Magick\") || args.skill?.name.includes(\"Elthárin\") || args.skill?.name.includes(\"Cathayan\")))","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\r\n{\r\n args.item.system.qualities.value.push({name : \"penetrating\"})\r\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\r\n{\r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n wardData = ward.toObject()\r\n wardData.system.specification.value = \"8\"\r\n \r\n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\r\n mrData = mr.toObject()\r\n mrData.system.specification.value = 2\r\n \r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\r\n}\r\nelse\r\n{\r\n this.effect.deleteCreatedItems()\r\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\r\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\r\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \r\n{\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Minor Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(\r\n `${this.effect.name}: \r\n @Corruption[minor]{Minor Exposure to Corruption}Damage all Items carried?
`})\r\n\tif (damageItems)\r\n\t{\r\n\t\tlet msg = ``\r\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\r\n\t\tlet armour = args.actor.itemTypes.armour.filter(i => i.isEquipped);\r\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\r\n\t\tfor(let item of weapons)\r\n\t\t{\r\n\t\t\tif (item.system.properties.qualities.shield)\r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1);\r\n\t\t\t}\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of armour)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of trappings)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tif (msg)\r\n\t\t{\r\n\t\t\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nif (type == \"fire\")\r\n{\r\n\tawait args.actor.addCondition(\"ablaze\");\r\n}\r\n\r\nif (type == \"electricity\")\r\n{\r\n\tawait args.actor.addCondition(\"stunned\");\r\n}\r\n\r\nif (type == \"poison\")\r\n{\r\n\tawait args.actor.addCondition(\"poisoned\");\r\n}\r\n\r\n","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}\r\n","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(\"Athletics\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"poisoned\")","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\r\nif (blinded)\r\n{\r\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\r\n blinded.system._scripts = null;\r\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\r\nwoundsGained = Math.ceil(woundsGained / 2)\r\n\r\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\r\n\r\nargs.actor.addCondition(\"fatigued\")\r\nargs.attacker.hasCondition(\"fatigued\")?.delete();\r\n\r\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\r\n\r\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\r\n{\r\n await broken.delete();\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\r\n this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\r\n}","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","JhbZWZhOJ23yOBmG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'hard';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","JhCMYHHYA860Kka8":"return !this.actor.attacker || args.item?.system?.attackType !== \"melee\" || args.skill?.name !== game.i18n.localize(\"NAME.Dodge\");","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","JibNjuQrJRnY0yf9":"return this.actor.flags.useless.rEye && this.actor.flags.useless.lEye && ([\"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) || args.weapon || args.options.dodge)","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Language (Magick)\", \"Channelling (Hysh)\"].includes(args.skill?.name) ","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\r\n{\r\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\r\n args.test.result.critical += ` (+${args.test.result.critModifier})`\r\n}","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\r\n","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.removeCondition(\"surprised\")\r\n this.script.scriptMessage(`Cannot be Surprised`);\r\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\r\n\r\nreturn true; // No need to show this in the dialog","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\r\n\targs.abort = `${this.effect.name}: Ignored`","jOm7RxGFm1y6mCpN":"return args.options.crewTest.name.includes(\"Batten Down\");","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\r\nif (caster)\r\n{\r\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\r\n await this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"vhard\"}, context : {success : \"1 Corruption point that was gained within the last hour is removed.\", failure: \"Nothing happens\"}})\r\n await test.roll();","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Poisoned Condition Gained\", success: \"Resisted Poisoned Condition\" } })\r\n await test.roll();\r\n if (test.failed)\r\n { \r\n args.actor.addCondition(\"poisoned\");\r\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\r\n {\r\n args.actor.addCondition(\"unconscious\")\r\n }\r\n }\r\n}\r\n\r\n // else\r\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\r\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\r\nif (tokenImg)\r\n{\r\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \r\n }\r\n else \r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Token Image path configured. The image path should be set in the first line of this script.\", \"error\");\r\n}","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\r\n this.actor.addCondition(\"dead\")","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\r\n {\r\n args.addImpact = true\r\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Added\")\r\n }","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\r\n{\r\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\r\n}","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} is Immersed within a Sea Elemental and suffers from @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}
They may attempt to escape by freeing themselves from the @Condition[Entangled} Condition as if they were @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} by the Sea Elemental, making an Opposed Strength Test against its Strength of 59.
`);","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\r\n\r\nlet options = {\r\n appendTitle : \" – \" + this.effect.name,\r\n skipTargets: true,\r\n fields: {difficulty: 'average'},\r\n characteristic: 'wp',\r\n}\r\n\r\nlet test = await args.actor.setupSkill('Cool', options);\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n await this.effect.delete();\r\n args.extraMessages.push(`${args.actor.name} lost ${args.totalWoundLoss} Wounds to an attack, which caused it to let go of ${target.name}.`);\r\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\r\nawait this.actor.addCondition(\"deafened\")\r\nawait this.actor.addCondition(\"fatigued\")","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\r\nargs.actor.addCondition(\"ablaze\", ablaze)","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\r\n let value = await ValueDialog.create(\"Armoured Value\", \"Enter the Armoured value\");\r\n if (value) {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();\r\nreturn true;","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n\t args.actor.addCondition(\"stunned\");\r\n }\r\n\targs.actor.hasCondition(\"bleeding\")?.delete()\r\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst roll = new Roll(`2d10 - ${sin}`);\r\nawait roll.evaluate();\r\nawait roll.toMessage({flavor: `${this.effect.name}`});\r\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\r\n{\r\n args.test.result.damage +=1 \r\n args.test.result.additionalDamage += 1\r\n}","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\r\nawait this.actor.addCondition(\"ablaze\")","kEaBLoIHt1FpQVKq":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Invisibility\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\r\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\r\nlet choice = [];\r\n\r\nif (!specification || specification == \"Trained Skills\")\r\n{\r\n choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n broken: \"Broken\",\r\n drive: \"Drive\",\r\n entertain: \"Entertain\",\r\n fetch: \"Fetch\",\r\n guard: \"Guard\",\r\n home: \"Home\",\r\n magic: \"Magic\",\r\n mount: \"Mount\",\r\n war: \"War\"\r\n }, this.effect.img), \"unlimited\", \"Choose Training\");\r\n}\r\nelse \r\n{\r\n choice = specification.split(\", \").map(i => {\r\n return {\r\n id : i.toLowerCase(),\r\n name : i\r\n }\r\n });\r\n}\r\n\r\nif (choice.length)\r\n{\r\n let changes = foundry.utils.deepClone(this.effect.changes);\r\n\r\n for(let training of choice)\r\n {\r\n switch(training.id)\r\n {\r\n case \"broken\" : \r\n let roll = await new Roll(\"2d10\").roll(); \r\n roll.toMessage(this.script.getChatData());\r\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\r\n\r\n if (this.actor.type == \"creature\")\r\n {\r\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\r\n if (bestial)\r\n {\r\n bestial.update({\"system.disabled\" : true})\r\n }\r\n }\r\n break;\r\n\r\n case \"drive\" : \r\n\r\n break;\r\n\r\n case \"entertain\" : \r\n\r\n break;\r\n\r\n case \"fetch\" : \r\n\r\n break;\r\n\r\n case \"guard\" : \r\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\r\n setProperty(args, \"options.keepId\", true);\r\n break;\r\n\r\n case \"home\" : \r\n\r\n break;\r\n\r\n case \"magic\" : \r\n\r\n break;\r\n\r\n case \"mount\" : \r\n\r\n break;\r\n\r\n case \"war\" : \r\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\r\n break;\r\n }\r\n }\r\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\r\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\r\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\r\nif (!table)\r\n{\r\n\tui.notifications.error(\"Cannot find table with key: mutatemental\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\nteeth = teeth.toObject();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","KIoVBinAZK8sMOqD":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 10,\r\n \"bright\": 5,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"flame\",\r\n },\r\n \"color\": \"#ac9e6c\",\r\n }}));","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (opposedResult.differenceSL < 6)\r\n {\r\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\r\n }\r\n else if (opposedResult.differenceSL >= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n}","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \r\n{\r\n this.item.system.reduceQuantity();\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\r\n await test.roll();\r\n if (test.succeeded) \r\n {\r\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(\"Heal Test failed!\", \"error\")\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"None left!\", \"error\")\r\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\r\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) \r\n {\r\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`)\r\n }\r\n })\r\n }","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll(); \r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}\r\n ","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\r\n{\r\n\targs.flags.lostFingers = true;\r\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\r\n}","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Schemer\", \"Second Sight\"].map(game.wfrp4e.utility.findTalent))\r\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\r\nlet data = item.toObject();\r\ndata.name += ` (Disease)`;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSjsDlsx3DD6cT16":"return args.skill?.name != game.i18n.localize(\"NAME.Bribery\");","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\r\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptMessage(\"Immune to Poisoned\")\r\n poisoned.delete()\r\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\r\nargs.actor.system.details.man -= 1;\r\nargs.actor.system.status.carries.max *= 1.5;","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\r\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\r\nthis.actor.hasCondition(\"deafened\")?.delete()\r\nthis.actor.hasCondition(\"unconscious\")?.delete()","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Ranged (Bow)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","KyswmGj1uG3QS3ng":"args.applyAP = false;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","l1ntrpa8RE3Lg5xE":"return args.skill?.name === game.i18n.localize(\"NAME.Perception\");","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\r\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`Apply blunt damage reduction? (-3)
`})\r\n\r\nif (blunt)\r\n{\r\n args.modifiers.other.push({label : this.effect.name, details : \"Blunt Damage Reduction\", value : -3})\r\n}","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\r\n\r\nargs.fields.successBonus += 2 + amount;","lhemR8EP5tGNKout":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : \"Suffer Creeping Irrationality\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n msg = `@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: ${Math.ceil(CONFIG.Dice.randomUniform() * 10)}
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${this.actor.prototypeToken.name} also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}
`\r\n let newCorruption = Number(this.actor.status.corruption.value) + 1\r\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\r\n }\r\n\r\n this.script.scriptMessage(msg);\r\n}\r\n","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","lII4KMRblqwFBlsV":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 20,\r\n \"wp\" : 10,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Channelling\", \"Charm\", \"Perform (Dancing)\"]\r\nlet skillAdvancements = [0, 6, 3]\r\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\r\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [\"Marsh Lights\", \"Sleep\"];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","LjfScVGBf0Egr70E":"let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize(\"NAME.AnimalCare\"));\r\nlet animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize(\"NAME.AnimalTraining\")));\r\n\r\nif (animalCare) \r\n animalCare.system.modifier.value += 20;\r\n\r\nfor (let training of animalTrainings) {\r\n training.system.modifier.value += 30;\r\n}","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.details.price.gc -= Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \r\n{\r\n this.actor.addCondition(\"unconscious\");\r\n}\r\nelse \r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\r\n\r\nif(career)\r\n{\r\n career.system.current.value = true;\r\n}","lOIHiAIDtj91kllN":"const chanties = await WFRP_Utility.findAll('wfrp4e-soc.chanty');\r\nlet choice = await ItemDialog.create(chanties, 1, \"Choose Chanty\");\r\nif (choice.length) {\r\n console.log(choice);\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id});\r\n}","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\nthis.script.scriptNotification(\"Added \" + item.name)","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\r\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\r\n{\r\n args.opposedTest.swap(this.effect.label);\r\n}","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\r\nlet damage = this.actor.system.characteristics.s.bonus + 6\r\n\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await this.actor.addCondition(\"stunned\")\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }\r\n })","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `${this.effect.name}: cannot move or take actions`}}).then(test => {\r\n test.roll();\r\n })\r\n}","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\r\n{\r\n this.script.scriptMessage(`${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n await args.actor.addCondition(\"fatigued\");\r\n }\r\n}","lRZhkh8pcu93QTKz":"if (args.test.spell)\r\n{\r\n\targs.test.preData.SL = -10\r\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\n\r\nlet infectedData = infected.toObject();\r\nlet fearData = fear.toObject();\r\nfearData.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\r\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\r\nthis.script.scriptMessage(msg)\r\nthis.actor.modifyWounds(-1)","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\r\nawait test.roll();\r\n\r\nif (test.failed) \r\n{\r\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\n let currentAge = parseInt(this.actor.system.details.age.value)\r\n\r\n let inline = `@ROLL`\r\n let msg =\r\n `${this.actor.prototypeToken.name} ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses
\r\n${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Weapon Skill
\r\n${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Ballistic Skill
\r\n${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Strength
\r\n${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Toughness
\r\n${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agility
\r\n${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dexterity
\r\n `\r\n this.script.scriptMessage(msg);\r\n\r\n let characteristics = duplicate(this.actor.system.characteristics)\r\n\r\n characteristics.ws.initial -= ws\r\n characteristics.bs.initial -= bs\r\n characteristics.s.initial -= s\r\n characteristics.t.initial -= t\r\n characteristics.ag.initial -= ag\r\n characteristics.dex.initial -= dex\r\n\r\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\r\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\r\n{\r\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\r\n if (slash)\r\n {\r\n slash.value = \"2A\"\r\n }\r\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\r\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\r\n\tthis.actor.addCondition(\"stunned\", stuns)\r\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\r\n\r\nif (caster)\r\n{\r\n let bonus = caster.system.characteristics.wp.bonus\r\n this.actor.modifyWounds(bonus)\r\n\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\r\n}","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\")\r\n}","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Endurance', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 't',\r\n context: {failure: \"Mast shattered!\"}\r\n});\r\nawait test.roll();\r\n\r\nif (test.failed) {\r\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\r\n this.effect.update({disabled: true});\r\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\r\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M0XhKnWjG14pk3iH":"return !args.skill?.name.includes(\"Channelling\") && args.type != \"channelling\" && args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(\"Language (Magick)\") && args.type != \"cast\"","M2FshTX4PjKFVU8y":"args.flags.earCount = Number.isNumeric(args.flags.earCount) ? args.flags.earCount+1 : 1;\r\nif (args.characteristic == \"fel\")\r\n{\r\n\targs.fields.modifier -= 5;\r\n}\r\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\r\n{\r\n\targs.fields.modifier -= 20;\r\n}\r\n","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\r\nargs.prefillModifiers.successBonus++;\r\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\r\n this.effect.sourceItem.delete();\r\n }\r\n}","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.options.reload","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n\targs.actor.addCondition(\"unconscious\")\r\n}\r\n\r\n","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\r\n{\r\n args.flags.trained = true;\r\n args.fields.modifier += 10;\r\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\r\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","McLR9YcgVUG3MooC":"args.applyTB = false;","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\r\nlet critTable = `crit${this.generalizeTable(loc)`;\r\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\r\n\r\nthis.script.scriptMessage(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyTerror(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postTerror(value, name)\r\n}","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\")\r\n await this.actor.hasCondition(\"ablaze\")?.delete()\r\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 20,\r\n \"bright\": 10,\r\n \"angle\": 360,\r\n \"alpha\": 0.4,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Abort damage with ${this.effect.name}?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n args.abort = `${this.effect.name}: Damage cancelled`\r\n }\r\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\r\n{\r\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\r\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Dodge\", { fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n await args.actor.addCondition(\"bleeding\")\r\n await args.actor.addCondition(\"entangled\")\r\n }\r\n })","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nfear = fear.toObject();\r\nfear.system.specification.value = 1;\r\nacutesense = acutesense.toObject();\r\nacutesense.name += \" (Smell)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\r\nbrokenbone = brokenbone.toObject();\r\nteeth = teeth.toObject();\r\ntongue = tongue.toObject();\r\n\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\n\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nbrokenbone.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\r\n","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\r\n{\r\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\r\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}\r\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Fear value\", this.item.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","nIOeK0BrtdZeZW8X":"console.log(\"SKILL\", this)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"challenging\"}, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet rollD10 = await new Roll(\"1d10\").roll()\r\nrollD10.toMessage(this.script.getChatData())\r\n\r\n\r\nif (test.succeeded)\r\n{\r\n //...\r\n}\r\nelse if (test.failed)\r\n{\r\n //...\r\n}\r\n","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\r\n{\r\n this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\r\nconst sl = message.system.sl;\r\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\r\nlet current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n They gain +50 to Swim Tests and can breathe underwater.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}\r\n","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Magic Resistance\", \"talent\")) \r\n return\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","nkSmu7v9WiAaK4vq":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\r\n{\r\n let AP = parseInt(this.effect.sourceTest.result.SL)\r\n args.modifiers.ap.value += AP;\r\n args.modifiers.ap.magical += AP;\r\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\r\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\r\nargs.test.result.critModifier += 20;\r\n\r\nif (args.test.result.critical)\r\n{\r\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\r\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n}\r\n ","Np8P8IPT2GYlrh6G":"return args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})` && args.type !== \"channelling\";","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\r\n\r\nreturn opposedResult?.winner == \"attacker\";","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier -= 10;\r\n}\r\nelse if ([\"wp\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier += 10;\r\n}","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o3JUBKLvE6bBxK2n":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" } })\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n await this.actor.addCondition(\"prone\")\r\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\r\n injury = injury.toObject()\r\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\r\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\r\n if (injury.system.location.key[0] == \"r\")\r\n {\r\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\r\n }\r\n else if (injury.system.location.key[0] == \"l\")\r\n {\r\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\r\n }\r\n setProperty(injury, \"system.wfrp4e.count\", toes)\r\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\r\n}","O45vpR4jDbQQnmvJ":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\r\nanimosity.name = animosity.name.replace(\"(Target)\", \"(Followers of Slaanesh)\");\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","O7lXFZLrLdFaShGR":"args.options.catfall = true;","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\r\n\r\nthis.script.scriptMessage(`Gained ${points} Fortune Points`)","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\r\nlet biteData = bite.toObject();\r\nlet venomData = venom.toObject();\r\n\r\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\r\nvenomData.system.specification.value = \"Average\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \r\nawait test.roll();","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n this.actor.modifyWounds(-1);\r\n this.script.scriptMessage(\"Takes 1 Damage\")\r\n }\r\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\r\nargs.actor.system.characteristics.t.value += 30\r\n\r\nargs.actor.system.characteristics.s.bonus += 3\r\nargs.actor.system.characteristics.t.bonus += 3\r\n\r\nif (args.actor.system.characteristics.s.value > 100)\r\n{\r\n args.actor.system.characteristics.s.value = 100\r\n args.actor.system.characteristics.s.bonus = 10\r\n}\r\n\r\nif (args.actor.system.characteristics.t.value > 100)\r\n{\r\n args.actor.system.characteristics.t.value = 100\r\nargs.actor.system.characteristics.t.bonus = 10\r\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\r\n{\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let msg = `Rolled ${roll}.`\r\n if (roll >= 7)\r\n {\r\n msg = `Attack hits with an SL of ${roll - 6}.`\r\n }\r\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.actor.removeCondition(\"surprised\");\r\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\r\n{\r\n\tthis.script.scriptNotification(\"Disabled!\");\r\n\tawait this.effect.update({\"disabled\" : true})\r\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","OEy2lxvic37dRBEt":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\r\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\r\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\r\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\r\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\r\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\r\n\r\nfunction tinDifference(layers)\r\n{ \r\n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\r\n\r\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\r\n\r\n return metalAP - tinAP;\r\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\r\n ","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\r\n\r\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\r\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\r\n\r\nblows = Math.clamped(blows, 0, difficulties.length - 1)\r\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\r\n{\r\n let difficulty = difficulties[blows];\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a Challenging (+0) Willpower Test`);\r\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\r\n }\r\n })\r\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'average';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\r\n\r\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\r\n\r\nthis.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","OvIELZLvnlN2H2uw":"args.update({light : {\r\n \"dim\": 2,\r\n \"bright\": 1,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"pulse\",\r\n },\r\n \"color\": \"#949bff\",\r\n}});","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\r\n let data = item.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n \r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)\r\n }\r\n}","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\r\n args.test.preData.canReverse = true","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\r\n{\r\n this.actor.modifyAdvantage(-1);\r\n this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);\r\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\r\nthis.actor.addCondition(\"stunned\", roll.total)","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed;","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","p7NJB1PsY6X5q8OO":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet traits = await warhammer.utility.findAllItems(\"trait\");\r\ntraits = traits.filter(t => t.name.includes(\"Companion Trait\"));\r\n\r\nlet items = await ItemDialog.create(traits);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: items[0].name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PdClojv7yNgQpOUc":"return args.skill?.name != game.i18n.localize(\"NAME.Endurance\");","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\r\n\r\nlet mainEffect = this.item.effects.contents[0];\r\nif (mainEffect.name.includes(\"(Lore)\"))\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\r\n if (choice.length)\r\n {\r\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\r\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\r\n }\r\n}\r\n\r\nthis.effect.delete();","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\r\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \r\n (this.actor.isOpposing || args.test.context.defending) && \r\n args.test.result.roll % 11 == 0 && \r\n args.test.succeeded && \r\n [\"Language (Magick)\", \"Dodge\"].includes(args.test.item?.name))\r\n {\r\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\r\n let text = `${this.effect.name}: Adding Unstable and Ward`\r\n args.test.result.other.push(text) \r\n this.script.scriptNotification(text);\r\n \r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n let wardData = ward.toObject();\r\n wardData.system.specification.value = 9;\r\n \r\n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\r\n let unstableData = unstable.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\r\n }\r\n","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\r\n item = item.toObject()\r\n item.system.specification.value = this.actor.characteristics.ag.value\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\r\n})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\r\n\r\nif (ablaze) {\r\n ablaze.delete();\r\n this.script.scriptNotification(\"Resisted Ablaze\");\r\n}","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\r\nlet data = item.toObject();\r\ndata.name += \" (Woodlands)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choose Size\");\r\n if (choice[0])\r\n {\r\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\r\n }\r\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \r\n// reducing the SL of any spell affecting it by 3. \r\n// This effect lasts for one hour.\r\nconst hasMagicResistance = this.actor.has(\"Magic Resistance\")\r\n\r\nif (hasMagicResistance === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\r\n let traitItem = trait.toObject()\r\n traitItem.system.specification.value = 2\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Magic Resistance Trait. This effect lasts for one hour.
`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}\r\n\r\nif (hasMagicResistance) {\r\n // Multiple doses may be consumed at once, with each one adding an additional 1 to the Magic Resistance rating and increasing the duration by one hour. \r\n let msg = `${this.actor.prototypeToken.name} has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.
`\r\n\r\n // Resist toxic effect\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n fields: {difficulty: \"challenging\"}\r\n }).then(async test => {\r\n await test.roll()\r\n\r\n // If they fail ...\r\n if (!test.succeeded) {\r\n msg += `However, they begin to ooze the thick, poisonous slime that coats every Dreadmaw. They have gained 1 Poisoned Condition now and should continue to receive an additional @Condition[Poisoned] Condition at the end of each of the round.
\r\nIf they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.
`\r\n this.actor.addCondition(\"poisoned\", 1)\r\n }\r\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\r\n })\r\n}\r\n","PMNjdEAusVBfam09":"return args.skill?.name === game.i18n.localize(\"NAME.Charm\");","Pn5fekTbkwlr61XU":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Engineer)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Arcane Magic (Light)\", \"talent\")\r\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\r\n\r\nif (!talent)\r\n{\r\n await this.actor.addCondition(\"blinded\")\r\n}\r\n\r\nif (demon)\r\n{\r\n await this.actor.addCondition(\"stunned\")\r\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\r\n {\r\n args.actor.addCondition('ablaze')\r\n }","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\r\n\r\nif (criticals.length)\r\n{\r\n this.script.scriptNotification(\"Cannot suffer Critical Wounds\");\r\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\r\n}\r\n\r\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\r\n{\r\n this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\r\n}","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll();\r\nlet mood = await new Roll(\"-2d10\").roll();\r\n\r\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\r\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\r\n\r\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\r\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\r\n\r\nthis.effect.delete();","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\r\nargs.actor.system.details.move.value -= 1;","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \r\n{\r\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\r\n let results = roll.results[0]\r\n\r\n this.script.scriptMessage(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\r\n })\r\n\r\n }\r\n\r\n","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\n","pzknBcJtZWeliE27":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\") || args.item?.name == game.i18n.localize(\"NAME.Cool\")","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n ws : game.wfrp4e.config.characteristics.ws,\r\n t : game.wfrp4e.config.characteristics.t,\r\n ag : game.wfrp4e.config.characteristics.ag,\r\n wp : game.wfrp4e.config.characteristics.wp\r\n}, this.effect.img), 1, \"Choose Characteristic\");\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q4EQgP4gZR8TTm7S":"let penalty = 0\r\nif (args.item?.system.attackType)\r\n{\r\n penalty -= 30\r\n}\r\nif (args.actor.has(\"Second Sight\", \"talent\"))\r\n penalty += 10\r\n\r\nargs.prefillModifiers.modifier += penalty","Q5gh5Y9dCdclcwsD":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name != `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"When Alone\";\r\ndata.effects[0].disabled = true;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","q8lOAWr2970sZeTw":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\r\n\r\n if (args.actor.details.move.value > 3)\r\n {\r\n args.actor.details.move.value -= 1;\r\n if (args.actor.details.move.value < 3)\r\n args.actor.details.move.value = 3\r\n }","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \r\n{\r\n if (args.test.succeeded) \r\n {\r\n let staunch = Number(args.test.result.SL) + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n {\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n }\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\r\n {\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n }\r\n}","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","QbIYnshWeP1U8SUy":"args.applyAP = false;\r\nargs.applyTB = false;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\r\nthis.actor.status.encumbrance.pct = 0;","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QfTBRGXVfwQSghmd":"fromUuid(this.effect.origin).then(caster => {\r\n if (caster) {\r\n if (actor.items.find(it => it.name == game.i18n.localize(\"Bestial\"))) {\r\n let healed = caster.characteristics.wp.bonus\r\n let wounds = duplicate(args.actor.status.wounds)\r\n wounds.value += healed\r\n\r\n if (wounds.value > wounds.max)\r\n wounds.value = wounds.max\r\n\r\n args.actor.update({ \"system.status.wounds\": wounds })\r\n ChatMessage.create({ content: `${this.actor.prototypeToken.name} regains ${healed} Wounds`, speaker: { alias: this.effect.name } })\r\n } else {\r\n ui.notifications.warn(\"Target actor has no Bestial trait\")\r\n }\r\n }\r\n})\r\n\r\n","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 1;\r\n\r\nargs.actor.system.details.man -= 2;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\r\nlet fearData = fear.toObject();\r\nlet leaderData = leader.toObject();\r\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \r\ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\r\n","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"type\": \"\",\r\n },\r\n \"color\": \"#000000\",\r\n }}));","qmOt7h17hGAKqQe0":"\r\nlet choice = await Dialog.wait({\r\n title: this.effect.name,\r\n content: `${this.effect.name}: Is this a ranged or magical attack that orignates outside the Dome?
`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n})\r\n\r\nif (choice)\r\n{\r\n\targs.ward = 6;\r\n}","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\r\n\r\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\r\nlet scriptData = this.effect.flags.wfrp4e.scriptData;\r\n\r\nif (closed) {\r\n scriptData[0].label = \"Open\";\r\n} else {\r\n scriptData[0].label = \"Close\";\r\n}\r\n\r\nawait this.effect.update({\"flags.wfrp4e.scriptData\": scriptData});","QNxmImpLTou6WdMQ":"let test = args.test\r\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\r\n test.result.other.push(\"Can make a Difficult (-10) Willpower Test to prevent the Miscast\")","QoEOxRruQXYrZrv3":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"skill\"\r\n },\r\n {\r\n property : \"name\",\r\n value : /Melee/gm,\r\n regex: true\r\n }\r\n]\r\n\r\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, \"Choose 2 Skills to add +20\")\r\nitems = items.map(i => i.toObject())\r\nitems.forEach(i => i.system.advances.value = 20)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QPVVDPcJ4Xi5FmQl":"if(this.actor.hasCondition(\"fatigued\") && args.opposedTest.result.hitloc.value == \"head\" && (args.opposedTest.attackerTest.result.critical || args.actor.status.wounds.value - args.totalWoundLoss < 0))\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n }\r\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\r\n args.item.damage.value += \" + 1\"","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\r\n{\r\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\r\n}\r\n\r\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\r\n\r\nif (choice[0])\r\n{\r\n\tthis.actor.removeCondition(choice[0].conditionId)\r\n}\r\n","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n effectData.duration.seconds = 10800\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Night Vision\") && !this.actor.has(\"Night Vision\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\r\n{\r\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\r\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 1;\r\nAP[\"rArm\"].value += 1;\r\nAP[\"lArm\"].value += 1;\r\nAP[\"body\"].value += 1;\r\nAP[\"lLeg\"].value += 1;\r\nAP[\"rLeg\"].value += 1;","qTk96NKh14YOIShf":"return args.skill?.name === game.i18n.localize(\"NAME.Haggle\");","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `${this.effect.name}: Vomit!`} })\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\r\n\r\nthis.script.scriptMessage(content)","qxzhPtysAjPWspKf":"if (this.actor.has(\"Undead\") || this.actor.has(\"Daemonic\"))\r\n{\r\n this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);\r\n}","qzGPJflVW7c2Ciim":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\");","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","R32U01LBjBrK1pns":" const templateMap = {\r\n 'P2e7Yx98bK3u110a' : \"\",\r\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \r\n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \r\n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \r\n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \r\n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \r\n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\r\n }\r\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\r\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\r\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\r\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\r\n\r\n\r\n let templateItem = await game.wfrp4e.utility.findItemId(templateMap[template._id]);\r\n\r\n let bio = \r\n `\r\nTemplate: ${template.text}
\r\nPhsyical Quirk: ${physicalQuirk}
\r\nWork Ethic: ${workEthic}
\r\nPersonality Quirk: ${personalityQuirk}
\r\n `\r\n \r\n this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\r\n\r\n if (templateItem)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\r\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 1\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","R8ecKGRzOr4ThvVa":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R8FBHZaaARA3z9pB":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'hard';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\r\n{\r\n this.actor.removeCondition(\"bleeding\");\r\n this.script.scriptNotification(\"Removed 1 Bleeding Condition\")\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Bleeding Conditions\");\r\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rBAoyhzeU3Q8MVSk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 50;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.script.scriptNotification(\"Cannot be surprised\");\r\n this.actor.removeCondition(\"surprised\");\r\n}","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\r\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\r\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\r\n\r\nas.name += \" (Sight)\";\r\n\r\nlet roll = (await new Roll(\"1d10\").roll());\r\nroll.toMessage(this.script.getChatData())\r\nlet items = []\r\n\r\nif (roll.total <= 2)\r\n{\r\n items = items.concat([as]);\r\n}\r\nelse if (roll.total <= 4)\r\n{\r\n items = items.concat([hv]);\r\n}\r\nelse if (roll.total <= 6)\r\n{\r\n items = items.concat([ms]);\r\n}\r\nelse if (roll.total <= 8)\r\n{\r\n items = items.concat([ss]);\r\n}\r\nelse if (roll.total <= 10)\r\n{\r\n items = items.concat([as, hv, ms, ss]);\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (data.system.location.key[0] == \"r\")\r\n{\r\n\tdata.system.location.value = \"Right Ankle\"\r\n}\r\nelse if (data.system.location.key[0] == \"l\")\r\n{\r\n\tdata.system.location.value = \"Left Ankle\"\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\r\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\r\n effectData.duration.seconds = 60 * minutes\r\n this.script.scriptMessage(`Duration: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\r\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\r\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\r\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\r\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\r\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\r\n\r\narmour.name = \"Armour (Hide)\"\r\narmour.system.specification.value = 2\r\nbite.system.specification.value = 3\r\nfear.system.specification.value = 2\r\nweapon.system.specification.value = 4\r\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\r\n\r\n\r\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\r\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\r\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\r\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\r\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\r\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\r\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\r\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\r\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\r\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\r\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\r\n\r\nblessed.system.specification.value = \"Ulric\"\r\nsize.system.specification.value = \"Large\"\r\n\r\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\r\n\r\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\r\n\r\nitems = items.concat(chosen || [])\r\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\r\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\r\n\r\nlet skill = await ItemDialog.create(skills, 1, \"Select the skill used by the weapon\")\r\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\r\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\r\n\r\nlet weapon = {\r\n\tname : this.effect.name,\r\n\ttype : \"weapon\",\r\n\timg : this.effect.img,\r\n\tsystem : {\r\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\r\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\r\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\r\n\t\t\"reach.value\" : \"average\",\r\n\t\t\"qualities.value\" : [{name : \"magical\"}]\r\n\t},\r\n}\r\n\r\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\r\nthis.script.scriptNotification(\"Item created. Further customization must be done manually within the Item's sheet\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptMessage(\"Gained 2 Bleeding Conditions\")\r\n}","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\r\n\r\nfor (let effect of holed) {\r\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\r\n}\r\n\r\nthis.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`);","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rlTvhnDpj4lzfusf":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && args.skill?.name !== game.i18n.localize(\"NAME.Climb\");","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\r\n return ui.notifications.warn(\"You must target exactly one Boat.\");\r\n\r\nconst target = game.user.targets.first();\r\nconst vehicle = target.actor;\r\n\r\nif (!(vehicle.system instanceof VehicleModel)) \r\n return ui.notifications.warn(\"You can only Constrict a Boat\");\r\n\r\nif (vehicle.size > 3)\r\n return ui.notifications.warn(\"You can only Constrict vessels of Size Large or smaller\");\r\n\r\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\r\n\r\nconst mainEffect = this.item.effects.contents[0];\r\nconst effectData = mainEffect.toObject();\r\n\r\neffectData.statuses = [effectData.name.slugify()];\r\n\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\r\n\r\nawait this.actor.applyEffect({effectData: [effectData]});\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} started wrapping itself around the ${target.name} and will be able to start crushing it after ${turns} turns.`);","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 30;\r\n}","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"flags.wfrp4e.applicationData.type\" : \"crew\"})","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.item.name} Overloads!`)\r\n }\r\n}","RPqgRUkiLY5thVbC":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'average';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Drop the item!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\n\r\nif (location && test.failed)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\r\nif (test.spell.lore.value == \"fire\")\r\n{\r\n if (test.result.overcast.usage.target?.AoE)\r\n {\r\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\r\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\r\n }\r\n if (test.result.overcast.usage.range)\r\n {\r\n test.result.overcast.usage.range.current *= 2\r\n test.result.overcast.usage.range.initial *= 2\r\n }\r\n \r\n}","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\r\nawait args.actor.addCondition(\"deafened\");\r\nawait args.actor.addCondition(\"stunned\");","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\ntest.roll();","RrchOMpEdIvceJxl":"return args.skill?.name == \"Stealth (Rural)\"","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"disease\")\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choose a Disease\")\r\n\r\nif (choice[0])\r\n{\r\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n}","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\r\n","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\r\n{\r\n args.test.result.damage += 1\r\n args.test.result.additionalDamage += 1\r\n if (!args.test.result.resolute) {\r\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\r\n args.test.result.resolute = true // Prevent duplicate messages\r\n }\r\n}\r\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":" let characteristics = {\r\n \"ws\" : -10,\r\n \"bs\" : -10,\r\n \"s\" : -5,\r\n \"t\" : -5,\r\n \"i\" : -10,\r\n \"ag\" : -10,\r\n \"dex\" : -10,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = []\r\n let skillAdvancements = []\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\r\nlet terrorTraitItem = item.toObject()\r\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \r\nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"blinded\");\r\n}\r\n\r\nlet msg = ``\r\nlet armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped);\r\nfor(let item of armour)\r\n{\r\n\tfor(let key in item.system.AP)\r\n\t{\r\n\t\tlet AP = item.system.AP[key]\r\n\t\tlet damage = Math.floor(AP / 2);\r\n\t\tawait item.system.damageItem(damage, [key]);\r\n\t}\r\n\tmsg += `${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\r\nif (this.actor.flags.holed.applied === true) return;\r\nif (this.actor.hasCondition(\"dead\")) return;\r\n\r\nconst currentHoled = this.actor.flags.holed.holed || 0;\r\n\r\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\r\n if (!m.name.toLowerCase().includes(\"gun port\")) \r\n return acc;\r\n \r\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\r\n if (!closed) acc++;\r\n \r\n return acc;\r\n}, 0);\r\n\r\nconst totalHoled = currentHoled + openGunPorts;\r\nconst toughness = this.actor.system.characteristics.t.value;\r\nthis.actor.flags.holed.total = totalHoled;\r\n\r\nif (totalHoled >= toughness) {\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n this.script.scriptMessage(`\r\n${speaker.alias} sank due to having Holed (${totalHoled}) rating equal to, or exceeding its Toughness (${toughness })
\r\n\r\n Holed due to Critical Damage: ${currentHoled}
\r\n Holed due to opened Gun Ports: ${openGunPorts}\r\n
By imbibing this potion, ${this.actor.prototypeToken.name} has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\r\n\r\nif (location == \"lArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Left\")\r\n}\r\nelse if (location == \"rArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Right\")\r\n}\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\r\n\r\nif (location)\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syBgPp7rOymCZejX":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunity to Psychology\")?.delete();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)\r\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\r\nlet data = item.toObject();\r\ndata.name = data.name.replace(\"Target\", \"Greenskins, Undead, Chaos\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","T3RfSt3VMEat3iDD":"return args.skill?.name !== game.i18n.localize(\"NAME.Perception\");","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\r\n{\r\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","tCIT1a12Gt6k2ohA":"let resistance\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tresistance = this.item.parenthesesText\r\n}\r\nelse \r\n{\r\n resistance = await ValueDialog.create(\"Enter Resistance\", \"Resistance\") \r\n \r\n if (resistance)\r\n {\r\n this.item.updateSource({name : this.item.name + ` (${resistance})`})\r\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\r\n }\r\n} \r\nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\r\n\r\nif (resistance && !this.effect.name.includes(\"(\"))\r\n{\r\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\r\n}","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","TCtXPvDpbfz1yrVZ":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Two-Handed)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\n\r\n Select your choice\r\n
\r\n `,\r\n buttons : {\r\n 1 : {\r\n label : \"Shield\",\r\n callback : () => {\r\n return \"shield\"\r\n }\r\n },\r\n 2 : {\r\n label : \"Two-Handed Weapon\",\r\n callback : () => {\r\n return \"twohanded\"\r\n }\r\n },\r\n }\r\n})\r\n\r\nlet weapons = await warhammer.utility.findAllItems(\"weapon\", \"Loading Weapons\");\r\nlet items\r\nif (choice == \"shield\") \r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.properties.qualities.shield), 1, \"Choisissez a Shield\");\r\n}\r\nelse if (choice == \"twohanded\")\r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.weaponGroup.value == \"twohanded\"), 1, \"Choisissez a Two-Handed Weapon\");\r\n}\r\nitems = items.map(i => i.toObject())\r\n\r\nitems.forEach(i => i.system.equipped.value)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n let add = 0\r\n\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \r\n {\r\n add = 1 // can't use isFumble if no hit location\r\n }\r\n\r\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\r\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\r\n\r\n}","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\nif (args.applyAP && nonmagical) \r\n{\r\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\n args.modifiers.ap.ignored += nonmagical\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Non-Magical AP (\" + nonmagical + \")\");\r\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.system.specification.value = 1;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\r\nlet test = await this.actor.setupTrait(stomp)\r\nawait test.roll();","tn6SwmjAuNzqE6dx":"let damage = 0\r\nlet test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n damage = 10;\r\n}\r\nelse if (test.failed)\r\n{\r\n damage = 20;\r\n}\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\r\n \"ws\": 45,\r\n \"bs\": 30,\r\n \"s\": 35,\r\n \"t\": 45,\r\n \"i\": 30,\r\n \"ag\": 35,\r\n \"dex\": 25,\r\n \"int\": 25,\r\n \"wp\": 30,\r\n \"fel\": 25\r\n}\r\nfor (let char in this.actor.characteristics) {\r\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\r\n this.actor.characteristics[char].initial = gorCharacteristics[char]\r\n}","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"unconscious\")\r\n}","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n let sourceActor = this.effect.sourceActor;\r\n if (sourceActor)\r\n {\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\r\n }\r\n}","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\r\n\r\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\r\nthis.script.scriptMessage(`Location: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TpZItJ5Ugbazaobd":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\r\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","Tq45Nd8J3eTvHT41":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.SetTrap\");","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Minor\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","tuIsytv3jl2yAIb2":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\") && args.skill?.name !== game.i18n.localize(\"NAME.Intimidate\") && args.skill?.name !== game.i18n.localize(\"NAME.Leadership\")","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n this.script.scriptNotification(`Cleared ${fatigued.conditionValue} Fatigued Conditions`)\r\n fatigued.delete(); \r\n}\r\nelse \r\n{\r\n\tthis.script.scriptNotification(`No Fatigued Conditions`)\r\n}","TwgdEucxcHloc4cX":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nAppy ${this.effect.name} Damage? Attacker must have used bare hands or a melee weapon made of metal.`})\r\n if (apply)\r\n {\r\n \r\n let damage = 5 + this.actor.characteristics.wp.bonus;\r\n \r\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\r\n \r\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\r\n \r\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\r\n \r\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n \r\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\r\n \r\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\n msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\n this.script.scriptMessage(msg)\r\n }\r\n}","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData());\r\n args.totalWoundLoss += roll.total;\r\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\r\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n else \r\n {\r\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\r\n }\r\n}\r\nelse \r\n{\r\n return false;\r\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\r\nthis.script.scriptNotification(lore)\r\nif (lore == \"GM's Choice\") {\r\n return\r\n}\r\n\r\nelse if (lore == \"Arcane Magic\") {\r\n lore = \"Arcane\"\r\n}\r\n\r\nelse if (lore == \"Petty Magic\") {\r\n lore = \"petty\"\r\n}\r\n\r\nelse {\r\n lore = lore.toLowerCase();\r\n}\r\n\r\nlet spellsWithLore = []\r\nif (lore == \"Arcane\") {\r\n spellsWithLore = spells.filter(i => !i.system.lore.value)\r\n}\r\nelse {\r\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\r\n}\r\n\r\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\r\n this.actor.setupCast(item).then(test => test.roll());\r\n})","UlRSaZG4ZUU6fMND":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nEnter the number of diseases/poisons cured
\",\r\n buttons : {\r\n confirm : {\r\n label : \"Confirm\",\r\n callback : (dlg) => {\r\n let input = dlg.find(\"input\");\r\n value = parseInt(input[0].value);\r\n return value;\r\n }\r\n }\r\n }\r\n})\r\n\r\n\r\nlet damage = 0;\r\n\r\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\r\n\r\nlet test = new Roll(`${rolls.join(\" + \")}`);\r\nawait test.roll();\r\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Longbow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `\r\n Add Option?\r\n
\r\nFinished replacing ${this.item.name} with a makeshift one.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \r\n{\r\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) \r\n {\r\n await args.actor.addCondition(\"poisoned\")\r\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\r\n }\r\n })\r\n}","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\r\nif (SL < 0)\r\n SL = 0\r\nthis.actor.addCondition(\"fatigued\", 1 + SL)","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VLdF2HPnCrNIgp7a":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\n animosity.system.specification.value = \"Followers of Slaanesh\";\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","VlHuDIAvPr8JM1P5":"return args.skill?.name !== game.i18n.localize(\"NAME.Row\");","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","VNOKTzCrFbZ6PJUj":"return ![\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","Vns6WrafVq8NjX7t":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\")","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\r\n\r\nawait roll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n return false;\r\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Language (Magick)\"","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData())\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\r\n// On a 1, its poison has run dry, \r\n// and the next time it is employed it will shatter.\r\n\r\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\r\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\r\n ChatMessage.create({\r\n content: `\r\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\r\n blind: true\r\n })\r\n}\r\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.characteristics.t.initial += 10 * specification;\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"fatigued\") \r\n }\r\n})","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\r\nif (broken)\r\n{\r\n broken.delete();\r\n this.script.scriptNotification(\"Removed Broken\")\r\n}","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"prone\")\r\n\tawait this.actor.addCondition(\"stunned\")\r\n}\r\n \r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\r\nargs.modifiers.other.push({label : this.effect.name, value : -1)","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\r\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.minormis\r\n}\r\n// Decrement the major miscast to minor miscast\r\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.majormis\r\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\r\n}","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\r\n{\r\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\r\n\t{\r\n\t\tif (parseInt(args.test.result.SL) > 0)\r\n\t\t{\r\n\t\t\targs.test.result.SL = \"-0\";\r\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\r\n\t\t}\r\n\t\targs.test.result.outcome = \"failure\"\r\n args.test.result.other.push(`${this.effect.name}: Maximum -0 SL`)\r\n\t}\r\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\nlet slOver = this.effect.sourceTest.result.slOver;\r\nlet overcast = this.effect.sourceTest.result.overcast\r\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\r\nlet added = Math.floor(slOver / 3) || 0\r\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4RuGIfseGoxXA3k":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\r\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 60\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","WB6sIpLEPC8YPX67":"if (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\r\nlet msg = \"\";\r\nfor(let item of items)\r\n{\r\n if (item.system.properties.qualities.durable)\r\n {\r\n await item.update({\"system.qualities.value\" : []});\r\n msg += `${item.name} loses all Qualities
`\r\n }\r\n else \r\n {\r\n msg += `${item.name} crumbles into dust!
` \r\n await item.update({name : item.name + \" (Dust)\"})\r\n }\r\n}\r\nif(msg)\r\n{\r\n this.script.scriptMessage(msg);\r\n}","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","whUSkaR1yem21bXp":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 6,\r\n \"int\" : -5,\r\n \"wp\" : 0,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Melee (Basic)\", \"Track\"]\r\nlet skillAdvancements = [8, 7]\r\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\r\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\r\n{\r\n args.item.system.qualities.value.push({name : \"magical\"})\r\n}","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\r\nargs.item.system.qualities.value.push({name : \"magical\"});","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 3\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","WO5n7Vbx8AgoVrwC":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\r\n let skillAdvancements = [10, 10, 10]\r\n let talents = []\r\n let trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\r\n{\r\n\tthis.actor.addCondition(\"dead\");\r\n}","Wqff6ICWYzvLDYC8":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Sensory Sharing\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","WR0Kqn8CF5iwToak":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\r\n{\r\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\r\n disease = disease.toObject()\r\n disease.system.duration.active = true\r\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\r\n }\r\n })\r\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\r\n\r\n this.script.scriptNotification(\"This test only applies to criminals, otherwise close the dialog.\");\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \r\n {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"unconscious\");\r\n }\r\n });","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\r\n // must make a Challenging (+0) Endurance Test \r\n\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\r\n fields: {difficulty: \"challenging\"}\r\n })\r\n \r\n await test.roll();\r\n if (test.failed)\r\n {\r\n // or gain a Deafened Condition \r\n this.actor.addCondition(\"deafened\");\r\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\r\n let damage = (await new Roll(\"1d10\").roll());\r\n await damage.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Does not need to make Fear or Terror tests\");\r\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n\r\nawait this.actor.addCondition(\"deafened\", 3)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"Gain a Broken Condition\", success : \"Avoided Broken Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"broken\")\r\n}","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\r\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\r\n\r\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\r\n grim.update({\"system.specification.value\": 4});\r\n}\r\n\r\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\r\n grim.update({\"system.specification.value\": 2});\r\n}","x2RLUUNB7BiIDYCP":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, skipTargets: true, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\r\nitem.name += ` (Disabled by ${this.item.name})`;","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nlet data = item.toObject();\r\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\r\ndata.system.specification.value = 5\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n\tthis.actor.removeCondition(\"prone\");\r\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\r\n}\r\nelse \r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\r\nChatMessage.create({content : \"Grace is beyond style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n\r\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n \"nobles\" : \"Nobles\",\r\n \"guilders\" : \"Guilders\",\r\n \"servants\" : \"Servants\"\r\n}), 1, \"Choose Group\")\r\n\r\nlet name = choice[0]?.name\r\n\r\nif (!name)\r\n{\r\n return;\r\n}\r\n\r\nif (item)\r\n{\r\n item.update({\r\n name : item.name.split(\"(\")[0] + ` (${name})`, \r\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\r\n })\r\n}\r\nelse \r\n{\r\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\r\n let data = item.toObject();\r\n data.name += ` (${name})`\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\r\n scythe.name = \"Scythe of Shyish\";\r\n scythe.system.damage.value = \"WPB + 3\"\r\n scythe.system.equipped = true;\r\n scythe.img = this.effect.icon;\r\n scythe.system.qualities.value.push({name : \"magical\"})\r\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","XCAfy460IotarQek":"return false;","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}\r\n\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","XcvDYNZgJ2rpAdDV":"\r\n let fatigued = this.actor.hasCondition(\"fatigued\")\r\n if (!fatigued)\r\n {\r\n this.actor.addCondition(\"fatigued\")\r\n ui.notifications.notify(\"Fatigued added to \" + this.actor.name + \" which cannot be removed until the Malaise symptom is gone.\")\r\n }","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\r\n}","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\r\n{\r\n args.addImpact = true;\r\n args.opposedTest.result.other.push(\"Impact against Skaven\")\r\n}","Xf4FcZ4ZLdWmOXBa":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\n\r\nthis.script.scriptMessage(msg);","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\r\n args.test?.result?.other.push(\"Gain additional +1 Corruption from \" + this.effect.name)\r\n}","yQziCK8G8I1RYkTj":"let add;\r\nif (args.opposedTest?.attackerTest?.weapon?.isRanged && args.opposedTest?.result.hitloc?.value === \"head\") {\r\n add = await Dialog.confirm({title : this.effect.name, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\r\n}\r\n\r\nif (add) {\r\n\r\n args.modifiers.ap.metal++;\r\n args.modifiers.ap.used++;\r\n args.modifiers.ap.value++;\r\n args.modifiers.ap.details.push(\"+1 AP against missile attacks to the front\");\r\n}","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yRRzSKlcN3L7rEEe":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Play\"));","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\r\nthis.script.scriptNotification(\"Added Fatigued\")","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","yTmRoUstxHMso91c":"if (args.item.name == \"Magic Resistance\" && args.item.type == \"trait\")\r\n{\r\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\r\n}","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\r\nlet fel_gain = 0\r\nif (args.actor.characteristics.fel.value <= 0)\r\n{\r\n fel_gain += (await new Roll(\"2d10\").roll()).total\r\n}\r\n\r\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\r\n\r\nif (fel_gain)\r\n msg += ` and ${fel_gain} Fellowship`\r\n\r\n\r\nlet newInt = i_gain + args.actor.characteristics.int.modifier\r\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\r\n\r\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\r\n\r\nthis.script.scriptMessage(msg)","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\r\n\r\nif (newEffect)\r\n{\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\r\n}","YySjPfSAPdMAfjsh":"let talents = [\"Berserk Charge\", \"Combat Aware\", \"Combat Reflexes\", \"Furious Assault\", \"Implacable\", \"Magic Resistance\", \"Resistance (Magic)\", \"Resolute\", \"Strike Mighty Blow\", \"Warrior Born\"];\r\nlet currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer) return;\r\n\r\nfor (let talent of talents) {\r\n if (currentCareer.system.talents.includes(talent))\r\n continue;\r\n currentCareer.system.talents.push(talent);\t\r\n}\r\n\r\n","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\r\n\tthis.script.scriptNotification(\"Angewandt nach Effekten\");\r\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nitem = item.toObject()\r\nitem.name = this.effect.name\r\nitem.system.specification.value = this.actor.characteristics.s.bonus\r\nitem.system.description.value = \"\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 2;\r\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\r\nif (ablaze)\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\");\r\n ablaze.delete()\r\n}","z5HfNUrHy5MS3K7a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true);\r\n\r\nlet choice = await ItemDialog.create(spells, 1);\r\n\r\nif (choice[0])\r\n{\r\n this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\r\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\r\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\r\n spell.system.wind.value = \"Channelling (Dhar)\";\r\n spell.system.memorized.value = true;\r\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\r\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZCkYe5XMVY1RWMXG":"args.options.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effect because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\r\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\r\n{\r\n halve = await Dialog.confirm({title : this.effect.name, content : \"Halve Damage? (Halves Damage from all fire)\"})\r\n}\r\nelse\r\n{\r\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\r\n}\r\n\r\nif (halve)\r\n{\r\n args.totalWoundLoss /= 2;\r\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\r\n}","zdGAvfL7zJ7wpYxG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'easy';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\r\n\r\nswitch (initiativeSetting) {\r\n case \"default\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"sl\":\r\n args.initiative += \"+1\"\r\n break;\r\n\r\n case \"d10Init\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"d10InitAgi\":\r\n args.initiative += \"+1\"\r\n break;\r\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","ZgF1sYdbAKaOuHmK":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\");","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet biteData = bite.toObject();\r\nlet infectedData = infected.toObject();\r\n\r\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Religion\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Nichts übrig!\", \"error\")\r\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Blutend hinzugefügt\")\r\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\r\n if (target.actor.details.size.value == \"tiny\")\r\n modifier = 30\r\n if (target.actor.details.size.value == \"ltl\")\r\n modifier = 20\r\n if (target.actor.details.size.value == \"sml\")\r\n modifier = 10\r\n\t\r\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 2;\r\nAP[\"rArm\"].value += 2;\r\nAP[\"lArm\"].value += 2;\r\nAP[\"body\"].value += 2;\r\nAP[\"lLeg\"].value += 2;\r\nAP[\"rLeg\"].value += 2;","zL7ECmBBMAqf5Esn":"let hasMagazine = await Dialog.confirm({content: \"Does the vessel have a magazine or any other kind of store for blackpowder?
\"});\r\n\r\nif (!hasMagazine) return;\r\n\r\nlet roll = new Roll(\"d10\");\r\nawait roll.evaluate();\r\n// await roll.toMessage();\r\nlet anchor = roll.toAnchor();\r\n\r\nlet crits = [];\r\n\r\nfor (let i = 0; i < roll.total; i++) {\r\n let result = await WFRP_Tables.rollTable('crithull');\r\n let collection = game.packs.get(result.object.documentCollection)\r\n\r\n if (collection)\r\n await collection.getDocuments()\r\n\r\n if (!collection)\r\n collection = game.items;\r\n\r\n let item = collection.get(result.object.documentId)\r\n if (item)\r\n crits.push(item);\r\n}\r\n\r\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\r\nthis.script.scriptMessage(`${this.item.name} caused an additional ${anchor.outerHTML} Critical Hits to the Hull!
${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}
`\r\n}\r\n\r\nthis.script.scriptMessage(msg);","zR4WAjzXHTZuiu5G":"let actor = this.actor;\r\n let effect = this.effect;\r\n let bleedingAmt;\r\n let bleedingRoll;\r\n let msg = \"\"\r\n\r\n let damage = effect.conditionValue;\r\n let scriptArgs = {msg, damage};\r\n await Promise.all(actor.runScripts(\"preApplyCondition\", {effect, data : scriptArgs}))\r\n msg = scriptArgs.msg;\r\n damage = scriptArgs.damage;\r\n msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})\r\n\r\n if (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\"))\r\n {\r\n await actor.addCondition(\"unconscious\")\r\n msg += \"Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'difficult';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n // Wait till after chat card is posted\r\n game.wfrp4e.utility.sleep(500).then(() => {\r\n game.wfrp4e.utility.postTerror(1, this.effect.name)\r\n game.wfrp4e.utility.postTerror(2, this.effect.name)\r\n })\r\n}","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\nlet holed = this.actor.flags.holed || {holed: 0};\r\nholed.holed += rating;\r\nthis.actor.flags.holed = holed;\r\n","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed","zxG5KbliWE9xWNQD":"this.script.message(\"Überspring automatisch jede \" + this.script.label);\r\nargs.abort = true;","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","zXh8rgMxWoCLTxVd":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 0\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.effect.delete()\r\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \r\n// in Wolves, Lions, Goats, and Chimeras.\r\ngame.wfrp4e.utility.postFear(2, this.effect.name)\r\n","zzk2uRSFjFHB5kjw":"\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)"}); } \ No newline at end of file diff --git a/scriptPacker.js b/scriptPacker.js index 74b2a1e..c1ac049 100644 --- a/scriptPacker.js +++ b/scriptPacker.js @@ -1,21 +1,28 @@ import fs from "fs"; +import path from "path"; -let path = "./scripts/" -let scripts = fs.readdirSync(path); +let basePath = "./scripts/"; +let scripts = fs.readdirSync(basePath); let count = 0; let scriptObj = {}; -for(let file of scripts) -{ - let script = fs.readFileSync(path + file, {encoding:"utf8"}); - scriptObj[file.split(".")[0]] = script; - count++; + +for (let file of scripts) { + let fullPath = path.join(basePath, file); + + // Ignoriere Verzeichnisse + if (fs.lstatSync(fullPath).isDirectory()) { + continue; + } + + let script = fs.readFileSync(fullPath, { encoding: "utf8" }); + scriptObj[file.split(".")[0]] = script; + count++; } let scriptLoader = `export default function() { mergeObject(game.wfrp4e.config.effectScripts, ${JSON.stringify(scriptObj)}); - }` -fs.writeFileSync("./modules/loadScripts.js", scriptLoader) -console.log(`Packed ${count} scripts`); \ No newline at end of file +fs.writeFileSync("./modules/loadScripts.js", scriptLoader); +console.log(`Packed ${count} scripts`); diff --git a/scripts/yCgH3N9AurIiAv0i.js b/scripts/yCgH3N9AurIiAv0i.js index 06aecb3..bbc4c40 100644 --- a/scripts/yCgH3N9AurIiAv0i.js +++ b/scripts/yCgH3N9AurIiAv0i.js @@ -1,4 +1,4 @@ -if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sense)")) +if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sinn)")) { let tests = this.item.system.tests.value let name = this.item.name @@ -12,12 +12,12 @@ if (!this.item.name.includes("(") || this.item.system.tests.value.includes("(Sen else // If no sense specified, provide dialog choice { let choice = await ItemDialog.create(ItemDialog.objectToArray({ - taste : "Taste", - sight : "Sight", - smell : "Smell", - hearing : "Hearing", - touch : "Touch" - }, this.item.img), 1, "Choose Sense"); + taste : "Geschmack", + sight : "Sicht", + smell : "Geruch", + hearing : "Gehör", + touch : "Berührung" + }, this.item.img), 1, "Wähle Sinn"); if (choice[0]) { name = `${name.split("(")[0].trim()} (${choice[0].name})`