From 635d9e75251675feb12509efc276e830c08c80dd Mon Sep 17 00:00:00 2001
From: alzer ${this.actor.prototypeToken.name} :\r\n \r\n
\r\n C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.
Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\r\n{\r\n args.fields.modifier += 10;\r\n args.flags.quietenedApplied = true\r\n}","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore le m�tal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\n\r\nlet data1 = item1.toObject();\r\ndata1.system.location.key = this.item.system.location.key\r\n\r\nlet data2 = item2.toObject();\r\ndata2.system.location.key = this.item.system.location.key\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\r\n","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\")\r\n\r\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\r\n\r\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\r\n\r\nif (text == \"GM's Choice\")\r\n{\r\n return this.script.scriptNotification(text)\r\n}\r\n\r\nif (spellsWithLore.length > 0)\r\n{\r\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\r\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\n this.script.scriptNotification(selectedSpell.name);\r\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\r\n}\r\nelse\r\n{\r\n ui.notifications.notify(`Impossible de trouver le sort ${lore}. Essayez à nouveau`)\r\n}","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\r\n{\r\n\targs.test.result.other.push(`${this.effect.name}: Automatic Failure`)\r\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\r\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\r\nlet data = item.toObject();\r\ndata.system.specification.value = fixation.result;\r\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\")\r\n }\r\n})\r\n","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\r\nif (!table)\r\n{\r\n\treturn ui.notifications.error(\"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.\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"L'item ne peut être trouvé: \" + uuid)\r\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\r\n{\r\n args.flags.strikeToStun = true\r\n args.fields.modifier += 20;\r\n args.fields.hitLocation = \"head\";\r\n}\r\nargs.fields.successBonus++;","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\r\n{\r\n\treturn true;\r\n}\r\nelse \r\n{\r\n\targs.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says \"any gossip test can be reversed\" so check it here instead of submission\r\n}\r\n ","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\r\n\r\nif ([\"feu\", \"electricité\", \"poison\"].includes(type))\r\n{\r\n args.applyAP = false;\r\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\r\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\r\nthis.effect.update({\"disabled\": state});\r\n\r\nif (state)\r\n return ui.notifications.info(\"EFFECT.CreatureBackInWater\", {localize: true})\r\n\r\nreturn ui.notifications.info(\"EFFECT.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let terrain = name.split(\"(\")[1].split(\")\")[0]\r\n tests = tests.replace(\"Terrain\", terrain)\r\n }\r\n else // If no sense specified, provide dialog choice\r\n {\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n coastal : \"Côtes\",\r\n deserts : \"Déserts\",\r\n marshes : \"Marches\",\r\n rocky : \"Rocailles\",\r\n tundra : \"Tundra\",\r\n woodlands : \"Forêts\"\r\n }, this.item.img), 1, \"Choisir le Terrain\");\r\n if (choice[0])\r\n {\r\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\r\n tests = tests.replace(\"Terrain\", \"Terrain \" + choice[0].name )\r\n }\r\n }\r\n\r\n this.effect.updateSource({name})\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 5,\r\n \"s\" : 5,\r\n \"t\" : 0,\r\n \"i\" : 5,\r\n \"ag\" : 5,\r\n \"dex\" : 5,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n\r\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n","1CeYp5MlPcH68UIw":"let characteristics = {\r\n \"ws\" : 15,\r\n \"bs\" : 10,\r\n \"s\" : 10,\r\n \"t\" : 15,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Intimidate\", \"Commandement\" , \"Perception\"]\r\nlet skillAdvancements = [10, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Drilled\", \"Menaçant\", \"Robust\"]\r\nlet trappings = [\"Arme simple\", \"Mail Coat\", \"Mail Chausses\"]\r\nlet specialItems = [ \r\n] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Ne peut saisir ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\r\nthis.actor.modifyWounds(healed)\r\nthis.script.scriptMessage(`Soins de ${healed} Blessures`)","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\r\n\r\nlet loc = \"body\"\r\n\r\nlet APatLoc = this.actor.system.status.armour[loc];\r\n\r\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\r\n\r\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n\r\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\r\n\r\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\nmsg += ` (ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`\r\nthis.script.scriptMessage(msg)\r\n\r\nlet test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n\tthis.actor.addCondition(\"stunned\");","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\r\n let data = item.toObject();\r\n if (this.item.system.location.key == \"rLeg\")\r\n {\r\n data.system.location.value = \"Pied droit\"\r\n\t data.system.location.key = \"rToe\";\r\n }\r\n else if (this.item.system.location.key == \"lLeg\")\r\n {\r\n data.system.location.value = \"Pied gauche\"\r\n\tdata.system.location.key = \"lToe\";\r\n }\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}\r\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1LDSzXeO5CzXgTOc":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) || args.skill?.name == `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\r\nawait test.roll()\r\nif (test.succeeded)\r\n{\r\n this.effect.delete();\r\n}\r\n","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\", 3)\r\n }\r\n})","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n}\r\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\r\n args.data.damage -= 1","1wKVvxRTHOyV4Qdv":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Sail\"))","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choisir une localisation\");\r\n\r\nlet location = choice[0].id;\r\n\r\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\r\n\r\nif (itemTargeted)\r\n{\r\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\r\n}","1yOvw74jzFfaI87b":"return args.options.reload\r\n","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gain d'un état Assomé\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}\r\n\r\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\r\n{\r\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\r\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\r\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Dos\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\r\nargs.item.system.damage.value += `+${sl}`;","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Vide !\", \"error\")\r\n}","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\r\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\r\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = this.item.specifier;\r\n if (!value)\r\n {\r\n value = await ValueDialog.create({text : \"Enter Armour value\", title : this.effect.name});\r\n }\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value, name : this.item.baseName});\r\n }\r\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\r\n\treturn true;\r\n\r\nif (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Impossible d'Esquiver!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\r\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\r\n ui.notifications.notify(`${this.effect.name}: Gain de ${this.item.Advances} Avantages`)\r\n this.actor.setAdvantage(this.item.Advances)\r\n }\r\n}","2sDH6RvoOAR40oqH":"\r\n\r\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\r\n await test.roll();\r\n if (test.failed) {\r\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\r\n }\r\n}\r\n\r\n// Since wounds change when the effect is deleted, need to wait until after \r\n// the max wounds have been recalculated to apply damage\r\ngame.wfrp4e.utility.sleep(1000).then(async () => {\r\n let roll = await new Roll(\"1d10\").roll();\r\n\r\n roll.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\r\n\r\n})","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\r\n {\r\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\r\n }\r\n} ","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\r\nif (!currentCareer)\r\n{\r\n return;\r\n}\r\n\r\nlet talents = [\"Harmonisation Aethyrique\",\r\n\"Magie des Arcanes (Domaine)\",\r\n\"Magie du Chaos (Tzeentch)\",\r\n\"Mains agiles\",\r\n\"Diction Instinctive\",\r\n\"Sens de la Magie\",\r\n\"Magie Mineure\",\r\n\"Seconde Vue\",\r\n\"Mage de guerre\",\r\n\"Sorcier!\"].filter(t => !currentCareer.system.talents.includes(t))\r\n\r\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2W9uMTT6iJhfQ044":"let skill = `${game.i18n.localize(\"NAME.Trade\")} (${this.item.parenthesesText})`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.concat(currentCareer.system.addedSkills).includes(skill);\r\nlet craftsmanAdded = this.actor.getFlag(\"wfrp4e\", \"craftsmanAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\tcraftsmanAdded[skill] = true;\r\n\tcurrentCareer.system.addedSkills.push(skill);\r\n\tfoundry.utils.setProperty(this.actor, \"flags.wfrp4e.craftsmanAdded\", craftsmanAdded)\r\n}","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\r\n{\r\n args.bleedingHand = true;\r\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\r\n if (!success)\r\n {\r\n args.abort = true;\r\n }\r\n}","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name = data.name += \" (Ouïe)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\r\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\r\nif (wounds.value == 0)\r\n return this.script.scriptNotification(\"Aucun effet à 0 Blessures\", \"error\")\r\n\r\nthis.script.scriptNotification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\r\n}","33US8YRgaMqYu2We":"return !args.options.handling","37UN17gb8suFeZIW":"this.script.scriptMessage(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\r\nargs.actor.system.details.price.gc *= 1.1;","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\r\n}","3eSaX0BeaUalNkEP":"return args.options.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3hfMQkUKYI4rCuBy":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\r\nif (fatigue)\r\n{\r\n this.script.scriptNotification(\"Suppression de l'état Fatigué, effet désactivé.\")\r\n this.effect.update({disabled : true})\r\n await this.actor.removeCondition(\"fatigued\")\r\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choisissez Location\");\r\nif (choice[0])\r\n{\r\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\r\n}\r\n\r\nlet location = choice[0].id;\r\n\r\nif ([\"lArm\", \"rArm\"].includes(location))\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nif (location == \"body\")\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"prone\");\r\n }\r\n}\r\n\r\nif (location == \"head\")\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\");\r\n }\r\n}","3jm0NoYpgB6ZuUSl":"args.options.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.scriptMessage(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\nthis.actor.addCondition(\"ablaze\");","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\r\n}\r\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\r\nawait args.actor.addCondition(\"prone\")","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\r\n\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\r\n\r\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\r\n{\r\n args.item.qualities.value.push({name : \"penetrating\"})\r\n args.item.qualities.value.push({name : \"impale\"})\r\n}","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\r\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\r\nif (smoothing)\r\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\r\n this.script.scriptMessage(`${this.actor.name} perd 1 point de ${game.wfrp4e.config.characteristics[char]}`)\r\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\r\n }\r\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\r\n \"ws\" : 25,\r\n \"bs\" : 10,\r\n \"s\" : 15,\r\n \"t\" : 15,\r\n \"i\" : 25,\r\n \"ag\" : 20,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 25,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Calme\", \"Esquive\", \"Intimidate\", \"Intuition\", \"Commandement\" , \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\r\nlet trappings = [\"Arme simple\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","4OlwxU60UqKg81yb":"const target = args.actor;\r\n\r\nif (target.has(\"Ethereal\") || target.has(\"Corruption\")) {\r\n args.totalWoundLoss += 6;\r\n args.modifiers.other.push({label: this.effect.name, value: 6})\r\n}","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4pQW4WLyhjbZR85k":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gain d'un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += 5;\r\n args.modifiers.other.push({label : this.effect.name, value : 5})\r\n }\r\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\r\nawait args.actor.addCondition(\"entangled\")","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"bleeding\");\r\n}\r\n","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \r\n this.effect.delete();","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4ylzjgUdHY5D0yVh":"let characteristics = {\r\n \"ws\" : 25,\r\n \"bs\" : 10,\r\n \"s\" : 15,\r\n \"t\" : 15,\r\n \"i\" : 25,\r\n \"ag\" : 20,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 25,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Calme\", \"Esquive\", \"Intimidate\", \"Intuition\", \"Langue (Battle)\", \"Commandement\" , \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [15, 15, 15, 15, 10, 15, 10, 10]\r\n\r\nlet talents = [\"Combat Aware\", \"Combat Master\", \"Combat Reflexes\", \"Inspiring\", \"Resolute\", \"War Leader\"]\r\nlet trappings = [\"Arme simple\", \"Shield\", \"Plate Breastplate\", \"Plate Bracers\", \"Plate Helm\", \"Plate Leggings\"]\r\nlet specialItems = [] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nlet filters = [\r\n {\r\n property : \"type\",\r\n value : \"weapon\"\r\n },\r\n {\r\n property : \"system.weaponGroup.value\",\r\n value : [\"twohanded\", \"polearm\"]\r\n }\r\n]\r\n\r\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, \"Choisissez an appropriate Polearm or Two-Handed Weapon\"))\r\n\r\nlet ride = await Dialog.confirm({title : \"Skill\", content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\r\n\r\nif (ride)\r\n{\r\n let skill = await game.wfrp4e.utility.findSkill(\"Ride (Horse)\")\r\n skill = skill.toObject();\r\n skill.system.advances.value = 20;\r\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","4ZR7p8G3OzOBWx0L":"return args.skill?.name !== game.i18n.localize(\"NAME.Endurance\");","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\r\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","52mwb33mGrQjq89B":"return args.skill?.name != game.i18n.localize(\"NAME.Research\");","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\r\nlet damage = args.totalWoundLoss;\r\nlet tb = sourceActor.system.characteristics.t.bonus\r\nargs.abort = `${this.effect.name}: Dommages appliqués à ${sourceActor.name}`;\r\n\r\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\r\n\r\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\r\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\r\n this.script.scriptMessage(`1 Point de Fortune volé à ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","5dR7Erj3nwsxLAV7":"let characteristics = {\r\n \"ws\" : 35,\r\n \"bs\" : 10,\r\n \"s\" : 25,\r\n \"t\" : 30,\r\n \"i\" : 30,\r\n \"ag\" : 25,\r\n \"dex\" : 0,\r\n \"int\" : 15,\r\n \"wp\" : 35,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Calme\", \"Esquive\", \"Intimidate\", \"Intuition\", \"Commandement\" , \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Chance\", \"Resolute\", \"Unshakable\", \"War Leader\"]\r\nlet trappings = [\"Arme simple\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","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;","5JvKJZPcd6Hz5zvn":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 20,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 15,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Calme\", \"Esquive\", \"Intimidate\", \"Commandement\" ]\r\nlet skillAdvancements = [15, 15, 10, 5]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\r\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Arme simple\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = this.effect.name + \" \" + updateObj.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","5JWC0l3JEpOsqbR9":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Esquive\", \"Perception\"]\r\nlet skillAdvancements = [10, 10]\r\nlet talents = [\"Flee!\", \"Marksman\"]\r\nlet trappings = [\"Arme simple\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.successBonus += 1\r\n}\r\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.modifier -= 10;\r\n}","5LdJCKfQem1AQK24":"\r\nif (!args.flags.howlingWarpGale)\r\n{\r\n args.fields.modifier -= 10;\r\n args.flags.howlingWarpGale = true; // prevent double application\r\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += ` (Suivants de Tzeentch)`;\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\nanimosity.system.specification.value = \"Suivants de Nurgle\";\r\n\r\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nlet mutations = [];\r\nlet msg = `Mutations acquises
`\r\nfor(let i = 0; i < roll.total; i++)\r\n{\r\n let item;\r\n let uuid;\r\n let result;\r\n if (i % 2 == 0)\r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n else \r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n msg += `@UUID[${uuid}]{${item.name}}
`\r\n mutations.push(item.toObject());\r\n }\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\r\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5ScjIdRUOxblHdWS":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","5sI9iYh5j2nx2XyT":"return !([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\n\r\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\r\nlet selectedCrew = [];\r\n\r\nwhile (selectedCrew.length < rating && crewList.length) {\r\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\r\n} \r\n\r\nfor (let member of selectedCrew) {\r\n let actor = game.actors.get(member.id);\r\n actor.applyBasicDamage(9, {\r\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \r\n minimumOne: true, \r\n loc: \"roll\", \r\n suppressMsg: false, \r\n hideDSN: false \r\n });\r\n}","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\r\n\r\nif (!visor)\r\n args.fields.modifier -= 10;\r\nelse\r\n args.fields.modifier -= 20;","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\r\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\r\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} DR`)\r\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasColdBlooded = this.actor.has(\"A Sang Froid\")\r\nif (hasColdBlooded === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} reçoit le Trait de Créatuer A Sang Froid et peut inverser n'importe quel test de Force Mentale échoué.
\r\nSi 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é).
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.Utiliser Ward fourni par ${this.effect.name}?`,\r\n\tbuttons : {\r\n\t\tyes : {\r\n\t\t\tlabel : \"Yes\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tno : {\r\n\t\t\tlabel: \"No\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n})\r\n\r\nif (useWard)\r\n\targs.ward = 9;","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\r\n{\r\n await this.actor.modifyAdvantage(-2);\r\n this.script.scriptNotification(\"Avvantage soustrait\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.effect.delete();\r\n}","6oSs8qKFNFz2lSmh":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value = 0;\r\n","6qJP0hpShEM43ohx":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Océans)\")) {\r\n const loreTest = await actor.setupSkill('Savoir (Océans)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} reconnaît l'attrait du Léviathan.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Calme', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} devien @Condition[Assommé] par cette vision.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"stunned\");\r\n}","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Régénération')\r\n\r\nif (regenerate)\r\n{\r\n let effect = regenerate.effects.contents[0]\r\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\r\n \r\n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\r\n}","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"ablaze\")","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nitem = item.toObject()\r\n\r\nitem.system.specification.value = 10;\r\nitem.name += \" (Feu)\"\r\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\r\n\r\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create({text : \"Enter Spellcasting Lore\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.magicLores));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\r\n{\r\n\tthis.script.scriptNotification(\"Impossible de mettre à jour la Fortune\");\r\n\tdelete args.data.system.status.wounds.value;\r\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n}\r\nelse if (args.test.isFumble && roll != 1)\r\n{\r\n args.test.result.other.push(\"Résultat du Raté: \" + roll)\r\n}\r\n\r\n","715G1Bf0haOHvmYQ":"return !(args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")))","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7ateEtT5HXg1vObY":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\r\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Corps à corps (Base)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","7e8FgQUF2oANANmx":"return args.skill?.name == \"Corps à corps (Bagarre)\" || args.item?.weaponGroup?.value == \"brawling\"","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\r\n{\r\n ValueDialog.create({text : \"Enter Wounds Lost to gain SL\", title : this.effect.name}, \"0\").then(async value => {\r\n value = Math.clamped(value, 0, 3)\r\n if (value == 0)\r\n {\r\n return; \r\n }\r\n else if (Number.isNumeric(value))\r\n {\r\n this.script.notification(`Lost ${value} Wounds`)\r\n this.actor.modifyWounds(-1 * value)\r\n await this.item.system.toggleEquip();\r\n args.test.addSL(value);\r\n args.test.preData.other.push(`${this.effect.name}: +${value} SL`)\r\n }\r\n })\r\n}","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\r\n args.prefillModifiers.modifier += 10; \r\n\r\n\r\nargs.prefillModifiers.successBonus += 1; \r\n","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) \r\n{ \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} porte le ${this.item.name}.
\r\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 moderate}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Utilisé)\"})\r\n this.script.scriptMessage(`${this.item.name} 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.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7OmrMjaU48o2FEZi":"\r\nthis.actor.characteristics.t.bonus = 10\r\n\r\nthis.actor.details.move.value = 0;\r\nthis.actor.details.move.walk= 0;\r\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"fatigued\")\r\n} ","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\r\nlet match = result.text.match(/b>([^<]+)/i);\r\nlet key = match[1];\r\nlet roll = new Roll(\"5d10\");\r\nlet value = undefined;\r\n\r\nawait this.script.scriptMessage(result.text, {flavor: result.title});\r\n\r\nswitch (key) {\r\n case 'Stromfels Triumphant!':\r\n value = 0;\r\n break;\r\n case 'Stromfels Ascends!':\r\n await roll.evaluate();\r\n if (this.actor.system.status.mood.value > 0)\r\n value = -roll.total;\r\n else if (this.actor.system.status.mood.value < 0)\r\n value = roll.total;\r\n break;\r\n case 'No effect.':\r\n break;\r\n case 'Manann Provoked!':\r\n await roll.evaluate();\r\n value = -roll.total;\r\n break;\r\n}\r\n\r\nif (roll._evaluated)\r\n await roll.toMessage();\r\n\r\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasPainless = this.actor.has(\"Insensible à la douleur\");\r\nif (hasPainless === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(\r\n `
${this.actor.prototypeToken.name} 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.
\r\nNotez 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.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\r\n}","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptNotification(`Suppression de ${poisoned.conditionValue} états Empoisonné`)\r\n poisoned.delete(); \r\n}\r\nelse\r\n this.script.scriptNotification(`Aucun état Empoisonné`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Revendiquer le Bonus de ${this.effect.name} `);","84IB8CWa55XzoAkv":"return ([\"Soin aux animaux\", \"Emprise sur les animaux\"].includes(args.item?.name) || args.item?.name.includes(\"Chevaucher\") || args.item?.name.includes(\"Dressage\"))","86ivOsBQAuu0UmFg":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\");\r\n}","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\r\n\r\nif (APIgnored)\r\n{\r\n args.modifiers.ap.ignored += APIgnored\r\n args.modifiers.ap.details.push(`${this.effect.name}: Ignorer les PA avec des Points Faibles (${APIgnored})`)\r\n}","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\nif (!this.actor.has(\"Mort-vivant\") && !this.actor.has(\"Démoniaque\")) \r\n{\r\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 => {\r\n await test.roll();\r\n if (test.failed) {\r\n this.actor.update({ \"system.characteristics.s.initial\": this.actor.system.characteristics.s.initial - strLoss, \"system.characteristics.t.initial\": this.actor.system.characteristics.t.initial - tghLoss })\r\n }\r\n })\r\n\r\n}\r\nelse {\r\n this.script.scriptNotification(`${this.actor.name} est immunisé à ${this.effect.name}`)\r\n}\r\n","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\r\nlet types = {\r\n none : \"Aucun\",\r\n cold : \"Froid\",\r\n corrosion : \"Corrosion\",\r\n fire : \"Feu\",\r\n electricity : \"Electricité\",\r\n poison : \"Poison\",\r\n smoke : \"Fumée\",\r\n various : \"Divers\"\r\n}\r\nif (!type)\r\n{\r\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choisir le Souffle\"))[0]?.id;\r\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\r\n}\r\n\r\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\r\n{\r\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\r\n}","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier += 10;\r\n}\r\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier -= 10;\r\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8N3Uqjq1ZxPxo4pk":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Lore\"))","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\r\nargs.item.system.qualities.value.push({name : \"impact\"})\r\n","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\r\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\r\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\r\nif (caster)\r\n{\r\n let healed= caster.characteristics.wp.bonus\r\n this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regagne ${healed} Blessures`)\r\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","8TRiAJ8thIKE4IoL":"\r\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\r\n\r\nargs.actor.characteristics.i.modifier += 10 * SL\r\nargs.actor.characteristics.ag.modifier += 10 * SL","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\r\n\r\nif (weakpointsAP > 0)\r\n{\r\n args.modifiers.ap.ignored += weakpointsAP;\r\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore les Points Faibles (${weakpointsAP})`);\r\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Range)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\r\n }\r\n}","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\r\nitem.system.specification.value = 1;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8xqYrBIf1Zhlwizg":"const repaired_message = `Finished raisint the anchor.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'vhard';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\r\nthis.actor.characteristics.int.value= \"-\"\r\nthis.actor.characteristics.wp.value= \"-\"\r\nthis.actor.characteristics.fel.value = \"-\"","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n this.actor.addCondition(\"stunned\") \r\n}\r\nelse if (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\", 2);\r\n}","8zTkDVziBPaNbMQX":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await ItemDialog.createFromFilters(filters, 6, \"Choisissez 6 Sorts de Magie Mineure\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await ItemDialog.createFromFilters(filters, 9, \"Choisissez 9 Sorts de Magie d'Arcane\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\r\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\r\n return\r\n\r\nif (args.test.characteristicKey == \"wp\")\r\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\r\n let data = item.toObject();\r\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\r\n data.system.description.value += \"Ce Talent s'applique également à tout objet métallique à cause de l'Affinité Metallique
\"\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n})","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptNotification(\"Subi une Blessure Purulente\")\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Evite une Blessure Purulente\")\r\n}\r\n","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\r\nargs.actor.system.details.price.gc *= 1.1;","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name += ` (Odorat)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\r\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.name += ` (Si Charge)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\r\n\tthis.script.scriptNotification(\"Applique après les effets\");\r\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.name += \" (Aucun PA)\"\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\r\n","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"\", true);\r\ncareers.forEach(c => {\r\n if (!c.id)\r\n {\r\n c.id = c._id;\r\n }\r\n});\r\nlet choice = await ItemDialog.create(careers, 1, \"Choisissez la carrière de votre double identité\");\r\nif (choice[0])\r\n{\r\n let career = await fromUuid(choice[0].uuid);\r\n let data = career.toObject();\r\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\r\n}\r\n","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\r\n{\r\n this.script.scriptMessage(`Reçoit ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (args.test.failed && this.actor.type == \"character\")\r\n {\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\r\n }\r\n}","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","A1odAcuRbq9797ZB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Polearm)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nAppliquer les dommages de ${this.effect.name} à l'attquant?`,\r\n buttons: {\r\n yes: {\r\n label: \"Oui\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"Non\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\r\n }\r\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\r\n{\r\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\r\n\tif (args.wardRoll >= args.ward && args.ward > 3)\r\n {\r\n let newWard = Math.max(3, args.ward - 1)\r\n this.script.scriptMessage(\"Protection améliorée de \" + newWard)\r\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\r\n }\r\n\r\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n\r\n\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","ClkT2WG2UjVwQ97T":"if (args.actor.has(\"Démoniaque\")) {\r\n args.totalWoundLoss += 3;\r\n args.modifiers.other.push({label: this.effect.name, value: 3});\r\n}\r\n\r\nlet test = await args.actor.setupSkill(\"Endurance\", {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n characteristic: 't',\r\n context: {\r\n failure: \"Received 1 Blinded Condition\"\r\n }\r\n});\r\nawait test.roll();\r\n\r\nif (test.failed) {\r\n args.actor.addCondition(\"blinded\");\r\n}","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\r\n\r\nlet lostFingers = this.actor.flags.useless[key] || 0;\r\n\r\nlostFingers += 1\r\n\r\nthis.actor.flags.useless[key] = lostFingers;\r\n\r\nif (lostFingers >= 4)\r\n{\r\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\r\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\r\n{\r\n if (effect.isCondition)\r\n {\r\n effect.delete();\r\n }\r\n}","cqYgZQk1C3kMARy5":"return args.skill?.name !== game.i18n.localize(\"NAME.Haggle\");","CS6O7UUjQcUJoOUP":"if (args.test.failed) {\r\n let SL = Number(args.test.result.SL)\r\n if (SL <= -2 && SL > -4)\r\n this.actor.addCondition(\"stunned\")\r\n else if (SL <= -4 && SL > -6)\r\n this.script.scriptMessage(this.actor.prototypeToken.name + \" doit réaliser un Test de Force Mentale= 3)\r\n{\r\n this.actor.modifyAdvantage(-3);\r\n this.script.scriptNotification(\"Avantage soustrait\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Exposition Mineure à la Corruption}`\r\n )\r\n this.script.scriptMessage(`${this.effect.name}: \r\n @Corruption[moderate]{Exposition moderate à la Corruption}
\r\n ${args.actor.prototypeToken.name} doit réussir un \r\n Test de Corruption (moderat)`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value -=2\r\n if (args.item.cn.value < 0)\r\n args.item.cn.value = 0\r\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\r\nthis.actor.characteristics.i.bonus = 1;\r\n\r\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\r\n{\r\n skill.system.total.value= Math.min(skill.system.total.value, 10)\r\n}","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\r\n\r\n","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dAMtbn3uQwF8KpKU":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\");","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\r\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\r\nconsole.log(this.actor);\r\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\r\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\n\r\nsense.name += \" (Vue)\";\r\nsense.system.tests.value = sense.system.tests.value.replace(\"Sens\", \"Vue\")\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\r\n}","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\r\n\r\nthis.actor.update({\"system.status.fate.value\" : current + 1})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses Points de Destin augmentés de ${current} à ${current + 1}`)","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","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)\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - En Flammes`})\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Métier (Apothicaire)\" || args.skill?.name == \"Métier (Alchimiste)\"","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\r\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","dIxYt421K010eogY":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"moderat\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.ag.value\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\r\n{\r\n return\r\n}\r\n\r\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\ntooth = tooth.toObject()\r\ntooth.system.specification.value = 3\r\ntooth.system.qualities.value = [{name : \"magical\"}]\r\n \r\nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nclaw = claw.toObject()\r\nclaw.system.specification.value = 4\r\nclaw.system.qualities.value = [{name : \"magical\"}]\r\nclaw.name = \"Claw\"\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n args.abort = \"Raté - Sans tête\"\r\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Ribs\";\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create({text : \"Select the column to roll on to determine Beast Head\", title : \"Select Column\"}, \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\r\n\r\nif (column)\r\n{\r\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\r\n this.script.message(`${result.title}
${result.result}`);\r\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n let item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n this.item.delete();\r\n }\r\n}","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\r\n{\r\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\r\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n fatigued.system.scriptData = fatigued.system.scriptData.filter(s => s.trigger != \"dialog\")\r\n fatigued.system._scripts = null;\r\n}","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"blinded\");\r\n await this.actor.addCondition(\"fatigued\")\r\n} ","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dsXGavzXLerXR8Xg":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\"))","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\r\n args.fields.slBonus += 2;\r\nelse\r\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Corps à corps (Base)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","dULCkRxtisuzQyuK":"if (args.options.condition) \r\n this.effect.delete();","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athlétisme\"","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \r\n{\r\n\tlet roll = await new Roll(\"1d10\").roll()\r\n\tawait roll.toMessage(this.script.getChatData());\r\n\tif (roll.total == 9 || roll.total == 10)\r\n\t{\r\n\t this.script.scriptMessage(`${this.actor.name} attaché à ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} tombe.`)\r\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \r\n\t}\r\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\r\n\r\nthis.item.updateSource({\"system.location.key\" : letter + \"Doigt\"})\r\n\r\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\r\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\r\n let roll1 = new Roll(injury.system.duration.value)\r\n await roll1.roll()\r\n let days = roll1.total\r\n let num = 1 + Number(this.effect.sourceTest.result.SL);\r\n let roll = await new Roll(num + 'd10').roll()\r\n await roll.toMessage(this.script.getChatData())\r\n let newDays = Math.max(days - roll.total, 1)\r\n this.actor.updateEmbeddedDocuments(\"Item\", [{ _id: injury.id, 'system.duration.value': newDays }])\r\n let message = \"Blessures réduites à \" + newDays + \" (-\" + roll.total + \") au lieu de \" + days\r\n this.script.scriptMessage(message)\r\n}\r\n","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Corps à corps (Bagarre)\" && args.item?.weaponGroup?.value != \"brawling\"","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n await this.actor.addCondition(\"broken\");\r\n}","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\r\n}","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\r\n args.actor.addCondition(\"unconscious\");\r\n}","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\r\n\r\nawait args.actor.addCondition(\"ablaze\", 2);\r\nawait args.actor.addCondition(\"prone\");","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\r\n{\r\n return this.script.scriptNotification(\"Pas assez d'Avantages!\", \"error\")\r\n}\r\n\r\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\r\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\r\n\r\nif (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.script.scriptNotification(`Ajout de ${frenzy.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\r\n}\r\nelse if (this.actor.system.status.advantage.value >= 1)\r\n{\r\n let data = hatred.toObject();\r\n data.system.specification.value = \"Combatants au corps à corps\"\r\n this.script.scriptNotification(`Ajout de ${hatred.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\r\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\r\n{\r\n blinded.delete()\r\n}","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n args.test.result.other.push(`${this.effect.name}: L'opposant perd ${Number(args.test.result.SL) + 1} Avantage`)\r\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n fatigued.delete();\r\n this.script.scriptNotification(\"Fatigue supprimée\")\r\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\n\r\nawait test.roll();","E6v4YZrvFikbdXoO":"const locations = [];\r\n\r\nfor (let [key, loc] of Object.entries(args.AP)) {\r\n if (loc.layers?.some(i => i.metal))\r\n locations.push(key);\r\n}\r\n\r\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} subit une @Table[crithead]{Blessure Critique} si il n'y en avait pas d'autres.`)\r\n}","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (this.item.system.location.key == \"rArm\")\r\n{\r\n\tdata.system.location.value = \"Main Droite\"\r\n\tdata.system.location.key = \"rHand\"\r\n}\r\nelse if (this.item.system.location.key == \"lArm\")\r\n{\r\n\tdata.system.location.value = \"Main Gauche\"\r\n\tdata.system.location.key = \"lHand\"\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","EBNrA6FNX4d05EUx":"return !args.options.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Savoir (Savoir)\")) {\r\n const loreTest = await actor.setupSkill('Savoir (Savoir)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} reconnaît les leurres de Lurkerfis.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Calme', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} est devenu séduit par la vue et incapable d'effectuer aucune action sauf se diriger vers la lumière`);\r\n test.renderRollCard();\r\n actor.addCondition(\"unconscious\");\r\n}","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Céder ou Mourir!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.script.scriptNotification(\"Ajout de \" + data.name);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\r\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","EDAMEOzdBfkoKHxP":"return args.skill?.name !== game.i18n.localize(\"NAME.Navigation\");","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.script.scriptMessage(\"Peut effectuer une Action ou un Mouvement (en choisir un)\")\r\n}\r\nelse \r\n{\r\n this.script.scriptMessage(\"Ne peut pas effectuer d'Action ou de Mouvement ce round\") \r\n}","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\r\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\r\nif (trait && trait.name.includes(\"Morsure\") && woundLossEffect)\r\n{\r\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\r\n}","eGQAyzCFZAEQhyJl":"const roll = new Roll(\"2d10\");\r\nawait roll.evaluate();\r\nconst money = game.wfrp4e.market.addMoneyTo(this.actor, `${roll.total}b`);\r\nawait this.actor.updateEmbeddedDocuments(\"Item\", money);\r\nthis.script.message(game.i18n.format(\"SCRIPT.Silvertide\", {name: this.actor.name, pennies: roll.total}));","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\r\nlet data = item.toObject();\r\ndata.name += \" (Ennemi)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\r\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\r\nlet data = item.toObject();\r\ndata.name += \" (A déterminer)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\r\n{\r\n this.script.scriptNotification(\"Ajout de A Terre\");\r\n this.actor.addCondition(\"prone\")\r\n}","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\r\nuses++;\r\nthis.script.scriptNotification(`Utilisé ${uses} fois`)\r\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\r\nif (uses >= 3)\r\n{\r\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\r\n\tthis.script.scriptNotification(`Utilisé`);\r\n}\r\n","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Raté résultat: \" + roll)\r\n","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\r\nthis.script.scriptMessage(`Soigne ${this.actor.system.characteristics.t.bonus * 3} Blessures`)\r\n\r\nthis.actor.hasCondition(\"bleeding\")?.delete()\r\nthis.actor.hasCondition(\"fatigued\")?.delete()\r\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ePPgxQOqL1Uhz2k9":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Projectiles (Arc)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Bow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `
\r\n Ajouter une option?\r\n
\r\nRéparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\r\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\r\n let wp = caster.system.characteristics.wp.value\r\n if (wp > this.actor.system.characteristics.t.value) {\r\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\r\n this.actor.update({ \"system.status.wounds.value\": 0 })\r\n this.actor.addCondition(\"dead\")\r\n }\r\n else {\r\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\r\n ChatMessage.create({ content: `Ajout de Instable à ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\r\n })\r\n }\r\n }\r\n}","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Divertissement (Chant)\";","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.name = this.effect.name;\r\ndata.type = 'trapping';\r\ndata.system.trappingType = {value: 'clothingAccessories'};\r\ndata.system.equipped = {value: true};\r\n\r\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\r\neffectData.disabled = false;\r\neffectData.system.transferData.equipTransfer = true;\r\ndata.effects = [effectData];\r\n\r\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Chevaucher (Cheval)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 0,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n}\r\nlet skills = [game.i18n.localize(\"NAME.ConsumeAlcohol\"), game.i18n.localize(\"NAME.Row\"), game.i18n.localize(\"NAME.Sail\"), game.i18n.localize(\"NAME.Swim\")]\r\nlet skillAdvancements = [10, 10, 10, 10]\r\nlet talents = []\r\nlet trappings = []\r\nlet items = []\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","FYUPfYyTYZkxRLFT":"return ![\"NAME.Endurance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n this.script.scriptNotification(\"Ajout d'Hémorragie\")\r\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\r\nawait roll.toMessage(this.script.getChatData());\r\nthis.script.scriptNotification(`Soins de ${roll.total} Blessures`)\r\nthis.actor.corruptionDialog(\"moderate\")\r\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\r\nawait test.roll()\r\n// If they fail, they acquire 2 Poisoned Conditions. \r\nif (test.failed) \r\n{\r\n this.actor.addCondition(\"poisoned\", 2)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} reçoit 2 états @Condition[Empoisonné].
\r\nToute créature avec le Trait Bestial qui le mord et provoque des dégats ne le mordra pas à nouveau durant un combat, la créature pouvant toutefois attaquer avec d'autres méthodes si disponibles..
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\r\nelse if (test.succeeded) \r\n{\r\n // Don't attempt to add Corrosive Blood if actor already has it\r\n const hasCorrosiveBlood = this.actor.has(\"Sang corrosif\")\r\n if (hasCorrosiveBlood !== undefined) return \r\n\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n const duration = 3 + parseInt(test.result.SL)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} gagne le Trait Sang Corrosif pour ${duration} rounds.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Social Group)\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\") && !name.toLowerCase().includes(\"(any)\"))\r\n {\r\n let group = name.split(\"(\")[1].split(\")\")[0]\r\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\r\n }\r\n else\r\n {\r\n let value = await ValueDialog.create({text : \"Enter Etiquette Group\", title : this.effect.name});\r\n if (value)\r\n {\r\n name = `${name.split(\"(\")[0].trim()} (${value})`\r\n tests = this.item.system.tests.value.replace(\"Social Group\", value);\r\n }\r\n }\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \r\n// of the target point is splashed with mystic poison, \r\n// suffering 1d10 + SL damage which ignores Armour Points\r\n\r\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\r\n\r\nawait damage.toMessage(this.script.getChatData())\r\n\r\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\r\n damage.total,\r\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\r\n))\r\n\r\n// ... and gains the Poisoned Condition\r\n\r\nthis.actor.addCondition(\"poisoned\")","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\r\nargs.actor.addCondition(\"ablaze\", ablaze)","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\r\n amberTalons.name = \"Amber Talons\";\r\n amberTalons.img = this.effect.img;\r\n amberTalons.system.damage.value = \"SB + WPB\"\r\n amberTalons.system.equipped = true;\r\n amberTalons.system.qualities.value.push({name : \"magical\"})\r\n amberTalons.effects.push({\r\n name : \"Amber Talons\",\r\n transfer: false,\r\n img : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\r\n system: {\r\n transferData : {\r\n documentType : \"Item\"\r\n },\r\n scriptData : [{\r\n trigger : \"applyDamage\",\r\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\r\n }]\r\n }\r\n })\r\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[1].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Aucun restant!\", \"error\")\r\n}","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\r\n{\r\n \r\n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\r\n{\r\n\targs.fields.lostHand = true;\r\n\targs.fields.modifier += -20;\r\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","GbPEy22VuCNzlNv2":"return !this.actor.isMounted || (!args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) && !args.options.dodge)","Gc8S5TYlVdV8NnOT":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, context: { failure: \"Gained a Broken Condition\", success: \"Resisted the Broken Condition\" } })\r\n\r\n await test.roll();\r\n\r\n if (!test.succeeded)\r\n {\r\n args.actor.addCondition(\"broken\");\r\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\r\n{\r\n let removeRepeater = false\r\n if(!this.item.system.offhand.value) // main\r\n {\r\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\r\n if (offhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n else // offhand\r\n {\r\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\r\n if (mainhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n \r\n if (removeRepeater)\r\n {\r\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\r\n }\r\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\r\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\r\nawait test.roll();\r\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n this.actor.addCondition(\"fatigued\") \r\n })\r\n}","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\r\n args.actor.addCondition(\"ablaze\")","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\r\n\r\neffects.splice(effects.length - 1);\r\n\r\nif (effects.length == 0)\r\n{\r\n return this.script.scriptNotification(\"Tous les effets ont été utilisés. Les remettre à 0 pour les utiliser à nouveau\")\r\n}\r\nlet choice = await ItemDialog.create(effects, 1, \"Choisissez le Pouvoir à gagner\");\r\n\r\nif (choice[0])\r\n{\r\n choice[0].update({disabled : true})\r\n let effect = choice[0].convertToApplied();\r\n effect.name += ` (${this.effect.name})`\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\r\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\r\n{\r\n e.update({disabled: false})\r\n}\r\nthis.script.scriptNotification(\"Ré-initialiser les pouvoirs\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Discrétion (Souterrains)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create({text : \"Enter Venom Strength\", title : this.effect.name}, \"\", Object.values(game.wfrp4e.config.difficultyNames));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\r\n{\r\n args.item.system.AP.head = 0;\r\n}","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\r\n{\r\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\r\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\r\n\r\nif (value === 0)\r\n args.actor.system.status.mood.value = 0;\r\nelse if (value !== undefined)\r\n args.actor.system.status.mood.value += value;","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Effets secondaires`,fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData())\r\n if (roll.total <= 3)\r\n {\r\n this.actor.addCondition(\"blinded\", 3)\r\n }\r\n else if (roll.total <= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n else if (roll.total <= 9)\r\n {\r\n this.actor.addCondition(\"stunned\");\r\n }\r\n else if (roll.total == 10)\r\n {\r\n this.actor.addConditon(\"unconscious\")\r\n }\r\n}","goz8yTlMozlsz3uY":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\r\n args.test.preData.canReverse = true","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","gqZLfIr6svrtdwdC":"return args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\") && args.skill?.name != game.i18n.localize(\"NAME.MeleeBrawling\") && args.weapon?.system?.weaponGroup?.value != \"brawling\"","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData());\r\n if (roll.total == 9)\r\n {\r\n this.script.scriptMessage(`Deux @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Horreurs Bleues de Tzeentch} sortent de la chair hurlante de ${this.actor.name}, le tuant au passage.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\r\nif (turns <= 0) return;\r\nturns--;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\nconst target = canvas.scene.tokens.get(targetId);\r\n\r\nif (turns > 0) {\r\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\r\n\r\n return this.script.message(`${speaker.alias} continue de s'enrouler autour ${target.name}. Il pourra commencer à écraser dans ${turns} tours.
`);\r\n}\r\n\r\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\r\n this.script.message(`${speaker.alias} peut reprenre son écrasement ${target.name} avec le Test Etendu.
`);\r\n\r\n return;\r\n}\r\n\r\nconst extendedTestData = {\r\n name: this.effect.name,\r\n type: \"extendedTest\",\r\n img: this.effect.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target.actor.system.status.wounds.value\r\n },\r\n test: {\r\n value: 'Strength'\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: \"challenging\"\r\n }\r\n }\r\n};\r\n\r\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\nconst extendedTest = extendedTests[0];\r\n\r\nthis.script.message(`${speaker.alias} a fini de s'enrouler autour de ${target.name}. Il peut maintenant écraser via le Test Etendu @UUID[${extendedTest.uuid}].
`);\r\n\r\nlet effect = {\r\n name: extendedTest.name,\r\n img: extendedTest.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: extendedTest.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.effects.find(e => e.id === id);\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n this.script.message(\\`${speaker.alias} écrase ${target.name}. Le bateau et broyé, réduit à une masse de déchets flottants.
\\`);\r\n await effect.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n}\r\n\r\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","GsAyB5xnK3ASeoah":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\r\n game.dice3d?.showForRoll(roll);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\r\n","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\r\nargs.fields.slBonus -= specification;","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Gained a Poisoned Condition\", success: \"Resisted the poison\" }})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"poisoned\");\r\n }\r\n}\r\n ","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\r\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\r\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\r\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\r\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\r\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\r\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\r\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\r\n\r\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Sélectionner le Vent\")\r\n//this.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\r\n\r\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\r\n\r\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\r\nif (bleeding)\r\n{\r\n this.script.scriptNotification(`Suppression de ${bleeding.conditionValue} états Hémorragiques`)\r\n bleeding.delete(); \r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(`Aucune Hémorragie`)\r\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\r\n{\r\n args.test.options.criminal = true;\r\n let currentCareer = args.test.actor.system.currentCareer;\r\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\r\n if (coin != \"g\") // Don't roll for gold, just use standing value\r\n {\r\n dieAmount = dieAmount + \"d10\";\r\n }\r\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\r\n let moneyString = `${moneyEarned}${coin}`\r\n let transactionString = `${moneyEarned}${term}`\r\n\r\n this.script.scriptMessage(`Gain d'un supplément de ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\r\n{ \r\n args.test.result.description = \"Echech Stupéfiant\";\r\n args.test.result.outcome = \"failure\";\r\n ChatMessage.create({content : \"SQUEAK\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\r\n}","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\r\n\r\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\r\n\r\nthis.script.scriptMessage(`Affecté à ${args.actor.name}`)","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\r\n test.roll();\r\n})","h766UvswLCsxcMow":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : -15,\r\n \"t\" : 0,\r\n \"i\" : 20,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 5,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\r\nlet skillAdvancements = [7, 60, 7]\r\nlet talents = [\"Menaçant\", \"Ombres\"]\r\nlet traits = [\"Distracting\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\r\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Voile';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\r\nthis.script.scriptMessage(`Gaine de @Condition[Nausée] pour [[1d10]] heures`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Point de Corruption Point gagné\" } })\r\nawait test.roll();\r\n\r\nif (test.failed && args.actor.type == \"character\") \r\n{\r\n let msg = \"\"\r\n msg += `${this.actor.prototypeToken.name} gagne 1 Point de Corruption
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${args.actor.prototypeToken.name} gagne une mutation (@Table[expandedmutatephys]{Physique} ou @Table[expandedmutatemental]{Mentale}) et gagne @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Magie du Chaos (Tzeentch)}`\r\n }\r\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\r\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Corps à corps (Fléau)\")\r\n{\r\n args.item.system.modifier.value += 10;\r\n}","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\r\n\r\nwoundsGained = Math.floor(woundsGained / 2)\r\n\r\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\r\n\r\nthis.script.scriptMessage(`Récupération de ${woundsGained} Blessures`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gagne un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n this.script.scriptMessage(`Echec total: gain immédiat de 1 @Table[mutatemental]{Mutation Mentale}, et ne peut plus prendre d'Ambition à court-terme pour les [[1d10]] prochaines weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","HdTuY2IGhdlMDOy3":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Animal Telepathy\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \r\n// in melee combat must make an Average (+20) Endurance Test \r\n// or take a Stunned Condition\r\n\r\n\r\nif (args.totalWoundLoss > 1) {\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await args.actor.addCondition(\"stunned\");\r\n }\r\n}","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","HfZAQWoY8n3clLlo":"if (!args.itemCreated) return;\r\nif (args.itemCreated.type !== \"critical\") return;\r\nif (args.itemCreated.system.location.value.toLowerCase() !== \"head\") return;\r\nif (Number(args.itemCreated.system.wounds.value) > 0) {\r\n this.script.message(game.i18n.format(\"SCRIPT.Sallet\", {name: args.itemCreated.parent.name, wounds: args.itemCreated.system.wounds.value}))\r\n}","HG2fKOfruT5QV3A4":"let lore = await ValueDialog.create({text : \"Choisissez Lore\", title : \"Lore\"}, \"\", {\"fire\" : \"Feu\", \"death\" : \"Mort\", \"metal\" : \"Métal\", \"shadow\" : \"Ombres\"});\r\n\r\nlet filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await ItemDialog.createFromFilters(filters, 3, \"Choisissez 3 Sorts de Magie Mineure\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : [\"\"]\r\n }\r\n]\r\n\r\nlet arcane = await ItemDialog.createFromFilters(filters, 6, \"Choisissez 6 Sorts de Magie d'Arcane\")\r\n\r\nlet items = petty.map(i => i.toObject()).concat(arcane.map(i => {\r\n let spell = i.toObject();\r\n spell.img = `modules/wfrp4e-core/icons/spells/${lore}.png`\r\n spell.system.lore.value = lore;\r\n return spell;\r\n}));\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : 5,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Calme\", \"Esquive\"]\r\nlet skillAdvancements = [10, 10]\r\nlet talents = [\"Combat Reflexes\"]\r\nlet trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\r\nlet items = []\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([warhammer.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), warhammer.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\r\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisissez a Skill\")\r\n\r\n items = items.map(i => i.toObject())\r\n items.forEach(i => i.system.advances.value = 20)\r\n\r\nitems.forEach(i => i.system.equipped.value = true;)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\r\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\r\n{\r\n\treturn;\r\n}\r\n\r\nlet index = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(index, 1, \"Choisir un Savoir\")\r\nlet text;\r\nif (!choice[0])\r\n{\r\n let custom = await Dialog.wait({\r\n title : \"Saisir le savoir\",\r\n content : \"\",\r\n buttons : {\r\n confirm : {\r\n label : game.i18n.localize(\"Confirmer\"),\r\n callback : (dlg) => {\r\n return dlg.find(\"input\")[0].value\r\n }\r\n }\r\n },\r\n default : \"confirm\",\r\n close : () => {\r\n return \"\"\r\n }\r\n }) \r\n text = custom || \"\"\r\n}\r\nelse \r\n{\r\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\r\n}\r\n\r\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\r\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptNotification(\"Ajout Hémorragique\")\r\n}","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} perd 1 Blessure.\r\n Select your choice\r\n
\r\n${item.name} PA divisé par 2
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ht7csu1KImHzpzL5":"return args.item?.actor?.type !== \"vehicle\" || args.item?.type !== \"weapon\" || !args.item.name.includes(\"Cannon\");","huJcVpVn6Q7sQkFC":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 1;\r\n","HUKzssLxeQo1wbx9":"\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, appendTitle: \" - - Blessé\" })\r\nawait test.roll();\r\nif (test.failed) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gain de \" + disease.name)\r\n })\r\n}\r\n","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n this.actor.addCondition(\"bleeding\")","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Duration)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\r\n }\r\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let damage = this.effect.sourceTest.result.damage\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n}","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\r\n{\r\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\r\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\r\n{\r\n\tgame.wfrp4e.utility.sleep(200).then(() => {\r\n\t\tthis.script.scriptMessage(\"Peut effectuer un jet sur the @Table[crithead]{Coups Critiques à la Tête} au lieu de la localisation normale\")\r\n\r\n\t})\r\n}","HYrl5aNMm8BAdqH7":"\r\nlet modifier = 0\r\nif (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\nelse\r\n modifier = -10\r\nargs.fields.modifier += modifier\r\n","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\r\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Impossible d'incanter un Sort ou d'utiliser un Prière\");\r\n}\r\nelse return true;","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Ajout les PA Métalliques aux Dommages\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore le métal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","I9QAPKbaXwMMMBT4":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\r\n await secondTest.roll();\r\n if(secondTest.failed)\r\n {\r\n this.effect.updateSource({name : \"Taste of Death\"})\r\n await this.actor.addCondition(\"fatigued\");\r\n }\r\n else \r\n {\r\n return false;\r\n }\r\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.addSystemEffect(\"convulsions\")\r\n this.script.scriptMessage(`Test de Force Mentale échoué, ${this.actor.prototypeToken.name} subit des @Symptom[Convulsions] pour [[1d10]] heures`)\r\n }\r\n}","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif(test.failed)\r\n{\r\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\r\n}","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\tthis.script.scriptNotification(\"Immunisé à la Peur\");\r\n\targs.extendedTest.delete();\r\n\targs.abort = true;\r\n}\r\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyFear(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postFear(value, name)\r\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.s.bonus\r\ndata.system.description.value = \"\"\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 1\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\r\n}","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\r\n return\r\n\r\nlet reach = args.item.reach.value\r\nlet reachNum = game.wfrp4e.config.reachNum[reach]\r\nreachNum = Math.min(reachNum + 2, 7)\r\n\r\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\r\n\r\nargs.item.reach.value = key","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Crochetage\", \"Escamotage\", \"Focalisation (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\r\n// or the state of being Stinking Drunk are eliminated. \r\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\r\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\r\n\r\n// The drinker is thereafter Fatigued \r\n// for a number of hours equal to 10 minus their Toughness Bonus — \r\n// nothing but time and rest can eliminate this penalty.\r\nawait this.actor.addCondition(\"fatigued\")\r\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\r\nthis.effect.updateSource({\"duration.rounds\" : duration});\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} ne souffre des pénalités dues à l'alcool et reçoit 1 état Fatigué pour ${duration} heures.
`, \r\n{\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n}) ","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\r\n\r\nthis.script.scriptMessage(`this.actor.prototypeToken.name Guérison de ${healed} Blessures`);\r\n\r\nthis.actor.modifyWounds(healed)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n let spells = this.actor.itemTypes.spell;\r\n if (spells.length)\r\n {\r\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\r\n this.script.scriptMessage(`Ne se rappelle plus du sort ${chosen.name}`)\r\n chosen.update({name : chosen.name += \" (LOST)\"})\r\n }\r\n}\r\n\r\n\r\n","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Magie des Arcanes (Feu)\"))\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\r\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\r\n let staunch = ~~args.test.result.SL + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n args.test.result.other.push(`${this.actor.name} supprime ${staunch} Etats Hémorragiques du patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\r\n args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\r\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 2;\r\n","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 3\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\r\n{\r\n\targs.flags.amputatedFootOrLeg= true;\r\n\targs.fields.modifier -= 20;\r\n}","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\r\n{\r\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\r\n}","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Esquive\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n await this.actor.addCondition(\"grappling\")\r\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\r\nfor (let i=0; iCependant, une fois qu’ils s’endorment, c’est presque impossible. À ce stade, la victime doit effectuer un test d'Endurance difficile (-20). S'il échoue, il ne se réveille jamais.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\r\nif (this.actor.flags.holed.reminded === true) return;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nthis.script.scriptMessage(`${speaker.alias} tombe lourdements dans l'eau. A moins que la cargaison soit étanche, elle perd [[d10]]% de sa valeur.
`);\r\n\r\nthis.actor.flags.holed.reminded = true;","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\r\n{\r\n this.actor.removeCondition(\"broken\")\r\n this.script.scriptNotification(`Impossible de supprimer l'état Brisé`);\r\n}","iT0h3VZLEBQnn5Bx":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\") && args.skill?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\");","iT3C15fMyQrj1RmG":"if (this.actor.has(\"Mort-vivant\") && this.actor.has(\"Ethereal\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n this.actor.addCondition(\"stunned\")\r\n })\r\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\r\n\r\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\r\n{\r\n return;\r\n}\r\n\r\nlet god = await ValueDialog.create({text : \"Enter a Deity\", title : \"Blessed\"})\r\n\r\nif (god)\r\n{\r\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Loading Prayers\")\r\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\r\n let godBlessings = game.wfrp4e.config.godBlessings[god.toLowerCase()] || [];\r\n if (god == \"Old Faith\")\r\n {\r\n blessings = await ItemDialog.create(prayers.filter(i => i.system.type.value == \"blessing\"), 6, {text : \"Select any 6 Blessings\", title : \"Blessed\"})\r\n }\r\n if (godBlessings.length)\r\n {\r\n blessings = blessings.concat(await Promise.all(godBlessings.filter(bls => !(blessings.map(i => i.uuid).includes(bls.uuid))).map(fromUuid)));\r\n }\r\n if (blessings.length)\r\n {\r\n this.script.notification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\r\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\r\n }\r\n else \r\n {\r\n this.script.notification(`Impossible de trouver any Blessings associated with ${god}.`)\r\n }\r\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\r\n await this.actor.update({\"system.details.god.value\": god})\r\n}","iuSoKntfJ4eAPafQ":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\");\r\nspells = spells.filter(s => [\"feu\", \"cieux\", \"bêtes\", \"ombres\", \"lumière\", \"vie\", \"mort\", \"métal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choisir un sort\");\r\nif (choice[0])\r\n{\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\r\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\r\n\r\nif (result.object.documentId && result.object.documentCollection)\r\n{\r\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\r\n if (item)\r\n { \r\n let data = item.toObject();\r\n // Some items need sourceTest for their effects\r\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\r\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\r\n }\r\n}\r\n\r\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.concat(currentCareer.system.addedSkills).includes(skill);\r\nlet witchAdded = actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\twitchAdded[skill] = true;\r\n\tcurrentCareer.system.addedSkills.push(skill);\r\n\tfoundry.utils.setProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\r\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","J0IWUhxada2ONowP":" return args.skill?.name == \"Divertissement (Chant)\" || args.skill?.name == \"Divertissement (Chanter)\" || (args.skill?.name.includes(\"Langue\") && (args.skill?.name.includes(\"Magick\") || args.skill?.name.includes(\"Elthárin\") || args.skill?.name.includes(\"Cathayan\")))","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\r\n{\r\n args.item.system.qualities.value.push({name : \"penetrating\"})\r\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\r\n{\r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n wardData = ward.toObject()\r\n wardData.system.specification.value = \"8\"\r\n \r\n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\r\n mrData = mr.toObject()\r\n mrData.system.specification.value = 2\r\n \r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\r\n}\r\nelse\r\n{\r\n this.effect.deleteCreatedItems()\r\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\r\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\r\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \r\n{\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Exposition Mineure à la Corruption}`\r\n )\r\n this.script.scriptMessage(\r\n `${this.effect.name}: \r\n @Corruption[minor]{Exposition Mineure à la Corruption}Damage all Items carried?
`})\r\n\tif (damageItems)\r\n\t{\r\n\t\tlet msg = ``\r\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\r\n\t\tlet armour = args.actor.itemTypes.armour.filter(i => i.isEquipped);\r\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\r\n\t\tfor(let item of weapons)\r\n\t\t{\r\n\t\t\tif (item.system.properties.qualities.shield)\r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1);\r\n\t\t\t}\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of armour)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of trappings)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tif (msg)\r\n\t\t{\r\n\t\t\tthis.script.message(msg, {speaker : {alias : args.actor.name}});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nif (type == \"fire\")\r\n{\r\n\tawait args.actor.addCondition(\"ablaze\");\r\n}\r\n\r\nif (type == \"electricity\")\r\n{\r\n\tawait args.actor.addCondition(\"stunned\");\r\n}\r\n\r\nif (type == \"poison\")\r\n{\r\n\tawait args.actor.addCondition(\"poisoned\");\r\n}\r\n\r\nif (type == \"warpfire\")\r\n{\r\n\tawait this.actor.corruptionDialog(\"moderate\")\r\n\tthis.actor.applyEffect({effectUuids : this.item.effects.getName(\"Warpfire\").uuid})\t\r\n}","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}\r\n","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(\"Athlétisme\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"poisoned\")","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\r\nif (blinded)\r\n{\r\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\r\n blinded.system._scripts = null;\r\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\r\nwoundsGained = Math.ceil(woundsGained / 2)\r\n\r\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\r\n\r\nargs.actor.addCondition(\"fatigued\")\r\nargs.attacker.hasCondition(\"fatigued\")?.delete();\r\n\r\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} guéri de ${woundsGained} Blessures`);","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\r\n\r\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\r\n{\r\n await broken.delete();\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\r\n this.script.scriptNotification(`Suppression de ${broken.name}, ajout de ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\r\n}","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","JhbZWZhOJ23yOBmG":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'hard';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","JhCMYHHYA860Kka8":"return !this.actor.attacker || args.item?.system?.attackType !== \"melee\" || args.skill?.name !== game.i18n.localize(\"NAME.Dodge\");","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\");\r\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choisir un sort\");\r\nif (choice[0])\r\n{\r\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","JibNjuQrJRnY0yf9":"return this.actor.flags.useless.rEye && this.actor.flags.useless.lEye && ([\"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) || args.weapon || args.options.dodge)","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Langue (Magick)\", \"Focalisation (Hysh)\"].includes(args.skill?.name) ","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\r\n{\r\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\r\n args.test.result.critical += ` (+${args.test.result.critModifier})`\r\n}","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\r\n","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.removeCondition(\"surprised\")\r\n this.script.scriptMessage(`Ne peut être surpris`);\r\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} doit réussir un Test Accessible (+20) de Force Mentale pour attaquer cette cible!`)\r\n\r\nreturn true; // No need to show this in the dialog","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\r\n\targs.abort = `${this.effect.name}: Ignoré`","jOm7RxGFm1y6mCpN":"return args.options.crewTest.name.includes(\"Batten Down\");","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\r\nif (caster)\r\n{\r\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\r\n await this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} guéri ${healed} Blessures`)\r\n}\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"vhard\"}, context : {success : \"1 Point de Corruption gagné durant la dernière heure doit être supprimé.\", failure: \"Rien ne se passe\"}})\r\n await test.roll();","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Poisoned Condition Gained\", success: \"Resisted Poisoned Condition\" } })\r\n await test.roll();\r\n if (test.failed)\r\n { \r\n args.actor.addCondition(\"poisoned\");\r\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\r\n {\r\n args.actor.addCondition(\"unconscious\")\r\n }\r\n }\r\n}\r\n\r\n // else\r\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\r\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\r\nif (tokenImg)\r\n{\r\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \r\n }\r\n else \r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Aucune image de Token configurée. Le chemin du token doit être configuré dans la première ligne de ce script.\", \"error\");\r\n}","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\r\n this.actor.addCondition(\"dead\")","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\r\n {\r\n args.addImpact = true\r\n args.opposedTest.result.other.push(\"Rune de Banissement de Gobelin: Ajout d'Impact\")\r\n }","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\r\n{\r\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\r\n}","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} est immergé dans la Elémentair de Mer et subit la @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}
Il peut essayer de s'échapperen s\"évadant de l'Etat @Condition[Entravé} comme si il était @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} par l'Elémentaire de Mer, en réalisant un Test Opposé de Force contre une Force de 59.
`);","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\r\n\r\nlet options = {\r\n appendTitle : \" – \" + this.effect.name,\r\n skipTargets: true,\r\n fields: {difficulty: 'average'},\r\n characteristic: 'wp',\r\n}\r\n\r\nlet test = await args.actor.setupSkill('Calme', options);\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n await this.effect.delete();\r\n args.extraMessages.push(`${args.actor.name} perd ${args.totalWoundLoss} Blessures de l'attaque, ce qui l'a amené à lâcher prise ${target.name}.`);\r\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\r\nawait this.actor.addCondition(\"deafened\")\r\nawait this.actor.addCondition(\"fatigued\")","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\r\nargs.actor.addCondition(\"ablaze\", ablaze)","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\r\n let value = await ValueDialog.create({title : \"Armoured Value\", text : \"Enter the Armoured value\"});\r\n if (value) {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();\r\nreturn true;","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n\t args.actor.addCondition(\"stunned\");\r\n }\r\n\targs.actor.hasCondition(\"bleeding\")?.delete()\r\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst roll = new Roll(`2d10 - ${sin}`);\r\nawait roll.evaluate();\r\nawait roll.toMessage({flavor: `${this.effect.name}`});\r\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\r\n{\r\n args.test.result.damage +=1 \r\n args.test.result.additionalDamage += 1\r\n}","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\r\nawait this.actor.addCondition(\"ablaze\")","kEaBLoIHt1FpQVKq":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Invisibility\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\r\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\r\nlet choice = [];\r\n\r\nif (!specification || specification == \"Compétences entraînées\")\r\n{\r\n choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n broken: \"Dompté\",\r\n drive: \"Trait\",\r\n entertain: \"Divertir\",\r\n fetch: \"Rapporter\",\r\n guard: \"Garder\",\r\n home: \"Revenir à la maison\",\r\n magic: \"Magie\",\r\n mount: \"Monture\",\r\n war: \"Guerre\"\r\n }, this.effect.img), \"unlimited\", \"Choisissez un Dressage\");\r\n}\r\nelse \r\n{\r\n choice = specification.split(\", \").map(i => {\r\n return {\r\n id : i.toLowerCase(),\r\n name : i\r\n }\r\n });\r\n}\r\n\r\nif (choice.length)\r\n{\r\n let changes = foundry.utils.deepClone(this.effect.changes);\r\n\r\n for(let training of choice)\r\n {\r\n switch(training.id)\r\n {\r\n case \"broken\" : \r\n let roll = await new Roll(\"2d10\").roll(); \r\n roll.toMessage(this.script.getChatData());\r\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\r\n\r\n if (this.actor.type == \"creature\")\r\n {\r\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\r\n if (bestial)\r\n {\r\n bestial.update({\"system.disabled\" : true})\r\n }\r\n }\r\n break;\r\n\r\n case \"drive\" : \r\n\r\n break;\r\n\r\n case \"entertain\" : \r\n\r\n break;\r\n\r\n case \"fetch\" : \r\n\r\n break;\r\n\r\n case \"guard\" : \r\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\r\n setProperty(args, \"options.keepId\", true);\r\n break;\r\n\r\n case \"home\" : \r\n\r\n break;\r\n\r\n case \"magic\" : \r\n\r\n break;\r\n\r\n case \"mount\" : \r\n\r\n break;\r\n\r\n case \"war\" : \r\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\r\n break;\r\n }\r\n }\r\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\r\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\r\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\r\nif (!table)\r\n{\r\n\tui.notifications.error(\"Impossible de trouver la table des Mutations Mentales\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Impossible de trouver l'item: \" + uuid)\r\n}","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\nteeth = teeth.toObject();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Dents perdues\"}))\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","KIoVBinAZK8sMOqD":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gain de \" + disease.name)\r\n })\r\n }\r\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 10,\r\n \"bright\": 5,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"flame\",\r\n },\r\n \"color\": \"#ac9e6c\",\r\n }}));","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (opposedResult.differenceSL < 6)\r\n {\r\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\r\n }\r\n else if (opposedResult.differenceSL >= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n}","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \r\n{\r\n this.item.system.reduceQuantity();\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\r\n await test.roll();\r\n if (test.succeeded) \r\n {\r\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(\"Test de Guérison échoué!\", \"error\")\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Quantité insuffisante!\", \"error\")\r\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\r\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Utilise ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) \r\n {\r\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} perd ${toughnessLost} points d'Endurance`)\r\n }\r\n })\r\n }","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll(); \r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}\r\n ","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\r\n{\r\n\targs.flags.lostFingers = true;\r\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\r\n}","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Intrigant\", \"Seconde Vue\"].map(game.wfrp4e.utility.findTalent))\r\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\r\nlet data = item.toObject();\r\ndata.name += ` (Maladie)`;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSjsDlsx3DD6cT16":"return args.skill?.name != game.i18n.localize(\"NAME.Bribery\");","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\r\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptMessage(\"Immunisé aux Poisons\")\r\n poisoned.delete()\r\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\r\nargs.actor.system.details.man -= 1;\r\nargs.actor.system.status.carries.max *= 1.5;","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\r\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\r\nthis.actor.hasCondition(\"deafened\")?.delete()\r\nthis.actor.hasCondition(\"unconscious\")?.delete()","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Projectiles (Arc)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","KyswmGj1uG3QS3ng":"args.applyAP = false;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","l1ntrpa8RE3Lg5xE":"return args.skill?.name === game.i18n.localize(\"NAME.Perception\");","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\r\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`Appliquer la réduction des Dégats contondants? (-3)
`})\r\n\r\nif (blunt)\r\n{\r\n args.modifiers.other.push({label : this.effect.name, details : \"Réduction des dégats contondants\", value : -3})\r\n}","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\r\n\r\nargs.fields.successBonus += 2 + amount;","lhemR8EP5tGNKout":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : \"Souffre d'Irrationnalité Effrayante\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n msg = `@UUID[${this.effect.sourceItem.uuid}]{Irrationnalité Effrayante} Lancez: ${Math.ceil(CONFIG.Dice.randomUniform() * 10)}
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${this.actor.prototypeToken.name} reçoit également 1 Point de Corruption. Si il subit une mutation, il doit la déterminer sur la table des @Table[mutatemental]{Mutations Mentales}.
`\r\n let newCorruption = Number(this.actor.status.corruption.value) + 1\r\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\r\n }\r\n\r\n this.script.scriptMessage(msg);\r\n}\r\n","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","lII4KMRblqwFBlsV":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 20,\r\n \"wp\" : 10,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Focalisation\", \"Charm\", \"Perform (Dancing)\"]\r\nlet skillAdvancements = [0, 6, 3]\r\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\r\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [\"Marsh Lights\", \"Sleep\"];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","LjfScVGBf0Egr70E":"let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize(\"NAME.AnimalCare\"));\r\nlet animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize(\"NAME.AnimalTraining\")));\r\n\r\nif (animalCare) \r\n animalCare.system.modifier.value += 20;\r\n\r\nfor (let training of animalTrainings) {\r\n training.system.modifier.value += 30;\r\n}","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.details.price.gc -= Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \r\n{\r\n this.actor.addCondition(\"unconscious\");\r\n}\r\nelse \r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\r\n\r\nif(career)\r\n{\r\n career.system.current.value = true;\r\n}","lOIHiAIDtj91kllN":"const chanties = await WFRP_Utility.findAll('wfrp4e-soc.chanty');\r\nlet choice = await ItemDialog.create(chanties, 1, \"Choisissez Chanty\");\r\nif (choice.length) {\r\n console.log(choice);\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id});\r\n}","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\nthis.script.scriptNotification(\"Ajout de \" + item.name)","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\r\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\r\n{\r\n args.opposedTest.swap(this.effect.label);\r\n}","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\r\nlet damage = this.actor.system.characteristics.s.bonus + 6\r\n\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await this.actor.addCondition(\"stunned\")\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }\r\n })","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `${this.effect.name}: cannot move or take actions`}}).then(test => {\r\n test.roll();\r\n })\r\n}","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\r\n{\r\n this.script.scriptMessage(`${args.actor.name} doit réussir un Test Facile (+40) d'Endurance ou subir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n await args.actor.addCondition(\"fatigued\");\r\n }\r\n}","lRZhkh8pcu93QTKz":"if (args.test.spell)\r\n{\r\n\targs.test.preData.SL = -10\r\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\n\r\nlet infectedData = infected.toObject();\r\nlet fearData = fear.toObject();\r\nfearData.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\r\nlet msg = `${this.actor.prototypeToken.name} perd 1 Blessure et reçoit l'état Empêtré.`\r\nthis.script.scriptMessage(msg)\r\nthis.actor.modifyWounds(-1)","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\r\nawait test.roll();\r\n\r\nif (test.failed) \r\n{\r\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\n let currentAge = parseInt(this.actor.system.details.age.value)\r\n\r\n let inline = `@ROLL`\r\n let msg =\r\n `${this.actor.prototypeToken.name} vieilli de ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} et perd
\r\n${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Capacité de Combat
\r\n${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Capacité de Tir
\r\n${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Force
\r\n${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Endurance
\r\n${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agilité
\r\n${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dexterité
\r\n `\r\n this.script.scriptMessage(msg);\r\n\r\n let characteristics = foundry.utils.duplicate(this.actor.system.characteristics)\r\n\r\n characteristics.ws.initial -= ws\r\n characteristics.bs.initial -= bs\r\n characteristics.s.initial -= s\r\n characteristics.t.initial -= t\r\n characteristics.ag.initial -= ag\r\n characteristics.dex.initial -= dex\r\n\r\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\r\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\r\n{\r\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\r\n if (slash)\r\n {\r\n slash.value = \"2A\"\r\n }\r\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\r\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\r\n\tthis.actor.addCondition(\"stunned\", stuns)\r\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\r\n\r\nif (caster)\r\n{\r\n let bonus = caster.system.characteristics.wp.bonus\r\n this.actor.modifyWounds(bonus)\r\n\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} récupère ${bonus} Blessures`)\r\n}","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\")\r\n}","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Résistance', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 't',\r\n context: {failure: \"Mast shattered!\"}\r\n});\r\nawait test.roll();\r\n\r\nif (test.failed) {\r\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\r\n this.effect.update({disabled: true});\r\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\r\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M0XhKnWjG14pk3iH":"return !args.skill?.name.includes(\"Focalisation\") && args.type != \"channelling\" && args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(\"Langue (Magick)\") && args.type != \"cast\"","M2FshTX4PjKFVU8y":"args.flags.earCount = Number.isNumeric(args.flags.earCount) ? args.flags.earCount+1 : 1;\r\nif (args.characteristic == \"fel\")\r\n{\r\n\targs.fields.modifier -= 5;\r\n}\r\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\r\n{\r\n\targs.fields.modifier -= 20;\r\n}\r\n","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\r\nargs.prefillModifiers.successBonus++;\r\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.effect.name} s'efface de votre esprit et s'efface de votre grimoire !`)\r\n this.effect.sourceItem.delete();\r\n }\r\n}","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.options.reload","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n\targs.actor.addCondition(\"unconscious\")\r\n}\r\n\r\n","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\r\n{\r\n args.flags.trained = true;\r\n args.fields.modifier += 10;\r\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\r\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","McLR9YcgVUG3MooC":"args.applyTB = false;","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"mort\", \"nécromancie\", \"vie\", \"lumière\", \"cieux\"].includes(args.spell?.system.lore.value)","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\r\nlet critTable = `crit${this.generalizeTable(loc)`;\r\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\r\n\r\nthis.script.scriptMessage(`{this.actor.name} subit un ${crit} (localisation : ${loc}). Ne pas appliquer d'Hemmoragie ou de Blessures additionnelles.`);","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyTerror(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postTerror(value, name)\r\n}","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.script.scriptNotification(\"Immunisé à En Flammes\")\r\n await this.actor.hasCondition(\"ablaze\")?.delete()\r\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Savoir (Apothicaire)\"","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 20,\r\n \"bright\": 10,\r\n \"angle\": 360,\r\n \"alpha\": 0.4,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} porte ${this.item.name}.Eviter les dégâts avec ${this.effect.name}?`,\r\n buttons: {\r\n yes: {\r\n label: \"Oui\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"Non\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n args.abort = `${this.effect.name}: Dégâts annulés`\r\n }\r\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\r\n{\r\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\r\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Esquive\", { fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n await args.actor.addCondition(\"bleeding\")\r\n await args.actor.addCondition(\"entangled\")\r\n }\r\n })","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nfear = fear.toObject();\r\nfear.system.specification.value = 1;\r\nacutesense = acutesense.toObject();\r\nacutesense.name += \" (Odorat)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\r\nbrokenbone = brokenbone.toObject();\r\nteeth = teeth.toObject();\r\ntongue = tongue.toObject();\r\n\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Dents perdues\"}))\r\n\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nbrokenbone.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\r\n","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\r\n{\r\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\r\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}\r\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create({text : \"Enter Fear value\", title : this.effect.name});\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","nIOeK0BrtdZeZW8X":"console.log(\"SKILL\", this)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"challenging\"}, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet rollD10 = await new Roll(\"1d10\").roll()\r\nrollD10.toMessage(this.script.getChatData())\r\n\r\n\r\nif (test.succeeded)\r\n{\r\n //...\r\n}\r\nelse if (test.failed)\r\n{\r\n //...\r\n}\r\n","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\r\n{\r\n this.script.scriptMessage(`Infctée: ${args.actor.name} doit réussir un Test Facile (+40) de Résistance ou subir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\r\nconst sl = message.system.sl;\r\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\r\nlet current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses Points de Chance augmenter de ${current} à ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} porte ${this.item.name}.
\r\n Il bénéficie de +50 aux Tests de Natation et peut respirer sous l'eau.
Si il porte le masque pendant plus d'une heure ou bénéficie de l'un de ses effets, il est exposé à une @Corruption[moderate]{Corruption moderate}.`,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} porté par ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, ses effets perdurent pendant [[1d10+4]] jours, après quoi il faudra les supprimer manuellement.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}\r\n","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Résistance à la Magie\", \"talent\")) \r\n return\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","nkSmu7v9WiAaK4vq":"const repaired_message = `
Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n \r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\r\n{\r\n let AP = parseInt(this.effect.sourceTest.result.SL)\r\n args.modifiers.ap.value += AP;\r\n args.modifiers.ap.magical += AP;\r\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\r\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\r\nargs.test.result.critModifier += 20;\r\n\r\nif (args.test.result.critical)\r\n{\r\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\r\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n}\r\n ","Np8P8IPT2GYlrh6G":"return args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})` && args.type !== \"channelling\";","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\r\n\r\nreturn opposedResult?.winner == \"attacker\";","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier -= 10;\r\n}\r\nelse if ([\"wp\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier += 10;\r\n}","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o3JUBKLvE6bBxK2n":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" } })\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n await this.actor.addCondition(\"prone\")\r\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\r\n injury = injury.toObject()\r\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\r\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\r\n if (injury.system.location.key[0] == \"r\")\r\n {\r\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\r\n }\r\n else if (injury.system.location.key[0] == \"l\")\r\n {\r\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\r\n }\r\n setProperty(injury, \"system.wfrp4e.count\", toes)\r\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\r\n}","O45vpR4jDbQQnmvJ":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Suivants de Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\r\nanimosity.name = animosity.name.replace(\"(Cible)\", \"(Suivants de Slaanesh)\");\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","O7lXFZLrLdFaShGR":"args.options.catfall = true;","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\r\n\r\nthis.script.scriptMessage(`Gagne ${points} Points de Chance`)","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\r\nlet biteData = bite.toObject();\r\nlet venomData = venom.toObject();\r\n\r\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\r\nvenomData.system.specification.value = \"Average\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \r\nawait test.roll();","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n this.actor.modifyWounds(-1);\r\n this.script.scriptMessage(\"Subit 1 Dégat\")\r\n }\r\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\r\nargs.actor.system.characteristics.t.value += 30\r\n\r\nargs.actor.system.characteristics.s.bonus += 3\r\nargs.actor.system.characteristics.t.bonus += 3\r\n\r\nif (args.actor.system.characteristics.s.value > 100)\r\n{\r\n args.actor.system.characteristics.s.value = 100\r\n args.actor.system.characteristics.s.bonus = 10\r\n}\r\n\r\nif (args.actor.system.characteristics.t.value > 100)\r\n{\r\n args.actor.system.characteristics.t.value = 100\r\nargs.actor.system.characteristics.t.bonus = 10\r\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\r\n{\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let msg = `Résultat ${roll}.`\r\n if (roll >= 7)\r\n {\r\n msg = `L'attaque touche avec un DR de ${roll - 6}.`\r\n }\r\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.actor.removeCondition(\"surprised\");\r\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\r\n{\r\n\tthis.script.scriptNotification(\"Désactivé!\");\r\n\tawait this.effect.update({\"disabled\" : true})\r\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","OEy2lxvic37dRBEt":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await ItemDialog.createFromFilters(filters, 3, \"Choisissez 3 Sorts de Magie Mineure\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await ItemDialog.createFromFilters(filters, 3, \"Choisissez 3 Sorts de Magie d'Arcane\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\r\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\r\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\r\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\r\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\r\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\r\n\r\nfunction tinDifference(layers)\r\n{ \r\n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\r\n\r\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\r\n\r\n return metalAP - tinAP;\r\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\r\n ","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\r\n\r\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\r\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\r\n\r\nblows = Math.clamped(blows, 0, difficulties.length - 1)\r\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\r\n{\r\n let difficulty = difficulties[blows];\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.script.scriptMessage(`${this.actor.name} doit cesser le combat et fuir à moins de réussir un jet Intermédiaire (+0) de Force Mentale`);\r\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\r\n }\r\n })\r\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = foundry.utils.duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regagne ${regen} Blessures.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Voile';\r\nconst difficulty = 'average';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n \r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","oTXPA6rbPnYOKNmo":"let characteristics = {\r\n \"ws\" : 35,\r\n \"bs\" : 10,\r\n \"s\" : 25,\r\n \"t\" : 30,\r\n \"i\" : 30,\r\n \"ag\" : 25,\r\n \"dex\" : 0,\r\n \"int\" : 15,\r\n \"wp\" : 35,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Calme\", \"Esquive\", \"Intimidate\", \"Intuition\", \"Langue (Battle)\", \"Commandement\" , \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [25, 15, 25, 25, 15, 30, 20, 20]\r\n\r\nlet talents = [\"Combat Aware\", \"Combat Master\", \"Combat Reflexes\", \"Inspiring\", \"Chance\", \"Resolute\", \"Unshakable\", \"War Leader\"]\r\nlet trappings = [\"Arme simple\", \"Shield\", \"Plate Breastplate\", \"Plate Bracers\", \"Plate Helm\", \"Plate Leggings\"]\r\nlet specialItems = [ \r\n {name: \"Two Handed Weapon\", type: \"trapping\", trappingType: \"clothingAccessories\" }, \r\n] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nlet filters = [\r\n {\r\n property : \"type\",\r\n value : \"weapon\"\r\n },\r\n {\r\n property : \"system.weaponGroup.value\",\r\n value : [\"twohanded\", \"polearm\"]\r\n }\r\n]\r\n\r\nitems = items.concat(await ItemDialog.createFromFilters(filters, 1, \"Choisissez an appropriate Polearm or Two-Handed Weapon\"))\r\n\r\nlet ride = await Dialog.confirm({title : \"Skill\", content : \"Add Chaos Steed and +20 Ride (Horse)?\"})\r\n\r\nif (ride)\r\n{\r\n let skill = await game.wfrp4e.utility.findSkill(\"Ride (Horse)\")\r\n skill = skill.toObject();\r\n skill.system.advances.value = 20;\r\n items = items.concat({name : \"Chaos Steed\", type: \"trapping\", \"system.trappingType.value\" : \"misc\"}, skill)\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nconsole.log(\">>>>>>><\", items)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\r\n\r\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\r\n\r\nthis.script.scriptMessage(`Guérison de ${caster.system.characteristics.fel.bonus} Blessures`);","OvIELZLvnlN2H2uw":"args.update({light : {\r\n \"dim\": 2,\r\n \"bright\": 1,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"pulse\",\r\n },\r\n \"color\": \"#949bff\",\r\n}});","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\r\n let data = item.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n \r\n this.script.scriptMessage(`Test de Force Mentale échoué, ${this.actor.prototypeToken.name} @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] pour [[1d10]] heures`)\r\n }\r\n}","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\r\n args.test.preData.canReverse = true","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\r\n{\r\n this.actor.modifyAdvantage(-1);\r\n this.script.scriptNotification(`${this.actor.name} perd 1 Avantage`);\r\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\r\nthis.actor.addCondition(\"stunned\", roll.total)","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed;","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","p7NJB1PsY6X5q8OO":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet traits = await warhammer.utility.findAllItems(\"trait\");\r\ntraits = traits.filter(t => t.name.includes(\"Companion Trait\"));\r\n\r\nlet items = await ItemDialog.create(traits);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: items[0].name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PdClojv7yNgQpOUc":"return args.skill?.name != game.i18n.localize(\"NAME.Endurance\");","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\r\n\r\nlet mainEffect = this.item.effects.contents[0];\r\nif (mainEffect.name.includes(\"(Lore)\"))\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choisissez le Savoir\");\r\n if (choice.length)\r\n {\r\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\r\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\r\n }\r\n}\r\n\r\nthis.effect.delete();","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\r\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \r\n (this.actor.isOpposing || args.test.context.defending) && \r\n args.test.result.roll % 11 == 0 && \r\n args.test.succeeded && \r\n [\"Langue (Magick)\", \"Esquive\"].includes(args.test.item?.name))\r\n {\r\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\r\n let text = `${this.effect.name}: Ajout de Instable et Protection`\r\n args.test.result.other.push(text) \r\n this.script.scriptNotification(text);\r\n \r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n let wardData = ward.toObject();\r\n wardData.system.specification.value = 9;\r\n \r\n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\r\n let unstableData = unstable.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\r\n }\r\n","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\r\n item = item.toObject()\r\n item.system.specification.value = this.actor.characteristics.ag.value\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\r\n})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\r\n\r\nif (ablaze) {\r\n ablaze.delete();\r\n this.script.scriptNotification(\"Résiste à En Flammes\");\r\n}","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\r\nlet data = item.toObject();\r\ndata.name += \" (Woodlands)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choisissez Size\");\r\n if (choice[0])\r\n {\r\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\r\n }\r\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \r\n// reducing the SL of any spell affecting it by 3. \r\n// This effect lasts for one hour.\r\nconst hasMagicResistance = this.actor.has(\"Résistance à la Magie\") || this.actor.has(\"Magieresistenz\") || this.actor.has(\"Magic Resistance\")\r\n\r\nif (hasMagicResistance === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\r\n let traitItem = trait.toObject()\r\n traitItem.system.specification.value = 2\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Magic Resistance Trait. This effect lasts for one hour.
`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}\r\n\r\nif (hasMagicResistance) {\r\n // Multiple doses may be consumed at once, with each one adding an additional 1 to the Magic Resistance rating and increasing the duration by one hour. \r\n let msg = `${this.actor.prototypeToken.name} has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.
`\r\n\r\n // Resist toxic effect\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n fields: {difficulty: \"challenging\"}\r\n }).then(async test => {\r\n await test.roll()\r\n\r\n // If they fail ...\r\n if (!test.succeeded) {\r\n msg += `However, they begin to ooze the thick, poisonous slime that coats every Dreadmaw. They have gained 1 Poisoned Condition now and should continue to receive an additional @Condition[Poisoned] Condition at the end of each of the round.
\r\nIf they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.
`\r\n this.actor.addCondition(\"poisoned\", 1)\r\n }\r\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\r\n })\r\n}\r\n","PMNjdEAusVBfam09":"return args.skill?.name === game.i18n.localize(\"NAME.Charm\");","Pn5fekTbkwlr61XU":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Engineer)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n \r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Magie des Arcanes (Lumière)\", \"talent\")\r\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\r\n\r\nif (!talent)\r\n{\r\n await this.actor.addCondition(\"blinded\")\r\n}\r\n\r\nif (demon)\r\n{\r\n await this.actor.addCondition(\"stunned\")\r\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\r\n {\r\n args.actor.addCondition('ablaze')\r\n }","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\r\n\r\nif (criticals.length)\r\n{\r\n this.script.scriptNotification(\"Ne peut subir de Blessures Critiques\");\r\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\r\n}\r\n\r\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\r\n{\r\n this.script.scriptNotification(`Endormi pour ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\r\n}","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll();\r\nlet mood = await new Roll(\"-2d10\").roll();\r\n\r\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\r\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\r\n\r\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\r\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\r\n\r\nthis.effect.delete();","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Esquive\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\r\nargs.actor.system.details.move.value -= 1;","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \r\n{\r\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\r\n let results = roll.results[0]\r\n\r\n this.script.scriptMessage(`${this.actor.name} subit @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\r\n })\r\n\r\n }\r\n\r\n","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\n","pzknBcJtZWeliE27":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\") || args.item?.name == game.i18n.localize(\"NAME.Cool\")","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n ws : game.wfrp4e.config.characteristics.ws,\r\n t : game.wfrp4e.config.characteristics.t,\r\n ag : game.wfrp4e.config.characteristics.ag,\r\n wp : game.wfrp4e.config.characteristics.wp\r\n}, this.effect.img), 1, \"Choisir une caractéristique\");\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q4EQgP4gZR8TTm7S":"let penalty = 0\r\nif (args.item?.system.attackType)\r\n{\r\n penalty -= 30\r\n}\r\nif (args.actor.has(\"Seconde Vue\", \"talent\"))\r\n penalty += 10\r\n\r\nargs.prefillModifiers.modifier += penalty","Q5gh5Y9dCdclcwsD":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name != `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Lorsque seul\";\r\ndata.effects[0].disabled = true;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n \r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","q8lOAWr2970sZeTw":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\r\n\r\n if (args.actor.details.move.value > 3)\r\n {\r\n args.actor.details.move.value -= 1;\r\n if (args.actor.details.move.value < 3)\r\n args.actor.details.move.value = 3\r\n }","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \r\n{\r\n if (args.test.succeeded) \r\n {\r\n let staunch = Number(args.test.result.SL) + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n {\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n }\r\n args.test.result.other.push(`${this.actor.name} guérit ${staunch} états Hémorragiques du patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\r\n {\r\n args.test.result.other.push(`Le patient est victime d'une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)\r\n }\r\n}","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","QbIYnshWeP1U8SUy":"args.applyAP = false;\r\nargs.applyTB = false;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\r\nthis.actor.status.encumbrance.pct = 0;","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QfTBRGXVfwQSghmd":"fromUuid(this.effect.origin).then(caster => {\r\n if (caster) {\r\n if (actor.items.find(it => it.name == game.i18n.localize(\"Bestial\"))) {\r\n let healed = caster.characteristics.wp.bonus\r\n let wounds = foundry.utils.duplicate(args.actor.status.wounds)\r\n wounds.value += healed\r\n\r\n if (wounds.value > wounds.max)\r\n wounds.value = wounds.max\r\n\r\n args.actor.update({ \"system.status.wounds\": wounds })\r\n ChatMessage.create({ content: `${this.actor.prototypeToken.name} regagne ${healed} Blessures`, speaker: { alias: this.effect.name } })\r\n } else {\r\n ui.notifications.warn(\"L'Acteur ciblé n'a pas le Trait Bestial\")\r\n }\r\n }\r\n})\r\n\r\n","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL) {\r\n args.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Utilise le dé d'unité comme DR`)\r\n }\r\n}","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 1;\r\n\r\nargs.actor.system.details.man -= 2;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\r\nlet fearData = fear.toObject();\r\nlet leaderData = leader.toObject();\r\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \r\ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\r\n","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"type\": \"\",\r\n },\r\n \"color\": \"#000000\",\r\n }}));","qmOt7h17hGAKqQe0":"\r\nlet choice = await Dialog.wait({\r\n title: this.effect.name,\r\n content: `${this.effect.name}: Est-ce que l'attaque magique ou à distance provient de l'extérieur du Dome?
`,\r\n buttons: {\r\n yes: {\r\n label: \"Oui\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"Non\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n})\r\n\r\nif (choice)\r\n{\r\n\targs.ward = 6;\r\n}","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\r\n\r\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\r\nlet scriptData = this.effect.system.scriptData;\r\n\r\nif (closed) {\r\n scriptData[0].label = \"Open\";\r\n} else {\r\n scriptData[0].label = \"Close\";\r\n}\r\n\r\nawait this.effect.update({\"system.scriptData\": scriptData});","QNxmImpLTou6WdMQ":"let test = args.test\r\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\r\n test.result.other.push(\"Peut faire un Test de Force Mentale Difficile (-10) pour éviter l'Incantation Imparfaite\")","QoEOxRruQXYrZrv3":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"skill\"\r\n },\r\n {\r\n property : \"name\",\r\n value : /Melee/gm,\r\n regex: true\r\n }\r\n]\r\n\r\nlet items = await ItemDialog.createFromFilters(filters, 2, \"Choisissez 2 Skills to add +20\")\r\nitems = items.map(i => i.toObject())\r\nitems.forEach(i => i.system.advances.value = 20)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QPVVDPcJ4Xi5FmQl":"if(this.actor.hasCondition(\"fatigued\") && args.opposedTest.result.hitloc.value == \"head\" && (args.opposedTest.attackerTest.result.critical || args.actor.status.wounds.value - args.totalWoundLoss < 0))\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n }\r\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\r\n args.item.damage.value += \" + 1\"","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\r\n{\r\n\treturn this.script.scriptNotification(\"Aucun état sur cet Acteur\")\r\n}\r\n\r\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choisissez un état\")\r\n\r\nif (choice[0])\r\n{\r\n\tthis.actor.removeCondition(choice[0].conditionId)\r\n}\r\n","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n effectData.duration.seconds = 10800\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Vision Nocturne\") && !this.actor.has(\"Vision Nocturne\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\r\n{\r\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\r\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 1;\r\nAP[\"rArm\"].value += 1;\r\nAP[\"lArm\"].value += 1;\r\nAP[\"body\"].value += 1;\r\nAP[\"lLeg\"].value += 1;\r\nAP[\"rLeg\"].value += 1;","qTk96NKh14YOIShf":"return args.skill?.name === game.i18n.localize(\"NAME.Haggle\");","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target)) {\r\n\r\n let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\n let ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\n if (ones > SL) {\r\n args.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Utilise le dé d'unité comme DR`)\r\n }\r\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `${this.effect.name}: Vomit!`} })\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: Toute les cibles au contact abec ${this.actor.prototypeToken.name} subissent [[/r 1d10]] dégats, modifiés par le BE et les PA.`\r\n\r\nthis.script.scriptMessage(content)","qxzhPtysAjPWspKf":"if (this.actor.has(\"Mort-vivant\") || this.actor.has(\"Démoniaque\"))\r\n{\r\n this.script.scriptNotification(`Ne peut entrer ${this.effect.name}!`);\r\n}","qzGPJflVW7c2Ciim":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\");","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","R32U01LBjBrK1pns":" const templateMap = {\r\n 'P2e7Yx98bK3u110a' : \"\",\r\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \r\n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \r\n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \r\n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \r\n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \r\n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\r\n }\r\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\r\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\r\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\r\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\r\n\r\n\r\n let templateItem = await warhammer.utility.findItemId(templateMap[template._id]);\r\n\r\n let bio = \r\n `\r\nTemplate: ${template.text}
\r\nTrait physique: ${physicalQuirk}
\r\nEthique: ${workEthic}
\r\nTrait de personnalité: ${personalityQuirk}
\r\n `\r\n \r\n this.script.message(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\r\n\r\n if (templateItem)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\r\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\nlet spellLore = game.wfrp4e.config.magicLores[args.spell.system.lore.value].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && spellLore == lore)\r\n args.prefillModifiers.slBonus += 1\r\n// If channelling or casting different lore\r\nelse if (spellLore != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","R8ecKGRzOr4ThvVa":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R8FBHZaaARA3z9pB":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'hard';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\r\n{\r\n this.actor.removeCondition(\"bleeding\");\r\n this.script.scriptNotification(\"Suppression d'1 état Hémmoragique\")\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Aucun état Hémorragique\");\r\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rBAoyhzeU3Q8MVSk":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 50;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n \r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.script.scriptNotification(\"Ne peut être surpris\");\r\n this.actor.removeCondition(\"surprised\");\r\n}","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\r\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\r\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\r\n\r\nas.name += \" (Vue)\";\r\n\r\nlet roll = (await new Roll(\"1d10\").roll());\r\nroll.toMessage(this.script.getChatData())\r\nlet items = []\r\n\r\nif (roll.total <= 2)\r\n{\r\n items = items.concat([as]);\r\n}\r\nelse if (roll.total <= 4)\r\n{\r\n items = items.concat([hv]);\r\n}\r\nelse if (roll.total <= 6)\r\n{\r\n items = items.concat([ms]);\r\n}\r\nelse if (roll.total <= 8)\r\n{\r\n items = items.concat([ss]);\r\n}\r\nelse if (roll.total <= 10)\r\n{\r\n items = items.concat([as, hv, ms, ss]);\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (data.system.location.key[0] == \"r\")\r\n{\r\n\tdata.system.location.value = \"Right Ankle\"\r\n}\r\nelse if (data.system.location.key[0] == \"l\")\r\n{\r\n\tdata.system.location.value = \"Left Ankle\"\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\r\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\r\n effectData.duration.seconds = 60 * minutes\r\n this.script.scriptMessage(`Durée: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Aucun disponible!\", \"error\")\r\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\r\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\r\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\r\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\r\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\r\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\r\n\r\narmour.name = \"Armour (Hide)\"\r\narmour.system.specification.value = 2\r\nbite.system.specification.value = 3\r\nfear.system.specification.value = 2\r\nweapon.system.specification.value = 4\r\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\r\n\r\n\r\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\r\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\r\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\r\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\r\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\r\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\r\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\r\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\r\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\r\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\r\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\r\n\r\nblessed.system.specification.value = \"Ulric\"\r\nsize.system.specification.value = \"Large\"\r\n\r\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\r\n\r\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\r\n\r\nitems = items.concat(chosen || [])\r\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\r\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\r\n\r\nlet skill = await ItemDialog.create(skills, 1, \"Sélectionnez la compétence à utiliser avec l'arme\")\r\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\r\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\r\n\r\nlet weapon = {\r\n\tname : this.effect.name,\r\n\ttype : \"weapon\",\r\n\timg : this.effect.img,\r\n\tsystem : {\r\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\r\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\r\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\r\n\t\t\"reach.value\" : \"average\",\r\n\t\t\"qualities.value\" : [{name : \"magical\"}]\r\n\t},\r\n}\r\n\r\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\r\nthis.script.scriptNotification(\"Item créé. Les modifications supplémentaires doivent être réalisées manuellement sur la fiche de l'objet.\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptMessage(\"Ajout de 2 état Hémorragiques\")\r\n}","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\r\n\r\nfor (let effect of holed) {\r\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\r\n}\r\n\r\nthis.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`);","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rlTvhnDpj4lzfusf":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && args.skill?.name !== game.i18n.localize(\"NAME.Climb\");","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\r\n return ui.notifications.warn(\"You must target exactly one Boat.\");\r\n\r\nconst target = game.user.targets.first();\r\nconst vehicle = target.actor;\r\n\r\nif (!(vehicle.system instanceof VehicleModel)) \r\n return ui.notifications.warn(\"You can only Constrict a Boat\");\r\n\r\nif (vehicle.size > 3)\r\n return ui.notifications.warn(\"You can only Constrict vessels of Size Large or smaller\");\r\n\r\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\r\n\r\nconst mainEffect = this.item.effects.contents[0];\r\nconst effectData = mainEffect.toObject();\r\n\r\neffectData.statuses = [effectData.name.slugify()];\r\n\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\r\n\r\nawait this.actor.applyEffect({effectData: [effectData]});\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} started wrapping itself around the ${target.name} and will be able to start crushing it after ${turns} turns.`);","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Corps à corps (Base)\")\r\n{\r\n args.item.system.modifier.value += 30;\r\n}","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"flags.wfrp4e.applicationData.type\" : \"crew\"})","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.item.name} Surcharge!`)\r\n }\r\n}","RPqgRUkiLY5thVbC":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'average';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n \r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Lâche l'objet!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\n\r\nif (location && test.failed)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\r\nif (test.spell.lore.value == \"fire\")\r\n{\r\n if (test.result.overcast.usage.target?.AoE)\r\n {\r\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\r\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\r\n }\r\n if (test.result.overcast.usage.range)\r\n {\r\n test.result.overcast.usage.range.current *= 2\r\n test.result.overcast.usage.range.initial *= 2\r\n }\r\n \r\n}","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\r\nawait args.actor.addCondition(\"deafened\");\r\nawait args.actor.addCondition(\"stunned\");","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\ntest.roll();","RrchOMpEdIvceJxl":"return args.skill?.name == \"Discrétion (Rurale)\"","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"disease\")\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choisissez une maladie\")\r\n\r\nif (choice[0])\r\n{\r\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n}","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\r\n","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\r\n{\r\n args.test.result.damage += 1\r\n args.test.result.additionalDamage += 1\r\n if (!args.test.result.resolute) {\r\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\r\n args.test.result.resolute = true // Prevent duplicate messages\r\n }\r\n}\r\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":"let characteristics = {\r\n \"ws\" : -10,\r\n \"bs\" : -10,\r\n \"s\" : -5,\r\n \"t\" : -5,\r\n \"i\" : -10,\r\n \"ag\" : -10,\r\n \"dex\" : -10,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n}\r\nlet skills = []\r\nlet skillAdvancements = []\r\nlet talents = []\r\nlet trappings = []\r\nlet items = []\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\r\nlet terrorTraitItem = item.toObject()\r\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \r\nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Résistance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"blinded\");\r\n}\r\n\r\nlet msg = ``\r\nlet armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped);\r\nfor(let item of armour)\r\n{\r\n\tfor(let key in item.system.AP)\r\n\t{\r\n\t\tlet AP = item.system.AP[key]\r\n\t\tlet damage = Math.floor(AP / 2);\r\n\t\tawait item.system.damageItem(damage, [key]);\r\n\t}\r\n\tmsg += `${item.name} PA divisé par 2
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\r\nif (this.actor.flags.holed.applied === true) return;\r\nif (this.actor.hasCondition(\"dead\")) return;\r\n\r\nconst currentHoled = this.actor.flags.holed.holed || 0;\r\n\r\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\r\n if (!m.name.toLowerCase().includes(\"gun port\")) \r\n return acc;\r\n \r\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\r\n if (!closed) acc++;\r\n \r\n return acc;\r\n}, 0);\r\n\r\nconst totalHoled = currentHoled + openGunPorts;\r\nconst toughness = this.actor.system.characteristics.t.value;\r\nthis.actor.flags.holed.total = totalHoled;\r\n\r\nif (totalHoled >= toughness) {\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n this.script.scriptMessage(`\r\n${speaker.alias} sank due to having Holed (${totalHoled}) rating equal to, or exceeding its Toughness (${toughness })
\r\n\r\n Holed due to Critical Damage: ${currentHoled}
\r\n Holed due to opened Gun Ports: ${openGunPorts}\r\n
En buvant cette potion, ${this.actor.prototypeToken.name} est devenu sujet à la Frénesie. Cette Frénésie dure [[1d10]] Rounds, et ne peut pas se terminer avant.
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\r\n\r\nif (location == \"lArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Résultat : gauche\")\r\n}\r\nelse if (location == \"rArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Résultat : Droite\")\r\n}\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\r\n\r\nif (location)\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syBgPp7rOymCZejX":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunité Psychologique\")?.delete();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptNotification(`Immunité Psychologique a été supprimé de l'acteur, ajout de ${roll.total} états Brisé`)\r\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sz0PqS1kroMOzUZk":"let characteristics = {\r\n \"ws\" : -15,\r\n \"bs\" : -30,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : -10,\r\n \"ag\" : -10,\r\n \"dex\" : 0,\r\n \"int\" : -20,\r\n \"wp\" : 15,\r\n \"fel\" : -20\r\n}\r\nlet skills = [\"Melee (Brawling)\"]\r\nlet skillAdvancements = [10]\r\n\r\nlet talents = [\"Fearless (Everything)\", \"Frenzy\", \"Implacable\"]\r\nlet trappings = [\"Plate Breastplate\", \"Plate Bracers\", \"Plate Helm\", \"Plate Leggings\"]\r\nlet specialItems = [] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nconsole.log(\">>>>>>><\", items)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\r\nlet data = item.toObject();\r\ndata.name = data.name.replace(\"Cible\", \"Peaux vertes, Mort-vivant, Chaos\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","T3RfSt3VMEat3iDD":"return args.skill?.name !== game.i18n.localize(\"NAME.Perception\");","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Corps à corps (Base)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Laché ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\r\n{\r\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Quantité insuffisante!\", \"error\")\r\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Quantité insuffisante!\", \"error\")\r\n}","tCIT1a12Gt6k2ohA":"let resistance\r\nif (this.item.name.includes(\"(\") && !this.item.name.toLowerCase().includes(\"(any)\"))\r\n{\r\n\tresistance = this.item.parenthesesText\r\n}\r\nelse \r\n{\r\n resistance = await ValueDialog.create({text : \"Resistenz eingeben\", title : \"Resistenz\"}) \r\n \r\n if (resistance)\r\n {\r\n this.item.updateSource({name : `${this.item.name.split(\"(\")[0].trim()} (${resistance})`})\r\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\r\n }\r\n} \r\nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\r\n\r\nif (resistance && !this.effect.name.includes(\"(\"))\r\n{\r\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\r\n}","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","TCtXPvDpbfz1yrVZ":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Two-Handed)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\n\r\n Select your choice\r\n
\r\n `,\r\n buttons : {\r\n 1 : {\r\n label : \"Shield\",\r\n callback : () => {\r\n return \"shield\"\r\n }\r\n },\r\n 2 : {\r\n label : \"Two-Handed Weapon\",\r\n callback : () => {\r\n return \"twohanded\"\r\n }\r\n },\r\n }\r\n})\r\n\r\nlet weapons = await warhammer.utility.findAllItems(\"weapon\", \"Loading Weapons\");\r\nlet items\r\nif (choice == \"shield\") \r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.properties.qualities.shield), 1, \"Choisissez a Shield\");\r\n}\r\nelse if (choice == \"twohanded\")\r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.weaponGroup.value == \"twohanded\"), 1, \"Choisissez a Two-Handed Weapon\");\r\n}\r\nitems = items.map(i => i.toObject())\r\n\r\nitems.forEach(i => i.system.equipped.value)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n let add = 0\r\n\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \r\n {\r\n add = 1 // can't use isFumble if no hit location\r\n }\r\n\r\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\r\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\r\n\r\n}","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"A Terre\" }})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\nif (args.applyAP && nonmagical) \r\n{\r\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\n args.modifiers.ap.ignored += nonmagical\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore les PA non-magiques (\" + nonmagical + \")\");\r\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.system.specification.value = 1;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\r\nlet test = await this.actor.setupTrait(stomp)\r\nawait test.roll();","tn6SwmjAuNzqE6dx":"let damage = 0\r\nlet test = await this.actor.setupSkill(\"Esquive\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n damage = 10;\r\n}\r\nelse if (test.failed)\r\n{\r\n damage = 20;\r\n}\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\r\n \"ws\": 45,\r\n \"bs\": 30,\r\n \"s\": 35,\r\n \"t\": 45,\r\n \"i\": 30,\r\n \"ag\": 35,\r\n \"dex\": 25,\r\n \"int\": 25,\r\n \"wp\": 30,\r\n \"fel\": 25\r\n}\r\nfor (let char in this.actor.characteristics) {\r\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\r\n this.actor.characteristics[char].initial = gorCharacteristics[char]\r\n}","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\r\n this.script.scriptMessage(`Test de Force Mentale échoué, ${this.actor.prototypeToken.name} subit @Condition[Malaise] pour [[1d10]] heures`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"unconscious\")\r\n}","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n let sourceActor = this.effect.sourceActor;\r\n if (sourceActor)\r\n {\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\r\n }\r\n}","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\r\n\r\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\r\nthis.script.scriptMessage(`Localisation: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TpZItJ5Ugbazaobd":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\r\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","Tq45Nd8J3eTvHT41":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.SetTrap\");","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Minor\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","tuIsytv3jl2yAIb2":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\") && args.skill?.name !== game.i18n.localize(\"NAME.Intimidate\") && args.skill?.name !== game.i18n.localize(\"NAME.Leadership\")","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n this.script.scriptNotification(`Suppression de ${fatigued.conditionValue} états Fatigué`)\r\n fatigued.delete(); \r\n}\r\nelse \r\n{\r\n\tthis.script.scriptNotification(`Aucun état Fatigué`)\r\n}","TwgdEucxcHloc4cX":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nAppliquer les dégats de ${this.effect.name}? L'attaquant doit avoir utilisé ses mains nues ou une arme de mêlée faite de métal.`})\r\n if (apply)\r\n {\r\n \r\n let damage = 5 + this.actor.characteristics.wp.bonus;\r\n \r\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\r\n \r\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\r\n \r\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\r\n \r\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n \r\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\r\n \r\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\n msg += ` (${metalAP} PA métalliques ignorés sur ${game.wfrp4e.config.locations[loc]})`\r\n this.script.scriptMessage(msg)\r\n }\r\n}","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} voit ses Points de Chance augmenter de ${current} à ${1 + current}`)","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData());\r\n args.totalWoundLoss += roll.total;\r\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\r\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `
Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n \r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Reçoit un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n else \r\n {\r\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\r\n }\r\n}\r\nelse \r\n{\r\n return false;\r\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\")\r\n\r\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\r\nthis.script.scriptNotification(lore)\r\nif (lore == \"Au choix\") {\r\n return\r\n}\r\n\r\nelse if (lore == \"Magie des Arcanes\") {\r\n lore = \"Arcane\"\r\n}\r\n\r\nelse if (lore == \"Magie Mineure \") {\r\n lore = \"petty\"\r\n}\r\n\r\nelse {\r\n lore = lore.toLowerCase();\r\n}\r\n\r\nlet spellsWithLore = []\r\nif (lore == \"Arcane\") {\r\n spellsWithLore = spells.filter(i => !i.system.lore.value)\r\n}\r\nelse {\r\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\r\n}\r\n\r\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\r\n this.actor.setupCast(item).then(test => test.roll());\r\n})","UlRSaZG4ZUU6fMND":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n \r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nEntrez le nombre de Poisons/Maladies soignés
\",\r\n buttons : {\r\n confirm : {\r\n label : \"Confirmer\",\r\n callback : (dlg) => {\r\n let input = dlg.find(\"input\");\r\n value = parseInt(input[0].value);\r\n return value;\r\n }\r\n }\r\n }\r\n})\r\n\r\n\r\nlet damage = 0;\r\n\r\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\r\n\r\nlet test = new Roll(`${rolls.join(\" + \")}`);\r\nawait test.roll();\r\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Projectiles (Arc)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Longbow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `\r\n Ajouter une option?\r\n
\r\nFinished replacing ${this.item.name} with a makeshift one.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n \r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \r\n{\r\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) \r\n {\r\n await args.actor.addCondition(\"poisoned\")\r\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\r\n }\r\n })\r\n}","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\r\nif (SL < 0)\r\n SL = 0\r\nthis.actor.addCondition(\"fatigued\", 1 + SL)","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VLdF2HPnCrNIgp7a":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Suivants de Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\n animosity.system.specification.value = \"Suivants de Slaanesh\";\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gain d'1 Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","VlHuDIAvPr8JM1P5":"return args.skill?.name !== game.i18n.localize(\"NAME.Row\");","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","VNOKTzCrFbZ6PJUj":"return ![\"Emprise sur les animaux\", \"Résistance\", \"Survie en extérieur\"].includes(args.skill?.name)","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","Vns6WrafVq8NjX7t":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\")","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\r\n\r\nawait roll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n return false;\r\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Langue (Magick)\"","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData())\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\r\n// On a 1, its poison has run dry, \r\n// and the next time it is employed it will shatter.\r\n\r\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\r\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\r\n ChatMessage.create({\r\n content: `\r\n ${this.item.name} n'a plus de Poison. Il se brisera à sa prochaine utilisation.`, \r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\r\n blind: true\r\n })\r\n}\r\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.characteristics.t.initial += 10 * specification;\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"fatigued\") \r\n }\r\n})","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\r\nif (broken)\r\n{\r\n broken.delete();\r\n this.script.scriptNotification(\"Etat Brisé supprimé\")\r\n}","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"prone\")\r\n\tawait this.actor.addCondition(\"stunned\")\r\n}\r\n \r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\r\nargs.modifiers.other.push({label : this.effect.name, value : -1)","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\r\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.minormis\r\n}\r\n// Decrement the major miscast to minor miscast\r\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.majormis\r\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\r\n}","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\r\n{\r\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\r\n\t{\r\n\t\tif (parseInt(args.test.result.SL) > 0)\r\n\t\t{\r\n\t\t\targs.test.result.SL = \"-0\";\r\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\r\n\t\t}\r\n\t\targs.test.result.outcome = \"failure\"\r\n args.test.result.other.push(`${this.effect.name}: Maximum -0 DR`)\r\n\t}\r\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\nlet slOver = this.effect.sourceTest.result.slOver;\r\nlet overcast = this.effect.sourceTest.result.overcast\r\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\r\nlet added = Math.floor(slOver / 3) || 0\r\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4RuGIfseGoxXA3k":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\r\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 60\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Ajout de Hémorragique\");\r\n}\r\n","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","WB6sIpLEPC8YPX67":"if (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Ne peut pas esquiver!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\r\nlet msg = \"\";\r\nfor(let item of items)\r\n{\r\n if (item.system.properties.qualities.durable)\r\n {\r\n await item.update({\"system.qualities.value\" : []});\r\n msg += `${item.name} per toutes ses Qualités
`\r\n }\r\n else \r\n {\r\n msg += `${item.name} tombe en poussière!
` \r\n await item.update({name : item.name + \" (Poussières)\"})\r\n }\r\n}\r\nif(msg)\r\n{\r\n this.script.scriptMessage(msg);\r\n}","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","whUSkaR1yem21bXp":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 6,\r\n \"int\" : -5,\r\n \"wp\" : 0,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Melee (Basic)\", \"Track\"]\r\nlet skillAdvancements = [8, 7]\r\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\r\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\r\n{\r\n args.item.system.qualities.value.push({name : \"magical\"})\r\n}","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\r\nargs.item.system.qualities.value.push({name : \"magical\"});","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\nlet spellLore = game.wfrp4e.config.magicLores[args.spell.system.lore.value].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && spellLore == lore)\r\n args.prefillModifiers.slBonus += 3\r\n// If channelling or casting different lore\r\nelse if (spellLore != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","WO5n7Vbx8AgoVrwC":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n}\r\nlet skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\r\nlet skillAdvancements = [10, 10, 10]\r\nlet talents = []\r\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Arme simple\"]\r\nlet items = []\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\r\n{\r\n\tthis.actor.addCondition(\"dead\");\r\n}","Wqff6ICWYzvLDYC8":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Sensory Sharing\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","WR0Kqn8CF5iwToak":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\r\n{\r\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\r\n disease = disease.toObject()\r\n disease.system.duration.active = true\r\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\r\n }\r\n })\r\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\r\n\r\n this.script.scriptNotification(\"Ce test ne s'applique seulement qu'aux criminels. Fermez cette fenêtre si ce n'est pas le cas.\");\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \r\n {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"unconscious\");\r\n }\r\n });","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\r\n // must make a Challenging (+0) Endurance Test \r\n\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\r\n fields: {difficulty: \"challenging\"}\r\n })\r\n \r\n await test.roll();\r\n if (test.failed)\r\n {\r\n // or gain a Deafened Condition \r\n this.actor.addCondition(\"deafened\");\r\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\r\n let damage = (await new Roll(\"1d10\").roll());\r\n await damage.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"N'a pas besoin de faire de test de Peur ou de Terreur\");\r\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n\r\nawait this.actor.addCondition(\"deafened\", 3)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"Gain a Broken Condition\", success : \"Avoided Broken Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"broken\")\r\n}","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\r\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\r\n\r\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\r\n grim.update({\"system.specification.value\": 4});\r\n}\r\n\r\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\r\n grim.update({\"system.specification.value\": 2});\r\n}","x2RLUUNB7BiIDYCP":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"moderat\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"schwerwiegend\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, skipTargets: true, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\r\nitem.name += ` (Désactivé par ${this.item.name})`;","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nlet data = item.toObject();\r\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\r\ndata.system.specification.value = 5\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n\tthis.actor.removeCondition(\"prone\");\r\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\r\n}\r\nelse \r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\r\nChatMessage.create({content : \"La grâce est au delà du style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n\r\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n \"nobles\" : \"Nobles\",\r\n \"guilders\" : \"Maitres de Guildes\",\r\n \"servants\" : \"Serviteurs\"\r\n}), 1, \"Choisissez un groupes\")\r\n\r\nlet name = choice[0]?.name\r\n\r\nif (!name)\r\n{\r\n return;\r\n}\r\n\r\nif (item)\r\n{\r\n item.update({\r\n name : item.name.split(\"(\")[0] + ` (${name})`, \r\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\r\n })\r\n}\r\nelse \r\n{\r\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\r\n let data = item.toObject();\r\n data.name += ` (${name})`\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\r\n scythe.name = \"Scythe of Shyish\";\r\n scythe.system.damage.value = \"WPB + 3\"\r\n scythe.system.equipped = true;\r\n scythe.img = this.effect.icon;\r\n scythe.system.qualities.value.push({name : \"magical\"})\r\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","XCAfy460IotarQek":"return false;","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}\r\n\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","XcvDYNZgJ2rpAdDV":"\r\nlet fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (!fatigued) {\r\n this.actor.addCondition(\"fatigued\")\r\n ui.notifications.notify(\"Etat Fatigué ajouté à \" + this.actor.name + \" qui ne peut être enlevé tant que le symptôme de Malaise est présent.\")\r\n}","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\r\n}","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\r\n{\r\n args.addImpact = true;\r\n args.opposedTest.result.other.push(\"Impact contre les Skavens\")\r\n}","Xf4FcZ4ZLdWmOXBa":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} porte ${this.item.name}.${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\n\r\nthis.script.scriptMessage(msg);","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\r\n args.test?.result?.other.push(\"Reçoit 1 Point de Corruption de \" + this.effect.name)\r\n}","yQziCK8G8I1RYkTj":"let add;\r\nif (args.opposedTest?.attackerTest?.weapon?.isRanged && args.opposedTest?.result.hitloc?.value === \"head\") {\r\n add = await Dialog.confirm({title : this.effect.name, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\r\n}\r\n\r\nif (add) {\r\n\r\n args.modifiers.ap.metal++;\r\n args.modifiers.ap.used++;\r\n args.modifiers.ap.value++;\r\n args.modifiers.ap.details.push(\"+1 AP against missile attacks to the front\");\r\n}","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yRRzSKlcN3L7rEEe":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Play\"));","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\r\nthis.script.scriptNotification(\"Ajout de Fatigué\")","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","yTmRoUstxHMso91c":"if (args.item.name == \"Résistance à la Magie\" && args.item.type == \"trait\")\r\n{\r\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\r\n}","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\r\nlet fel_gain = 0\r\nif (args.actor.characteristics.fel.value <= 0)\r\n{\r\n fel_gain += (await new Roll(\"2d10\").roll()).total\r\n}\r\n\r\nlet msg = `${this.actor.prototypeToken.name} gagne ${i_gain} en Intelligence`\r\n\r\nif (fel_gain)\r\n msg += ` et ${fel_gain} en Sociabilité`\r\n\r\n\r\nlet newInt = i_gain + args.actor.characteristics.int.modifier\r\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\r\n\r\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\r\n\r\nthis.script.scriptMessage(msg)","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\r\n\r\nif (newEffect)\r\n{\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\r\n}","YySjPfSAPdMAfjsh":"let talents = [\"Charge Berserk\", \"Vigilance\", \"Combat Instinctif\", \"Assaut féroce\", \"Endurci\", \"Résistance à la Magie\", \"Résistant (Magie)\", \"Déterminé\", \"Coup puissant\", \"Guerrier né\"];\r\nlet currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer) return;\r\n\r\nfor (let talent of talents) {\r\n if (currentCareer.system.talents.includes(talent))\r\n continue;\r\n currentCareer.system.talents.push(talent);\t\r\n}\r\n\r\n","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\r\n\tthis.script.scriptNotification(\"Appliqué après les effets\");\r\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nitem = item.toObject()\r\nitem.name = this.effect.name\r\nitem.system.specification.value = this.actor.characteristics.s.bonus\r\nitem.system.description.value = \"\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 2;\r\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\r\nif (ablaze)\r\n{\r\n this.script.scriptNotification(\"Immunisé à En Flammes\");\r\n ablaze.delete()\r\n}","z5HfNUrHy5MS3K7a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Reçoit un Point de Corruption\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Chargement des sorts\", true);\r\n\r\nlet choice = await ItemDialog.create(spells, 1);\r\n\r\nif (choice[0])\r\n{\r\n this.script.scriptMessage(`Choisir @UUID[${choice[0].uuid}]{${choice[0].name}}`)\r\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\r\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\r\n spell.system.wind.value = \"Focalisation (Dhar)\";\r\n spell.system.memorized.value = true;\r\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\r\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = foundry.utils.duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} guérit de ${regen} Points de Blessure.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZCkYe5XMVY1RWMXG":"args.options.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effect because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\r\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\r\n{\r\n halve = await Dialog.confirm({title : this.effect.name, content : \"Diviser les Dégâts? (Divise les dégats de Feu)\"})\r\n}\r\nelse\r\n{\r\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\r\n}\r\n\r\nif (halve)\r\n{\r\n args.totalWoundLoss /= 2;\r\n args.modifiers.other.push({label : this.effect.name, details : \"Divisé\", value : \"× 0.5\"})\r\n}","zdGAvfL7zJ7wpYxG":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'easy';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Crochetage\", \"Escamotage\", \"Focalisation (Ulgu)\"].includes(args.skill?.name)","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\r\n\r\nswitch (initiativeSetting) {\r\n case \"default\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"sl\":\r\n args.initiative += \"+1\"\r\n break;\r\n\r\n case \"d10Init\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"d10InitAgi\":\r\n args.initiative += \"+1\"\r\n break;\r\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","ZgF1sYdbAKaOuHmK":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\");","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet biteData = bite.toObject();\r\nlet infectedData = infected.toObject();\r\n\r\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Religion\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Quantité insuffisante!\", \"error\")\r\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","ZingXNvYyZ2BEvfY":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 5,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Calme\", \"Equive\", \"Langue (Bataile)\"]\r\nlet skillAdvancements = [10, 10, 10]\r\n\r\nlet talents = [\"Combat Instinctif\", \"Déterminé\"]\r\nlet trappings = [\"Plastron d'acier\", \"Brassards\", \"Heaume\", \"Jambières d'acier\"]\r\n\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nlet weapons = await warhammer.utility.findAllItems(\"weapon\", \"Chargement des armes\");\r\n\r\nitems = items.concat((await game.wfrp4e.apps.ItemDialog.create([await fromUuid(\"Compendium.wfrp4e-core.items.Item.1zaqojk0Oq1m8vYv\"), await fromUuid(\"Compendium.wfrp4e-core.items.Item.bBX8MP6QfcyU6Fy3\")], 1, \"Choisissez a Weapon\")) || [])\r\n\r\nlet choices = weapons.filter(i => i.system.properties.qualities.shield || i.system.weaponGroup.value == \"polearm\" || i.system.weaponGroup.value == \"twohanded\");\r\n\r\nitems = items.concat(await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choisissez un bouclier ou une Arme d'Hast ou une Arme à deux-mains\"));\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","zIpl3SkWv8zzlr2D":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = (await ItemDialog.createFromFilters(filters, 4, \"Choisissez 4 sorts de Magie Mineure\")).map(i => i.toObject());\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : [\"death\"]\r\n }\r\n]\r\n\r\nlet arcane = (await ItemDialog.createFromFilters(filters, 8, \"Choisissez 8 Sorts d'Arcane & du Domaine de la Mort\")).map(i => i.toObject());\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"name\",\r\n value: /^((?!\\().)*$/gm, // Remove all spells with parentheses (all arcane spells spells)\r\n regex: true\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"necromancy\"\r\n }\r\n]\r\n\r\nlet necromancy = (await ItemDialog.createFromFilters(filters, 3, \"Choisissez 3 sorts du Domaine de la Nécromancie\")).map(i => i.toObject());\r\n\r\nlet items = [...necromancy, ...petty, ...arcane]\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Ajout d'Hemorragique\")\r\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\r\n if (target.actor.details.size.value == \"tiny\")\r\n modifier = 30\r\n if (target.actor.details.size.value == \"ltl\")\r\n modifier = 20\r\n if (target.actor.details.size.value == \"sml\")\r\n modifier = 10\r\n\t\r\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 2;\r\nAP[\"rArm\"].value += 2;\r\nAP[\"lArm\"].value += 2;\r\nAP[\"body\"].value += 2;\r\nAP[\"lLeg\"].value += 2;\r\nAP[\"rLeg\"].value += 2;","zL7ECmBBMAqf5Esn":"let hasMagazine = await Dialog.confirm({content: \"Does the vessel have a magazine or any other kind of store for blackpowder?
\"});\r\n\r\nif (!hasMagazine) return;\r\n\r\nlet roll = new Roll(\"d10\");\r\nawait roll.evaluate();\r\n// await roll.toMessage();\r\nlet anchor = roll.toAnchor();\r\n\r\nlet crits = [];\r\n\r\nfor (let i = 0; i < roll.total; i++) {\r\n let result = await WFRP_Tables.rollTable('crithull');\r\n let collection = game.packs.get(result.object.documentCollection)\r\n\r\n if (collection)\r\n await collection.getDocuments()\r\n\r\n if (!collection)\r\n collection = game.items;\r\n\r\n let item = collection.get(result.object.documentId)\r\n if (item)\r\n crits.push(item);\r\n}\r\n\r\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\r\nthis.script.scriptMessage(`${this.item.name} caused an additional ${anchor.outerHTML} Critical Hits to the Hull!
${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}
`\r\n}\r\n\r\nthis.script.scriptMessage(msg);","zR4WAjzXHTZuiu5G":"let actor = this.actor;\r\nlet effect = this.effect;\r\nlet bleedingAmt;\r\nlet bleedingRoll;\r\nlet msg = \"\"\r\n\r\nlet damage = effect.conditionValue;\r\nlet scriptArgs = { msg, damage };\r\nawait Promise.all(actor.runScripts(\"preApplyCondition\", { effect, data: scriptArgs }))\r\nmsg = scriptArgs.msg;\r\ndamage = scriptArgs.damage;\r\nmsg += await actor.applyBasicDamage(damage, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne: false, suppressMsg: true })\r\n\r\nif (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\")) {\r\n await actor.addCondition(\"unconscious\")\r\n msg += \"Réparation finie ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'difficult';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n \r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n // Wait till after chat card is posted\r\n game.wfrp4e.utility.sleep(500).then(() => {\r\n game.wfrp4e.utility.postTerror(1, this.effect.name)\r\n game.wfrp4e.utility.postTerror(2, this.effect.name)\r\n })\r\n}","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\nlet holed = this.actor.flags.holed || {holed: 0};\r\nholed.holed += rating;\r\nthis.actor.flags.holed = holed;\r\n","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed","zxG5KbliWE9xWNQD":"this.script.message(\"Passe automatiquement n'importe quel \" + this.script.label);\r\nargs.abort = true;","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","zXh8rgMxWoCLTxVd":"const repaired_message = `Réparation finie ${this.item.name}.
`;\r\nconst test = 'Voile';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Réparer ${this.item.name}`,\r\n img: this.item.img,\r\n system: {\r\n transferData : {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.message(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 0\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.effect.delete()\r\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \r\n// in Wolves, Lions, Goats, and Chimeras.\r\ngame.wfrp4e.utility.postFear(2, this.effect.name)\r\n","zzk2uRSFjFHB5kjw":"\r\nlet roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire) {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Résultat 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n}\r\nelse if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)"}); + mergeObject(game.wfrp4e.config.effectScripts, {"00ZCnahnTGvzG9KA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item])","01VFjGVxkjb5P1ve":"return args.item?.system?.isRanged && args.data.targets[0]?.actor?.sizeNum < 3","03mJu59V4iByWlsO":"// The imbiber immediately\r\n// takes 3 Poisoned Conditions that cannot be resisted at first,\r\nawait this.actor.addCondition(\"poisoned\", 3)\r\n\r\n// recovers a number of Wounds equal to their Toughness Bonus, \r\nawait this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n\r\n// and acquires the Regenerate Creature Trait.\r\nconst hasRegenerate = this.actor.has(\"Regenerieren\")\r\nif (hasRegenerate === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\").then(trait => {\r\n let traitItem = trait.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n}\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} hat:\r\n
Wenn alle Vergifteten Zustände beendet sind, geht auch die Eigenschaft Regenerieren verloren.
`,\r\n\r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n","04bAiHISSW53w94Y":"this.actor.addCondition(\"blinded\", 3)","06IaVCOC0RCJbxEf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.8piWcBKFlQ2J1E3A\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","08S8Ozi5b4EdwZp5":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus;","09sSpnW8z2zcVEdf":"if (!args.flags.quietenedApplied)\r\n{\r\n args.fields.modifier += 10;\r\n args.flags.quietenedApplied = true\r\n}","0abwNjpzo3SbEOeO":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","0BP5l7bIkf744G1k":"return !args.options.terror && !args.extendedTest?.flags.wfrp4e?.fear","0e0UZT2FodOJDdgW":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0e7OkamNAaAk4Oit":"let item1 = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet item2 = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\n\r\nlet data1 = item1.toObject();\r\ndata1.system.location.key = this.item.system.location.key\r\n\r\nlet data2 = item2.toObject();\r\ndata2.system.location.key = this.item.system.location.key\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data1, data2], {fromEffect: this.effect.id})\r\n","0FNOq4J1AdPd2A0q":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","0FWto1oEr3jbWggw":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet text = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).result\r\n\r\nlore = Array.from(text.matchAll(/{(.+?)}/gm))[0][1]\r\n\r\nif (text == \"GM's Choice\")\r\n{\r\n return this.script.scriptNotification(text)\r\n}\r\n\r\nif (spellsWithLore.length > 0)\r\n{\r\n let spellsWithLore = spells.filter(i => game.wfrp4e.config.magicLores[i.system.lore.value] == lore)\r\n let selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\n this.script.scriptNotification(selectedSpell.name);\r\n this.actor.createEmbeddedDocuments(\"Item\", [selectedSpell])\r\n}\r\nelse\r\n{\r\n ui.notifications.notify(`Could not find ${lore} spell. Try Again`)\r\n}","0iTLDgFHO9Rgc010":"args.fields.modifier -= 20;","0jTqyz0wRlK6XPF7":"if (args.test.spell)\r\n{\r\n\targs.test.result.other.push(`${this.effect.name}: Automatic Failure`)\r\n}","0KG3HoTNoZhaINIj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.4CMKeDTDrRQZbPIJ\")\r\nlet fixation = (await game.wfrp4e.tables.rollTable(\"fixations\"))\r\nlet data = item.toObject();\r\ndata.system.specification.value = fixation.result;\r\nthis.item.updateSource({name : this.item.name += ` (${fixation.result})`});\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","0LCQtsiK2aUfYRmD":"return ![\"t\", \"wp\"].includes(args.characteristic)","0mrUnxzufYgsR0Ph":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\")\r\n }\r\n})\r\n","0R0QAr3D024kWPfo":"let table = game.wfrp4e.tables.findTable(\"mutatephys\");\r\nif (!table)\r\n{\r\n\treturn ui.notifications.error(\"Mutation table not found, please ensure a table with the `mutatephys` key is imported in the world.\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","0Uly7OmkH0zqYbxQ":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"max(1, 1d10 - @system.characteristics.t.bonus)\", this.actor).roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","0vaYwAlMWTmOBl8k":"if (!args.flags.strikeToStun)\r\n{\r\n args.flags.strikeToStun = true\r\n args.fields.modifier += 20;\r\n args.fields.hitLocation = \"head\";\r\n}\r\nargs.fields.successBonus++;","0YKQGbsKdHSmYGE7":"if (args.skill?.name != game.i18n.localize(\"NAME.Gossip\"))\r\n{\r\n\treturn true;\r\n}\r\nelse \r\n{\r\n\targs.data.canReverse = true; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says \"any gossip test can be reversed\" so check it here instead of submission\r\n}\r\n ","0yyofYHeDRQlFliO":"return args.options.terror || args.extendedTest?.flags.wfrp4e?.fear","11uCC0mK2uL783al":"let type = this.item.getFlag(\"wfrp4e\", \"breath\");\r\n\r\nif ([\"fire\", \"electricity\", \"poison\"].includes(type))\r\n{\r\n args.applyAP = false;\r\n}","15C6LbCUmQgPEoDM":"await args.actor.addCondition(\"ablaze\");","16nCOByUaSFDym1V":"args.fields.modifier -= 20\r\n","18MeEQ0As3JvER71":"let state = !this.effect.disabled;\r\nthis.effect.update({\"disabled\": state});\r\n\r\nif (state)\r\n return ui.notifications.info(\"EFFECT.CreatureBackInWater\", {localize: true})\r\n\r\nreturn ui.notifications.info(\"EFFECT.CreatureOutOfWater\", {localize: true});","190PHSHKGaJ74wsR":"if (!this.item.name.includes(\"(\") || this.item.system.tests.value.includes(\"Terrain\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let terrain = name.split(\"(\")[1].split(\")\")[0]\r\n tests = tests.replace(\"the Terrain\", terrain)\r\n }\r\n else // If no sense specified, provide dialog choice\r\n {\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n coastal : \"Coastal\",\r\n deserts : \"Deserts\",\r\n marshes : \"Marshes\",\r\n rocky : \"Rocky\",\r\n tundra : \"Tundra\",\r\n woodlands : \"Woodlands\"\r\n }, this.item.img), 1, \"Choose Terrain\");\r\n if (choice[0])\r\n {\r\n name = `${name.split(\"(\")[0].trim()} (${choice[0].name})`\r\n tests = tests.replace(\"the Terrain\", choice[0].name + \" Terrain\")\r\n }\r\n }\r\n\r\n this.effect.updateSource({name})\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","1A87vGLh2PXH0rG0":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","1BT0MWM2cbhlEnrn":" let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 5,\r\n \"s\" : 5,\r\n \"t\" : 0,\r\n \"i\" : 5,\r\n \"ag\" : 5,\r\n \"dex\" : 5,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n\r\n let talents = (await Promise.all([game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\"), game.wfrp4e.tables.rollTable(\"talents\")])).map(i => i.text)\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n","1CeYp5MlPcH68UIw":"let characteristics = {\r\n \"ws\" : 15,\r\n \"bs\" : 10,\r\n \"s\" : 10,\r\n \"t\" : 15,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Intimidate\", \"Commandement\" , \"Perception\"]\r\nlet skillAdvancements = [10, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Drilled\", \"Menaçant\", \"Robust\"]\r\nlet trappings = [\"Arme simple\", \"Mail Coat\", \"Mail Chausses\"]\r\nlet specialItems = [ \r\n] \r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let item of specialItems) {\r\n let newItem\r\n if (item.type == \"weapon\") {\r\n newItem = new ItemWfrp4e({ name: item.name, type: item.type, system: { equipped: true, damage: {value: item.damage}} })\r\n } else if (item.type == \"trapping\") {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type, system: { worn: true, trappingType: { value: item.trappingType} } } )\r\n } else {\r\n newItem = new ItemWfrp4e({ img: \"systems/wfrp4e/icons/blank.png\", name: item.name, type: item.type })\r\n }\r\n items.push(newItem.toObject())\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n trappingItem.system.equipped.value = true;\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","1E47r2ba6IGe8uFK":"return args.characteristic != \"t\"","1exiWlVUHsXDLLAH":"this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);","1fQr1Dg7DX0vfz3r":"let healed = parseInt(this.effect.sourceTest.result.SL)\r\nthis.actor.modifyWounds(healed)\r\nthis.script.scriptMessage(`Healed ${healed} Wounds`)","1IodsW9ImamYoEYz":"args.actor.details.move.run += 4","1jQq9v8fXK8zuEBU":"let damage = this.effect.sourceActor.hasCondition(\"fatigued\") ? 6 : 10;\r\n\r\nlet loc = \"body\"\r\n\r\nlet APatLoc = this.actor.system.status.armour[loc];\r\n\r\nlet metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)\r\n\r\nlet APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n\r\ndamage -= (APused + this.actor.system.characteristics.t.bonus)\r\n\r\nlet msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\nmsg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\nthis.script.scriptMessage(msg)\r\n\r\nlet test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n\tthis.actor.addCondition(\"stunned\");","1JwxZujbDcueLWBL":"await this.actor.addCondition(\"ablaze\", 2)\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg: true}))","1kB2su7hLRYDhZ2H":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\")\r\n let data = item.toObject();\r\n if (this.item.system.location.key == \"rLeg\")\r\n {\r\n data.system.location.value = \"Right Toe\"\r\n\tdata.system.location.key = \"rToe\";\r\n }\r\n else if (this.item.system.location.key == \"lLeg\")\r\n {\r\n data.system.location.value = \"Left Toe\"\r\n\tdata.system.location.key = \"lToe\";\r\n }\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}\r\nthis.effect.delete();","1l7Jz2ZHbAWko7Vm":"args.options.ballockKnife = true;","1LDm3OB32skZe6Xv":"return args.characteristic != \"wp\"","1LDSzXeO5CzXgTOc":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) || args.skill?.name == `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","1MDOKny7IirJPoI6":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` ${this.effect.name}`})\r\nawait test.roll()\r\nif (test.succeeded)\r\n{\r\n this.effect.delete();\r\n}\r\n","1mNkLj9JYNr3ofC6":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"stunned\", 3)\r\n }\r\n})","1OpT3CXs07XFWWCT":"args.options.cardsharp = true;","1PQPxFjmRlulHHzo":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n}\r\n ","1UalUmNzjB4rp3SZ":"return [\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","1wEjrgff7ASxKVmy":"if (args.effect.conditionId == \"bleeding\")\r\n args.data.damage -= 1","1wKVvxRTHOyV4Qdv":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Sail\"))","1wrPvP6lJwIAfmsl":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations), 1, \"Choose Location\");\r\n\r\nlet location = choice[0].id;\r\n\r\nlet itemTargeted = this.actor.items.get(this.effect.getFlag(\"wfrp4e\", \"itemTargets\")[0])\r\n\r\nif (itemTargeted)\r\n{\r\n itemTargeted.update({[`system.APdamage.${location}`] : itemTargeted.system.APdamage[location] + 1})\r\n}","1yOvw74jzFfaI87b":"return args.options.reload\r\n","1ZArMNUI8qqH6zkX":"let test = await args.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : \" - \" + this.effect.name, context : {failure: \"Gained a Stunned Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}\r\n\r\n","1ZrzpfVwPJHdwp23":"this.actor.status.addArmour(1, {source: this.effect, magical : true})","22bW97lkvCqisfHX":"return args.type != \"channelling\" && !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","23HgjCB1oecxANvA":"if (args.item.range && args.item.range.bands)\r\n{\r\nargs.item.range.bands[game.i18n.localize(\"Long Range\")].modifier = 0\r\nargs.item.range.bands[game.i18n.localize(\"Extreme\")].modifier /= 2\r\n}","23vWiHUjxtRQ3Efz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","29wHhLMnuoVjfQtN":"const sl = this.effect.getFlag(\"wfrp4e-archives3\", \"sl\");\r\nargs.item.system.damage.value += `+${sl}`;","2AdSBXw7IwCiqawQ":"return args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","2AOo7KUyzMrgIlgM":"game.wfrp4e.utility.postCorruptionTest(this.item.system.specification.value, {speaker : {alias: this.actor.prototypeToken.name}})","2cKarG9ToyW2ptCd":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.update({\"system.quantity.value\" : this.item.system.quantity.value - 0.25})\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","2Cw5j0iGAnFNegWr":"return args.item?.system.attackType\r\n","2GYAd4OC888oQFBp":"return ![\"fel\"].includes(args.characteristic)","2hzDv8ROulOe1elK":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","2mFNelLOAQ6iJsZl":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[doomrocket-fumble]\")\r\n}","2miWWeRrEpq1beG4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","2NLINicPQWbuvp2n":"return args.item?.name != game.i18n.localize(\"NAME.Navigation\")","2OqLHRqEBEjBm2LW":"args.fields.slBonus += this.actor.system.characteristics.wp.bonus","2p9IK6Y5Z4NQD6FY":"args.prefillModifiers.difficulty = \"hard\"","2QB0LjueuJcIaHaC":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Armour value\", this.effect.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","2Qi1hwLYhdE6v6Hs":"if (![\"rLeg\", \"lLeg\"].includes(this.effect.getFlag(\"wfrp4e\", \"location\")))\r\n\treturn true;\r\n\r\nif (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","2rzxQlL7A9ujZ9uK":"if (args.opposedTest.result.winner == \"attacker\") {\r\n if (args.opposedTest.defenderTest.weapon && args.opposedTest.defenderTest.item.properties.qualities.shield) {\r\n ui.notifications.notify(`${this.effect.name}: Gained ${this.item.Advances} Advantage`)\r\n this.actor.setAdvantage(this.item.Advances)\r\n }\r\n}","2sDH6RvoOAR40oqH":"\r\n\r\nif (![\"Goblin\", \"Orc\"].includes(this.actor.system.details.species.value)) {\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { appendTitle: ` - ${this.effect.name}` })\r\n await test.roll();\r\n if (test.failed) {\r\n let infection = await fromUuid(\"Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [infection])\r\n }\r\n}\r\n\r\n// Since wounds change when the effect is deleted, need to wait until after \r\n// the max wounds have been recalculated to apply damage\r\ngame.wfrp4e.utility.sleep(1000).then(async () => {\r\n let roll = await new Roll(\"1d10\").roll();\r\n\r\n roll.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))\r\n\r\n})","2VNnVrtktdGUqXEV":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed && parseInt(args.opposedTest.attackerTest.result.SL) > 0)\r\n {\r\n args.actor.addCondition(\"stunned\", parseInt(args.opposedTest.attackerTest.result.SL))\r\n }\r\n} ","2vTVR0quRZQtjNfQ":"let currentCareer = this.actor.system.currentCareer;\r\nif (!currentCareer)\r\n{\r\n return;\r\n}\r\n\r\nlet talents = [\"Aethyric Attunement\",\r\n\"Arcane Magic (Any)\",\r\n\"Chaos Magic (Tzeentch)\",\r\n\"Fast Hands\",\r\n\"Instinctive Diction\",\r\n\"Magical Sense\",\r\n\"Petty Magic\",\r\n\"Second Sight\",\r\n\"War Wizard\",\r\n\"Witch!\"].filter(t => !currentCareer.system.talents.includes(t))\r\n\r\ncurrentCareer.system.talents = currentCareer.system.talents.concat(talents)","2W9uMTT6iJhfQ044":"let skill = `Trade (${this.item.parenthesesText})`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet craftsmanAdded = this.actor.getFlag(\"wfrp4e\", \"craftsmanAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\tcraftsmanAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.craftsmanAdded\", craftsmanAdded)\r\n}","2WBq5gW780C6zfCp":"if (args.weapon && this.item.system.usesLocation(args.weapon))\r\n{\r\n args.bleedingHand = true;\r\n let success = await this.effect.manualScripts[0].execute({actor: this.actor})\r\n if (!success)\r\n {\r\n args.abort = true;\r\n }\r\n}","2wk0yrRPlPsdqr3L":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2WSN306tL4apjRtD":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name = data.name += \" (Hearing)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","2yctEihGmdCfTTVx":"args.data.canReverse = true;\r\nargs.options.fieldDressing = true;","2zeP2nMSURjxrqYz":"let wounds = this.actor.system.status.wounds\r\nif (wounds.value == 0)\r\n return this.script.scriptNotification(\"No effect at 0 Wounds\", \"error\")\r\n\r\nthis.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus)","33PWizq5F7pkKnQT":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value = Math.floor(args.item.cn.value / 2)\r\n}","33US8YRgaMqYu2We":"return !args.options.handling","37UN17gb8suFeZIW":"this.script.scriptMessage(await this.actor.applyBasicDamage(8, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))","3aEzK0DehSHtVykd":"this.effect.manualScripts[0].execute({actor : this.actor});","3CdYFcInQVCIBUiE":"args.actor.system.details.move.value += 2;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);\r\nargs.actor.system.details.price.gc *= 1.1;","3Cn2TlRahlm5LkSj":"args.fields.successBonus += 1;","3D5ImpMgpOTPucvv":"if (args.test.options.cardsharp && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","3eSaX0BeaUalNkEP":"return args.options.mutate","3fdCQ3h3iVuhdDs9":"args.fields.slBonus += this.actor.characteristics.ag.bonus;","3hfMQkUKYI4rCuBy":"return args.skill?.name != game.i18n.localize(\"NAME.CharmAnimal\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","3IGO7xEjRjat937X":"let fatigue = this.actor.hasCondition(\"fatigued\")\r\nif (fatigue)\r\n{\r\n this.script.scriptNotification(\"Removing Fatigued Condition, disabled effect\")\r\n this.effect.update({disabled : true})\r\n await this.actor.removeCondition(\"fatigued\")\r\n}","3JEzEzF1SeYA9lsV":"let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, \"Choose Location\");\r\nif (choice[0])\r\n{\r\n this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : choice[0].id})\r\n}\r\n\r\nlet location = choice[0].id;\r\n\r\nif ([\"lArm\", \"rArm\"].includes(location))\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nif (location == \"body\")\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"prone\");\r\n }\r\n}\r\n\r\nif (location == \"head\")\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\");\r\n }\r\n}","3jm0NoYpgB6ZuUSl":"args.options.useOnesAttractive = true;","3l7MQSa10Kve2K3P":"this.script.scriptMessage(await this.actor.applyBasicDamage(Math.ceil(CONFIG.Dice.randomUniform() * 10) + 6, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\nthis.actor.addCondition(\"ablaze\");","3LLiSgj6KGtgqcmo":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Language\"));","3nTSOcCmNZpQWK8b":"this.actor.addCondition(\"blinded\", 3);","3plV9WFqs2prfAdp":"return ![\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","3R6Y4NpNTqPc83wh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.IPKRMGry6WotuS1G\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","3sfD1nedXLzuYoXJ":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => test.roll())\r\n}\r\n","3tE8gFSl28EhCmo5":"await args.actor.addCondition(\"ablaze\")\r\nawait args.actor.addCondition(\"prone\")","3TesBGh8HnlGuafu":"let modifier = this.effect.sourceTest?.result.overcast.usage.other.current || 0\r\n\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {fields: {modifier}, skipTargets: true, appendTitle : \" - \" + this.script.label});\r\n\r\ntest.roll();","3Vbe6gdW8N0bIvXJ":"if (args.item.type == \"weapon\" || args.item.type == \"trait\")\r\n{\r\n args.item.qualities.value.push({name : \"penetrating\"})\r\n args.item.qualities.value.push({name : \"impale\"})\r\n}","454x3Q95pLvZm0Kx":"return args.skill?.name == game.i18n.localize(\"NAME.ConsumeAlcohol\");","4cOZzUvu1nytcqNn":"args.initiative = \"-10\"","4cumLUlcuJ7m8C6t":"let item = args.actor.items.find(i => i.name.includes(\"Smoothing\"));\r\nlet smoothing = item?.effects.find(e => e.name === \"Smoothing\");\r\nif (smoothing)\r\n smoothing.disabled = true;","4drWKXjMgasxY7Jy":"args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);","4FGKZk2f0xrmIDnp":"return args.skill?.name != game.i18n.localize(\"NAME.Research\") && !args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\"));","4fnTKgl0HW9ZrWyJ":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : \"average\"}}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"s\" : \"t\";\r\n this.script.scriptMessage(`${this.actor.name} lost 1 point of ${game.wfrp4e.config.characteristics[char]}`)\r\n this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})\r\n }\r\n})","4gkz3LR7CK1b8ulK":"return args.item?.system.attackType != \"ranged\" || this.actor.uuid != this.effect.sourceActor.uuid","4HN98hMdQJxM35pA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.gz2xy41OSVZ8YBgI\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n","4iuTz0uInAfMaoGl":"return args.skill?.name?.includes(game.i18n.localize(\"NAME.Language\")) || args.type == \"cast\"","4JVIy5xtVwvadoqv":"this.actor.details.move.run *= 2","4MQ7u4INxp51oyyR":"let characteristics = {\r\n \"ws\" : 25,\r\n \"bs\" : 10,\r\n \"s\" : 15,\r\n \"t\" : 15,\r\n \"i\" : 25,\r\n \"ag\" : 20,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 25,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [15, 15, 15, 15, 15, 10, 10]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Resolute\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","4OlwxU60UqKg81yb":"const target = args.actor;\r\n\r\nif (target.has(\"Ethereal\") || target.has(\"Corruption\")) {\r\n args.totalWoundLoss += 6;\r\n args.modifiers.other.push({label: this.effect.name, value: 6})\r\n}","4otpLq2TnDdgzpvc":"args.actor.system.details.man -= 3;","4pQW4WLyhjbZR85k":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","4QoxhoekgVeZcQA7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","4rb7LfMq9CTnlrpn":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += 5;\r\n args.modifiers.other.push({label : this.effect.name, value : 5})\r\n }\r\n}","4rhxLzau7jZ4SDxg":"await args.actor.addCondition(\"grappling\")\r\nawait args.actor.addCondition(\"entangled\")","4rTmV3TNxctUe0ly":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"bleeding\");\r\n}\r\n","4uAUUZmLgxBKSmXA":"if (args.totalWoundLoss > 0) \r\n this.effect.delete();","4XrAeL2DitxE8OaK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.0hn6UaKq8CoZP2zD\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","4ZR7p8G3OzOBWx0L":"return args.skill?.name !== game.i18n.localize(\"NAME.Endurance\");","52kbfuWrOh6dsTtd":"if (!this.actor.hasCondition(\"blinded\"))\r\n\tthis.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.flockOfDoom\" : true})","52mwb33mGrQjq89B":"return args.skill?.name != game.i18n.localize(\"NAME.Research\");","53HFDNuMnX1Aw1a4":"return [\"ws\", \"bs\", \"s\", \"ag\", \"dex\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","58rFc9HiBoX66J6p":"let sourceActor = this.effect.sourceActor;\r\nlet damage = args.totalWoundLoss;\r\nlet tb = sourceActor.system.characteristics.t.bonus\r\nargs.abort = `${this.effect.name}: Damage applied to ${sourceActor.name}`;\r\n\r\nlet message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})\r\n\r\nthis.script.scriptMessage(message.replace(`${tb} TB`, `${tb} × 2 TB`))\r\nargs.abort = true;","5DI6cHAg1LHo54Yv":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.actor.update({\"system.status.fortune.value\" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})\r\n this.script.scriptMessage(`Fortune point stolen from ${this.actor.name}`, {blind : true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n}","5dR7Erj3nwsxLAV7":"let characteristics = {\r\n \"ws\" : 35,\r\n \"bs\" : 10,\r\n \"s\" : 25,\r\n \"t\" : 30,\r\n \"i\" : 30,\r\n \"ag\" : 25,\r\n \"dex\" : 0,\r\n \"int\" : 15,\r\n \"wp\" : 35,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Intuition\", \"Leadership\", \"Lore (Warfare)\", \"Perception\"]\r\nlet skillAdvancements = [25, 15, 25, 25, 30, 20, 20]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Inspiring\", \"Luck\", \"Resolute\", \"Unshakable\", \"War Leader\"]\r\nlet trappings = [\"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5Fe1ELaS6Gnvy0Cj":"return args.skill?.name.includes(\"Channelling\") || args.type == \"channelling\" || args.skill?.name == game.i18n.localize(\"NAME.Charm\") || args.skill?.name.includes(\"Language (Magick)\") || args.type == \"cast\"","5IoYTyedCMYwt3ys":"args.fields.slBonus += 2;","5JvKJZPcd6Hz5zvn":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 20,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 15,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Cool\", \"Dodge\", \"Intimidate\", \"Leadership\"]\r\nlet skillAdvancements = [15, 15, 10, 5]\r\nlet talents = [\"Combat Aware\", \"Combat Reflexes\", \"Feint\", \"Resolute\"]\r\nlet trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\", \"Shield\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = this.effect.name + \" \" + updateObj.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5JWC0l3JEpOsqbR9":"let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 5,\r\n \"fel\" : 0\r\n}\r\nlet skills = [\"Dodge\", \"Perception\"]\r\nlet skillAdvancements = [10, 10]\r\nlet talents = [\"Flee!\", \"Marksman\"]\r\nlet trappings = [\"Hand Weapon\"]\r\nlet items = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n}","5lc1eHIYQNpSRWip":"if ([\"death\", \"necromancy\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.successBonus += 1\r\n}\r\nelse if([\"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value))\r\n{\r\n args.fields.modifier -= 10;\r\n}","5LdJCKfQem1AQK24":"\r\nif (!args.flags.howlingWarpGale)\r\n{\r\n args.fields.modifier -= 10;\r\n args.flags.howlingWarpGale = true; // prevent double application\r\n}","5M6IgCUncCwyxHok":"let etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += ` (Followers of Tzeentch)`;\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\nanimosity.system.specification.value = \"Followers of Nurgle\";\r\n\r\nlet roll = await new Roll(\"ceil(1d10 / 3)\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nlet mutations = [];\r\nlet msg = `Mutations Gained
`\r\nfor(let i = 0; i < roll.total; i++)\r\n{\r\n let item;\r\n let uuid;\r\n let result;\r\n if (i % 2 == 0)\r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatemental\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n else \r\n {\r\n result = await game.wfrp4e.tables.rollTable(\"mutatephys\", {hideDSN: true}, \"Tzeentch\")\r\n }\r\n uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n msg += `@UUID[${uuid}]{${item.name}}
`\r\n mutations.push(item.toObject());\r\n }\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", mutations.concat([etiquette, animosity]), {fromEffect : this.effect.id})\r\nthis.script.scriptMessage(msg);","5MxRDXzUBPfp2KKD":"args.options.useOnesSupportive = true;","5o1XiceC4rutjMms":"return !args.item?.name.includes(game.i18n.localize(\"NAME.Stealth\"))","5ScjIdRUOxblHdWS":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","5sI9iYh5j2nx2XyT":"return !([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","5sYpJkT2WXIe0gIZ":"const rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\n\r\nlet crewList = foundry.utils.duplicate(this.actor.system.passengers.list);\r\nlet selectedCrew = [];\r\n\r\nwhile (selectedCrew.length < rating && crewList.length) {\r\n selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);\r\n} \r\n\r\nfor (let member of selectedCrew) {\r\n let actor = game.actors.get(member.id);\r\n actor.applyBasicDamage(9, {\r\n damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL, \r\n minimumOne: true, \r\n loc: \"roll\", \r\n suppressMsg: false, \r\n hideDSN: false \r\n });\r\n}","5Zxc13GBaJaxCf48":"const visor = this.item.getFlag('wfrp4e', 'visor');\r\n\r\nif (!visor)\r\n args.fields.modifier -= 10;\r\nelse\r\n args.fields.modifier -= 20;","62Ky6bC1EnTllSJA":"if (this.effect.sourceActor.uuid != args.actor.uuid)\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.overcast.usage.other.current, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}));\r\n}","65o8pQj6oGNnXce6":"let ch = this.effect.getFlag(\"wfrp4e\", \"characteristic\")\r\nthis.actor.system.characteristics[ch].modifier += 10;","65xE9OV5sA1ZWT7j":"if (args.test.options.diceman && args.test.succeeded)\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n args.test.result.other.push(`${this.effect.name}: ${ones + args.test.successBonus + args.test.slBonus} SL`)\r\n}","6Aqq4F4Xui923sc6":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasColdBlooded = this.actor.has(\"Cold Blooded\")\r\nif (hasColdBlooded === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Cold Blooded Creature Trait and may reverse any failed Willpower based Tests.
\r\nIf they gain a Surprised Condition, this Condition is not lost the first time it should be (which is typically at the end of the Round or if they victim is attacked).
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","6BmvV9c03FkfisnE":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Use Ward provided by ${this.effect.name}?`,\r\n\tbuttons : {\r\n\t\tyes : {\r\n\t\t\tlabel : \"Yes\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tno : {\r\n\t\t\tlabel: \"No\",\r\n\t\t\tcallback: () => {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n})\r\n\r\nif (useWard)\r\n\targs.ward = 9;","6Mjy0jDqczA8BxhS":"return ![\"roll\", \"none\"].includes(args.fields.hitLocation)","6mpw9cGseG4W4eyd":"if (this.actor.system.status.advantage.value >= 2)\r\n{\r\n await this.actor.modifyAdvantage(-2);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","6MSodMuZ5xk2JJJ9":"if (!this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.effect.delete();\r\n}","6oSs8qKFNFz2lSmh":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value = 0;\r\n","6qJP0hpShEM43ohx":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Oceans)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Oceans)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lure of the Leviathan.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became @Condition[Stunned] by the sight.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"stunned\");\r\n}","6qUKKep5vhFYmo1J":"return args.type == \"channelling\" || args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\"))","6QZUX7ZrFxOzqI0b":"let regenerate = this.actor.items.getName('Regenerate')\r\n\r\nif (regenerate)\r\n{\r\n let effect = regenerate.effects.contents[0]\r\n let scriptData = effect.getFlag(\"wfrp4e\", \"scriptData\");\r\n \r\n scriptData[0].script = scriptData[0].script.replace(\"1d10\", \"1d10 * 2\")\r\n}","6tjn0RH4VyOPFneS":"return [\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","6U8xox4mBrn5eYIp":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"ablaze\")","6ubojp9zwbfJnosT":"args.actor.system.details.move.value += 1;","6uldpFvKOCoW92cC":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nitem = item.toObject()\r\n\r\nitem.system.specification.value = 10;\r\nitem.name += \" (Fire)\"\r\nsetProperty(item, \"flags.wfrp4e.breath\", \"fire\")\r\n\r\nItem.create(item, {parent : this.actor, fromEffect: this.effect.id})","6V3qHON3mcerlBlB":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","6Ws3ieQ7pG5poUyT":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Spellcasting Lore\", this.effect.name, \"\", Object.values(game.wfrp4e.config.magicLores));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","6xTtJEhRc4OjcDTf":"if (getProperty(args.data, \"system.status.fortune.value\"))\r\n{\r\n\tthis.script.scriptNotification(\"Cannot update Fortune\");\r\n\tdelete args.data.system.status.wounds.value;\r\n}","6XWJWOUQPgKMsFul":"return args.item?.system.attackType != \"ranged\" || args.flags.howlingWarpGale","6ZS1rQLkNvMDO0Fp":"let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nif (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n}\r\nelse if (args.test.isFumble && roll != 1)\r\n{\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n}\r\n\r\n","715G1Bf0haOHvmYQ":"return !(args.skill?.name == game.i18n.localize(\"NAME.Bribery\") || args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\")))","71DmrxCTKGYL4Z7X":"return [\"fel\"].includes(args.characteristic)","7ateEtT5HXg1vObY":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.AcnFuDKRemLI9ey7\", // Nose for Trouble\r\n \"Compendium.wfrp4e-core.items.Item.WoXShzaYkV5F6c48\", // Master of Disguise\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","7Ck0fkzE4WQ62qVe":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","7e8FgQUF2oANANmx":"return args.skill?.name == \"Melee (Brawling)\" || args.item?.weaponGroup?.value == \"brawling\"","7F3miqRA0ceMUBIu":"return args.characteristic != \"int\" || args.skill","7F6aGxZJjwxm5e5P":"if (args.test.result.castOutcome == \"failure\")\r\n{\r\n ValueDialog.create(\"Enter Wounds Lost to gain SL\", this.effect.name, \"0\").then(async value => {\r\n value = Math.clamped(value, 0, 3)\r\n if (value == 0)\r\n {\r\n return; \r\n }\r\n else if (Number.isNumeric(value))\r\n {\r\n this.script.scriptNotification(`Lost ${value} Wounds`)\r\n this.actor.modifyWounds(-1 * value)\r\n await this.item.system.toggleEquip();\r\n args.test.addSL(value);\r\n args.test.preData.other.push(`${this.effect.name}: +${value} SL`)\r\n }\r\n })\r\n}","7f6OsttTzE7Hvzfk":"if (this.actor.statuses.has(\"infighting\")) // Only add +10 if already infighting\r\n args.prefillModifiers.modifier += 10; \r\n\r\n\r\nargs.prefillModifiers.successBonus += 1; \r\n","7H6wYyJ6cpaoc2QQ":"return args.skill?.name == game.i18n.localize(\"NAME.Cool\");","7JW9t8AYSDkkzG2V":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) \r\n{ \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}","7n3SEAGRA5ESK8gV":"args.options.disarm = true;","7OmrMjaU48o2FEZi":"\r\nthis.actor.characteristics.t.bonus = 10\r\n\r\nthis.actor.details.move.value = 0;\r\nthis.actor.details.move.walk= 0;\r\nthis.actor.details.move.run = 0;","7ScfB4o1QhXnNUfq":"return ![\"int\", \"wp\"].includes(args.characteristic)","7szLG4VALuuy1cPm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"fatigued\")\r\n} ","7VAhXHov6pR1SkgD":"return args.item?.name == game.i18n.localize(\"NAME.Endurance\");","7w7QA7GBhzZ98OS0":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst result = await WFRP_Tables.rollTable(\"manann-mood-made-meaningless\", sin);\r\nlet match = result.text.match(/b>([^<]+)/i);\r\nlet key = match[1];\r\nlet roll = new Roll(\"5d10\");\r\nlet value = undefined;\r\n\r\nawait this.script.scriptMessage(result.text, {flavor: result.title});\r\n\r\nswitch (key) {\r\n case 'Stromfels Triumphant!':\r\n value = 0;\r\n break;\r\n case 'Stromfels Ascends!':\r\n await roll.evaluate();\r\n if (this.actor.system.status.mood.value > 0)\r\n value = -roll.total;\r\n else if (this.actor.system.status.mood.value < 0)\r\n value = roll.total;\r\n break;\r\n case 'No effect.':\r\n break;\r\n case 'Manann Provoked!':\r\n await roll.evaluate();\r\n value = -roll.total;\r\n break;\r\n}\r\n\r\nif (roll._evaluated)\r\n await roll.toMessage();\r\n\r\nawait this.effect.setFlag(\"wfrp4e-soc\", \"m4result\", {result: key, value});","7wBWUw05q0igh508":"// Imbibing this substance grants the user the Painless Creature Trait.\r\nconst hasPainless = this.actor.has(\"Painless\");\r\nif (hasPainless === undefined) \r\n{\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\");\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n this.script.scriptMessage(\r\n `
${this.actor.prototypeToken.name} has gained the Painless Creature Trait. This\r\n effect lasts for one hour, after which it dissipates and the full effect\r\n of all the imbiber's wounds come crashing down at once.
\r\nNote that this does not prevent the user from acquiring a Critical\r\n Wound or dying from one. It merely allows them to ignore most\r\n of their effects.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true})\r\n}","7WR2hJjHPhHhHxAq":"let poisoned = args.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptNotification(`Removed ${poisoned.conditionValue} Poisoned Conditions`)\r\n poisoned.delete(); \r\n}\r\nelse\r\n this.script.scriptNotification(`No Poisoned Conditions`)","7ZoFUMDG2WJd8RMg":"this.script.scriptMessage(`Claimed ${this.effect.name} Bonus`);","84IB8CWa55XzoAkv":"return ([\"Animal Care\", \"Charm Animal\"].includes(args.item?.name) || args.item?.name.includes(\"Ride\") || args.item?.name.includes(\"Animal Training\"))","86ivOsBQAuu0UmFg":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"hard\"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\");\r\n}","87rrZ3ojHrXa3lCn":"this.actor.modifyWounds(1)","8AoA4bnstBtglRGZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8araLuwmBq8GKEw3":"let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpoints && !current.ignored) ? current.value : 0), 0)\r\n\r\nif (APIgnored)\r\n{\r\n args.modifiers.ap.ignored += APIgnored\r\n args.modifiers.ap.details.push(`${this.effect.name}: Ignore AP with Weakpoints (${APIgnored})`)\r\n}","8ByuHnUZ4RNTdGVv":"let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\nlet tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\nif (!this.actor.has(\"Undead\") && !this.actor.has(\"Daemonic\")) \r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), { appendTitle: \" - \" + this.effect.name, fields: { difficulty: \"average\" }, context: { failure: `Lost ${strLoss} Strength and ${tghLoss} Toughness` } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n this.actor.update({ \"system.characteristics.s.initial\": this.actor.system.characteristics.s.initial - strLoss, \"system.characteristics.t.initial\": this.actor.system.characteristics.t.initial - tghLoss })\r\n }\r\n })\r\n\r\n}\r\nelse {\r\n this.script.scriptNotification(`${this.actor.name} is immune to ${this.effect.name}`)\r\n}\r\n","8fefDfiYKFOWdPER":"args.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}});","8g2iitsgaJarKQpr":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","8gCja0mfKt4nYVZc":"args.fields.slBonus += 2 ","8GyJgdHVBaLrHCY8":"let type = this.item.getFlag(\"wfrp4e\", \"breath\")\r\nlet types = {\r\n none : \"None\",\r\n cold : \"Cold\",\r\n corrosion : \"Corrosion\",\r\n fire : \"Fire\",\r\n electricity : \"Electricity\",\r\n poison : \"Poison\",\r\n smoke : \"Smoke\",\r\n various : \"Various\"\r\n}\r\nif (!type)\r\n{\r\n type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, \"Choose Breath\"))[0]?.id;\r\n this.item.updateSource({\"flags.wfrp4e.breath\" : type})\r\n}\r\n\r\nif (!this.item.name.includes(\"(\") && types[type] && type != \"none\")\r\n{\r\n this.item.updateSource({name : this.item.name += ` (${types[type]})`, \"system.specification.value\" : this.item.system.specification.value.replace(\"(Type)\", \"\").trim()})\r\n}","8hIyWDyfbgGAig65":"return [\"ws\", \"bs\", \"s\", \"t\", \"ag\", \"dex\"].includes(args.characteristic)","8jvEVPUCg3rKG48Y":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9fq6p9Q6H02LjaSi\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","8K9tpCwvFC9INk5V":"if ([\"t\", \"wp\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier += 10;\r\n}\r\nelse if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n\targs.fields.modifier -= 10;\r\n}","8LmUVQxOwTLSeabg":"return args.data.targets.length > 0 || !args.weapon?.system.qualities.value.find(i => i.name == \"shield\") // Should count even if they don't have the skill","8N3Uqjq1ZxPxo4pk":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Lore\"))","8noxHUQKR55Kx1YN":"this.actor.system.status.corruption.max += 1","8oE0DTzz0krOfFlV":"args.item.system.qualities.value.push({name : \"magical\"})\r\nargs.item.system.qualities.value.push({name : \"impact\"})\r\n","8RNziYGGb4sp3BGQ":"if (!args.test.weapon?.name.includes(\"Drakefire\"))\r\n{\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\");\r\n args.test.result.misfireDamage = (0, eval)(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.weapon.system.Damage);\r\n}","8rq4GL5d5nCn4kO7":"let caster = this.effect.sourceActor\r\nif (caster)\r\n{\r\n let healed= caster.characteristics.wp.bonus\r\n this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}","8ShLVT0bK1eQpinj":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.k00PimCWkff11IA0\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","8ThudCYRqkjQIwJH":"if (args.opposedTest.attackerTest.result.critical)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","8TRiAJ8thIKE4IoL":"\r\nlet SL = Number(getProperty(this.item, \"flags.wfrp4e.sourceTest.result.SL\") || 1)\r\n\r\nargs.actor.characteristics.i.modifier += 10 * SL\r\nargs.actor.characteristics.ag.modifier += 10 * SL","8tyMXDfHR8AJBdDu":"let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce((ap, layer) => ap + layer.value, 0);\r\n\r\nif (weakpointsAP > 0)\r\n{\r\n args.modifiers.ap.ignored += weakpointsAP;\r\n args.modifiers.ap.details.push(`${this.effect.name} - Ignore Weakpoints (${weakpointsAP})`);\r\n}","8vpAtJ93GIeye1qj":"return args.type == \"cast\"","8WeYU5e5LN9UeWFs":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Range)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.range.value = \"2 * \" + args.item.system.range.value\r\n }\r\n}","8wG9l4T9fc1bM0TN":"let item = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.kJNAY1YRaCy9IgmT\")).toObject();\r\nitem.system.specification.value = 1;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","8WJsecxdndaHRxxS":"this.actor.status.addArmour(this.actor.characteristics.wp.bonus, {source: this.effect, magical : true})","8xqYrBIf1Zhlwizg":"const repaired_message = `Finished raisint the anchor.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'vhard';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","8yBr6VbdKcrWUuqw":"this.actor.characteristics.i.value= \"-\"\r\nthis.actor.characteristics.int.value= \"-\"\r\nthis.actor.characteristics.wp.value= \"-\"\r\nthis.actor.characteristics.fel.value = \"-\"","8ZAUBSH9CM9OTpTL":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"easy\"}});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n this.actor.addCondition(\"stunned\") \r\n}\r\nelse if (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\", 2);\r\n}","8zTkDVziBPaNbMQX":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, \"Choose 6 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, \"Choose 9 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","91S2GnBFYFbxmOCK":"this.actor.characteristics.s.bonus += 1\r\nthis.actor.characteristics.s.calculationBonusModifier -= 1","93K85NnVwjVNXlZq":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Trade\"));","94eDAi6pkMhG3Ex9":"this.actor.deleteEmbeddedDocuments(\"ActiveEffect\", [this.effect.id]);","956dUb5sd6OtbWZR":"args.fields.successBonus++;","96Y1yIH1lRjTs5hL":"if (args.test.succeeded)\r\n return\r\n\r\nif (args.test.characteristicKey == \"wp\")\r\n this.actor.addCondition(\"broken\")","98nKfcimlaPeM9h5":"await this.actor.addCondition(\"bleeding\")\r\nawait this.script.scriptMessage(await this.actor.applyBasicDamage(10, {suppressMsg : true}));","9A7rYY3FKi5XLihG":"fromUuid(\"Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79\").then(item => {\r\n let data = item.toObject();\r\n data.system.tests.value = data.system.tests.value.replace(\"coins\", \"metal objects\");\r\n data.system.description.value += \"This Talent also extends to any metal object because of Metallic Affinity
\"\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n})","9bJGJrLqslV5lBya":" return args.characteristic == \"bs\"","9EVj4bmZJex45Mt7":"return args.skill?.name != game.i18n.localize(\"NAME.Athletics\");","9eWR4mdaoCSQawDT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","9fK07tqqZyPg7dpx":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptNotification(\"Gained a Festering Wound\")\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()])\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"Avoided a Festering Wound\")\r\n}\r\n","9HWEDsnNxSykqbF5":"args.actor.system.details.move.value += 3;\r\nargs.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);\r\nargs.actor.system.details.price.gc *= 1.1;","9JnPK1jNUEso7Pv8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS\")\r\nlet data = item.toObject();\r\ndata.name += ` (Smell)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9MDi3ok9gPwtbALf":"args.actor.details.move.value /= 2","9MwRUzRinhq1IjhG":"args.actor.addCondition(\"grappling\");","9nroaZDkW3WXNkB7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.4MJJCiOKPkBByYwW\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","9ob2lPnk3PDot9Tx":"this.actor.addCondition(\"blinded\", this.effect.sourceTest.result.SL)","9qWUuEF8F5nehF1y":"args.item.system.qualities.value = args.item.system.qualities.value.concat([{name : \"magical\"}, {name : \"unbreakable\"}])\r\nargs.item.system.damage.value += ` + ${this.effect.sourceActor.system.characteristics.wp.bonus}`","9RFoasDcFnYZ1txR":"return args.skill?.name == game.i18n.localize(\"NAME.Perception\");","9VfeubiCV83LN9iY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.name += ` (When Charging)`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","9WZa63lr0K3SsP4G":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})\r\n\tthis.script.scriptNotification(\"Applied after effects\");\r\n}","9Yn9uViEjcuaESJ2":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.name += \" (No AP)\"\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","9ZFPDCk8M2TQxh7x":"args.fields.modifier += 20\r\n","a02tlRCXpaoaDjSN":"let careers = await warhammer.utility.findAllItems(\"career\", \"\", true);\r\ncareers.forEach(c => {\r\n if (!c.id)\r\n {\r\n c.id = c._id;\r\n }\r\n});\r\nlet choice = await ItemDialog.create(careers, 1, \"Choose Double Life Career\");\r\nif (choice[0])\r\n{\r\n let career = await fromUuid(choice[0].uuid);\r\n let data = career.toObject();\r\n setProperty(data, \"flags.wfrp4e.doubleLife\", true);\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n this.effect.updateSource({name : this.effect.name + ` (${data.name})`})\r\n}\r\n","A0OK0qAMmnf8iNJf":"if (args.test.result.SL < 0)\r\n{\r\n this.script.scriptMessage(`Gained ${Math.abs(args.test.result.SL)} Corruption points`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (args.test.failed && this.actor.type == \"character\")\r\n {\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})\r\n }\r\n}","a0YU3whUm16wGBNu":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","A1odAcuRbq9797ZB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Polearm)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nApply damage with ${this.effect.name} to attacker?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n this.script.scriptMessage(await args.attacker.applyBasicDamage(this.actor.system.characteristics.wp.bonus, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}));\r\n }\r\n}","cK1Jysfu5IMUUH0C":"if (!args.ward)\r\n{\r\n\targs.ward = (this.effect.getFlag(\"wfrp4e\", \"ward\") || 0);\r\n\tif (args.wardRoll >= args.ward && args.ward > 3)\r\n {\r\n let newWard = Math.max(3, args.ward - 1)\r\n this.script.scriptMessage(\"Ward improved to \" + newWard)\r\n this.effect.setFlag(\"wfrp4e\", \"ward\", newWard)\r\n }\r\n\r\n}","CkE8NZOhzPkuRrKJ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MnMZv7ZXoRqoH9dS\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])\r\n\r\n\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","ckKbPfaTiQ2qBZdR":"console.log(\"DAMAGE\", this)","CM43kvw5mIIE1OsB":"let key = this.item.system.location.key\r\n\r\nlet lostFingers = this.actor.flags.useless[key] || 0;\r\n\r\nlostFingers += 1\r\n\r\nthis.actor.flags.useless[key] = lostFingers;\r\n\r\nif (lostFingers >= 4)\r\n{\r\n\tthis.actor.flags.useless[key[0] + \"Arm\"] = true;\r\n}","CMUFtmNA1kkD1ay7":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","CoImIH9OCMx9DfQZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nbhn2wX35b7Jrcbg\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","cOuukVo8WakDZIUj":"args.prefillModifiers.slBonus += 1","CPQoK7NjzOwVTFXS":"for(let effect of this.actor.effects.filter(e => e.isCondition))\r\n{\r\n if (effect.isCondition)\r\n {\r\n effect.delete();\r\n }\r\n}","cqYgZQk1C3kMARy5":"return args.skill?.name !== game.i18n.localize(\"NAME.Haggle\");","CS6O7UUjQcUJoOUP":"if (args.test.failed)\r\n {\r\n let SL = Number(args.test.result.SL)\r\n if (SL <= -2 && SL > -4)\r\n this.actor.addCondition(\"stunned\")\r\n else if (SL <= -4 && SL > -6)\r\n this.script.scriptMessage(this.actor.prototypeToken.name + \" must make a Willpower Test or fall @Condition[Prone].\")\r\n else if (SL <= -6)\r\n this.actor.addCondition(\"unconscious\")\r\n }","csLKDJKZaUK9vwLT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7rBhIRo96Mydo0Cv\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Back\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","ct6WGaRMfrcnHhyv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","cTYNaKbepMwqYsZ8":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","cUFCL02JoaZObRcX":"let sl = this.effect.sourceTest.result.slOver;\r\n\r\nthis.actor.system.characteristics.s.modifier += sl * 10;\r\nthis.actor.system.characteristics.s.calculationBonusModifier -= sl;","cUnbADgOQ4fMKgrH":"let group\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\");\r\nlet data = item.toObject();\r\n\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tgroup = this.item.parenthesesText\r\n}\r\n\r\nelse \r\n{\r\n\tgroup = await ValueDialog.create(\"Enter Hatred Group\", \"Hatred Group\")\r\n\r\n\tthis.item.updateSource({name : this.item.name + ` (${group})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"Group\", group)})\r\n\tthis.effect.updateSource({name : this.effect.name + ` (${group})`})\r\n}\r\n\r\n\r\ndata.name = data.name.replace(\"Target\", group);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","cuqCtQsfLBBAGjnu":"args.fields.slBonus -= (Number(this.item.specification.value) || 0)","cV9JiAgUPOeUHKnS":"args.fields.successBonus++;\r\nif (args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\"))\r\n{\r\n args.fields.modifier += 10;\r\n}","CW5Vlr57OaMkKJ8Q":"if (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.actor.modifyAdvantage(-3);\r\n this.script.scriptNotification(\"Advantage Subtracted\")\r\n}\r\nelse \r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet test = await this.actor.setupTrait(this.item)\r\nawait test.roll();","CWNGrg7se91RC95g":"if (args.totalWoundLoss > 0) {\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Moderate Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(`${this.effect.name}: \r\n @Corruption[moderate]{Moderate Exposure to Corruption}
\r\n ${args.actor.prototypeToken.name} must take an \r\n Corruption (Moderate) Test`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n}","cYPIXzl86a3LFsTE":"if (args.item.type == \"spell\")\r\n{\r\n args.item.cn.value -=2\r\n if (args.item.cn.value < 0)\r\n args.item.cn.value = 0\r\n}","cysQDjlDzT8HdNeo":" args.prefillModifiers.slBonus += 1","d29mu8vRt9AQUm0L":"this.actor.characteristics.i.value = Math.min(this.actor.characteristics.i.value, 10);\r\nthis.actor.characteristics.i.bonus = 1;\r\n\r\nfor(let skill of this.actor.itemTypes.skill.filter(i => i.system.characteristic.value == \"i\"))\r\n{\r\n skill.system.total.value= Math.min(skill.system.total.value, 10)\r\n}","D5XmzrUGFa1JN0cl":"args.prefillModifiers.modifier += 10\r\n\r\n","d6mVm08o8SeklAcW":"this.actor.system.status.ward.value = 9;","d9iU08yvqcffF026":"return args.weapon.system.usesHands.includes(this.effect.getFlag(\"wfrp4e\", \"location\"))","dAMtbn3uQwF8KpKU":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\");","DANLE5HxrkTNelhl":"args.wounds += 4;","DBafsY1HrclJRTtA":"return args.type != \"cast\"","dbHv7dAXgB2Oy1Fg":"let nbBleeding = 1 + Number(this.effect.sourceTest.result.SL);\r\nthis.actor.removeCondition(\"bleeding\", nbBleeding);\r\nconsole.log(this.actor);\r\n","dbOSvpgcPjsc2uvq":"let menacing = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0hn6UaKq8CoZP2zD\")).toObject();\r\nlet sense = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\n\r\nsense.name += \" (Sight)\";\r\nsense.system.tests.value = sense.system.tests.value.replace(\"Sense\", \"Sight\")\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [menacing, sense], {fromEffect : this.effect.id})","dbYjr4oG67Z880To":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warpfire-thrower-fumble]\")\r\n}","DcSJNRBXE9ZBBY7T":"this.actor.addCondition(\"blinded\", Math.max(0, this.effect.sourceTest.result.SL))","dcwY8dCd3PNCEzk6":"let current = this.actor.status.fate.value\r\n\r\nthis.actor.update({\"system.status.fate.value\" : current + 1})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fate points increased from ${current} to ${current + 1}`)","Dew3Ks9yC4DynSMi":"return args.characteristic === \"s\" || args.characteristic === \"t\" || args.weapon?.system?.attackType === \"melee\";","dfEgat3jz4EtWszH":"return args.skill?.name == \"Stealth (Urban)\"","dfnCK8jCPXNLM7Gh":"let aoeDamage = this.effect.sourceTest.result.damage - 5 // Easily handle magic missile damage by just subtracting 5 from the item's (which has +10 base)\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - Ablaze`})\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","dh5mAlaOOLCBC0YQ":"args.actor.system.details.length.value += args.actor.system.details.length.value * 0.1;","DHxUKY9LMyifFgCi":"return args.skill?.name == \"Trade (Apothecary)\" || args.skill?.name == \"Trade (Alchemist)\"","DhZqJso1JWYtGrKk":"this.actor.addCondition(\"ablaze\")\r\nlet damage = this.effect.sourceTest.result.damage + this.effect.sourceTest.result.additionalDamage\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))","dIxYt421K010eogY":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","dk02qSJfJaIo3Geh":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\");\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.ag.value\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","dkiNmwFXztIVbuxg":"let currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer || currentCareer.system.talents.includes(game.i18n.localize(\"NAME.Frenzy\")))\r\n{\r\n return\r\n}\r\n\r\ncurrentCareer.system.talents.push(game.i18n.localize(\"NAME.Frenzy\"));","dkY7WRYjFVh8GB0m":"return ['ws', 'bs', 'ag'].includes(args.characteristic)","DL9vYNft9aXdV2aW":"let tooth = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\ntooth = tooth.toObject()\r\ntooth.system.specification.value = 3\r\ntooth.system.qualities.value = [{name : \"magical\"}]\r\n \r\nlet claw = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nclaw = claw.toObject()\r\nclaw.system.specification.value = 4\r\nclaw.system.qualities.value = [{name : \"magical\"}]\r\nclaw.name = \"Claw\"\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [tooth, claw], {fromEffect : this.effect.id})","dM449AU0FQRnOc3l":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n args.abort = \"Missed - Headless\"\r\n}","dM8FbRH2V8CpOkXw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.QluSTTTq3viHJJUh\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Ribs\";\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","DmbWR9s5I8LHBwxB":"let column = await ValueDialog.create(\"Select the column to roll on to determine Beast Head\", \"Select Column\", \"\", [\"Undivided\", \"Khorne\", \"Nurgle\", \"Slaanesh\", \"Tzeentch\"]);\r\n\r\nif (column)\r\n{\r\n let result = await game.wfrp4e.tables.rollTable(\"beasthead\", {}, column);\r\n this.script.scriptMessage(`${result.title}
${result.result}`);\r\n let uuid = `Compendium.${result.object.documentCollection}.${result.object.documentId}`;\r\n let item = await fromUuid(uuid);\r\n if (item)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n this.item.delete();\r\n }\r\n}","DMQ0taEpBUJU5njV":"args.actor.status.fortune.value = 0","DpdSEHM6NMN1ey6h":"if (parseInt(this.item.system.specification.value) > 0)\r\n{\r\n\tthis.actor.system.status.ward.value = parseInt(this.item.system.specification.value);\r\n}","DqJFo74trI916qXN":"let fatigued = args.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n setProperty(fatigued, \"flags.wfrp4e.scriptData\", getProperty(fatigued, \"flags.wfrp4e.scriptData\").filter(s => s.trigger != \"dialog\"))","dqvHDMlcitLx1pUx":"this.actor.system.details.move.value /= 2;","DsE6rTSzxEn6uWMz":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{ \r\n await this.actor.addCondition(\"blinded\");\r\n await this.actor.addCondition(\"fatigued\")\r\n} ","dSmRhZ6o1bUcOSF9":"return args.skill?.name != game.i18n.localize(\"NAME.Leadership\");","dsXGavzXLerXR8Xg":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && !args.skill?.name.includes(game.i18n.localize(\"NAME.Row\"))","dt85W8pzZ09w1QLi":"if (this.actor.sameSideAs(this.effect.sourceActor))\r\n args.fields.slBonus += 2;\r\nelse\r\n args.fields.slBonus -= 2;","dtFvpY96RPzNnphq":"return !(args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\"))","DTiHS6RfwhF4THbf":"return args.skill?.name != game.i18n.localize(\"NAME.Drive\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Ride\"));","dULCkRxtisuzQyuK":"if (args.options.condition) \r\n this.effect.delete();","DuM5l2Yb4bdvDeaG":"return args.skill?.name != \"Athletics\"","DVlZGbiuMIHEQOnM":"if (this.actor.getFlag(\"wfrp4e\", \"isAttached\")) \r\n{\r\n\tlet roll = await new Roll(\"1d10\").roll()\r\n\tawait roll.toMessage(this.script.getChatData());\r\n\tif (roll.total == 9 || roll.total == 10)\r\n\t{\r\n\t this.script.scriptMessage(`${this.actor.name} attached to ${this.actor.getFlag(\"wfrp4e\", \"isAttached\")} gorges and falls off.`)\r\n\t await this.actor.unsetFlag(\"wfrp4e\", \"isAttached\") \r\n\t}\r\n }","DWBxvzfWGcG7PVNP":"let letter = this.item.system.location.key[0]; // \"l\" or \"r\";\r\n\r\nthis.item.updateSource({\"system.location.key\" : letter + \"Finger\"})\r\n\r\n// We want the location to be Right or Left Hand, but the key to be rFinger or lFinger","dWr3tkFoIzsAgelu":"let injury = this.effect.itemTargets[0]\r\nif (injury && this.effect.sourceTest.result.outcome == \"success\") {\r\n let days = new Roll(injury.system.duration.value).roll( {async: false} ).total\r\n let num = 1 + Number(this.effect.sourceTest.result.SL);\r\n let roll = await new Roll(num+'d10').roll({async: false})\r\n await roll.toMessage(this.script.getChatData())\r\n let newDays = Math.max(days - roll.total, 1)\r\n this.actor.updateEmbeddedDocuments(\"Item\", [{_id: injury.id, 'system.duration.value': newDays} ])\r\n let message = \"Injury reduces to \"+newDays+\" (-\" + roll.total + \") instead of \"+days\r\n this.script.scriptMessage(message)\r\n}\r\n","dwSgcFxKN3S0hLJL":"return args.skill?.name != \"Melee (Brawling)\" && args.item?.weaponGroup?.value != \"brawling\"","dXGosSxdoYbET2O8":"await this.actor.addCondition(\"fatigued\");\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"))\r\n\r\nawait test.roll();\r\n\r\nif (!test.succeeded)\r\n{\r\n await this.actor.addCondition(\"fatigued\");\r\n await this.actor.addCondition(\"broken\");\r\n}","DxQnamsb2AuW0p2e":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","dxxDFXNNqUsuMyUD":"args.fields.slBonus += 1","DyZ1jH88EAp1ueOK":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\ndata.system.location.value = data.system.location.value.replace(\"Arm\", \"Wrist\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n","dZ4c5pKDqQV02aIK":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` + parseInt(this.effect.sourceTest.result.SL)`\r\n}","Dzi2CKpYapRGwNVr":"if (args.actor.system instanceof StandardActorModel) {\r\n args.actor.addCondition(\"unconscious\");\r\n}","e0TuMgYuI7ZtGoQr":"args.applyAP = false;\r\n\r\nawait args.actor.addCondition(\"ablaze\", 2);\r\nawait args.actor.addCondition(\"prone\");","E1vUepgop09FF5wy":"if (this.actor.system.status.advantage.value == 0)\r\n{\r\n return this.script.scriptNotification(\"Not enough Advantage!\", \"error\")\r\n}\r\n\r\nlet hatred = await fromUuid(\"Compendium.wfrp4e-core.items.Item.aE3pyW20Orvdjzj0\")\r\nlet frenzy = await fromUuid(\"Compendium.wfrp4e-core.items.Item.yRhhOlt18COq4e1q\");\r\n\r\nif (this.actor.system.status.advantage.value >= 3)\r\n{\r\n this.script.scriptNotification(`Adding ${frenzy.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [frenzy])\r\n}\r\nelse if (this.actor.system.status.advantage.value >= 1)\r\n{\r\n let data = hatred.toObject();\r\n data.system.specification.value = \"Close Combat opponents\"\r\n this.script.scriptNotification(`Adding ${hatred.name}`)\r\n this.actor.setAdvantage(0)\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n}","E1Xo4RVuN1YRRxg7":"return args.item?.attackType != \"ranged\"","E2VfOVuju67qO3VL":"let blinded = this.actor.hasCondition(\"blinded\");\r\nif (blinded.getFlag(\"wfrp4e\", \"nightshroud\"))\r\n{\r\n blinded.delete()\r\n}","e34s1XxHckAWfwHt":"if (args.test.options.beatBlade && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n args.test.result.other.push(`${this.effect.name}: Opponent loses ${Number(args.test.result.SL) + 1} Advantage`)\r\n}","E3om295BMQojnM2F":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n fatigued.delete();\r\n this.script.scriptNotification(\"Removed Fatigued\")\r\n}","E4CHDe1xfmcV3oGv":"return args.skill?.name == game.i18n.localize(\"NAME.Navigation\");","e4HotRnEiyXR0pIu":"this.actor.applyEffect({effectUuids : this.item.effects.contents[1].uuid})","E6DMqfDeczqmVMFV":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\n\r\nawait test.roll();","E6v4YZrvFikbdXoO":"const locations = [];\r\n\r\nfor (let [key, loc] of Object.entries(args.AP)) {\r\n if (loc.layers?.some(i => i.metal))\r\n locations.push(key);\r\n}\r\n\r\nthis.actor.status.addArmour(1, {source: this.effect, magical: true, locations})","E7D4bxz8gy4e1wL7":"if ([\"Stealth (Rural)\", \"Track\", \"Outdoor Survival\", \"Swim\", \"Perception\", \"Intuition\"].includes(args.item?.name))","e7IxnxePdXSy6L4E":"if (args.opposedTest.result.hitloc.value == \"head\")\r\n{\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} receives a @Table[crithead]{Critical Wound} if one was not caused already.`)\r\n}","EaSNOmXUxAkUHnm5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","eAtqyBd1HsDWuBuI":"this.actor.system.characteristics.fel.modifier -= parseInt(this.item.system.location.value) || 1","Eay7GpDyfsEE40jT":"if (args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"ablaze\")\r\n}","eb69QPmNQEJXtk4l":" return args.characteristic != \"bs\"","ebDQH0MdGAG02CHl":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SYjWiKDzMS6CtROJ\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (this.item.system.location.key == \"rArm\")\r\n{\r\n\tdata.system.location.value = \"Right Hand\"\r\n\tdata.system.location.key = \"rHand\"\r\n}\r\nelse if (this.item.system.location.key == \"lArm\")\r\n{\r\n\tdata.system.location.value = \"Left Hand\"\r\n\tdata.system.location.key = \"lHand\"\r\n}\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data])","EBNrA6FNX4d05EUx":"return !args.options.crewTest;","EC8cZmqrE095cDc2":"const actor = args.actor;\r\n\r\nif (actor.itemTypes.skill.find(s => s.name === \"Lore (Riverways)\")) {\r\n const loreTest = await actor.setupSkill('Lore (Riverways)', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'hard'},\r\n characteristic: 'int',\r\n });\r\n await loreTest.roll();\r\n\r\n if (loreTest.succeeded) {\r\n loreTest.result.other.push(`${actor.name} recognizes lures of Lurkerfish.`);\r\n loreTest.renderRollCard();\r\n return;\r\n } \r\n}\r\n\r\nlet test = await actor.setupSkill('Cool', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 'wp',\r\n});\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n test.result.other.push(`${actor.name} became beguiled by the sight and unable to perform any action except moving towards the light.`);\r\n test.renderRollCard();\r\n actor.addCondition(\"unconscious\");\r\n}","ed7Sud9HM3uB2j6b":"ChatMessage.create({content : \"Yield or die!\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2;\r\nthis.script.scriptNotification(\"Adding \" + data.name);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});\r\ngame.wfrp4e.utility.postFear(2, this.actor.prototypeToken.name)","EDAMEOzdBfkoKHxP":"return args.skill?.name !== game.i18n.localize(\"NAME.Navigation\");","EdTChmSouS0MSmk5":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.script.scriptMessage(\"Can perform an Action or Move (choose one)\")\r\n}\r\nelse \r\n{\r\n this.script.scriptMessage(\"Cannot perform an Action or Move this round\") \r\n}","egDtqMxe3iekc6hv":"let trait = args.opposedTest.attackerTest.item\r\nlet woundLossEffect = this.item.effects.get(\"7Amhi75wLv0PvGjd\")\r\nif (trait && trait.name.includes(\"Bite\") && woundLossEffect)\r\n{\r\n args.actor.applyEffect({effectUuids : woundLossEffect.uuid})\r\n}","eGQAyzCFZAEQhyJl":"const roll = new Roll(\"2d10\");\r\nawait roll.evaluate();\r\nconst money = game.wfrp4e.market.addMoneyTo(this.actor, `${roll.total}b`);\r\nawait this.actor.updateEmbeddedDocuments(\"Item\", money);\r\nthis.script.message(game.i18n.format(\"SCRIPT.Silvertide\", {name: this.actor.name, pennies: roll.total}));","EGWF3LHav3e2zFL4":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Ranged\")) || args.item?.isRanged || args.item?.name == game.i18n.localize(\"NAME.Charm\");","eh1J3s0s4A2AxoFp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.8pVzgPkgWpTJvfhG\");\r\nlet data = item.toObject();\r\ndata.name += \" (Enemy)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","eHgk3HZ6eyLFTZ9o":"return !args.item?.system.magicMissile?.value && !args.item?.system.attackType","eHRv7f2BTtle6Y1K":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.sJ3yX1kvzu2hgNq5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EiLaZW4b4ypw5sLV":"// can't use Damage application type because that checks if wounds were dealt\r\nargs.actor.applyEffect({effectUuids : this.item.effects.contents[0].uuid})","EJaBfqADqlo92Fx6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oGbDwnLOn3isPJpO\")\r\nlet data = item.toObject();\r\ndata.name += \" (To Be Determined)\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","EJObiSth3WdcJOXN":"if (args.test.characteristicKey == \"wp\" && args.test.failed && args.test.result.SL <= -3)\r\n{\r\n this.script.scriptNotification(\"Adding Prone\");\r\n this.actor.addCondition(\"prone\")\r\n}","ekjJQHyMbZT2vqdc":"let uses = this.item.getFlag(\"wfrp4e\", \"uses\") || 0;\r\nuses++;\r\nthis.script.scriptNotification(`Used ${uses} times`)\r\nthis.item.setFlag(\"wfrp4e\", \"uses\", uses);\r\nif (uses >= 3)\r\n{\r\n\tthis.effect.update({\"flags.wfrp4e.applicationData.type\" : \"other\"})\r\n\tthis.script.scriptNotification(`Used up`);\r\n}\r\n","EKkdyp51Wf4csw2B":"return this.actor.statuses.has(\"frenzy\");","EmmG49pMOPHRwDzR":" let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)\r\n","EmXwcuycEH8slEn5":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","ENGmwaItRXO5s0XY":"await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 3)\r\nthis.script.scriptMessage(`Heals ${this.actor.system.characteristics.t.bonus * 3} Wounds`)\r\n\r\nthis.actor.hasCondition(\"bleeding\")?.delete()\r\nthis.actor.hasCondition(\"fatigued\")?.delete()\r\n","EpdMj9d9SYPeP44q":"return args.characteristic != \"ag\" && args.item?.id != this.item?.id","ePPgxQOqL1Uhz2k9":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Bow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `
\r\n Add Option?\r\n
\r\nFinished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","FUgCtIoj1Stgqxt7":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"t\", \"dex\"].includes(args.characteristic)","fve7tiyF5X9B7mHJ":"args.fields.slBonus -= 2;","Fvlc4RkeF4dHjW3m":"let caster = this.effect.sourceActor\r\nif (caster && (this.actor.has(game.i18n.localize(\"NAME.Undead\")) || this.actor.has(game.i18n.localize(\"NAME.Daemonic\")))) {\r\n let wp = caster.system.characteristics.wp.value\r\n if (wp > this.actor.system.characteristics.t.value) {\r\n if (this.actor.has(game.i18n.localize(\"NAME.Unstable\"))) {\r\n this.actor.update({ \"system.status.wounds.value\": 0 })\r\n this.actor.addCondition(\"dead\")\r\n }\r\n else {\r\n fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\").then(item => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], { fromEffect: this.effect.id })\r\n ChatMessage.create({ content: `Added Unstable to ${this.actor.prototypeToken.name}`, speaker: { alias: caster.name } })\r\n })\r\n }\r\n }\r\n}","Fwk8WA8NfRivLFWJ":"return args.skill?.name === \"Entertain (Singing)\";","FX8ILw0VgbNxkObA":"const uuid = \"Compendium.wfrp4e-core.items.Item.mCvZAj5F6hfUZhzR\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.name = this.effect.name;\r\ndata.type = 'trapping';\r\ndata.system.trappingType = {value: 'clothingAccessories'};\r\ndata.system.equipped = {value: true};\r\n\r\nconst effectData = this.effect.sourceItem.effects.find(e => e.disabled).toObject();\r\neffectData.disabled = false;\r\neffectData.system.transferData.equipTransfer = true;\r\ndata.effects = [effectData];\r\n\r\nconst dagger = await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","FXuyiJoXdAh6WhRK":"return args.skill?.name == \"Ride (Horse)\" && game.combat?.active","FXwfqF0jpXlBQ9Y3":"return args.item?.system?.isMelee && this.actor.attacker","fY0TsQwnU14fdPl2":"args.fields.modifier += 30;","fYLSe6CrYciap5y8":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 10,\r\n \"t\" : 10,\r\n \"i\" : 0,\r\n \"ag\" : 10,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Consume Alcohol\", \"Row\", \"Sail\", \"Swim\"]\r\n let skillAdvancements = [10, 10, 10, 10]\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","FYUPfYyTYZkxRLFT":"return ![\"NAME.Endurance\", \"NAME.Cool\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","FZFOC7bip0oiWEzk":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","fzTB7t3x4bLmAXji":"let roll = await new Roll(\"1d10 + 1\").roll()\r\nawait roll.toMessage(this.script.getChatData());\r\nthis.script.scriptNotification(`Healed ${roll.total} Wounds`)\r\nthis.actor.corruptionDialog(\"moderate\")\r\nawait this.actor.modifyWounds(roll.total)","g07HI7vyqiFXPB0o":"// A Drinker must take a Difficult (-10) Endurance Test.\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"difficult\"}})\r\nawait test.roll()\r\n// If they fail, they acquire 2 Poisoned Conditions. \r\nif (test.failed) \r\n{\r\n this.actor.addCondition(\"poisoned\", 2)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained 2 @Condition[Poisoned] Conditions.
\r\nAny being with the Bestial Creature Trait that bites them and takes damage will not bite them again during a hostile encounter, though the creature may still attack them in other ways.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\n // If they succeed, for a number of rounds equal to 3+ their SL, they have the Corrosive Blood Creature Trait.\r\nelse if (test.succeeded) \r\n{\r\n // Don't attempt to add Corrosive Blood if actor already has it\r\n const hasCorrosiveBlood = this.actor.has(\"Corrosive Blood\")\r\n if (hasCorrosiveBlood !== undefined) return \r\n\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.M5QSWOYt2Rbv2yxW\")\r\n let data = item.toObject()\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\n const duration = 3 + parseInt(test.result.SL)\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} gains the Corrosive Blood Trait for ${duration} rounds.
`, \r\n { whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}","g0SzfsLyW7aD2F19":"if (this.item.system.tests.value.includes(\"(Social Group)\"))\r\n{\r\n let tests = this.item.system.tests.value\r\n let name = this.item.name\r\n\r\n // If name already specifies, make sure tests value reflects that\r\n if (name.includes(\"(\"))\r\n {\r\n let group = name.split(\"(\")[1].split(\")\")[0]\r\n tests = `${tests.split(\"(\")[0].trim()} (${group})`\r\n }\r\n else if (!name.includes(\"(\"))\r\n {\r\n let value = await ValueDialog.create(\"Enter Etiquette Group\", this.effect.name);\r\n if (value)\r\n {\r\n name = this.item.name + ` (${value})`;\r\n tests = this.item.system.tests.value.replace(\"Social Group\", value);\r\n }\r\n }\r\n this.item.updateSource({name, \"system.tests.value\" : tests})\r\n}","g1L8OYO9nCOhdKGL":"// Everything within Fellowship Bonus yards \r\n// of the target point is splashed with mystic poison, \r\n// suffering 1d10 + SL damage which ignores Armour Points\r\n\r\nlet damage = (await new Roll(`1d10 + ${parseInt(this.effect.sourceTest.result.SL)}`).roll())\r\n\r\nawait damage.toMessage(this.script.getChatData())\r\n\r\nthis.script.scriptMessage(await args.actor.applyBasicDamage(\r\n damage.total,\r\n {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}\r\n))\r\n\r\n// ... and gains the Poisoned Condition\r\n\r\nthis.actor.addCondition(\"poisoned\")","G1RletYc6BzigJrK":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 5\r\nargs.actor.addCondition(\"ablaze\", ablaze)","g4t56A09yrpZaJQ2":" let amberTalons = foundry.utils.deepClone(game.wfrp4e.config.systemItems.unarmed);\r\n amberTalons.name = \"Amber Talons\";\r\n amberTalons.img = this.effect.img;\r\n amberTalons.system.damage.value = \"SB + WPB\"\r\n amberTalons.system.equipped = true;\r\n amberTalons.system.qualities.value.push({name : \"magical\"})\r\n amberTalons.effects.push({\r\n label : \"Amber Talons\",\r\n transfer: false,\r\n icon : \"modules/wfrp4e-core/icons/spells/amber-talons.png\" ,\r\n flags : {\r\n wfrp4e : {\r\n applicationData : {\r\n documentType : \"Item\"\r\n },\r\n scriptData : [{\r\n trigger : \"applyDamage\",\r\n script : \"if (args.totalWoundLoss >= 1)\\n{ \\n args.actor.addCondition(\\\"bleeding\\\")\\n}\"\r\n }]\r\n }\r\n }\r\n })\r\n this.actor.createEmbeddedDocuments(\"Item\", [amberTalons], {fromEffect: this.effect.id})","G7sFEnJlXZvfXL3V":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[1].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","ga6bQzPuoIiQQrKg":"if (args.totalWoundLoss > 0)\r\n{\r\n \r\n let test = await args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","GAO8AozttWOyRkta":"if (!args.flags.lostHand)\r\n{\r\n\targs.fields.lostHand = true;\r\n\targs.fields.modifier += -20;\r\n}","gbhxWXboV9CytWNU":"await this.actor.addCondition(\"blinded\", 2)","GbPEy22VuCNzlNv2":"return !this.actor.isMounted || (!args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) && !args.options.dodge)","Gc8S5TYlVdV8NnOT":"let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name, context: { failure: \"Gained a Broken Condition\", success: \"Resisted the Broken Condition\" } })\r\n\r\n await test.roll();\r\n\r\n if (!test.succeeded)\r\n {\r\n args.actor.addCondition(\"broken\");\r\n }","GcIQtshex11AMmh2":"if (this.item.system.isEquipped)\r\n{\r\n let removeRepeater = false\r\n if(!this.item.system.offhand.value) // main\r\n {\r\n let offhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && i.system.offhand.value)\r\n if (offhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n else // offhand\r\n {\r\n let mainhandUsed = this.actor.itemTypes.weapon.find(i => i.system.isEquipped && !i.system.offhand.value)\r\n if (mainhandUsed)\r\n {\r\n removeRepeater = true;\r\n }\r\n }\r\n \r\n if (removeRepeater)\r\n {\r\n this.item.system.qualities.value = this.item.system.qualities.value.filter(i => i.name != \"repeater\")\r\n }\r\n}","GEfWIFBSrXt0ldBM":"(await new Roll(\"1d10\").roll()).toMessage(this.script.getChatData())\r\nawait this.actor.addCondition(\"dead\")","GFaTz8f6PBNWrlad":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : `Confused: Determine behaviour by @Table[bewilder] Table.`}})\r\nawait test.roll();\r\nreturn test.failed","GFkVnx4m9OwYsKGH":"args.actor.flags.ambi+= 1","gFUXBbTskQBKjxqm":"if (this.actor.hasCondition(\"entangled\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"average\"}}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n this.actor.addCondition(\"fatigued\") \r\n })\r\n}","gh2KS1prBKcsSK6M":"if (args.opposedTest.attackerTest.result.critical)\r\n args.actor.addCondition(\"ablaze\")","Gh7OidY6UdpWBS1g":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.KII1gWnxIZ8HzmU5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","GjkxWj9wCAclM9WA":"let effects = foundry.utils.deepClone(this.item.effects.contents.filter(e => e.active));\r\n\r\neffects.splice(effects.length - 1);\r\n\r\nif (effects.length == 0)\r\n{\r\n return this.script.scriptNotification(\"All Effects have been used. Reset to select them again\")\r\n}\r\nlet choice = await ItemDialog.create(effects, 1, \"Choose Power to Gain\");\r\n\r\nif (choice[0])\r\n{\r\n choice[0].update({disabled : true})\r\n let effect = choice[0].convertToApplied();\r\n effect.name += ` (${this.effect.name})`\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [effect]);\r\n}","gKIPujyuFSn0No9v":"for(let e of this.item.effects.contents)\r\n{\r\n e.update({disabled: false})\r\n}\r\nthis.script.scriptNotification(\"Reset Powers\")","gKPL3t4vlZAsvtGr":"return args.skill?.name == \"Stealth (Underground)\"","gL0ftUnK5TNXBRRt":"return this.effect.sourceActor.uuid == args.actor.uuid","gMIenSmLklAkB2Zm":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Venom Strength\", this.effect.name, \"\", Object.values(game.wfrp4e.config.difficultyNames));\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","GNl5Zk7BZ2jhRV1I":"if (args.item.type == \"armour\")\r\n{\r\n args.item.system.AP.head = 0;\r\n}","gnVpxOeBZpNF4HIF":"if (args.test.result.roll.toString().includes(\"9\") || args.test.result.roll.toString().includes(\"8\"))\r\n{\r\n args.test.result.fumble = game.i18n.localize(\"Fumble\")\r\n}","gOm8utR3HLQBT5hA":"let {value} = this.effect.getFlag(\"wfrp4e-soc\", \"m4result\") || {};\r\n\r\nif (value === 0)\r\n args.actor.system.status.mood.value = 0;\r\nelse if (value !== undefined)\r\n args.actor.system.status.mood.value += value;","GOq4TcnWbfyfCo2V":"this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus * 2} Wounds`)\r\nawait this.actor.modifyWounds(this.actor.characteristics.t.bonus * 2)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - Side Effects`,fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData())\r\n if (roll.total <= 3)\r\n {\r\n this.actor.addCondition(\"blinded\", 3)\r\n }\r\n else if (roll.total <= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n else if (roll.total <= 9)\r\n {\r\n this.actor.addCondition(\"stunned\");\r\n }\r\n else if (roll.total == 10)\r\n {\r\n this.actor.addConditon(\"unconscious\")\r\n }\r\n}","goz8yTlMozlsz3uY":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gpPaCe6yER79l4u8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","gPQrszvIgGlW9yM4":"if (args.test.characteristicKey == \"wp\")\r\n args.test.preData.canReverse = true","gpuBg3y9rocJL7yT":"this.actor.status.addArmour(1, {locations: [\"head\"], source: this.effect})","gqZLfIr6svrtdwdC":"return args.skill?.name != game.i18n.localize(\"NAME.SleightOfHand\") && args.skill?.name != game.i18n.localize(\"NAME.MeleeBrawling\") && args.weapon?.system?.weaponGroup?.value != \"brawling\"","GrF6tQ08jgKmUH4i":"return ![\"ws\", \"bs\", \"s\", \"ag\", \"i\"].includes(args.characteristic)","GRfCxtYzmEx2LYU7":"if (args.totalWoundLoss >= 1)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n await roll.toMessage(this.script.getChatData());\r\n if (roll.total == 9)\r\n {\r\n this.script.scriptMessage(`Two @UUID[Compendium.wfrp4e-eis.actors.iDy8SDTwJSlCzZMl]{Blue Horror of Tzeentch} claw their way out of ${this.actor.name}'s screaming flesh, killing them in the process.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","groEX1wJ9l00PkDF":"let turns = this.effect.getFlag(\"wfrp4e\", \"turns\");\r\nif (turns <= 0) return;\r\nturns--;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\nconst target = canvas.scene.tokens.get(targetId);\r\n\r\nif (turns > 0) {\r\n this.effect.setFlag(\"wfrp4e\", \"turns\", turns);\r\n\r\n return this.script.scriptMessage(`${speaker.alias} continues wrapping itself around ${target.name}. It will be able to start crushin in ${turns} turns.
`);\r\n}\r\n\r\nif (this.actor.items.find(i => i.type === \"extendedTest\" && i.name === this.effect.name)) {\r\n this.script.scriptMessage(`${speaker.alias} can resume crushing ${target.name} with the Extended Test.
`);\r\n\r\n return;\r\n}\r\n\r\nconst extendedTestData = {\r\n name: this.effect.name,\r\n type: \"extendedTest\",\r\n img: this.effect.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target.actor.system.status.wounds.value\r\n },\r\n test: {\r\n value: 'Strength'\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: \"challenging\"\r\n }\r\n }\r\n};\r\n\r\nconst extendedTests = await this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\nconst extendedTest = extendedTests[0];\r\n\r\nthis.script.scriptMessage(`${speaker.alias} finished wrapping itself around ${target.name}. It can now begin crushing via the @UUID[${extendedTest.uuid}] Extended Test.
`);\r\n\r\nlet effect = {\r\n name: extendedTest.name,\r\n icon: extendedTest.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: extendedTest.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.effects.find(e => e.id === id);\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n const targetId = effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n this.script.scriptMessage(\\`${speaker.alias} crushed the ${target.name}. Boat shatters, reduced to a mass of flotsam.
\\`);\r\n await effect.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n}\r\n\r\nawait extendedTests[0].createEmbeddedDocuments(\"ActiveEffect\", [effect]);","GsAyB5xnK3ASeoah":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","gsCnd3mf1vXFU2ei":"this.actor.system.status.ward.value = 4;","GTZUO73pUJKpM1JB":" let roll = await new Roll(\"1d10\").roll();\r\n game.dice3d?.showForRoll(roll);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n","gu72JaTs9GrSiVTd":"return !(args.skill?.name == game.i18n.localize(\"NAME.Haggle\") || args.skill?.name == game.i18n.localize(\"NAME.Gossip\"))","GUkpYdPwoC5pc9BT":"return !args.weapon?.system.properties.flaws.crewed","GuUCErVbk5hrFzR3":"args.multiplier.tb += 1","GuxbvztcvzJz2oH1":"args.item.system.qualities.value = [];","gVpFUka7qfGiEC1v":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {tint : \"#FFD700\"}}));\r\n","gxuBeGHwjZ7WfPeu":"let specification = Number(this.item.specification.value) || 1;\r\nargs.fields.slBonus -= specification;","GZFsuynUhgZqwTGo":"if (args.totalWoundLoss >= 1)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Gained a Poisoned Condition\", success: \"Resisted the poison\" }})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"poisoned\");\r\n }\r\n}\r\n ","GzSFlqL1YrIK1dxh":"let items = await Promise.all([\"Compendium.wfrp4e-wom.items.Item.EjGYZ4CgX2jZW7Ot\",\r\n\"Compendium.wfrp4e-wom.items.Item.O2v9RQiFf0obskP5\",\r\n\"Compendium.wfrp4e-wom.items.Item.2cv6hhZ57iV6z5Il\",\r\n\"Compendium.wfrp4e-wom.items.Item.YgDEUO0G0XcqQJqg\",\r\n\"Compendium.wfrp4e-wom.items.Item.J6K5TPxI8qIGQKKH\",\r\n\"Compendium.wfrp4e-wom.items.Item.K9FPtiDLwTkC7FuO\",\r\n\"Compendium.wfrp4e-wom.items.Item.CkMYRYCLrkMnyVm5\",\r\n\"Compendium.wfrp4e-wom.items.Item.0Xdm4r7l2EwC4fcg\"].map(fromUuid));\r\n\r\nlet choice = await game.wfrp4e.apps.ItemDialog.create(items, 1, \"Select Wind\")\r\n//this.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nthis.item.update(choice[0]?.toObject(), {diff: false, recursive : false});\r\n\r\n//this.actor.items.getName(this.effect.item.name).delete() // For some reason this.effect.item.delete() throws an error\r\n\r\n","GzsuEg7gZy1f0ljy":"let bleeding = this.actor.hasCondition(\"bleeding\")\r\nif (bleeding)\r\n{\r\n this.script.scriptNotification(`Cleared ${bleeding.conditionValue} Bleeding Conditions`)\r\n bleeding.delete(); \r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(`No Bleeding Conditions`)\r\n}","H06Ysj7oPiemW7S6":"if (args.test.options.income && !args.test.options.criminal)\r\n{\r\n args.test.options.criminal = true;\r\n let currentCareer = args.test.actor.system.currentCareer;\r\n let coin = {1 : \"b\", 2 : \"s\", 3 : \"s\", 4 : \"g\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let term = {1 : \"bp\", 2 : \"ss\", 3 : \"ss\", 4 : \"gc\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n let dieAmount = {1 : \"2d10\", 2 : \"1d10\", 3 : \"2d10\", 4 : \"1\"}[currentCareer.system.level.value] // b, s, or g maps to 2d10, 1d10, or 1 respectively (takes the first letter)\r\n dieAmount = parseInt(dieAmount[0]) * this.item.system.Advances; // Multilpy that first letter by your standing (Brass 4 = 8d10 pennies)\r\n if (coin != \"g\") // Don't roll for gold, just use standing value\r\n {\r\n dieAmount = dieAmount + \"d10\";\r\n }\r\n let moneyEarned = (await new Roll(dieAmount.toString()).roll()).total;\r\n let moneyString = `${moneyEarned}${coin}`\r\n let transactionString = `${moneyEarned}${term}`\r\n\r\n this.script.scriptMessage(`Earned an additional ${game.wfrp4e.market.amountToString(game.wfrp4e.market.parseMoneyTransactionString(transactionString))}`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","h0DfPwUUOBjyAHMZ":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\");","h1XKoMuVnS0bagRO":"return args.item?.name != game.i18n.localize(\"NAME.Endurance\");","H1z3nWW7Rj3Oisxy":"return args.type != \"channelling\"","H2CJvApKMnfGNNoo":" if (args.test.item?.type == \"skill\" && args.test.item.name.includes(game.i18n.localize(\"NAME.Stealth\")))\r\n{ \r\n args.test.result.description = \"Astounding Failure\";\r\n args.test.result.outcome = \"failure\";\r\n ChatMessage.create({content : \"SQUEAK\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n AudioHelper.play({ src: `${game.settings.get(\"wfrp4e\", \"soundPath\")}squeek.wav` }, true);\r\n}","h2GSoiCQ2ZSlTjf7":"const uuid = \"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","H3pZ9UeIzIz3luKh":"args.actor.addCondition(\"bleeding\")\r\n\r\nthis.actor.setFlag(\"wfrp4e\", \"isAttached\", args.actor.name)\r\n\r\nthis.script.scriptMessage(`Attaches to ${args.actor.name}`)","H3Wls12aVWAWTp9J":"this.actor.setupCharacteristic(\"i\", {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(test => {\r\n test.roll();\r\n})","h766UvswLCsxcMow":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : -15,\r\n \"t\" : 0,\r\n \"i\" : 20,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 5,\r\n \"wp\" : 10,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Charm\", \"Intimidate\", \"Melee (Basic)\"]\r\nlet skillAdvancements = [7, 60, 7]\r\nlet talents = [\"Menacing\", \"Shadow\"]\r\nlet traits = [\"Distracting\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","H7lcCU24gFDp7zK7":"let amount = this.effect.sourceTest.result.baseSL;\r\nargs.fields.successBonus += amount;","H85k4L3yICm7cfIk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","hA8PzeiCsHqqlUZm":"this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"nausea\"]])\r\nthis.script.scriptMessage(`Gains @Condition[Nausea] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})","HASsi6wYHVALExWq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Corruption Point Gained\" } })\r\nawait test.roll();\r\n\r\nif (test.failed && args.actor.type == \"character\") \r\n{\r\n let msg = \"\"\r\n msg += `${this.actor.prototypeToken.name} gained a Corruption point
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${args.actor.prototypeToken.name} gains a mutation (@Table[expandedmutatephys]{Physical} or @Table[expandedmutatemental]{Mental}) and gains @UUID[Compendium.wfrp4e-core.items.hiU7vhBOVpVI8c7C]{Chaos Magic (Tzeentch)}`\r\n }\r\n this.script.scriptMessage(msg, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n await this.actor.update({ \"system.status.corruption.value\": parseInt(args.actor.status.corruption.value) + 1 })\r\n}","Hcpn1gU58DIKIhty":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Flail)\")\r\n{\r\n args.item.system.modifier.value += 10;\r\n}","hCzxUyO6mjLNIpaM":"let woundsGained = Math.min(args.totalWoundLoss, args.actor.status.wounds.value)\r\n\r\nwoundsGained = Math.floor(woundsGained / 2)\r\n\r\nargs.attacker.update({ \"system.status.wounds.value\": args.attacker.status.wounds.value + woundsGained })\r\n\r\nthis.script.scriptMessage(`Gains ${woundsGained} Wounds`)","hDC6lroDEPVBituR":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n this.script.scriptMessage(`Fumble: immediately gain 1 @Table[mutatemental]{Mental Mutation}, and may not take a Short-term Ambition for the next [[1d10]] weeks.`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","HdTuY2IGhdlMDOy3":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Animal Telepathy\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","HfCxNd7mFGZH4s9Y":"// An opponent that takes more than a single Wound from a Warp Blade strike \r\n// in melee combat must make an Average (+20) Endurance Test \r\n// or take a Stunned Condition\r\n\r\n\r\nif (args.totalWoundLoss > 1) {\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await args.actor.addCondition(\"stunned\");\r\n }\r\n}","hfO4INH3EeETDTFt":"this.actor.status.addArmour(1, {locations: this.effect.flags.wfrp4e.locations, source: this.effect})","HfZAQWoY8n3clLlo":"if (!args.itemCreated) return;\r\nif (args.itemCreated.type !== \"critical\") return;\r\nif (args.itemCreated.system.location.value.toLowerCase() !== \"head\") return;\r\nif (Number(args.itemCreated.system.wounds.value) > 0) {\r\n this.script.message(game.i18n.format(\"SCRIPT.Sallet\", {name: args.itemCreated.parent.name, wounds: args.itemCreated.system.wounds.value}))\r\n}","hhCs5VBKx50S5IsY":"return !args.options.mutate","hhv7PrRdlf9sfC82":"let characteristics = {\r\n \"ws\" : 5,\r\n \"bs\" : 0,\r\n \"s\" : 5,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = [\"Cool\", \"Dodge\"]\r\n let skillAdvancements = [10, 10]\r\n let talents = [\"Combat Reflexes\"]\r\n let trappings = [\"Leather Jack\", \"Leather Skullcap\", \"Leather Leggings\", \"Shield\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","HiMBS6GeOwEydWYN":"return args.skill?.name != game.i18n.localize(\"NAME.Climb\");","HJ2X4ZtXei0BXbxf":" let choices = await Promise.all([game.wfrp4e.utility.findItemId(\"PzimjNx9Ojq4g6mV\"), game.wfrp4e.utility.findItemId(\"rOPmyLWa37e7s9v6\")])\r\n let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, \"Choose a Skill\")\r\n\r\n items = items.map(i => i.toObject())\r\n items.forEach(i => i.system.advances.value = 20)\r\n\r\nitems.forEach(i => equip(i))\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.data.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.data.equipped = true\r\n else if (item.type == \"trapping\" && item.data.trappingType.value == \"clothingAccessories\")\r\n item.data.worn = true\r\n}","hj7tI212neKIu9dh":"this.actor.system.status.ward.value = 7;","hK0YMJfYbpbJZizO":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","HKhyn0kijKfzW6cw":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nthis.item.updateSource({\"flags.wfrp4e.passed\" : test.succeeded})","hlHKeFWrOA8CsLr9":"args.data.canReverse = true;\r\nargs.options.pilot = true;","hluehsCuBZYc1Ejt":"return args.characterisic != \"fel\"","HMC6hPND9DWLFfZE":"if (this.item.name.includes(\"(\"))\r\n{\r\n\treturn;\r\n}\r\n\r\nlet index = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"skill\" && i.name.includes(game.i18n.localize(\"NAME.Lore\")))\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(index, 1, \"Choose a Lore\")\r\nlet text;\r\nif (!choice[0])\r\n{\r\n let custom = await Dialog.wait({\r\n title : \"Enter Lore\",\r\n content : \"\",\r\n buttons : {\r\n confirm : {\r\n label : game.i18n.localize(\"Confirm\"),\r\n callback : (dlg) => {\r\n return dlg.find(\"input\")[0].value\r\n }\r\n }\r\n },\r\n default : \"confirm\",\r\n close : () => {\r\n return \"\"\r\n }\r\n }) \r\n text = custom || \"\"\r\n}\r\nelse \r\n{\r\n text = game.wfrp4e.utility.extractParenthesesText(choice[0].name)\r\n}\r\n\r\nawait this.item.updateSource({name : this.item.name + ` (${text})`, \"system.tests.value\" : this.item.system.tests.value.replace(\"chosen Lore\", text)})\r\nawait this.effect.updateSource({name : this.effect.name + ` (${text})`})","HmImVzvw6ecBy99l":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0) \r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","hmk8zV1LTElHUI8A":"let msg = `${this.actor.prototypeToken.name} loses 1 Wound.\r\n Select your choice\r\n
\r\n${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","hSlEY2oh8quVmdXR":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 2\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ht7csu1KImHzpzL5":"return args.item?.actor?.type !== \"vehicle\" || args.item?.type !== \"weapon\" || !args.item.name.includes(\"Cannon\");","huJcVpVn6Q7sQkFC":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 1;\r\n","HUKzssLxeQo1wbx9":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","HwbgUIbpX0D8JLOR":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n this.actor.addCondition(\"bleeding\")","hwHpIunCq3ifk2QU":"if (args.item.type == \"spell\")\r\n{\r\n let range = parseInt(args.item.Duration)\r\n if (Number.isNumeric(range))\r\n {\r\n args.item.system.duration.value = \"2 * \" + args.item.system.duration.value\r\n }\r\n}","hwOZxgt7e65iWvYz":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let damage = this.effect.sourceTest.result.damage\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}))\r\n}","hWWvkPbgIN3lxz1u":"return args.item?.system?.attackType !== \"melee\";","HX6CjNapYdC0VmQ8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.epPBu7x6BRWp2PHG\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","HXJKkmpfxQUOnWOS":"if (!this.item.system.twohanded.value)\r\n{\r\n this.item.system.flaws.value = this.item.system.flaws.value.concat([{name : \"tiring\"}, {name : \"slow\"}])\r\n}","hxmwtw5zAHyS2upG":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"giftofthebeast\"))","hYNWp75ggWSTht55":"if (args.test.result.hitloc.value != \"head\" && args.test.result.critical)\r\n{\r\n\tgame.wfrp4e.utility.sleep(200).then(() => {\r\n\t\tthis.script.scriptMessage(\"Can roll on the @Table[crithead]{Head Critical Hits} instead of the normal hit location\")\r\n\r\n\t})\r\n}","HYrl5aNMm8BAdqH7":"\r\n let modifier = 0\r\n if (this.effect.name.includes(\"Moderate\"))\r\n modifier = -20\r\n else\r\n modifier = -10\r\n args.fields.modifier += modifier\r\n ","hZAax4emLahEEqcZ":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 7 - this.actor.characteristics.s.bonus\r\ndata.name = item.name.replace(\"(Feature)\", \"(Tusks)\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","I0Jo6cbNAJtXUloc":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.J9MK0AIaTbvd5oF6\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id});","I0oRZ7AWde5KI5jw":"return ![\"t\", \"int\"].includes(args.characteristic)","I1J2m5uud84N50Lk":"if ([\"cast\", \"channelling\", \"pray\"].includes(args.type))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot cast Spells or use Prayers\");\r\n}\r\nelse return true;","i59IpmZNLJEPWZ3L":"return args.spell","i5AN97A7IOeygEFA":"if (args.applyAP && args.modifiers.ap.metal) \r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","I7ieW0hNYvvX0KFg":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\");","i7xl0jNpLnBT2h2l":"args.actor.characteristics.dex.value = 0","I93i49wI9ZrDHT4n":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.jt0DmVK9IiF6Sd2h\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","I9QAPKbaXwMMMBT4":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"average\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif(test.failed)\r\n{\r\n await this.actor.addCondition(\"stunned\");\r\n let secondTest = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty: \"easy\"}, skipTargets: true, appendTitle : \" - Despair\"})\r\n await secondTest.roll();\r\n if(secondTest.failed)\r\n {\r\n this.effect.updateSource({name : \"Taste of Death\"})\r\n await this.actor.addCondition(\"fatigued\");\r\n }\r\n else \r\n {\r\n return false;\r\n }\r\n}","IAGla7HJlYN0wa4H":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.addSystemEffect(\"convulsions\")\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Symptom[Convulsions] for [[1d10]] hours`)\r\n }\r\n}","iAo3wxMLA64rsKjj":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"skavenbrew\"))","iBEPQ3NwtI9DfkEy":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`})","ID8mCcjkl7PCQhDq":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Dodge\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif(test.failed)\r\n{\r\n let damage = this.effect.sourceItem.system.computeSpellDamage(\"3\", true);\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {suppressMsg: true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))\r\n}","id9ZdkERMZnZTWXt":"if (args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\tthis.script.scriptNotification(\"Immune to Fear\");\r\n\targs.extendedTest.delete();\r\n\targs.abort = true;\r\n}\r\nreturn args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\")","IfEu1hO8sKEZBpvg":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyFear(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postFear(value, name)\r\n}","IG4zYqtN9fRSYE7q":"args.actor.addCondition(\"ablaze\");","igVAVU7DOuzhNG14":"return args.item?.system.isMelee","iHn3YzvqNfbwzjZz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = this.actor.characteristics.s.bonus\r\ndata.system.description.value = \"\"\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IkGegSuQwwVPhrjF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 1\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","IKiZv9YSFmKmHo6a":"return args.spell?.system.lore.value == \"fire\"","iLpq4yCFN6YACrYA":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"demonic-mien\"))\r\n}","ILqHxk7deotgI3KD":"if (args.item.type != \"weapon\")\r\n return\r\n\r\nlet reach = args.item.reach.value\r\nlet reachNum = game.wfrp4e.config.reachNum[reach]\r\nreachNum = Math.min(reachNum + 2, 7)\r\n\r\nlet key = game.wfrp4e.utility.findKey(reachNum, game.wfrp4e.config.reachNum)\r\n\r\nargs.item.reach.value = key","iM4B3IZ4VtpZsl09":"args.size = \"sml\"","iM6JLF8jDXMViReZ":"return ![\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","iMDZLr7ueJWBnilj":"args.actor.flags.rangedDamageIncrease += 1","imKVsCy8rya2gkwO":"// Any Characteristic penalties due to failed Consume Alcohol Tests\r\n// or the state of being Stinking Drunk are eliminated. \r\nawait this.actor.removeSystemEffect(\"consumealcohol1\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol2\")\r\nawait this.actor.removeSystemEffect(\"consumealcohol3\")\r\nawait this.actor.removeSystemEffect(\"stinkingdrunk1\")\r\n\r\n// The drinker is thereafter Fatigued \r\n// for a number of hours equal to 10 minus their Toughness Bonus — \r\n// nothing but time and rest can eliminate this penalty.\r\nawait this.actor.addCondition(\"fatigued\")\r\nconst duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)\r\nthis.effect.updateSource({\"duration.rounds\" : duration});\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.
`, \r\n{\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n}) ","iMu8BZ7eHMAbPEO1":"let healed = args.totalWoundLoss\r\n\r\nthis.script.scriptMessage(`this.actor.prototypeToken.name healed ${healed} Wounds`);\r\n\r\nthis.actor.modifyWounds(healed)","IN4ZFOPooqJtNuIQ":"return args.characteristic !== \"s\" && args.characteristic !== \"t\" && args.weapon?.system?.attackType !== \"melee\";","iNAQJa5HyaEckknX":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n let spells = this.actor.itemTypes.spell;\r\n if (spells.length)\r\n {\r\n let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]\r\n this.script.scriptMessage(`Loses access to ${chosen.name}`)\r\n chosen.update({name : chosen.name += \" (LOST)\"})\r\n }\r\n}\r\n\r\n\r\n","inPxRSx0CDj1nwAm":"if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == \"Arcane Magic (Fire)\"))\r\n{\r\n this.actor.addCondition(\"ablaze\");\r\n}","iO2hCDwyQ7v4qrOI":"if (args.test.options.staunchBleeding) {\r\n if (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target) {\r\n let staunch = ~~args.test.result.SL + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n}","ioeTj5mx8jlA5EX5":"args.actor.addCondition(\"stunned\")","IOroJBqTsWvoakJN":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 2;\r\n","Ip8sctF9SIE1Z2vF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.UnJ25lL8aUzem5JO\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 3\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ipkkRffJh61WE7zR":"if (!args.flags.amputatedFootOrLeg)\r\n{\r\n\targs.flags.amputatedFootOrLeg= true;\r\n\targs.fields.modifier -= 20;\r\n}","IpoOOjYJs6RmVrpb":"if (args.totalWoundLoss > 0)\r\n{\r\n args.attacker.applyEffect({effectUuids : this.effect.sourceItem.effects.contents[1].uuid})\r\n}","IPPDvZdE8kn3H9z7":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n await this.actor.addCondition(\"grappling\")\r\n}","iqUvV1Vu81M3WyZ4":"let SL = Number(this.effect.sourceTest.result.SL);\r\nfor (let i=0; iOnce they fall asleep however, it is almost impossible. At this point the victim must make a Hard (-20) Endurance Test. If they fail, they never awaken.
`, \r\n {\r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"), \r\n blind: true \r\n })\r\n}\r\nreturn test.failed;","IR86DuMbVdbGOJYt":"this.actor.addCondition(\"blinded\")","IrkWq7IiFS65bTvC":"if (this.actor.flags.holed.half !== true) return;\r\nif (this.actor.flags.holed.reminded === true) return;\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nthis.script.scriptMessage(`${speaker.alias} sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.
`);\r\n\r\nthis.actor.flags.holed.reminded = true;","IsLAvY9ikR1cOJWw":"return ![\"NAME.Row\", \"NAME.Swim\"].map(i => game.i18n.localize(i)).includes(args.skill?.name);","IslMfFgpgQq2brpu":"if (this.actor.hasCondition(\"broken\"))\r\n{\r\n this.actor.removeCondition(\"broken\")\r\n this.script.scriptNotification(`Cannot have Broken`);\r\n}","iT0h3VZLEBQnn5Bx":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && args.skill?.name != game.i18n.localize(\"NAME.Gossip\") && args.skill?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\");","iT3C15fMyQrj1RmG":"if (this.actor.has(\"Undead\") && this.actor.has(\"Ethereal\"))\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n this.actor.addCondition(\"stunned\")\r\n })\r\n}","IukS0clr1yAleacc":"this.actor.system.characteristics.ag.modifier -= parseInt(this.item.system.location.value) || 1\r\n\r\nthis.actor.system.characteristics.ws.modifier -= parseInt(this.item.system.location.value) || 1","IupskvzvoGyD2H5o":"if (this.actor.type != \"character\")\r\n{\r\n return;\r\n}\r\n\r\nlet god = await ValueDialog.create(\"Enter a Deity\", \"Blessed\")\r\n\r\nif (god)\r\n{\r\n let prayers = await warhammer.utility.findAllItems(\"prayer\", \"Loading Prayers\")\r\n let blessings = prayers.filter(p => p.system.god.value.split(\",\").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == \"blessing\")\r\n if (blessings.length)\r\n {\r\n this.script.scriptNotification(\"Adding \" + blessings.map(i => i.name).join(\", \"))\r\n await this.actor.createEmbeddedDocuments(\"Item\", blessings, {fromEffect : this.effect.id})\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`)\r\n }\r\n this.item.updateSource({name : this.item.name.replace(\"Any\", god)})\r\n await this.actor.update({\"system.details.god.value\": god})\r\n}","iuSoKntfJ4eAPafQ":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"fire\", \"heavens\", \"beasts\", \"shadow\", \"light\", \"life\", \"death\", \"metal\"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","iuYuf05BNuZ5fllI":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[poisoned-wind-globe]\")\r\n}","iVhi3Z6zPaf1bf8g":"return [\"t\", \"i\", \"ag\", \"dex\", \"int\", \"wp\"].includes(args.characteristic)","iX0ctHYHg12pjaCU":"let result = await game.wfrp4e.tables.rollTable(\"gift-of-slaanesh\")\r\n\r\nif (result.object.documentId && result.object.documentCollection)\r\n{\r\n let item = await fromUuid(`Compendium.${result.object.documentCollection}.${result.object.documentId}`);\r\n if (item)\r\n { \r\n let data = item.toObject();\r\n // Some items need sourceTest for their effects\r\n setProperty(data, \"flags.wfrp4e.sourceTest\", this.effect.sourceTest);\r\n await this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});\r\n }\r\n}\r\n\r\nthis.script.scriptMessage(game.wfrp4e.tables.formatChatRoll(\"gift-of-slaanesh\", {lookup : result.roll, hideDSN: true}));","IzoOmDywGLqLNljN":"let skill = `Language (Magick)`\r\nlet currentCareer = this.actor.system.currentCareer;\r\nlet existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);\r\n\r\nif (!currentCareer) return\r\n\r\n\r\nlet inCurrentCareer = currentCareer.system.skills.includes(skill);\r\nlet witchAdded = actor.getFlag(\"wfrp4e\", \"witchAdded\") || {};\r\nif (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])\r\n{\r\n\texistingSkill.system.advances.costModifier = -5;\r\n}\r\nelse \r\n{\r\n\twitchAdded[skill] = true;\r\n\tcurrentCareer.system.skills.push(skill);\r\n\tsetProperty(this.actor, \"flags.wfrp4e.witchAdded\", witchAdded)\r\n}","IzZcsSngI8TZH4d8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.fjd1u9VAgiYzhBRp\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","J0IWUhxada2ONowP":" return args.skill?.name == \"Entertain (Sing)\" || args.skill?.name == \"Entertain (Singing)\" || (args.skill?.name.includes(\"Language\") && (args.skill?.name.includes(\"Magick\") || args.skill?.name.includes(\"Elthárin\") || args.skill?.name.includes(\"Cathayan\")))","j1AmrY1SxFJQyapo":"if (this.actor.status.advantage.value > 0 && args.item.system.attackType)\r\n{\r\n args.item.system.qualities.value.push({name : \"penetrating\"})\r\n}","J1FPDdrXGctKDTZz":"if (args.equipped)\r\n{\r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n wardData = ward.toObject()\r\n wardData.system.specification.value = \"8\"\r\n \r\n let mr = await fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\")\r\n mrData = mr.toObject()\r\n mrData.system.specification.value = 2\r\n \r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, mrData], {fromEffect : this.effect.id})\r\n}\r\nelse\r\n{\r\n this.effect.deleteCreatedItems()\r\n}","j3c6Y5aeA7nlFr9F":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.wBhPFggGqIXwbx1r\", // Alley Cat\r\n \"Compendium.wfrp4e-core.items.Item.q58lK4kULJZB5GjE\", // Rover\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","j3zDMWkns32Yrxn3":"this.effect.updateSource({\"flags.wfrp4e.ward\" : 9})","j6Bf1iivH8cqSnnK":"let target = args.data.targets[0]\r\nreturn target?.actor.hasCondition(\"prone\") || target.hasCondition(\"surprised\")","J8aPichsl25t1QZ9":"this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.SL)","j98hvy6r9G2Vjmid":"if (args.totalWoundLoss > 0) \r\n{\r\n args.opposedTest.result.other.push(\r\n `@Corruption[minor]{Minor Exposure to Corruption}`\r\n )\r\n this.script.scriptMessage(\r\n `${this.effect.name}: \r\n @Corruption[minor]{Minor Exposure to Corruption}Damage all Items carried?
`})\r\n\tif (damageItems)\r\n\t{\r\n\t\tlet msg = ``\r\n\t\tlet weapons = args.actor.itemTypes.weapon.filter(i => i.isEquipped);\r\n\t\tlet armour = args.actor.itemTypes.armour.filter(i => i.isEquipped);\r\n\t\tlet trappings = args.actor.itemTypes.trapping.filter(i => i.isEquipped);\r\n\t\tfor(let item of weapons)\r\n\t\t{\r\n\t\t\tif (item.system.properties.qualities.shield)\r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1, \"shield\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tawait item.system.damageItem(1);\r\n\t\t\t}\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of armour)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tfor(let item of trappings)\r\n\t\t{\r\n\t\t\tawait item.system.damageItem(1);\r\n\t\t\tmsg += `${item.name} damage by 1
`\r\n\t\t}\r\n\t\tif (msg)\r\n\t\t{\r\n\t\t\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nif (type == \"fire\")\r\n{\r\n\tawait args.actor.addCondition(\"ablaze\");\r\n}\r\n\r\nif (type == \"electricity\")\r\n{\r\n\tawait args.actor.addCondition(\"stunned\");\r\n}\r\n\r\nif (type == \"poison\")\r\n{\r\n\tawait args.actor.addCondition(\"poisoned\");\r\n}\r\n\r\n","JEbs0WlqhKNDOo5A":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}\r\n","JeThJbOf6Xmbtgo1":"this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))\r\n\r\nlet test = await this.actor.setupSkill(\"Athletics\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","JFgXyb6bKjZJLmF8":"return args.characteristic == \"ag\"","jfk5VDKMTIf4ee0v":"if (args.totalWoundLoss > 0)\r\n args.actor.addCondition(\"poisoned\")","JfOodll9a2Lw0fWg":"let blinded = args.actor.hasCondition(\"blinded\")\r\nif (blinded)\r\n{\r\n blinded.system.scriptData = blinded.system.scriptData.filter(s => s.trigger != \"dialog\")\r\n blinded.system._scripts = null;\r\n}","jFwema0iwzBphxie":"let woundsGained = Math.min(args.actor.status.wounds.value, args.totalWoundLoss)\r\nwoundsGained = Math.ceil(woundsGained / 2)\r\n\r\nargs.attacker.update({\"system.status.wounds.value\" : args.attacker.system.status.wounds.value + woundsGained})\r\n\r\nargs.actor.addCondition(\"fatigued\")\r\nargs.attacker.hasCondition(\"fatigued\")?.delete();\r\n\r\nthis.script.scriptMessage(`${args.attacker.prototypeToken.name} gains ${woundsGained} Wounds`);","JgCcgDVZX54slrWx":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption","jGDk7avWFSnyFoql":"let broken = this.actor.hasCondition(\"broken\");\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.IAWyzDfC286a9MPz\");\r\n\r\nif (broken && !broken.getFlag(\"wfrp4e\", \"blasted-mind\") && !this.actor.has(item.name))\r\n{\r\n await broken.delete();\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})\r\n this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)\r\n}","jgO1Kf60Ctt6R0qO":"return args.item?.name != game.i18n.localize(\"NAME.Leadership\")","JhbZWZhOJ23yOBmG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'hard';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","JhCMYHHYA860Kka8":"return !this.actor.attacker || args.item?.system?.attackType !== \"melee\" || args.skill?.name !== game.i18n.localize(\"NAME.Dodge\");","jHgxpe6TJDlP3oTn":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\");\r\nspells = spells.filter(s => [\"slaanesh\"].includes(s.system.lore.value))\r\n\r\nlet choice = await ItemDialog.create(spells, 1, \"Choose Spell\");\r\nif (choice[0])\r\n{\r\n this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id})\r\n}\r\n","JibNjuQrJRnY0yf9":"return this.actor.flags.useless.rEye && this.actor.flags.useless.lEye && ([\"ws\", \"bs\"].includes(args.characteristic) || args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\")) || args.weapon || args.options.dodge)","JjDzMnUxaWQePIYh":"return args.characteristic != \"int\"","JjiPprLSlSmmB5Ga":"args.item.system.damage.value += \" + 1\"","Jjq3oPYbI26zjxME":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","Jk7OHqx06oCUVAzb":"return ![\"Language (Magick)\", \"Channelling (Hysh)\"].includes(args.skill?.name) ","jLsL4KRI6LEG9Ii2":"if (args.test.result.critical && ['rLeg', 'lLeg'].includes(args.test.result.hitloc.result))\r\n{\r\n args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 20 : 20\r\n args.test.result.critical += ` (+${args.test.result.critModifier})`\r\n}","jmxlpyLrIuoxQtvU":" this.actor.getActiveTokens().forEach(t => t.document.update({texture : {scaleX : 2, scaleY: 2, src: \"modules/wfrp4e-core/tokens/popout/gor.webp\"}}));\r\n","JmZQRvdWjm9ykYfn":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.actor.removeCondition(\"surprised\")\r\n this.script.scriptMessage(`Cannot be Surprised`);\r\n}","Jnp5c09sPzDD61EK":"this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an Average (+20) Willpower Test to attack this target!`)\r\n\r\nreturn true; // No need to show this in the dialog","jObJanFoev4N6ZRv":"if (!args.opposedTest.attackerTest.item?.system?.isMagical)\r\n\targs.abort = `${this.effect.name}: Ignored`","jOm7RxGFm1y6mCpN":"return args.options.crewTest.name.includes(\"Batten Down\");","jpcU8FFWSlQ3gD0L":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Trade\"))","JQruHprM5R5vZ9DA":"let caster = this.effect.sourceActor;\r\nif (caster)\r\n{\r\n let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus\r\n await this.actor.modifyWounds(healed);\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${healed} Wounds`)\r\n}\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"vhard\"}, context : {success : \"1 Corruption point that was gained within the last hour is removed.\", failure: \"Nothing happens\"}})\r\n await test.roll();","jRSgPhpfN7MH7TTp":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"1 Poisoned Condition Gained\", success: \"Resisted Poisoned Condition\" } })\r\n await test.roll();\r\n if (test.failed)\r\n { \r\n args.actor.addCondition(\"poisoned\");\r\n if (args.actor.system.status.wounds.value - args.totalWoundLoss <= 0)\r\n {\r\n args.actor.addCondition(\"unconscious\")\r\n }\r\n }\r\n}\r\n\r\n // else\r\n // this.actor.setupCharacteristic(\"t\", { context: { failure: \"1 @Condition[Poisoned] Condition Gained\", success: \"Resisted @Condition[Poisoned] Condition\" } }).then(testCallback)\r\n","jrvj7bRyMBB9LixP":"this.actor.addCondition(\"fatigued\", 3)","jsgLEVYvMieyYT6L":"let tokenImg = \"\"; // Put path to token image here, inbetween the quotation marks\r\nif (tokenImg)\r\n{\r\n if (this.effect.getFlag(\"wfrp4e\", \"transformed\"))\r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", false);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: this.actor.prototypeToken.texture.src}})); \r\n }\r\n else \r\n {\r\n await this.effect.setFlag(\"wfrp4e\", \"transformed\", true);\r\n this.actor.getActiveTokens().forEach(t => t.document.update({texture : {src: tokenImg}}));\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Token Image path configured. The image path should be set in the first line of this script.\", \"error\");\r\n}","JstrA46EYSEuRSy5":"if (this.actor.has(game.i18n.localize(\"NAME.Undead\")) && this.actor.has(game.i18n.localize(\"NAME.Construct\")))\r\n this.actor.addCondition(\"dead\")","jW87rmQLtROdVEhW":" if ([\"orc\", \"ork\", \"goblin\", \"hobgoblin\", \"snotling\", \"greenskin\"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))\r\n {\r\n args.addImpact = true\r\n args.opposedTest.result.other.push(\"Rune of Goblin Bane: Impact Added\")\r\n }","JwgFQmPQtXWAP94i":"this.actor.addCondition(\"fatigued\");","jWkfoVpHLiRaHTza":"if (args.test.succeeded)\r\n{\r\n args.test.result.other.push(`${this.effect.name}: @Terror[1,${this.actor.prototypeToken.name}]`)\r\n}","JwYZJGkZMSM2M3Si":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n args.totalWoundLoss += this.effect.sourceActor.system.characteristics.wp.bonus\r\n args.modifiers.other.push({label : this.effect.name, value : this.effect.sourceActor.system.characteristics.wp.bonus})\r\n }\r\n}","jXbrIGxznqf1SNxZ":"const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} is Immersed within a Sea Elemental and suffers from @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}
They may attempt to escape by freeing themselves from the @Condition[Entangled} Condition as if they were @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} by the Sea Elemental, making an Opposed Strength Test against its Strength of 59.
`);","JXBUE0XuJOJNG7zE":"if (args.totalWoundLoss <= 7) return;\r\n\r\nlet options = {\r\n appendTitle : \" – \" + this.effect.name,\r\n skipTargets: true,\r\n fields: {difficulty: 'average'},\r\n characteristic: 'wp',\r\n}\r\n\r\nlet test = await args.actor.setupSkill('Cool', options);\r\nawait test.roll();\r\n\r\nif (!test.succeeded) {\r\n const targetId = this.effect.getFlag(\"wfrp4e\", \"target\");\r\n const target = canvas.scene.tokens.get(targetId);\r\n await this.effect.delete();\r\n args.extraMessages.push(`${args.actor.name} lost ${args.totalWoundLoss} Wounds to an attack, which caused it to let go of ${target.name}.`);\r\n}","jYJRO5XPyG7y6fih":"await this.actor.addCondition(\"blinded\")\r\nawait this.actor.addCondition(\"deafened\")\r\nawait this.actor.addCondition(\"fatigued\")","JyTxUG5dNW670Sf7":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.7mCcI3q7hgWcmbBU\")\r\nlet data = item.toObject();\r\ndata.system.location.key= this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","JZIn1dsKHFE3smJU":"let ablaze = parseInt(this.effect.sourceTest.result.SL) + 1\r\nargs.actor.addCondition(\"ablaze\", ablaze)","K06v93N4FXb70mB7":"args.item.system.encumbrance.value = Math.max(0, args.item.system.encumbrance.value - 1);","k0AkkBLtE8oZhBwn":"if (isNaN(parseInt(this.item.system.specification.value))) {\r\n let value = await ValueDialog.create(\"Armoured Value\", \"Enter the Armoured value\");\r\n if (value) {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","k3FqFgsF6a3TkxAD":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();\r\nreturn true;","k7ldJfyW201HgRFh":"args.item.system.qualities.value.push({name : \"magical\"});","k8TC0yzp4xfOXD2n":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n\t args.actor.addCondition(\"stunned\");\r\n }\r\n\targs.actor.hasCondition(\"bleeding\")?.delete()\r\n}","k9SvH4Lm3ZuI8S1N":"return ![\"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","kbXDGAmWWD4CZJHB":"const sin = this.effect.sourceActor.system.status.sin.value;\r\nconst roll = new Roll(`2d10 - ${sin}`);\r\nawait roll.evaluate();\r\nawait roll.toMessage({flavor: `${this.effect.name}`});\r\nthis.actor.system.status.mood.addEntry(`${this.effect.name} (${this.effect.sourceActor.name})`, roll.total);","kBXVEnSWzaQZLkJH":"if(args.test.result.critical)\r\n{\r\n args.test.result.damage +=1 \r\n args.test.result.additionalDamage += 1\r\n}","KD4nCSdSXJVJmk0R":"this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {suppressMsg : true}))\r\nawait this.actor.addCondition(\"ablaze\")","kEaBLoIHt1FpQVKq":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Invisibility\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","KF69WqF4PSEtpdb2":"args.fields.slBonus += 2;\r\n ","KG4TxnXiLLpfWOQO":"args.fields.difficulty = \"average\"","KGK9vL1Yl0qmCeCN":"let specification = this.item.system.specification.value;\r\nlet choice = [];\r\n\r\nif (!specification || specification == \"Trained Skills\")\r\n{\r\n choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n broken: \"Broken\",\r\n drive: \"Drive\",\r\n entertain: \"Entertain\",\r\n fetch: \"Fetch\",\r\n guard: \"Guard\",\r\n home: \"Home\",\r\n magic: \"Magic\",\r\n mount: \"Mount\",\r\n war: \"War\"\r\n }, this.effect.img), \"unlimited\", \"Choose Training\");\r\n}\r\nelse \r\n{\r\n choice = specification.split(\", \").map(i => {\r\n return {\r\n id : i.toLowerCase(),\r\n name : i\r\n }\r\n });\r\n}\r\n\r\nif (choice.length)\r\n{\r\n let changes = foundry.utils.deepClone(this.effect.changes);\r\n\r\n for(let training of choice)\r\n {\r\n switch(training.id)\r\n {\r\n case \"broken\" : \r\n let roll = await new Roll(\"2d10\").roll(); \r\n roll.toMessage(this.script.getChatData());\r\n changes.push({value : roll.total, mode : 2, key : \"system.characteristics.fel.modifier\"})\r\n\r\n if (this.actor.type == \"creature\")\r\n {\r\n let bestial = this.actor.itemTypes.trait.find(i => i.name == \"Bestial\");\r\n if (bestial)\r\n {\r\n bestial.update({\"system.disabled\" : true})\r\n }\r\n }\r\n break;\r\n\r\n case \"drive\" : \r\n\r\n break;\r\n\r\n case \"entertain\" : \r\n\r\n break;\r\n\r\n case \"fetch\" : \r\n\r\n break;\r\n\r\n case \"guard\" : \r\n let territorial = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JIAe7i7dqTQBu4do\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [territorial], {fromEffect: this.effect.id})\r\n setProperty(args, \"options.keepId\", true);\r\n break;\r\n\r\n case \"home\" : \r\n\r\n break;\r\n\r\n case \"magic\" : \r\n\r\n break;\r\n\r\n case \"mount\" : \r\n\r\n break;\r\n\r\n case \"war\" : \r\n changes.push({value : 10, mode : 2, key : \"system.characteristics.ws.modifier\"})\r\n break;\r\n }\r\n }\r\n this.effect.updateSource({name : `${this.effect.name} (${choice.map(i => i.name).join(\", \")})`, changes, \"flags.wfrp4e.trained\" : choice.map(i => i.id)})\r\n this.item.updateSource({\"system.specification.value\" : `${choice.map(i => i.name).join(\", \")}`})\r\n}","KICZPwLvbUSxbDrE":"let table = game.wfrp4e.tables.findTable(\"mutatemental\");\r\nif (!table)\r\n{\r\n\tui.notifications.error(\"Cannot find table with key: mutatemental\")\r\n}\r\nlet result = (await table.roll()).results[0];\r\nlet uuid = `Compendium.${result.documentCollection}.${result.documentId}`\r\nlet item = await fromUuid(uuid);\r\n\r\nif (item)\r\n{\r\n this.script.scriptNotification(`${item.name} added`)\r\n this.actor.createEmbeddedDocuments(\"Item\", [item])\r\n}\r\nelse \r\n{\r\n ui.notifications.error(\"Item could not be found: \" + uuid)\r\n}","kiJ6AiaYVUjt6aV6":"teeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\nteeth = teeth.toObject();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nthis.actor.createEmbeddedDocuments(\"Item\", [teeth])","kIM4Fs1lFVV7TSnj":"this.actor.modifyAdvantage(1);","KIoVBinAZK8sMOqD":"\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : \" - Wounded\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n fromUuid(\"Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb\").then(disease => {\r\n this.actor.createEmbeddedDocuments(\"Item\", [disease.toObject()])\r\n this.script.scriptNotification(\"Gained \" + disease.name)\r\n })\r\n }\r\n ","KJLAan0glJlyOyqF":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 10,\r\n \"bright\": 5,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"flame\",\r\n },\r\n \"color\": \"#ac9e6c\",\r\n }}));","kkC5EhqA05U6U0gU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (opposedResult.differenceSL < 6)\r\n {\r\n this.actor.addCondition(\"fatigued\", Math.floor(opposedResult.differenceSL / 2))\r\n }\r\n else if (opposedResult.differenceSL >= 6)\r\n {\r\n this.actor.addCondition(\"broken\");\r\n }\r\n}","KkjkYAGI9Em1NgiQ":"if (this.item.system.quantity.value) \r\n{\r\n this.item.system.reduceQuantity();\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Heal\"), { appendTitle: ` - ${this.effect.name}`, skipTargets: true })\r\n await test.roll();\r\n if (test.succeeded) \r\n {\r\n let actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n actor.applyEffect({ effectData: [this.item.effects.contents[0].convertToApplied()] })\r\n }\r\n else \r\n {\r\n this.script.scriptNotification(\"Heal Test failed!\", \"error\")\r\n }\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"None left!\", \"error\")\r\n}","KmngDrPD72xn22kZ":"if (this.actor.Species.toLowerCase() != \"skaven\") {\r\n this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) \r\n {\r\n let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n this.actor.update({ \"system.characteristics.t.initial\": this.actor.characteristics.t.initial - toughnessLost })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} lost ${toughnessLost} Toughness`)\r\n }\r\n })\r\n }","kMSdRskYDI2J1gnp":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll(); \r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}\r\n ","kmsGLWGxCY8Z8jVG":"return args.skill?.name != game.i18n.localize(\"NAME.Intuition\");","KnwYZbeRSBA94hfl":"if (!args.flags.lostFingers)\r\n{\r\n\targs.flags.lostFingers = true;\r\n\targs.fields.modifier -= 5 * this.actor.flags.useless[this.item.system.location.key]\r\n}","KPQfupKuaf4LCv4R":"const talents = await Promise.all([\"Schemer\", \"Second Sight\"].map(game.wfrp4e.utility.findTalent))\r\nthis.actor.createEmbeddedDocuments(\"Item\", talents, {fromEffect : this.effect.id})","KQmb5B27eJ1lkbVL":"return this.item.system.quantity.value > 0 && args.type != \"channelling\"","KQzbrpb0T5a7it4k":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv\");\r\nlet data = item.toObject();\r\ndata.name += ` (Disease)`;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","KSjsDlsx3DD6cT16":"return args.skill?.name != game.i18n.localize(\"NAME.Bribery\");","KT670CjGBEprx2fO":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.RWJrupj9seau0w31\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id})","KTBVDHUndI3qDOXM":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"))\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n args.actor.addCondition(\"stunned\")\r\n}","KuUkUmOOLf05I4Bp":"this.actor.hasCondition(\"broken\")?.delete();\r\n","KuuWAhoSzk0rCxxw":"args.fields.modifier += -20;","KUx0deSF3xNzMucL":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","kvaN100w0nBUlLbj":"let poisoned = this.actor.hasCondition(\"poisoned\")\r\nif (poisoned)\r\n{\r\n this.script.scriptMessage(\"Immune to Poisoned\")\r\n poisoned.delete()\r\n}","kvnZz8yqdTZbErkr":"args.actor.system.details.move.value -= 2;\r\nargs.actor.system.details.man -= 1;\r\nargs.actor.system.status.carries.max *= 1.5;","KVpDUEjHhd3nLa0f":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"enrage-beast\"))\r\n}","KVuPduDztyMZQNt9":"args.fields.slBonus += this.actor.system.characteristics.ag.bonus","kWynO1lQzjiSs8RK":"return args.skill?.name != game.i18n.localize(\"NAME.Haggle\");","KXzDe7cN2vynHjJO":"this.actor.hasCondition(\"blinded\")?.delete();\r\nthis.actor.hasCondition(\"deafened\")?.delete()\r\nthis.actor.hasCondition(\"unconscious\")?.delete()","kYiDBPRKIokFkr4Z":"if (args.item.type == \"skill\" && args.item.name == \"Ranged (Bow)\")\r\n{\r\n args.item.system.modifier.value += 20;\r\n}","kYmscP2HuXjDovBD":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","KyswmGj1uG3QS3ng":"args.applyAP = false;","KyUPYV1RXJxPOfyA":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"veasy\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"fatigued\");\r\n}","l1ntrpa8RE3Lg5xE":"return args.skill?.name === game.i18n.localize(\"NAME.Perception\");","L1RMLvKtRPFtnczI":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MGEPI4jNhymNIRVz\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","L2cdQppcPwxz24hN":"return !args.weapon","L89UcafRHqUfxoux":"let injury = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\ninjury.updateSource({\"system.location.key\" : this.item.system.location.key})\r\nthis.actor.createEmbeddedDocuments(\"Item\", [injury], {fromEffect: this.effect.id})","l8qFKSnMpy4P7XQR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","L9eAtDyaoHvqryk4":"return args.skill?.name != game.i18n.localize(\"NAME.Intimidate\");","laptAldsT0Fm1rDt":"let blunt = await Dialog.confirm({label : \"test\", content :`Apply blunt damage reduction? (-3)
`})\r\n\r\nif (blunt)\r\n{\r\n args.modifiers.other.push({label : this.effect.name, details : \"Blunt Damage Reduction\", value : -3})\r\n}","LAyLbcC0lOPwZP3U":"this.actor.addCondition(\"ablaze\", parseInt(this.effect.sourceTest.result.SL))","lCOdnKz8XpnkDs6Q":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();","LedRsrVo2f7lm3Ix":"return args.skill?.name == game.i18n.localize(\"NAME.Intimidate\");","LeKLtvEDrWh4yHsx":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\") || args.skill?.name.includes(game.i18n.localize(\"NAME.AnimalTraining\"));","lFO6XdfUODmFArqx":"args.actor.addCondition(\"bleeding\")","Lg1oRg4oNRvucsvi":"return !(args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\"))","LgYyLg0Y2AQ1SKcS":"let amount = this.effect.sourceTest.result.overcast.usage.other.current ?? 0;\r\n\r\nargs.fields.successBonus += 2 + amount;","lhemR8EP5tGNKout":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure : \"Suffer Creeping Irrationality\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n msg = `@UUID[${this.effect.sourceItem.uuid}]{Creeping Irratitonality} Roll: ${Math.ceil(CONFIG.Dice.randomUniform() * 10)}
`\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100)\r\n {\r\n msg += `${this.actor.prototypeToken.name} also gained 1 Corruption Point. If mutating, this results in a @Table[mutatemental]{Mental Corruption}
`\r\n let newCorruption = Number(this.actor.status.corruption.value) + 1\r\n this.actor.update({\"system.status.corruption.value\" : newCorruption})\r\n }\r\n\r\n this.script.scriptMessage(msg);\r\n}\r\n","LHUUXfZVLBhWqRvb":"this.actor.status.addArmour(5, {magical: true, source : this.effect})","lII4KMRblqwFBlsV":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 20,\r\n \"wp\" : 10,\r\n \"fel\" : 15\r\n}\r\nlet skills = [\"Channelling\", \"Charm\", \"Perform (Dancing)\"]\r\nlet skillAdvancements = [0, 6, 3]\r\nlet talents = [\"Attractive\", \"Distract\", \"Mimic\"]\r\nlet traits = [\"Distracting\", \"Flight (6)\", \"Spellcaster (Petty)\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [\"Marsh Lights\", \"Sleep\"];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","lj7vOpa6tHHZ9bBB":"return this.actor.attacker","LjfScVGBf0Egr70E":"let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize(\"NAME.AnimalCare\"));\r\nlet animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize(\"NAME.AnimalTraining\")));\r\n\r\nif (animalCare) \r\n animalCare.system.modifier.value += 20;\r\n\r\nfor (let training of animalTrainings) {\r\n training.system.modifier.value += 30;\r\n}","ljGX2w8hCTyLAjRp":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.details.price.gc -= Math.floor(args.actor.system.details.price.gc * 0.1 * specification);","ljpM7muMyxGD04EX":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","LjXPlgdXBdllnA3i":"return ![\"s\", \"t\"].includes(args.characteristic)","LkPtgN9A36OI6Frh":"return args.skill?.name == game.i18n.localize(\"NAME.Leadership\");","LLqAT9wEUGMLfDhU":"return !args.item?.system.isRanged","LlRhPGorLl5qJCU8":"if (this.actor.hasCondition(\"prone\")) \r\n{\r\n this.actor.addCondition(\"unconscious\");\r\n}\r\nelse \r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","Lm9IBkc918Duw3US":"let career = this.actor.itemTypes.career.find(c => c.getFlag(\"wfrp4e\", \"doubleLife\"))\r\n\r\nif(career)\r\n{\r\n career.system.current.value = true;\r\n}","lOIHiAIDtj91kllN":"const chanties = await WFRP_Utility.findAll('wfrp4e-soc.chanty');\r\nlet choice = await ItemDialog.create(chanties, 1, \"Choose Chanty\");\r\nif (choice.length) {\r\n console.log(choice);\r\n this.actor.createEmbeddedDocuments(\"Item\", choice, {fromEffect: this.effect.id});\r\n}","LOL2TGf8p8KxP14D":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type != \"cast\" || game.wfrp4e.config.magicWind[args.item.system.lore.value] != wind;","lol5J6h0pErzM71s":"return args.weapon?.system.properties.flaws.crewed","lOzkngzye4RmvALp":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.DrNUTPeodEgpWTnT\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\nthis.script.scriptNotification(\"Added \" + item.name)","Lp261O9fgEXmgPf3":"// If this actor wins a defending test, swap the test\r\nif (!args.opposedTest.result.swapped && args.opposedTest.result.winner == \"defender\" && args.opposedTest.attackerTest.result.damage)\r\n{\r\n args.opposedTest.swap(this.effect.label);\r\n}","lPudo1grrVp05i7a":"let loc = Math.floor(CONFIG.Dice.randomUniform() * 2) == 0 ? \"head\" : \"body\"\r\nlet damage = this.actor.system.characteristics.s.bonus + 6\r\n\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name}).then(async test => {\r\n await test.roll();\r\n if(test.failed)\r\n {\r\n await this.actor.addCondition(\"stunned\")\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }\r\n })","Lpv2N9LK9loeumiW":"if (this.actor.uuid != this.effect.sourceActor.uuid)\r\n{\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty: \"hard\"}, context : {failure : `${this.effect.name}: cannot move or take actions`}}).then(test => {\r\n test.roll();\r\n })\r\n}","LQEWSN5KnHHATPsf":"if (args.totalWoundLoss > 0)\r\n{\r\n this.script.scriptMessage(`${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","lQJ68n3y1xDyNicE":"return !args.options.sizeModifier && args.item?.system?.attackType != \"ranged\"","Lrb1S2aK7SFVD0C7":"if (args.totalWoundLoss > 0)\r\n{\r\n let test = await args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n await args.actor.addCondition(\"fatigued\");\r\n }\r\n}","lRZhkh8pcu93QTKz":"if (args.test.spell)\r\n{\r\n\targs.test.preData.SL = -10\r\n}","lSOAZ4FG44bT4jh1":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")\r\n\r\nlet infectedData = infected.toObject();\r\nlet fearData = fear.toObject();\r\nfearData.system.specification.value = 2;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData, infectedData], {fromEffect : this.effect.id})","Lu27iXtJVkrJ8bOx":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"))","lU4s3UTtBkU38djI":"this.actor.addCondition(\"entangled\")\r\nlet msg = `${this.actor.prototypeToken.name} loses 1 Wound and gains 1 Entangled Condition.`\r\nthis.script.scriptMessage(msg)\r\nthis.actor.modifyWounds(-1)","lvjcddwRiN9iGruy":"let test = await this.actor.setupCharacteristic(\"t\", { appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"challenging\" } })\r\nawait test.roll();\r\n\r\nif (test.failed) \r\n{\r\n let ageAdded = Math.ceil(CONFIG.Dice.randomUniform() * 10) + Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ws = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let bs = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let s = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let t = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let ag = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let dex = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n\r\n let currentAge = parseInt(this.actor.system.details.age.value)\r\n\r\n let inline = `@ROLL`\r\n let msg =\r\n `${this.actor.prototypeToken.name} ages by ${inline.replace(\"@ROLL\", ageAdded).replace(\"@TT\", \"2d10\")} and loses
\r\n${inline.replace(\"@ROLL\", ws).replace(\"@TT\", \"1d10\")} Weapon Skill
\r\n${inline.replace(\"@ROLL\", bs).replace(\"@TT\", \"1d10\")} Ballistic Skill
\r\n${inline.replace(\"@ROLL\", s).replace(\"@TT\", \"1d10\")} Strength
\r\n${inline.replace(\"@ROLL\", t).replace(\"@TT\", \"1d10\")} Toughness
\r\n${inline.replace(\"@ROLL\", ag).replace(\"@TT\", \"1d10\")} Agility
\r\n${inline.replace(\"@ROLL\", dex).replace(\"@TT\", \"1d10\")} Dexterity
\r\n `\r\n this.script.scriptMessage(msg);\r\n\r\n let characteristics = duplicate(this.actor.system.characteristics)\r\n\r\n characteristics.ws.initial -= ws\r\n characteristics.bs.initial -= bs\r\n characteristics.s.initial -= s\r\n characteristics.t.initial -= t\r\n characteristics.ag.initial -= ag\r\n characteristics.dex.initial -= dex\r\n\r\n this.actor.update({ \"system.characteristics\": characteristics, \"data.details.age.value\": ageAdded + currentAge })\r\n}","lwVhn4bSXJ3eoT9q":"if (this.item.system.weaponGroup.value == \"basic\")\r\n{\r\n let slash = this.item.system.qualities.value.find(i => i.name == \"slash\")\r\n if (slash)\r\n {\r\n slash.value = \"2A\"\r\n }\r\n}","LxdLkPxH3SFvYrCJ":"if (args.effect.conditionId == \"ablaze\")\r\n{\r\n args.data.formula += ` - ${this.actor.system.characteristics.t.bonus}`\r\n}","LXEUhHuXe8keEPI9":"let test = await this.actor.setupCharacteristic(\"wp\", {fields: {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tlet stuns = Math.max(1, Math.abs(test.result.SL))\r\n\tthis.actor.addCondition(\"stunned\", stuns)\r\n}","LyAK0dVDS5L09yq2":"let caster = this.effect.sourceActor\r\n\r\nif (caster)\r\n{\r\n let bonus = caster.system.characteristics.wp.bonus\r\n this.actor.modifyWounds(bonus)\r\n\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} regains ${bonus} Wounds`)\r\n}","lYYkGzqNshiYc7WI":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"poisoned\")\r\n}","lZuavewrJzOehrJQ":"let test = await this.actor.setupSkill('Endurance', {\r\n appendTitle: ` – ${this.effect.name}`,\r\n skipTargets: true,\r\n fields: {difficulty: 'easy'},\r\n characteristic: 't',\r\n context: {failure: \"Mast shattered!\"}\r\n});\r\nawait test.roll();\r\n\r\nif (test.failed) {\r\n let crit = await fromUuid(\"Item.d4bCnR1zINTNF9VC\");\r\n await this.actor.createEmbeddedDocuments(\"Item\", [crit]);\r\n this.effect.update({disabled: true});\r\n}","M0eOB2Jg9KzcN1gz":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\", // Holy Visions\r\n \"Compendium.wfrp4e-core.items.Item.mNoCuaVbFBflfO6X\", // Sixth Sense\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","M0XhKnWjG14pk3iH":"return !args.skill?.name.includes(\"Channelling\") && args.type != \"channelling\" && args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(\"Language (Magick)\") && args.type != \"cast\"","M2FshTX4PjKFVU8y":"args.flags.earCount = Number.isNumeric(args.flags.earCount) ? args.flags.earCount+1 : 1;\r\nif (args.characteristic == \"fel\")\r\n{\r\n\targs.fields.modifier -= 5;\r\n}\r\nif (args.flags.earCount == 2 && args.skill?.name == game.i18n.localize(\"NAME.Perception\"))\r\n{\r\n\targs.fields.modifier -= 20;\r\n}\r\n","m3qEVO5fseV6KHXa":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qn4ZpvTQIX4rcJDl\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","m58MpMZBblpq5LJu":"args.prefillModifiers.slBonus++;\r\nargs.prefillModifiers.successBonus++;\r\n","M5bh0heeafA2fQQ8":"if (args.test.spell?.getFlag(\"wfrp4e\", \"boonOfTzeentch\"))\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.effect.name} quits your mind in disgust and erases itself from your grimoire!`)\r\n this.effect.sourceItem.delete();\r\n }\r\n}","m84kG5cEPEByqHdd":"const uuid = \"Compendium.wfrp4e-core.items.Item.SfUUdOGjdYpr3KSR\";\r\nconst item = await fromUuid(uuid);\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect: this.effect.id});","m8qBlbH7ROoqa22o":"return args.options.reload","M9VgeYGiUO97ZUW4":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nlet data = item.toObject();\r\ndata.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n\targs.actor.addCondition(\"unconscious\")\r\n}\r\n\r\n","ma0sWhebqwdRHWvY":"if (!args.flags.trained)\r\n{\r\n args.flags.trained = true;\r\n args.fields.modifier += 10;\r\n}","maKr58mvvyKxFyC3":"if (args.item.type == \"prayer\" && (args.item.damage.value || args.item.damage.dice))\r\n args.item.damage.value += \"+1\"","masOBNgSi5HYkf3m":"return args.type != \"cast\" && args.type != \"channelling\"","mBcLf11upaHS8AQq":"this.actor.status.addArmour(1, {source: this.effect})","MCK6WyjwYT28lsTN":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.u0CFf3xwiyidD9T5\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","McLR9YcgVUG3MooC":"args.applyTB = false;","MDLttXplnNthncGr":"return args.type == \"cast\" && [\"death\", \"necromancy\", \"life\", \"light\", \"heavens\"].includes(args.spell?.system.lore.value)","Me1wS5XdqUEy7OGt":"let loc = (await game.wfrp4e.tables.rollTable(\"hitloc\")).result;\r\nlet critTable = `crit${this.generalizeTable(loc)`;\r\nlet crit = (await game.wfrp4e.tables.rollTable(critTable)).result;\r\n\r\nthis.script.scriptMessage(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);","MFKhU9vp8bQpHP3I":"let value = parseInt(this.item.specification.value)\r\nlet name = this.actor.prototypeToken.name\r\n\r\nif (game.user.isGM && game.user.targets.size)\r\n{\r\n game.user.targets.forEach(t => {\r\n t.actor.applyTerror(value, name)\r\n })\r\n game.user.updateTokenTargets([]);\r\n}\r\nelse \r\n{\r\n game.wfrp4e.utility.postTerror(value, name)\r\n}","MfxWXZwaZUjGSBqw":"if (this.actor.hasCondition(\"ablaze\"))\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\")\r\n await this.actor.hasCondition(\"ablaze\")?.delete()\r\n}","MfxzwJz2o9ho2hOM":"return args.skill?.name == \"Lore (Apothecary)\"","mGHKBkDp4omSaBlD":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 20,\r\n \"bright\": 10,\r\n \"angle\": 360,\r\n \"alpha\": 0.4,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","mgLGN1XPzPE4dReN":"args.fields.slBonus--;","MgMMoC4Umpg7fmNI":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.Abort damage with ${this.effect.name}?`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n })\r\n\r\n if (choice)\r\n {\r\n args.abort = `${this.effect.name}: Damage cancelled`\r\n }\r\n}","ncIjDE6TFx88IQA1":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name == game.i18n.localize(\"NAME.Athletics\");","nCWAflBj7Si2BI1Q":"if (args.item.type == \"spell\" && args.item.system.lore.value != \"petty\")\r\n{\r\n args.item.cn.value = Math.max(4, args.item.cn.value * 2)\r\n}","nD2QVg3DrPK3foMf":"args.actor.setupSkill(\"Dodge\", { fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) {\r\n await args.actor.addCondition(\"bleeding\")\r\n await args.actor.addCondition(\"entangled\")\r\n }\r\n })","NdquQqyuOkGCj8Uo":"let darkvision = await fromUuid(\"Compendium.wfrp4e-core.items.Item.JQa5DLnTs2SEzRrc\")\r\nlet fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet acutesense = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nfear = fear.toObject();\r\nfear.system.specification.value = 1;\r\nacutesense = acutesense.toObject();\r\nacutesense.name += \" (Smell)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", [darkvision, fear, acutesense], {fromEffect : this.effect.id})","NDvNGATDM2xPFJK0":"brokenbone = await fromUuid(\"Compendium.wfrp4e-core.items.hCadFsTRvLN9faaY\")\r\nteeth = await fromUuid(\"Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1\")\r\ntongue = await fromUuid(\"Compendium.wfrp4e-core.items.rkJA1DlK51QuRlJy\")\r\nbrokenbone = brokenbone.toObject();\r\nteeth = teeth.toObject();\r\ntongue = tongue.toObject();\r\n\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage(this.script.getChatData({flavor : \"Teeth Lost\"}))\r\n\r\nteeth.system.location.value = `${roll.total} ${teeth.system.location.value}`\r\nbrokenbone.system.location.value = \"Jaw\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [brokenbone, teeth, tongue])\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"vhard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"unconscious\")\r\n}","neaaVy6D6tfcst5P":"args.fields.slBonus += this.actor.characteristics.i.bonus;\r\n","nEaF3jbCiVYD8jia":"return args.skill?.name != game.i18n.localize(\"NAME.Charm\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Lore\"));","ngMm7SgtVqVovFJG":"if (args.test.result.critical && args.test.result.critical != \"Total Power\")\r\n{\r\n args.test.result.other.push(` Bonecrusher Critical (+20) (only if Critical Cast selected)`)\r\n}","nGTxNWBUBgTr87wU":"if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == \"attacker\")\r\n{ \r\n this.script.scriptMessage(`Becomes lodged in the armour or flesh of the opponent. See @UUID[${this.item.uuid}]{${this.item.name}}.`, speaker : {alias : this.item.name}, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}\r\n ","nHJdlqbOP0ECgywb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.CnydL8p3PVAuF98w\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","NI3ZzIAlpQfVSjvf":"if (isNaN(parseInt(this.item.system.specification.value)))\r\n{\r\n let value = await ValueDialog.create(\"Enter Fear value\", this.item.name);\r\n if (value)\r\n {\r\n this.item.updateSource({\"system.specification.value\" : value});\r\n }\r\n}","nIOeK0BrtdZeZW8X":"console.log(\"SKILL\", this)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields : {difficulty : \"challenging\"}, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet rollD10 = await new Roll(\"1d10\").roll()\r\nrollD10.toMessage(this.script.getChatData())\r\n\r\n\r\nif (test.succeeded)\r\n{\r\n //...\r\n}\r\nelse if (test.failed)\r\n{\r\n //...\r\n}\r\n","njPP9wDAsdh4WHIj":"if (args.totalWoundLoss > 0 && [\"trait\", \"weapon\"].includes(args.opposedTest.attackerTest.item?.type))\r\n{\r\n this.script.scriptMessage(`Infected: ${args.actor.name} must pass an Easy (+40) Endurance Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Nk6qAalTmc6UI2XQ":"const message = game.messages.get(args.options.message);\r\nconst sl = message.system.sl;\r\nthis.effect.setFlag(\"wfrp4e-archives3\", \"sl\", sl);","nkbTnaeBpthyhw4J":"let fortunePoints = this.effect.sourceTest.result.overcast.usage.other.current\r\nlet current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : fortunePoints + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${fortunePoints + current}`)","nkdKBJ8ItqWiRAWL":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.
\r\n They gain +50 to Swim Tests and can breathe underwater.
\r\n If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}. \r\n `,\r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}) \r\n}\r\n\r\n// Notify of lingering effects when mask is removed\r\nelse if (!args.equipped)\r\n{\r\n await this.item.effects.contents[0].delete();\r\n await this.item.update({name : this.item.name += \" (Used)\"})\r\n this.script.scriptMessage(`${this.item.name} on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\")}\r\n )\r\n \r\n}\r\n","NkqtQaLEGYst0PUO":"if (this.actor.has(\"Magic Resistance\", \"talent\")) \r\n return\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","nkSmu7v9WiAaK4vq":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","nlQA0shW8FCXjY7u":"return args.type != \"cast\" || args.item.lore.value != \"fire\"","NnA4zpuO6iUXKhH7":"if ((args.opposedTest.attackerTest.item && args.opposedTest.attackerTest.item.isMelee) || (args.opposedTest.attackerTest.item && !args.opposedTest.attackerTest.item.name.includes(\"Ranged\")))\r\n{\r\n let AP = parseInt(this.effect.sourceTest.result.SL)\r\n args.modifiers.ap.value += AP;\r\n args.modifiers.ap.magical += AP;\r\n args.modifiers.ap.details.push(`${this.effect.name} (${AP})`)\r\n}","NnDq4miIPNEtZUWb":"args.test.result.critModifier = args.test.result.critModifier || 0;\r\nargs.test.result.critModifier += 20;\r\n\r\nif (args.test.result.critical)\r\n{\r\n args.test.result.critical = `${game.i18n.localize(\"Critical\")} (+${args.test.result.critModifier})`\r\n}","NNytXz5XFPrEF6dw":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n}\r\n ","Np8P8IPT2GYlrh6G":"return args.skill?.name !== `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})` && args.type !== \"channelling\";","NQSvFWhmBQAyx5Zz":"return args.item?.isRanged","nqWu0ZplxzRiUEAg":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\n// Kind of insane but whatever\r\nlet opposedResult = test.opposedMessages[0]?.system.opposedHandler?.resultMessage?.system.opposedTest?.result\r\n\r\nreturn opposedResult?.winner == \"attacker\";","NrVFrIXM8GnIbojv":"args.item.system.damage.value = `SB + ${this.actor.system.characteristics.fel.bonus}`;","nSXzktHyNjGUXjaw":"return args.item?.system.isRanged","nuIpPD4uaZRuJni8":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.qdMbxW09FUoYBzmB\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","nvrFhHHVq3KzirlR":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"))\r\n","nxNqWmmF6mJTnrLo":"return args.weapon?.system.usesHands.includes(this.item.system.location.key);","nYtAjSArsNbrU2ob":"if ([\"ag\", \"i\", \"int\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier -= 10;\r\n}\r\nelse if ([\"wp\"].includes(args.characteristic))\r\n{\r\n args.fields.modifier += 10;\r\n}","nzh8d46l1ikhkz8Q":"return (args.type == \"weapon\" && (args.item.system.weaponGroup.value == \"blackpowder\" || args.item.system.weaponGroup.value == \"engineering\")) || (args.type == \"cast\" && args.item.system.lore.value == \"fire\")","o1zD8mej9TWKNxUq":"args.fields.slBonus -= 1;","o3JUBKLvE6bBxK2n":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" } })\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n await this.actor.addCondition(\"prone\")\r\n let injury = await fromUuid(\"Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx\");\r\n injury = injury.toObject()\r\n let toes = Math.clamped(Math.abs(test.result.SL) + 1, 1, 5)\r\n injury.system.location.key = this.item.system.location.key[0] + injury.system.location.value\r\n if (injury.system.location.key[0] == \"r\")\r\n {\r\n injury.system.location.value = `${toes} Right ${injury.system.location.value}s`\r\n }\r\n else if (injury.system.location.key[0] == \"l\")\r\n {\r\n injury.system.location.value = `${toes} Left ${injury.system.location.value}s`\r\n }\r\n setProperty(injury, \"system.wfrp4e.count\", toes)\r\n this.actor.createEmbeddedDocuments(\"Item\", [injury])\r\n}","O45vpR4jDbQQnmvJ":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0\")).toObject();\r\nanimosity.name = animosity.name.replace(\"(Target)\", \"(Followers of Slaanesh)\");\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","O7lXFZLrLdFaShGR":"args.options.catfall = true;","o88xuUConwt0vFLw":"let points = this.effect.sourceTest.result.overcast.usage.other.current;\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : this.actor.system.status.fortune.value + points});\r\n\r\nthis.script.scriptMessage(`Gained ${points} Fortune Points`)","O9fc0hLHdkTgSuLg":"let bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet venom = await fromUuid(\"Compendium.wfrp4e-core.items.gFkRm9wS65qe18Xv\")\r\nlet biteData = bite.toObject();\r\nlet venomData = venom.toObject();\r\n\r\nbiteData.system.specification.value = 3 - this.actor.characteristics.s.bonus;\r\nvenomData.system.specification.value = \"Average\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, venomData], {fromEffect : this.effect.id})","Oa9FmLXRRZRpLrrq":"let test = await this.actor.setupTrait(this.item); \r\nawait test.roll();","obIXhQXKFyyQoNNV":"this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields: { difficulty: \"average\" } }).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n this.actor.modifyWounds(-1);\r\n this.script.scriptMessage(\"Takes 1 Damage\")\r\n }\r\n})","ocBW3osTFnb5JCfe":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OCFrGXAYfo9OYnhc":"return args.item?.system.magicMissile?.value || args.item?.system.attackType","OcQe0zfksf1DCJYe":"args.actor.system.characteristics.s.value += 30\r\nargs.actor.system.characteristics.t.value += 30\r\n\r\nargs.actor.system.characteristics.s.bonus += 3\r\nargs.actor.system.characteristics.t.bonus += 3\r\n\r\nif (args.actor.system.characteristics.s.value > 100)\r\n{\r\n args.actor.system.characteristics.s.value = 100\r\n args.actor.system.characteristics.s.bonus = 10\r\n}\r\n\r\nif (args.actor.system.characteristics.t.value > 100)\r\n{\r\n args.actor.system.characteristics.t.value = 100\r\nargs.actor.system.characteristics.t.bonus = 10\r\n}","oDNfCNyt5KaUYmg2":"if(args.opposedTest.result.winner == \"defender\")\r\n{\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n let msg = `Rolled ${roll}.`\r\n if (roll >= 7)\r\n {\r\n msg = `Attack hits with an SL of ${roll - 6}.`\r\n }\r\n this.script.scriptMessage(msg, {blind: true, whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","OeCgX3hIsfLfmGvC":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Perception\"))\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.actor.removeCondition(\"surprised\");\r\n}","OeKeQAAcJhdI4Qky":"if (this.actor.hasCondition(\"stunned\") || this.actor.hasCondition(\"unconscious\"))\r\n{\r\n\tthis.script.scriptNotification(\"Disabled!\");\r\n\tawait this.effect.update({\"disabled\" : true})\r\n}","oEsUsI74yGTZ9CwU":"return args.item?.name == game.i18n.localize(\"NAME.CharmAnimal\")","OEy2lxvic37dRBEt":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"petty\"\r\n }\r\n]\r\n\r\nlet petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Petty Spells\")\r\n\r\n\r\nfilters = [\r\n {\r\n property : \"type\",\r\n value : \"spell\"\r\n },\r\n {\r\n property : \"system.lore.value\",\r\n value : \"\"\r\n }\r\n]\r\n\r\nlet arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, \"Choose 3 Arcane Spells\")\r\n\r\nlet items = petty.concat(arcane).map(i => i.toObject())\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","ofddAHvzn1xUueSG":"args.AP.head.value -= tinDifference(args.AP.head.layers)\r\nargs.AP.body.value -= tinDifference(args.AP.body.layers)\r\nargs.AP.lArm.value -= tinDifference(args.AP.lArm.layers)\r\nargs.AP.rArm.value -= tinDifference(args.AP.rArm.layers)\r\nargs.AP.rLeg.value -= tinDifference(args.AP.rLeg.layers)\r\nargs.AP.lLeg.value -= tinDifference(args.AP.lLeg.layers)\r\n\r\nfunction tinDifference(layers)\r\n{ \r\n let metalAP = layers.filter(i => i.metal).reduce((prev, current) => prev + current.value, 0)\r\n\r\n let tinAP = layers.filter(i => i.metal).reduce((prev, current) => prev + Math.max(0, current.value - 2), 0)\r\n\r\n return metalAP - tinAP;\r\n}","Ofn6vDbP3fZ4UlSc":"args.fields.modifier += -20;\r\n ","oGdsGPgJWcyWkiWl":"this.actor.addCondition(\"broken\")\r\n\r\nif (this.actor.has(game.i18n.localize(\"NAME.Undead\")))\r\n{\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(this.effect.sourceTest.result.damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n}","ogJBAXTXyhTqACPO":"return args.item?.system.attackType != \"melee\"","OgSI0Z6SHjYuqKIz":"let blows = this.item.getFlag(\"wfrp4e\", \"blows\") || 0\r\nlet difficulties = Object.keys(game.wfrp4e.config.difficultyLabels)\r\n\r\nblows = Math.clamped(blows, 0, difficulties.length - 1)\r\nif (this.item.system.protects[args.opposedTest.result.hitloc.value])\r\n{\r\n let difficulty = difficulties[blows];\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {fields: {difficulty}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a Challenging (+0) Willpower Test`);\r\n this.item.setFlag(\"wfrp4e\", \"failedCool\", true);\r\n }\r\n })\r\n}","OGX4BneaYAnV25TO":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'average';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","oV81zgbZsuTFG6L2":"let caster = this.effect.sourceActor;\r\n\r\nthis.actor.modifyWounds(caster.system.characteristics.fel.bonus);\r\n\r\nthis.script.scriptMessage(`Healed ${caster.system.characteristics.fel.bonus} Wounds`);","OvIELZLvnlN2H2uw":"args.update({light : {\r\n \"dim\": 2,\r\n \"bright\": 1,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 4,\r\n \"intensity\": 4,\r\n \"type\": \"pulse\",\r\n },\r\n \"color\": \"#949bff\",\r\n}});","oW1gtYVT5nrxDjM7":"return args.characteristic != \"ag\"","oWa7RkScnl6lR5vd":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n let item = await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")\r\n let data = item.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [data])\r\n \r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @UUID[Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP] for [[1d10]] hours`)\r\n }\r\n}","oWM43EdUiyHgUlfW":"if (args.test.item && args.test.item.name == game.i18n.localize(\"NAME.ConsumeAlcohol\"))\r\n args.test.preData.canReverse = true","OXoqtpOdfkURZbuL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","OxsBnnVI3Smpknpb":"if (this.actor.status.advantage.value && !this.actor.sameSideAs(this.effect.sourceActor))\r\n{\r\n this.actor.modifyAdvantage(-1);\r\n this.script.scriptNotification(`${this.actor.name} loses 1 Advantage`);\r\n}","Oz7pWF9mEc1pQypj":"let roll = await new Roll(\"1d10\").roll();\r\nroll.toMessage({flavor : this.effect.name, speaker : {alias : this.actor.prototypeToken.name}})\r\nthis.actor.addCondition(\"stunned\", roll.total)","p222EiR8RRtlPm31":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed;","P29tT1eMMdAw3CPF":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.3S4OYOZLauXctmev\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"hard\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tthis.actor.addCondition(\"unconscious\")\r\n}","p7NJB1PsY6X5q8OO":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet traits = await warhammer.utility.findAllItems(\"trait\");\r\ntraits = traits.filter(t => t.name.includes(\"Companion Trait\"));\r\n\r\nlet items = await ItemDialog.create(traits);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: items[0].name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","pAgiAGyaLJY10894":"return args.skill?.name == game.i18n.localize(\"NAME.Charm\");","pBMioPUtDn1mk9f5":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5KP9sOoLSGvj9EXp\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","PBW6IZtwawNHxB6y":"return args.options.dodge && this.actor.isMounted","PdClojv7yNgQpOUc":"return args.skill?.name != game.i18n.localize(\"NAME.Endurance\");","PeZYj8b0vedyJj00":"// This script needs to be separate because equipTransfer is off on the other effect, and thus won't execute when added to an actor\r\n\r\nlet mainEffect = this.item.effects.contents[0];\r\nif (mainEffect.name.includes(\"(Lore)\"))\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.magicLores, this.item.img), 1, \"Choose Lore\");\r\n if (choice.length)\r\n {\r\n mainEffect.update({name : mainEffect.name.replace(\"Lore\", choice[0].name)})\r\n this.item.update({name : this.item.name += ` (${choice[0].name})`})\r\n }\r\n}\r\n\r\nthis.effect.delete();","pG5OVokZzCRHIrwz":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mgeiaDZXei7JBEgo\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Pg9C6nJX5QHIdqa9":"return !args.item?.system.attackType\r\n","Ph3TdQw1lGiFr049":" if (!args.test.context.phantasmal && \r\n (this.actor.isOpposing || args.test.context.defending) && \r\n args.test.result.roll % 11 == 0 && \r\n args.test.succeeded && \r\n [\"Language (Magick)\", \"Dodge\"].includes(args.test.item?.name))\r\n {\r\n args.test.context.phantasmal = true; // Flag so items aren't readded if test is edited\r\n let text = `${this.effect.name}: Adding Unstable and Ward`\r\n args.test.result.other.push(text) \r\n this.script.scriptNotification(text);\r\n \r\n let ward = await fromUuid(\"Compendium.wfrp4e-core.items.Bvd2aZ0gQUXHfCTh\")\r\n let wardData = ward.toObject();\r\n wardData.system.specification.value = 9;\r\n \r\n let unstable = await fromUuid(\"Compendium.wfrp4e-core.items.D0ImWEIMSDgElsnl\")\r\n let unstableData = unstable.toObject();\r\n this.actor.createEmbeddedDocuments(\"Item\", [wardData, unstableData], {fromEffect: this.effect.id})\r\n }\r\n","pHyXdPnWwoFrUA5n":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\"));","PI1QNaKFeqood6d7":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n attackerReach = attackerReach < 7 ? attackerReach + 1 : attackerReach\r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","PjRxGuUDKGmSmVDc":"fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\").then(item => {\r\n item = item.toObject()\r\n item.system.specification.value = this.actor.characteristics.ag.value\r\n this.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})\r\n})","pkKpxVqRHIzywerL":"const ablaze = this.actor.hasCondition(\"ablaze\");\r\n\r\nif (ablaze) {\r\n ablaze.delete();\r\n this.script.scriptNotification(\"Resisted Ablaze\");\r\n}","pLKv4moua6XhNdmA":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.1dUizIgLBgn4jICC\");\r\nlet data = item.toObject();\r\ndata.name += \" (Woodlands)\";\r\nthis.actor.createEmbeddedDocuments(\"Item\", Array(this.effect.sourceTest.result.overcast.usage.other.current).fill(data), {fromEffect : this.effect.id})","PmELrzD3RmF9qKkO":"if (this.item.system.specification.value == \"Size\")\r\n{\r\n let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.actorSizes, this.item.img), 1, \"Choose Size\");\r\n if (choice[0])\r\n {\r\n this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n this.effect.updateSource({name : this.effect.name + ` (${choice[0].name})`})\r\n }\r\n}","PMISUsaEDBA7D3od":"// After consumption, the user gains the Magic Resistance 3 Creature Trait, \r\n// reducing the SL of any spell affecting it by 3. \r\n// This effect lasts for one hour.\r\nconst hasMagicResistance = this.actor.has(\"Magic Resistance\")\r\n\r\nif (hasMagicResistance === undefined) {\r\n fromUuid(\"Compendium.wfrp4e-core.items.yrkI7ATjqLPDTFmZ\").then(trait => {\r\n let traitItem = trait.toObject()\r\n traitItem.system.specification.value = 2\r\n this.actor.createEmbeddedDocuments(\"Item\", [traitItem], {fromEffect: this.effect.id})\r\n })\r\n this.script.scriptMessage(`${this.actor.prototypeToken.name} has gained the Magic Resistance Trait. This effect lasts for one hour.
`, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) \r\n}\r\n\r\nif (hasMagicResistance) {\r\n // Multiple doses may be consumed at once, with each one adding an additional 1 to the Magic Resistance rating and increasing the duration by one hour. \r\n let msg = `${this.actor.prototypeToken.name} has enhanced their Magic Resistance by 1 to Rating ${parseInt(hasMagicResistance.system.specification.value)}. This effect lasts for one hour.
`\r\n\r\n // Resist toxic effect\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n fields: {difficulty: \"challenging\"}\r\n }).then(async test => {\r\n await test.roll()\r\n\r\n // If they fail ...\r\n if (!test.succeeded) {\r\n msg += `However, they begin to ooze the thick, poisonous slime that coats every Dreadmaw. They have gained 1 Poisoned Condition now and should continue to receive an additional @Condition[Poisoned] Condition at the end of each of the round.
\r\nIf they are still alive at the end of 10 rounds, the effect ends and all Poisoned Conditions gained from ${this.effect.name} are removed.
`\r\n this.actor.addCondition(\"poisoned\", 1)\r\n }\r\n this.script.scriptMessage(msg, {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true })\r\n })\r\n}\r\n","PMNjdEAusVBfam09":"return args.skill?.name === game.i18n.localize(\"NAME.Charm\");","Pn5fekTbkwlr61XU":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Engineer)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","pnB9TzSEytkxk3Rb":"return this.actor.hasSystemEffect(\"infighting\")","pNPjXEoQGHLKzq0r":"let talent = this.actor.has(\"Arcane Magic (Light)\", \"talent\")\r\nlet demon = this.actor.has(game.i18n.localize(\"NAME.Daemonic\"))\r\n\r\nif (!talent)\r\n{\r\n await this.actor.addCondition(\"blinded\")\r\n}\r\n\r\nif (demon)\r\n{\r\n await this.actor.addCondition(\"stunned\")\r\n}","PoNnT5EqvLj2r5yf":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\") && args.skill?.name != game.i18n.localize(\"NAME.Track\");","pPV9oEydXb7oi6jX":" if (args.totalWoundLoss > 0)\r\n {\r\n args.actor.addCondition('ablaze')\r\n }","pq1YQffxtOcqCRTn":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {appendTitle: ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (!test.succeeded)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","pR4Q2OnPxXtwRVli":"let criticals = this.actor.itemTypes.critical;\r\n\r\nif (criticals.length)\r\n{\r\n this.script.scriptNotification(\"Cannot suffer Critical Wounds\");\r\n this.actor.deleteEmbeddedDocuments(\"Item\", criticals.map(i => i.id))\r\n}\r\n\r\nif (getProperty(args.data, \"system.status.wounds.value\") == 0)\r\n{\r\n this.script.scriptNotification(`Dormant for ${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds`)\r\n}","PsO7aTdELJt35eHP":"let morale = await new Roll(\"-1d10\").roll();\r\nlet mood = await new Roll(\"-2d10\").roll();\r\n\r\nmorale.toMessage(this.script.getChatData({flavor : \"Morale\"}));\r\nmood.toMessage(this.script.getChatData({flavor : \"Manann's Mood\"}));\r\n\r\nawait this.actor.system.status.morale.addEntry(\"Albatross Died\", morale.total)\r\nawait this.actor.system.status.mood.addEntry(\"Albatross Died\", mood.total);\r\n\r\nthis.effect.delete();","PVjaKAHTKDA0rA9J":"let test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();","pvk5OhTNdVgwXoUa":"args.fields.successBonus += 2;","pVSnn4Zw6y1EBDhv":"args.actor.system.details.man -= 1;\r\nargs.actor.system.details.move.value -= 1;","PwqTmw7rsG8hzqCS":"if (args.test.result.critical && args.test.result.roll % 10 == 0) \r\n{\r\n game.wfrp4e.tables.findTable(\"knuckleduster-diseases\").roll().then(roll => {\r\n let results = roll.results[0]\r\n\r\n this.script.scriptMessage(`${this.actor.name} contracts @UUID[Compendium.${results.documentCollection}.${results.documentId}]{${results.text}}`, {blind : true, whisper: ChatMessage.getWhisperRecipients(\"GM\") })\r\n })\r\n\r\n }\r\n\r\n","px7eEdhOEt7zOTrq":"return [\"int\", \"t\", \"wp\", \"i\"].includes(args.characteristic)","pzimrxrqpv282Oqb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.TaYriYcJkFuIdBKp\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id});\r\n","pzknBcJtZWeliE27":"return args.item?.name == game.i18n.localize(\"NAME.Leadership\") || args.item?.name == game.i18n.localize(\"NAME.Cool\")","q0LvphC8RDSyR0oY":"let choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n ws : game.wfrp4e.config.characteristics.ws,\r\n t : game.wfrp4e.config.characteristics.t,\r\n ag : game.wfrp4e.config.characteristics.ag,\r\n wp : game.wfrp4e.config.characteristics.wp\r\n}, this.effect.img), 1, \"Choose Characteristic\");\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.characteristic\" : choice[0].id})","Q1trEhtqjIiDvFPF":"args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')","q3nRyXaxksdCiLFM":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.j6v78dnOOdCB6c3d\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q4EQgP4gZR8TTm7S":"let penalty = 0\r\nif (args.item?.system.attackType)\r\n{\r\n penalty -= 30\r\n}\r\nif (args.actor.has(\"Second Sight\", \"talent\"))\r\n penalty += 10\r\n\r\nargs.prefillModifiers.modifier += penalty","Q5gh5Y9dCdclcwsD":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Channelling\")) && args.skill?.name != `${game.i18n.localize(\"NAME.Language\")} (${game.i18n.localize(\"SPEC.Magick\")})`","Q68WiUWY7GxiXBbT":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.9GNpAqgsKzxZKJpp\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"When Alone\";\r\ndata.effects[0].disabled = true;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","Q7eULXQ9AfDRmUGO":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","q8lOAWr2970sZeTw":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Q9EmlWmuDac83cJw":"return args.skill?.name == game.i18n.localize(\"NAME.Climb\") || args.skill?.name?.includes(game.i18n.localize(\"NAME.Stealth\"));","QaEUhlvxFPzowH0v":"args.actor.characteristics.ag.modifier -= 10;\r\n\r\n if (args.actor.details.move.value > 3)\r\n {\r\n args.actor.details.move.value -= 1;\r\n if (args.actor.details.move.value < 3)\r\n args.actor.details.move.value = 3\r\n }","qAEZgtu5CrfUkxhx":"if (args.test.options.staunchBleeding) \r\n{\r\n if (args.test.succeeded) \r\n {\r\n let staunch = Number(args.test.result.SL) + 1\r\n if (args.test.options.fieldDressing && args.test.result.reversed)\r\n {\r\n staunch = Math.min(1, Number(args.test.result.SL)) + 1\r\n }\r\n args.test.result.other.push(`${this.actor.name} removed ${staunch} Bleeding conditions from the patient.`)\r\n }\r\n else if (this.actor.characteristics.int.bonus + Number(args.test.result.SL) < 0)\r\n {\r\n args.test.result.other.push(`The patient contracts a @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Minor Infection}.`)\r\n }\r\n}","QaGNsqKm2Nf0zGVm":"return [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","qaVde0sTuMBRi2nl":"return [\"NAME.Evaluate\", \"NAME.Gamble\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","QbIYnshWeP1U8SUy":"args.applyAP = false;\r\nargs.applyTB = false;","qcyl98GYD55BkJsD":"this.actor.status.encumbrance.state = 0;\r\nthis.actor.status.encumbrance.pct = 0;","QF8LanKNoAlTkQG0":"this.actor.system.status.encumbrance.max += 2","QfTBRGXVfwQSghmd":"fromUuid(this.effect.origin).then(caster => {\r\n if (caster) {\r\n if (actor.items.find(it => it.name == game.i18n.localize(\"Bestial\"))) {\r\n let healed = caster.characteristics.wp.bonus\r\n let wounds = duplicate(args.actor.status.wounds)\r\n wounds.value += healed\r\n\r\n if (wounds.value > wounds.max)\r\n wounds.value = wounds.max\r\n\r\n args.actor.update({ \"system.status.wounds\": wounds })\r\n ChatMessage.create({ content: `${this.actor.prototypeToken.name} regains ${healed} Wounds`, speaker: { alias: this.effect.name } })\r\n } else {\r\n ui.notifications.warn(\"Target actor has no Bestial trait\")\r\n }\r\n }\r\n})\r\n\r\n","Qgn92fZyc3Psn8QJ":"if (args.test.options.useOnesAttractive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","QHQ7XmFOjT9wXgw1":"if (args.actorsystem.details.move.oars.value > 0)\r\n args.actor.system.details.move.oars.value -= 1;\r\n\r\nargs.actor.system.details.man -= 2;","qijgjcOBCDmhglRX":"return args.skill?.name == game.i18n.localize(\"NAME.SleightOfHand\");","qjli5evn8UA9uTeZ":"return args.actor.uuid == this.effect.sourceActor.uuid;","qK4q4o6cQhcGzFX3":"let fear = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet leader = await fromUuid(\"Compendium.wfrp4e-core.items.Item.vCgEAetBMngR53aT\")\r\nlet fearData = fear.toObject();\r\nlet leaderData = leader.toObject();\r\nfearData.system.specification.value = this.effect.sourceTest.result.overcast.usage.other.current; \r\ntalents = new Array(1 + this.effect.sourceTest.result.overcast.available).fill(leaderData); // Assume any unused overcast is for war leader\r\nthis.actor.createEmbeddedDocuments(\"Item\", [fearData].concat(talents), {fromEffect : this.effect.id})","Qk7t2l5ep9RDVpgE":"args.options.diceman= true;","QKjR6P1WEHXf4K77":"args.fields.slBonus -= 2\r\n","QKTA2TqZ77pvHWSJ":" this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"type\": \"\",\r\n },\r\n \"color\": \"#000000\",\r\n }}));","qmOt7h17hGAKqQe0":"\r\nlet choice = await Dialog.wait({\r\n title: this.effect.name,\r\n content: `${this.effect.name}: Is this a ranged or magical attack that orignates outside the Dome?
`,\r\n buttons: {\r\n yes: {\r\n label: \"Yes\",\r\n callback: () => {\r\n return true;\r\n }\r\n },\r\n no: {\r\n label: \"No\",\r\n callback: () => {\r\n return false;\r\n }\r\n }\r\n }\r\n})\r\n\r\nif (choice)\r\n{\r\n\targs.ward = 6;\r\n}","qnJu82zgnfOsnqZV":"let closed = !this.item.getFlag(\"wfrp4e-soc\", \"gunport\") || false;\r\n\r\nawait this.item.setFlag(\"wfrp4e-soc\", \"gunport\", closed);\r\nlet scriptData = this.effect.flags.wfrp4e.scriptData;\r\n\r\nif (closed) {\r\n scriptData[0].label = \"Open\";\r\n} else {\r\n scriptData[0].label = \"Close\";\r\n}\r\n\r\nawait this.effect.update({\"flags.wfrp4e.scriptData\": scriptData});","QNxmImpLTou6WdMQ":"let test = args.test\r\nif (test.result.minormis || test.result.majormis || test.result.catastrophicmis)\r\n test.result.other.push(\"Can make a Difficult (-10) Willpower Test to prevent the Miscast\")","QoEOxRruQXYrZrv3":"let filters = [\r\n {\r\n property : \"type\",\r\n value : \"skill\"\r\n },\r\n {\r\n property : \"name\",\r\n value : /Melee/gm,\r\n regex: true\r\n }\r\n]\r\n\r\nlet items = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 2, \"Choose 2 Skills to add +20\")\r\nitems = items.map(i => i.toObject())\r\nitems.forEach(i => i.system.advances.value = 20)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);","QPVVDPcJ4Xi5FmQl":"if(this.actor.hasCondition(\"fatigued\") && args.opposedTest.result.hitloc.value == \"head\" && (args.opposedTest.attackerTest.result.critical || args.actor.status.wounds.value - args.totalWoundLoss < 0))\r\n{\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), { fields: { difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n }\r\n}","QQ2gHThZHdO4yLLX":"return args.skill?.name == game.i18n.localize(\"NAME.Swim\");","QqkE7rlqhkeRohFD":"return !([\"cast\", \"channelling\"].includes(args.type) && this.actor.hasCondition(\"fatigued\"))","QQPiREc50HT5W2Tr":"if (args.item.type == \"weapon\" && args.item.weaponGroup.value == \"brawling\")\r\n args.item.damage.value += \" + 1\"","QqybHxNCzPEzG1Qh":"return args.fields.dualWielding || args.options.dualWieldOffhand","QRSACifDrvojIXHB":"if (!this.actor.effects.find(e => e.isCondition))\r\n{\r\n\treturn this.script.scriptNotification(\"No Conditions on this Actor\")\r\n}\r\n\r\nlet choice = await ItemDialog.create(this.actor.effects.filter(i => i.isCondition), 1, \"Choose a Condition\")\r\n\r\nif (choice[0])\r\n{\r\n\tthis.actor.removeCondition(choice[0].conditionId)\r\n}\r\n","qSwCYMMiIHmSV1X5":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n\teffectData.flags.wfrp4e.sourceItem = this.item.uuid\r\n effectData.duration.seconds = 10800\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","qT0WBPxLMMO9gvCd":"if (!this.actor.has(\"Night Vision\") && !this.actor.has(\"Night Vision\", \"talent\") && !this.actor.hasCondition(\"blinded\"))\r\n{\r\n this.actor.addCondition(\"blinded\", 1, {\"flags.wfrp4e.nightshroud\" : true})\r\n}","qTcK1TSjLTi0jNQK":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 1;\r\nAP[\"rArm\"].value += 1;\r\nAP[\"lArm\"].value += 1;\r\nAP[\"body\"].value += 1;\r\nAP[\"lLeg\"].value += 1;\r\nAP[\"rLeg\"].value += 1;","qTk96NKh14YOIShf":"return args.skill?.name === game.i18n.localize(\"NAME.Haggle\");","qu194dVXm9Vx1TGk":"if (args.test.options.useOnesSupportive && (args.test.result.roll <= game.settings.get(\"wfrp4e\", \"automaticSuccess\") || args.test.result.roll <= args.test.target))\r\n{\r\n\r\nlet SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll / 10)\r\nlet ones = Number(args.test.result.roll.toString().split(\"\").pop())\r\n\r\nif (ones > SL)\r\n\targs.test.data.result.SL = \"+\" + (ones + args.test.successBonus + args.test.slBonus)\r\n args.test.result.other.push(`${this.effect.name}: Used unit dice as SL`)\r\n}","quPcuKsq2fcild4a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"easy\"}, context: {failure : `${this.effect.name}: Vomit!`} })\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\")\r\n}","qUwnVlWpsmDom3RK":"args.fields.modifier -= 5;","QwHoqu2oO8QO8Mad":"let content = `${this.effect.name}: All targets engaged with ${this.actor.prototypeToken.name} take [[/r 1d10]] Damage, modified by TB and AP.`\r\n\r\nthis.script.scriptMessage(content)","qxzhPtysAjPWspKf":"if (this.actor.has(\"Undead\") || this.actor.has(\"Daemonic\"))\r\n{\r\n this.script.scriptNotification(`Cannot enter ${this.effect.name}!`);\r\n}","qzGPJflVW7c2Ciim":"return args.skill?.name !== game.i18n.localize(\"NAME.Cool\");","qZschZU0nee0kJlk":"args.fields.modifier -= 30;","R32U01LBjBrK1pns":" const templateMap = {\r\n 'P2e7Yx98bK3u110a' : \"\",\r\n 'iuMp3KLaMT2WCmie' : \"Xp4r2KUhqfjak8zq\", \r\n 'RBuYcT5tppwcmnC5' : \"wYN19h3WVF1yOVq2\", \r\n 'vcGpNwNbhvfzVveQ' : \"ac5ClOuaYtzOYyWp\", \r\n 'jmhKZy0w9TzkEK9c' : \"IS3LTdTuay6uRHUq\", \r\n '9Byj6k7SmdTYis2V' : \"LjMlx99gBGeRJUQu\", \r\n 'laJwc2l9tzJPgaaJ' : \"x5wpMprsObuqMCYg\",\r\n }\r\n let template = (await game.wfrp4e.tables.rollTable(\"hireling-templates\", {hideDSN: true})).object;\r\n let physicalQuirk = (await game.wfrp4e.tables.rollTable(\"physical-quirks\", {hideDSN: true})).text;\r\n let workEthic = (await game.wfrp4e.tables.rollTable(\"work-ethic\", {hideDSN: true})).text;\r\n let personalityQuirk = (await game.wfrp4e.tables.rollTable(\"personality-quirks\", {hideDSN: true})).text;\r\n\r\n\r\n let templateItem = await game.wfrp4e.utility.findItemId(templateMap[template._id]);\r\n\r\n let bio = \r\n `\r\nTemplate: ${template.text}
\r\nPhsyical Quirk: ${physicalQuirk}
\r\nWork Ethic: ${workEthic}
\r\nPersonality Quirk: ${personalityQuirk}
\r\n `\r\n \r\n this.script.scriptMessage(bio, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\r\n await this.actor.update({\"system.details.gmnotes.value\" : bio})\r\n\r\n if (templateItem)\r\n {\r\n this.actor.createEmbeddedDocuments(\"Item\", [templateItem.toObject()])\r\n }","R5dOZWFxE2n6tooX":"return this.item.system.usesLocation(args.weapon)","r6hi5vMdLhTaaPfb":"args.actor.details.move.value += this.effect.sourceTest.result.overcast.usage.other.current","R6SnyF3y4Vsq6oga":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 1\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","R8ecKGRzOr4ThvVa":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R8FBHZaaARA3z9pB":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'hard';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","R95pDZMHnD9iHAl8":"return args.skill?.name.includes(this.item.system.tests.value);","ramav4ymrDDkPKK4":"if (this.actor.hasCondition(\"bleeding\"))\r\n{\r\n this.actor.removeCondition(\"bleeding\");\r\n this.script.scriptNotification(\"Removed 1 Bleeding Condition\")\r\n}\r\nelse \r\n{\r\n this.script.scriptNotification(\"No Bleeding Conditions\");\r\n}","ratP9ByLjQPiLlFK":"args.data.canReverse = true","rBAoyhzeU3Q8MVSk":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'difficult';\r\nconst target = 50;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","rCh3ltUrUMovd2Kc":"if (this.actor.hasCondition(\"surprised\"))\r\n{\r\n this.script.scriptNotification(\"Cannot be surprised\");\r\n this.actor.removeCondition(\"surprised\");\r\n}","rdaMhMyHrJjQ6vVC":"game.wfrp4e.utility.postFear(this.item.Advances, this.actor.name)","RDtJXji3hgcKnEBk":"let as = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")).toObject();\r\nlet hv = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.Nj3tC8A5fZ3zEdMR\")).toObject();\r\nlet ms = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.6w30u0VPsAicrqb5\")).toObject();\r\nlet ss = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.OEjUvJKi0xmBwbS2\")).toObject();\r\n\r\nas.name += \" (Sight)\";\r\n\r\nlet roll = (await new Roll(\"1d10\").roll());\r\nroll.toMessage(this.script.getChatData())\r\nlet items = []\r\n\r\nif (roll.total <= 2)\r\n{\r\n items = items.concat([as]);\r\n}\r\nelse if (roll.total <= 4)\r\n{\r\n items = items.concat([hv]);\r\n}\r\nelse if (roll.total <= 6)\r\n{\r\n items = items.concat([ms]);\r\n}\r\nelse if (roll.total <= 8)\r\n{\r\n items = items.concat([ss]);\r\n}\r\nelse if (roll.total <= 10)\r\n{\r\n items = items.concat([as, hv, ms, ss]);\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id})","re1UFtxvRRjpPB7Z":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.nF5z1OEhpi4t6a6S\");\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nif (data.system.location.key[0] == \"r\")\r\n{\r\n\tdata.system.location.value = \"Right Ankle\"\r\n}\r\nelse if (data.system.location.key[0] == \"l\")\r\n{\r\n\tdata.system.location.value = \"Left Ankle\"\r\n}\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {skipLocationValue : true, fromEffect: this.effect.id})\r\n","red2bt4PGgIWAdTR":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n let effectData = this.item.effects.contents[0].convertToApplied();\r\n let minutes = Math.ceil(CONFIG.Dice.randomUniform() * 10) * 10;\r\n effectData.duration.seconds = 60 * minutes\r\n this.script.scriptMessage(`Duration: ${minutes} minutes`, {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n\tactor.applyEffect({effectData : [effectData]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","rF0Z3hTUUnSxL3Mq":"let armour = (await fromUuid(\"Compendium.wfrp4e-core.items.VUJUZVN3VYhOaPjj\")).toObject()\r\nlet bite = (await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")).toObject()\r\nlet fear = (await fromUuid(\"Compendium.wfrp4e-core.items.pTorrE0l3VybAbtn\")).toObject()\r\nlet nightVision = (await fromUuid(\"Compendium.wfrp4e-core.items.FmHDbCOy3pH8yKhm\")).toObject()\r\nlet tracker = (await fromUuid(\"Compendium.wfrp4e-core.items.ClOlztW6hH8rslbp\")).toObject()\r\nlet weapon = (await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")).toObject()\r\n\r\narmour.name = \"Armour (Hide)\"\r\narmour.system.specification.value = 2\r\nbite.system.specification.value = 3\r\nfear.system.specification.value = 2\r\nweapon.system.specification.value = 4\r\nlet items = [armour, bite, fear, nightVision, tracker, weapon]\r\n\r\n\r\nlet belligerent = (await fromUuid(\"Compendium.wfrp4e-core.items.GbDyBCu8ZjDp6dkj\")).toObject()//{Belligerent}\r\nlet bestial = (await fromUuid(\"Compendium.wfrp4e-core.items.AGcJl5rHjkyIQBPP\")).toObject()//{Bestial}\r\nlet big = (await fromUuid(\"Compendium.wfrp4e-core.items.a8MC97PLzl10WocT\")).toObject()//{Big}\r\nlet blessed = (await fromUuid(\"Compendium.wfrp4e-core.items.5muSFXd6oc760uVj\")).toObject()//{Blessed (Ulric)}\r\nlet champion = (await fromUuid(\"Compendium.wfrp4e-core.items.4mF5Sp3t09kZhBYc\")).toObject()//{Champion}\r\nlet die = (await fromUuid(\"Compendium.wfrp4e-core.items.UsJ2uIOOtHA7JqD5\")).toObject()//{Die Hard}\r\nlet fast = (await fromUuid(\"Compendium.wfrp4e-core.items.9MjH4xyVrd3Inzak\")).toObject()//{Fast}\r\nlet frenzy = (await fromUuid(\"Compendium.wfrp4e-core.items.yRhhOlt18COq4e1q\")).toObject()//{Frenzy}\r\nlet immunity = (await fromUuid(\"Compendium.wfrp4e-core.items.IAWyzDfC286a9MPz\")).toObject()//{Immunity to Psychology}\r\nlet regenerate = (await fromUuid(\"Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR\")).toObject()//{Regenerate}\r\nlet size = (await fromUuid(\"Compendium.wfrp4e-core.items.8slW8CJ2oVTxeQ6q\")).toObject()//{Size (Large)}\r\n\r\nblessed.system.specification.value = \"Ulric\"\r\nsize.system.specification.value = \"Large\"\r\n\r\nlet optional = [belligerent, bestial, big, blessed, champion, die, fast, frenzy, immunity, regenerate, size];\r\n\r\nlet chosen = await ItemDialog.create(optional, \"unlimited\", \"Choose Optional Traits\");\r\n\r\nitems = items.concat(chosen || [])\r\nthis.script.scriptNotification(`Adding ${items.map(i => i.name).join(\", \")}`);\r\nthis.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id})\r\n","rgSwSeB3shIMVMb6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.x0WMGwuQzReXcQrs\")\r\nlet data = item.toObject(); \r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id});","RHyBLYT5oHf7EPnG":"let skills = this.actor.itemTypes.skill.filter(i => i.name.includes(game.i18n.localize(\"NAME.Melee\")))\r\n\r\nlet skill = await ItemDialog.create(skills, 1, \"Select the skill used by the weapon\")\r\nlet group = game.wfrp4e.utility.extractParenthesesText(skill[0]?.name)\r\nlet groupKey = game.wfrp4e.utility.findKey(group, game.wfrp4e.config.weaponGroups)\r\n\r\nlet weapon = {\r\n\tname : this.effect.name,\r\n\ttype : \"weapon\",\r\n\timg : this.effect.img,\r\n\tsystem : {\r\n\t\t\"damage.value\" : this.actor.system.characteristics.wp.bonus,\r\n\t\t\"weaponGroup.value\" : groupKey || \"basic\",\r\n\t\t\"twohanded.value\" : [\"polearm\", \"twohanded\"].includes(groupKey),\r\n\t\t\"reach.value\" : \"average\",\r\n\t\t\"qualities.value\" : [{name : \"magical\"}]\r\n\t},\r\n}\r\n\r\nItem.implementation.create(foundry.utils.expandObject(weapon), {parent : this.actor, fromEffect : this.effect.id})\r\nthis.script.scriptNotification(\"Item created. Further customization must be done manually within the Item's sheet\");","RI8crJxeD8JLDwMh":"return args.weapon?.system?.weaponGroup?.value != \"fencing\"","rIISfbCShejmJNKw":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.oRx92ByVNEBN6YkK\")\r\nlet data = item.toObject()\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","RJpglw5eVRM1f9t0":"args.wounds *= 5","RKIFGN583PQnqHGk":"if (args.opposedTest.result.hitloc.value == \"body\" && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 2)\r\n this.script.scriptMessage(\"Gained 2 Bleeding Conditions\")\r\n}","RlhOAKfN0ghrrooR":"let holed = this.actor.appliedEffects.filter(e => e.name.includes(\"Holed\"));\r\n\r\nfor (let effect of holed) {\r\n await effect.update({name: effect.name.replace(/\\d+/, rating => parseInt(rating) * 2)});\r\n}\r\n\r\nthis.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`);","rLMaVNEGdZ6xj5Au":"return ![\"i\", \"int\", \"fel\"].includes(args.characteristic)","rlTvhnDpj4lzfusf":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\")) && args.skill?.name !== game.i18n.localize(\"NAME.Climb\");","rly9iBUy8EX7NhQT":"if (game.user.targets.size !== 1)\r\n return ui.notifications.warn(\"You must target exactly one Boat.\");\r\n\r\nconst target = game.user.targets.first();\r\nconst vehicle = target.actor;\r\n\r\nif (!(vehicle.system instanceof VehicleModel)) \r\n return ui.notifications.warn(\"You can only Constrict a Boat\");\r\n\r\nif (vehicle.size > 3)\r\n return ui.notifications.warn(\"You can only Constrict vessels of Size Large or smaller\");\r\n\r\nconst turns = Math.ceil(vehicle.system.details.length.value / 10);\r\n\r\nconst mainEffect = this.item.effects.contents[0];\r\nconst effectData = mainEffect.toObject();\r\n\r\neffectData.statuses = [effectData.name.slugify()];\r\n\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.target\", target.id);\r\nfoundry.utils.setProperty(effectData, \"flags.wfrp4e.turns\", turns);\r\n\r\nawait this.actor.applyEffect({effectData: [effectData]});\r\n\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n\r\nthis.script.scriptMessage(`${speaker.alias} started wrapping itself around the ${target.name} and will be able to start crushing it after ${turns} turns.`);","RNHrSTfMLXm5sXkC":"return [\"ws\", \"bs\", \"s\", \"ag\"].includes(args.characteristic)","rnioLwiJP7ps5Jwy":"if (args.item.type == \"skill\" && args.item.name == \"Melee (Basic)\")\r\n{\r\n args.item.system.modifier.value += 30;\r\n}","Rnpw6UQdJifLeuna":"this.effect.updateSource({\"flags.wfrp4e.applicationData.type\" : \"crew\"})","RNr9CwyvLhlnwD2h":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Sail\"));","roKvPHDSpX4IV11C":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) && args.characteristic != \"ag\"","ROXCqAFSTLouJniL":"if (args.test.spell.name == \"Warp Lightning\")\r\n{\r\n if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)\r\n {\r\n this.script.scriptMessage(`${this.item.name} Overloads!`)\r\n }\r\n}","RPqgRUkiLY5thVbC":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Strength';\r\nconst difficulty = 'average';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","RprZWlnopSqZt7KZ":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","rpxQU26BU7nwjtqY":"let location = this.item.system.location.key\r\nlet test = await this.actor.setupCharacteristic(\"dex\", {context : {failure : `${this.effect.name}: Drop the item!`}, skipTargets: true, appendTitle : \" - \" + this.effect.name, fields : {difficulty : \"average\"}})\r\nawait test.roll();\r\n\r\n\r\nif (location && test.failed)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nreturn test.succeeded","rqTT8yOyK4bUwbdm":"let test = args.test\r\nif (test.spell.lore.value == \"fire\")\r\n{\r\n if (test.result.overcast.usage.target?.AoE)\r\n {\r\n test.result.overcast.usage.target.current += test.actor.characteristics.wp.bonus\r\n test.result.overcast.usage.target.initial += test.actor.characteristics.wp.bonus\r\n }\r\n if (test.result.overcast.usage.range)\r\n {\r\n test.result.overcast.usage.range.current *= 2\r\n test.result.overcast.usage.range.initial *= 2\r\n }\r\n \r\n}","RqWnhnwFxaHubgiA":"await args.actor.addCondition(\"blinded\");\r\nawait args.actor.addCondition(\"deafened\");\r\nawait args.actor.addCondition(\"stunned\");","rr4htuVq45onXdRG":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {appendTitle: ` - ${this.effect.name}`, fields : {difficulty : \"average\"}})\r\ntest.roll();","RrchOMpEdIvceJxl":"return args.skill?.name == \"Stealth (Rural)\"","rRfff55c7elyvbCb":"return this.actor.flags.useless[this.item.system.location.key] && args.weapon?.system.usesHands.includes(this.item.system.location.key[0] + \"Arm\")","RSsGiDFibuqg3sHr":"let diseaseIndex = game.packs\r\n.filter(i => i.metadata.type == \"Item\")\r\n.reduce((acc, pack) => acc.concat(pack.index.contents), [])\r\n.filter(i => i.type == \"disease\")\r\n.map(i => {\r\n\ti.id = i._id\r\n\treturn i\r\n})\r\n\r\nlet choice = await ItemDialog.create(diseaseIndex , 1, \"Choose a Disease\")\r\n\r\nif (choice[0])\r\n{\r\n\tawait this.item.updateSource({\"system.specification.value\" : choice[0].name})\r\n}","RsWXCcYHONf3ANlD":"this.actor.addCondition(\"stunned\", 1);\r\n","rUGSx06BuBvX9kgf":"if (args.test.result.charging)\r\n{\r\n args.test.result.damage += 1\r\n args.test.result.additionalDamage += 1\r\n if (!args.test.result.resolute) {\r\n args.test.result.breakdown.damage.other.push({label : this.effect.name, value : this.item.Advances});\r\n args.test.result.resolute = true // Prevent duplicate messages\r\n }\r\n}\r\n","RuW1PWUFxIbbSlIm":"return ![\"t\", \"wp\", \"ag\", \"i\", \"int\"].includes(args.characteristic)","RvipIYj9H7n4UDMe":" let characteristics = {\r\n \"ws\" : -10,\r\n \"bs\" : -10,\r\n \"s\" : -5,\r\n \"t\" : -5,\r\n \"i\" : -10,\r\n \"ag\" : -10,\r\n \"dex\" : -10,\r\n \"int\" : 0,\r\n \"wp\" : 0,\r\n \"fel\" : 0\r\n }\r\n let skills = []\r\n let skillAdvancements = []\r\n let talents = []\r\n let trappings = []\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","rVpPNILEzWL9lj6b":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.kJNAY1YRaCy9IgmT\")\r\nlet terrorTraitItem = item.toObject()\r\nterrorTraitItem.system.specification.value = Number(this.effect.item.system.specification.value) \r\nthis.actor.createEmbeddedDocuments(\"Item\", [terrorTraitItem]);","rVRDoxiWILo7d8FF":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.2 * specification;","RwMw848y13Jq2L4f":"let test = await this.actor.setupSkill(\"Endurance\", {fields : {difficulty : \"difficult\"}, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"blinded\");\r\n}\r\n\r\nlet msg = ``\r\nlet armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped);\r\nfor(let item of armour)\r\n{\r\n\tfor(let key in item.system.AP)\r\n\t{\r\n\t\tlet AP = item.system.AP[key]\r\n\t\tlet damage = Math.floor(AP / 2);\r\n\t\tawait item.system.damageItem(damage, [key]);\r\n\t}\r\n\tmsg += `${item.name} AP reduced by half
`\r\n}\r\nif (msg)\r\n{\r\n\tthis.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});\r\n}","rX8FTinyTMj9WJri":"if (!this.actor.flags.holed) return;\r\nif (this.actor.flags.holed.applied === true) return;\r\nif (this.actor.hasCondition(\"dead\")) return;\r\n\r\nconst currentHoled = this.actor.flags.holed.holed || 0;\r\n\r\nconst openGunPorts = this.actor.itemTypes.vehicleMod.reduce((acc, m) => {\r\n if (!m.name.toLowerCase().includes(\"gun port\")) \r\n return acc;\r\n \r\n let closed = m.getFlag(\"wfrp4e-soc\", \"gunport\");\r\n if (!closed) acc++;\r\n \r\n return acc;\r\n}, 0);\r\n\r\nconst totalHoled = currentHoled + openGunPorts;\r\nconst toughness = this.actor.system.characteristics.t.value;\r\nthis.actor.flags.holed.total = totalHoled;\r\n\r\nif (totalHoled >= toughness) {\r\n const speaker = ChatMessage.getSpeaker({actor: this.actor});\r\n this.script.scriptMessage(`\r\n${speaker.alias} sank due to having Holed (${totalHoled}) rating equal to, or exceeding its Toughness (${toughness })
\r\n\r\n Holed due to Critical Damage: ${currentHoled}
\r\n Holed due to opened Gun Ports: ${openGunPorts}\r\n
By imbibing this potion, ${this.actor.prototypeToken.name} has becomes subject to Frenzy. This Frenzy lasts [[1d10]] Rounds, and may not be ended sooner.
`, \r\n {whisper: ChatMessage.getWhisperRecipients(\"GM\"), blind: true }) ","sx7Ikn8WW00gBFb4":"let location = (Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? \"r\" : \"l\") + \"Arm\"\r\n\r\nif (location == \"lArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Left\")\r\n}\r\nelse if (location == \"rArm\")\r\n{\r\n\tthis.script.scriptNotification(\"Rolled Right\")\r\n}\r\n\r\nthis.effect.updateSource({\"flags.wfrp4e.location\" : location});\r\n\r\nif (location)\r\n{\r\n let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}\r\n\r\nlet roll = await new Roll(\"1d10\").roll()\r\n\r\nroll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));\r\n\r\nthis.effect.updateSource({\"duration.rounds\" : roll.total})","syBgPp7rOymCZejX":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}","sYlGRLApZ3Ub24ea":"this.actor.system.status.addArmour(3, {source: this.effect.name, magical: true})","syqqBkyP5tGqZ78t":"this.actor.has(\"Immunity to Psychology\")?.delete();\r\n\r\nlet roll = await new Roll(\"1d10\").roll();\r\n\r\nroll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptNotification(`Removed Immunity to Psychology, Adding ${roll.total} Broken Conditions`)\r\nthis.actor.addCondition(\"broken\", roll.total, {\"flags.wfrp4e.blasted-mind\" : true})","sZwLitzwKBTaFca3":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.5hH73j2NgPdsLCZN\")\r\nlet data = item.toObject();\r\ndata.name = data.name.replace(\"Target\", \"Greenskins, Undead, Chaos\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","T3RfSt3VMEat3iDD":"return args.skill?.name !== game.i18n.localize(\"NAME.Perception\");","t48hkacYdOpzWvK9":"args.options.beatBlade = true;","t56mnblo1kv3gM1M":"return args.skill?.name.includes(\"Melee (Basic)\") || (args.type == \"weapon\" && args.item?.system.weaponGroup.value == \"basic\");","T5fiTzhXEQAv9Drf":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.rlDZZTj5PXjuRXa2\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n\r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","T74FEjfFrh3f6MKv":"args.wpb = args.sb;","t8LYOuN5peEdWeXP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.mNoCuaVbFBflfO6X\")\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TAw9vXnfyIAl5DGs":"if (this.item.system.quantity.value)\r\n{\r\n game.wfrp4e.utility.postCorruptionTest(\"minor\", this.script.getChatData());\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[1].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","TBpNFRL5uehs0fze":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[0]]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"None left!\", \"error\")\r\n}","tCIT1a12Gt6k2ohA":"let resistance\r\nif (this.item.name.includes(\"(\"))\r\n{\r\n\tresistance = this.item.parenthesesText\r\n}\r\nelse \r\n{\r\n resistance = await ValueDialog.create(\"Enter Resistance\", \"Resistance\") \r\n \r\n if (resistance)\r\n {\r\n this.item.updateSource({name : this.item.name + ` (${resistance})`})\r\n this.effect.updateSource({name : this.effect.name + ` (${resistance})`})\r\n }\r\n} \r\nthis.item.updateSource({\"system.tests.value\" : this.item.system.tests.value.replace(\"the associated Threat\", resistance)})\r\n\r\nif (resistance && !this.effect.name.includes(\"(\"))\r\n{\r\n this.effect.updateSource({name : this.effect.name += ` (${resistance})`})\r\n}","TcqumwUFAL6V0cty":"if (this.item.getFlag(\"wfrp4e\", \"failedCool\"))\r\n{\r\n this.item.system.AP = {\r\n \"head\": 0,\r\n \"lArm\": 0,\r\n \"rArm\": 0,\r\n \"lLeg\": 0,\r\n \"rLeg\": 0,\r\n \"body\": 0\r\n }\r\n}","TCtXPvDpbfz1yrVZ":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Basic)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"skill\",\r\n name : \"Melee (Two-Handed)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 20\r\n }\r\n }\r\n }\r\n }\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\n\r\n Select your choice\r\n
\r\n `,\r\n buttons : {\r\n 1 : {\r\n label : \"Shield\",\r\n callback : () => {\r\n return \"shield\"\r\n }\r\n },\r\n 2 : {\r\n label : \"Two-Handed Weapon\",\r\n callback : () => {\r\n return \"twohanded\"\r\n }\r\n },\r\n }\r\n})\r\n\r\nlet weapons = await warhammer.utility.findAllItems(\"weapon\", \"Loading Weapons\");\r\nlet items\r\nif (choice == \"shield\") \r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.properties.qualities.shield), 1, \"Choisissez a Shield\");\r\n}\r\nelse if (choice == \"twohanded\")\r\n{\r\n items = await game.wfrp4e.apps.ItemDialog.create(weapons.filter(i => i.system.weaponGroup.value == \"twohanded\"), 1, \"Choisissez a Two-Handed Weapon\");\r\n}\r\nitems = items.map(i => i.toObject())\r\n\r\nitems.forEach(i => i.system.equipped.value)\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n","tG1qGqzBLmAR3WHm":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\nif (test.failed) \r\n{\r\n let add = 0\r\n\r\n if (test.result.roll % 11 == 0 || test.result.roll == 100) \r\n {\r\n add = 1 // can't use isFumble if no hit location\r\n }\r\n\r\n await this.actor.addCondition(\"stunned\", Math.max(1, Math.abs(test.result.SL)) + add)\r\n await this.actor.addCondition(\"blinded\", Math.max(1, Math.abs(test.result.SL)))\r\n\r\n}","TGN070HeJLl3gSMY":"let test = await this.actor.setupCharacteristic(\"ag\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: \"Goes Prone\" }})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"prone\");\r\n}","tGVEV6TLl310mFLP":"let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\nif (args.applyAP && nonmagical) \r\n{\r\n let nonmagical = args.modifiers.ap.value - args.modifiers.ap.magical\r\n args.modifiers.ap.ignored += nonmagical\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Non-Magical AP (\" + nonmagical + \")\");\r\n}","thxlWeZbow8iE7xA":"const uuid = \"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\";\r\nconst item = await fromUuid(uuid);\r\nconst data = item.toObject();\r\ndata.system.specification.value = 1;\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id});","tKBq1nGZo8t6vvQ6":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.5hH73j2NgPdsLCZN\");\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","TmaS8o33825QUMrx":"let stomp = game.wfrp4e.config.systemItems.stomp;\r\nlet test = await this.actor.setupTrait(stomp)\r\nawait test.roll();","tn6SwmjAuNzqE6dx":"let damage = 0\r\nlet test = await this.actor.setupSkill(\"Dodge\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n damage = 10;\r\n}\r\nelse if (test.failed)\r\n{\r\n damage = 20;\r\n}\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(damage, {loc : \"roll\", hideDSN: true, suppressMsg : true}))","tnE8LF6E3svIlLca":"return args.skill?.name == game.i18n.localize(\"NAME.Research\");","TnFobCxG4pxlYmKr":"let gorCharacteristics = {\r\n \"ws\": 45,\r\n \"bs\": 30,\r\n \"s\": 35,\r\n \"t\": 45,\r\n \"i\": 30,\r\n \"ag\": 35,\r\n \"dex\": 25,\r\n \"int\": 25,\r\n \"wp\": 30,\r\n \"fel\": 25\r\n}\r\nfor (let char in this.actor.characteristics) {\r\n if (this.actor.characteristics[char].initial < gorCharacteristics[char])\r\n this.actor.characteristics[char].initial = gorCharacteristics[char]\r\n}","tnilBagajWM8UGQt":"return args.item?.name != game.i18n.localize(\"NAME.ConsumeAlcohol\")","tNTO1LVN7JqHf4YN":"if (args.test.characteristicKey == \"wp\") \r\n{\r\n if (args.test.failed)\r\n {\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [game.wfrp4e.config.symptomEffects[\"malaise\"]])\r\n this.script.scriptMessage(`Willpower Test failed, ${this.actor.prototypeToken.name} gains @Condition[Malaise] for [[1d10]] hours`, {whisper: ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n}","TNWmIkuubqBn38he":"this.effect.deleteCreatedItems();","ToKlHDAjJOsC51ag":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.GlShFJF2TpsNh1FX\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n \r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: \"hard\"}});\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n args.actor.addCondition(\"unconscious\")\r\n}","tolkNN5P7oOC8GKZ":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"difficult\"}})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n let sourceActor = this.effect.sourceActor;\r\n if (sourceActor)\r\n {\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(sourceActor.system.characteristics.wp.bonus, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL}))\r\n }\r\n}","toSrgcvWq9b5eN0K":"let location = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN: true})\r\n\r\nthis.item.updateSource({name : `${this.item.name} (${location.description})`})\r\nthis.script.scriptMessage(`Location: ${location.description}`, { whisper: ChatMessage.getWhisperRecipients(\"GM\") })","TOyQLrugFGzwc5nY":"return !(args.skill?.name.includes(game.i18n.localize(\"NAME.Melee\")) || args.item?.isMelee || args.options.corruption);","TpZItJ5Ugbazaobd":"let locations = [];\r\n\r\nwhile (locations.length < 2)\r\n{\r\n let loc = await game.wfrp4e.tables.rollTable(\"hitloc\", {hideDSN : true})\r\n if (!locations.includes(loc.result))\r\n {\r\n locations.push(loc.result);\r\n }\r\n}\r\n\r\nlocationText = locations.map(i => game.wfrp4e.config.locations[i]).join(\", \")\r\n\r\nthis.item.updateSource({name : this.item.name += ` (${locationText})`, \"flags.wfrp4e.locations\" : locations})\r\nthis.effect.updateSource({\"flags.wfrp4e.locations\" : locations})","Tq45Nd8J3eTvHT41":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && args.skill?.name != game.i18n.localize(\"NAME.SetTrap\");","TQRL4mZhZohXg1Au":"let test = await this.actor.setupCharacteristic(\"wp\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\ntest.roll();","TrIYdcG3jDER4WgY":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.xsGbDFqK2qh7lsIj\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Minor\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","TU2xjbJ0zFtytF3J":"return args.skill?.name == game.i18n.localize(\"NAME.CharmAnimal\");","tuIsytv3jl2yAIb2":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\") && args.skill?.name !== game.i18n.localize(\"NAME.Intimidate\") && args.skill?.name !== game.i18n.localize(\"NAME.Leadership\")","tUwP7TjrOOOnaCYJ":"let fatigued = this.actor.hasCondition(\"fatigued\")\r\nif (fatigued)\r\n{\r\n this.script.scriptNotification(`Cleared ${fatigued.conditionValue} Fatigued Conditions`)\r\n fatigued.delete(); \r\n}\r\nelse \r\n{\r\n\tthis.script.scriptNotification(`No Fatigued Conditions`)\r\n}","TwgdEucxcHloc4cX":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await new Promise((resolve, reject) => {\r\n new Dialog({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nAppy ${this.effect.name} Damage? Attacker must have used bare hands or a melee weapon made of metal.`})\r\n if (apply)\r\n {\r\n \r\n let damage = 5 + this.actor.characteristics.wp.bonus;\r\n \r\n let loc = args.opposedTest.attackerTest.weapon?.system.usesHands[0] || \"rArm\";\r\n \r\n let APatLoc = args.opposedTest.attacker.system.status.armour[loc];\r\n \r\n let metalAP = APatLoc.layers.reduce((metal, layer) => metal += (layer.metal ? layer.value : 0), 0)\r\n \r\n let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;\r\n \r\n damage -= (APused + args.opposedTest.attacker.system.characteristics.t.bonus)\r\n \r\n let msg = await args.opposedTest.attacker.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});\r\n msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`\r\n this.script.scriptMessage(msg)\r\n }\r\n}","UgQW0UMPOZ0jwfVJ":"let current = this.actor.status.fortune.value\r\n\r\nthis.actor.update({\"system.status.fortune.value\" : 1 + current})\r\n\r\nthis.script.scriptMessage(`${this.actor.prototypeToken.name} fortune points increased from ${current} to ${1 + current}`)","UH5MIzqi2MvEqTwj":"if (args.totalWoundLoss > 0)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData());\r\n args.totalWoundLoss += roll.total;\r\n args.modifiers.other.push({label : this.effect.name, value : roll.total})\r\n}","uhCq5NwjQ2a2idPn":"const repaired_message = `
Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'easy';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","uLBDnWC3S0lRitbj":"let test = await this.actor.setupCharacteristic(\"int\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nlet opposedResult = test.opposedMessages[0]?.getOppose()?.resultMessage?.getOpposedTest()?.result\r\n\r\nif (opposedResult?.winner == \"attacker\")\r\n{\r\n if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))\r\n {\r\n this.actor.addCondition(\"unconscious\")\r\n await this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n }\r\n else \r\n {\r\n await this.actor.addCondition(\"stunned\", 1 + opposedResult.differenceSL);\r\n }\r\n}\r\nelse \r\n{\r\n return false;\r\n}","ULmZMLezDamerN04":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\")\r\n\r\nlet lore = (await game.wfrp4e.tables.rollTable(\"random-caster\", {hideDSN: true})).text\r\nthis.script.scriptNotification(lore)\r\nif (lore == \"GM's Choice\") {\r\n return\r\n}\r\n\r\nelse if (lore == \"Arcane Magic\") {\r\n lore = \"Arcane\"\r\n}\r\n\r\nelse if (lore == \"Petty Magic\") {\r\n lore = \"petty\"\r\n}\r\n\r\nelse {\r\n lore = lore.toLowerCase();\r\n}\r\n\r\nlet spellsWithLore = []\r\nif (lore == \"Arcane\") {\r\n spellsWithLore = spells.filter(i => !i.system.lore.value)\r\n}\r\nelse {\r\n spellsWithLore = spells.filter(i => i.system.lore.value == lore)\r\n}\r\n\r\nlet selectedSpell = spellsWithLore[Math.floor(CONFIG.Dice.randomUniform() * spellsWithLore.length)]\r\nItem.implementation.create(selectedSpell.toObject(), { parent: this.actor}).then(item => {\r\n this.actor.setupCast(item).then(test => test.roll());\r\n})","UlRSaZG4ZUU6fMND":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","Um6xMMiUftLXJxEt":"return [\"fel\", \"dex\"].includes(args.characteristic)","UnqnWi0dZYLf5fTT":"let choice1 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n]\r\nlet choice2 = [\r\n {\r\n type : \"armour\",\r\n name : \"Mail Chausses\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coat\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Mail Coif\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Leggings\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Skullcap\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Leather Jack\"\r\n },\r\n]\r\nlet choice3 = [\r\n {\r\n type : \"armour\",\r\n name : \"Plate Breastplate\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Bracers\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Helm\"\r\n },\r\n {\r\n type : \"armour\",\r\n name : \"Plate Leggings\"\r\n },\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Choice\",\r\n content : \r\n `\r\n Select your choice\r\n
\r\nEnter the number of diseases/poisons cured
\",\r\n buttons : {\r\n confirm : {\r\n label : \"Confirm\",\r\n callback : (dlg) => {\r\n let input = dlg.find(\"input\");\r\n value = parseInt(input[0].value);\r\n return value;\r\n }\r\n }\r\n }\r\n})\r\n\r\n\r\nlet damage = 0;\r\n\r\nlet rolls = new Array(cured).fill(\"\").map(i => `max(0, 1d10 - ${this.actor.system.characteristics.fel.bonus})`)\r\n\r\nlet test = new Roll(`${rolls.join(\" + \")}`);\r\nawait test.roll();\r\ntest.toMessage({speaker : {alias : this.actor.name}, flavor : this.effect.name});\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(test.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true }))","v4ITTsSY9EvCbhZP":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.9h82z72XGo9tfgQS\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","v5xrDWcrTNFJkyQB":"let choice1 = [\r\n {\r\n type : \"skill\",\r\n name : \"Ranged (Bow)\",\r\n diff : {\r\n system : {\r\n advances : {\r\n value : 10\r\n }\r\n }\r\n }\r\n },\r\n {\r\n type : \"weapon\",\r\n name : \"Longbow\",\r\n },\r\n {\r\n type : \"ammunition\",\r\n name : \"Arrow\",\r\n }\r\n]\r\nlet choice2 = [\r\n]\r\n\r\nlet choice = await Dialog.wait({\r\n title : \"Option\",\r\n content : \r\n `\r\n Add Option?\r\n
\r\nFinished replacing ${this.item.name} with a makeshift one.
`;\r\nconst test = 'Maintenance Crew Test';\r\nconst difficulty = 'hard';\r\nconst target = 80;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","vj3zArmX27vCxYJW":"return ![\"NAME.Perception\", \"NAME.Navigation\"].map(i => game.i18n.localize(i)).includes(args.skill?.name)","vJQRBxDfPwHens0a":"if (args.totalWoundLoss > 0) \r\n{\r\n args.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: { difficulty: \"difficult\" } }).then(async test => {\r\n await test.roll();\r\n if (test.failed) \r\n {\r\n await args.actor.addCondition(\"poisoned\")\r\n this.script.scriptMessage(await args.actor.applyBasicDamage(3, {suppressMsg : true, damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL }))\r\n }\r\n })\r\n}","vjyTKcNrJzX4XWnS":"let SL = parseInt(this.effect.sourceTest.result.SL)\r\nif (SL < 0)\r\n SL = 0\r\nthis.actor.addCondition(\"fatigued\", 1 + SL)","VKpKq4RSbI1KkUQK":"this.actor.flags.useless[this.effect.getFlag(\"wfrp4e\", \"location\")] = true;","Vkuu70BZV4DPYO2Q":"return args.item?.system?.attackType != \"ranged\"","VLdF2HPnCrNIgp7a":"let items = [];\r\n\r\nlet etiquette = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\")).toObject();\r\netiquette.name += \" (Followers of Khorne)\";\r\n\r\nitems.push(etiquette);\r\n\r\nlet animosity = (await fromUuid(\"Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f\")).toObject();\r\n animosity.system.specification.value = \"Followers of Slaanesh\";\r\n\r\nitems.push(animosity);\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect : this.effect.id});\r\n","VlFUDaKUYoBYKYn0":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Gained a Corruption point\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","VlHuDIAvPr8JM1P5":"return args.skill?.name !== game.i18n.localize(\"NAME.Row\");","vM2BPwYhHQaBAt2C":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.KII1gWnxIZ8HzmU5\");\r\nlet data = item.toObject();\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})","VNOKTzCrFbZ6PJUj":"return ![\"Charm Animal\", \"Endurance\", \"Outdoor Survival\"].includes(args.skill?.name)","vNp9wgdSvnNEjZyS":"args.fields.slBonus -= 2; ","Vns6WrafVq8NjX7t":"return args.skill?.name != game.i18n.localize(\"NAME.Heal\")","vPG4rV640aSzKzxe":"return !this.actor.flags.useless[this.item.system.location.key[0] + \"Arm\"] || [\"fel\", \"wp\", \"int\", \"t\"].includes(args.characteristic)","VQaC6ynouW5EQCbC":"let roll = await new Roll(\"1d10\").roll();\r\n\r\nawait roll.toMessage(this.script.getChatData());\r\n\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg : true}));\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : \" - \" + this.effect.name});\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n return false;\r\n}","VqTrKPtxv9hpn0Hr":"return args.skill?.name != \"Language (Magick)\"","vS2D9QUslR7ZtXXm":"let test = await this.actor.setupCharacteristic(\"t\", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n let roll = await new Roll(\"1d10\").roll();\r\n roll.toMessage(this.script.getChatData())\r\n\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))\r\n}","vSDMygIT9nNvEGWG":"// Each time the blade is used, the GM should secretly roll a d10.\r\n// On a 1, its poison has run dry, \r\n// and the next time it is employed it will shatter.\r\n\r\nif (Math.ceil(CONFIG.Dice.randomUniform() * 10) == 1) {\r\n this.item.setFlag(\"wfrp4e\", \"brittle\", true)\r\n ChatMessage.create({\r\n content: `\r\n ${this.item.name} has run out of poison. It will shatter the next time it is used.`, \r\n whisper: ChatMessage.getWhisperRecipients(\"GM\"),\r\n blind: true\r\n })\r\n}\r\n","vTebTUzXortx1Qut":"let specification = Number(this.item.specification.value) || 1;\r\nargs.actor.system.characteristics.t.initial += 10 * specification;\r\nargs.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);\r\nargs.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1 * specification;","VTS4RzbmReI87K9a":"args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);","VuE1mhrB6X6MYTzg":"return args.characteristic == \"fel\"","vUpMQlbwDiYfMCNS":"this.actor.addCondition(\"ablaze\");","VurA2XNqC0d9U49C":"this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test =>\r\n{\r\n await test.roll()\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"fatigued\") \r\n }\r\n})","vuzRRj5d9XdNYx3o":"let broken = this.actor.hasCondition(\"broken\")\r\nif (broken)\r\n{\r\n broken.delete();\r\n this.script.scriptNotification(\"Removed Broken\")\r\n}","vvdo1NxjmGVkmFCT":"await this.actor.addCondition(\"stunned\");\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty : \"hard\"}, skipTargets: true, appendTitle : \" - \" + this.effect.name})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n\tawait this.actor.addCondition(\"prone\")\r\n\tawait this.actor.addCondition(\"stunned\")\r\n}\r\n \r\nlet location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","vvVhAqreedtmOR9b":"args.totalWoundLoss = Math.max(0, args.totalWoundLoss - 1)\r\nargs.modifiers.other.push({label : this.effect.name, value : -1)","VXERNoc5IazQGuGO":"if (args.applyAP && args.modifiers.ap.metal)\r\n{\r\n args.modifiers.ap.ignored += args.modifiers.ap.metal\r\n args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : \"Add Metal AP to Damage\" })\r\n args.modifiers.ap.details.push(\"\" + this.effect.name + \": Ignore Metal (\" + args.modifiers.ap.metal + \")\");\r\n args.modifiers.ap.metal = 0\r\n}","vY3xeTTL3ghPrJpN":"this.actor.addCondition(\"entangled\");","vZ5HCrhY8e4R1TrG":"let eye = await fromUuid(\"Compendium.wfrp4e-core.items.weczkAMPlTjX7lqU\")\r\nlet nose = await fromUuid(\"Compendium.wfrp4e-core.items.SpPRZZRHxly7uo2G\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [eye, nose]);","VzgTGb5QXKoyPNh3":"if (args.attackerTest.weapon && args.defenderTest.weapon)\r\n{\r\n let attackerReach = game.wfrp4e.config.reachNum[args.attackerTest.weapon.reach.value]\r\n let defenderReach = game.wfrp4e.config.reachNum[args.defenderTest.weapon.reach.value]\r\n \r\n if (attackerReach == defenderReach)\r\n defenderReach = defenderReach < 7 ? defenderReach + 1 : defenderReach \r\n\r\n attackerReach = game.wfrp4e.utility.findKey(attackerReach, game.wfrp4e.config.reachNum)\r\n defenderReach = game.wfrp4e.utility.findKey(defenderReach, game.wfrp4e.config.reachNum)\r\n\r\n args.attackerTest.weapon.reach.value = attackerReach\r\n args.defenderTest.weapon.reach.value = defenderReach\r\n}","vzMxIDjRlQSxXtCW":"// Remove the miscast if doubles rolled and succeeded\r\nif(args.test.succeeded && args.test.result.minormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.minormis\r\n}\r\n// Decrement the major miscast to minor miscast\r\nelse if(args.test.succeeded && args.test.result.majormis && args.test.result.roll % 11 == 0)\r\n{\r\n delete args.test.result.majormis\r\n args.test.result.minormis = game.i18n.localize(\"ROLL.MinorMis\")\r\n}","VzO0ZDcTWvaBn4vm":"if (args.test.preData.skillName?.includes(game.i18n.localize(\"NAME.Language\")) || args.test instanceof CastTest)\r\n{\r\n\tif (parseInt(args.test.result.SL) > 0 || args.test.succeeded)\r\n\t{\r\n\t\tif (parseInt(args.test.result.SL) > 0)\r\n\t\t{\r\n\t\t\targs.test.result.SL = \"-0\";\r\n\t\t\targs.test.result.description = game.i18n.localize(\"ROLL.MarginalFailure\");\r\n\t\t}\r\n\t\targs.test.result.outcome = \"failure\"\r\n args.test.result.other.push(`${this.effect.name}: Maximum -0 SL`)\r\n\t}\r\n}","w3r54pKZQKaH2Yer":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.pTorrE0l3VybAbtn\")\r\nlet data = item.toObject();\r\nlet slOver = this.effect.sourceTest.result.slOver;\r\nlet overcast = this.effect.sourceTest.result.overcast\r\nslOver -= ((overcast.total - overcast.available) * 2) // If they used an overcast, subtract 2 SL for each one\r\nlet added = Math.floor(slOver / 3) || 0\r\ndata.system.specification.value = 1 + added; // For each +3 SL, add 1 specification\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","w4JKuTECFmu3YmTR":"return !args.skill?.name?.includes(game.i18n.localize(\"NAME.Ride\"))","w4RuGIfseGoxXA3k":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'challenging';\r\nconst target = 20;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","w4zubIHP0XgMXsFe":"return !args.options.terror && !args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","w6tr8mWy0ZSUkHLt":"const uuids = [\r\n \"Compendium.wfrp4e-core.items.Item.77p3QRKgFWakkndF\", // Blather\r\n \"Compendium.wfrp4e-core.items.Item.b4x1qEWcevX7xK58\", // Schemer\r\n];\r\n\r\nconst items = await Promise.all(uuids.map(uuid => fromUuid(uuid)));\r\nawait this.actor.createEmbeddedDocuments(\"Item\", items, {fromEffect: this.effect.id});","w7K0lbxQKJ2tsc6f":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.EO05HX7jql0g605A\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 60\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","W9nyUNQStMr1pUHJ":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Added Bleeding\")\r\n}","wAETU6aTRr9d4oCU":"args.fields.slBonus++;","wAntJhgb8Og5vJXh":"args.options.staunchBleeding = true;","WB6sIpLEPC8YPX67":"if (args.options.dodge)\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Cannot Dodge!\")\r\n}\r\nreturn [\"t\", \"int\", \"wp\", \"fel\"].includes(args.characteristic)","wbM7tpw4TxvadcWm":"let items = this.effect.itemTargets;\r\nlet msg = \"\";\r\nfor(let item of items)\r\n{\r\n if (item.system.properties.qualities.durable)\r\n {\r\n await item.update({\"system.qualities.value\" : []});\r\n msg += `${item.name} loses all Qualities
`\r\n }\r\n else \r\n {\r\n msg += `${item.name} crumbles into dust!
` \r\n await item.update({name : item.name + \" (Dust)\"})\r\n }\r\n}\r\nif(msg)\r\n{\r\n this.script.scriptMessage(msg);\r\n}","WeTlTniskT3Ej6vg":"args.modifiers.other.push({label : this.effect.name, value : 2})","whUSkaR1yem21bXp":"let characteristics = {\r\n \"ws\" : 10,\r\n \"bs\" : 5,\r\n \"s\" : 0,\r\n \"t\" : 5,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 6,\r\n \"int\" : -5,\r\n \"wp\" : 0,\r\n \"fel\" : 10\r\n}\r\nlet skills = [\"Melee (Basic)\", \"Track\"]\r\nlet skillAdvancements = [8, 7]\r\nlet talents = [\"Berserk Charge\", \"Careful Strike\", \"Strike to Injure\"]\r\nlet traits = [\"Flight (8)\", \"Fury\", \"Swarm\", \"Tracker\"]\r\nlet trappings = []\r\nlet items = [];\r\nlet spells = [];\r\n\r\nlet updateObj = this.actor.toObject();\r\n\r\nfor (let ch in characteristics)\r\n{\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n}\r\n\r\nfor (let index = 0; index < skills.length; index++)\r\n{\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n}\r\n\r\nfor (let talent of talents)\r\n{\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n}\r\n\r\nconst traitRegex = /(?:,?(.+?)(\\+?\\d{1,2}\\+?)?\\s*?(?:\\((.+?)\\)\\s*(\\+?\\d{1,2})?|,|$))/gm\r\nfor (let trait of traits)\r\n{\r\n let traitMatches = trait.matchAll(traitRegex).next().value\r\n let traitName = traitMatches[1]\r\n let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization\r\n let traitSpec = traitMatches[3]\r\n\r\n let traitItem;\r\n try {\r\n traitItem = await WFRP_Utility.findItem(traitName, \"trait\")\r\n }\r\n catch { }\r\n if (!traitItem) {\r\n ui.notifications.warn(`Could not find ${trait}`, {permanent : true})\r\n }\r\n traitItem = traitItem.toObject()\r\n\r\n if (Number.isNumeric(traitVal))\r\n {\r\n traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;\r\n traitItem.name = (traitItem.name + ` ${traitSpec ? \"(\"+ traitSpec + \")\" : \"\"}`).trim()\r\n }\r\n else \r\n traitItem.system.specification.value = traitSpec\r\n\r\n items.push(traitItem)\r\n\r\n}\r\n\r\nfor (let trapping of trappings) \r\n{\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n\r\n equip(trappingItem)\r\n\r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n}\r\n\r\nfor (let spell of spells) \r\n{\r\n let spellItem = await game.wfrp4e.utility.findItem(spell)\r\n if (spellItem)\r\n {\r\n spellItem = spellItem.toObject()\r\n\r\n items.push(spellItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${spell}`, {permanent : true})\r\n }\r\n}\r\n\r\nupdateObj.name = updateObj.name += \" \" + this.effect.name\r\n\r\nawait this.actor.update(updateObj)\r\nthis.actor.createEmbeddedDocuments(\"Item\", items);\r\n\r\n\r\nfunction equip(item)\r\n{\r\n if (item.type == \"armour\")\r\n item.worn = true\r\n else if (item.type == \"weapon\")\r\n item.equipped = true\r\n else if (item.type == \"trapping\" && item.trappingType?.value == \"clothingAccessories\")\r\n item.worn = true\r\n}","WiYtNU2Y5BJfIpeM":"let location = this.item.system.location.key;\r\n\r\nif (location)\r\n{\r\n let dropped = this.item.system.weaponsAtLocation;\r\n\r\n if (dropped.length)\r\n {\r\n this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(\", \")}!`)\r\n for(let weapon of dropped)\r\n {\r\n await weapon.system.toggleEquip();\r\n }\r\n }\r\n}","WJkwIrdj4NceOYe8":"return args.characteristic !== 'fel';","WKXyVHQwQCNTfSKv":"if ((args.item.type == \"weapon\" || args.item.system.attackType) && !args.item.isMagical )\r\n{\r\n args.item.system.qualities.value.push({name : \"magical\"})\r\n}","wkY4Uj2NjT8mQNT4":"args.item.system.damage.value = \"+6\";\r\nargs.item.system.qualities.value.push({name : \"magical\"});","WnWA0e0bgqBsZp2L":"this.item.update({\"system.twohanded.value\" : !this.item.system.twohanded.value})","Wo4wQKUxSItAhRzZ":"let lore = this.effect.name.split(\"(\")[1].split(\")\")[0].toLowerCase();\r\n\r\n// If channelling corresponding lore\r\nif (args.type == \"channelling\" && args.spell.system.lore.value == lore)\r\n args.prefillModifiers.slBonus += 3\r\n// If channelling or casting different lore\r\nelse if (args.spell.system.lore.value != lore && args.spell.system.lore.value != \"petty\")\r\n args.prefillModifiers.slBonus -= 1","WO5n7Vbx8AgoVrwC":" let characteristics = {\r\n \"ws\" : 0,\r\n \"bs\" : 0,\r\n \"s\" : 0,\r\n \"t\" : 0,\r\n \"i\" : 10,\r\n \"ag\" : 0,\r\n \"dex\" : 0,\r\n \"int\" : 10,\r\n \"wp\" : 5,\r\n \"fel\" : 5\r\n }\r\n let skills = [\"Intuition\", \"Lore (Local)\", \"Perception\"]\r\n let skillAdvancements = [10, 10, 10]\r\n let talents = []\r\n let trappings = [\"Mail Coat\", \"Mail Chausses\", \"Mail Coif\", \"Hand Weapon\"]\r\n let items = []\r\n\r\n let updateObj = this.actor.toObject();\r\n \r\n for (let ch in characteristics)\r\n {\r\n updateObj.system.characteristics[ch].modifier += characteristics[ch];\r\n }\r\n \r\n for (let index = 0; index < skills.length; index++)\r\n {\r\n let skill = skills[index]\r\n let skillItem;\r\n skillItem = updateObj.items.find(i => i.name == skill && i.type == \"skill\")\r\n if (skillItem)\r\n skillItem.system.advances.value += skillAdvancements[index]\r\n else \r\n {\r\n skillItem = await game.wfrp4e.utility.findSkill(skill)\r\n skillItem = skillItem.toObject();\r\n skillItem.system.advances.value = skillAdvancements[index];\r\n items.push(skillItem);\r\n }\r\n }\r\n \r\n for (let talent of talents)\r\n {\r\n let talentItem = await game.wfrp4e.utility.findTalent(talent)\r\n if (talentItem)\r\n {\r\n items.push(talentItem.toObject());\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${talent}`, {permanent : true})\r\n }\r\n }\r\n \r\n for (let trapping of trappings) \r\n {\r\n let trappingItem = await game.wfrp4e.utility.findItem(trapping)\r\n if (trappingItem)\r\n {\r\n trappingItem = trappingItem.toObject()\r\n \r\n equip(trappingItem)\r\n \r\n items.push(trappingItem);\r\n }\r\n else \r\n {\r\n ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})\r\n }\r\n }\r\n \r\n \r\n await this.actor.update(updateObj)\r\n this.actor.createEmbeddedDocuments(\"Item\", items);\r\n \r\n function equip(item)\r\n {\r\n if (item.type == \"armour\")\r\n item.system.worn.value = true\r\n else if (item.type == \"weapon\")\r\n item.system.equipped = true\r\n else if (item.type == \"trapping\" && item.system.trappingType.value == \"clothingAccessories\")\r\n item.system.worn = true\r\n }","WPQbVpD1uwSLAXq1":"if (this.actor.system.status.wounds.value == 0)\r\n{\r\n\tthis.actor.addCondition(\"dead\");\r\n}","Wqff6ICWYzvLDYC8":"if (this.actor.system.details.experience.current < 100) {\r\n return this.script.notification(game.i18n.localize(\"SCRIPT.NotEnoughXP\"))\r\n}\r\n\r\nlet item = await game.wfrp4e.utility.findItem(\"Sensory Sharing\", \"trait\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item]);\r\nlet expLog = foundry.utils.duplicate(this.actor.details.experience.log || []);\r\nexpLog.push({amount : 100, reason: item.name, spent: this.actor.details.experience.spent + 100, total: this.actor.details.experience.total, type: \"spent\"});\r\nthis.actor.update({\r\n \"system.details.experience.spent\": this.actor.details.experience.spent + 100,\r\n \"system.details.experience.log\": expLog\r\n });","WR0Kqn8CF5iwToak":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Tailor)';\r\nconst difficulty = 'difficult';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","WRe1eGmGVGejPcS8":"let wind = this.effect.name.split(\" \")[2]\r\nreturn args.type == \"cast\" && game.wfrp4e.config.magicWind[args.item.system.lore.value] == wind;","wRxgpGmlUpe7nwzJ":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 0,\r\n \"bright\": 0,\r\n \"angle\": 360,\r\n \"alpha\": 0.5,\r\n \"animation\": {\r\n \"speed\": 0,\r\n \"intensity\": 0,\r\n \"type\": \"none\",\r\n },\r\n \"color\": \"\",\r\n }}));","wS6OIR3QN4mOUHn0":"if (args.totalWoundLoss > args.actor.characteristics.t.bonus)\r\n{\r\n args.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\")).then(async test => {\r\n await test.roll()\r\n if (test.failed) {\r\n let disease = await fromUuid(\"Compendium.wfrp4e-core.items.M8XyRs9DN12XsFTQ\")\r\n disease = disease.toObject()\r\n disease.system.duration.active = true\r\n args.actor.createEmbeddedDocuments(\"Item\", [disease])\r\n }\r\n })\r\n}","wsqNM4NHnwaAAQym":" args.applyAP = false;\r\n\r\n this.script.scriptNotification(\"This test only applies to criminals, otherwise close the dialog.\");\r\n this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty : \"average\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => \r\n {\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n args.actor.addCondition(\"unconscious\");\r\n }\r\n });","WTRYAEzwxRuGENyI":" // Every living creature within 10 yards, other than the wielder of the hammer,\r\n // must make a Challenging (+0) Endurance Test \r\n\r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {\r\n skipTargets: true, appendTitle : \" - \" + this.effect.name,\r\n fields: {difficulty: \"challenging\"}\r\n })\r\n \r\n await test.roll();\r\n if (test.failed)\r\n {\r\n // or gain a Deafened Condition \r\n this.actor.addCondition(\"deafened\");\r\n // and suffer 1d10 Wounds which bypass armour but not Toughness Bonus.\r\n let damage = (await new Roll(\"1d10\").roll());\r\n await damage.toMessage(this.script.getChatData());\r\n this.script.scriptMessage(await this.actor.applyBasicDamage(damage.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg: true}))\r\n }","wUlYLBT59Efys5aS":"args.actor.addCondition(\"prone\");","WwxXgsNxlccmqTze":"this.actor.addCondition(\"dead\")","WY3DajPRGcMNt158":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.MVI0lXcg6vvtooAF\")\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item.toObject()], {fromEffect : this.effect.id})","wyTCozh9qGTx6yK0":"if (args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\"))\r\n{\r\n\targs.abort = true;\r\n\tthis.script.scriptNotification(\"Does not need to make Fear or Terror tests\");\r\n}","wzkxiKjxVEeNS1di":"let roll = await new Roll(\"1d10\").roll();\r\nthis.script.scriptMessage(await this.actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true}))\r\n\r\nawait this.actor.addCondition(\"deafened\", 3)\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields : {difficulty: \"average\" }, skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"Gain a Broken Condition\", success : \"Avoided Broken Condition\"}})\r\nawait test.roll();\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"broken\")\r\n}","WzMmwjZbhyCbHxyZ":"this.actor.status.encumbrance.state += 2\r\nthis.actor.status.encumbrance.pct = 100;","X08401eOhKJrhNf1":"const grim = this.actor.items.find(i => i.type === \"trait\" && i.name.includes(\"Grim\"));\r\n\r\nif (args.options?.deltaAdv > 0 && this.actor.hasCondition(\"engaged\") && grim.specification.value !== 4) {\r\n grim.update({\"system.specification.value\": 4});\r\n}\r\n\r\nif (!this.actor.hasCondition(\"engaged\") && grim.specification.value !== 2) {\r\n grim.update({\"system.specification.value\": 2});\r\n}","x2RLUUNB7BiIDYCP":"\r\n let difficulty = \"\"\r\n if (this.effect.name.includes(\"Moderate\"))\r\n difficulty = \"easy\"\r\n else if (this.effect.name.includes(\"Severe\"))\r\n difficulty = \"average\"\r\n else\r\n difficulty = \"veasy\"\r\n \r\n let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {context : {failure : this.actor.name + \" dies from Blight\"}, fields: {difficulty}, skipTargets: true, appendTitle : \" - Blight\"})\r\n await test.roll();\r\n if (test.failed)\r\n {\r\n this.actor.addCondition(\"dead\");\r\n }\r\n ","X3bLbOfcJAftOMa7":"return [\"ws\", \"bs\", \"ag\"].includes(args.characteristic)","X3vpmNUj9SL2CDnF":"let item = args.actor.items.find(i => i.name.includes(\"Flying Jib\"));\r\nitem.name += ` (Disabled by ${this.item.name})`;","x76tKw4L8dX00ikE":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3\")\r\nlet data = item.toObject();\r\nsetProperty(data, \"flags.wfrp4e.breath\", \"fire\")\r\ndata.system.specification.value = 5\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","X7ikFOGKYzTMr4d1":"args.fields.difficulty = \"difficult\"","x8XK2fzzXCnSwfjt":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Athletics\"))\r\nawait test.roll();\r\n\r\nif (test.succeeded)\r\n{\r\n\tthis.actor.removeCondition(\"prone\");\r\n}","x9G6Du5EWV6byf4C":"if (parseInt(this.effect.sourceTest.result.SL) >= 3)\r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus * 2)\r\n}\r\nelse \r\n{\r\n this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)\r\n}","x9iKFYYc4Ocy8PTS":"let item = this.effect.getCreatedItems()?.[0];\r\nChatMessage.create({content : \"Grace is beyond style\", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})\r\n\r\nlet choice = await ItemDialog.create(ItemDialog.objectToArray({\r\n \"nobles\" : \"Nobles\",\r\n \"guilders\" : \"Guilders\",\r\n \"servants\" : \"Servants\"\r\n}), 1, \"Choose Group\")\r\n\r\nlet name = choice[0]?.name\r\n\r\nif (!name)\r\n{\r\n return;\r\n}\r\n\r\nif (item)\r\n{\r\n item.update({\r\n name : item.name.split(\"(\")[0] + ` (${name})`, \r\n \"system.tests.value\" : item.system.tests.value.split(\"(\")[0] + ` (${name}`\r\n })\r\n}\r\nelse \r\n{\r\n item = await fromUuid(\"Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP\");\r\n let data = item.toObject();\r\n data.name += ` (${name})`\r\n this.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect: this.effect.id})\r\n}","xBpLQa7yBPczDMY8":" let scythe = (await fromUuid(\"Compendium.wfrp4e-core.items.CXg7XOFJwu4LZ9LM\")).toObject();\r\n scythe.name = \"Scythe of Shyish\";\r\n scythe.system.damage.value = \"WPB + 3\"\r\n scythe.system.equipped = true;\r\n scythe.img = this.effect.icon;\r\n scythe.system.qualities.value.push({name : \"magical\"})\r\n this.actor.createEmbeddedDocuments(\"Item\", [scythe], {fromEffect : this.effect.id})","XCAfy460IotarQek":"return false;","XClTZOjuhcxWLF51":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Endurance\"), {fields: {difficulty: \"difficult\"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})\r\nawait test.roll();\r\n\r\nif (test.failed)\r\n{\r\n this.actor.addCondition(\"stunned\")\r\n}\r\n\r\n\r\nlet item = await fromUuid(\"Compendium.wfrp4e-core.items.4lj1ik958mbgAlaF\")\r\nlet data = item.toObject();\r\ndata.system.location.key = this.item.system.location.key\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})\r\n","XcvDYNZgJ2rpAdDV":"\r\n let fatigued = this.actor.hasCondition(\"fatigued\")\r\n if (!fatigued)\r\n {\r\n this.actor.addCondition(\"fatigued\")\r\n ui.notifications.notify(\"Fatigued added to \" + this.actor.name + \" which cannot be removed until the Malaise symptom is gone.\")\r\n }","xcy5GOUSZ0meIejZ":"if (args.test.isFumble)\r\n{\r\n args.test.result.other.push(\"@Table[warp-grinder-fumble]\")\r\n}","Xe8ijqWU3bbtq7ZY":"if (args.opposedTest.defenderTest.actor.Species.toLowerCase().includes(\"skaven\"))\r\n{\r\n args.addImpact = true;\r\n args.opposedTest.result.other.push(\"Impact against Skaven\")\r\n}","Xf4FcZ4ZLdWmOXBa":"return args.skill?.name != game.i18n.localize(\"NAME.Perception\") && !args.skill?.name.includes(game.i18n.localize(\"NAME.Stealth\"));","XfRvVBTVIuAm8RaZ":"return args.item?.name != game.i18n.localize(\"NAME.CharmAnimal\")","Xg4qHLsyXGuUZfT8":"this.actor.hasCondition(\"ablaze\")?.delete();","xgdhf0wlNP2cHIQx":"await this.actor.addCondition(\"entangled\", this.effect.sourceTest.result.overcast.usage.other.current)","xgplXZMs459X7XXM":"// Apply changes when the mask is worn\r\n\r\nif (args.equipped) { \r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [this.item.effects.contents[1]?.convertToApplied()]) \r\n this.script.scriptMessage(`${this.actor.name} dons the ${this.item.name}.${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\nmsg += `${await this.actor.applyBasicDamage(8, {loc : \"roll\", suppressMsg: true, hideDSN: true})}
`\r\n\r\nthis.script.scriptMessage(msg);","YOKoZFlBEpFavfOS":"return args.type == \"channelling\"","yPxYRObUiqAIhlNB":"this.actor.system.status.encumbrance.max += 1","YQ2LnLxp0xgy3meI":"if (args.test.preData.options?.corruption && args.test.failed) {\r\n args.test?.result?.other.push(\"Gain additional +1 Corruption from \" + this.effect.name)\r\n}","yQziCK8G8I1RYkTj":"let add;\r\nif (args.opposedTest?.attackerTest?.weapon?.isRanged && args.opposedTest?.result.hitloc?.value === \"head\") {\r\n add = await Dialog.confirm({title : this.effect.name, content : \"Add 1 AP? Bascinet provides 4 AP instead of 3 against missile attacks from the front\"})\r\n}\r\n\r\nif (add) {\r\n\r\n args.modifiers.ap.metal++;\r\n args.modifiers.ap.used++;\r\n args.modifiers.ap.value++;\r\n args.modifiers.ap.details.push(\"+1 AP against missile attacks to the front\");\r\n}","yr1FmaTY18JXWa8s":"return [\"witchcraft\", \"necromancy\", \"daemonology\", \"slaanesh\", \"nurgle\", \"tzeentch\", \"undivided\"].includes(args.spell?.system.lore.value);","yRRzSKlcN3L7rEEe":"return args.skill?.name.includes(game.i18n.localize(\"NAME.Entertain\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Perform\")) || args.skill?.name.includes(game.i18n.localize(\"NAME.Play\"));","YRUTliBzAQvncGNX":"this.actor.addCondition(\"fatigued\");\r\nthis.script.scriptNotification(\"Added Fatigued\")","YsS2RZsl2ZsqjhWV":"return !args.fields.charging","yTmRoUstxHMso91c":"if (args.item.name == \"Magic Resistance\" && args.item.type == \"trait\")\r\n{\r\n args.item.system.specification.value = Number(args.item.system.specification.value) + 1\r\n}","YwLEw4BiKq4EMy57":"let i_gain = (await new Roll(\"2d10\").roll()).total\r\nlet fel_gain = 0\r\nif (args.actor.characteristics.fel.value <= 0)\r\n{\r\n fel_gain += (await new Roll(\"2d10\").roll()).total\r\n}\r\n\r\nlet msg = `${this.actor.prototypeToken.name} gains ${i_gain} Intelligence`\r\n\r\nif (fel_gain)\r\n msg += ` and ${fel_gain} Fellowship`\r\n\r\n\r\nlet newInt = i_gain + args.actor.characteristics.int.modifier\r\nlet newFel = fel_gain + args.actor.characteristics.fel.modifier\r\n\r\nargs.actor.update({\"system.characteristics.int.modifier\" : newInt, \"system.characteristics.fel.modifier\" : newFel})\r\n\r\nthis.script.scriptMessage(msg)","yXUPiWuQ5o0JBY4i":"return args.skill?.name == game.i18n.localize(\"Endurance\") || args.characteristic == \"int\"","YyKU2rIRmFSCqSlW":"let newEffect = this.effect.sourceItem.effects?.contents[1]\r\n\r\nif (newEffect)\r\n{\r\n this.actor.createEmbeddedDocuments(\"ActiveEffect\", [newEffect.convertToApplied()]);\r\n}","YySjPfSAPdMAfjsh":"let talents = [\"Berserk Charge\", \"Combat Aware\", \"Combat Reflexes\", \"Furious Assault\", \"Implacable\", \"Magic Resistance\", \"Resistance (Magic)\", \"Resolute\", \"Strike Mighty Blow\", \"Warrior Born\"];\r\nlet currentCareer = this.actor.system.currentCareer;\r\n\r\nif (!currentCareer) return;\r\n\r\nfor (let talent of talents) {\r\n if (currentCareer.system.talents.includes(talent))\r\n continue;\r\n currentCareer.system.talents.push(talent);\t\r\n}\r\n\r\n","yzN7ZNlgCiSVJqsU":"let sourceItem = this.effect.sourceItem;\r\n\r\nif (sourceItem)\r\n{\r\n\tthis.actor.applyEffect({effectUuids : [sourceItem.effects.contents[1].uuid]})\r\n\tthis.script.scriptNotification(\"Angewandt nach Effekten\");\r\n}","z14Tb2YKCjiE5ZTU":"this.actor.getActiveTokens().forEach(t => t.document.update({light : {\r\n \"dim\": 30,\r\n \"bright\": 20,\r\n \"angle\": 90,\r\n \"alpha\": 0.6,\r\n \"animation\": {\r\n \"speed\": 3,\r\n \"intensity\": 3,\r\n \"type\": \"torch\",\r\n },\r\n \"color\": \"#ffcc66\",\r\n }}));","Z1zriXibT0mAmdhb":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.BqPZn6q3VHn9HUrW\")\r\nitem = item.toObject()\r\nitem.name = this.effect.name\r\nitem.system.specification.value = this.actor.characteristics.s.bonus\r\nitem.system.description.value = \"\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [item], {fromEffect : this.effect.id})","Z30zYayPryXOjT5N":"args.item.system.damage.value = \"SB + 6\";","Z41L3MwOpJdAjVaj":"if (args.actorsystem.details.move.sail.value > 0)\r\n args.actor.system.details.move.sail.value -= 2;\r\n","Z4WrrlVGpPY4iUbG":"await this.actor.addCondition(\"ablaze\")","Z52yZDm6lP6fOP3O":"let ablaze = this.actor.hasCondition(\"ablaze\")\r\nif (ablaze)\r\n{\r\n this.script.scriptNotification(\"Immune to Ablaze\");\r\n ablaze.delete()\r\n}","z5HfNUrHy5MS3K7a":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context : {failure: \"1 Corruption Point Gained\"}})\r\nawait test.roll();\r\nif (test.failed && this.actor.type == \"character\")\r\n{\r\n this.actor.update({\"system.status.corruption.value\" : parseInt(this.actor.status.corruption.value) + 1})\r\n this.script.scriptMessage(\"Erhält einen Korruptionspunkt\", {whisper : ChatMessage.getWhisperRecipients(\"GM\")})\r\n}","Z6jNlyZMECkW4Hon":"let spells = await warhammer.utility.findAllItems(\"spell\", \"Loading Spells\", true);\r\n\r\nlet choice = await ItemDialog.create(spells, 1);\r\n\r\nif (choice[0])\r\n{\r\n this.script.scriptMessage(`Chose @UUID[${choice[0].uuid}]{${choice[0].name}}`)\r\n let spell = (await fromUuid(choice[0].uuid)).toObject(); // Might be an index so retrieve item object for sure\r\n setProperty(spell, \"flags.wfrp4e.boonOfTzeentch\", true);\r\n spell.system.wind.value = \"Channelling (Dhar)\";\r\n spell.system.memorized.value = true;\r\n this.actor.createEmbeddedDocuments(\"Item\", [spell], {fromEffect: this.effect.id})\r\n}","Z6OmmC0irJzxSnMH":"let chatData = { whisper: ChatMessage.getWhisperRecipients(\"GM\") }\r\nlet message = \"\"\r\n\r\nlet wounds = duplicate(this.actor.status.wounds)\r\nlet regenRoll = await new Roll(\"1d10\").roll();\r\nlet regen = regenRoll.total;\r\n\r\nif (wounds.value >= wounds.max)\r\n return\r\n\r\nif (wounds.value > 0) \r\n{\r\n wounds.value += regen\r\n if (wounds.value > wounds.max)\r\n {\r\n wounds.value = wounds.max\r\n }\r\n message += `${this.actor.name} regains ${regen} Wounds.`\r\n\r\n if (regen == 10)\r\n {\r\n message += `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'easy';\r\nconst target = 10;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZCkYe5XMVY1RWMXG":"args.options.wallcrawler = true;","ZCrfdLPOxiNDCDSg":"this.actor.effects.get(this.effect.id).delete(); // can't use this.effect because it thinks it's parent is the item, but it actually is the actor","ZCuOjLAeENKN1Q4L":"let halve;\r\nif (args.opposedTest.attackerTest.item?.type != \"spell\")\r\n{\r\n halve = await Dialog.confirm({title : this.effect.name, content : \"Halve Damage? (Halves Damage from all fire)\"})\r\n}\r\nelse\r\n{\r\n halve = args.opposedTest.attackerTest.item?.system.lore?.value == \"fire\";\r\n}\r\n\r\nif (halve)\r\n{\r\n args.totalWoundLoss /= 2;\r\n args.modifiers.other.push({label : this.effect.name, details : \"Halved\", value : \"× 0.5\"})\r\n}","zdGAvfL7zJ7wpYxG":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpenter)';\r\nconst difficulty = 'easy';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZdHvGvSJBsIuPphF":"return !args.fields.dualWielding && !args.options.dualWieldOffhand","Ze9E2zR1GFGWGMVH":"return [\"Pick Lock\", \"Sleight of Hand\", \"Channelling (Ulgu)\"].includes(args.skill?.name)","ZEdDcBka21rnMuz5":"let initiativeSetting = game.settings.get(\"wfrp4e\", \"initiativeRule\")\r\n\r\nswitch (initiativeSetting) {\r\n case \"default\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"sl\":\r\n args.initiative += \"+1\"\r\n break;\r\n\r\n case \"d10Init\":\r\n args.initiative += \"+10\"\r\n break;\r\n\r\n case \"d10InitAgi\":\r\n args.initiative += \"+1\"\r\n break;\r\n}","ZEXhYJqqxF6QAixX":"return args.options.terror || args.extendedTest?.getFlag(\"wfrp4e\", \"fear\");","zFYCaGR0wbFWjl4T":"return args.skill?.name != game.i18n.localize(\"NAME.OutdoorSurvival\");","ZgF1sYdbAKaOuHmK":"return args.skill?.name !== game.i18n.localize(\"NAME.Charm\");","ZGlJnrIemqul24j7":"let infected = await fromUuid(\"Compendium.wfrp4e-core.items.V0c3qBU1CMm8bmsW\")\r\nlet bite = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet biteData = bite.toObject();\r\nlet infectedData = infected.toObject();\r\n\r\nbiteData.system.specification.value = 4 - this.actor.characteristics.s.bonus\r\n\r\nthis.actor.createEmbeddedDocuments(\"Item\", [biteData, infectedData], {fromEffect : this.effect.id})","ZhuitY1KOU1Xe7cP":"return !args.weapon?.system.properties.qualities.pummel","ZI2YnAAGoLpmVDIL":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.aE3pyW20Orvdjzj0\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = \"Religion\"\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zi8Z3NlwVj3IfgAW":"if (this.item.system.quantity.value)\r\n{\r\n\tthis.item.system.reduceQuantity();\r\n\tlet actor = Array.from(game.user.targets)[0]?.actor || this.actor;\r\n\tactor.applyEffect({effectData : [this.item.effects.contents[3].convertToApplied()]})\r\n}\r\nelse\r\n{\r\n\tthis.script.scriptNotification(\"Nichts übrig!\", \"error\")\r\n}","ziG9H5Kdb7xC3dFE":"return !args.skill?.name.includes(game.i18n.localize(\"NAME.Art\"));","ZJy2rvpKmUHXGrAi":"args.actor.details.move.run *= 1.5","zK38Rl5t9zbFi4Se":"if (args.opposedTest.result.hitloc.value == this.item.system.location.key && args.totalWoundLoss > 0)\r\n{\r\n args.actor.addCondition(\"bleeding\", 1);\r\n this.script.scriptNotification(\"Blutend hinzugefügt\")\r\n}","zk44dFEGkylB7kW6":" let modifier; let target = args.data.targets[0]\r\n if (target.actor.details.size.value == \"tiny\")\r\n modifier = 30\r\n if (target.actor.details.size.value == \"ltl\")\r\n modifier = 20\r\n if (target.actor.details.size.value == \"sml\")\r\n modifier = 10\r\n\t\r\n args.fields.modifier += (modifier || 0); // Offset size modifier ","zkc1gIPLj0VoAONT":"let AP = args.actor.status.armour;\r\n\r\nAP[\"head\"].value += 2;\r\nAP[\"rArm\"].value += 2;\r\nAP[\"lArm\"].value += 2;\r\nAP[\"body\"].value += 2;\r\nAP[\"lLeg\"].value += 2;\r\nAP[\"rLeg\"].value += 2;","zL7ECmBBMAqf5Esn":"let hasMagazine = await Dialog.confirm({content: \"Does the vessel have a magazine or any other kind of store for blackpowder?
\"});\r\n\r\nif (!hasMagazine) return;\r\n\r\nlet roll = new Roll(\"d10\");\r\nawait roll.evaluate();\r\n// await roll.toMessage();\r\nlet anchor = roll.toAnchor();\r\n\r\nlet crits = [];\r\n\r\nfor (let i = 0; i < roll.total; i++) {\r\n let result = await WFRP_Tables.rollTable('crithull');\r\n let collection = game.packs.get(result.object.documentCollection)\r\n\r\n if (collection)\r\n await collection.getDocuments()\r\n\r\n if (!collection)\r\n collection = game.items;\r\n\r\n let item = collection.get(result.object.documentId)\r\n if (item)\r\n crits.push(item);\r\n}\r\n\r\nconst items = await this.actor.createEmbeddedDocuments(\"Item\", crits);\r\nconst speaker = ChatMessage.getSpeaker({actor: this.actor});\r\nconst uuids = items.map(i => `@UUID[${i.uuid}]`);\r\nthis.script.scriptMessage(`${this.item.name} caused an additional ${anchor.outerHTML} Critical Hits to the Hull!
${await this.actor.applyBasicDamage(3, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP})}
`\r\n}\r\n\r\nthis.script.scriptMessage(msg);","zR4WAjzXHTZuiu5G":"let actor = this.actor;\r\n let effect = this.effect;\r\n let bleedingAmt;\r\n let bleedingRoll;\r\n let msg = \"\"\r\n\r\n let damage = effect.conditionValue;\r\n let scriptArgs = {msg, damage};\r\n await Promise.all(actor.runScripts(\"preApplyCondition\", {effect, data : scriptArgs}))\r\n msg = scriptArgs.msg;\r\n damage = scriptArgs.damage;\r\n msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})\r\n\r\n if (actor.status.wounds.value == 0 && !actor.hasCondition(\"unconscious\"))\r\n {\r\n await actor.addCondition(\"unconscious\")\r\n msg += \"Finished repairing ${this.item.name}.
`;\r\nconst test = 'Trade (Carpentry)';\r\nconst difficulty = 'difficult';\r\nconst target = 30;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","zsiV6XEHlCNGLLPl":"return args.skill?.name == game.i18n.localize(\"NAME.SetTrap\");","ZsOHDb7XwmuUUWPL":"return args.characteristic === 'fel';","zsoTVkHe4nHY1M52":"this.script.scriptMessage(await this.actor.applyBasicDamage(10 + parseInt(this.effect.sourceTest.result.SL), {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP}))","ZsQR3AVKi0v5U593":"args.actor.addCondition(\"ablaze\", 2)","ZTE8LdRblyG4yYoE":"if (args.test.result.castOutcome == \"success\")\r\n{\r\n // Wait till after chat card is posted\r\n game.wfrp4e.utility.sleep(500).then(() => {\r\n game.wfrp4e.utility.postTerror(1, this.effect.name)\r\n game.wfrp4e.utility.postTerror(2, this.effect.name)\r\n })\r\n}","ztIkD5Zt6ko9D4Ca":"args.fields.modifier -= 10","ZuoIVv3nmlGhhdx0":"let rating = parseInt(this.effect.name.match(/\\d+/)?.[0]) || 1;\r\nlet holed = this.actor.flags.holed || {holed: 0};\r\nholed.holed += rating;\r\nthis.actor.flags.holed = holed;\r\n","zUv9e0A3OEXWY9Mv":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 9 - this.actor.system.characteristics.s.bonus\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","ZvbBM4gTJHPdU8jU":"let test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nreturn test.failed","zxG5KbliWE9xWNQD":"this.script.message(\"Überspring automatisch jede \" + this.script.label);\r\nargs.abort = true;","Zxh4RAENoaAQAaNg":"return !this.actor.flags.useless.rEye || !this.actor.flags.useless.lEye || [\"wp\", \"t\", \"s\"].includes(args.characteristic)","zXh8rgMxWoCLTxVd":"const repaired_message = `Finished repairing ${this.item.name}.
`;\r\nconst test = 'Sail';\r\nconst difficulty = 'challenging';\r\nconst target = 40;\r\n\r\nconst extendedTestData = {\r\n name: this.item.name,\r\n type: \"extendedTest\",\r\n img: this.item.img,\r\n system: {\r\n SL: {\r\n current: 0,\r\n target: target\r\n },\r\n test: {\r\n value: test\r\n },\r\n completion: {\r\n value: \"remove\"\r\n },\r\n difficulty: {\r\n value: difficulty\r\n }\r\n },\r\n effects: [\r\n {\r\n name: `Repair the ${this.item.name}`,\r\n icon: this.item.img,\r\n flags: {\r\n wfrp4e: {\r\n applicationData: {\r\n type: \"document\",\r\n documentType: \"Item\"\r\n },\r\n scriptData: [\r\n {\r\n label: this.item.name,\r\n script: `\r\n let id = this.item.flags.wfrp4e.fromEffect;\r\n let effect = this.actor.appliedEffects.find(e => e.id === id);\r\n this.script.scriptMessage(\"${repaired_message}\");\r\n await effect.item.delete();\r\n `,\r\n trigger: \"deleteEffect\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n};\r\n\r\nawait this.actor.createEmbeddedDocuments(\"Item\", [extendedTestData], {fromEffect: this.effect.id});\r\n","ZxtOdwsM2Sqj9Zam":"let item = await fromUuid(\"Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM\")\r\nlet data = item.toObject();\r\ndata.system.specification.value = 0\r\ndata.name = this.effect.name;\r\nthis.actor.createEmbeddedDocuments(\"Item\", [data], {fromEffect : this.effect.id})","zY4ZjY7uyKIKMYmX":"this.script.scriptMessage(await game.wfrp4e.tables.formatChatRoll(\"fleshy-curse\"))\r\n\r\nlet test = await this.actor.setupSkill(game.i18n.localize(\"NAME.Cool\"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : \"hard\"}})\r\nawait test.roll();\r\nif (test.succeeded)\r\n{\r\n this.effect.delete()\r\n}","ZYsMgB4BwXBJcpYf":"// The wearer of the cloak causes Fear 2 \r\n// in Wolves, Lions, Goats, and Chimeras.\r\ngame.wfrp4e.utility.postFear(2, this.effect.name)\r\n","zzk2uRSFjFHB5kjw":"\r\n let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)\r\n if (args.test.isFumble && roll == 1 && !args.test.result.misfire)\r\n {\r\n args.test.result.misfire = game.i18n.localize(\"Misfire\") + \" (Rolled 1)\"\r\n args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)\r\n }\r\n else if (args.test.isFumble && roll != 1)\r\n args.test.result.other.push(\"Misfire Roll: \" + roll)"}); } \ No newline at end of file diff --git a/python/upload_GPT_chrome.py b/python/upload_GPT_chrome.py new file mode 100644 index 0000000..e932a0c --- /dev/null +++ b/python/upload_GPT_chrome.py @@ -0,0 +1,143 @@ +import os +import json +import time +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.chrome.service import Service +from selenium.webdriver.chrome.options import Options + +# Verzeichnisse +input_file = "wfrp4e-eis-actors-extracted.json" +split_directory = "actors_split" +translated_directory = "actors_split_translated" +merged_file_path = "wfrp4e-eis-actors-merged.json" +os.makedirs(split_directory, exist_ok=True) +os.makedirs(translated_directory, exist_ok=True) + +# Pfad zu deinem Chrome Profil (anpassen) +chrome_profile_path = "C:\Users\Alzer\AppData\Local\Google\Chrome\User Data\Default" +cookie_file = "chrome_cookies.json" + +# Geckodriver-Pfad (anpassen, falls nötig) +chromedriver_path = "/Pfad/zu/deinem/chromedriver" + +# Schritt 1: Datei in Einträge aufteilen +try: + with open(input_file, 'r', encoding='utf-8') as file: + data = json.load(file) + + print(f"{len(data)} Einträge gefunden. Aufteilen der Datei...") + + for actor_id, actor_data in data.items(): + # Eintrag speichern + split_file_path = os.path.join(split_directory, f"{actor_id}.json") + with open(split_file_path, 'w', encoding='utf-8') as split_file: + json.dump({actor_id: actor_data}, split_file, ensure_ascii=False, indent=4) + + print(f"Datei in {len(data)} Einträge aufgeteilt.") + +except FileNotFoundError as e: + print(f"Fehler beim Laden der Datei: {e}") + exit(1) + +except json.JSONDecodeError as e: + print(f"Fehler beim Dekodieren der JSON-Datei: {e}") + exit(1) + +# Schritt 2: Automatisierter Upload und Download +try: + # Chrome-Optionen + options = Options() + options.add_argument(f"--user-data-dir={chrome_profile_path}") + options.add_argument("--profile-directory=Default") + options.add_argument("--disable-blink-features=AutomationControlled") + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + options.headless = False # Setze auf True, wenn du den Browser nicht sehen willst + + # Webdriver starten + service = Service(chromedriver_path) + driver = webdriver.Chrome(service=service, options=options) + + driver.get("https://chat.openai.com/") + + # Cookies importieren, falls vorhanden + if os.path.exists(cookie_file): + with open(cookie_file, "r") as file: + cookies = json.load(file) + for cookie in cookies: + driver.add_cookie(cookie) + print("✅ Cookies importiert.") + + driver.get("https://chat.openai.com/") + + # Cookies speichern (nur beim ersten Mal notwendig) + if not os.path.exists(cookie_file): + time.sleep(30) # Wartezeit für manuelles Einloggen + with open(cookie_file, "w") as file: + json.dump(driver.get_cookies(), file) + print("✅ Cookies gespeichert.") + + translated_entries = {} + for file_name in os.listdir(split_directory): + if file_name.endswith(".json"): + file_path = os.path.abspath(os.path.join(split_directory, file_name)) + + try: + # Datei-Upload starten + upload_button = driver.find_element(By.XPATH, "//input[@type='file']") + upload_button.send_keys(file_path) + print(f"✅ Datei hochgeladen: {file_name}") + + # Warte auf die Verarbeitung (anpassen je nach Dateigröße) + time.sleep(30) + + # Übersetzten Inhalt extrahieren + translated_text = driver.page_source + + # Datei speichern + translated_file_path = os.path.join(translated_directory, file_name) + with open(translated_file_path, 'w', encoding='utf-8') as out_file: + out_file.write(translated_text) + + print(f"✅ Übersetzte Datei gespeichert: {file_name}") + + # Eintrag zum zusammenführen vorbereiten + with open(translated_file_path, 'r', encoding='utf-8') as translated_file: + try: + translated_entry = json.load(translated_file) + translated_entries.update(translated_entry) + except json.JSONDecodeError as e: + print(f"❌ Fehler beim Laden der Datei {file_name}: {e}") + + except Exception as e: + print(f"❌ Fehler beim Datei-Upload: {e}") + +except Exception as e: + print(f"❌ Fehler beim Starten des Chrome-Browsers: {e}") + exit(1) + +finally: + # Browser schließen, auch bei Fehlern + try: + driver.quit() + print("✅ Browser geschlossen.") + except NameError: + print("⚠️ Kein aktiver Browser gefunden.") + +# Schritt 3: Validierung und Zusammenführung +print("🔍 Überprüfe und zusammenführe die übersetzten Einträge...") +valid_entries = {} +for entry_id, entry_data in translated_entries.items(): + try: + # Überprüfung der JSON-Integrität + json.dumps(entry_data) + valid_entries[entry_id] = entry_data + except (TypeError, ValueError) as e: + print(f"❌ Ungültiger Eintrag ({entry_id}): {e}") + +# Gesamte Datei zusammenführen und speichern +with open(merged_file_path, 'w', encoding='utf-8') as merged_file: + json.dump(valid_entries, merged_file, ensure_ascii=False, indent=4) + +print(f"✅ Zusammengeführte Datei gespeichert: {merged_file_path}")