foundryvtt-wh4-lang-fr-fr/loadScripts.js

6 lines
388 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default function()
{
console.log("effectScripts loaded !!!");
mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\n// takes 3 Poisoned Conditions that cannot be resisted at first,\nawait this.actor.addCondition(\"poisoned\", 3)\n\n// recovers a number of Wounds equal to their Toughness Bonus, \nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n\n// and acquires the Regenerate Creature Trait.\nconst hasRegenerate = this.actor.has(\"Régénération\")\nif (hasRegenerate === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\n let traitItem = trait.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n}\n\nthis.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> :\n <ul>\n <li>Reçoit 3 états Empoisonnés, sans Test de Résistance possible</li>\n <li>Récupère ${this.actor.system.characteristics.t.bonus} Blessures</li>\n <li>Acuiert le Trait de Creature Régénération.</li>\n </ul>\n C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.</p>\n <p>Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.</p>`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\n{\n args.fields.modifier += 10;\n args.flags.quietenedApplied = true\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Chargement des sorts\")\n\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\n\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\n\nif (text == \"GM's Choice\")\n{\n return this.script.scriptNotification(text)\n}\n\nif (spellsWithLore.length > 0)\n{\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\n this.script.scriptNotification(selectedSpell.name);\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\n}\nelse\n{\n ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\nlet data = item.toObject();\ndata.system.specification.value = fixation.result;\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\nif (!table)\n{\n\treturn ui.notifications.error(\"La table des Mutations n'a pas été trouvée. Assurez vous que la table avec la clé `mutatephys` est bien importée dans le monde.\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.scriptNotification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse \n{\n ui.notifications.error(\"L'item ne peut être trouvé: \" + uuid)\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\n{\n\treturn true;\n}\nelse \n{\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\n}\n ","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.ap.details.push(\"<strong>\" + this.effect.name + \"</strong>: Ignore le m<>tal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\n\nlet data1 = item1.toObject();\ndata1.system.location.key = this.item.system.location.key\n\nlet data2 = item2.toObject();\ndata2.system.location.key = this.item.system.location.key\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\n","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"stunned\")\n }\n})\n","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\n{\n args.flags.strikeToStun = true\n args.fields.modifier += 20;\n args.fields.hitLocation = \"head\";\n}\nargs.fields.successBonus++;","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif ([\"feu\", \"electricité\", \"poison\"].includes(type))\n{\n args.applyAP = false;\n}","16nCOByUaSFDym1V":"args.fields.modifier -= 20\n","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let terrain = name.split(\"(\")[1].split(\")\")[0]\n tests = tests.replace(\"Terrain\", terrain)\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n coastal : \"Côtes\",\n deserts : \"Déserts\",\n marshes : \"Marches\",\n rocky : \"Rocailles\",\n tundra : \"Tundra\",\n woodlands : \"Forêts\"\n }, this.item.img), 1, \"Choisir le Terrain\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = tests.replace(\"Terrain\", \"Terrain \" + choice[0].name )\n }\n }\n\n this.effect.updateSource({name})\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 5,\n \"s\" : 5,\n \"t\" : 0,\n \"i\" : 5,\n \"ag\" : 5,\n \"dex\" : 5,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let items = []\n\n let updateObj = this.actor.toObject();\n\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)\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\nawait test.roll()\nif (test.succeeded)\n{\n this.effect.delete();\n}\n","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2);\n}\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain d'un état Assomé\"}})\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"stunned\")\n}\n\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Ne peut saisir ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\nthis.actor.modifyWounds(healed)\nthis.script.scriptMessage(`Soins de ${healed} Blessures`)","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (!test.succeeded)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\n let data = item.toObject();\n if (this.item.system.location.key == \"rLeg\")\n {\n data.system.location.value = \"Pied droit\"\n\t data.system.location.key = \"rToe\";\n }\n else if (this.item.system.location.key == \"lLeg\")\n {\n data.system.location.value = \"Pied gauche\"\n\tdata.system.location.key = \"lToe\";\n }\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"stunned\", 3)\n }\n})","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\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, \"Choisir une localisation\");\n\nlet location = choice[0].id;\n\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\n\nif (itemTargeted)\n{\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\n}","1yOvw74jzFfaI87b":"return args.options.reload\n","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\n{\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\nlet data = item.toObject();\ndata.system.location.value = \"Dos\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true;\n\nif (args.options.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Impossible d'Esquiver!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\n {\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\n }\n} ","2W9uMTT6iJhfQ044":"let skill = `Métier (${this.item.parenthesesText})`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\nif (existingSkill && inCurrentCareer)\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\tcurrentCareer.system.skills.push(skill);\n}\n\n\n","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\n{\n args.bleedingHand = true;\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\n if (!success)\n {\n args.abort = true;\n }\n}","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Ouïe)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\n{\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"Vide !\", \"error\")\n}","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\n ui.notifications.notify(`<b>${this.effect.name}</b>: Gain de ${this.item.Advances} Avantages`)\n this.actor.setAdvantage(this.item.Advances)\n }\n}","2sDH6RvoOAR40oqH":"\n\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\n await test.roll();\n if (test.failed) {\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\n }\n}\n\n// Since wounds change when the effect is deleted, need to wait until after \n// the max wounds have been recalculated to apply damage\ngame.wfrp4e.utility.sleep(1000).then(async () => {\n let roll = await new Roll(\"1d10\").roll();\n\n roll.toMessage(this.script.getChatData());\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\n\n})","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\nif (!currentCareer)\n{\n return;\n}\n\nlet talents = [\"Aethyric Attunement\",\n\"Arcane Magic (Any)\",\n\"Chaos Magic (Tzeentch)\",\n\"Fast Hands\",\n\"Instinctive Diction\",\n\"Magical Sense\",\n\"Petty Magic\",\n\"Second Sight\",\n\"War Wizard\",\n\"Witch!\"].filter(t => !currentCareer.system.talents.includes(t))\n\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\nif (wounds.value == 0)\n return this.script.scriptNotification(\"Aucun effet à 0 Blessures\", \"error\")\n\nthis.script.scriptNotification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\n{\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\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}))","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.test.result.other.push(`<span class=\"hide-option\"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} DR</span>`)\n}","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\nif (fatigue)\n{\n this.script.scriptNotification(\"Suppression de l'état Fatigué, effet désactivé.\")\n this.effect.update({disabled : true})\n await this.actor.removeCondition(\"fatigued\")\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choose Location\");\nif (choice[0])\n{\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\n}\n\nlet location = choice[0].id;\n\nif ([\"lArm\", \"rArm\"].includes(location))\n{\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nif (location == \"body\")\n{\n await this.actor.addCondition(\"fatigued\");\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"prone\");\n }\n}\n\nif (location == \"head\")\n{\n await this.actor.addCondition(\"stunned\");\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"unconscious\");\n }\n}","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\n\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\n\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\n{\n args.item.qualities.value.push({name : \"penetrating\"})\n args.item.qualities.value.push({name : \"impale\"})\n}","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","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\"));","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}))\nthis.actor.addCondition(\"ablaze\");","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\n}\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\nawait args.actor.addCondition(\"prone\")","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\n \"ws\" : 25,\n \"bs\" : 10,\n \"s\" : 15,\n \"t\" : 15,\n \"i\" : 25,\n \"ag\" : 20,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 25,\n \"fel\" : 10\n}\n//let skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\nlet skills = [\"Calme\", \"Equive\", \"Intimidation\", \"Intuition\", \"Commandement\", \"Savoir (Guerre)\", \"Perception\"]\n\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\n\nlet trappings = [\"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\n this.script.scriptMessage(`<strong>${this.actor.name}</strong> perd 1 point de ${game.wfrp4e.config.characteristics[char]}`)\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\n }\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","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\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gain d'un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"bleeding\");\n}\n","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\n await test.roll();\n if (test.failed)\n {\n args.totalWoundLoss += 5;\n args.modifiers.other.push({label : this.effect.name, value : 5})\n }\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\nawait args.actor.addCondition(\"entangled\")","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\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;\nlet damage = args.totalWoundLoss;\nlet tb = sourceActor.system.characteristics.t.bonus\nargs.abort = `<strong>${this.effect.name}</strong>: Dommages appliqués à ${sourceActor.name}`;\n\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\n\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\n this.script.scriptMessage(`1 Point de Fortune volé à <strong>${this.actor.name}</strong>`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","5Fe1ELaS6Gnvy0Cj":"return args.skill?.name.includes(\"Focalisation\") || args.type == \"channelling\" || args.skill?.name == game.i18n.localize(\"NAME.Charm\") || args.skill?.name.includes(\"Langue (Magick)\") || args.type == \"cast\"","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JWC0l3JEpOsqbR9":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 0\n}\nlet skills = [\"Esquive\", \"Perception\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Flee!\", \"Marksman\"]\nlet trappings = [\"Hand Weapon\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5JvKJZPcd6Hz5zvn":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 20,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 15,\n \"fel\" : 0\n}\n//let skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Leadership\"]\nlet skills = [\"Calme\", \"Esquive\", \"Intimidation\", \"Commandement\"]\nlet skillAdvancements = [15, 15, 10, 5]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = this.effect.name + \" \" + updateObj.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5LdJCKfQem1AQK24":"\nif (!args.flags.howlingWarpGale)\n{\n args.fields.modifier -= 10;\n args.flags.howlingWarpGale = true; // prevent double application\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\netiquette.name += ` (Suivants de Tzeentch)`;\n\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\nanimosity.system.specification.value = \"Suivants de Nurgle\";\n\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\n\nroll.toMessage(this.script.getChatData());\n\nlet mutations = [];\nlet msg = `<p><strong>Mutations acquises</strong></p>`\nfor(let i = 0; i < roll.total; i++)\n{\n let item;\n let uuid;\n let result;\n if (i % 2 == 0)\n {\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\n }\n else \n {\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\n }\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n item = await fromUuid(uuid);\n if (item)\n {\n msg += `<p>@UUID[${uuid}]{${item.name}}</p>`\n mutations.push(item.toObject());\n }\n}\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5dR7Erj3nwsxLAV7":"let characteristics = {\n \"ws\" : 35,\n \"bs\" : 10,\n \"s\" : 25,\n \"t\" : 30,\n \"i\" : 30,\n \"ag\" : 25,\n \"dex\" : 0,\n \"int\" : 15,\n \"wp\" : 35,\n \"fel\" : 15\n}\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Luck\", \"Resolute\", \"Unshakable\", \"War Leader\"]\nlet trappings = [\"Hand Weapon\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\n{\n args.fields.successBonus += 1\n}\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\n{\n args.fields.modifier -= 10;\n}","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5sI9iYh5j2nx2XyT":"return !([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\n{\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}));\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n args.test.result.other.push(`<span class=\"hide-option\"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} DR</span>`)\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\nconst hasColdBlooded = this.actor.has(\"A Sang Froid\")\nif (hasColdBlooded === undefined) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> reçoit le Trait de Créatuer A Sang Froid et peut inverser n'importe quel test de Force Mentale échoué.</p>\n <p>Si il reçoit un état Surpris, cet état n'est pas perdu la première fois (typiquement à la fin du Round ou si il est attaqué).</p>`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} porte le <strong>${this.item.name}</strong>. <br>\n Il gagne +1 Point de Corruption point si un Test de Corruption est échoué, à appliquer manuellement.<br>Si le personnage porte le masque pendant plus d'une heure ou utilise les effets du masque, il est exposé à une @Corruption[moderate]{Corruption Modérée} \n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Utilisé)\"})\n this.script.scriptMessage(`<strong>${this.item.name}</strong> de ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être manuellement supprimés.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}","6EXkbVTRBhKTEu81":"if (!args.flags.bothEyes)\n{\n\targs.flags.bothEyes = true;\n\targs.fields.modifier -= 30\n}","6Fe8M5MdklKS2olx":"return args.characteristic != \"fel\"","6H6vNjzvMGl2ZqCR":"if (args.totalWoundLoss > 0)\n this.script.scriptMessage(`<b>Lame de Nurglitch: ${args.actor.name}</b> doit réussir un <b>Test d'Endurance Difficile (-10) </b> ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","6JrUjs3g5x6bFnj3":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet sense = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet biteData = bite.toObject();\nlet senseData = sense.toObject();\n\nbiteData.system.specification.value = 6 - this.actor.characteristics.s.bonus;\nsenseData.name = senseData.name += \" (Odorat)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, senseData], {fromEffect : this.effect.id})","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\n{\n this.effect.delete();\n}","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Régénération')\n\nif (regenerate)\n{\n let effect = regenerate.effects.contents[0]\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\n \n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\n}","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"ablaze\")","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n{\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n}\nelse if (args.test.isFumble && roll != 1)\n{\n args.test.result.other.push(\"Résultat du Raté: \" + roll)\n}\n\n","6elUNF58TaiYjxcx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gained a Stunned Condition\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\");\n}","6fElmBxTjdAaubbK":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"average\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}\n","6hAgggYpNR3r4QWC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0\")\nitem = item.toObject()\nlet species = args.actor.Species || \" de votre espèce\"\nitem.name = `Animosité (tous sauf ${species})`\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","6jcTzK1XEuWqAacN":"args.abort = true;\nthis.script.scriptNotification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag(\"wfrp4e\", \"location\")]}!`, \"error\")","6kifXp2jXEaQVJsg":"let useWard = await Dialog.wait({\n\ttitle : this.effect.name,\n\tcontent : `<p>Utiliser Ward fourni par <strong>${this.effect.name}</strong>?`,\n\tbuttons : {\n\t\tyes : {\n\t\t\tlabel : \"Yes\",\n\t\t\tcallback: () => {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tno : {\n\t\t\tlabel: \"No\",\n\t\t\tcallback: () => {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n})\n\nif (useWard)\n\targs.ward = 9;","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\n{\n await this.actor.modifyAdvantage(-2);\n this.script.scriptNotification(\"Avvantage soustrait\")\n}\nelse \n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nitem = item.toObject()\n\nitem.system.specification.value = 10;\nitem.name += \" (Feu)\"\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\n\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\n{\n\tthis.script.scriptNotification(\"Impossible de mettre à jour la Fortune\");\n\tdelete args.data.system.status.wounds.value;\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)","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Corps à corps (Base)\")\n{\n args.item.system.modifier.value += 20;\n}","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\n{\n ValueDialog.create(\"Sasir le nombre de Blessures perdues en échange de DR\", this.effect.name, \"0\").then(async value => {\n value = Math.clamped(value, 0, 3)\n if (value == 0)\n {\n return; \n }\n else if (Number.isNumeric(value))\n {\n this.script.scriptNotification(`Perte de ${value} Blessures`)\n this.actor.modifyWounds(-1 * value)\n await this.item.system.toggleEquip();\n args.test.addSL(value);\n args.test.preData.other.push(`<strong>${this.effect.name}</strong>: +${value} DR`)\n }\n })\n}","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\n\nif (args.equipped) \n{ \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} porte le <strong>${this.item.name}</strong>. <br>\n Si le personnage porte le masque pendant plus d'une heure ou bénéficie de ses effets, il s'espose à une @Corruption[moderate]{Corruption Modérée}. \n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Utilisé)\"})\n this.script.scriptMessage(`<strong>${this.item.name}</strong> porté par ${this.actor.name} a été enlevé et a perdu ses capacités. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}","7OmrMjaU48o2FEZi":"\nthis.actor.characteristics.t.bonus = 10\n\nthis.actor.details.move.value = 0;\nthis.actor.details.move.walk= 0;\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.scriptNotification(`Suppression de ${poisoned.conditionValue} états Empoisonné`)\n poisoned.delete(); \n}\nelse\n this.script.scriptNotification(`Aucun état Empoisonné`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Revendiquer le Bonus de <strong>${this.effect.name}</strong> `);","7e8FgQUF2oANANmx":"return args.skill?.name == \"Corps à corps (Bagarre)\" || args.item?.weaponGroup?.value == \"brawling\"","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\n args.prefillModifiers.modifier += 10; \n\n\nargs.prefillModifiers.successBonus += 1; \n","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\nawait test.roll();\nif (test.failed)\n{ \n await this.actor.addCondition(\"fatigued\")\n} ","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\nconst hasPainless = this.actor.has(\"Insensible à la douleur\");\nif (hasPainless === undefined) \n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n this.script.scriptMessage(\n `<p><strong>${this.actor.prototypeToken.name}</strong> gagne le Trait de Creature Insensible à la Douleur. Cet effet dure 1 heure, après quoi il disparait et le total des Blessures encaissés par le buveur sont encaissés d'un coup.</p>\n <p>Notez que cela n'empêche pas le buveur de recevoir une Blessure Critique ou de mourrir. Cela permet par contre d'éviter la majorité de leur effets.</p>`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\n}","84IB8CWa55XzoAkv":"return ([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\nif (!this.actor.has(\"Mort-vivant\") && !this.actor.has(\"Démoniaque\")) \n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), { appendTitle: \" - \" + this.effect.name, fields: { difficulty: \"average\" }, context: { failure: `Pert de ${strLoss} en Force et ${tghLoss} en Endurance` } }).then(async test => {\n await test.roll();\n if (test.failed) {\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 })\n }\n })\n\n}\nelse {\n this.script.scriptNotification(`<strong>${this.actor.name}</strong> est immunisé à ${this.effect.name}`)\n}\n","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\nlet types = {\n none : \"Aucun\",\n cold : \"Froid\",\n corrosion : \"Corrosion\",\n fire : \"Feu\",\n electricity : \"Electricité\",\n poison : \"Poison\",\n smoke : \"Fumée\",\n various : \"Divers\"\n}\nif (!type)\n{\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choisir le Souffle\"))[0]?.id;\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\n}\n\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\n{\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\n}","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\n{\n\targs.fields.modifier += 10;\n}\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n\targs.fields.modifier -= 10;\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\"))","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\n{\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8TRiAJ8thIKE4IoL":"\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\n\nargs.actor.characteristics.i.modifier += 10 * SL\nargs.actor.characteristics.ag.modifier += 10 * SL","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\n{\n args.actor.addCondition(\"ablaze\")\n}","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Range)\n if (Number.isNumeric(range))\n {\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\n }\n}","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\nawait test.roll();\n\nif (test.succeeded)\n{\n this.actor.addCondition(\"stunned\") \n}\nelse if (test.failed)\n{\n this.actor.addCondition(\"poisoned\", 2);\n}","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\n\nif (APIgnored)\n{\n args.modifiers.ap.ignored += APIgnored\n args.modifiers.ap.details.push(`<strong>${this.effect.name}</strong>: Ignorer les PA avec des Points Faibles (${APIgnored})`)\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\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\nargs.item.system.qualities.value.push({name : \"impact\"})\n","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\nif (caster)\n{\n let healed= caster.characteristics.wp.bonus\n this.actor.modifyWounds(healed);\n this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regagne ${healed} Blessures`)\n}","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\n\nif (weakpointsAP > 0)\n{\n args.modifiers.ap.ignored += weakpointsAP;\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore les Points Faibles (${weakpointsAP})`);\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\nitem.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\nthis.actor.characteristics.int.value= \"-\"\nthis.actor.characteristics.wp.value= \"-\"\nthis.actor.characteristics.fel.value = \"-\"","8zTkDVziBPaNbMQX":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, \"Choisir 6 sorts de Magie Mineure\")\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, \"Choisir 9 Sorts d'Arcane\")\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\n return\n\nif (args.test.characteristicKey == \"wp\")\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\n let data = item.toObject();\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\n data.system.description.value += \"<p>Ce Talent s'applique également à tout objet métallique à cause de <strong>l'Affinité Metallique</strong></p>\"\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n})","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name += ` (Odorat)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.name += ` (Si Charge)`\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\n\tthis.script.scriptNotification(\"Applique après les effets\");\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.name += \" (Aucun PA)\"\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\n","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptNotification(\"Subi une <strong>Blessure Purulente</strong>\")\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\n}\nelse \n{\n this.script.scriptNotification(\"Evite une <strong>Blessure Purulente</strong>\")\n}\n","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\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\"}])\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\n{\n this.script.scriptMessage(`Reçoit ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (args.test.failed && this.actor.type == \"character\")\n {\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\n }\n}","A1odAcuRbq9797ZB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Base)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Corps à corps (Armes d'hast)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n }\n]\n\nlet choice = await Dialog.wait({\n title : \"Choix\",\n content : \n `<p>\n Choisissez une option\n </p>\n <ol>\n <li>Corps à corps (Base)</li>\n <li>Corps à corps (Armes d'hast)</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Basic\",\n callback : () => {\n return choice1;\n }\n },\n 2 : {\n label : \"Armes d'hast\",\n callback : () => {\n return choice2;\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","A3MW0UksYrHGa0Qw":"return [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic);","A3fvV69RS1lYgma0":"if (this.actor.type == \"character\") \n this.actor.corruptionDialog(\"minor\")\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif(test.failed)\n{\n await this.actor.addCondition(\"unconscious\");\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\n await secondTest.roll();\n if(secondTest.failed)\n {\n await this.actor.addCondition(\"fatigued\");\n }\n}","A6DcKPzAGntzSCil":"let roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","ACgKpKrEEHoNGG0h":"return !args.skill?.name.includes(\"Focalisation\") && args.type != \"channelling\"","ACtDCTLZXmd5uXjX":"let halve;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await Dialog.confirm({title : this.effect.name, content : \"Diviser les dommages? (Divise par 2 tout les dommages autre que ceux causés par le feu, le froid et magiques)\"})\n}\nelse\n{\n halve = false;\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé par 2\", value : \"× 0.5\"})\n}","AGD7zCyV4zruvnWu":"return args.type != \"cast\" || ![\"mort\", \"nécromancie\", \"vie\", \"lumière\", \"cieux\"].includes(args.spell?.system.lore.value)","AHZ8f7dfN8jNsYk6":"let token = this.actor.getActiveTokens()[0];\nlet target = args.data.targets[0];\nlet weapon = args.weapon;\n\nif(!target || !token)\n{\n return;\n}\n\nlet distance = canvas.grid.measureDistances([{ ray: new Ray({ x: token.center.x, y: token.center.y }, { x: target.center.x, y: target.center.y }) }], { gridSpaces: true })[0]\nlet currentBand\n\nfor (let band in weapon.range.bands) \n{\n if (distance >= weapon.range.bands[band].range[0] && distance <= weapon.range.bands[band].range[1]) \n {\n currentBand = band;\n break;\n }\n}\n\nreturn [game.i18n.localize(\"Long Range\"), game.i18n.localize(\"Extreme\")].includes(currentBand)","AI6bFrjWk4NH9FBd":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","ALuPRzf85dmkEfLo":"return args.skill?.name == game.i18n.localize(\"NAME.Intuition\");","AMI2wDJqsIZsoq1e":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.scriptMessage(`Émet un nuage de poudre noire nauséabonde. Active l'effet <strong>Fellowship Penalty</strong> sur @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","AMxezwtYnWCF6Oza":"return args.skill?.name == \"Projectiles (Poudre noire)\"","AS7CstSosuCrwZ19":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 20,\n \"bright\": 10,\n \"angle\": 360,\n \"alpha\": 0.4,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","AV2Kj6jgmIc45zKi":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","AVROqafFhKjN6TPR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","AWgZnm9xLyIWCDnp":"let robust = args.modifiers.other.find(i => i.key == \"robust\")\nif (robust)\n{\n\trobust.value--;\n}\nelse \n{\n\targs.modifiers.other.push({key: \"robust\", label : this.effect.name, value : -1})\n}\n","AZGXrZOQ4EzjxRL9":"return true;","Adgs6Zs0FdefO6qx":"if (args.test.options.pilot && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`<b>${this.effect.name}</b>: DR limité à 1`)\n}","Ah2wyywkL8hjJNXM":"args.options.healWounds = true;","AjC4dsiuhVCOnRGI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","AmOMCUaWLJ2iJAt5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IFKWu98qmWpaSfUi\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","AmpDbT0BkDHeaRzf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\");\nlet data = item.toObject();\ndata.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ApaLcUhuty3EzJoP":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> voit ses points de Destin augmentés de ${current} à ${fortunePoints + current}`)","AqHLHp4kH6KULk3e":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"Aucun disponible!\", \"error\")\n}","AyNb5sj6FD2Z3Q5T":"this.actor.addCondition(\"dead\")\nthis.actor.setWounds(0);\nthis.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"scatter\"))","AyS3iLljxHRKsHg4":"let broken = this.actor.hasCondition(\"broken\");\nlet fatigued = this.actor.hasCondition(\"fatigued\");\nawait broken?.delete();\nawait fatigued?.delete()\nlet drilled = await fromUuid(\"Compendium.wfrp4e-core.items.Item.J9MK0AIaTbvd5oF6\")\nlet fearless = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nlet stout = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IogM5gnsoOX63w7j\")\nthis.actor.createEmbeddedDocuments(\"Item\", [drilled, fearless, stout], {fromEffect : this.effect.id})","B063u4vrbvzMaCQt":"args.item.system.flaws.value = args.item.system.flaws.value.concat([{name : \"bulky\"}, {name : \"unreliable\"}])","B1xgRS00RcTIZLnO":"return [\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\")","B6ZbY3bxTPg6nCng":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\");","B87v1twc65qyvUWi":"args.fields.modifier += 10 * this.effect.conditionValue","B950b0XnIUYCdVwu":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\n\nif (test.succeeded)\n{\n if (args.totalWoundLoss <= parseInt(test.result.SL))\n {\n args.abort = `<strong>${this.effect.name}</strong>: Attaque détournée et renvoyée`\n }\n args.modifiers.other.push({label : this.effect.name, value : -1 * parseInt(test.result.SL)})\n}","BAOv7moTxsKlT3JS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"easy\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"broken\")\n}","BD7bVTU2pVoRSRBe":"let symptoms = {\n convulsions : \"Convulsions\",\n coughsandsneezes : \"Coughs and Sneezes\",\n fever : \"Fever\",\n flux : \"Flux\",\n nausea : \"Nausée\"\n}\n\nlet roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nroll.toMessage(this.script.getChatData());\n\nlet choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.total, \"Choisissez les Symptomes\");\n\nif (choices.length)\n{\n let symptomEffects = duplicate(game.wfrp4e.config.symptomEffects)\n let added = []\n for(let choice of choices)\n {\n let symptom = symptomEffects[choice.id];\n symptom.origin = this.effect.uuid;\n added.push(symptom);\n }\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", added)\n}\nelse \n{\n this.effect.delete();\n}\n\n","BHbFqhJPzZI2txLs":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 2\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","BcXTujburrHpjpwa":"args.fields.slBonus -= 3;","Be5rdfnZorbILhpC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 3 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Bexspr5viPhHiFmU":"let fatigued = this.actor.hasCondition(\"fatigued\");\nlet value = fatigued?.conditionValue || 0;\nargs.fields.modifier += value * 10;","Bj6bxItlgtI2sXVN":"let roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData());\nargs.totalWoundLoss = Math.max(0, args.totalWoundLoss - roll.total)\nargs.modifiers.other.push({label: this.effect.name, value : -1 * roll.total})\nthis.effect.update({disabled : true})","BtyFhdGMKiMamGhM":"let test = await args.actor.setupSkill(\"Esquive\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nlet damage = parseInt(this.effect.sourceTest.result.SL)\n\nif (test.succeded)\n{\n damage = damage + 8 - parseInt(test.result.SL)\n}\n\nelse \n{\n damage = damage + 10\n this.actor.addCondition(\"entangled\", 3)\n}\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", suppressMsg: true}))\n","Bv3431tnG3VKaTJr":"if (args.test.result.castOutcome == \"success\")\n{\n args.test.result.other.push(`@Fear[2,${this.actor.name}]`);\n}","ByhEa1BxQOyrOmqg":"return args.item?.attackType == 'melee'","BzDLuxBNw1QNIacg":"if (args.item.type == \"skill\")\n args.item.system.advances.value = 0\n\nif (args.item.type == \"talent\")\n args.item.system.tests.value = \"\"\n\nif (args.item.type == \"weapon\") \n args.item.system.qualities.value = []","CCK1iIfPmB398ziT":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {fields : {difficulty : \"difficult\"}, skipTargets: true, appendTitle : \" - Walking\"})\ntest.roll();","CCwuu3bPLCpVGAmb":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\n","CDASLC4fWKSGQKf9":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded?.getFlag(\"wfrp4e\", \"flockOfDoom\"))\n{\n blinded.delete();\n}","CHnaBPHk6HdFS512":"let arm = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\");\nlet leg = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\");\n\nlet choice = await ItemDialog.create([arm, leg], 1, \"Choisir le Membre\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})","CIxZYkHggBQ6EsHP":"this.script.scriptNotification(\"Effet utilisé\");\nthis.effect.delete();","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\n\nlet lostFingers = this.actor.flags.useless[key] || 0;\n\nlostFingers += 1\n\nthis.actor.flags.useless[key] = lostFingers;\n\nif (lostFingers >= 4)\n{\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 30,\n \"bright\": 20,\n \"angle\": 90,\n \"alpha\": 0.6,\n \"animation\": {\n \"speed\": 3,\n \"intensity\": 3,\n \"type\": \"torch\",\n },\n \"color\": \"#ffcc66\",\n }}));","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\n{\n if (effect.isCondition)\n {\n effect.delete();\n }\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\n{\n this.actor.modifyAdvantage(-3);\n this.script.scriptNotification(\"Avantage soustrait\")\n}\nelse \n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Exposition Mineure à la Corruption}`\n )\n this.script.scriptMessage(`<strong>${this.effect.name}</strong>: \n @Corruption[moderate]{Exposition Modérée à la Corruption} <br/>\n <strong>${args.actor.prototypeToken.name}</strong> doit réussir un \n <strong>Test de Corruption (Modéré)</strong>`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n}","Ca1fXHTA1e2QLx0D":"args.fields.modifier += 50;","CiFeduksZJ6PRulx":"return args.skill?.name == \"Chevaucher (Cheval)\" || (args.options.dodge && this.actor.isMounted);","Cjj4iLkdY1NaZRCi":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Projectiles\")))\n{\n let choice = await Dialog.wait({\n title: this.effect.name,\n content: `<p>Appliquer les dommages de <strong>${this.effect.name}</strong> à l'attquant?`,\n buttons: {\n yes: {\n label: \"Oui\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"Non\",\n callback: () => {\n return false;\n }\n }\n }\n })\n\n if (choice)\n {\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\n }\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n\n\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"unconscious\")\n}","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\n\n","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Métier (Apothicaire)\" || args.skill?.name == \"Métier (Alchimiste)\"","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\ntooth = tooth.toObject()\ntooth.system.specification.value = 3\ntooth.system.qualities.value = [{name : \"magical\"}]\n \nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nclaw = claw.toObject()\nclaw.system.specification.value = 4\nclaw.system.qualities.value = [{name : \"magical\"}]\nclaw.name = \"Claw\"\n\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \n{\n\tlet roll = await new Roll(\"1d10\").roll()\n\tawait roll.toMessage(this.script.getChatData());\n\tif (roll.total == 9 || roll.total == 10)\n\t{\n\t this.script.scriptMessage(`<strong>${this.actor.name}</strong> attaché à <strong>${this.actor.getFlag(\"wfrp4e\", \"isAttached\")}</strong> tombe.`)\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \n\t}\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\n\nthis.item.updateSource({\"system.location.key\" : letter + \"Doigt\"})\n\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create(\"Selectionnez la colonne pour déterminer la Tête de Bête\", \"Sélectionner la colonne\", \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\n\nif (column)\n{\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\n this.script.scriptMessage(`<strong>${result.title}</strong><br>${result.result}`);\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\n let item = await fromUuid(uuid);\n if (item)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n this.item.delete();\n }\n}","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\nawait test.roll();\nif (test.failed)\n{ \n await this.actor.addCondition(\"blinded\");\n await this.actor.addCondition(\"fatigued\")\n} ","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athlétisme\"","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\n{\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\n}\n\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\n\nif (this.actor.system.status.advantage.value >= 3)\n{\n this.script.scriptNotification(`Ajout de ${frenzy.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\n}\nelse if (this.actor.system.status.advantage.value >= 1)\n{\n let data = hatred.toObject();\n data.system.specification.value = \"Combatants au corps à corps\"\n this.script.scriptNotification(`Ajout de ${hatred.name}`)\n this.actor.setAdvantage(0)\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n}","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\n{\n blinded.delete()\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\n\nawait test.roll();","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\n{\n this.script.scriptNotification(\"Ajout de A Terre\");\n this.actor.addCondition(\"prone\")\n}","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\nlet data = item.toObject();\ndata.name += \" (A déterminer)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\nthis.script.scriptMessage(`Soigne ${this.actor.system.characteristics.t.bonus * 3} Blessures`)\n\nthis.actor.hasCondition(\"bleeding\")?.delete()\nthis.actor.hasCondition(\"fatigued\")?.delete()\n","EQ5dtGW5kQhtAb87":"await this.actor.addCondition(\"prone\")\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"stunned\")\n}","ERxrWzSpw8qwxFVi":"this.script.scriptNotification(`Ne peut entrer ${this.effect.name}!`); this.actor.addCondition(\"broken\");","EU5j0hnDTG9Z6d1e":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif(test.failed)\n{\n this.actor.addCondition(\"stunned\", 2)\n}","EVBSHEC5nmmj2X41":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","EYny6z5oTOhxGDfb":"args.fields.modifier -= 10;\n","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"ablaze\")\n}","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.succeeded)\n{\n this.script.scriptMessage(\"Peut effectuer une Action ou un Mouvement (en choisir un)\")\n}\nelse \n{\n this.script.scriptMessage(\"Ne peut pas effectuer d'Action ou de Mouvement ce round\") \n}","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif(test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n {\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n }\n else if (args.test.isFumble && roll != 1)\n args.test.result.other.push(\"Raté résultat: \" + roll)\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ErgOwSiVnm9VLVHN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Et4tPHlrkueLqP3T":"if (args.item.type == \"skill\") args.item.system.modifier.value -= 10","Ew3C2WmLCtc1KT46":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")) || args.item?.id == this.item?.id","EwD053Fyy46b59ZI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.6l3jvIAvrKxt0lA9\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","Eye6dranWpNsILjm":"if (this.actor.system.status.wounds.value <= 1)\n{\n this.effect.delete();\n}","F4aGsdzJ9SYcX57F":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.HpFkVJ2lYPAWumUL\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FAB12eLcSCAOOQwk":"this.script.scirptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true});","FAf4iXj5LkdvukS2":"fromUuid(\"Compendium.wfrp4e-wom.items.0Xdm4r7l2EwC4fcg\").then(item => Item.create(item.toObject(), {fromEffect : this.effect.id, parent : this.actor}))","FMA16PvoObBV8vDl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nitem = item.toObject()\nitem.system.specification.value = 20\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\nthis.script.scriptNotification(item.name + \" added\")","FMSN5uRskkATexzB":"game.wfrp4e.tables.rollToChat(\"crithead\")","FSqUqSByMiztYOQM":"if (args.totalWoundLoss > 0)\n this.script.scriptMessage(`<b>Infected: ${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\") })","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Ride (Horse)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","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)\n{\n args.actor.addCondition(\"bleeding\", 2);\n this.script.scriptNotification(\"Added Bleeding\")\n}","FciJSTq7dZsZIPgl":"if (args.equipped)\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}\nelse \n{\n this.effect.deleteCreatedItems(); \n}","FfTqCPxCoxwGDTQs":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","FiD3mvWIBHNNIuO9":"if (args.opposedTest.result.hitloc.value == \"body\")\n{\n if ((await new Roll(\"1d2\").roll()).total == 1)\n {\n args.opposedTest.result.hitloc.value = \"head\"\n this.script.scriptMessage(`Hit location changed to Head`)\n }\n}","FkTwk8hfHpRLbAp2":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","FmLx9pwOkzqqU7Ph":"return args.skill?.name == game.i18n.localize(\"NAME.Track\");","FqevMs0ukQ9WuUHl":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (this.item.getFlag(\"wfrp4e\", \"brittle\"))\n{\n ChatMessage.create({content: `<strong>${this.item.name}</strong> shatters!`})\n this.item.update({name : `${this.item.name} (Shattered)`})\n}","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\n let wp = caster.system.characteristics.wp.value\n if (wp > this.actor.system.characteristics.t.value) {\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\n this.actor.update({ \"system.status.wounds.value\": 0 })\n this.actor.addCondition(\"dead\")\n }\n else {\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\n ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\n })\n }\n }\n}","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\nargs.actor.addCondition(\"ablaze\", ablaze)","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[1].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\n{\n\targs.fields.lostHand = true;\n\targs.fields.modifier += -20;\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `<strong>Confused</strong>: Determine behaviour by @Table[bewilder] Table.`}})\nawait test.roll();\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\n{\n args.item.system.AP.head = 0;\n}","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData())\n if (roll.total <= 3)\n {\n this.actor.addCondition(\"blinded\", 3)\n }\n else if (roll.total <= 6)\n {\n this.actor.addCondition(\"broken\");\n }\n else if (roll.total <= 9)\n {\n this.actor.addCondition(\"stunned\");\n }\n else if (roll.total == 10)\n {\n this.actor.addConditon(\"unconscious\")\n }\n}","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\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\")})\n }\n}","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\n game.dice3d?.showForRoll(roll);\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\n{\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\" }})\n await test.roll();\n if (test.failed)\n {\n args.actor.addCondition(\"poisoned\");\n }\n}\n ","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\" } })\n\n await test.roll();\n\n if (!test.succeeded)\n {\n args.actor.addCondition(\"broken\");\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\n{\n let removeRepeater = false\n if(!this.item.system.offhand.value) // main\n {\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\n if (offhandUsed)\n {\n removeRepeater = true;\n }\n }\n else // offhand\n {\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\n if (mainhandUsed)\n {\n removeRepeater = true;\n }\n }\n \n if (removeRepeater)\n {\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\n }\n}","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\n\neffects.splice(effects.length - 1);\n\nif (effects.length == 0)\n{\n return this.script.scriptNotification(\"All Effects have been used. Reset to select them again\")\n}\nlet choice = await ItemDialog.create(effects, 1, \"Choose Power to Gain\");\n\nif (choice[0])\n{\n choice[0].update({disabled : true})\n let effect = choice[0].convertToApplied();\n effect.name += ` (${this.effect.name})`\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\n}","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\n\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Select Wind\")\n//this.actor.createEmbeddedDocuments(\"Item\", items);\n\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\n\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\n\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\nif (bleeding)\n{\n this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`)\n bleeding.delete(); \n}\nelse \n{\n this.script.scriptNotification(`No Bleeding Conditions`)\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\n{\n args.test.options.criminal = true;\n let currentCareer = args.test.actor.system.currentCareer;\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)\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)\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)\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\n if (coin != \"g\") // Don't roll for gold, just use standing value\n {\n dieAmount = dieAmount + \"d10\";\n }\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\n let moneyString = `${moneyEarned}${coin}`\n let transactionString = `${moneyEarned}${term}`\n\n this.script.scriptMessage(`<a class=\"money-drag\" data-amt=\"${moneyString}\"><strong>Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}</strong></a>`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\n{ \n args.test.result.description = \"Astounding Failure\";\n args.test.result.outcome = \"failure\";\n ChatMessage.create({content : \"<em>SQUEAK</em>\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\n}","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\n test.roll();\n})","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\n\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\n\nthis.script.scriptMessage(`Attaches to <strong>${args.actor.name}</strong>`)","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Corruption Point Gained\" } })\nawait test.roll();\n\nif (test.failed && args.actor.type == \"character\") \n{\n let msg = \"\"\n msg += `<p><b>${this.actor.prototypeToken.name}</b> gained a Corruption point</p>`\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n msg += `<b>${args.actor.prototypeToken.name}</b> gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}`\n }\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\n}","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), game.wfrp4e.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choose a Skill\")\n\n items = items.map(i => i.toObject())\n items.forEach(i => i.system.advances.value = 20)\n\nitems.forEach(i => equip(i))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.data.worn.value = true\n else if (item.type == \"weapon\")\n item.data.equipped = true\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\n item.data.worn = true\n}","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\n{\n\treturn;\n}\n\nlet index = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(index, 1, \"Choose a Lore\")\nlet text;\nif (!choice[0])\n{\n let custom = await Dialog.wait({\n title : \"Enter Lore\",\n content : \"<input type='text'>\",\n buttons : {\n confirm : {\n label : game.i18n.localize(\"Confirm\"),\n callback : (dlg) => {\n return dlg.find(\"input\")[0].value\n }\n }\n },\n default : \"confirm\",\n close : () => {\n return \"\"\n }\n }) \n text = custom || \"\"\n}\nelse \n{\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\n}\n\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HOt2hHOiHDZ7oBgW":"if ([\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n{\n\targs.actor.details.move.value /= 2\n}\n","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\n{\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Flail)\")\n{\n args.item.system.modifier.value += 10;\n}","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \n// in melee combat must make an Average (+20) Endurance Test \n// or take a Stunned Condition\n\n\nif (args.totalWoundLoss > 1) {\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if(test.failed)\n {\n await args.actor.addCondition(\"stunned\");\n }\n}","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.scriptNotification(\"Added Bleeding\")\n}","HoNTnPphrJISSQr1":"ChatMessage.create({content : \"<em>Speak and be known to me</em>\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})","Hq1G30lhJYvtOSNb":" \n if (args.test.failed)\n {\n let applicableCharacteristics = [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"];\n if (applicableCharacteristics.includes(args.preData.characteristic))\n {\n this.actor.addCondition(\"stunned\");\n }\n }","HrOBAXsEX073ReKl":"let skill = `Entertain (Singing)`\nlet currentCareer = this.actor.system.currentCareer;\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\n\nif (!currentCareer) return\n\n\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\nif (existingSkill && inCurrentCareer)\n{\n\texistingSkill.system.advances.costModifier = -5;\n}\nelse \n{\n\tcurrentCareer.system.skills.push(skill);\n}\n\n\n","HrYchgkdZBiu1yPF":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\");","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n this.actor.addCondition(\"bleeding\")","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\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))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Cannot cast Spells or use Prayers\");\n}\nelse return true;","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\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})\nawait test.roll();\nif(test.failed)\n{\n await this.actor.addCondition(\"stunned\");\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\n await secondTest.roll();\n if(secondTest.failed)\n {\n this.effect.updateSource({name : \"Taste of Death\"})\n await this.actor.addCondition(\"fatigued\");\n }\n else \n {\n return false;\n }\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n this.actor.addSystemEffect(\"convulsions\")\n this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @Symptom[Convulsions] for [[1d10]] hours`)\n }\n}","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif(test.failed)\n{\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\n return\n\nlet reach = args.item.reach.value\nlet reachNum = game.wfrp4e.config.reachNum[reach]\nreachNum = Math.min(reachNum + 2, 7)\n\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\n\nargs.item.reach.value = key","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\n\nif (test.failed)\n{\n await this.actor.addCondition(\"grappling\")\n}","IR5URcjnCuWBFMoN":"// If a full dose is imbibed, \n// the victim must pass a Hard (-20) Endurance Test.\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}})\nawait test.roll()\nif (test.failed)\n{\n this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> notices nothing amiss save that they become tired a little earlier than usual. At this point it is still possible to save the victim via a powerful antidote or magical means.</p>\n <p>Once they fall asleep however, it is almost impossible. At this point the victim must make a <strong>Hard (-20) Endurance</strong> Test. If they fail, they never awaken.</p>`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n })\n}\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyFear(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postFear(value, name)\n}","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 1\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\nlet data = item.toObject();\ndata.system.specification.value = 3\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\n{\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\n}","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\n{\n this.actor.removeCondition(\"broken\")\n this.script.scriptNotification(`Cannot have Broken`);\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value || 1)\n\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value || 1)","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\n{\n return;\n}\n\nlet god = await ValueDialog.create(\"Enter a Deity\", \"Blessed\")\n\nif (god)\n{\n let prayers = await game.wfrp4e.utility.findAll(\"prayer\", \"Loading Prayers\")\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\n if (blessings.length)\n {\n this.script.scriptNotification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\n }\n else \n {\n this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)\n }\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\n await this.actor.update({\"system.details.god.value\": god})\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet data = item.toObject();\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\")))","J1FPDdrXGctKDTZz":"if (args.equipped)\n{\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n wardData = ward.toObject()\n wardData.system.specification.value = \"8\"\n \n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\n mrData = mr.toObject()\n mrData.system.specification.value = 2\n \n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\n}\nelse\n{\n this.effect.deleteCreatedItems()\n}","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}\n","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\nif (caster)\n{\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\n await this.actor.modifyWounds(healed);\n this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${healed} Wounds`)\n}\n \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\"}})\n await test.roll();","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","JaiC5P6nIgctOacH":"if (args.actor.system.details.species?.value?.toLowerCase() == \"dwarf\")\n{\n args.weaponProperties.flaws.undamaging = true;\n}","JavuFNZ9Pj5elVLc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\n\nlet test = await this.actor.setupSkill(\"Athletics\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","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;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\n\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Language (Magick)\", \"Channelling (Hysh)\"].includes(args.skill?.name) ","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.actor.removeCondition(\"surprised\")\n this.script.scriptMessage(`Cannot be Surprised`);\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an <b>Average (+20) Willpower</b> Test to attack this target!`)\n\nreturn true; // No need to show this in the dialog","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\n this.actor.addCondition(\"dead\")","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\nlet data = item.toObject();\ndata.system.location.key= this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\nawait this.actor.addCondition(\"ablaze\")","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\nlet choice = [];\n\nif (!specification || specification == \"Trained Skills\")\n{\n choice = await ItemDialog.create(ItemDialog.objectToArray({\n broken: \"Broken\",\n drive: \"Drive\",\n entertain: \"Entertain\",\n fetch: \"Fetch\",\n guard: \"Guard\",\n home: \"Home\",\n magic: \"Magic\",\n mount: \"Mount\",\n war: \"War\"\n }, this.effect.img), \"unlimited\", \"Choose Training\");\n}\nelse \n{\n choice = specification.split(\", \").map(i => {\n return {\n id : i.toLowerCase(),\n name : i\n }\n });\n}\n\nif (choice.length)\n{\n let changes = foundry.utils.deepClone(this.effect.changes);\n\n for(let training of choice)\n {\n switch(training.id)\n {\n case \"broken\" : \n let roll = await new Roll(\"2d10\").roll(); \n roll.toMessage(this.script.getChatData());\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\n\n if (this.actor.type == \"creature\")\n {\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\n if (bestial)\n {\n bestial.update({\"system.disabled\" : true})\n }\n }\n break;\n\n case \"drive\" : \n\n break;\n\n case \"entertain\" : \n\n break;\n\n case \"fetch\" : \n\n break;\n\n case \"guard\" : \n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\n setProperty(args, \"options.keepId\", true);\n break;\n\n case \"home\" : \n\n break;\n\n case \"magic\" : \n\n break;\n\n case \"mount\" : \n\n break;\n\n case \"war\" : \n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\n break;\n }\n }\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\nif (!table)\n{\n\tui.notifications.error(\"Cannot find table with key: mutatemental\")\n}\nlet result = (await table.roll()).results[0];\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\nlet item = await fromUuid(uuid);\n\nif (item)\n{\n this.script.scriptNotification(`${item.name} added`)\n this.actor.createEmbeddedDocuments(\"Item\", [item])\n}\nelse \n{\n ui.notifications.error(\"Item could not be found: \" + uuid)\n}","KIoVBinAZK8sMOqD":"\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\n await test.roll();\n if (test.failed)\n {\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\n this.script.scriptNotification(\"Gained \" + disease.name)\n })\n }\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n }}));","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Schemer\", \"Second Sight\"].map(game.wfrp4e.utility.findTalent))\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\");\nlet data = item.toObject();\ndata.name += ` (Disease)`;\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\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\nawait test.roll();\nif (!test.succeeded)\n{\n args.actor.addCondition(\"stunned\")\n}","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\nthis.actor.hasCondition(\"deafened\")?.delete()\nthis.actor.hasCondition(\"unconscious\")?.delete()","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \n{\n this.item.system.reduceQuantity();\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\n await test.roll();\n if (test.succeeded) \n {\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\n }\n else \n {\n this.script.scriptNotification(\"Heal Test failed!\", \"error\")\n }\n}\nelse \n{\n this.script.scriptNotification(\"None left!\", \"error\")\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\n await test.roll()\n if (test.failed) \n {\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\n this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> lost ${toughnessLost} Toughness`)\n }\n })\n }","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\n{\n\targs.flags.lostFingers = true;\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"fatigued\");\n}","KyswmGj1uG3QS3ng":"args.applyAP = false;","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\n{\n this.script.scriptMessage(`<b>${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\n\tthis.actor.addCondition(\"stunned\", stuns)\n}","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \n{\n this.actor.addCondition(\"unconscious\");\n}\nelse \n{\n this.actor.addCondition(\"prone\");\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\n\nif(career)\n{\n career.system.current.value = true;\n}","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\n{\n args.opposedTest.swap(this.effect.label);\n}","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `<strong>${this.effect.name}</strong>: cannot move or take actions`}}).then(test => {\n test.roll();\n })\n}","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n await args.actor.addCondition(\"fatigued\");\n }\n}","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\n\nif (caster)\n{\n let bonus = caster.system.characteristics.wp.bonus\n this.actor.modifyWounds(bonus)\n\n this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${bonus} Wounds`)\n}","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;\nif (args.characteristic == \"fel\")\n{\n\targs.fields.modifier -= 5;\n}\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\n{\n\targs.fields.modifier -= 20;\n}\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.scriptMessage(`<strong>${this.effect.name}</strong> quits your mind in disgust and erases itself from your grimoire!`)\n this.effect.sourceItem.delete();\n }\n}","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\nlet data = item.toObject();\ndata.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n\targs.actor.addCondition(\"unconscious\")\n}\n\n","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\nlet name = this.actor.prototypeToken.name\n\nif (game.user.isGM && game.user.targets.size)\n{\n game.user.targets.forEach(t => {\n t.actor.applyTerror(value, name)\n })\n game.user.updateTokenTargets([]);\n}\nelse \n{\n game.wfrp4e.utility.postTerror(value, name)\n}","MI2GgNi3fZtUCtQD":"return [\"int\", \"wp\"].includes(args.characteristic)","MJB6WbZSF6Briz30":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\")","MSJWJEUrX7ZmMvAD":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\"))","McLR9YcgVUG3MooC":"args.applyTB = false;","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\n{\n this.script.scriptNotification(\"Immune to Ablaze\")\n await this.actor.hasCondition(\"ablaze\")?.delete()\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>\n They cannot cast Spells or pray for Blessings and Miracles.<br>\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}. \n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.scriptMessage(`<strong>${this.item.name}</strong> 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.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n\n\n\n","MgTqCMRjxhezT73T":"return args.fields.hitLocation == \"head\" && args.weapon?.system.properties.qualities.pummel","MgZreqq3Jua10c8s":"return ![\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","Mhb67xufvA9uWO21":"let actorSize = game.wfrp4e.config.actorSizeNums[args.actor.details.size.value]\nlet attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.value]\n\nif (attackerSize > actorSize)\n{\n args.actor.addCondition(\"prone\")\n this.script.scriptMessage(`<strong>Tail Attack</strong>: ${args.actor.prototypeToken.name} is now <strong>Prone</strong>`)\n}","Mir4FMHQRdVqazAF":"let actorSize = game.wfrp4e.config.actorSizeNums[args.actor.details.size.value]\nlet attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.value]\n\nif (attackerSize > actorSize)\n{\n let msg = `<b>Tongue Attack</b>: ${args.actor.prototypeToken.name} is now @Condition[Entangled]`;\n await args.actor.addCondition(\"entangled\");\n if (actorSize <= 2)\n {\n msg += `and @Condition[Engaged]`\n }\n this.script.scriptMessage(msg, {speaker : {alias: args.attacker.prototypeToken.name}})\n}","MkEcdViivk7abf1x":"args.actor.flags.meleeDamageIncrease += 1","MnXny8SCh6OceJc9":"return args.characteristic == \"int\"","MnqQkXVp20Lw84I1":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\nif (test.failed)\n{\n this.script.scriptMessage(await this.actor.applyBasicDamage(3, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","Mp8UjuCLa9jdzhBS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n if (!this.actor.hasCondition(\"fatigued\"))\n {\n await this.actor.addCondition(\"fatigued\");\n }\n else\n {\n await this.actor.addCondition(\"blinded\");\n await this.actor.addCondition(\"deafened\");\n }\n \n if (((this.actor.hasCondition(\"blinded\").conditionValue || 0) + (this.actor.hasCondition(\"deafened\").conditionValue || 0)) > this.actor.system.characteristics.i.bonus)\n {\n await this.actor.addCondition(\"unconscious\"); \n }\n}","Msygc7oQQPB5fw0b":"let test = this.effect.sourceTest;\nif (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n{\n\tlet points = await new Roll(\"1d10\").roll();\n\tgame.dice3d?.showForRoll(points)\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value + points.total})\n\tthis.script.scriptMessage(`Gains ${points.total} Corruption`)\n}\nelse \n{\n\tlet points = this.effect.sourceTest.result.overcast.usage.other.current;\n\tthis.actor.update({\"system.status.corruption.value\" : this.actor.system.status.corruption.value - points})\n\tthis.script.scriptMessage(`Loses ${points} Corruption`)\n}","MwUzyAgd0yPnmZCH":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx\")\nlet data = item.toObject(); \ndata.name = data.name.replace(\"Target\", \"Strangers\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","Myl1Ishu9GBraYUZ":"this.actor.removeCondition(\"bleeding\")","N2MeOlf0GjPiRcSb":"let test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : \"Drops the item\"}})\nawait test.roll();","N7nGncsPrTz2ZbDA":"return !args.options.dodge || !this.actor.isMounted","N8hA6ysHCTlLd8Kj":"let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 15,\n \"ag\" : 0,\n \"dex\" : 10,\n \"int\" : 15,\n \"wp\" : 15,\n \"fel\" : 0\n}\nlet skills = [\"Channelling\", \"Cool\", \"Dodge\", \"Entertain (Storytelling)\", \"Intuition\", \"Language (Magick)\", \"Lore (Magic)\", \"Perception\"]\nlet skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]\nlet talents = [\"Arcane Magic\", \"Petty Magic\", \"Second Sight\"]\nlet trappings = [\"Hand Weapon\", \"Quarterstaff\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","N9kA46ZQ9LiRjy6T":"return args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\");","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\nbrokenbone = brokenbone.toObject();\nteeth = teeth.toObject();\ntongue = tongue.toObject();\n\n\nlet roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\n\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nbrokenbone.system.location.value = \"Jaw\"\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\")\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n}\n ","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","Na7Nanl9YmxZlTo7":"return args.type != \"cast\" && args.type != \"channelling\")","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nacutesense = acutesense.toObject();\nacutesense.name += \" (Smell)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Magic Resistance\", \"talent\")) \n return\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\n{\n let AP = parseInt(this.effect.sourceTest.result.SL)\n args.modifiers.ap.value += AP;\n args.modifiers.ap.magical += AP;\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\nargs.test.result.critModifier += 20;\n\nif (args.test.result.critical)\n{\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\n}","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","O7lXFZLrLdFaShGR":"args.options.catfall = true;","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\nlet biteData = bite.toObject();\nlet venomData = venom.toObject();\n\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\nvenomData.system.specification.value = \"Average\"\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OEy2lxvic37dRBEt":"let filters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"petty\"\n }\n]\n\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Petty Spells\")\n\n\nfilters = [\n {\n property : \"type\",\n value : \"spell\"\n },\n {\n property : \"system.lore.value\",\n value : \"\"\n }\n]\n\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Arcane Spells\")\n\nlet items = petty.concat(arcane).map(i => i.toObject())\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll();\nlet regen = regenRoll.total;\n\nif (wounds.value >= wounds.max)\n return\n\nif (wounds.value > 0) \n{\n wounds.value += regen\n if (wounds.value > wounds.max)\n {\n wounds.value = wounds.max\n }\n message += `<b>${this.actor.name}</b> regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `<br>Additionally, they regenerate a Critical Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `<b>${this.actor.name}</b> rolled a ${regen} and regains 1 Wound.`\n wounds.value += 1\n if (regen == 10)\n {\n message += `<br>Additionally, they regenerate a Critical Wound.`\n }\n}\nelse \n{\n message += `<b>${this.actor.name}</b> Regenerate roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": wounds })\nthis.script.scriptMessage(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","OJMgS8ZQv0j4tEFf":"return [\"ws\", \"bs\", \"s\", \"fel\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","OMAUX1fnHyIpplul":"return ![\"fel\", \"dex\"].includes(args.characteristic)","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \nawait test.roll();","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\nargs.actor.system.characteristics.t.value += 30\n\nargs.actor.system.characteristics.s.bonus += 3\nargs.actor.system.characteristics.t.bonus += 3\n\nif (args.actor.system.characteristics.s.value > 100)\n{\n args.actor.system.characteristics.s.value = 100\n args.actor.system.characteristics.s.bonus = 10\n}\n\nif (args.actor.system.characteristics.t.value > 100)\n{\n args.actor.system.characteristics.t.value = 100\nargs.actor.system.characteristics.t.bonus = 10\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\nawait test.roll();\nif (test.succeeded)\n{\n this.actor.removeCondition(\"surprised\");\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\n{\n\tthis.script.scriptNotification(\"Disabled!\");\n\tawait this.effect.update({\"disabled\" : true})\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\n ","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\n\nblows = Math.clamped(blows, 0, difficulties.length - 1)\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\n{\n let difficulty = difficulties[blows];\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a <strong>Challenging (+0) Willpower</strong> Test`);\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\n }\n })\n}","OicQSEVZBbqLtrcf":"let choice = await ItemDialog.create(this.actor.itemTypes.critical, (this.effect.sourceTest.result.overcast.usage.other.current || 1), \"Choose the Critical Wounds to heal (cannot reattach body parts)\")\n\nthis.script.scriptMessage(`Healed <strong>${choice.map(i => i.name).join(`, `)}</strong>`);\nthis.actor.deleteEmbeddedDocuments(\"Item\", choice.map(i => i.id))","OnkEe4ISru1hjJWP":"this.actor.flags.useless[this.item.system.location.key] = true;","Op88kMtimSEWlY2h":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","OqLKL0PiCvYH2QxW":"if (args.test.options.wallcrawler)\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalSuccess\");\n\t\t}\n\t\targs.test.result.outcome = \"success\"\n args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 SL`)\n\t}\n}","OqxeuZfZDfm9ax6h":"this.actor.system.status.addArmour(1, {locations : \"head\", source : this.effect})","OvIELZLvnlN2H2uw":"args.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}});","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\n{\n this.actor.modifyAdvantage(-1);\n this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\nthis.actor.addCondition(\"stunned\", roll.total)","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n\tthis.actor.addCondition(\"unconscious\")\n}","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\n\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \n// reducing the SL of any spell affecting it by 3. \n// This effect lasts for one hour.\nconst hasMagicResistance = this.actor.has(\"Magic Resistance\")\n\nif (hasMagicResistance === undefined) {\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\n let traitItem = trait.toObject()\n traitItem.system.specification.value = 2\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\n })\n this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has gained the Magic Resistance Trait. This effect lasts for one hour.</p>`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}\n\nif (hasMagicResistance) {\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. \n let msg = `<p><strong>${this.actor.prototypeToken.name}</strong> has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.</p>`\n\n // Resist toxic effect\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\n fields: {difficulty: \"challenging\"}\n }).then(async test => {\n await test.roll()\n\n // If they fail ...\n if (!test.succeeded) {\n msg += `<p>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.</p>\n <p>If they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.</p>`\n this.actor.addCondition(\"poisoned\", 1)\n }\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\n })\n}\n","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","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\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"(Lore)\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \n (this.actor.isOpposing || args.test.context.defending) && \n args.test.result.roll % 11 == 0 && \n args.test.succeeded && \n [\"Language (Magick)\", \"Dodge\"].includes(args.test.item?.name))\n {\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\n let text = `<strong>${this.effect.name}</strong>: Adding Unstable and Ward`\n args.test.result.other.push(text) \n this.script.scriptNotification(text);\n \n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\n let wardData = ward.toObject();\n wardData.system.specification.value = 9;\n \n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\n let unstableData = unstable.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\n }\n","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\n item = item.toObject()\n item.system.specification.value = this.actor.characteristics.ag.value\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choose Size\");\n if (choice[0])\n {\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\n }\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \n{\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\n let results = roll.results[0]\n\n this.script.scriptMessage(`<strong>${this.actor.name}</strong> contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n })\n\n }\n\n","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","Q4EQgP4gZR8TTm7S":"let penalty = 0\nif (args.item?.system.attackType)\n{\n penalty -= 30\n}\nif (args.actor.has(\"Second Sight\", \"talent\"))\n penalty += 10\n\nargs.prefillModifiers.modifier += penalty","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\nlet data = item.toObject();\ndata.system.specification.value = \"When Alone\";\ndata.effects[0].disabled = true;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"alpha\": 0.5,\n \"animation\": {\n \"type\": \"\",\n },\n \"color\": \"#000000\",\n }}));","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\n","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))\n{\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"unconscious\")\n }\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\n args.item.damage.value += \" + 1\"","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\n\nif (choice[0])\n{\n\tthis.actor.removeCondition(choice[0].conditionId)\n}\n","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","QbIYnshWeP1U8SUy":"args.applyAP = false;\nargs.applyTB = false;","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)\n}","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QoEOxRruQXYrZrv3":"let filters = [\n {\n property : \"type\",\n value : \"skill\"\n },\n {\n property : \"name\",\n value : /Melee/gm,\n regex: true\n }\n]\n\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, \"Choose 2 Skills to add +20\")\nitems = items.map(i => i.toObject())\nitems.forEach(i => i.system.advances.value = 20)\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QwHoqu2oO8QO8Mad":"let content = `<b>${this.effect.name}</b>: All targets engaged with <b>${this.actor.prototypeToken.name}</b> take [[/r 1d10]] Damage, modified by TB and AP.`\n\nthis.script.scriptMessage(content)","R32U01LBjBrK1pns":" const templateMap = {\n 'P2e7Yx98bK3u110a' : \"\",\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\n }\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\n\n\n let templateItem = await game.wfrp4e.utility.findItemId(templateMap[template._id]);\n\n let bio = \n `\n <p><strong>Template</strong>: ${template.text}</p>\n <p><strong>Phsyical Quirk</strong>: ${physicalQuirk}</p>\n <p><strong>Work Ethic</strong>: ${workEthic}</p>\n <p><strong>Personality Quirk</strong>: ${personalityQuirk}</p>\n `\n \n this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\n\n if (templateItem)\n {\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 1\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\n\nas.name += \" (Sight)\";\n\nlet roll = (await new Roll(\"1d10\").roll());\nroll.toMessage(this.script.getChatData())\nlet items = []\n\nif (roll.total <= 2)\n{\n items = items.concat([as]);\n}\nelse if (roll.total <= 4)\n{\n items = items.concat([hv]);\n}\nelse if (roll.total <= 6)\n{\n items = items.concat([ms]);\n}\nelse if (roll.total <= 8)\n{\n items = items.concat([ss]);\n}\nelse if (roll.total <= 10)\n{\n items = items.concat([as, hv, ms, ss]);\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\n\nlet skill = await ItemDialog.create(skills, 1, \"Select the skill used by the weapon\")\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\n\nlet weapon = {\n\tname : this.effect.name,\n\ttype : \"weapon\",\n\timg : this.effect.img,\n\tsystem : {\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\n\t\t\"reach.value\" : \"average\",\n\t\t\"qualities.value\" : [{name : \"magical\"}]\n\t},\n}\n\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\nthis.script.scriptNotification(\"Item created. Further customization must be done manually within the Item's sheet\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 2)\n this.script.scriptMessage(\"Gained 2 Bleeding Conditions\")\n}","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\n{\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\n {\n this.script.scriptMessage(`<strong>${this.item.name}</strong> Overloads!`)\n }\n}","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"disease\")\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choose a Disease\")\n\nif (choice[0])\n{\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\n}","RZlMkxJz5apn0mUj":"return args.item?.system.attackType != \"ranged\"","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\nawait args.actor.addCondition(\"deafened\");\nawait args.actor.addCondition(\"stunned\");","RrchOMpEdIvceJxl":"return args.skill?.name == \"Stealth (Rural)\"","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":" let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : -5,\n \"t\" : -5,\n \"i\" : -10,\n \"ag\" : -10,\n \"dex\" : -10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = []\n let skillAdvancements = []\n let talents = []\n let trappings = []\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let index = 0; index < skills.length; index++)\n {\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","S1QihXuvdEVzeRtB":"let dice = await new Roll(\"1d10\").roll()\nlet roll = dice.total\nlet talent \nlet message\nlet modifier = 0\n\nif (roll <= 3)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\n}\n\nelse if (roll <= 6)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.OEjUvJKi0xmBwbS2\")\n modifier = -3\n}\n\nelse if (roll <= 9)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.mdPGZsn2396dEpOf\")\n modifier = -3\n}\n\nelse if (roll = 10)\n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\n modifier = -5\n}\n\nmessage = `${roll} Rolled, gain ${item.name}, ${modifier} Strength`\ndice.toMessage(this.script.getChatData())\n\nlet changes = duplicate(this.effect.changes)\nchanges[0].value = modifier\n\nthis.effect.updateSource({changes})\n\nawait this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})\n\nthis.script.scriptNotification(message)","S3DCTw4yJ85eSaKp":"this.actor.setupCharacteristic(\"s\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(test => test.roll())","S3Dev4hleOYqDNe9":"if (args.test.options.healWounds) {\n if (args.test.succeeded) \n {\n let wounds = this.actor.characteristics.int.bonus + Number(args.test.result.SL)\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n wounds = this.actor.characteristics.int.bonus + Math.min(1, Number(args.test.result.SL))\n }\n\targs.test.result.woundsHealed = wounds\n\targs.test.result.other.push(`<b>${this.actor.name}</b> healed <b>${wounds}</b> wounds of the patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n }\n}","S4793DLFhjMxpM8x":"return ![\"ws\", \"bs\"].includes(args.characteristic) && !args.item?.system.attackType && !args.options.dodge","S6tUyFJvGMV19mvP":"this.actor.status.addArmour(2, {source: this.effect})","S95QqpX1cZyIVCPy":"if (parseInt(this.item.system.specification.value) > 0)\n{\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\n}\n\n","SGr50Hq1AHIEzIFN":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\n int : game.wfrp4e.config.characteristics.int,\n fel : game.wfrp4e.config.characteristics.fel\n}, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","SLy1Fs3oXcHgFgjK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet value = getProperty(this.effect.sourceTest, \"result.overcast.usage.other.current\") || 1\ndata.system.specification.value = value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SO4Aa9argKbuO9rQ":"args.prefillModifiers.modifier -= 20","SPOkFWZWziZk5b7A":"return args.item?.system?.attackType != \"melee\"","SRmfstEs278bP9Pz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","SSqGxyN9hw0HDmED":"this.actor.addCondition(\"prone\");","SWIJjM2RCmzfr64u":"if (args.test.result.hitloc.result == \"head\")\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40\n\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}\n","SrCHfOJFZwDickqa":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"average\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","StAderQaQQsxb6Rv":"let target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n this.script.scriptNotification(target.result);\n let hatred = this.actor.items.find(i => i.getFlag(\"wfrp4e\", \"fromEffect\") == this.effect.id)\n if (hatred)\n {\n hatred.update({\"system.specification.value\" : target.result})\n }\n}","SvFKt9hMcFQjeILA":"args.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n\nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\n{\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","TEiNj5FgkoD3YbhS":"this.actor.hasCondition(\"bleeding\")?.delete()","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","TY0xSQ00XXyEr49r":"args.fields.slBonus += 1;","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\n{\n this.item.system.AP = {\n \"head\": 0,\n \"lArm\": 0,\n \"rArm\": 0,\n \"lLeg\": 0,\n \"rLeg\": 0,\n \"body\": 0\n }\n}","TdjlJro0RRVSh8g8":"return args.skill?.name != game.i18n.localize(\"NAME.Gamble\") && args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\");","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\nlet test = await this.actor.setupTrait(stomp)\nawait test.roll();","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\n \"ws\": 45,\n \"bs\": 30,\n \"s\": 35,\n \"t\": 45,\n \"i\": 30,\n \"ag\": 35,\n \"dex\": 25,\n \"int\": 25,\n \"wp\": 30,\n \"fel\": 25\n}\nfor (let char in this.actor.characteristics) {\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\n this.actor.characteristics[char].initial = gorCharacteristics[char]\n}","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"unconscious\")\n}","TpZItJ5Ugbazaobd":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\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\");","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\nlet data = item.toObject();\ndata.system.specification.value = \"Minor\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TwgdEucxcHloc4cX":"let choice1 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n {\n type : \"armour\",\n name : \"Leather Leggings\"\n },\n {\n type : \"armour\",\n name : \"Leather Skullcap\"\n },\n {\n type : \"armour\",\n name : \"Leather Jack\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plate Breastplate\"\n },\n {\n type : \"armour\",\n name : \"Plate Bracers\"\n },\n {\n type : \"armour\",\n name : \"Plate Helm\"\n },\n {\n type : \"armour\",\n name : \"Plate Leggings\"\n },\n]\n\nlet choice = await new Promise((resolve, reject) => {\n new Dialog({\n title : \"Choice\",\n content : \n `<p>\n Select your choice\n </p>\n <ol>\n <li>Mail</li>\n <li>Mail & Leather</li>\n <li>Plate</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Mail\",\n callback : () => {\n resolve(choice1)\n }\n },\n 2 : {\n label : \"Mail & Leather\",\n callback : () => {\n resolve(choice2)\n }\n },\n 3 : {\n label : \"Plate\",\n callback : () => {\n resolve(choice3)\n }\n }\n }\n }).render(true)\n}) \n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","TwwKxFjK6TNGKbRB":"this.script.scriptMessage(await this.actor.applyBasicDamage(12, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addSystemEffect(\"cold1\")\n}\n\n","TxfmxDGBj04AQQpt":"let weapon = args.opposedTest.defenderTest.weapon\nif (\n !args.opposedTest.result.swapped && \n args.opposedTest.result.winner == \"defender\" && \n args.opposedTest.attackerTest.result.damage && \n weapon && \n weapon?.system.properties.qualities.fast\n )\n{\n args.opposedTest.swap(this.effect.label);\n}","TzgmYRXFXRspIo1i":"this.effect.delete();","U1RUcgP8LD2qeGTm":"return !args.options.reload","U1UpSRJOSjPpO4HS":"let mutations = await game.wfrp4e.utility.findAll(\"mutation\", \"Loading Mutations\")\nlet roll = Math.floor(CONFIG.Dice.randomUniform() * mutations.length);\nthis.actor.createEmbeddedDocuments(\"Item\", [mutations[roll]]);\nthis.script.scriptNotification(`Added ${mutations[roll].name}`)","U26XMie3Kjoddisj":"let stunned = this.actor.hasCondition(\"stunned\")\nif (stunned)\n{\n this.script.scriptNotification(`Cleared 1 Stunned Condition`)\n this.actor.removeCondition(\"stunned\");\n}\nelse \n{\n\tthis.script.scriptNotification(`No Stunned Conditions`)\n}","U2xKn7R1gm8kiQm8":"this.actor.hasCondition(\"broken\")?.delete();\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","U4A8FDNmwBGTuQZO":"if (args.attacker.has(\"Undead\") && !args.attacker.has(\"Ethereal\"))\n{\n args.totalWoundLoss = Math.floor(args.totalWoundLoss / 2)\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\n}","U5ndCwcJ1s3Ns26w":"args.item.system.qualities.value.push({name : \"magical\"});\nargs.item.system.damage.value += ` + ${parseInt(this.effect.sourceTest.result.SL)}`;\nargs.item.name += ` (${this.effect.name})`","U78c4oUjKwyUu6jT":"return (args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.characteristic != \"fel\")","U9xh2wriSqCosugW":"if (args.test.options.stag)\n{\n\tif (parseInt(args.test.result.SL) < 0 || args.test.failed)\n\t{\n\t\tif (parseInt(args.test.result.SL) < 0)\n\t\t{\n\t\t\targs.test.result.SL = \"+0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalSuccess\");\n\t\t}\n\t\targs.test.result.outcome = \"success\"\n args.test.result.other.push(`<strong>${this.effect.name}</strong>: Minimum +0 SL`)\n\t}\n}","UC6G3pFQwzUhrw6F":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\");","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData());\n args.totalWoundLoss += roll.total;\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n}","ULmZMLezDamerN04":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\")\n\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\nthis.script.scriptNotification(lore)\nif (lore == \"GM's Choice\") {\n return\n}\n\nelse if (lore == \"Arcane Magic\") {\n lore = \"Arcane\"\n}\n\nelse if (lore == \"Petty Magic\") {\n lore = \"petty\"\n}\n\nelse {\n lore = lore.toLowerCase();\n}\n\nlet spellsWithLore = []\nif (lore == \"Arcane\") {\n spellsWithLore = spells.filter(i => !i.system.lore.value)\n}\nelse {\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\n}\n\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\n this.actor.setupCast(item).then(test => test.roll());\n})","UTlgF4azrGQZsoDv":"const talents = await Promise.all([\"Ambidextrous\", \"Distract\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","UWrzokgabRKUpnkG":"return [\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","UYLXm2W6jVn21Age":"args.fields.modifier += 40;","UaImulhbPURkLJg2":"return this.actor.attacker && (args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\n\nthis.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> fortune points increased from ${current} to ${1 + current}`)","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n]\nlet choice2 = [\n {\n type : \"armour\",\n name : \"Mail Chausses\"\n },\n {\n type : \"armour\",\n name : \"Mail Coat\"\n },\n {\n type : \"armour\",\n name : \"Mail Coif\"\n },\n {\n type : \"armour\",\n name : \"Leather Leggings\"\n },\n {\n type : \"armour\",\n name : \"Leather Skullcap\"\n },\n {\n type : \"armour\",\n name : \"Leather Jack\"\n },\n]\nlet choice3 = [\n {\n type : \"armour\",\n name : \"Plate Breastplate\"\n },\n {\n type : \"armour\",\n name : \"Plate Bracers\"\n },\n {\n type : \"armour\",\n name : \"Plate Helm\"\n },\n {\n type : \"armour\",\n name : \"Plate Leggings\"\n },\n]\n\nlet choice = await Dialog.wait({\n title : \"Choice\",\n content : \n `<p>\n Select your choice\n </p>\n <ol>\n <li>Mail</li>\n <li>Mail & Leather</li>\n <li>Plate</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Mail\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Mail & Leather\",\n callback : () => {\n return choice2\n }\n },\n 3 : {\n label : \"Plate\",\n callback : () => {\n return choice3\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${c.name}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","UsAHQecRlWL5PhP6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.corruptionDialog(\"moderate\") \n }\n})","UsuwsmU1TUQLQVM2":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\nreturn !args.spell || (args.type == \"cast\" && [\"petty\", lore].includes(args.spell.system.lore.value));","UvycHOjSPm5Zv9KJ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nlet baseDamage = \"4\";\nif (test.succeeded)\n baseDamage = \"0\";\n \nlet damage = this.effect.sourceItem.system.computeSpellDamage(baseDamage, true) + parseInt(this.effect.sourceTest.result.SL);\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg : true}))\nthis.actor.addCondition(\"ablaze\")","UwjkHRAQHESdYXJs":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 2,\n \"bright\": 1,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"pulse\",\n },\n \"color\": \"#949bff\",\n}}));","Ux4buMc7llF1Kg8p":"if (!this.actor.hasCondition(\"stunned\") && !this.actor.hasCondition(\"unconcscious\"))\n{\n this.effect.delete();\n}","V1D2Uo3WDKYQePU3":"let damage = this.effect.sourceTest.result.damage;\n \nlet loc = \"head\"\nlet APatLoc = this.actor.system.status.armour[loc];\n\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\n\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\nmsg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\nthis.script.scriptMessage(msg)\n","V2lsVTi6q28eL5jl":"args.fields.slBonus += parseInt(this.effect.sourceTest.result.SL)","V7qmFwUMCY2tfziH":"this.actor.addCondition(\"stunned\")","V9wD9FWHWxZUOGSI":"let roll = await (new Roll(`max(0, 1d10 - ${this.actor.characteristics.wp.bonus})`).roll())\nlet fatigued = roll.total\nroll.toMessage(this.script.getChatData());\nif (fatigued > this.actor.characteristics.wp.bonus)\n{\n this.actor.addCondition(\"unconscious\")\n this.script.scriptNotification(`Fell Unconscious`)\n}\nelse \n{\n fatigued = Math.max(0, fatigued)\n if (fatigued)\n this.actor.addCondition(\"fatigued\", fatigued)\n this.script.scriptNotification(`Gained ${fatigued} conditions`)\n}","V9xm4X1x3lPYTQaI":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.scriptNotification(\"Immune to Fear\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}","V9zm2hKUVLVZtAcN":"let characteristics = {\n \"ws\" : -10,\n \"bs\" : -10,\n \"s\" : 0,\n \"t\" : 15,\n \"i\" : 15,\n \"ag\" : -20,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charm\", \"Channelling\", \"Entertain (Prophecy)\", \"Intuition\"]\nlet skillAdvancements = [0, 0, 20, 10]\nlet talents = [\"Detect Artefact\", \"Menacing\", \"Sixth Sense\"]\nlet traits = [\"Dooming\", \"Spellcaster (Lore of Life)\", \"Ward\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Forest of Thorns\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","VAPsww9x3HAw1sKP":"return !args.options.dodge","VAs1nXvicdQK18Do":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","VNOKTzCrFbZ6PJUj":"return ![\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\n\nawait roll.toMessage(this.script.getChatData());\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\nawait test.roll();\n\nif (test.succeeded)\n{\n return false;\n}","Vb7rgl8T4VRswbnZ":"this.actor.status.addArmour(parseInt(this.item.system.specification.value) || 0, {source: this.effect, damage : this.item.getFlag(\"wfrp4e\", \"APdamage\")})","VbL0TgaBAmYjrezZ":"const talents = await Promise.all([\"Hardy\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Language (Magick)\"","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"fatigued\") \n }\n})","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\n{\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\n\t{\n\t\tif (parseInt(args.test.result.SL) > 0)\n\t\t{\n\t\t\targs.test.result.SL = \"-0\";\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\n\t\t}\n\t\targs.test.result.outcome = \"failure\"\n args.test.result.other.push(`<strong>${this.effect.name}</strong>: Maximum -0 SL`)\n\t}\n}","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\n{\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\n \n if (attackerReach == defenderReach)\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \n\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\n\n args.attackerTest.weapon.reach.value = attackerReach\n args.defenderTest.weapon.reach.value = defenderReach\n}","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Added Bleeding\")\n}","WB6sIpLEPC8YPX67":"if (args.options.dodge)\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\n}\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\n{\n args.item.system.qualities.value.push({name : \"magical\"})\n}","WO5n7Vbx8AgoVrwC":" let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 10,\n \"wp\" : 5,\n \"fel\" : 5\n }\n let skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\n let skillAdvancements = [10, 10, 10]\n let talents = []\n let trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\"]\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let index = 0; index < skills.length; index++)\n {\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\n{\n\tthis.actor.addCondition(\"dead\");\n}","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\n // must make a Challenging (+0) Endurance Test \n\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\n fields: {difficulty: \"challenging\"}\n })\n \n await test.roll();\n if (test.failed)\n {\n // or gain a Deafened Condition \n this.actor.addCondition(\"deafened\");\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\n let damage = (await new Roll(\"1d10\").roll());\n await damage.toMessage(this.script.getChatData());\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n }","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\n\n// If channelling corresponding lore\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\n args.prefillModifiers.slBonus += 3\n// If channelling or casting different lore\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\n args.prefillModifiers.slBonus -= 1","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\nthis.actor.status.encumbrance.pct = 100;","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}\n\n\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","XO9m2AvFRAAeEuty":"if (args.test.options.fieldDressing && args.test.result.reversed)\n{\n\targs.test.data.result.SL = \"+\" + Math.min(1, Number(args.test.data.result.SL))\n\targs.test.result.other.push(`<b>${this.effect.name}</b>: SL limited to 1`)\n}","XPxAKqPpPYE4E6B5":"args.fields.modifier -= 10 * this.effect.conditionValue","XRrGBbplNLZpXnCH":"let item;\nlet items = []\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\n{\n let data = item.toObject();\n data.system.specification.value = 2\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n{\n let data = item.toObject();\n data.system.specification.value = 1;\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.mDgEMOoJpi8DkRYb\")\n{\n let data = item.toObject();\n items.push(data)\n}\nitem = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\n{\n let data = item.toObject();\n data.system.specification.value = 2;\n items.push(data)\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","XXnzUdsIYQ9Wjyu0":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale || this.actor.sameSideAs(this.effect.sourceActor)","XYaYeiVkc5GKYTjC":"return args.spell?.system.lore.value != \"fire\"","XcvDYNZgJ2rpAdDV":"\n let fatigued = this.actor.hasCondition(\"fatigued\")\n if (!fatigued)\n {\n this.actor.addCondition(\"fatigued\")\n ui.notifications.notify(\"Fatigued added to \" + this.actor.name + \" which cannot be removed until the Malaise symptom is gone.\")\n }","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\n{\n args.addImpact = true;\n args.opposedTest.result.other.push(\"Impact against Skaven\")\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();","Xk9XPklxxTvFlwpI":"args.options.useOnesArgumentative = true;","XthZ3GCC3WhsEI2g":"args.update({light : {\n \"dim\": 10,\n \"bright\": 5,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 4,\n \"intensity\": 4,\n \"type\": \"flame\",\n },\n \"color\": \"#ac9e6c\",\n}});","Xu5cED1MhT4ba7da":"args.fields.modifier += 10\n","XuFxKPYheYF4WMmQ":"return args.skill?.name != game.i18n.localize(\"NAME.Cool\");","Y6ppJBerpM3TtSic":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.g4Q6AtzZuo5iIvD4\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","Y7McxsHFeGhwQx0J":"this.actor.createEmbeddedDocuments(\"Item\", [expandObject({\n name : \"Ghostly Flame\",\n type : \"weapon\",\n img : this.effect.img,\n system : {\n \"weaponGroup.value\" : \"throwing\",\n \"damage.value\" : \"SB + WPB\",\n \"qualities.value\" : [{name : \"magical\"}],\n \"equipped\" : true\n }\n})], {fromEffect: this.effect.id})","Y8J66v8VTKUASGuK":"if (!this.actor.effects.find(e => e.isCondition))\n{\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\n}\n\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\n\nif (choice[0])\n{\n\tawait this.actor.removeCondition(choice[0].conditionId)\n}\n\nif (this.actor.effects.find(e => e.isCondition))\n{\n return false; // Delete the effect if there are still conditions, otherwise, effect remains and provides the bonus\n}","YDqpKJVy8ijEKdLX":"return !(this.actor.attacker && (args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\")))","YEBw2CzHYxsTpTy5":"return args.skill?.name == game.i18n.localize(\"NAME.Haggle\");","YFSgWRXel0bWE3EE":"return [\"ag\", \"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name == game.i18n.localize(\"NAME.Climb\");","YHEIkBKWXKNPqglh":"if (args.test.result.castOutcome == \"success\")\n{\n game.wfrp4e.utility.postCorruptionTest(\"moderate\", this.script.getChatData())\n}\n","YMaxpXnml01bLGpO":"return args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\n args.test?.result?.other.push(\"Gain additional +1 Corruption from \" + this.effect.name)\n}","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\nthis.script.scriptNotification(\"Added Fatigued\")","YaKnYEbmmZZtByJc":"if (args.opposedTest.attackerTest.options.ballockKnife)\n{\n args.weaponProperties.impale = true;\n args.extraMessages.push(`<strong>${this.item.name}</strong>: Impale Added`)\n}","Yf2MmOzazzMdmoPU":"let armour = await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")\nlet armourData = armour.toObject()\narmourData.system.specification.value = 1\n \nlet fury = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\nlet furyData = fury.toObject();\n\nlet horns = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet hornsData = horns.toObject()\nhornsData.system.specification.value = 6\n\nthis.actor.createEmbeddedDocuments(\"Item\", [armourData, furyData, hornsData], {fromEffect : this.effect.id})","YhhiWEQbox3WZA3Q":"return args.skill?.name == game.i18n.localize(\"NAME.Heal\") && game.combat?.active","YjAIsFlxKTJvYs60":"this.item.system.reduceQuantity();","YjJcRdytVRm88qLn":"args.options.additionalDamage = 1","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\nlet fel_gain = 0\nif (args.actor.characteristics.fel.value <= 0)\n{\n fel_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nlet msg = `<b>${this.actor.prototypeToken.name}</b> gains ${i_gain} Intelligence`\n\nif (fel_gain)\n msg += ` and ${fel_gain} Fellowship`\n\n\nlet newInt = i_gain + args.actor.characteristics.int.modifier\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\n\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\n\nthis.script.scriptMessage(msg)","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\n\nif (newEffect)\n{\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\n}","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nitem = item.toObject()\nitem.name = this.effect.name\nitem.system.specification.value = this.actor.characteristics.s.bonus\nitem.system.description.value = \"\"\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\nif (ablaze)\n{\n this.script.scriptNotification(\"Immune to Ablaze\");\n ablaze.delete()\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\nlet message = \"\"\n\nlet wounds = duplicate(this.actor.status.wounds)\nlet regenRoll = await new Roll(\"1d10\").roll();\nlet regen = regenRoll.total;\n\nif (wounds.value >= wounds.max)\n return\n\nif (wounds.value > 0) \n{\n wounds.value += regen\n if (wounds.value > wounds.max)\n {\n wounds.value = wounds.max\n }\n message += `<b>${this.actor.name}</b> regains ${regen} Wounds.`\n\n if (regen == 10)\n {\n message += `<br>Additionally, they regenerate a Critical Wound.`\n }\n}\nelse if (regen >= 8) \n{\n message += `<b>${this.actor.name}</b> rolled a ${regen} and regains 1 Wound.`\n wounds.value += 1\n if (regen == 10)\n {\n message += `<br>Additionally, they regenerate a Critical Wound.`\n }\n}\nelse \n{\n message += `<b>${this.actor.name}</b> Regenerate roll of ${regen} - No effect.`\n}\n\nawait this.actor.update({ \"system.status.wounds\": wounds })\nthis.script.scriptMessage(message, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n\nif (this.actor.Species?.toLowerCase() != \"ogre\")\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}}).then(test => {\n test.roll()\n })\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","Z6jNlyZMECkW4Hon":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\", true);\n\nlet choice = await ItemDialog.create(spells, 1);\n\nif (choice[0])\n{\n this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\n spell.system.wind.value = \"Channelling (Dhar)\";\n spell.system.memorized.value = true;\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\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;\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\n{\n halve = await Dialog.confirm({title : this.effect.name, content : \"Halve Damage? (Halves Damage from all fire)\"})\n}\nelse\n{\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\n}\n\nif (halve)\n{\n args.totalWoundLoss /= 2;\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\n\nswitch (initiativeSetting) {\n case \"default\":\n args.initiative += \"+10\"\n break;\n\n case \"sl\":\n args.initiative += \"+1\"\n break;\n\n case \"d10Init\":\n args.initiative += \"+10\"\n break;\n\n case \"d10InitAgi\":\n args.initiative += \"+1\"\n break;\n}","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet biteData = bite.toObject();\nlet infectedData = infected.toObject();\n\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\n\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\ndata.system.specification.value = \"Religion\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","ZMwJad6v4G13SgjR":"return args.type == \"cast\" || args.type == \"channelling\"","ZNW3ubbKIYXAyE48":"let wounds = this.actor.itemTypes.disease.filter(i => i.name == \"Festering Wound\" && i.system.duration.active);\nlet selected;\nif (wounds.length == 0)\n{\n return this.script.scriptNotification(\"No Festering Wounds!\");\n}\nelse if (wounds.length == 1)\n{\n selected = wounds[0];\n}\nelse if (wounds.length >= 2)\n{\n selected = (await ItemDialog.create(wounds, 1))[0];\n}\n\nif (selected)\n{\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}})\n await test.roll();\n if (test.succeeded)\n {\n let SL = parseInt(test.result.SL);\n if (SL >= 0)\n {\n selected.update({\"system.duration.value\" : selected.system.duration.value - SL})\n this.script.scriptMessage(`<strong>${selected.name}</strong> duration reduced by ${SL}!`)\n }\n }\n}","ZNu4B0OdjkM9lmtu":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\nlet data = item.toObject();\ndata.name = data.name += \" (Vision)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\n{\n // Wait till after chat card is posted\n game.wfrp4e.utility.sleep(500).then(() => {\n game.wfrp4e.utility.postTerror(1, this.effect.name)\n game.wfrp4e.utility.postTerror(2, this.effect.name)\n })\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \n// in Wolves, Lions, Goats, and Chimeras.\ngame.wfrp4e.utility.postFear(2, this.effect.name)\n","ZbuW8y7t9Y8oUFWq":"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\"))","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZqTW093qENOwGONP":"let msg = \"\"\n\nlet SL = parseInt(this.effect.sourceTest.result.SL);\n\nfor(let i = 0; i < SL; i++)\n{\n msg += `<p>${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}</p>`\n}\n\nthis.script.scriptMessage(msg);","ZrePyV2spv3v65Tg":"return args.type != \"weapon\" && !this.actor.statuses.has(\"infighting\")","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nreturn test.failed","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = 0\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","a02tlRCXpaoaDjSN":"let careers = await game.wfrp4e.utility.findAll(\"career\", \"\", true);\ncareers.forEach(c => {\n if (!c.id)\n {\n c.id = c._id;\n }\n});\nlet choice = await ItemDialog.create(careers, 1, \"Choisissez la carrière de votre double identité\");\nif (choice[0])\n{\n let career = await fromUuid(choice[0].uuid);\n let data = career.toObject();\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\n}\n","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.addCondition(\"fatigued\");\n}","a4Aza4a9v8JMU8dC":"const talents = await Promise.all([\"Frénésie\", \"Résistance à la Magie\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","a6gacHsvgwtsIFSQ":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.Research\"))\n args.test.preData.canReverse = true","a7pEvCycVnFBXGAQ":"let test = await this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - Assomé\", fields : {difficulty : \"easy\"}})\nawait test.roll();\n\nif (!test.succeeded)\n{\n\tthis.actor.addCondition(\"stunned\");\n}","a8RabrnJ08O07rDX":"if (args.totalWoundLoss > 0)\n{\n // I'm assuming the endurance test specified is for the end-round check\n await args.actor.addCondition(\"poisoned\", 2);\n}","a8i0sA1RBnD8nHZt":"let caster = this.effect.sourceActor\nlet targetedItem = this.actor.items.get(this.effect.flags.wfrp4e.itemTargets[0])\n\nlet qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities);\nlet flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws);\n\nif (targetedItem.type == \"weapon\")\n{\n mergeObject(qualities, game.wfrp4e.config.weaponQualities)\n mergeObject(flaws, game.wfrp4e.config.weaponFlaws)\n}\nelse if (targetedItem.type == \"armour\")\n{\n mergeObject(qualities, game.wfrp4e.config.armorQualities)\n mergeObject(flaws, game.wfrp4e.config.armorFlaws)\n}\n\nfor(let q in qualities)\n{\n // If the weapon already has a flaw, don't put it in the dialog\n if (targetedItem.system.properties.qualities[q])\n {\n delete qualities[q]\n }\n}\nfor(let f in flaws)\n{\n // If a weapon doesn't have a flaw, don't put it in the dialog\n if (!targetedItem.system.properties.flaws[f])\n {\n delete flaws[f]\n }\n}\n \nlet added = await ItemDialog.create(ItemDialog.objectToArray(qualities), \"unlimited\", \"Choisissez la Qualité à ajouter\");\nlet removed = []\nif (!foundry.utils.isEmpty(flaws))\n{\n removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), \"unlimited\", \"Choisissez le Défaut à enlever\");\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.propertiesChanged\" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}})\n","aAvJrAKLzXhS9qN6":"return args.item?.name == game.i18n.localize(\"NAME.Climb\")","aCVtaW8ag1WibcAr":"args.attacker.modifyWounds(1)\nthis.script.scriptMessage(`<strong>${args.attacker.prototypeToken.name}</strong> récupère 1 Blessure.`)","aIYUsBIDKWJ3CEtj":"this.script.scriptMessage(await this.actor.applyBasicDamage(20, {suppressMsg: true}));","aMHGjWyn6BXCI4pw":"let frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.hXcfygzujgyMN1uI\");\nthis.actor.createEmbeddedDocuments(\"Item\", [frenzy], {fromEffect: this.effect.id})","abLWYtNTu1UVDQAs":"if (args.opposedTest.result.hitloc.value == this.effect.flags.wfrp4e.location) // e.g. 'head', rLeg, 'lArm'\n{\n this.scriptMessage(`Reçoit l'état @Condition[Aveuglé] comme <strong>${this.item.name}</strong> a été touché`);\n this.actor.addCondition(\"blinded\");\n}","abVIvJBzuskNzCQv":"let amount = this.effect.sourceTest.result.overcast.usage.other.current;\n\nlet sss = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\nlet strider = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\n\nlet items = Array(amount).fill(sss).concat(Array(amount).fill(strider))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","afdmOvPGMpEdZvCb":"return (args.skill?.name == game.i18n.localize(\"NAME.Perception\") || args.characteristic == \"fel\")","agsm3NI1NDtHRG4y":"this.actor.getActiveTokens().forEach(t => t.document.update({texture : this.actor.prototypeToken.texture}, {animate : false}));","ahbA7o5G9dzMFl76":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","alJgj25l3239h2SW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hTgrGkWnmIR4xhVe\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ayIbw2Vw2t9xg33P":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","b1zMefdoZYtzCm7i":"return [\"roll\", \"none\"].includes(args.fields.hitLocation) || args.item?.attackType != \"ranged\"","b2Kb4IuD22RhKhR0":"let actor = Array.from(game.user.targets)[0]?.actor;\n\nif (actor)\n{\n actor.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[0].uuid})\n}\nelse\n{\n this.script.scriptNotification(\"Aucune cible!\", \"error\")\n}","b2WaqRna5CFXmbDG":"args.options.stag = true;","b5DfAWtpV1x2R8If":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","b5prg1FLjCAvBjLy":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.zyocWSzEZEC826NS\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\n\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n await this.actor.addCondition(\"prone\")\n await this.actor.addCondition(\"stunned\")\n}","bBdXzBmxgFFBwMMS":"if(args.opposedTest.attackerTest.item?.isRanged && args.applyAP && !args.sureShot)\n{\n if (args.modifiers.ap.value)\n {\n args.sureShot = true;\n args.modifiers.ap.details.push(`${this.effect.name} (Ignore ${this.item.Advances})`)\n args.modifiers.ap.ignored += this.item.Advances;\n }\n}","bEVlJOOA1kLlzpWx":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 15,\n \"i\" : 20,\n \"ag\" : 15,\n \"dex\" : 20,\n \"int\" : 35,\n \"wp\" : 30,\n \"fel\" : 10\n}\nlet skills = [\"Channelling\", \"Cool\", \"Dodge\", \"Entertain (Storytelling)\", \"Intuition\", \"Language (Magick)\", \"Leadership\", \"Lore (Magic)\", \"Lore (Theology)\", \"Perception\"]\nlet skillAdvancements = [20, 25, 20, 25, 30, 25, 15, 20, 10, 30]\nlet talents = [\"Aethyric Attunement\", \"Arcane Magic\", \"Instinctive Diction\", \"Instinctive Diction\", \"Luck\", \"Magical Sense\", \"Menacing\", \"Petty Magic\", \"Second Sight\", \"Sixth Sense\"]\nlet trappings = [\"Hand Weapon\", \"Quarterstaff\", \"Ritual Dress incorporating many ingredients and fetishes\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n items.push({name : trapping, type : \"trapping\", \"system.trappingType.value\" : \"clothingAccessories\"})\n //ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","bLkt8VpTTPoTxW0W":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Ajout d'Hémorragie\")\n}\n","bMEFHPCei2evnZZw":"// Victims that take at least 1 Wound from a Fell Dagger\n// immediately take a Poisoned Condition \n// resisted with a Difficult (-10) Endurance Test. \n\n// TODO: Add Venom strength to message\n\nif (args.totalWoundLoss > 0) \n{\n args.actor.addCondition(\"poisoned\")\n this.script.scriptMessage(`\n <strong>${this.effect.name}</strong>:<br>\n <strong>${args.actor.name}</strong> reçoit un état @Condition[Empoisonné], qui peut être résisté avec un <strong>Test de Résistance Difficile (-10)</strong>.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}\n","bQyVajMN1ETwlzvM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\nlet data = item.toObject();\nlet target = await game.wfrp4e.tables.rollTable(\"fixations\")\nif (target)\n{\n data.system.specification.value = target.result\n this.script.scriptNotification(target.result);\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bRtZH0xRh8dgqMeW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","bWr8leucbWslBCYG":"return args.characteristic != \"s\"","bhXUW7IJtEaUGAoV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll(); \nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}\n ","brNRqfpPqD2Ki0cM":"args.prefillModifiers.modifier -= 10","btPrQkGRKUkhNe3N":"return args.skill?.name == \"Métier (Apothicaire)\"","bwtQOSWn120NICkf":"let test = await this.actor.setupCharacteristic(\"ag\", {fields : {difficulty : \"hard\"}});\nawait test.roll();\n\nif (test.failed)\n{\n await this.actor.addCondition(\"bleeding\")\n await this.actor.addCondition(\"entangled\")\n}","bwx9wuEOJPF7btD1":"return args.skill?.name != game.i18n.localize(\"NAME.Navigation\");","bzaoWcieMFaU5B5l":"return !this.actor.flags.useless[this.item.system.location.key] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","c31hjp7k0hlpdGBC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","c3KA1knL2NYNUEww":"return args.skill?.name != game.i18n.localize(\"NAME.Evaluate\");","cAioHYtlxuOCwRLh":"let ablaze = Number(args.opposedTest.attackerTest.result.SL) + 1\nargs.actor.addCondition(\"ablaze\", ablaze)","cApfxL7Ic0NKdoSr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cBSy9CR5NZvcLRg8":"\n args.prefillModifiers.modifier += 0;\n args.prefillModifiers.slBonus += 0;\n args.prefillModifiers.successBonus += 0;\n ","cDBhmHn5kjgWBAlT":"let num = (this.effect.sourceTest.result.overcast.usage.other.current || 1)\n\nthis.actor.addCondition(\"entangled\", num)","cEg09bnvZD6Ysnpc":"let item = await fromUuid(\"Compendium.wfrp4e-archives2.items.anIlqJXFOIEzIOo1\")\nlet data = item.toObject();\ndata.name = this.item.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cJFDnq1HI4gXWcJo":"if (isNaN(parseInt(this.item.system.specification.value)))\n{\n let value = await ValueDialog.create(\"Ward Value\", \"Enter the Ward value\");\n if (value)\n {\n this.item.updateSource({\"system.specification.value\" : value});\n }\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\n{\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\n\tif (args.wardRoll >= args.ward && args.ward > 3)\n {\n let newWard = Math.max(3, args.ward - 1)\n this.script.scriptMessage(\"<strong>Protection</strong> améliorée de \" + newWard)\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\n }\n\n}","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\n\nthis.actor.system.characteristics.s.modifier += sl * 10;\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\nlet data = item.toObject();\n\nif (this.item.name.includes(\"(\"))\n{\n\tgroup = this.item.parenthesesText\n}\n\nelse \n{\n\tgroup = await ValueDialog.create(\"Choisir le groupe haï\", \"Groupe Haï\")\n\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\n}\n\n\ndata.name = data.name.replace(\"Target\", group);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cV9JiAgUPOeUHKnS":"args.fields.successBonus++;\nif (args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\"))\n{\n args.fields.modifier += 10;\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\n{\n args.item.cn.value -=2\n if (args.item.cn.value < 0)\n args.item.cn.value = 0\n}","cgmA2N0MkjA7qIZy":"return args.type != \"cast\" || args.item?.system.lore?.value != \"shadow\"","ch5SD2XOQfcYo0X5":"if (args.sizeDiff <= -2 && args.opposedTest.attackerTest.result.critical)\n args.damageMultiplier = Math.abs(args.sizeDiff)\n\n let sBonusDiff = args.opposedTest.defenderTest.actor.characteristics.t.bonus - args.opposedTest.attackerTest.actor.characteristics.s.bonus\n let weapon = args.opposedTest.attackerTest.item\n if (sBonusDiff > 0 && weapon && weapon.damage.value.includes(\"SB\"))\n {\n args.damage += sBonusDiff\n args.breakdown.other.push({label : this.effect.name, value : sBonusDiff});\n }","chUpiI3el8IO8MSs":"if (args.opposedTest.attackerTest.item?.name.includes(\"Morsure\"))\n{\n let woundsGained = args.totalWoundLoss;\n this.script.scriptMessage(`Récupère ${woundsGained} Blessures`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })\n this.actor.modifyWounds(woundsGained)\n}","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\nlet data = item.toObject();\ndata.system.location.value = \"Back\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\nthis.actor.characteristics.i.bonus = 1;\n\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\n{\n skill.system.total.value= Math.min(skill.system.total.value, 10)\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\");","dIxYt421K010eogY":"\n let modifier = 0\n if (this.effect.name.includes(\"Modéré\"))\n modifier = -20\n else\n modifier = -10\n args.fields.modifier += modifier\n ","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n args.abort = \"Raté - Sans tête\"\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Ribs\";\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\n\nawait test.roll();\n\nif (!test.succeeded)\n{\n await this.actor.addCondition(\"fatigued\");\n await this.actor.addCondition(\"broken\");\n}","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\n{\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\n}","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\n\nsense.name += \" (Vue)\";\nsense.system.tests.value = sense.system.tests.value.replace(\"Sens\", \"Vue\")\n\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\n}","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\n\nthis.actor.update({\"system.status.fate.value\" : current + 1})\n\nthis.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> voit ses Points de Destin augmentés de ${current} à ${current + 1}`)","dfEgat3jz4EtWszH":"return args.skill?.name == \"Discrétion (Urbaine)\"","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)\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - Ablaze`})\n\nawait test.roll();\n\nif (!test.succeeded)\n{\n this.actor.addCondition(\"ablaze\");\n}","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.ag.value\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\n\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\n{\n return\n}\n\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\n args.fields.slBonus += 2;\nelse\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Corps à corps (Base)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Corps à corps (Bagarre)\" && args.item?.weaponGroup?.value != \"brawling\"","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\n\nawait args.actor.addCondition(\"ablaze\", 2);\nawait args.actor.addCondition(\"prone\");","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n args.test.result.other.push(`<b>${this.effect.name}</b>: L'opposant perd ${Number(args.test.result.SL) + 1} Avantage`)\n}","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\n{\n this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> subit une @Table[crithead]{Blessure Critique} si il n'y en avait pas d'autres.`)\n}","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value || 1)","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","ePPgxQOqL1Uhz2k9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Projectiles (Arc)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Arc\",\n },\n {\n type : \"ammunition\",\n name : \"Flèche\",\n }\n]\nlet choice2 = [\n]\n\nlet choice = await Dialog.wait({\n title : \"Option\",\n content : \n `<p>\n Ajouter une Option?\n </p>\n <ol>\n <li>Projectiles (Arc) +10 et un arc avec 12 Flèches</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Oui\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Non\",\n callback : () => {\n choice2\n }\n }\n }\n })\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","eWWLmA2xINR321aK":"args.item.system.qualities.value.push({name : \"magical\"})","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (this.item.system.location.key == \"rArm\")\n{\n\tdata.system.location.value = \"Main Droite\"\n\tdata.system.location.key = \"rHand\"\n}\nelse if (this.item.system.location.key == \"lArm\")\n{\n\tdata.system.location.value = \"Main Gauche\"\n\tdata.system.location.key = \"lHand\"\n}\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"<em>Céder ou Mourir!</em>\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2;\nthis.script.scriptNotification(\"Ajout de \" + data.name);\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\nif (trait && trait.name.includes(\"Morsure\") && woundLossEffect)\n{\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\n}","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\nlet data = item.toObject();\ndata.name += \" (Ennemi)\";\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\nuses++;\nthis.script.scriptNotification(`Utilisé ${uses} fois`)\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\nif (uses >= 3)\n{\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\n\tthis.script.scriptNotification(`Utilisé`);\n}\n","eqxE7nBO13yJS7hc":"let roll = (await new Roll(\"1d10\").roll())\nroll.toMessage({flavor: \" Blessures soignées\", speaker : {alias : this.actor.name}})\n\nthis.actor.modifyWounds(roll.total)\n\nthis.actor.hasCondition(\"bleeding\")?.delete();","esuLwq4g5T8k1kLT":"await args.actor.addCondition(\"ablaze\"); await args.actor.addCondition(\"prone\");","ezGqDoC9hNRBnFTB":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"1zaqojk0Oq1m8vYv\"), game.wfrp4e.utility.findItemId(\"zIuarD5mB0EF0ji0\")])\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisir une arme\")\n items = items.map(i => i.toObject())\n \n items.forEach(i => equip(i))\n \n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.data.worn.value = true\n else if (item.type == \"weapon\")\n item.data.equipped = true\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\n item.data.worn = true\n }","f062aa2BNClx08D6":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\n await test.roll();\n if (test.failed) \n {\n let toughnessLost = parseInt(this.effect.sourceTest.result.SL)\n\n let currentModifier = this.actor.characteristics.t.modifier\n\n await this.actor.update({ \"system.characteristics.t.modifier\": currentModifier - toughnessLost })\n this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> lost ${toughnessLost} Toughness`)\n if (this.actor.system.characteristics.t.value <= 0)\n {\n this.actor.addCondition(\"dead\");\n }\n\n }","f3rXusHh6VIpVPUl":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) && args.type != \"cast\"","f4vvAGQ8OGoEbrgy":"let SL = args.opposedTest.attackerTest.result.SL - args.opposedTest.attackerTest.item.cn.value\nlet difficulty = \"challenging\"\nif (SL >= 1)\n difficulty = \"difficult\"\nif (SL >= 2)\n difficulty = \"hard\"\nif (SL >= 3)\n difficulty = \"vhard\"\n \n\nlet test = await args.actor.setupCharacteristic(\"wp\", {fields: {difficulty}, skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain a Stunned Condition\"}})\nawait test.roll();\nif (test.failed)\n{\n args.actor.addCondition(\"stunned\");\n}","f5Mp3kXwCFdPkW6N":"return args.skill?.name != \"Entertain (Sing)\" && args.skill?.name != \"Entertain (Singing)\" && !args.skill?.name.includes(\"Language\");","f6WnrJvoNkfoNN9Y":"return args.item?.attackType != 'melee'","f7WZvYle9iqefRsh":"return args.weapon?.system?.attackType != \"melee\"","f8cnfvGKJH3bYVGN":"return [\"s\", \"t\"].includes(args.characteristic)","fEFfHFeJxkR0aIJK":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 3 && args.opposedTest.result.winner == \"attacker\")\n{ \n this.script.scriptMessage(`Everyone within 20 feet loses 1 Wound and makes a <strong>Difficult (-10) Endurance</strong> or gains @Condition[Deafened]`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}\n ","fEyKQqCjDwml3DXO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","fFGuTi0HLjwneMcJ":"return args.item?.system.isRanged","fIUxKZMWJ8HMPmH9":"return [\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","fKzlu6fFE2th9uIJ":"return args.item?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\")","fP2edYbj6QjPPAjL":"return [\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","fPKYkBllp7Et62lX":"if (args.test.spell.name == \"Warp Lightning\")\n{\n args.test.preData.canReverse = true;\n}","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":" let characteristics = {\n \"ws\" : 0,\n \"bs\" : 0,\n \"s\" : 10,\n \"t\" : 10,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = [\"Consume Alcohol\", \"Row\", \"Sail\", \"Swim\"]\n let skillAdvancements = [10, 10, 10, 10]\n let talents = []\n let trappings = []\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let index = 0; index < skills.length; index++)\n {\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","faRFSsrQylQRZFLk":"return args.bleedingHand || !args.weapon || !this.actor.hasCondition(\"bleeding\")","fcY3pa72dELnOFXV":"return !args.options.reload\n","feMPZhhFeXRtKdKY":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectUuids : this.item.effects.contents[0]?.uuid})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","ffvcCEazZBinHlUX":"args.update({texture : {tint : \"#FFD700\"}});\n","fiF9sM5UpcHMYa33":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\");\nlet data = item.toObject();\ndata.name += \" (Poison, Disease, Chaos)\"\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect: this.effect.id})","fkFmNcesqqNTMhVn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.2iult41Jehz0F1O8\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key;\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","fl762icfKrt9ear2":"this.actor.removeCondition(\"broken\", parseInt(this.effect.sourceTest.result.SL)+1)","ft0LaRWZT5WtnptP":"let advantage = this.actor.system.status.advantage.value;\nif (advantage > 0)\n{\n await this.actor.setAdvantage(0);\n this.script.scriptNotification(\"Advantage Subtracted\")\n}\nelse \n{\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item, {fields : {slBonus : advantage}})\nawait test.roll();","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\nawait roll.toMessage(this.script.getChatData());\nthis.script.scriptNotification(`Healed ${roll.total} Wounds`)\nthis.actor.corruptionDialog(\"moderate\")\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\nawait test.roll()\n// If they fail, they acquire 2 Poisoned Conditions. \nif (test.failed) \n{\n this.actor.addCondition(\"poisoned\", 2)\n this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has gained 2 @Condition[Poisoned] Conditions.</p>\n <p>Any 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.</p>`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n })\n}\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\nelse if (test.succeeded) \n{\n // Don't attempt to add Corrosive Blood if actor already has it\n const hasCorrosiveBlood = this.actor.has(\"Corrosive Blood\")\n if (hasCorrosiveBlood !== undefined) return \n\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\n let data = item.toObject()\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \n const duration = 3 + parseInt(test.result.SL)\n this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> gains the Corrosive Blood Trait for ${duration} rounds.</p>`, \n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \n}","g0SzfsLyW7aD2F19":"if (this.item.name.includes(\"(\") && this.item.system.tests.value.includes(\"(Social Group)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let group = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\n }\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \n// of the target point is splashed with mystic poison, \n// suffering 1d10 + SL damage which ignores Armour Points\n\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\n\nawait damage.toMessage(this.script.getChatData())\n\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\n damage.total,\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\n))\n\n// ... and gains the Poisoned Condition\n\nthis.actor.addCondition(\"poisoned\")","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\n amberTalons.name = \"Amber Talons\";\n amberTalons.img = this.effect.img;\n amberTalons.system.damage.value = \"SB + WPB\"\n amberTalons.system.equipped = true;\n amberTalons.system.qualities.value.push({name : \"magical\"})\n amberTalons.effects.push({\n label : \"Amber Talons\",\n transfer: false,\n icon : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\n flags : {\n wfrp4e : {\n applicationData : {\n documentType : \"Item\"\n },\n scriptData : [{\n trigger : \"applyDamage\",\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\n }]\n }\n }\n })\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\n await test.roll();\n if (test.failed)\n this.actor.addCondition(\"fatigued\") \n })\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\n{\n e.update({disabled: false})\n}\nthis.script.scriptNotification(\"Reset Powers\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Stealth (Underground)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\n args.test.preData.canReverse = true","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\n","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\n{\n \n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\n await test.roll()\n if (test.failed)\n {\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\n }\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\n args.actor.addCondition(\"ablaze\")","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\n{\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\n}","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","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\"","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","h766UvswLCsxcMow":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : -15,\n \"t\" : 0,\n \"i\" : 20,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 5,\n \"wp\" : 10,\n \"fel\" : 10\n}\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\nlet skillAdvancements = [7, 60, 7]\nlet talents = [\"Menacing\", \"Shadow\"]\nlet traits = [\"Distracting\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\nthis.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\n\nwoundsGained = Math.floor(woundsGained / 2)\n\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\n\nthis.script.scriptMessage(`Gains ${woundsGained} Wounds`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nif (test.failed)\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n this.script.scriptMessage(`<strong>Fumble</strong>: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\n \"dim\": 0,\n \"bright\": 0,\n \"angle\": 360,\n \"alpha\": 0.5,\n \"animation\": {\n \"speed\": 0,\n \"intensity\": 0,\n \"type\": \"none\",\n },\n \"color\": \"\",\n }}));","hObTbWi4ZdwXimIW":"if (args.item.type == \"spell\")\n{\n args.item.system.cn.value = Math.floor(args.item.system.cn.value / 2);\n}","hR1qD2kpFHF8JT8h":"return args.skill?.name == \"Language (Magick)\"","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\ndata.system.specification.value = 2\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 0\n }\n let skills = [\"Cool\", \"Dodge\"]\n let skillAdvancements = [10, 10]\n let talents = [\"Combat Reflexes\"]\n let trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\n let items = []\n\n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let index = 0; index < skills.length; index++)\n {\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","hmk8zV1LTElHUI8A":"let msg = `<b>${this.actor.prototypeToken.name}</b> loses 1 Wound.<br>`\n if (this.actor.status.wounds.value <= 1)\n {\n msg += `<b>${this.actor.prototypeToken.name}</b> goes unconscious.<br>`\n await this.actor.addCondition(\"unconscious\")\n }\n this.script.scriptMessage(msg)\n this.actor.modifyWounds(-1)","hnsmzvcuiUYB065I":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, context: { failure : \"May not flee Combat\"}}).then(test => test.roll())","hpwJRAhCsXTp9bd9":"let choice1 = [\n {\n type : \"skill\",\n name : \"Melee (Basic)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\nlet choice2 = [\n {\n type : \"skill\",\n name : \"Melee (Polearm)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice3 = [\n {\n type : \"skill\",\n name : \"Melee (Two-Handed)\",\n diff : {\n system : {\n advances : {\n value : 20\n }\n }\n }\n }\n]\n\nlet choice = await Dialog.wait({\n title : \"Choice\",\n content : \n `<p>\n Select your choice\n </p>\n <ol>\n <li>Melee (Basic)</li>\n <li>Melee (Polearm)</li>\n <li>Melee (Two-Handed)</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Basic\",\n callback : () => {\n return choice1\n }\n },\n 2 : {\n label : \"Polearm\",\n callback : () => {\n return choice2\n }\n },\n 3 : {\n label : \"Two-Handed\",\n callback : () => {\n return choice3\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\n{\n let range = parseInt(args.item.Duration)\n if (Number.isNumeric(range))\n {\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\n }\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n let damage = this.effect.sourceTest.result.damage\n\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \n{\n args.modifiers.ap.ignored += args.modifiers.ap.metal\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\n args.modifiers.ap.details.push(\"<strong>\" + this.effect.name + \"</strong>: Ignore Metal (\" + args.modifiers.ap.metal + \")\");\n args.modifiers.ap.metal = 0\n}","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\n\nwhile (locations.length < 2)\n{\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\n if (!locations.includes(loc.result))\n {\n locations.push(loc.result);\n }\n}\n\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\n\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\nlet data = item.toObject();\ndata.system.specification.value = this.actor.characteristics.s.bonus\ndata.system.description.value = \"\"\ndata.name = this.effect.name;\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\n{\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\n}","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\n\nthis.script.scriptMessage(`<b>this.actor.prototypeToken.name</b> healed ${healed} Wounds`);\n\nthis.actor.modifyWounds(healed)","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n let spells = this.actor.itemTypes.spell;\n if (spells.length)\n {\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\n this.script.scriptMessage(`Loses access to <strong>${chosen.name}</strong>`)\n chosen.update({name : chosen.name += \" (LOST)\"})\n }\n}\n\n\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\"))\n{\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if(test.failed)\n this.actor.addCondition(\"stunned\")\n })\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\n\nif (result.object.documentId && result.object.documentCollection)\n{\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\n if (item)\n { \n let data = item.toObject();\n // Some items need sourceTest for their effects\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\n }\n}\n\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\tthis.script.scriptNotification(\"Immune to Fear\");\n\targs.extendedTest.delete();\n\targs.abort = true;\n}\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\n// or the state of being Stinking Drunk are eliminated. \nawait this.actor.removeSystemEffect(\"consumealcohol1\")\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\n\n// The drinker is thereafter Fatigued \n// for a number of hours equal to 10 minus their Toughness Bonus — \n// nothing but time and rest can eliminate this penalty.\nawait this.actor.addCondition(\"fatigued\")\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\nthis.effect.updateSource({\"duration.rounds\" : duration});\nthis.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.</p>`, \n{\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n}) ","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Arcane Magic (Fire)\"))\n{\n this.actor.addCondition(\"ablaze\");\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\n{\n\targs.flags.amputatedFootOrLeg= true;\n\targs.fields.modifier -= 20;\n}","iuSoKntfJ4eAPafQ":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\");\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)\n\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\nif (choice[0])\n{\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\n}\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\n}","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\n{\n args.item.system.qualities.value.push({name : \"penetrating\"})\n}","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \n{\n args.opposedTest.result.other.push(\n `@Corruption[minor]{Minor Exposure to Corruption}`\n )\n this.script.scriptMessage(\n `<strong>${this.effect.name}</strong>: \n @Corruption[minor]{Minor Exposure to Corruption} <br/>\n <strong>${args.actor.prototypeToken.name}</strong> must take an \n <strong>Average (+20%) Corruption (Minor) Test</strong>`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","jC8o5PbnqEvOoZ9N":"this.actor.addCondition(\"poisoned\", 2)","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\nwoundsGained = Math.ceil(woundsGained / 2)\n\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\n\nargs.actor.addCondition(\"fatigued\")\nargs.attacker.hasCondition(\"fatigued\")?.delete();\n\nthis.script.scriptMessage(`<b>${args.attacker.prototypeToken.name}</b> gains ${woundsGained} Wounds`);","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\n\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\n{\n await broken.delete();\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\n this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\n}","jHgxpe6TJDlP3oTn":"let spells = await game.wfrp4e.utility.findAll(\"spell\", \"Loading Spells\");\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\n\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\nif (choice[0])\n{\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\n}\n","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\n{\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\n args.test.result.critical += ` (+${args.test.result.critModifier})`\n}","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\n\targs.abort = `<strong>${this.effect.name}</strong>: Ignored`","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\n{\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\" } })\n await test.roll();\n if (test.failed)\n { \n args.actor.addCondition(\"poisoned\");\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\n {\n args.actor.addCondition(\"unconscious\")\n }\n }\n}\n\n // else\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\n","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\n {\n args.addImpact = true\n args.opposedTest.result.other.push(\"<b>Rune of Goblin Bane</b>: Impact Added\")\n }","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\n{\n args.test.result.other.push(`<strong>${this.effect.name}</strong>: @Terror[1,${this.actor.prototypeToken.name}]`)\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\nawait this.actor.addCondition(\"deafened\")\nawait this.actor.addCondition(\"fatigued\")","jbZPLb4wuqJpHLUx":"this.item.system.flaws.value.push({name : \"dangerous\"})","jdS2u1tQPYeO55WI":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\n\nif (type == \"cold\")\n{\n\tlet stunned = Math.max(1, Math.trunc(args.totalWoundLoss / 5))\n\tawait args.actor.addCondition(\"stunned\", stunned);\n}\n\nif (type == \"corrosion\")\n{\n let damageItems = await Dialog.confirm({title : this.item.name, content : `<p>Damage all Items carried?</p>`})\n\tif (damageItems)\n\t{\n\t\tlet msg = ``\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\n\t\tlet armour = args.actor.itemTypes.armour.filter(i => i.isEquipped);\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\n\t\tfor(let item of weapons)\n\t\t{\n\t\t\tif (item.system.properties.qualities.shield)\n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tawait item.system.damageItem(1);\n\t\t\t}\n\t\t\tmsg += `<p><strong>${item.name}</strong> damage by 1</p>`\n\t\t}\n\t\tfor(let item of armour)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `<p><strong>${item.name}</strong> damage by 1</p>`\n\t\t}\n\t\tfor(let item of trappings)\n\t\t{\n\t\t\tawait item.system.damageItem(1);\n\t\t\tmsg += `<p><strong>${item.name}</strong> damage by 1</p>`\n\t\t}\n\t\tif (msg)\n\t\t{\n\t\t\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\n\t\t}\n\t}\n}\n\nif (type == \"fire\")\n{\n\tawait args.actor.addCondition(\"ablaze\");\n}\n\nif (type == \"electricity\")\n{\n\tawait args.actor.addCondition(\"stunned\");\n}\n\nif (type == \"poison\")\n{\n\tawait args.actor.addCondition(\"poisoned\");\n}\n\n","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\n args.actor.addCondition(\"poisoned\")","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\n","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\nif (tokenImg)\n{\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \n }\n else \n {\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\n }\n}\nelse \n{\n this.script.scriptNotification(\"No Token Image path configured. The image path should be set in the first line of this script.\", \"error\");\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\ntest.roll();\nreturn true;","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\n{\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\n await test.roll();\n if (test.failed)\n {\n\t args.actor.addCondition(\"stunned\");\n }\n\targs.actor.hasCondition(\"bleeding\")?.delete()\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\n{\n args.test.result.damage +=1 \n args.test.result.additionalDamage += 1\n}","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll(); \nif (test.failed)\n{\n this.actor.addCondition(\"prone\");\n}\n ","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Ranged (Bow)\")\n{\n args.item.system.modifier.value += 20;\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\n","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\nteeth = teeth.toObject();\n\nlet roll = await new Roll(\"1d10\").roll();\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\n// Kind of insane but whatever\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (opposedResult.differenceSL < 6)\n {\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\n }\n else if (opposedResult.differenceSL >= 6)\n {\n this.actor.addCondition(\"broken\");\n }\n}","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\nif (poisoned)\n{\n this.script.scriptMessage(\"Immune to Poisoned\")\n poisoned.delete()\n}","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","lII4KMRblqwFBlsV":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 20,\n \"wp\" : 10,\n \"fel\" : 15\n}\nlet skills = [\"Channelling\", \"Charm\", \"Perform (Dancing)\"]\nlet skillAdvancements = [0, 6, 3]\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\nlet trappings = []\nlet items = [];\nlet spells = [\"Marsh Lights\", \"Sleep\"];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\nthis.script.scriptNotification(\"Added \" + item.name)","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\nlet damage = this.actor.system.characteristics.s.bonus + 6\n\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if(test.failed)\n {\n await this.actor.addCondition(\"stunned\")\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\n }\n })","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\n\nlet infectedData = infected.toObject();\nlet fearData = fear.toObject();\nfearData.system.specification.value = 2;\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\nlet msg = `<b>${this.actor.prototypeToken.name}</b> loses 1 Wound and gains 1 <strong>Entangled</strong> Condition.`\nthis.script.scriptMessage(msg)\nthis.actor.modifyWounds(-1)","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"poisoned\")\n}","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`<p>Apply blunt damage reduction? (-3)</p>`})\n\nif (blunt)\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Blunt Damage Reduction\", value : -3})\n}","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\"}})\nawait test.roll();\nif (test.failed)\n{\n msg = `<p>@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: <a class=\"inline-roll\"><i class=\"fas fa-dice-d20\"></i>${Math.ceil(CONFIG.Dice.randomUniform() * 10)}</a></p>`\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\n {\n msg += `<p><b>${this.actor.prototypeToken.name}</b> also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}</p>`\n let newCorruption = Number(this.actor.status.corruption.value) + 1\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\n }\n\n this.script.scriptMessage(msg);\n}\n","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\nawait test.roll();\n\nif (test.failed) \n{\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n\n let currentAge = parseInt(this.actor.system.details.age.value)\n\n let inline = `<a class=\"inline-roll\" data-tooltip=\"@TT\"><i class=\"fas fa-dice-d20\"></i>@ROLL</a>`\n let msg =\n `<p><b>${this.actor.prototypeToken.name}</b> ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses</p>\n <p>${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} <b>Weapon Skill</b></p>\n <p>${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} <b>Ballistic Skill</b></p>\n <p>${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} <b>Strength</b></p>\n <p>${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} <b>Toughness</b></p>\n <p>${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} <b>Agility</b></p>\n <p>${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} <b>Dexterity</b></p>\n `\n this.script.scriptMessage(msg);\n\n let characteristics = duplicate(this.actor.system.characteristics)\n\n characteristics.ws.initial -= ws\n characteristics.bs.initial -= bs\n characteristics.s.initial -= s\n characteristics.t.initial -= t\n characteristics.ag.initial -= ag\n characteristics.dex.initial -= dex\n\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\n{\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\n if (slash)\n {\n slash.value = \"2A\"\n }\n}","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\nargs.prefillModifiers.successBonus++;\n","m8qBlbH7ROoqa22o":"return args.options.reload","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","mJ9eMPub4epJSf00":"return args.weapon?.system.qualities.value.find(i => i.name == \"shield\") && this.actor.attacker","mPxmCsXYirAIT913":"let key = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.characteristics, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({changes : [{key : `system.characteristics.${key[0].id}.modifier`, mode : 2, value : 10}]})","mRvLsSVxNyt8LVZb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GRRN3XAKIpEVCY7z\")\nlet data = item.toObject();\ndata.name += \" (To Be Determined)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","mTnmPcjWmvScIBWY":"return args.skill?.name.includes(\"Channelling\") || args.type == \"channelling\"","mV4Tmc0yfpL09KV7":"args.actor.addCondition(\"entangled\")","mYL4i1vNlMl4vFYy":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\n{\n args.flags.trained = true;\n args.fields.modifier += 10;\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","mr8qm5Bg6k1idZ6Q":"return args.item?.name == \"Play (Lute)\"","mziJBUYcsrhkdcCJ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{ \n this.actor.addCondition(\"prone\")\n}","n5RJqJL9fdRIxkuN":"if (this.actor.system.status.advantage.value > 0)\n{\n await this.actor.modifyAdvantage(-1);\n this.script.scriptNotification(\"Advantage Subtracted\")\n}\nelse \n{\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\n}\n\nlet test = await this.actor.setupTrait(this.item)\nawait test.roll();","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\n{\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Dodge\", { fields: { difficulty: \"average\" } }).then(async test => {\n await test.roll();\n if (test.failed) {\n await args.actor.addCondition(\"bleeding\")\n await args.actor.addCondition(\"entangled\")\n }\n })","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\n{ \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\")})\n}\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\n{\n args.fields.modifier -= 10;\n}\nelse if ([\"wp\"].includes(args.characteristic))\n{\n args.fields.modifier += 10;\n}","naF5EWr1CBkYRZTK":"if (args.opposedTest?.attackerTest?.item?.system?.isRanged) \n{\n let choice = await Dialog.wait({\n title: this.effect.name,\n content: `<p>Abort damage with <strong>${this.effect.name}</strong>?`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"No\",\n callback: () => {\n return false;\n }\n }\n }\n })\n\n if (choice)\n {\n args.abort = `<strong>${this.effect.name}</strong>: Damage cancelled`\n }\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\n","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\n{\n args.test.result.other.push(`<a class =\"table-click critical-roll\" data-modifier=\"20\" data-table = \"crit${args.test.result.hitloc.result}\"><i class=\"fas fa-list\"></i> Bonecrusher Critical (+20)</a> (only if Critical Cast selected)`)\n}","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\n{\n this.script.scriptMessage(`<b>Infected: ${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n}","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\nlet current = this.actor.status.fortune.value\n\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\n\nthis.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>\n They gain +50 to Swim Tests and can breathe underwater.<br>\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}. \n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.scriptMessage(`<strong>${this.item.name}</strong> 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.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","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\" } })\nawait test.roll();\nif (test.failed) \n{\n await this.actor.addCondition(\"prone\")\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\n injury = injury.toObject()\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\n if (injury.system.location.key[0] == \"r\")\n {\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\n }\n else if (injury.system.location.key[0] == \"l\")\n {\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\n }\n setProperty(injury, \"system.wfrp4e.count\", toes)\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\n}","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\n\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\n\nthis.script.scriptMessage(`Gained ${points} Fortune Points`)","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\n{\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n let msg = `Rolled ${roll}.`\n if (roll >= 7)\n {\n msg = `Attack hits with an SL of ${roll - 6}.`\n }\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\n\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\n{\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\n}","oHenUKtaS3jT5xQn":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4xF7M6ylIiGntekh\")\nitem = item.toObject()\nitem.name = this.effect.name\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\n","oPg4se8iQRD14kmB":"let filters = [\n {\n property : \"type\",\n value : \"weapon\"\n },\n {\n property : \"system.weaponGroup.value\",\n value : [\"twohanded\", \"polearm\"]\n }\n]\n\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 1, \"Choose an appropriate Polearm or Two-Handed Weapon\")\nitems = items.map(i => i.toObject())\n\nitems.forEach(i => equip(i))\n\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\n\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\n\nthis.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\n args.test.preData.canReverse = true","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data])\n \n this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)\n }\n}","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\n await test.roll()\n if (test.failed) {\n this.actor.modifyWounds(-1);\n this.script.scriptMessage(\"Takes 1 Damage\")\n }\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\n\nfunction tinDifference(layers)\n{ \n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\n\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\n\n return metalAP - tinAP;\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","ohl803m0tUwNfKAk":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 5 - this.actor.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","okW06V9UiPC4Vcrn":"let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 5,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 0,\n \"int\" : 0,\n \"wp\" : 5,\n \"fel\" : 5\n}\nlet skills = [\"Cool\", \"Dodge\"]\nlet skillAdvancements = [10, 10]\nlet talents = [\"Combat Reflexes\", \"Resolute\"]\nlet trappings = [\"Leather Jack\", \"Leather Leggings\", \"Leather Skullcap\", \"Hand Weapon\", \"Spear\", \"Shield\"]\nlet items = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","okr3TtzpFoefUuJS":"let item = await fromUuid('Compendium.wfrp4e-core.items.EaqlLRQigwnsEAXX')\nlet data = item.toObject();\ndata.system.location.value = \"Collar Bone\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","oqgd9G6oI1ncPYLw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CV9btQn09S9Fn8Jk\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nreturn test.failed;","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\nlet data = item.toObject();\ndata.name += \" (Woodlands)\";\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Arcane Magic (Light)\", \"talent\")\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\n\nif (!talent)\n{\n await this.actor.addCondition(\"blinded\")\n}\n\nif (demon)\n{\n await this.actor.addCondition(\"stunned\")\n}","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\n {\n args.actor.addCondition('ablaze')\n }","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\n\nif (criticals.length)\n{\n this.script.scriptNotification(\"Cannot suffer Critical Wounds\");\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\n}\n\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\n{\n this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\n}","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\nawait test.roll();\nif (!test.succeeded)\n{\n this.actor.addCondition(\"prone\")\n}","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\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({\n ws : game.wfrp4e.config.characteristics.ws,\n t : game.wfrp4e.config.characteristics.t,\n ag : game.wfrp4e.config.characteristics.ag,\n wp : game.wfrp4e.config.characteristics.wp\n}, this.effect.img), 1, \"Choose Characteristic\");\n\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \n{\n if (args.test.succeeded) \n {\n let staunch = Number(args.test.result.SL) + 1\n if (args.test.options.fieldDressing && args.test.result.reversed)\n {\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\n }\n args.test.result.other.push(`<b>${this.actor.name}</b> removed <b>${staunch}</b> Bleeding conditions from the patient.`)\n }\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\n {\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\n }\n}","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\nlet fearData = fear.toObject();\nlet leaderData = leader.toObject();\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\n effectData.duration.seconds = 10800\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Night Vision\") && !this.actor.has(\"Night Vision\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\n{\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\nthis.actor.status.encumbrance.pct = 0;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qmOt7h17hGAKqQe0":"\nlet choice = await Dialog.wait({\n title: this.effect.name,\n content: `<p><strong>${this.effect.name}</strong>: Is this a ranged or magical attack that orignates outside the Dome?</p>`,\n buttons: {\n yes: {\n label: \"Yes\",\n callback: () => {\n return true;\n }\n },\n no: {\n label: \"No\",\n callback: () => {\n return false;\n }\n }\n }\n})\n\nif (choice)\n{\n\targs.ward = 6;\n}","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `<strong>${this.effect.name}</strong>: Vomit!`} })\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","qxzhPtysAjPWspKf":"if (this.actor.has(\"Undead\") || this.actor.has(\"Daemonic\"))\n{\n this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);\n}","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\n{\n this.script.scriptNotification(\"Cannot be surprised\");\n this.actor.removeCondition(\"surprised\");\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\n\narmour.name = \"Armour (Hide)\"\narmour.system.specification.value = 2\nbite.system.specification.value = 3\nfear.system.specification.value = 2\nweapon.system.specification.value = 4\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\n\n\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\n\nblessed.system.specification.value = \"Ulric\"\nsize.system.specification.value = \"Large\"\n\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\n\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\n\nitems = items.concat(chosen || [])\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\n","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\nlet data = item.toObject()\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\n{\n args.test.result.damage += 1\n args.test.result.additionalDamage += 1\n if (!args.test.result.resolute) {\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\n args.test.result.resolute = true // Prevent duplicate messages\n }\n}\n","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\nlet terrorTraitItem = item.toObject()\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rXMylpnEtZpwou6x":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\n{\n await test.roll()\n if (test.failed)\n {\n this.actor.addCondition(\"fatigued\") \n }\n})","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\n{\n this.actor.removeCondition(\"bleeding\");\n this.script.scriptNotification(\"Removed 1 Bleeding Condition\")\n}\nelse \n{\n this.script.scriptNotification(\"No Bleeding Conditions\");\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\nlet data = item.toObject();\ndata.system.location.key = this.item.system.location.key\nif (data.system.location.key[0] == \"r\")\n{\n\tdata.system.location.value = \"Right Ankle\"\n}\nelse if (data.system.location.key[0] == \"l\")\n{\n\tdata.system.location.value = \"Left Ankle\"\n}\n\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n let effectData = this.item.effects.contents[0].convertToApplied();\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\n effectData.duration.seconds = 60 * minutes\n this.script.scriptMessage(`<strong>Duration</strong>: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n\tactor.applyEffect({effectData : [effectData]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\nlet data = item.toObject(); \nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\n{\n args.item.system.modifier.value += 30;\n}","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `<strong>${this.effect.name}</strong>: Drop the item!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\nawait test.roll();\n\n\nif (location && test.failed)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nreturn test.succeeded","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\ntest.roll();","rxB1AqfVMDqTRieE":"return ![\"ws\", \"bs\", \"ag\"].includes(args.characteristic) && args.skill?.name != game.i18n.localize(\"NAME.Perception\")","s0kTuDE0qv68V2KI":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFBF00\"}}));\n","s5bO0Sf0qpS27Tve":"await args.actor.addCondition(\"ablaze\", 3)\nawait args.actor.addCondition(\"prone\");","s6eZXfZkC1My6EXl":"let lore = this.effect.name.split(\" \")[2].toLowerCase();\nif (args.item.type == \"spell\" && args.item.system.lore.value == lore)\n{\n args.item.system.cn.value -= 1\n}\n","s7gJQdzuM3fz2zQK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\nlet data = item.toObject();\ndata.system.location.value = \"Hip\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n \nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}","s8idWt9YdMTRfnjV":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\nlet data = item.toObject();\ndata.system.specification.value = 4 - this.actor.characteristics.s.bonus\ndata.name = item.name.replace(\"(Feature)\", \"\");\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","s8xU6OOZbbfo6VIw":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus\n","s94yKZ4o5XN4JWM1":"// Any attack with such ammunition which inflicts at least one Wound,\n// also inflicts one Bleeding Condition.\n\nif (args.totalWoundLoss > 0) {\n args.actor.addCondition(\"bleeding\")\n}\n","sAVpm7hFRHpbCLXm":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"i\"].includes(args.characteristic)","sB4KB9bT3nQhAoqG":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\n\nlet mainEffect = this.item.effects.contents[0];\nif (mainEffect.name.includes(\"<Lore>\"))\n{\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\n if (choice.length)\n {\n mainEffect.update({name : mainEffect.name.replace(\"<Lore>\", choice[0].name)})\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\n }\n}\n\nthis.effect.delete();","sHfkTRqTWPg2JAGN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","sKO8TcLIkCTnFvXu":"args.abort = true;\nthis.script.scriptNotification(`Cannot use ${this.item.system.location.value}!`, \"error\")","sNSfDBIA2k17hPYI":"let ablaze = this.actor.hasCondition(\"ablaze\");\nif (ablaze)\n{\n\tablaze?.delete();\n\tthis.script.scriptNotification(\"Ignore Ablaze\");\n}\n","sSMg43ZjnNmpytfj":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\nawait test.roll();\n","sUHuj00IpoZ7Gd03":"return args.skill?.name != game.i18n.localize(\"NAME.Swim\");","sWyO1DNaqb2EdHoW":"if (!this.actor.items.getName(game.i18n.localize(\"NAME.Frenzy\"))) // Either frenzy trait or psychology\n{\n // Add Frenzy psychology\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\n let data = item.toObject();\n data.effects[0].disabled = false;\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}\n\nthis.script.scriptMessage(`<p><strong>By imbibing this potion, ${this.actor.prototypeToken.name}</strong> has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.</p>`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\nlet data = item.toObject();\ndata.name = data.name.replace(\"Target\", \"Greenskins, Undead, Chaos\")\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","sagKJM6oDFlw4ED2":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nreturn test.failed;","sbK1a7txpSoXFzyB":"if (args.test.options.useOnesArgumentative && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\n{\n\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\n\nif (ones > SL)\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\n args.test.result.other.push(`<b>${this.effect.name}</b>: Used unit dice as SL`)\n}","scfm5iWWBxWI6QaK":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\nfear = fear.toObject();\nfear.system.specification.value = 1;\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","sgS9rblPkQB36C8S":"if (this.item.name.includes(\"(\"))\n{\n\tlet trade = this.item.parenthesesText;\n\tif (trade?.toLowerCase() != \"any\")\n\t return this.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"any one\", trade)})\n}\n\nlet index = game.packs\n.filter(i => i.metadata.type == \"Item\")\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Trade\")))\n.map(i => {\n\ti.id = i._id\n\treturn i\n})\n\nlet choice = await ItemDialog.create(index, 1, \"Choose a Trade Skill\")\nlet text;\nif (!choice[0])\n{\n let custom = await ValueDialog.create(\"Enter Custom Trade Skill\", \"Custom Trade\"); \n text = custom || \"\"\n}\nelse \n{\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\n}\n\nawait this.item.updateSource({name : this.item.name.replace(\"(Any)\", \"\").replace(\"(any)\", \"\").trim() + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"any one\", text)});","shkBUtUuMPDKvFm7":"let test = await this.actor.setupSkill(\"Dodge\", {fields : {difficulty : \"average\"}})\nlet caster = this.effect.sourceActor\n\nlet fallen = this.effect.sourceTest.result.SL + caster.characteristics.wp.bonus\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> falls ${fallen} yards`)\n}","skVq3eDEYKFF2iZp":"// I'm assuming the endurance test specified is for the end-round check\nawait this.actor.addCondition(\"poisoned\", 4);\n","sm9d5lk6cM0OuUkf":"this.actor.applyFear(Math.min(4, this.effect.sourceTest.result.overcast.usage.other.current))","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\n\nif (location == \"lArm\")\n{\n\tthis.script.scriptNotification(\"Rolled Left\")\n}\nelse if (location == \"rArm\")\n{\n\tthis.script.scriptNotification(\"Rolled Right\")\n}\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\n\nif (location)\n{\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}\n\nlet roll = await new Roll(\"1d10\").roll()\n\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\n\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}`})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\")\n}","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunity to Psychology\")?.delete();\n\nlet roll = await new Roll(\"1d10\").roll();\n\nroll.toMessage(this.script.getChatData());\n\nthis.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","tCIT1a12Gt6k2ohA":"let resistance\nif (this.item.name.includes(\"(\"))\n{\n\tresistance = this.item.parenthesesText\n}\nelse \n{\n resistance = await ValueDialog.create(\"Enter Resistance\", \"Resistance\") \n \n if (resistance)\n {\n this.item.updateSource({name : this.item.name + ` (${resistance})`})\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\n }\n} \nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\n\nif (resistance && !this.effect.name.includes(\"(\"))\n{\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\n}","tDrs0aNIYmZPsOoS":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"prone\")\n}\n","tFAKRRRfTjQfdQz3":"this.actor.getActiveTokens().forEach(t => t.document.update({\"texture.tint\" : \"\"}));","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\nif (test.failed) \n{\n let add = 0\n\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \n {\n add = 1 // can't use isFumble if no hit location\n }\n\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\n\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\nif (args.applyAP && nonmagical) \n{\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\n args.modifiers.ap.ignored += nonmagical\n args.modifiers.ap.details.push(\"<strong>\" + this.effect.name + \"</strong>: Ignore Non-Magical AP (\" + nonmagical + \")\");\n}","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \n{\n if (args.test.failed)\n {\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\n this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\nif (fatigued)\n{\n this.script.scriptNotification(`Cleared ${fatigued.conditionValue} Fatigued Conditions`)\n fatigued.delete(); \n}\nelse \n{\n\tthis.script.scriptNotification(`No Fatigued Conditions`)\n}","tcZug8ehU6lyYBd9":"return args.skill?.name != \"Ranged (Blackpowder)\"","tdICiJ26rJrDbxT6":"return args.characteristic != \"i\"","tn6SwmjAuNzqE6dx":"let damage = 0\nlet test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();\n\nif (test.succeeded)\n{\n damage = 10;\n}\nelse if (test.failed)\n{\n damage = 20;\n}\n\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\n\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\nthis.script.scriptMessage(`<strong>Location:</strong> ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\nawait test.roll();\n\nif (test.failed)\n{\n let sourceActor = this.effect.sourceActor;\n if (sourceActor)\n {\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\n }\n}","u3olS2p7Ls1JXfAH":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"mutatephys\", {}, \"Tzeentch\"));","u5dNZ0s3lWfL8KFb":"return args.fields.charging","u6CYMSZADrfXd48Q":"args.fields.modifier += 20;","uACa6u4JLNMRgFlr":"const talents = await Promise.all([\"Furious Assault\", \"Sea Legs\"].map(game.wfrp4e.utility.findTalent))\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","uAy4w7y8Uu9POF8C":"args.item.system.qualities.value.push({name : \"impact\"})","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\nawait test.roll();\n\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\n\nif (opposedResult?.winner == \"attacker\")\n{\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\n {\n this.actor.addCondition(\"unconscious\")\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n else \n {\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\n }\n}\nelse \n{\n return false;\n}","uNYstk3eXmWamhzs":"args.actor.addCondition(\"blinded\")","uOHAsKlkFuIaAmjb":"args.actor.modifyWounds(1)","uSwkYENTOcnfRrqA":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) && args.weapon?.system?.attackType != \"melee\"","ucF4aiJ1gpDB333G":"if (args.test.options.catfall && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) && !args.test.result.catfall)\n{\n args.test.result.other.push(`<b>${this.effect.name}</b>: Fall distance damage reduced by ${Number(args.test.result.SL) + 1} yards`)\n args.test.result.catfall = true; // Prevent duplicate messages\n}","ugL5IBB6R2yWyMWd":"if (args.totalWoundLoss > 0)\n{\n let apply = await Dialog.confirm({title : this.effect.name, content : `<p>Appy ${this.effect.name} Damage? Attacker must have used bare hands or a melee weapon made of metal.`})\n if (apply)\n {\n \n let damage = 5 + this.actor.characteristics.wp.bonus;\n \n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\n \n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\n \n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\n \n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\n \n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\n \n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\n msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\n this.script.scriptMessage(msg)\n }\n}","upfK6GM33qZCZjll":"return args.item?.name != \"Play (Lute)\"","uwdQvZtzy2HVeEzx":"if (args.totalWoundLoss > 0)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData());\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\n \n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\n await test.roll();\n if (test.failed)\n {\n this.script.scriptMessage(\"<strong>\" + args.actor.name + \"</strong> takes a @Table[critbody]{Critical Hit} to the torse\", {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n }\n })\n}\n","ux3jaLpAUhZ5YqA6":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\") && args.item?.name != game.i18n.localize(\"NAME.Cool\")","v00nVCRKqqRvY28t":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"stunned\", 3)\n}\n","v4CCxVaVGf9i8U7X":"let cured = await Dialog.wait({\n title : this.effect.name,\n content : \"<p>Enter the number of diseases/poisons cured</p><input type='number'>\",\n buttons : {\n confirm : {\n label : \"Confirm\",\n callback : (dlg) => {\n let input = dlg.find(\"input\");\n value = parseInt(input[0].value);\n return value;\n }\n }\n }\n})\n\n\nlet damage = 0;\n\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\n\nlet test = new Roll(`${rolls.join(\" + \")}`);\nawait test.roll();\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\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\")\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\n {\n type : \"skill\",\n name : \"Ranged (Bow)\",\n diff : {\n system : {\n advances : {\n value : 10\n }\n }\n }\n },\n {\n type : \"weapon\",\n name : \"Longbow\",\n },\n {\n type : \"ammunition\",\n name : \"Arrow\",\n }\n]\nlet choice2 = [\n]\n\nlet choice = await Dialog.wait({\n title : \"Option\",\n content : \n `<p>\n Add Option?\n </p>\n <ol>\n <li>Ranged (Bow) +10 and a Longbow with 12 Arrows</li>\n </ol> \n `,\n buttons : {\n 1 : {\n label : \"Yes\",\n callback : () => {\n return choice1;\n }\n },\n 2 : {\n label : \"No\",\n callback : () => {\n return choice2;\n }\n }\n }\n})\n\nlet updateObj = this.actor.toObject();\nlet items = []\nfor (let c of choice)\n{\n let existing \n if (c.type == \"skill\")\n {\n existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)\n if (existing && c.diff?.system?.advances?.value)\n {\n existing.system.advances.value += c.diff.system.advances.value\n }\n }\n\n if (!existing)\n {\n let item = await game.wfrp4e.utility.find(c.name, c.type)\n if (item)\n {\n item = item.toObject()\n equip(item);\n items.push(mergeObject(item, (c.diff || {})))\n }\n else\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n\n}\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n}","v6LIG7EwWYALxCpP":"return !this.effect.getFlag(\"wfrp4e\", \"trained\")?.includes(\"entertain\") || (!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\")))","vFUVWZ1l8wpTjLcx":"if (!this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))\n return\n\nlet caster = this.effect.sourceActor;\nif (caster) \n{\n let wp = caster.system.characteristics.wp\n if (this.actor.system.characteristics.wp.value >= wp.value)\n {\n this.script.scriptNotification(\"Target has higher Willpower, no effect\")\n return\n }\n this.actor.applyBasicDamage(wp.bonus, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL })\n}","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \n{\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\n await test.roll();\n if (test.failed) \n {\n await args.actor.addCondition(\"poisoned\")\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\n }\n })\n}","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nif (test.failed)\n{\n let roll = await new Roll(\"1d10\").roll();\n roll.toMessage(this.script.getChatData())\n\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\n// On a 1, its poison has run dry, \n// and the next time it is employed it will shatter.\n\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\n ChatMessage.create({\n content: `\n <strong>${this.item.name}</strong> has run out of poison. It will shatter the next time it is used.`, \n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\n blind: true\n })\n}\n","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","vc4bELo0cWYoILfB":"let choice = await ItemDialog.create(this.actor.itemTypes.disease, 1, \"Choose a disease to heal (must be naturally occuring)\")\n\nthis.script.scriptMessage(`Cured <strong>${choice[0]?.name}</strong>`);\nchoice[0].delete()","vc8eVKtyjtOGvWlK":"if (!this.actor.hasCondition(\"entangled\"))\n{\n this.effect.delete();\n}","vcM0IgsYVmfWrlO3":"fromUuid(\"Compendium.wfrp4e-core.items.rOV2s6PQBBrhpMOv\").then(item => {\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\n})","vgfs0DXvF5iKrz1M":"return args.characteristic != \"ag\" || this.item.getFlag(\"wfrp4e\", \"passed\")","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\nif (SL < 0)\n SL = 0\nthis.actor.addCondition(\"fatigued\", 1 + SL)","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\nif (broken)\n{\n broken.delete();\n this.script.scriptNotification(\"Removed Broken\")\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\nargs.modifiers.other.push({label : this.effect.name, value : -1)","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\nawait test.roll();\nif (test.failed)\n{\n\tawait this.actor.addCondition(\"prone\")\n\tawait this.actor.addCondition(\"stunned\")\n}\n \nlet location = this.item.system.location.key;\n\nif (location)\n{\n let dropped = this.item.system.weaponsAtLocation;\n\n if (dropped.length)\n {\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\n for(let weapon of dropped)\n {\n await weapon.system.toggleEquip();\n }\n }\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\n{\n delete args.test.result.minormis\n}\n// Decrement the major miscast to minor miscast\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\n{\n delete args.test.result.majormis\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\nlet data = item.toObject();\nlet slOver = this.effect.sourceTest.result.slOver;\nlet overcast = this.effect.sourceTest.result.overcast\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\nlet added = Math.floor(slOver / 3) || 0\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\nlet data = item.toObject();\ndata.system.specification.value = 60\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\n{\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\n await test.roll()\n if (test.failed) {\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\n disease = disease.toObject()\n disease.system.duration.active = true\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\n }\n })\n}","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\nlet msg = \"\";\nfor(let item of items)\n{\n if (item.system.properties.qualities.durable)\n {\n await item.update({\"system.qualities.value\" : []});\n msg += `<p>${item.name} loses all Qualities</p>`\n }\n else \n {\n msg += `<p>${item.name} crumbles into dust!</p>` \n await item.update({name : item.name + \" (Dust)\"})\n }\n}\nif(msg)\n{\n this.script.scriptMessage(msg);\n}","whUSkaR1yem21bXp":"let characteristics = {\n \"ws\" : 10,\n \"bs\" : 5,\n \"s\" : 0,\n \"t\" : 5,\n \"i\" : 10,\n \"ag\" : 0,\n \"dex\" : 6,\n \"int\" : -5,\n \"wp\" : 0,\n \"fel\" : 10\n}\nlet skills = [\"Melee (Basic)\", \"Track\"]\nlet skillAdvancements = [8, 7]\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\nlet trappings = []\nlet items = [];\nlet spells = [];\n\nlet updateObj = this.actor.toObject();\n\nfor (let ch in characteristics)\n{\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n}\n\nfor (let index = 0; index < skills.length; index++)\n{\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n}\n\nfor (let talent of talents)\n{\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n}\n\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\nfor (let trait of traits)\n{\n let traitMatches = trait.matchAll(traitRegex).next().value\n let traitName = traitMatches[1]\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\n let traitSpec = traitMatches[3]\n\n let traitItem;\n try {\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\n }\n catch { }\n if (!traitItem) {\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\n }\n traitItem = traitItem.toObject()\n\n if (Number.isNumeric(traitVal))\n {\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\n }\n else \n traitItem.system.specification.value = traitSpec\n\n items.push(traitItem)\n\n}\n\nfor (let trapping of trappings) \n{\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n\n equip(trappingItem)\n\n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n}\n\nfor (let spell of spells) \n{\n let spellItem = await game.wfrp4e.utility.findItem(spell)\n if (spellItem)\n {\n spellItem = spellItem.toObject()\n\n items.push(spellItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\n }\n}\n\nupdateObj.name = updateObj.name += \" \" + this.effect.name\n\nawait this.actor.update(updateObj)\nthis.actor.createEmbeddedDocuments(\"Item\", items);\n\n\nfunction equip(item)\n{\n if (item.type == \"armour\")\n item.worn = true\n else if (item.type == \"weapon\")\n item.equipped = true\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\n item.worn = true\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\n\n this.script.scriptNotification(\"This test only applies to criminals, otherwise close the dialog.\");\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \n {\n await test.roll();\n if (test.failed)\n {\n args.actor.addCondition(\"unconscious\");\n }\n });","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\n{\n\targs.abort = true;\n\tthis.script.scriptNotification(\"Does not need to make Fear or Terror tests\");\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\n\nawait this.actor.addCondition(\"deafened\", 3)\n\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\"}})\nawait test.roll();\nif (test.failed)\n{\n this.actor.addCondition(\"broken\")\n}","x2RLUUNB7BiIDYCP":"\n let difficulty = \"\"\n if (this.effect.name.includes(\"Moderate\"))\n difficulty = \"easy\"\n else if (this.effect.name.includes(\"Severe\"))\n difficulty = \"average\"\n else\n difficulty = \"veasy\"\n \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\"})\n await test.roll();\n if (test.failed)\n {\n this.actor.addCondition(\"dead\");\n }\n ","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\nlet data = item.toObject();\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\ndata.system.specification.value = 5\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\nawait test.roll();\n\nif (test.succeeded)\n{\n\tthis.actor.removeCondition(\"prone\");\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\n}\nelse \n{\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\nChatMessage.create({content : \"<em>Grace is beyond style</em>\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\n \"nobles\" : \"Nobles\",\n \"guilders\" : \"Guilders\",\n \"servants\" : \"Servants\"\n}), 1, \"Choose Group\")\n\nlet name = choice[0]?.name\n\nif (!name)\n{\n return;\n}\n\nif (item)\n{\n item.update({\n name : item.name.split(\"(\")[0] + ` (${name})`, \n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\n })\n}\nelse \n{\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\n let data = item.toObject();\n data.name += ` (${name})`\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\n scythe.name = \"Scythe of Shyish\";\n scythe.system.damage.value = \"WPB + 3\"\n scythe.system.equipped = true;\n scythe.img = this.effect.icon;\n scythe.system.qualities.value.push({name : \"magical\"})\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","xIRU2SaqLeWmqGDI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.vMYEkrWj0ip6ZOdv\")\nlet data = item.toObject();\ndata.name += \" (Disease)\"\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xL4S0H1RP8hhXW7c":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xneBqGOs1QS7kfUr\")\nlet data = item.toObject();\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","xLKAuD6yzwjAL6tJ":"return !args.weapon || args.weapon?.system.properties?.qualities.shield || !this.item.system.usesLocation(args.weapon)","xMhhVol8Is3DJ3gb":"if (this.effect.sourceTest.succeeded)\n{\n let blinded = 1 + this.effect.sourceTest.result.overcast.usage.other.count\n this.actor.addCondition(\"blinded\", blinded)\n}","xPDMpOvC1ZBVxrNg":"args.fields.modifier += 10;","xPwa3NftkpMBc2AO":"return ![\"ws\", \"s\", \"ag\"].includes(args.characteristic)","xQ3xR2Wf0wHFa76H":"return [\"ws\", \"bs\", \"fel\", \"dex\"].includes(args.characteristic) || args.weapon","xQnoRTHotZKrwPrx":"return args.type == \"cast\" && args.item?.system.lore?.value == \"shadow\"","xRTmMwNfdirjsi8X":"this.actor.addCondition(\"ablaze\");\n\nthis.actor.applyBasicDamage(this.effect.sourceTest.result.damage)","xRd6oA1QWLVpfoBm":"if (!this.actor.has(\"Night Vision\"))\n{\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\");\n let data = item.toObject();\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\n}","xS2su09zcza9du09":"if ([\"Minor\", \"Moderate\", \"Major\"].includes(this.item.system.specification.value))\n{\n\treturn\n}\n\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({minor : \"Minor\", moderate : \"Moderate\", major : \"Major\"}, this.item.img), 1, \"Choose Corruption Severity\");\n\nthis.item.updateSource({\"system.specification.value\" : choice[0]?.name || \"\"})","xUpKYT7BZCSmAfUy":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[0].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","xYTkj8jhSVOSoLbC":"this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] = true;","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\n{\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\n}","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\n\nif (args.equipped) { \n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \n this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>\n They suffer 20 to all attempts to resist Disease.<br>\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}. \n `,\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \n}\n\n// Notify of lingering effects when mask is removed\nelse if (!args.equipped)\n{\n await this.item.effects.contents[0].delete();\n await this.item.update({name : this.item.name += \" (Used)\"})\n this.script.scriptMessage(`<strong>${this.item.name}</strong> 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.`, \n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\n )\n \n}\n","xklncIMwQIespDxS":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"vhard\"}});\nawait test.roll();\ngame.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData())\n\nif (test.failed)\n{\n this.actor.addCondition(\"unconscious\");\n}","xnHobI9HojObLHMp":"args.applyTB = false;\nargs.applyAP = false;","xobGBJbgFjQCrwvq":"let roll;\nif (this.actor.has(game.i18n.localize(\"NAME.Daemonic\")) || this.actor.has(game.i18n.localize(\"NAME.Undead\")) || [\"Goblin\", \"Orc\", \"Undead\"].includes(this.actor.system.details.species.value))\n{\n roll = await new Roll(`1d10 + ${this.effect.sourceTest.result.overcast.usage.other.current}`).roll()\n}\nelse \n{\n roll = await new Roll(`1d10`).roll()\n}\n\nroll.toMessage(this.script.getChatData())\nawait this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true})\n\nif (this.actor.has(\"Undead\") || args.actor.has(\"Daemonic\"))\n{\n this.actor.addCondition(\"ablaze\")\n}","xpgXWoK2zDnG1uiF":"let stunned = args.actor.hasCondition(\"stunned\")\nif (stunned)\n setProperty(stunned, \"flags.wfrp4e.scriptData\", getProperty(stunned, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet poisoned= args.actor.hasCondition(\"poisoned\")\nif (poisoned)\n setProperty(poisoned, \"flags.wfrp4e.scriptData\", getProperty(poisoned, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet deafened = args.actor.hasCondition(\"deafened\")\nif (deafened)\n setProperty(deafened, \"flags.wfrp4e.scriptData\", getProperty(deafened, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet entangled = args.actor.hasCondition(\"entangled\")\nif (entangled)\n setProperty(entangled, \"flags.wfrp4e.scriptData\", getProperty(entangled, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet fatigued = args.actor.hasCondition(\"fatigued\")\nif (fatigued)\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet blinded = args.actor.hasCondition(\"blinded\")\nif (blinded)\n setProperty(blinded, \"flags.wfrp4e.scriptData\", getProperty(blinded, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet broken = args.actor.hasCondition(\"broken\")\nif (broken)\n setProperty(broken, \"flags.wfrp4e.scriptData\", getProperty(broken, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))\n\nlet prone= args.actor.hasCondition(\"prone\")\nif (prone)\n setProperty(prone, \"flags.wfrp4e.scriptData\", getProperty(prone, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","xq3RANOtmPhy77ne":"args.update({texture : {tint : \"#FFBF00\"}});","xqWxV9w5ezBQdJkZ":"return args.options.corruption;","xvGxwv7X0Vq3vNqb":"args.fields.modifier -= 10;","xvH4PKJasHcehOZz":"return args.skill?.name == `${game.i18n.localize(\"NAME.Lore\")} (${this.item.parenthesesText})`","y3agVFVBR8tVqWyx":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\nawait test.roll();","yAL0YwZWVm8o1nxa":"if (this.actor.hasCondition(\"dead\") && !this.actor.gardenOfCorpses)\n{\n this.script.scriptMessage(\"[[3d10]] @UUID[Compendium.wfrp4e-core.actors.T79RqnDOAQLn3I1s]{zombies} spring forth from the remains.\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n this.actor.gardenOfCorpses = true;\n // local storage is sufficient to prevent multiple messages\n}","yCgH3N9AurIiAv0i":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"(Sens)\"))\n{\n let tests = this.item.system.tests.value\n let name = this.item.name\n\n // If name already specifies, make sure tests value reflects that\n if (name.includes(\"(\"))\n {\n let sense = name.split(\"(\")[1].split(\")\")[0]\n tests = `${tests.split(\"(\")[0].trim()} (${sense})`;\n }\n else // If no sense specified, provide dialog choice\n {\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\n taste : \"Goût\",\n sight : \"Vue\",\n smell : \"Odorat\",\n hearing : \"Ouie\",\n touch : \"Toucher\"\n }, this.item.img), 1, \"Choisir un sens\");\n if (choice[0])\n {\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\n tests = `${tests.split(\"(\")[0].trim()} (${choice[0].name})`\n }\n }\n\n this.item.updateSource({name, \"system.tests.value\" : tests})\n}","yDvxF9llUYwJg0sE":"if (getProperty(args.data, \"system.loaded.value\") == true)\n{\n let repeaterValue = Math.ceil(CONFIG.Dice.randomUniform() * 10);\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value);\n let repeater = qualities.find(i => i.name == \"repeater\")\n if (repeater)\n {\n repeater.value = repeaterValue\n }\n else \n {\n qualities.push({name : \"repeater\", value : repeaterValue})\n }\n setProperty(args.data, \"system.loaded.amt\", repeaterValue)\n this.item.update({\"system.qualities.value\" : qualities});\n this.script.scriptNotification(\"Repeater \" + repeaterValue);\n}\nelse if (getProperty(args.data, \"system.loaded.value\") == false)\n{\n let qualities = foundry.utils.deepClone(this.item.system.qualities.value).filter(i => i.name != \"repeater\");\n this.item.update({\"system.qualities.value\" : qualities});\n}","yFMvxecXAZ6T2O0S":"if (args.totalWoundLoss >= 1)\n{\n let roll = await new Roll(\"1d10\").roll();\n await roll.toMessage(this.script.getChatData());\n if (roll.total == 9)\n {\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.cLOGeMqUty61nYB9]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n }\n}","yIGItnshXI4W46cp":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\");","yMMzZ7daCqRlGT3N":"let item = args.opposedTest.attackerTest.item;\nif (!item.isMagical && (item.type == \"weapon\" || item.type == \"trait\"))\n{\n args.modifiers.other.push({label : this.effect.name, details : \"Remove Damage Rating\", value : -1 * (args.totalWoundLoss - args.opposedTest.result.differenceSL)})\n}\n","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","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\"));","yTmRoUstxHMso91c":"if (args.item.name == \"Magic Resistance\" && args.item.type == \"trait\")\n{\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\n}","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","yatUu0cd7iKs50rq":"return args.skill?.name != game.i18n.localize(\"NAME.Track\");","ybxDG2ezvRx02LYx":"return !args.options.corruption","ynNCBAYwJFkTiXV1":"this.actor.system.status.addArmour(4, {source : this.effect})","ynV7tz0OdCwlsQp6":"let msg = \"\"\nmsg += `<p>${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}</p>`\nmsg += `<p>${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}</p>`\nmsg += `<p>${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}</p>`\n\nthis.script.scriptMessage(msg);","ynoHNXXCGRS6fTqF":"let msg = \"\"\n\nlet i_gain = (await new Roll(\"1d10\").roll()).total\n\nif (args.actor.characteristics.i.value <= 0)\n{\n i_gain += (await new Roll(\"2d10\").roll()).total\n}\n\nmsg = `<b>${this.actor.prototypeToken.name}</b> gains ${i_gain} Initiative`\n\nlet newValue = i_gain + args.actor.characteristics.i.modifier\n\nthis.actor.update({\"system.characteristics.i.modifier\" : newValue})\n\n\nlet hitloc = await game.wfrp4e.tables.rollTable(\"hitloc\")\n\nlet value = hitloc.result\nlet desc = hitloc.description\n\nthis.effect.updateSource({\"flags.wfrp4e.location\" : value})\n\nmsg += ` as eyes push out of their ${desc}`\n\nthis.script.scriptMessage(msg)","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\n\nif (sourceItem)\n{\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\n\tthis.script.scriptNotification(\"Applied after effects\");\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\"}})\nawait test.roll();\nif (test.failed && this.actor.type == \"character\")\n{\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\n}","z926Cl2vxUfyLY0V":"if (![\"rArm\", \"lArm\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\n\treturn true\n\nreturn [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","z9NEbIUBsKMaTuCz":"if (args.opposedTest.result.hitloc && args.opposedTest.result.hitloc.value == \"head\") \n{\n args.actor.addCondition(\"entangled\")\n}","zA6TDttpwMSMl7D8":"// An imbiber must take a Consume Alcohol Test.\nthis.actor.setupSkill(game.i18n.localize(\"NAME.ConsumeAlcohol\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\n await test.roll()\n // If they succeed, \n // as a result of whatever potential futures they glimpse, \n // they can spend a Fortune Point within the next hour to reverse the dice of any failed Test.\n if (test.succeeded) {\n this.script.scriptMessage(`As a result of whatever potential futures they glimpse, <strong>${this.actor.prototypeToken.name}</strong> can spend a Fortune Point within the next hour to reverse the dice of any failed Test.`, \n {\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \n blind: true \n }) \n }\n})","zBHTIBU8OlYj1YIO":"args.fields.modifier += this.effect.sourceActor?.system.characteristics.wp.value;","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\n{\n args.actor.addCondition(\"bleeding\", 1);\n this.script.scriptNotification(\"Added Bleeding\")\n}","zR4WAjzXHTZuiu5G":"let actor = this.actor;\n let effect = this.effect;\n let bleedingAmt;\n let bleedingRoll;\n let msg = \"\"\n\n let damage = effect.conditionValue;\n let scriptArgs = {msg, damage};\n await Promise.all(actor.runScripts(\"preApplyCondition\", {effect, data : scriptArgs}))\n msg = scriptArgs.msg;\n damage = scriptArgs.damage;\n msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})\n\n if (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\"))\n {\n await actor.addCondition(\"unconscious\")\n msg += \"<br>\" + game.i18n.format(\"BleedUnc\", {name: actor.prototypeToken.name })\n }\n\n if (actor.hasCondition(\"unconscious\"))\n {\n bleedingAmt = effect.conditionValue;\n bleedingRoll = (await new Roll(\"1d100\").roll()).total;\n if (bleedingRoll <= bleedingAmt * 10)\n {\n msg += \"<br>\" + game.i18n.format(\"BleedFail\", {name: actor.prototypeToken.name}) + \" (\" + game.i18n.localize(\"Rolled\") + \" \" + bleedingRoll + \")\";\n await actor.addCondition(\"dead\")\n }\n else if (bleedingRoll % 11 == 0)\n {\n msg += \"<br>\" + game.i18n.format(\"BleedCrit\", { name: actor.prototypeToken.name } ) + \" (\" + game.i18n.localize(\"Rolled\") + bleedingRoll + \")\"\n await actor.removeCondition(\"bleeding\")\n }\n else\n {\n msg += \"<br>\" + game.i18n.localize(\"BleedRoll\") + \": \" + bleedingRoll;\n }\n }\n\n await Promise.all(actor.runScripts(\"applyCondition\", {effect, data : {bleedingRoll}}))\n if (args.suppressMessage)\n {\n let messageData = game.wfrp4e.utility.chatDataSetup(msg);\n messageData.speaker = {alias: this.effect.name}\n messageData.flavor = this.effect.name;\n return messageData\n }\n else\n {\n return this.script.scriptMessage(msg)\n }\n ","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\nlet data = item.toObject();\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\n\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\nawait test.roll();\nif (test.succeeded)\n{\n this.effect.delete()\n}","zadppy7FEbXvgUON":" let characteristics = {\n \"ws\" : 5,\n \"bs\" : 0,\n \"s\" : 0,\n \"t\" : 0,\n \"i\" : 0,\n \"ag\" : 10,\n \"dex\" : 10,\n \"int\" : 0,\n \"wp\" : 0,\n \"fel\" : 5\n }\n let skills = [\"Perception\", \"Sleight of Hand\", \"Stealth (Urban)\"]\n let skillAdvancements = [10, 10, 10]\n let talents = [\"Criminal\", \"Etiquette (Criminals)\"]\n let trappings = [\"Rope, 10 yards\", \"Lockpick\", \"Mask\"]\n let items = []\n \n let updateObj = this.actor.toObject();\n \n for (let ch in characteristics)\n {\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\n }\n \n for (let index = 0; index < skills.length; index++)\n {\n let skill = skills[index]\n let skillItem;\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\n if (skillItem)\n skillItem.system.advances.value += skillAdvancements[index]\n else \n {\n skillItem = await game.wfrp4e.utility.findSkill(skill)\n skillItem = skillItem.toObject();\n skillItem.system.advances.value = skillAdvancements[index];\n items.push(skillItem);\n }\n }\n \n for (let talent of talents)\n {\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\n if (talentItem)\n {\n items.push(talentItem.toObject());\n }\n else \n {\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\n }\n }\n \n for (let trapping of trappings) \n {\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\n if (trappingItem)\n {\n trappingItem = trappingItem.toObject()\n \n equip(trappingItem)\n \n items.push(trappingItem);\n }\n else \n {\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\n }\n }\n \n \n await this.actor.update(updateObj)\n this.actor.createEmbeddedDocuments(\"Item\", items);\n \n function equip(item)\n {\n if (item.type == \"armour\")\n item.system.worn.value = true\n else if (item.type == \"weapon\")\n item.system.equipped = true\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\n item.system.worn = true\n }","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\n{\n\tthis.item.system.reduceQuantity();\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\n}\nelse\n{\n\tthis.script.scriptNotification(\"None left!\", \"error\")\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\n if (target.actor.details.size.value == \"tiny\")\n modifier = 30\n if (target.actor.details.size.value == \"ltl\")\n modifier = 20\n if (target.actor.details.size.value == \"sml\")\n modifier = 10\n\t\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zphxI8VSWbNQCMBy":"args.size = \"lrg\"","zqShIJnrRReGgP94":"let {added, removed} = this.effect.getFlag(\"wfrp4e\", \"propertiesChanged\");\n\nfor(let property of (added || []))\n{\n let hasValue = game.wfrp4e.config.propertyHasValue[property];\n if (!args.item.system.qualities.value.find(i => i.name == property))\n {\n args.item.system.qualities.value.push({name : property, value : (hasValue ? 2 : null)})\n }\n}\n\nfor(let property of (removed || []))\n{\n args.item.system.flaws.value = args.item.system.flaws.value.filter(i => i.name != property)\n}","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","zzk2uRSFjFHB5kjw":"\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\n {\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\n }\n else if (args.test.isFumble && roll != 1)\n args.test.result.other.push(\"Misfire Roll: \" + roll)"});
}